From 1d9a2cf817fd1a821e081a50f1671aa2c9285275 Mon Sep 17 00:00:00 2001 From: Rene Date: Mon, 11 Jul 2022 11:20:58 +0200 Subject: [PATCH] improve initialization and types --- config/rollup/pipeline.build.js | 32 +- package.json | 6 +- .../dist/overlayscrollbars.esm.js | 3869 +++++++-------- .../dist/overlayscrollbars.esm.js.map | 2 +- .../dist/overlayscrollbars.esm.min.js | 2 +- .../dist/overlayscrollbars.js | 4226 +++++++++-------- .../dist/overlayscrollbars.js.map | 2 +- .../dist/overlayscrollbars.min.js | 2 +- packages/overlayscrollbars/src/environment.ts | 87 +- .../overlayscrollbars/src/eventListeners.ts | 59 - .../overlayscrollbars/src/initialization.ts | 87 + packages/overlayscrollbars/src/options.ts | 10 +- .../src/overlayscrollbars.ts | 108 +- .../optionsValidation/optionsValidation.ts | 8 +- .../src/setups/scrollbarsSetup/index.ts | 1 + .../scrollbarsSetup.elements.ts | 28 +- .../scrollbarsSetup.initialization.ts | 27 + .../setups/scrollbarsSetup/scrollbarsSetup.ts | 4 +- .../overlayscrollbars/src/setups/setups.ts | 9 +- .../src/setups/structureSetup/index.ts | 1 + .../structureSetup/structureSetup.elements.ts | 97 +- .../structureSetup.initialization.ts | 38 + .../setups/structureSetup/structureSetup.ts | 11 +- .../src/support/dom/manipulation.ts | 21 +- .../src/support/eventListeners.ts | 114 +- packages/overlayscrollbars/src/typings.ts | 53 - .../structureSetup.elements.test.ts | 43 +- .../playwright/environment/index.test.ts | 4 +- .../structureSetup/update/index.browser.ts | 4 +- .../types/overlayscrollbars.d.ts | 246 +- yarn.lock | 55 +- 31 files changed, 4502 insertions(+), 4754 deletions(-) delete mode 100644 packages/overlayscrollbars/src/eventListeners.ts create mode 100644 packages/overlayscrollbars/src/initialization.ts create mode 100644 packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.initialization.ts create mode 100644 packages/overlayscrollbars/src/setups/structureSetup/structureSetup.initialization.ts diff --git a/config/rollup/pipeline.build.js b/config/rollup/pipeline.build.js index ba22bd4..ee56fee 100644 --- a/config/rollup/pipeline.build.js +++ b/config/rollup/pipeline.build.js @@ -27,14 +27,10 @@ const createOutputWithMinifiedVersion = (output, esm, buildMinifiedVersion) => rollupTerser({ ecma: esm ? 2015 : 5, safari10: true, - mangle: { - safari10: true, - properties: { - regex: /^_/, - }, - }, compress: { evaluate: false, + module: !!esm, + passes: 3, }, }), ], @@ -63,6 +59,30 @@ 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/package.json b/package.json index 94fdd36..f5f95e3 100644 --- a/package.json +++ b/package.json @@ -55,11 +55,11 @@ "rollup-plugin-scss": "^3.0.0", "rollup-plugin-serve": "^1.1.0", "rollup-plugin-styles": "^3.10.0", - "rollup-plugin-terser": "^6.1.0", - "rollup-plugin-ts": "^3.0.1", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-ts": "^3.0.2", "should": "^13.2.3", "tslib": "^2.4.0", - "typescript": "^4.7.3", + "typescript": "^4.7.4", "utf-8-validate": "^5.0.2" }, "scripts": { diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index 88a3856..97fe696 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -1,2249 +1,1992 @@ -function createCache(options, update) { - const { - _initialValue, - _equal, - _alwaysUpdateValues - } = options; - let _value = _initialValue; - - let _previous; - - const cacheUpdateContextual = (newValue, force) => { - const curr = _value; - const newVal = newValue; - const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal); - - if (changed || _alwaysUpdateValues) { - _value = newVal; - _previous = curr; +function createCache(t, n) { + const {o, u: e, _: s} = t; + let c = o; + let i; + const cacheUpdateContextual = (t, n) => { + const o = c; + const r = t; + const a = n || (e ? !e(o, r) : o !== r); + if (a || s) { + c = r; + i = o; } - - return [_value, changed, _previous]; + return [ c, a, i ]; }; - - const cacheUpdateIsolated = force => cacheUpdateContextual(update(_value, _previous), force); - - const getCurrentCache = force => [_value, !!force, _previous]; - - return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache]; + const cacheUpdateIsolated = t => cacheUpdateContextual(n(c, i), t); + const getCurrentCache = t => [ c, !!t, i ]; + return [ n ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache ]; } -const ElementNodeType = Node.ELEMENT_NODE; -const { - toString, - hasOwnProperty: hasOwnProperty$1 -} = Object.prototype; -function isUndefined(obj) { - return obj === undefined; +function isUndefined(t) { + return void 0 === t; } -function isNull(obj) { - return obj === null; -} -const type = obj => isUndefined(obj) || isNull(obj) ? `${obj}` : toString.call(obj).replace(/^\[object (.+)\]$/, '$1').toLowerCase(); -function isNumber(obj) { - return typeof obj === 'number'; -} -function isString(obj) { - return typeof obj === 'string'; -} -function isBoolean(obj) { - return typeof obj === 'boolean'; -} -function isFunction(obj) { - return typeof obj === 'function'; -} -function isArray(obj) { - return Array.isArray(obj); -} -function isObject(obj) { - return typeof obj === 'object' && !isArray(obj) && !isNull(obj); -} -function isArrayLike(obj) { - const length = !!obj && obj.length; - const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; - return isArray(obj) || !isFunction(obj) && lengthCorrectFormat ? length > 0 && isObject(obj) ? length - 1 in obj : true : false; -} -function isPlainObject(obj) { - if (!obj || !isObject(obj) || type(obj) !== 'object') return false; - let key; - const cstr = 'constructor'; - const ctor = obj[cstr]; - const ctorProto = ctor && ctor.prototype; - const hasOwnConstructor = hasOwnProperty$1.call(obj, cstr); - const hasIsPrototypeOf = ctorProto && hasOwnProperty$1.call(ctorProto, 'isPrototypeOf'); - if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) { +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 o = isNumber(n) && n > -1 && n % 1 == 0; + return isArray(t) || !isFunction(t) && o ? n > 0 && isObject(t) ? n - 1 in t : true : false; +} + +function isPlainObject(t) { + if (!t || !isObject(t) || "object" !== type(t)) { return false; } - - for (key in obj) {} - - return isUndefined(key) || hasOwnProperty$1.call(obj, key); -} -function isHTMLElement(obj) { - const instanceofObj = window.HTMLElement; - return obj ? instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType : false; -} -function isElement(obj) { - const instanceofObj = window.Element; - return obj ? instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType : false; + let n; + const e = "constructor"; + const s = t[e]; + const c = s && s.prototype; + const i = o.call(t, e); + const r = c && o.call(c, "isPrototypeOf"); + if (s && !i && !r) { + return false; + } + for (n in t) {} + return isUndefined(n) || o.call(t, n); } -function each(source, callback) { - if (isArrayLike(source)) { - for (let i = 0; i < source.length; i++) { - if (callback(source[i], i, source) === false) { +function isHTMLElement(n) { + const o = window.HTMLElement; + return n ? o ? n instanceof o : n.nodeType === t : false; +} + +function isElement(n) { + const o = window.Element; + return n ? o ? n instanceof o : n.nodeType === t : false; +} + +function each(t, n) { + if (isArrayLike(t)) { + for (let o = 0; o < t.length; o++) { + if (false === n(t[o], o, t)) { break; } } - } else if (source) { - each(Object.keys(source), key => callback(source[key], key, source)); + } else if (t) { + each(Object.keys(t), (o => n(t[o], o, t))); } - - return source; + return t; } -const indexOf = (arr, item, fromIndex) => arr.indexOf(item, fromIndex); -const push = (array, items, arrayIsSingleItem) => { - !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items) : array.push(items); - return array; -}; -const from = arr => { - if (Array.from && arr) { - return Array.from(arr); + +function assignDeep(t, n, o, e, s, c, i) { + const r = [ n, o, e, s, c, i ]; + if (("object" !== typeof t || isNull(t)) && !isFunction(t)) { + t = {}; } - - const result = []; - - if (arr instanceof Set) { - arr.forEach(value => { - push(result, value); - }); - } else { - each(arr, elm => { - push(result, elm); - }); - } - - return result; -}; -const isEmptyArray = array => !!array && array.length === 0; -const runEach = (arr, args) => { - const runFn = fn => fn && fn.apply(undefined, args || []); - - if (arr instanceof Set) { - arr.forEach(runFn); - } else { - each(arr, runFn); - } -}; - -const hasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); -const keys = obj => obj ? Object.keys(obj) : []; -function assignDeep(target, object1, object2, object3, object4, object5, object6) { - const sources = [object1, object2, object3, object4, object5, object6]; - - if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) { - target = {}; - } - - each(sources, source => { - each(keys(source), key => { - const copy = source[key]; - - if (target === copy) { + each(r, (n => { + each(keys(n), (o => { + const e = n[o]; + if (t === e) { return true; } - - const copyIsArray = isArray(copy); - - if (copy && (isPlainObject(copy) || copyIsArray)) { - const src = target[key]; - let clone = src; - - if (copyIsArray && !isArray(src)) { - clone = []; - } else if (!copyIsArray && !isPlainObject(src)) { - clone = {}; + const s = isArray(e); + if (e && (isPlainObject(e) || s)) { + const n = t[o]; + let c = n; + if (s && !isArray(n)) { + c = []; + } else if (!s && !isPlainObject(n)) { + c = {}; } - - target[key] = assignDeep(clone, copy); + t[o] = assignDeep(c, e); } else { - target[key] = copy; + t[o] = e; } - }); - }); - return target; + })); + })); + return t; } -function isEmptyObject(obj) { - for (const name in obj) return false; +function isEmptyObject(t) { + for (const n in t) { + return false; + } return true; } -function getSetProp(topLeft, fallback, elm, value) { - if (isUndefined(value)) { - return elm ? elm[topLeft] : fallback; +function getSetProp(t, n, o, e) { + if (isUndefined(e)) { + return o ? o[t] : n; } - - elm && (elm[topLeft] = value); + o && (o[t] = e); } -function attr(elm, attrName, value) { - if (isUndefined(value)) { - return elm ? elm.getAttribute(attrName) : null; +function attr(t, n, o) { + if (isUndefined(o)) { + return t ? t.getAttribute(n) : null; } - - elm && elm.setAttribute(attrName, value); -} -const attrClass = (elm, attrName, value, add) => { - const currValues = attr(elm, attrName) || ''; - const currValuesSet = new Set(currValues.split(' ')); - currValuesSet[add ? 'add' : 'delete'](value); - attr(elm, attrName, from(currValuesSet).join(' ').trim()); -}; -const hasAttrClass = (elm, attrName, value) => { - const currValues = attr(elm, attrName) || ''; - const currValuesSet = new Set(currValues.split(' ')); - return currValuesSet.has(value); -}; -const removeAttr = (elm, attrName) => { - elm && elm.removeAttribute(attrName); -}; -function scrollLeft(elm, value) { - return getSetProp('scrollLeft', 0, elm, value); -} -function scrollTop(elm, value) { - return getSetProp('scrollTop', 0, elm, value); + t && t.setAttribute(n, o); } -const elmPrototype = Element.prototype; +function scrollLeft(t, n) { + return getSetProp("scrollLeft", 0, t, n); +} -const find = (selector, elm) => { - const arr = []; - const rootElm = elm ? isElement(elm) ? elm : null : document; - return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr; -}; +function scrollTop(t, n) { + return getSetProp("scrollTop", 0, t, n); +} -const findFirst = (selector, elm) => { - const rootElm = elm ? isElement(elm) ? elm : null : document; - return rootElm ? rootElm.querySelector(selector) : null; -}; - -const is = (elm, selector) => { - if (isElement(elm)) { - const fn = elmPrototype.matches || elmPrototype.msMatchesSelector; - return fn.call(elm, selector); +function style(t, n) { + const o = isString(n); + const e = isArray(n) || o; + if (e) { + let e = o ? "" : {}; + if (t) { + const s = window.getComputedStyle(t, null); + e = o ? getCSSVal(t, s, n) : n.reduce(((n, o) => { + n[o] = getCSSVal(t, s, o); + return n; + }), e); + } + return e; } + each(keys(n), (o => setCSSVal(t, o, n[o]))); +} +const t = Node.ELEMENT_NODE; + +const {toString: n, hasOwnProperty: o} = Object.prototype; + +const type = t => isUndefined(t) || isNull(t) ? `${t}` : n.call(t).replace(/^\[object (.+)\]$/, "$1").toLowerCase(); + +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 = []; + if (t instanceof Set) { + t.forEach((t => { + push(n, t); + })); + } else { + each(t, (t => { + push(n, t); + })); + } + return n; +}; + +const isEmptyArray = t => !!t && 0 === t.length; + +const runEach = (t, n) => { + const runFn = t => t && t.apply(void 0, n || []); + if (t instanceof Set) { + t.forEach(runFn); + } else { + each(t, runFn); + } +}; + +const hasOwnProperty = (t, n) => Object.prototype.hasOwnProperty.call(t, n); + +const keys = t => t ? Object.keys(t) : []; + +const attrClass = (t, n, o, e) => { + const s = attr(t, n) || ""; + const c = new Set(s.split(" ")); + c[e ? "add" : "delete"](o); + attr(t, n, from(c).join(" ").trim()); +}; + +const hasAttrClass = (t, n, o) => { + const e = attr(t, n) || ""; + const s = new Set(e.split(" ")); + return s.has(o); +}; + +const removeAttr = (t, n) => { + t && t.removeAttribute(n); +}; + +const e = Element.prototype; + +const find = (t, n) => { + const o = []; + const e = n ? isElement(n) ? n : null : document; + return e ? push(o, e.querySelectorAll(t)) : o; +}; + +const findFirst = (t, n) => { + const o = n ? isElement(n) ? n : null : document; + return o ? o.querySelector(t) : null; +}; + +const is = (t, n) => { + if (isElement(t)) { + const o = e.matches || e.msMatchesSelector; + return o.call(t, n); + } return false; }; -const contents = elm => elm ? from(elm.childNodes) : []; +const contents = t => t ? from(t.childNodes) : []; -const parent = elm => elm ? elm.parentElement : null; +const parent = t => t ? t.parentElement : null; -const closest = (elm, selector) => { - if (isElement(elm)) { - const closestFn = elmPrototype.closest; - - if (closestFn) { - return closestFn.call(elm, selector); +const closest = (t, n) => { + if (isElement(t)) { + const o = e.closest; + if (o) { + return o.call(t, n); } - do { - if (is(elm, selector)) { - return elm; + if (is(t, n)) { + return t; } - - elm = parent(elm); - } while (elm); + t = parent(t); + } while (t); } - return null; }; -const liesBetween = (elm, highBoundarySelector, deepBoundarySelector) => { - const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector); - const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm); - return closestHighBoundaryElm && closestDeepBoundaryElm ? closestHighBoundaryElm === elm || closestDeepBoundaryElm === elm || closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm : false; +const liesBetween = (t, n, o) => { + const e = t && closest(t, n); + const s = t && findFirst(o, e); + return e && s ? e === t || s === t || closest(closest(t, o), n) !== e : false; }; -const before = (parentElm, preferredAnchor, insertedElms) => { - if (insertedElms) { - let anchor = preferredAnchor; - let fragment; - - if (parentElm) { - if (isArrayLike(insertedElms)) { - fragment = document.createDocumentFragment(); - each(insertedElms, insertedElm => { - if (insertedElm === anchor) { - anchor = insertedElm.previousSibling; +const before = (t, n, o) => { + if (o) { + let e = n; + let s; + if (t) { + if (isArrayLike(o)) { + s = document.createDocumentFragment(); + each(o, (t => { + if (t === e) { + e = t.previousSibling; } - - fragment.appendChild(insertedElm); - }); + s.appendChild(t); + })); } else { - fragment = insertedElms; + s = o; } - - if (preferredAnchor) { - if (!anchor) { - anchor = parentElm.firstChild; - } else if (anchor !== preferredAnchor) { - anchor = anchor.nextSibling; + if (n) { + if (!e) { + e = t.firstChild; + } else if (e !== n) { + e = e.nextSibling; } } - - parentElm.insertBefore(fragment, anchor || null); + t.insertBefore(s, e || null); } } }; -const appendChildren = (node, children) => { - before(node, null, children); +const appendChildren = (t, n) => { + before(t, null, n); }; -const prependChildren = (node, children) => { - before(node, node && node.firstChild, children); -}; -const insertBefore = (node, insertedNodes) => { - before(parent(node), node, insertedNodes); -}; -const insertAfter = (node, insertedNodes) => { - before(parent(node), node && node.nextSibling, insertedNodes); -}; -const removeElements = nodes => { - if (isArrayLike(nodes)) { - each(from(nodes), e => removeElements(e)); - } else if (nodes) { - const parentElm = parent(nodes); - if (parentElm) { - parentElm.removeChild(nodes); +const prependChildren = (t, n) => { + before(t, t && t.firstChild, n); +}; + +const insertBefore = (t, n) => { + before(parent(t), t, n); +}; + +const insertAfter = (t, n) => { + before(parent(t), t && t.nextSibling, n); +}; + +const removeElements = t => { + if (isArrayLike(t)) { + each(from(t), (t => removeElements(t))); + } else if (t) { + const n = parent(t); + if (n) { + n.removeChild(t); } } }; -const createDiv = classNames => { - const div = document.createElement('div'); - - if (classNames) { - attr(div, 'class', classNames); +const createDiv = t => { + const n = document.createElement("div"); + if (t) { + attr(n, "class", t); } - - return div; -}; -const createDOM = html => { - const createdDiv = createDiv(); - createdDiv.innerHTML = html.trim(); - return each(contents(createdDiv), elm => removeElements(elm)); + return n; }; -const firstLetterToUpper = str => str.charAt(0).toUpperCase() + str.slice(1); +const createDOM = t => { + const n = createDiv(); + n.innerHTML = t.trim(); + return each(contents(n), (t => removeElements(t))); +}; + +const firstLetterToUpper = t => t.charAt(0).toUpperCase() + t.slice(1); const getDummyStyle = () => createDiv().style; -const cssPrefixes = ['-webkit-', '-moz-', '-o-', '-ms-']; -const jsPrefixes = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms']; -const jsCache = {}; -const cssCache = {}; -const cssProperty = name => { - let result = cssCache[name]; +const s = [ "-webkit-", "-moz-", "-o-", "-ms-" ]; - if (hasOwnProperty(cssCache, name)) { - return result; +const c = [ "WebKit", "Moz", "O", "MS", "webkit", "moz", "o", "ms" ]; + +const i = {}; + +const r = {}; + +const cssProperty = t => { + let n = r[t]; + if (hasOwnProperty(r, t)) { + return n; } - - const uppercasedName = firstLetterToUpper(name); - const elmStyle = getDummyStyle(); - each(cssPrefixes, prefix => { - const prefixWithoutDashes = prefix.replace(/-/g, ''); - const resultPossibilities = [name, prefix + name, prefixWithoutDashes + uppercasedName, firstLetterToUpper(prefixWithoutDashes) + uppercasedName]; - return !(result = resultPossibilities.find(resultPossibility => elmStyle[resultPossibility] !== undefined)); - }); - return cssCache[name] = result || ''; -}; -const jsAPI = name => { - let result = jsCache[name] || window[name]; - - if (hasOwnProperty(jsCache, name)) { - return result; - } - - each(jsPrefixes, prefix => { - result = result || window[prefix + firstLetterToUpper(name)]; - return !result; - }); - jsCache[name] = result; - return result; + const o = firstLetterToUpper(t); + const e = getDummyStyle(); + each(s, (s => { + const c = s.replace(/-/g, ""); + const i = [ t, s + t, c + o, firstLetterToUpper(c) + o ]; + return !(n = i.find((t => void 0 !== e[t]))); + })); + return r[t] = n || ""; }; -const MutationObserverConstructor = jsAPI('MutationObserver'); -const IntersectionObserverConstructor = jsAPI('IntersectionObserver'); -const ResizeObserverConstructor = jsAPI('ResizeObserver'); -const cAF = jsAPI('cancelAnimationFrame'); -const rAF = jsAPI('requestAnimationFrame'); +const jsAPI = t => { + let n = i[t] || window[t]; + if (hasOwnProperty(i, t)) { + return n; + } + each(c, (o => { + n = n || window[o + firstLetterToUpper(t)]; + return !n; + })); + i[t] = n; + return n; +}; -const rnothtmlwhite = /[^\x20\t\r\n\f]+/g; +const a = jsAPI("MutationObserver"); -const classListAction = (elm, className, action) => { - let clazz; - let i = 0; - let result = false; +const l = jsAPI("IntersectionObserver"); - if (elm && className && isString(className)) { - const classes = className.match(rnothtmlwhite) || []; - result = classes.length > 0; +const u = jsAPI("ResizeObserver"); - while (clazz = classes[i++]) { - result = !!action(elm.classList, clazz) && result; +const f = jsAPI("cancelAnimationFrame"); + +const d = jsAPI("requestAnimationFrame"); + +const _ = /[^\x20\t\r\n\f]+/g; + +const classListAction = (t, n, o) => { + let e; + let s = 0; + let c = false; + if (t && n && isString(n)) { + const i = n.match(_) || []; + c = i.length > 0; + while (e = i[s++]) { + c = !!o(t.classList, e) && c; } } - - return result; + return c; }; -const hasClass = (elm, className) => classListAction(elm, className, (classList, clazz) => classList.contains(clazz)); -const removeClass = (elm, className) => { - classListAction(elm, className, (classList, clazz) => classList.remove(clazz)); -}; -const addClass = (elm, className) => { - classListAction(elm, className, (classList, clazz) => classList.add(clazz)); - return removeClass.bind(0, elm, className); +const hasClass = (t, n) => classListAction(t, n, ((t, n) => t.contains(n))); + +const removeClass = (t, n) => { + classListAction(t, n, ((t, n) => t.remove(n))); }; -const equal = (a, b, props, propMutation) => { - if (a && b) { - let result = true; - each(props, prop => { - const compareA = propMutation ? propMutation(a[prop]) : a[prop]; - const compareB = propMutation ? propMutation(b[prop]) : b[prop]; +const addClass = (t, n) => { + classListAction(t, n, ((t, n) => t.add(n))); + return removeClass.bind(0, t, n); +}; - if (compareA !== compareB) { - result = false; +const equal = (t, n, o, e) => { + if (t && n) { + let s = true; + each(o, (o => { + const c = e ? e(t[o]) : t[o]; + const i = e ? e(n[o]) : n[o]; + if (c !== i) { + s = false; } - }); - return result; + })); + return s; } - return false; }; -const equalWH = (a, b) => equal(a, b, ['w', 'h']); -const equalXY = (a, b) => equal(a, b, ['x', 'y']); -const equalTRBL = (a, b) => equal(a, b, ['t', 'r', 'b', 'l']); -const equalBCRWH = (a, b, round) => equal(a, b, ['width', 'height'], round && (value => Math.round(value))); -const clearTimeouts = id => { - id && window.clearTimeout(id); - id && cAF(id); +const equalWH = (t, n) => equal(t, n, [ "w", "h" ]); + +const equalXY = (t, n) => equal(t, n, [ "x", "y" ]); + +const equalTRBL = (t, n) => equal(t, n, [ "t", "r", "b", "l" ]); + +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); }; const noop = () => {}; -const debounce = (functionToDebounce, options) => { - let timeoutId; - let maxTimeoutId; - let prevArguments; - let latestArguments; - const { - _timeout, - _maxDelay, - _mergeParams - } = options || {}; - const setT = window.setTimeout; - const invokeFunctionToDebounce = function invokeFunctionToDebounce(args) { - clearTimeouts(timeoutId); - clearTimeouts(maxTimeoutId); - maxTimeoutId = timeoutId = prevArguments = undefined; - functionToDebounce.apply(this, args); +const debounce = (t, n) => { + let o; + let e; + let s; + let c; + const {g: i, p: r, v: a} = n || {}; + const l = window.setTimeout; + const u = function invokeFunctionToDebounce(n) { + clearTimeouts(o); + clearTimeouts(e); + e = o = s = void 0; + t.apply(this, n); }; - - const mergeParms = curr => _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr; - + const mergeParms = t => a && s ? a(s, t) : t; const flush = () => { - if (timeoutId) { - invokeFunctionToDebounce(mergeParms(latestArguments) || latestArguments); + if (o) { + u(mergeParms(c) || c); } }; - - const debouncedFn = function debouncedFn() { - const args = from(arguments); - const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout; - const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0; - - if (hasTimeout) { - const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay; - const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0; - const setTimeoutFn = finalTimeout > 0 ? setT : rAF; - const mergeParamsResult = mergeParms(args); - const invokedArgs = mergeParamsResult || args; - const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs); - clearTimeouts(timeoutId); - timeoutId = setTimeoutFn(boundInvoke, finalTimeout); - - if (hasMaxWait && !maxTimeoutId) { - maxTimeoutId = setT(flush, finalMaxWait); + const f = function debouncedFn() { + const t = from(arguments); + const n = isFunction(i) ? i() : i; + const a = isNumber(n) && n >= 0; + if (a) { + const i = isFunction(r) ? r() : r; + const a = isNumber(i) && i >= 0; + const f = n > 0 ? l : d; + const _ = mergeParms(t); + const g = _ || t; + const h = u.bind(0, g); + clearTimeouts(o); + o = f(h, n); + if (a && !e) { + e = l(flush, i); } - - prevArguments = latestArguments = invokedArgs; + s = c = g; } else { - invokeFunctionToDebounce(args); + u(t); } }; - - debouncedFn._flush = flush; - return debouncedFn; + f.m = flush; + return f; }; -const cssNumber = { +const g = { opacity: 1, zindex: 1 }; -const parseToZeroOrNumber = (value, toFloat) => { - const num = toFloat ? parseFloat(value) : parseInt(value, 10); - return Number.isNaN(num) ? 0 : num; +const parseToZeroOrNumber = (t, n) => { + const o = n ? parseFloat(t) : parseInt(t, 10); + return Number.isNaN(o) ? 0 : o; }; -const adaptCSSVal = (prop, val) => !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val; +const adaptCSSVal = (t, n) => !g[t.toLowerCase()] && isNumber(n) ? `${n}px` : n; -const getCSSVal = (elm, computedStyle, prop) => computedStyle != null ? computedStyle[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop]; +const getCSSVal = (t, n, o) => null != n ? n[o] || n.getPropertyValue(o) : t.style[o]; -const setCSSVal = (elm, prop, val) => { +const setCSSVal = (t, n, o) => { try { - if (elm) { - const { - style: elmStyle - } = elm; - - if (!isUndefined(elmStyle[prop])) { - elmStyle[prop] = adaptCSSVal(prop, val); + if (t) { + const {style: e} = t; + if (!isUndefined(e[n])) { + e[n] = adaptCSSVal(n, o); } else { - elmStyle.setProperty(prop, val); + e.setProperty(n, o); } } } catch (e) {} }; -function style(elm, styles) { - const getSingleStyle = isString(styles); - const getStyles = isArray(styles) || getSingleStyle; - - if (getStyles) { - let getStylesResult = getSingleStyle ? '' : {}; - - if (elm) { - const computedStyle = window.getComputedStyle(elm, null); - getStylesResult = getSingleStyle ? getCSSVal(elm, computedStyle, styles) : styles.reduce((result, key) => { - result[key] = getCSSVal(elm, computedStyle, key); - return result; - }, getStylesResult); - } - - return getStylesResult; - } - - each(keys(styles), key => setCSSVal(elm, key, styles[key])); -} -const topRightBottomLeft = (elm, propertyPrefix, propertySuffix) => { - const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : ''; - const finalSuffix = propertySuffix ? `-${propertySuffix}` : ''; - const top = `${finalPrefix}top${finalSuffix}`; - const right = `${finalPrefix}right${finalSuffix}`; - const bottom = `${finalPrefix}bottom${finalSuffix}`; - const left = `${finalPrefix}left${finalSuffix}`; - const result = style(elm, [top, right, bottom, left]); +const topRightBottomLeft = (t, n, o) => { + const e = n ? `${n}-` : ""; + const s = o ? `-${o}` : ""; + const c = `${e}top${s}`; + const i = `${e}right${s}`; + const r = `${e}bottom${s}`; + const a = `${e}left${s}`; + const l = style(t, [ c, i, r, a ]); return { - t: parseToZeroOrNumber(result[top]), - r: parseToZeroOrNumber(result[right]), - b: parseToZeroOrNumber(result[bottom]), - l: parseToZeroOrNumber(result[left]) + t: parseToZeroOrNumber(l[c]), + r: parseToZeroOrNumber(l[i]), + b: parseToZeroOrNumber(l[r]), + l: parseToZeroOrNumber(l[a]) }; }; -const zeroObj$1 = { +const h = { w: 0, h: 0 }; + const windowSize = () => ({ w: window.innerWidth, h: window.innerHeight }); -const offsetSize = elm => elm ? { - w: elm.offsetWidth, - h: elm.offsetHeight -} : zeroObj$1; -const clientSize = elm => elm ? { - w: elm.clientWidth, - h: elm.clientHeight -} : zeroObj$1; -const scrollSize = elm => elm ? { - w: elm.scrollWidth, - h: elm.scrollHeight -} : zeroObj$1; -const fractionalSize = elm => { - const cssHeight = parseFloat(style(elm, 'height')) || 0; - const cssWidth = parseFloat(style(elm, 'height')) || 0; + +const offsetSize = t => t ? { + w: t.offsetWidth, + h: t.offsetHeight +} : h; + +const clientSize = t => t ? { + w: t.clientWidth, + h: t.clientHeight +} : h; + +const scrollSize = t => t ? { + w: t.scrollWidth, + h: t.scrollHeight +} : h; + +const fractionalSize = t => { + const n = parseFloat(style(t, "height")) || 0; + const o = parseFloat(style(t, "height")) || 0; return { - w: cssWidth - Math.round(cssWidth), - h: cssHeight - Math.round(cssHeight) + w: o - Math.round(o), + h: n - Math.round(n) }; }; -const getBoundingClientRect = elm => elm.getBoundingClientRect(); -let passiveEventsSupport; +const getBoundingClientRect = t => t.getBoundingClientRect(); + +let p; const supportPassiveEvents = () => { - if (isUndefined(passiveEventsSupport)) { - passiveEventsSupport = false; - + if (isUndefined(p)) { + p = false; try { - window.addEventListener('test', null, Object.defineProperty({}, 'passive', { - get: function () { - passiveEventsSupport = true; + window.addEventListener("test", null, Object.defineProperty({}, "passive", { + get: function() { + p = true; } })); - } catch (e) {} + } catch (t) {} } - - return passiveEventsSupport; + return p; }; -const splitEventNames = eventNames => eventNames.split(' '); +const splitEventNames = t => t.split(" "); -const off = (target, eventNames, listener, capture) => { - each(splitEventNames(eventNames), eventName => { - target.removeEventListener(eventName, listener, capture); - }); +const off = (t, n, o, e) => { + each(splitEventNames(n), (n => { + t.removeEventListener(n, o, e); + })); }; -const on = (target, eventNames, listener, options) => { - const doSupportPassiveEvents = supportPassiveEvents(); - const passive = doSupportPassiveEvents && options && options._passive || false; - const capture = options && options._capture || false; - const once = options && options._once || false; - const offListeners = []; - const nativeOptions = doSupportPassiveEvents ? { - passive, - capture - } : capture; - each(splitEventNames(eventNames), eventName => { - const finalListener = once ? evt => { - target.removeEventListener(eventName, finalListener, capture); - listener && listener(evt); - } : listener; - push(offListeners, off.bind(null, target, eventName, finalListener, capture)); - target.addEventListener(eventName, finalListener, nativeOptions); - }); - return runEach.bind(0, offListeners); -}; -const stopPropagation = evt => evt.stopPropagation(); -const preventDefault = evt => evt.preventDefault(); -const stopAndPrevent = evt => stopPropagation(evt) || preventDefault(evt); -const zeroObj = { +const on = (t, n, o, e) => { + const s = supportPassiveEvents(); + const c = s && e && e.S || false; + const i = e && e.C || false; + const r = e && e.O || false; + const a = []; + const l = s ? { + passive: c, + capture: i + } : i; + each(splitEventNames(n), (n => { + const e = r ? s => { + t.removeEventListener(n, e, i); + o && o(s); + } : o; + push(a, off.bind(null, t, n, e, i)); + t.addEventListener(n, e, l); + })); + return runEach.bind(0, a); +}; + +const stopPropagation = t => t.stopPropagation(); + +const preventDefault = t => t.preventDefault(); + +const stopAndPrevent = t => stopPropagation(t) || preventDefault(t); + +const v = { x: 0, y: 0 }; -const absoluteCoordinates = elm => { - const rect = elm ? getBoundingClientRect(elm) : 0; - return rect ? { - x: rect.left + window.pageYOffset, - y: rect.top + window.pageXOffset - } : zeroObj; + +const absoluteCoordinates = t => { + const n = t ? getBoundingClientRect(t) : 0; + return n ? { + x: n.left + window.pageYOffset, + y: n.top + window.pageXOffset + } : v; }; -const manageListener = (callback, listener) => { - each(isArray(listener) ? listener : [listener], callback); +const manageListener = (t, n) => { + each(isArray(n) ? n : [ n ], t); }; -const createEventListenerHub = initialEventListeners => { - const events = new Map(); - - const removeEvent = (name, listener) => { - if (name) { - const eventSet = events.get(name); - manageListener(currListener => { - if (eventSet) { - eventSet[currListener ? 'delete' : 'clear'](currListener); +const createEventListenerHub = t => { + function removeEvent(t, o) { + if (t) { + const e = n.get(t); + manageListener((t => { + if (e) { + e[t ? "delete" : "clear"](t); } - }, listener); + }), o); } else { - events.forEach(eventSet => { - eventSet.clear(); - }); - events.clear(); + n.forEach((t => { + t.clear(); + })); + n.clear(); } - }; - - const addEvent = (name, listener) => { - const eventSet = events.get(name) || new Set(); - events.set(name, eventSet); - manageListener(currListener => { - currListener && eventSet.add(currListener); - }, listener); - return removeEvent.bind(0, name, listener); - }; - - const triggerEvent = (name, args) => { - const eventSet = events.get(name); - each(from(eventSet), event => { - if (args) { - event(args); - } else { - event(); - } - }); - }; - - const initialListenerKeys = keys(initialEventListeners); - each(initialListenerKeys, key => { - addEvent(key, initialEventListeners[key]); - }); - return [addEvent, removeEvent, triggerEvent]; -}; - -const getPropByPath = (obj, path) => obj ? path.split('.').reduce((o, prop) => o && hasOwnProperty(o, prop) ? o[prop] : undefined, obj) : undefined; - -const createOptionCheck = (options, changedOptions, force) => path => [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined]; -const createState = initialState => { - let state = initialState; - return [() => state, newState => { - state = assignDeep({}, state, newState); - }]; -}; - -const classNameEnvironment = 'os-environment'; -const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`; -const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`; -const dataAttributeHost = 'data-overlayscrollbars'; -const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`; -const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`; -const dataValueHostOverflowVisible = 'overflowVisible'; -const dataValueHostViewportScrollbarStyling = 'viewportStyled'; -const classNamePadding = 'os-padding'; -const classNameViewport = 'os-viewport'; -const classNameViewportArrange = `${classNameViewport}-arrange`; -const classNameContent = 'os-content'; -const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`; -const classNameOverflowVisible = `os-overflow-visible`; -const classNameSizeObserver = 'os-size-observer'; -const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`; -const classNameSizeObserverListener = `${classNameSizeObserver}-listener`; -const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`; -const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`; -const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`; -const classNameTrinsicObserver = 'os-trinsic-observer'; -const classNameScrollbar = 'os-scrollbar'; -const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`; -const classNameScrollbarVertical = `${classNameScrollbar}-vertical`; -const classNameScrollbarTrack = 'os-scrollbar-track'; -const classNameScrollbarHandle = 'os-scrollbar-handle'; - -const stringify = value => JSON.stringify(value, (_, val) => { - if (isFunction(val)) { - throw new Error(); } + function addEvent(t, o) { + const e = n.get(t) || new Set; + n.set(t, e); + manageListener((t => { + t && e.add(t); + }), o); + return removeEvent.bind(0, t, o); + } + function triggerEvent(t, ...o) { + const e = n.get(t); + each(from(e), (t => { + if (o) { + t(o); + } else { + t(); + } + })); + } + const n = new Map; + const o = keys(t); + each(o, (n => { + addEvent(n, t[n]); + })); + return [ addEvent, removeEvent, triggerEvent ]; +}; - return val; -}); +const getPropByPath = (t, n) => t ? n.split(".").reduce(((t, n) => t && hasOwnProperty(t, n) ? t[n] : void 0), t) : void 0; -const defaultOptions = { +const createOptionCheck = (t, n, o) => e => [ getPropByPath(t, e), o || void 0 !== getPropByPath(n, e) ]; + +const createState = t => { + let n = t; + return [ () => n, t => { + n = assignDeep({}, n, t); + } ]; +}; + +const w = "os-environment"; + +const b = `${w}-flexbox-glue`; + +const y = `${b}-max`; + +const m = "data-overlayscrollbars"; + +const S = `${m}-overflow-x`; + +const C = `${m}-overflow-y`; + +const x = "overflowVisible"; + +const O = "viewportStyled"; + +const A = "os-padding"; + +const $ = "os-viewport"; + +const L = `${$}-arrange`; + +const I = "os-content"; + +const T = `${$}-scrollbar-styled`; + +const z = `os-overflow-visible`; + +const D = "os-size-observer"; + +const E = `${D}-appear`; + +const P = `${D}-listener`; + +const M = `${P}-scroll`; + +const j = `${P}-item`; + +const N = `${j}-final`; + +const R = "os-trinsic-observer"; + +const F = "os-scrollbar"; + +const H = `${F}-horizontal`; + +const k = `${F}-vertical`; + +const B = "os-scrollbar-track"; + +const V = "os-scrollbar-handle"; + +const opsStringify = t => JSON.stringify(t, ((t, n) => { + if (isFunction(n)) { + throw new Error; + } + return n; +})); + +const U = { paddingAbsolute: false, updating: { - elementEvents: [['img', 'load']], - debounce: [0, 33], + elementEvents: [ [ "img", "load" ] ], + debounce: [ 0, 33 ], attributes: null, ignoreMutation: null }, overflow: { - x: 'scroll', - y: 'scroll' + x: "scroll", + y: "scroll" }, nativeScrollbarsOverlaid: { show: false, initialize: false }, scrollbars: { - visibility: 'auto', - autoHide: 'never', + visibility: "auto", + autoHide: "never", autoHideDelay: 800, dragScroll: true, clickScroll: false, touch: true } }; -const getOptionsDiff = (currOptions, newOptions) => { - const diff = {}; - const optionsKeys = keys(newOptions).concat(keys(currOptions)); - each(optionsKeys, optionKey => { - const currOptionValue = currOptions[optionKey]; - const newOptionValue = newOptions[optionKey]; - if (isObject(currOptionValue) && isObject(newOptionValue)) { - assignDeep(diff[optionKey] = {}, getOptionsDiff(currOptionValue, newOptionValue)); - } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) { - let isDiff = true; - - if (isArray(currOptionValue) || isArray(newOptionValue)) { +const getOptionsDiff = (t, n) => { + const o = {}; + const e = keys(n).concat(keys(t)); + each(e, (e => { + const s = t[e]; + const c = n[e]; + if (isObject(s) && isObject(c)) { + assignDeep(o[e] = {}, getOptionsDiff(s, c)); + } else if (hasOwnProperty(n, e) && c !== s) { + let t = true; + if (isArray(s) || isArray(c)) { try { - if (stringify(currOptionValue) === stringify(newOptionValue)) { - isDiff = false; + if (opsStringify(s) === opsStringify(c)) { + t = false; } - } catch (_unused) {} + } catch (i) {} } - - if (isDiff) { - diff[optionKey] = newOptionValue; + if (t) { + o[e] = c; } } - }); - return diff; + })); + return o; }; -let environmentInstance; -const { - abs, - round -} = Math; +let Y; -const diffBiggerThanOne = (valOne, valTwo) => { - const absValOne = abs(valOne); - const absValTwo = abs(valTwo); - return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo); +const {abs: q, round: G} = Math; + +const diffBiggerThanOne = (t, n) => { + const o = q(t); + const e = q(n); + return !(o === e || o + 1 === e || o - 1 === e); }; -const getNativeScrollbarSize = (body, measureElm, measureElmChild) => { - appendChildren(body, measureElm); - const cSize = clientSize(measureElm); - const oSize = offsetSize(measureElm); - const fSize = fractionalSize(measureElmChild); +const getNativeScrollbarSize = (t, n, o) => { + appendChildren(t, n); + const e = clientSize(n); + const s = offsetSize(n); + const c = fractionalSize(o); return { - x: oSize.h - cSize.h + fSize.h, - y: oSize.w - cSize.w + fSize.w + x: s.h - e.h + c.h, + y: s.w - e.w + c.w }; }; -const getNativeScrollbarStyling = testElm => { - let result = false; - const revertClass = addClass(testElm, classNameViewportScrollbarStyling); - +const getNativeScrollbarStyling = t => { + let n = false; + const o = addClass(t, T); try { - result = style(testElm, cssProperty('scrollbar-width')) === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none'; - } catch (ex) {} - - revertClass(); - return result; + n = "none" === style(t, cssProperty("scrollbar-width")) || "none" === window.getComputedStyle(t, "::-webkit-scrollbar").getPropertyValue("display"); + } catch (e) {} + o(); + return n; }; -const getRtlScrollBehavior = (parentElm, childElm) => { - const strHidden = 'hidden'; - style(parentElm, { - overflowX: strHidden, - overflowY: strHidden, - direction: 'rtl' +const getRtlScrollBehavior = (t, n) => { + const o = "hidden"; + style(t, { + overflowX: o, + overflowY: o, + direction: "rtl" }); - scrollLeft(parentElm, 0); - const parentOffset = absoluteCoordinates(parentElm); - const childOffset = absoluteCoordinates(childElm); - scrollLeft(parentElm, -999); - const childOffsetAfterScroll = absoluteCoordinates(childElm); + scrollLeft(t, 0); + const e = absoluteCoordinates(t); + const s = absoluteCoordinates(n); + scrollLeft(t, -999); + const c = absoluteCoordinates(n); return { - i: parentOffset.x === childOffset.x, - n: childOffset.x !== childOffsetAfterScroll.x + i: e.x === s.x, + n: s.x !== c.x }; }; -const getFlexboxGlue = (parentElm, childElm) => { - const revertFbxGlue = addClass(parentElm, classNameEnvironmentFlexboxGlue); - const minOffsetsizeParent = getBoundingClientRect(parentElm); - const minOffsetsize = getBoundingClientRect(childElm); - const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true); - const revertFbxGlueMax = addClass(parentElm, classNameEnvironmentFlexboxGlueMax); - const maxOffsetsizeParent = getBoundingClientRect(parentElm); - const maxOffsetsize = getBoundingClientRect(childElm); - const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true); - revertFbxGlue(); - revertFbxGlueMax(); - return supportsMin && supportsMax; +const getFlexboxGlue = (t, n) => { + const o = addClass(t, b); + const e = getBoundingClientRect(t); + const s = getBoundingClientRect(n); + const c = equalBCRWH(s, e, true); + const i = addClass(t, y); + const r = getBoundingClientRect(t); + const a = getBoundingClientRect(n); + const l = equalBCRWH(a, r, true); + o(); + i(); + return c && l; }; const getWindowDPR = () => { - const dDPI = window.screen.deviceXDPI || 0; - const sDPI = window.screen.logicalXDPI || 1; - return window.devicePixelRatio || dDPI / sDPI; + const t = window.screen.deviceXDPI || 0; + const n = window.screen.logicalXDPI || 1; + return window.devicePixelRatio || t / n; }; -const getDefaultInitializationStrategy = nativeScrollbarStyling => ({ - _host: null, - _viewport: null, - _padding: !nativeScrollbarStyling, - _content: false, - _scrollbarsSlot: null +const getDefaultInitializationStrategy = t => ({ + A: !t, + $: false }); const createEnvironment = () => { - const { - body - } = document; - const envDOM = createDOM(`
`); - const envElm = envDOM[0]; - const envChildElm = envElm.firstChild; - const [addEvent,, triggerEvent] = createEventListenerHub(); - const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({ - _initialValue: getNativeScrollbarSize(body, envElm, envChildElm), - _equal: equalXY + const {body: t} = document; + const n = createDOM(`
`); + const o = n[0]; + const e = o.firstChild; + const [s, , c] = createEventListenerHub(); + const [i, r] = createCache({ + o: getNativeScrollbarSize(t, o, e), + u: equalXY }); - const [nativeScrollbarSize] = getNativeScrollbarSizeCache(); - const nativeScrollbarStyling = getNativeScrollbarStyling(envElm); - const nativeScrollbarIsOverlaid = { - x: nativeScrollbarSize.x === 0, - y: nativeScrollbarSize.y === 0 + const [a] = r(); + const l = getNativeScrollbarStyling(o); + const u = { + x: 0 === a.x, + y: 0 === a.y }; - const initializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling); - const defaultDefaultOptions = assignDeep({}, defaultOptions); - const env = { - _nativeScrollbarSize: nativeScrollbarSize, - _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid, - _nativeScrollbarStyling: nativeScrollbarStyling, - _cssCustomProperties: style(envElm, 'zIndex') === '-1', - _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm), - _flexboxGlue: getFlexboxGlue(envElm, envChildElm), - _addListener: listener => addEvent('_', listener), - _getInitializationStrategy: assignDeep.bind(0, {}, initializationStrategy), - - _setInitializationStrategy(newInitializationStrategy) { - assignDeep(initializationStrategy, newInitializationStrategy); + const f = getDefaultInitializationStrategy(l); + const d = assignDeep({}, U); + const _ = { + L: a, + I: u, + T: l, + D: "-1" === style(o, "zIndex"), + P: getRtlScrollBehavior(o, e), + M: getFlexboxGlue(o, e), + j: t => s("_", t), + N: assignDeep.bind(0, {}, f), + R(t) { + assignDeep(f, t); }, - - _getDefaultOptions: assignDeep.bind(0, {}, defaultDefaultOptions), - - _setDefaultOptions(newDefaultOptions) { - assignDeep(defaultDefaultOptions, newDefaultOptions); + F: assignDeep.bind(0, {}, d), + H(t) { + assignDeep(d, t); }, - - _defaultInitializationStrategy: assignDeep({}, initializationStrategy), - _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions) + k: assignDeep({}, f), + B: assignDeep({}, d) }; - removeAttr(envElm, 'style'); - removeElements(envElm); - - if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) { - let size = windowSize(); - let dpr = getWindowDPR(); - window.addEventListener('resize', () => { - const sizeNew = windowSize(); - const deltaSize = { - w: sizeNew.w - size.w, - h: sizeNew.h - size.h + removeAttr(o, "style"); + removeElements(o); + if (!l && (!u.x || !u.y)) { + let n = windowSize(); + let s = getWindowDPR(); + window.addEventListener("resize", (() => { + const r = windowSize(); + const a = { + w: r.w - n.w, + h: r.h - n.h }; - if (deltaSize.w === 0 && deltaSize.h === 0) return; - const deltaAbsSize = { - w: abs(deltaSize.w), - h: abs(deltaSize.h) + if (0 === a.w && 0 === a.h) { + return; + } + const l = { + w: q(a.w), + h: q(a.h) }; - const deltaAbsRatio = { - w: abs(round(sizeNew.w / (size.w / 100.0))), - h: abs(round(sizeNew.h / (size.h / 100.0))) + const u = { + w: q(G(r.w / (n.w / 100))), + h: q(G(r.h / (n.h / 100))) }; - const dprNew = getWindowDPR(); - const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2; - const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h); - const dprChanged = dprNew !== dpr && dpr > 0; - const isZoom = deltaIsBigger && difference && dprChanged; - - if (isZoom) { - const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(getNativeScrollbarSize(body, envElm, envChildElm)); - assignDeep(environmentInstance._nativeScrollbarSize, scrollbarSize); - removeElements(envElm); - - if (scrollbarSizeChanged) { - triggerEvent('_'); + const f = getWindowDPR(); + const d = l.w > 2 && l.h > 2; + const _ = !diffBiggerThanOne(u.w, u.h); + const g = f !== s && s > 0; + const h = d && _ && g; + if (h) { + const [n, s] = i(getNativeScrollbarSize(t, o, e)); + assignDeep(Y.L, n); + removeElements(o); + if (s) { + c("_"); } } - - size = sizeNew; - dpr = dprNew; - }); + n = r; + s = f; + })); } - - return env; + return _; }; const getEnvironment = () => { - if (!environmentInstance) { - environmentInstance = createEnvironment(); + if (!Y) { + Y = createEnvironment(); } - - return environmentInstance; + return Y; }; -let contentArrangeCounter = 0; +const staticInitializationElement = (t, n, o, e) => { + const s = e || (isFunction(o) ? o.apply(0, t) : o); + return (isFunction(s) ? s.apply(0, t) : s) || n.apply(0, t); +}; -const unwrap = elm => { - appendChildren(parent(elm), contents(elm)); - removeElements(elm); +const dynamicInitializationElement = (t, n, o, e) => { + const s = isBoolean(e) || !!e; + const c = s ? e : isFunction(o) ? o.apply(0, t) : o; + return true === c || isNull(c) || isUndefined(c) || isFunction(c) ? n.apply(0, t) : c; +}; + +let W = 0; + +const X = createDiv.bind(0, ""); + +const unwrap = t => { + appendChildren(parent(t), contents(t)); + removeElements(t); }; const createUniqueViewportArrangeElement = () => { - const { - _nativeScrollbarStyling, - _nativeScrollbarIsOverlaid, - _cssCustomProperties - } = getEnvironment(); - const create = !_cssCustomProperties && !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y); - const result = create ? document.createElement('style') : false; - - if (result) { - attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`); - contentArrangeCounter++; + const {T: t, I: n, D: o} = getEnvironment(); + const e = !o && !t && (n.x || n.y); + const s = e ? document.createElement("style") : false; + if (s) { + attr(s, "id", `${L}-${W}`); + W++; } - - return result; + return s; }; -const staticCreationFromStrategy = (target, initializationValue, strategy) => { - const result = initializationValue || (isFunction(strategy) ? strategy(target) : strategy); - return result || createDiv(); +const addDataAttrHost = (t, n) => { + attr(t, m, n || ""); + return removeAttr.bind(0, t, m); }; -const dynamicCreationFromStrategy = (target, initializationValue, strategy) => { - const takeInitializationValue = isBoolean(initializationValue) || initializationValue; - const result = takeInitializationValue ? initializationValue : isFunction(strategy) ? strategy(target) : strategy; - return result === true ? createDiv() : result; -}; - -const addDataAttrHost = (elm, value) => { - attr(elm, dataAttributeHost, value || ''); - return removeAttr.bind(0, elm, dataAttributeHost); -}; - -const createStructureSetupElements = target => { - const { - _getInitializationStrategy, - _nativeScrollbarStyling - } = getEnvironment(); - - const { - _host: hostInitializationStrategy, - _viewport: viewportInitializationStrategy, - _padding: paddingInitializationStrategy, - _content: contentInitializationStrategy - } = _getInitializationStrategy(); - - const targetIsElm = isHTMLElement(target); - const targetStructureInitialization = target; - const targetElement = targetIsElm ? target : targetStructureInitialization.target; - const isTextarea = is(targetElement, 'textarea'); - const isBody = !isTextarea && is(targetElement, 'body'); - const ownerDocument = targetElement.ownerDocument; - const bodyElm = ownerDocument.body; - const wnd = ownerDocument.defaultView; - const singleElmSupport = !!ResizeObserverConstructor && _nativeScrollbarStyling; - const potentialViewportElement = staticCreationFromStrategy(targetElement, targetStructureInitialization.viewport, viewportInitializationStrategy); - const potentiallySingleElm = potentialViewportElement === targetElement; - const viewportIsTarget = singleElmSupport && potentiallySingleElm; - const viewportElement = potentiallySingleElm && !viewportIsTarget ? staticCreationFromStrategy(targetElement) : potentialViewportElement; - const evaluatedTargetObj = { - _target: targetElement, - _host: isTextarea ? staticCreationFromStrategy(targetElement, targetStructureInitialization.host, hostInitializationStrategy) : targetElement, - _viewport: viewportElement, - _padding: dynamicCreationFromStrategy(targetElement, targetStructureInitialization.padding, paddingInitializationStrategy), - _content: dynamicCreationFromStrategy(targetElement, targetStructureInitialization.content, contentInitializationStrategy), - _viewportArrange: !viewportIsTarget && createUniqueViewportArrangeElement(), - _windowElm: wnd, - _documentElm: ownerDocument, - _htmlElm: parent(bodyElm), - _bodyElm: bodyElm, - _isTextarea: isTextarea, - _isBody: isBody, - _targetIsElm: targetIsElm, - _viewportIsTarget: viewportIsTarget, - _viewportHasClass: (className, attributeClassName) => viewportIsTarget ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName) : hasClass(viewportElement, className), - _viewportAddRemoveClass: (className, attributeClassName, add) => viewportIsTarget ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add) : (add ? addClass : removeClass)(viewportElement, className) +const createStructureSetupElements = t => { + const {N: n, T: o} = getEnvironment(); + const {V: e, U: s, A: c, $: i} = n(); + const r = isHTMLElement(t); + const a = t; + const l = r ? t : a.target; + const f = is(l, "textarea"); + const d = !f && is(l, "body"); + const _ = l.ownerDocument; + const g = _.body; + const h = _.defaultView; + const p = !!u && o; + const v = staticInitializationElement.bind(0, [ l ]); + const w = dynamicInitializationElement.bind(0, [ l ]); + const b = v(X, s, a.viewport); + const y = b === l; + const x = p && y; + const O = y && !x ? v(X) : b; + const L = { + Y: l, + V: f ? v(X, e, a.host) : l, + U: O, + A: w(X, c, a.padding), + $: w(X, i, a.content), + q: !x && createUniqueViewportArrangeElement(), + G: h, + W: _, + X: parent(g), + J: g, + K: f, + Z: d, + tt: r, + nt: x, + ot: (t, n) => x ? hasAttrClass(O, m, n) : hasClass(O, t), + et: (t, n, o) => x ? attrClass(O, m, n, o) : (o ? addClass : removeClass)(O, t) }; - const generatedElements = keys(evaluatedTargetObj).reduce((arr, key) => { - const value = evaluatedTargetObj[key]; - return push(arr, value && !parent(value) ? value : false); - }, []); - - const elementIsGenerated = elm => elm ? indexOf(generatedElements, elm) > -1 : null; - - const { - _target, - _host, - _padding, - _viewport, - _content, - _viewportArrange - } = evaluatedTargetObj; - const destroyFns = []; - const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host); - const targetContents = isTextarea ? _target : contents([_content, _viewport, _padding, _host, _target].find(elm => elementIsGenerated(elm) === false)); - const contentSlot = _content || _viewport; - const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host'); - const removePaddingClass = addClass(_padding, classNamePadding); - const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport); - const removeContentClass = addClass(_content, classNameContent); - - if (isTextareaHostGenerated) { - insertAfter(_target, _host); - push(destroyFns, () => { - insertAfter(_host, _target); - removeElements(_host); - }); + const z = keys(L).reduce(((t, n) => { + const o = L[n]; + return push(t, o && !parent(o) ? o : false); + }), []); + const elementIsGenerated = t => t ? indexOf(z, t) > -1 : null; + const {Y: D, V: E, A: P, U: M, $: j, q: N} = L; + const R = []; + const F = f && elementIsGenerated(E); + const H = f ? D : contents([ j, M, P, E, D ].find((t => false === elementIsGenerated(t)))); + const k = j || M; + const B = addDataAttrHost(E, x ? "viewport" : "host"); + const V = addClass(P, A); + const U = addClass(M, !x && $); + const Y = addClass(j, I); + if (F) { + insertAfter(D, E); + push(R, (() => { + insertAfter(E, D); + removeElements(E); + })); } - - appendChildren(contentSlot, targetContents); - appendChildren(_host, _padding); - appendChildren(_padding || _host, !viewportIsTarget && _viewport); - appendChildren(_viewport, _content); - push(destroyFns, () => { - removeHostDataAttr(); - removeAttr(_viewport, dataAttributeHostOverflowX); - removeAttr(_viewport, dataAttributeHostOverflowY); - - if (elementIsGenerated(_content)) { - unwrap(_content); + appendChildren(k, H); + appendChildren(E, P); + appendChildren(P || E, !x && M); + appendChildren(M, j); + push(R, (() => { + B(); + removeAttr(M, S); + removeAttr(M, C); + if (elementIsGenerated(j)) { + unwrap(j); } - - if (elementIsGenerated(_viewport)) { - unwrap(_viewport); + if (elementIsGenerated(M)) { + unwrap(M); } - - if (elementIsGenerated(_padding)) { - unwrap(_padding); + if (elementIsGenerated(P)) { + unwrap(P); } - - removePaddingClass(); - removeViewportClass(); - removeContentClass(); - }); - - if (_nativeScrollbarStyling && !viewportIsTarget) { - push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling)); + V(); + U(); + Y(); + })); + if (o && !x) { + push(R, removeClass.bind(0, M, T)); } - - if (_viewportArrange) { - insertBefore(_viewport, _viewportArrange); - push(destroyFns, removeElements.bind(0, _viewportArrange)); + if (N) { + insertBefore(M, N); + push(R, removeElements.bind(0, N)); } - - return [evaluatedTargetObj, runEach.bind(0, destroyFns)]; + return [ L, runEach.bind(0, R) ]; }; -const createTrinsicUpdate = (structureSetupElements, state) => { - const { - _content - } = structureSetupElements; - const [getState] = state; - return updateHints => { - const { - _flexboxGlue - } = getEnvironment(); - const { - _heightIntrinsic - } = getState(); - const { - _heightIntrinsicChanged - } = updateHints; - const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged; - - if (heightIntrinsicChanged) { - style(_content, { - height: _heightIntrinsic ? '' : '100%' +const createTrinsicUpdate = (t, n) => { + const {$: o} = t; + const [e] = n; + return t => { + const {M: n} = getEnvironment(); + const {st: s} = e(); + const {ct: c} = t; + const i = (o || !n) && c; + if (i) { + style(o, { + height: s ? "" : "100%" }); } - return { - _sizeChanged: heightIntrinsicChanged, - _contentMutation: heightIntrinsicChanged + it: i, + rt: i }; }; }; -const createPaddingUpdate = (structureSetupElements, state) => { - const [getState, setState] = state; - const { - _host, - _padding, - _viewport, - _viewportIsTarget: _isSingleElm - } = structureSetupElements; - const [updatePaddingCache, currentPaddingCache] = createCache({ - _equal: equalTRBL, - _initialValue: topRightBottomLeft() - }, topRightBottomLeft.bind(0, _host, 'padding', '')); - return (updateHints, checkOption, force) => { - let [padding, paddingChanged] = currentPaddingCache(force); - const { - _nativeScrollbarStyling, - _flexboxGlue - } = getEnvironment(); - const { - _directionIsRTL - } = getState(); - const { - _sizeChanged, - _contentMutation, - _directionChanged - } = updateHints; - const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute'); - const contentMutation = !_flexboxGlue && _contentMutation; - - if (_sizeChanged || paddingChanged || contentMutation) { - [padding, paddingChanged] = updatePaddingCache(force); +const createPaddingUpdate = (t, n) => { + const [o, e] = n; + const {V: s, A: c, U: i, nt: r} = t; + const [a, l] = createCache({ + u: equalTRBL, + o: topRightBottomLeft() + }, topRightBottomLeft.bind(0, s, "padding", "")); + return (t, n, s) => { + let [u, f] = l(s); + const {T: d, M: _} = getEnvironment(); + const {lt: g} = o(); + const {it: h, rt: p, ut: v} = t; + const [w, b] = n("paddingAbsolute"); + const y = !_ && p; + if (h || f || y) { + [u, f] = a(s); } - - const paddingStyleChanged = !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged); - - if (paddingStyleChanged) { - const paddingRelative = !paddingAbsolute || !_padding && !_nativeScrollbarStyling; - const paddingHorizontal = padding.r + padding.l; - const paddingVertical = padding.t + padding.b; - const paddingStyle = { - marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0, - marginBottom: paddingRelative ? -paddingVertical : 0, - marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0, - top: paddingRelative ? -padding.t : 0, - right: paddingRelative ? _directionIsRTL ? -padding.r : 'auto' : 0, - left: paddingRelative ? _directionIsRTL ? 'auto' : -padding.l : 0, - width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '' + const m = !r && (b || v || f); + if (m) { + const t = !w || !c && !d; + const n = u.r + u.l; + const o = u.t + u.b; + const s = { + marginRight: t && !g ? -n : 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, + width: t ? `calc(100% + ${n}px)` : "" }; - const viewportStyle = { - paddingTop: paddingRelative ? padding.t : 0, - paddingRight: paddingRelative ? padding.r : 0, - paddingBottom: paddingRelative ? padding.b : 0, - paddingLeft: paddingRelative ? padding.l : 0 + const r = { + paddingTop: t ? u.t : 0, + paddingRight: t ? u.r : 0, + paddingBottom: t ? u.b : 0, + paddingLeft: t ? u.l : 0 }; - style(_padding || _viewport, paddingStyle); - style(_viewport, viewportStyle); - setState({ - _padding: padding, - _paddingAbsolute: !paddingRelative, - _viewportPaddingStyle: _padding ? viewportStyle : assignDeep({}, paddingStyle, viewportStyle) + style(c || i, s); + style(i, r); + e({ + A: u, + ft: !t, + dt: c ? r : assignDeep({}, s, r) }); } - return { - _paddingStyleChanged: paddingStyleChanged + _t: m }; }; }; -const { - max -} = Math; -const strVisible = 'visible'; -const strHidden = 'hidden'; -const overlaidScrollbarsHideOffset = 42; -const whCacheOptions = { - _equal: equalWH, - _initialValue: { +const {max: J} = Math; + +const K = "visible"; + +const Q = "hidden"; + +const Z = 42; + +const tt = { + u: equalWH, + o: { w: 0, h: 0 } }; -const xyCacheOptions = { - _equal: equalXY, - _initialValue: { - x: strHidden, - y: strHidden + +const nt = { + u: equalXY, + o: { + x: Q, + y: Q } }; -const getOverflowAmount = (viewportScrollSize, viewportClientSize, sizeFraction) => { - const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0; - const amount = { - w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)), - h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)) +const getOverflowAmount = (t, n, o) => { + const e = window.devicePixelRatio % 1 !== 0 ? 1 : 0; + const s = { + w: J(0, t.w - n.w - J(0, o.w)), + h: J(0, t.h - n.h - J(0, o.h)) }; return { - w: amount.w > tollerance ? amount.w : 0, - h: amount.h > tollerance ? amount.h : 0 + w: s.w > e ? s.w : 0, + h: s.h > e ? s.h : 0 }; }; -const conditionalClass = (elm, classNames, add) => add ? addClass(elm, classNames) : removeClass(elm, classNames); +const conditionalClass = (t, n, o) => o ? addClass(t, n) : removeClass(t, n); -const overflowIsVisible = overflowBehavior => overflowBehavior.indexOf(strVisible) === 0; +const overflowIsVisible = t => 0 === t.indexOf(K); -const createOverflowUpdate = (structureSetupElements, state) => { - const [getState, setState] = state; - const { - _host, - _padding, - _viewport, - _viewportArrange, - _viewportIsTarget, - _viewportAddRemoveClass - } = structureSetupElements; - const { - _nativeScrollbarSize, - _flexboxGlue, - _nativeScrollbarStyling, - _nativeScrollbarIsOverlaid - } = getEnvironment(); - const doViewportArrange = !_viewportIsTarget && !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y); - const [updateSizeFraction, getCurrentSizeFraction] = createCache(whCacheOptions, fractionalSize.bind(0, _viewport)); - const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache(whCacheOptions, scrollSize.bind(0, _viewport)); - const [updateOverflowAmountCache, getCurrentOverflowAmountCache] = createCache(whCacheOptions); - const [updateOverflowStyleCache] = createCache(xyCacheOptions); - - const fixFlexboxGlue = (viewportOverflowState, heightIntrinsic) => { - style(_viewport, { - height: '' +const createOverflowUpdate = (t, n) => { + const [o, e] = n; + const {V: s, A: c, U: i, q: r, nt: a, et: l} = t; + const {L: u, M: f, T: d, I: _} = getEnvironment(); + const g = !a && !d && (_.x || _.y); + const [h, p] = createCache(tt, fractionalSize.bind(0, i)); + const [v, w] = createCache(tt, scrollSize.bind(0, i)); + const [b, y] = createCache(tt); + const [A] = createCache(nt); + const fixFlexboxGlue = (t, n) => { + style(i, { + height: "" }); - - if (heightIntrinsic) { - const { - _paddingAbsolute, - _padding: padding - } = getState(); - const { - _overflowScroll, - _scrollbarsHideOffset - } = viewportOverflowState; - const fSize = fractionalSize(_host); - const hostClientSize = clientSize(_host); - const isContentBox = style(_viewport, 'boxSizing') === 'content-box'; - const paddingVertical = _paddingAbsolute || isContentBox ? padding.b + padding.t : 0; - const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox); - style(_viewport, { - height: hostClientSize.h + fSize.h + (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) - paddingVertical + if (n) { + const {ft: n, A: e} = o(); + const {gt: c, ht: r} = t; + const a = fractionalSize(s); + const l = clientSize(s); + const u = "content-box" === style(i, "boxSizing"); + const f = n || u ? e.b + e.t : 0; + const d = !(_.x && u); + style(i, { + height: l.h + a.h + (c.x && d ? r.x : 0) - f }); } }; - - const getViewportOverflowState = (showNativeOverlaidScrollbars, viewportStyleObj) => { - const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0; - - const getStatePerAxis = (styleKey, isOverlaid, nativeScrollbarSize) => { - const overflowStyle = style(_viewport, styleKey); - const objectPrefferedOverflowStyle = viewportStyleObj ? viewportStyleObj[styleKey] : overflowStyle; - const overflowScroll = objectPrefferedOverflowStyle === 'scroll'; - const nonScrollbarStylingHideOffset = isOverlaid ? arrangeHideOffset : nativeScrollbarSize; - const scrollbarsHideOffset = overflowScroll && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset : 0; - const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset; - return [overflowStyle, overflowScroll, scrollbarsHideOffset, scrollbarsHideOffsetArrange]; + const getViewportOverflowState = (t, n) => { + const o = !d && !t ? Z : 0; + const getStatePerAxis = (t, e, s) => { + const c = style(i, t); + const r = n ? n[t] : c; + const a = "scroll" === r; + const l = e ? o : s; + const u = a && !d ? l : 0; + const f = e && !!o; + return [ c, a, u, f ]; }; - - const [xOverflowStyle, xOverflowScroll, xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] = getStatePerAxis('overflowX', _nativeScrollbarIsOverlaid.x, _nativeScrollbarSize.x); - const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] = getStatePerAxis('overflowY', _nativeScrollbarIsOverlaid.y, _nativeScrollbarSize.y); + const [e, s, c, r] = getStatePerAxis("overflowX", _.x, u.x); + const [a, l, f, g] = getStatePerAxis("overflowY", _.y, u.y); return { - _overflowStyle: { - x: xOverflowStyle, - y: yOverflowStyle + vt: { + x: e, + y: a }, - _overflowScroll: { - x: xOverflowScroll, - y: yOverflowScroll + gt: { + x: s, + y: l }, - _scrollbarsHideOffset: { - x: xScrollbarsHideOffset, - y: yScrollbarsHideOffset + ht: { + x: c, + y: f }, - _scrollbarsHideOffsetArrange: { - x: xScrollbarsHideOffsetArrange, - y: yScrollbarsHideOffsetArrange + wt: { + x: r, + y: g } }; }; - - const setViewportOverflowState = (showNativeOverlaidScrollbars, hasOverflow, overflowOption, viewportStyleObj) => { - const setAxisOverflowStyle = (behavior, hasOverflowAxis) => { - const overflowVisible = overflowIsVisible(behavior); - const overflowVisibleBehavior = hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, '') || ''; - return [hasOverflowAxis && !overflowVisible ? behavior : '', overflowIsVisible(overflowVisibleBehavior) ? 'hidden' : overflowVisibleBehavior]; + const setViewportOverflowState = (t, n, o, e) => { + const setAxisOverflowStyle = (t, n) => { + const o = overflowIsVisible(t); + const e = n && o && t.replace(`${K}-`, "") || ""; + return [ n && !o ? t : "", overflowIsVisible(e) ? "hidden" : e ]; }; - - const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x); - const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y); - viewportStyleObj.overflowX = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX; - viewportStyleObj.overflowY = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY; - return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj); + const [s, c] = setAxisOverflowStyle(o.x, n.x); + const [i, r] = setAxisOverflowStyle(o.y, n.y); + e.overflowX = c && i ? c : s; + e.overflowY = r && s ? r : i; + return getViewportOverflowState(t, e); }; - - const arrangeViewport = (viewportOverflowState, viewportScrollSize, sizeFraction, directionIsRTL) => { - if (doViewportArrange) { - const { - _viewportPaddingStyle - } = getState(); - const { - _scrollbarsHideOffset, - _scrollbarsHideOffsetArrange - } = viewportOverflowState; - const { - x: arrangeX, - y: arrangeY - } = _scrollbarsHideOffsetArrange; - const { - x: hideOffsetX, - y: hideOffsetY - } = _scrollbarsHideOffset; - const viewportArrangeHorizontalPaddingKey = directionIsRTL ? 'paddingRight' : 'paddingLeft'; - const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[viewportArrangeHorizontalPaddingKey]; - const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop; - const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w; - const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h; - const arrangeSize = { - w: hideOffsetY && arrangeY ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px` : '', - h: hideOffsetX && arrangeX ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px` : '' + const arrangeViewport = (t, n, e, s) => { + if (g) { + const {dt: c} = o(); + const {ht: a, wt: l} = t; + const {x: u, y: f} = l; + const {x: d, y: _} = a; + const g = s ? "paddingRight" : "paddingLeft"; + const h = c[g]; + const p = c.paddingTop; + const v = n.w + e.w; + const w = n.h + e.h; + const b = { + w: _ && f ? `${_ + v - h}px` : "", + h: d && u ? `${d + w - p}px` : "" }; - - if (_viewportArrange) { - const { - sheet - } = _viewportArrange; - - if (sheet) { - const { - cssRules - } = sheet; - - if (cssRules) { - if (!cssRules.length) { - sheet.insertRule(`#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, 0); + if (r) { + const {sheet: t} = r; + if (t) { + const {cssRules: n} = t; + if (n) { + if (!n.length) { + t.insertRule(`#${attr(r, "id")} + .${L}::before {}`, 0); } - - const ruleStyle = cssRules[0].style; - ruleStyle.width = arrangeSize.w; - ruleStyle.height = arrangeSize.h; + const o = n[0].style; + o.width = b.w; + o.height = b.h; } } } else { - style(_viewport, { - '--os-vaw': arrangeSize.w, - '--os-vah': arrangeSize.h + style(i, { + "--os-vaw": b.w, + "--os-vah": b.h }); } } - - return doViewportArrange; + return g; }; - - const hideNativeScrollbars = (viewportOverflowState, directionIsRTL, viewportArrange, viewportStyleObj) => { - const { - _scrollbarsHideOffset, - _scrollbarsHideOffsetArrange - } = viewportOverflowState; - const { - x: arrangeX, - y: arrangeY - } = _scrollbarsHideOffsetArrange; - const { - x: hideOffsetX, - y: hideOffsetY - } = _scrollbarsHideOffset; - const { - _viewportPaddingStyle: viewportPaddingStyle - } = getState(); - const horizontalMarginKey = directionIsRTL ? 'marginLeft' : 'marginRight'; - const viewportHorizontalPaddingKey = directionIsRTL ? 'paddingLeft' : 'paddingRight'; - const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey]; - const verticalMarginValue = viewportPaddingStyle.marginBottom; - const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey]; - const verticalPaddingValue = viewportPaddingStyle.paddingBottom; - viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`; - viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue; - viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue; - - if (viewportArrange) { - viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0); - viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0); + const hideNativeScrollbars = (t, n, e, s) => { + const {ht: c, wt: i} = t; + const {x: r, y: a} = i; + const {x: l, y: u} = c; + const {dt: f} = 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; + s.width = `calc(100% + ${u + -1 * g}px)`; + s[d] = -u + g; + s.marginBottom = -l + h; + if (e) { + s[_] = p + (a ? u : 0); + s.paddingBottom = v + (r ? l : 0); } }; - - const undoViewportArrange = (showNativeOverlaidScrollbars, directionIsRTL, viewportOverflowState) => { - if (doViewportArrange) { - const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars); - const { - _viewportPaddingStyle: viewportPaddingStyle - } = getState(); - const { - _scrollbarsHideOffsetArrange - } = finalViewportOverflowState; - const { - x: arrangeX, - y: arrangeY - } = _scrollbarsHideOffsetArrange; - const finalPaddingStyle = {}; - - const assignProps = props => each(props.split(' '), prop => { - finalPaddingStyle[prop] = viewportPaddingStyle[prop]; - }); - - if (arrangeX) { - assignProps('marginBottom paddingTop paddingBottom'); + const undoViewportArrange = (t, n, e) => { + if (g) { + const s = e || getViewportOverflowState(t); + const {dt: c} = o(); + const {wt: r} = s; + const {x: a, y: l} = r; + const u = {}; + const assignProps = t => each(t.split(" "), (t => { + u[t] = c[t]; + })); + if (a) { + assignProps("marginBottom paddingTop paddingBottom"); } - - if (arrangeY) { - assignProps('marginLeft marginRight paddingLeft paddingRight'); + if (l) { + assignProps("marginLeft marginRight paddingLeft paddingRight"); } - - const prevStyle = style(_viewport, keys(finalPaddingStyle)); - removeClass(_viewport, classNameViewportArrange); - - if (!_flexboxGlue) { - finalPaddingStyle.height = ''; + const d = style(i, keys(u)); + removeClass(i, L); + if (!f) { + u.height = ""; } - - style(_viewport, finalPaddingStyle); - return [() => { - hideNativeScrollbars(finalViewportOverflowState, directionIsRTL, doViewportArrange, prevStyle); - style(_viewport, prevStyle); - addClass(_viewport, classNameViewportArrange); - }, finalViewportOverflowState]; + style(i, u); + return [ () => { + hideNativeScrollbars(s, n, g, d); + style(i, d); + addClass(i, L); + }, s ]; } - - return [noop]; + return [ noop ]; }; - - return (updateHints, checkOption, force) => { - const { - _sizeChanged, - _hostMutation, - _contentMutation, - _paddingStyleChanged, - _heightIntrinsicChanged, - _directionChanged - } = updateHints; - const { - _heightIntrinsic, - _directionIsRTL - } = getState(); - const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] = checkOption('nativeScrollbarsOverlaid.show'); - const [overflow, overflowChanged] = checkOption('overflow'); - const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y; - const adjustFlexboxGlue = !_viewportIsTarget && !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || _heightIntrinsicChanged); - const overflowXVisible = overflowIsVisible(overflow.x); - const overflowYVisible = overflowIsVisible(overflow.y); - const overflowVisible = overflowXVisible || overflowYVisible; - let sizeFractionCache = getCurrentSizeFraction(force); - let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force); - let overflowAmuntCache = getCurrentOverflowAmountCache(force); - let preMeasureViewportOverflowState; - - if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) { - _viewportAddRemoveClass(classNameViewportScrollbarStyling, dataValueHostViewportScrollbarStyling, !showNativeOverlaidScrollbars); + return (t, n, r) => { + const {it: u, bt: g, rt: $, _t: L, ct: I, ut: D} = t; + const {st: E, lt: P} = o(); + const [M, j] = n("nativeScrollbarsOverlaid.show"); + const [N, R] = n("overflow"); + const F = M && _.x && _.y; + const H = !a && !f && (u || $ || g || j || I); + const k = overflowIsVisible(N.x); + const B = overflowIsVisible(N.y); + const V = k || B; + let U = p(r); + let Y = w(r); + let q = y(r); + let G; + if (j && d) { + l(T, O, !F); } - - if (adjustFlexboxGlue) { - preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars); - fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic); + if (H) { + G = getViewportOverflowState(F); + fixFlexboxGlue(G, E); } - - if (_sizeChanged || _paddingStyleChanged || _contentMutation || _directionChanged || showNativeOverlaidScrollbarsChanged) { - if (overflowVisible) { - _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false); + if (u || L || $ || D || j) { + if (V) { + l(z, x, false); } - - const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(showNativeOverlaidScrollbars, _directionIsRTL, preMeasureViewportOverflowState); - const [_sizeFraction, _sizeFractionChanged] = sizeFractionCache = updateSizeFraction(force); - const [_viewportScrollSize, _viewportScrollSizeChanged] = viewportScrollSizeCache = updateViewportScrollSizeCache(force); - const viewportclientSize = clientSize(_viewport); - let arrangedViewportScrollSize = _viewportScrollSize; - let arrangedViewportClientSize = viewportclientSize; - redoViewportArrange(); - - if ((_viewportScrollSizeChanged || _sizeFractionChanged || showNativeOverlaidScrollbarsChanged) && undoViewportArrangeOverflowState && !showNativeOverlaidScrollbars && arrangeViewport(undoViewportArrangeOverflowState, _viewportScrollSize, _sizeFraction, _directionIsRTL)) { - arrangedViewportClientSize = clientSize(_viewport); - arrangedViewportScrollSize = scrollSize(_viewport); + const [t, n] = undoViewportArrange(F, P, G); + const [o, e] = U = h(r); + const [s, c] = Y = v(r); + const a = clientSize(i); + let u = s; + let f = a; + t(); + if ((c || e || j) && n && !F && arrangeViewport(n, s, o, P)) { + f = clientSize(i); + u = scrollSize(i); } - - overflowAmuntCache = updateOverflowAmountCache(getOverflowAmount({ - w: max(_viewportScrollSize.w, arrangedViewportScrollSize.w), - h: max(_viewportScrollSize.h, arrangedViewportScrollSize.h) + q = b(getOverflowAmount({ + w: J(s.w, u.w), + h: J(s.h, u.h) }, { - w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - _viewportScrollSize.w), - h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - _viewportScrollSize.h) - }, _sizeFraction), force); + w: f.w + J(0, a.w - s.w), + h: f.h + J(0, a.h - s.h) + }, o), r); } - - const [overflowAmount, overflowAmountChanged] = overflowAmuntCache; - const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache; - const [sizeFraction, sizeFractionChanged] = sizeFractionCache; - const hasOverflow = { - x: overflowAmount.w > 0, - y: overflowAmount.h > 0 + const [W, X] = q; + const [K, Q] = Y; + const [Z, tt] = U; + const nt = { + x: W.w > 0, + y: W.h > 0 }; - const removeClipping = overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y) || overflowXVisible && hasOverflow.x && !hasOverflow.y || overflowYVisible && hasOverflow.y && !hasOverflow.x; - - if (_paddingStyleChanged || _directionChanged || sizeFractionChanged || viewportScrollSizeChanged || overflowAmountChanged || overflowChanged || showNativeOverlaidScrollbarsChanged || adjustFlexboxGlue) { - const viewportStyle = { + const ot = k && B && (nt.x || nt.y) || k && nt.x && !nt.y || B && nt.y && !nt.x; + if (L || D || tt || Q || X || R || j || H) { + const t = { marginRight: 0, marginBottom: 0, marginLeft: 0, - width: '', - overflowY: '', - overflowX: '' + width: "", + overflowY: "", + overflowX: "" }; - const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, hasOverflow, overflow, viewportStyle); - const viewportArranged = arrangeViewport(viewportOverflowState, viewportScrollSize, sizeFraction, _directionIsRTL); - - if (!_viewportIsTarget) { - hideNativeScrollbars(viewportOverflowState, _directionIsRTL, viewportArranged, viewportStyle); + const n = setViewportOverflowState(F, nt, N, t); + const o = arrangeViewport(n, K, Z, P); + if (!a) { + hideNativeScrollbars(n, P, o, t); } - - if (adjustFlexboxGlue) { - fixFlexboxGlue(viewportOverflowState, _heightIntrinsic); + if (H) { + fixFlexboxGlue(n, E); } - - if (_viewportIsTarget) { - attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX); - attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY); + if (a) { + attr(s, S, t.overflowX); + attr(s, C, t.overflowY); } else { - style(_viewport, viewportStyle); + style(i, t); } } - - attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping); - conditionalClass(_padding, classNameOverflowVisible, removeClipping); - !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible); - const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle); - setState({ - _overflowStyle: overflowStyle, - _overflowAmount: { - x: overflowAmount.w, - y: overflowAmount.h + attrClass(s, m, x, ot); + conditionalClass(c, z, ot); + !a && conditionalClass(i, z, V); + const [et, st] = A(getViewportOverflowState(F).vt); + e({ + vt: et, + yt: { + x: W.w, + y: W.h }, - _hasOverflow: hasOverflow + St: nt }); return { - _overflowStyleChanged: overflowStyleChanged, - _overflowAmountChanged: overflowAmountChanged + Ct: st, + xt: X }; }; }; -const prepareUpdateHints = (leading, adaptive, force) => { - const result = {}; - const finalAdaptive = adaptive || {}; - const objKeys = keys(leading).concat(keys(finalAdaptive)); - each(objKeys, key => { - const leadingValue = leading[key]; - const adaptiveValue = finalAdaptive[key]; - result[key] = !!(force || leadingValue || adaptiveValue); - }); - return result; +const prepareUpdateHints = (t, n, o) => { + const e = {}; + const s = n || {}; + const c = keys(t).concat(keys(s)); + each(c, (n => { + const c = t[n]; + const i = s[n]; + e[n] = !!(o || c || i); + })); + return e; }; -const createStructureSetupUpdate = (structureSetupElements, state) => { - const { - _viewport - } = structureSetupElements; - const { - _nativeScrollbarStyling, - _nativeScrollbarIsOverlaid, - _flexboxGlue - } = getEnvironment(); - const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y); - const updateSegments = [createTrinsicUpdate(structureSetupElements, state), createPaddingUpdate(structureSetupElements, state), createOverflowUpdate(structureSetupElements, state)]; - return (checkOption, updateHints, force) => { - const initialUpdateHints = prepareUpdateHints(assignDeep({ - _sizeChanged: false, - _paddingStyleChanged: false, - _directionChanged: false, - _heightIntrinsicChanged: false, - _overflowAmountChanged: false, - _overflowStyleChanged: false, - _hostMutation: false, - _contentMutation: false - }, updateHints), {}, force); - const adjustScrollOffset = doViewportArrange || !_flexboxGlue; - const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport); - const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport); - let adaptivedUpdateHints = initialUpdateHints; - each(updateSegments, updateSegment => { - adaptivedUpdateHints = prepareUpdateHints(adaptivedUpdateHints, updateSegment(adaptivedUpdateHints, checkOption, !!force) || {}, force); - }); - - if (isNumber(scrollOffsetX)) { - scrollLeft(_viewport, scrollOffsetX); +const createStructureSetupUpdate = (t, n) => { + const {U: o} = t; + const {T: e, I: s, M: c} = getEnvironment(); + const i = !e && (s.x || s.y); + const r = [ createTrinsicUpdate(t, n), createPaddingUpdate(t, n), createOverflowUpdate(t, n) ]; + return (t, n, e) => { + const s = prepareUpdateHints(assignDeep({ + it: false, + _t: false, + ut: false, + ct: false, + xt: false, + Ct: false, + bt: false, + rt: false + }, n), {}, e); + const a = i || !c; + const l = a && scrollLeft(o); + const u = a && scrollTop(o); + let f = s; + each(r, (n => { + f = prepareUpdateHints(f, n(f, t, !!e) || {}, e); + })); + if (isNumber(l)) { + scrollLeft(o, l); } - - if (isNumber(scrollOffsetY)) { - scrollTop(_viewport, scrollOffsetY); + if (isNumber(u)) { + scrollTop(o, u); } - - return adaptivedUpdateHints; + return f; }; }; -const animationStartEventName = 'animationstart'; -const scrollEventName = 'scroll'; -const scrollAmount = 3333333; +const ot = "animationstart"; -const getElmDirectionIsRTL = elm => style(elm, 'direction') === 'rtl'; +const et = "scroll"; -const domRectHasDimensions = rect => rect && (rect.height || rect.width); +const st = 3333333; -const createSizeObserver = (target, onSizeChangedCallback, options) => { - const { - _direction: observeDirectionChange = false, - _appear: observeAppearChange = false - } = options || {}; - const { - _rtlScrollBehavior: rtlScrollBehavior - } = getEnvironment(); - const baseElements = createDOM(`
`); - const sizeObserver = baseElements[0]; - const listenerElement = sizeObserver.firstChild; - const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver); - const [updateResizeObserverContentRectCache] = createCache({ - _initialValue: undefined, - _alwaysUpdateValues: true, - _equal: (currVal, newVal) => !(!currVal || !domRectHasDimensions(currVal) && domRectHasDimensions(newVal)) +const getElmDirectionIsRTL = t => "rtl" === style(t, "direction"); + +const domRectHasDimensions = t => t && (t.height || t.width); + +const createSizeObserver = (t, n, o) => { + const {Ot: e = false, At: s = false} = o || {}; + const {P: c} = getEnvironment(); + const i = createDOM(`
`); + const r = i[0]; + const a = r.firstChild; + const l = getElmDirectionIsRTL.bind(0, r); + const [_] = createCache({ + o: void 0, + _: true, + u: (t, n) => !(!t || !domRectHasDimensions(t) && domRectHasDimensions(n)) }); - - const onSizeChangedCallbackProxy = sizeChangedContext => { - const isResizeObserverCall = isArray(sizeChangedContext) && sizeChangedContext.length > 0 && isObject(sizeChangedContext[0]); - const hasDirectionCache = !isResizeObserverCall && isBoolean(sizeChangedContext[0]); - let skip = false; - let appear = false; - let doDirectionScroll = true; - - if (isResizeObserverCall) { - const [currRContentRect,, prevContentRect] = updateResizeObserverContentRectCache(sizeChangedContext.pop().contentRect); - const hasDimensions = domRectHasDimensions(currRContentRect); - const hadDimensions = domRectHasDimensions(prevContentRect); - skip = !prevContentRect || !hasDimensions; - appear = !hadDimensions && hasDimensions; - doDirectionScroll = !skip; - } else if (hasDirectionCache) { - [, doDirectionScroll] = sizeChangedContext; + const onSizeChangedCallbackProxy = t => { + const o = isArray(t) && t.length > 0 && isObject(t[0]); + const s = !o && isBoolean(t[0]); + let i = false; + let a = false; + let l = true; + if (o) { + const [n, , o] = _(t.pop().contentRect); + const e = domRectHasDimensions(n); + const s = domRectHasDimensions(o); + i = !o || !e; + a = !s && e; + l = !i; + } else if (s) { + [, l] = t; } else { - appear = sizeChangedContext === true; + a = true === t; } - - if (observeDirectionChange && doDirectionScroll) { - const rtl = hasDirectionCache ? sizeChangedContext[0] : getElmDirectionIsRTL(sizeObserver); - scrollLeft(sizeObserver, rtl ? rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount : scrollAmount); - scrollTop(sizeObserver, scrollAmount); + if (e && l) { + const n = s ? t[0] : getElmDirectionIsRTL(r); + scrollLeft(r, n ? c.n ? -st : c.i ? 0 : st : st); + scrollTop(r, st); } - - if (!skip) { - onSizeChangedCallback({ - _sizeChanged: !hasDirectionCache, - _directionIsRTLCache: hasDirectionCache ? sizeChangedContext : undefined, - _appear: !!appear + if (!i) { + n({ + it: !s, + $t: s ? t : void 0, + At: !!a }); } }; - - const offListeners = []; - let appearCallback = observeAppearChange ? onSizeChangedCallbackProxy : false; - let directionIsRTLCache; - - if (ResizeObserverConstructor) { - const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy); - resizeObserverInstance.observe(listenerElement); - push(offListeners, () => { - resizeObserverInstance.disconnect(); - }); + const g = []; + let h = s ? onSizeChangedCallbackProxy : false; + let p; + if (u) { + const t = new u(onSizeChangedCallbackProxy); + t.observe(a); + push(g, (() => { + t.disconnect(); + })); } else { - const observerElementChildren = createDOM(`
`); - appendChildren(listenerElement, observerElementChildren); - addClass(listenerElement, classNameSizeObserverListenerScroll); - const observerElementChildrenRoot = observerElementChildren[0]; - const shrinkElement = observerElementChildrenRoot.lastChild; - const expandElement = observerElementChildrenRoot.firstChild; - const expandElementChild = expandElement == null ? void 0 : expandElement.firstChild; - let cacheSize = offsetSize(observerElementChildrenRoot); - let currSize = cacheSize; - let isDirty = false; - let rAFId; - + const t = createDOM(`
`); + appendChildren(a, t); + addClass(a, M); + const n = t[0]; + const o = n.lastChild; + const e = n.firstChild; + const c = null == e ? void 0 : e.firstChild; + let i = offsetSize(n); + let r = i; + let l = false; + let u; const reset = () => { - scrollLeft(expandElement, scrollAmount); - scrollTop(expandElement, scrollAmount); - scrollLeft(shrinkElement, scrollAmount); - scrollTop(shrinkElement, scrollAmount); + scrollLeft(e, st); + scrollTop(e, st); + scrollLeft(o, st); + scrollTop(o, st); }; - - const onResized = appear => { - rAFId = 0; - - if (isDirty) { - cacheSize = currSize; - onSizeChangedCallbackProxy(appear === true); + const onResized = t => { + u = 0; + if (l) { + i = r; + onSizeChangedCallbackProxy(true === t); } }; - - const onScroll = scrollEvent => { - currSize = offsetSize(observerElementChildrenRoot); - isDirty = !scrollEvent || !equalWH(currSize, cacheSize); - - if (scrollEvent) { - stopAndPrevent(scrollEvent); - - if (isDirty && !rAFId) { - cAF(rAFId); - rAFId = rAF(onResized); + const onScroll = t => { + r = offsetSize(n); + l = !t || !equalWH(r, i); + if (t) { + stopAndPrevent(t); + if (l && !u) { + f(u); + u = d(onResized); } } else { - onResized(scrollEvent === false); + onResized(false === t); } - reset(); }; - - push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]); - style(expandElementChild, { - width: scrollAmount, - height: scrollAmount + push(g, [ on(e, et, onScroll), on(o, et, onScroll) ]); + style(c, { + width: st, + height: st }); reset(); - appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset; + h = s ? onScroll.bind(0, false) : reset; } - - if (observeDirectionChange) { - directionIsRTLCache = createCache({ - _initialValue: !getIsDirectionRTL() - }, getIsDirectionRTL); - const [updateDirectionIsRTLCache] = directionIsRTLCache; - push(offListeners, on(sizeObserver, scrollEventName, event => { - const directionIsRTLCacheValues = updateDirectionIsRTLCache(); - const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues; - - if (directionIsRTLChanged) { - removeClass(listenerElement, 'ltr rtl'); - - if (directionIsRTL) { - addClass(listenerElement, 'rtl'); + if (e) { + p = createCache({ + o: !l() + }, l); + const [t] = p; + push(g, on(r, et, (n => { + const o = t(); + const [e, s] = o; + if (s) { + removeClass(a, "ltr rtl"); + if (e) { + addClass(a, "rtl"); } else { - addClass(listenerElement, 'ltr'); + addClass(a, "ltr"); } - - onSizeChangedCallbackProxy(directionIsRTLCacheValues); + onSizeChangedCallbackProxy(o); } - - stopAndPrevent(event); + stopAndPrevent(n); + }))); + } + if (h) { + addClass(r, E); + push(g, on(r, ot, h, { + O: !!u })); } - - if (appearCallback) { - addClass(sizeObserver, classNameSizeObserverAppear); - push(offListeners, on(sizeObserver, animationStartEventName, appearCallback, { - _once: !!ResizeObserverConstructor - })); - } - - prependChildren(target, sizeObserver); + prependChildren(t, r); return () => { - runEach(offListeners); - removeElements(sizeObserver); + runEach(g); + removeElements(r); }; }; -const isHeightIntrinsic = ioEntryOrSize => ioEntryOrSize.h === 0 || ioEntryOrSize.isIntersecting || ioEntryOrSize.intersectionRatio > 0; +const isHeightIntrinsic = t => 0 === t.h || t.isIntersecting || t.intersectionRatio > 0; -const createTrinsicObserver = (target, onTrinsicChangedCallback) => { - const trinsicObserver = createDiv(classNameTrinsicObserver); - const offListeners = []; - const [updateHeightIntrinsicCache] = createCache({ - _initialValue: false +const createTrinsicObserver = (t, n) => { + const o = createDiv(R); + const e = []; + const [s] = createCache({ + o: false }); - - const triggerOnTrinsicChangedCallback = updateValue => { - if (updateValue) { - const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue)); - const [, heightIntrinsicChanged] = heightIntrinsic; - - if (heightIntrinsicChanged) { - onTrinsicChangedCallback(heightIntrinsic); + const triggerOnTrinsicChangedCallback = t => { + if (t) { + const o = s(isHeightIntrinsic(t)); + const [, e] = o; + if (e) { + n(o); } } }; - - if (IntersectionObserverConstructor) { - const intersectionObserverInstance = new IntersectionObserverConstructor(entries => { - if (entries && entries.length > 0) { - triggerOnTrinsicChangedCallback(entries.pop()); + if (l) { + const n = new l((t => { + if (t && t.length > 0) { + triggerOnTrinsicChangedCallback(t.pop()); } - }, { - root: target - }); - intersectionObserverInstance.observe(trinsicObserver); - push(offListeners, () => { - intersectionObserverInstance.disconnect(); + }), { + root: t }); + n.observe(o); + push(e, (() => { + n.disconnect(); + })); } else { const onSizeChanged = () => { - const newSize = offsetSize(trinsicObserver); - triggerOnTrinsicChangedCallback(newSize); + const t = offsetSize(o); + triggerOnTrinsicChangedCallback(t); }; - - push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)); + push(e, createSizeObserver(o, onSizeChanged)); onSizeChanged(); } - - prependChildren(target, trinsicObserver); + prependChildren(t, o); return () => { - runEach(offListeners); - removeElements(trinsicObserver); + runEach(e); + removeElements(o); }; }; -const createEventContentChange = (target, callback, eventContentChange) => { - let map; - let destroyed = false; - +const createEventContentChange = (t, n, o) => { + let e; + let s = false; const destroy = () => { - destroyed = true; + s = true; }; - - const updateElements = getElements => { - if (eventContentChange) { - const eventElmList = eventContentChange.reduce((arr, item) => { - if (item) { - const selector = item[0]; - const eventNames = item[1]; - const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target)); - - if (elements && elements.length && eventNames && isString(eventNames)) { - push(arr, [elements, eventNames.trim()], true); + const updateElements = c => { + if (o) { + const i = o.reduce(((n, o) => { + if (o) { + const e = o[0]; + const s = o[1]; + const i = s && e && (c ? c(e) : find(e, t)); + if (i && i.length && s && isString(s)) { + push(n, [ i, s.trim() ], true); } } - - return arr; - }, []); - each(eventElmList, item => each(item[0], elm => { - const eventNames = item[1]; - const entry = map.get(elm); - - if (entry) { - const entryEventNames = entry[0]; - const entryOff = entry[1]; - - if (entryEventNames === eventNames) { - entryOff(); + return n; + }), []); + each(i, (t => each(t[0], (o => { + const c = t[1]; + const i = e.get(o); + if (i) { + const t = i[0]; + const n = i[1]; + if (t === c) { + n(); } } - - const off = on(elm, eventNames, event => { - if (destroyed) { - off(); - map.delete(elm); + const r = on(o, c, (t => { + if (s) { + r(); + e.delete(o); } else { - callback(event); + n(t); } - }); - map.set(elm, [eventNames, off]); - })); + })); + e.set(o, [ c, r ]); + })))); } }; - - if (eventContentChange) { - map = new WeakMap(); + if (o) { + e = new WeakMap; updateElements(); } - - return [destroy, updateElements]; + return [ destroy, updateElements ]; }; -const createDOMObserver = (target, isContentObserver, callback, options) => { - let isConnected = false; - const { - _attributes, - _styleChangingAttributes, - _eventContentChange, - _nestedTargetSelector, - _ignoreTargetChange, - _ignoreContentChange - } = options || {}; - const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(target, debounce(() => { - if (isConnected) { - callback(true); +const createDOMObserver = (t, n, o, e) => { + let s = false; + const {Lt: c, It: i, Tt: r, zt: l, Dt: u, Et: f} = e || {}; + const [d, _] = createEventContentChange(t, debounce((() => { + if (s) { + o(true); } - }, { - _timeout: 33, - _maxDelay: 99 - }), _eventContentChange); - const finalAttributes = _attributes || []; - const finalStyleChangingAttributes = _styleChangingAttributes || []; - const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); - - const observerCallback = mutations => { - const ignoreTargetChange = _ignoreTargetChange || noop; - const ignoreContentChange = _ignoreContentChange || noop; - const targetChangedAttrs = []; - const totalAddedNodes = []; - let targetStyleChanged = false; - let contentChanged = false; - let childListChanged = false; - each(mutations, mutation => { - const { - attributeName, - target: mutationTarget, - type, - oldValue, - addedNodes - } = mutation; - const isAttributesType = type === 'attributes'; - const isChildListType = type === 'childList'; - const targetIsMutationTarget = target === mutationTarget; - const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget, attributeName) : 0; - const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue; - const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged; - - if (isContentObserver && !targetIsMutationTarget) { - const notOnlyAttrChanged = !isAttributesType; - const contentAttrChanged = isAttributesType && styleChangingAttrChanged; - const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector); - const baseAssertion = isNestedTarget ? !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue) : notOnlyAttrChanged || contentAttrChanged; - const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options); - push(totalAddedNodes, addedNodes); - contentChanged = contentChanged || contentFinalChanged; - childListChanged = childListChanged || isChildListType; + }), { + g: 33, + p: 99 + }), r); + const g = c || []; + const h = i || []; + const p = g.concat(h); + const observerCallback = s => { + const c = u || noop; + const i = f || noop; + const r = []; + const a = []; + let d = false; + let g = false; + let p = false; + each(s, (o => { + const {attributeName: s, target: u, type: f, oldValue: _, addedNodes: v} = o; + const w = "attributes" === f; + const b = "childList" === f; + const y = t === u; + const m = w && isString(s) ? attr(u, s) : 0; + const S = 0 !== m && _ !== m; + const C = indexOf(h, s) > -1 && S; + if (n && !y) { + const n = !w; + const r = w && C; + const f = r && l && is(u, l); + const d = f ? !c(u, s, _, m) : n || r; + const h = d && !i(o, !!f, t, e); + push(a, v); + g = g || h; + p = p || b; } - - if (!isContentObserver && targetIsMutationTarget && attributeChanged && !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue)) { - push(targetChangedAttrs, attributeName); - targetStyleChanged = targetStyleChanged || styleChangingAttrChanged; + if (!n && y && S && !c(u, s, _, m)) { + push(r, s); + d = d || C; } - }); - - if (childListChanged && !isEmptyArray(totalAddedNodes)) { - updateEventContentChangeElements(selector => totalAddedNodes.reduce((arr, node) => { - push(arr, find(selector, node)); - return is(node, selector) ? push(arr, node) : arr; - }, [])); + })); + if (p && !isEmptyArray(a)) { + _((t => a.reduce(((n, o) => { + push(n, find(t, o)); + return is(o, t) ? push(n, o) : n; + }), []))); } - - if (isContentObserver) { - contentChanged && callback(false); - } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) { - callback(targetChangedAttrs, targetStyleChanged); + if (n) { + g && o(false); + } else if (!isEmptyArray(r) || d) { + o(r, d); } }; - - const mutationObserver = new MutationObserverConstructor(observerCallback); - mutationObserver.observe(target, { + const v = new a(observerCallback); + v.observe(t, { attributes: true, attributeOldValue: true, - attributeFilter: observedAttributes, - subtree: isContentObserver, - childList: isContentObserver, - characterData: isContentObserver + attributeFilter: p, + subtree: n, + childList: n, + characterData: n }); - isConnected = true; - return [() => { - if (isConnected) { - destroyEventContentChange(); - mutationObserver.disconnect(); - isConnected = false; + s = true; + return [ () => { + if (s) { + d(); + v.disconnect(); + s = false; } }, () => { - if (isConnected) { - observerCallback(mutationObserver.takeRecords()); + if (s) { + observerCallback(v.takeRecords()); } - }]; + } ]; }; -const hostSelector = `[${dataAttributeHost}]`; -const viewportSelector = `.${classNameViewport}`; -const viewportAttrsFromTarget = ['tabindex']; -const baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows']; -const baseStyleChangingAttrs = ['id', 'class', 'style', 'open']; -const createStructureSetupObservers = (structureSetupElements, state, structureSetupUpdate) => { - let debounceTimeout; - let debounceMaxDelay; - let contentMutationObserver; - const [, setState] = state; - const { - _host, - _viewport, - _content, - _isTextarea, - _viewportIsTarget, - _viewportHasClass, - _viewportAddRemoveClass - } = structureSetupElements; - const { - _nativeScrollbarStyling, - _flexboxGlue - } = getEnvironment(); - const [updateContentSizeCache] = createCache({ - _equal: equalWH, - _initialValue: { +const ct = `[${m}]`; + +const it = `.${$}`; + +const rt = [ "tabindex" ]; + +const at = [ "wrap", "cols", "rows" ]; + +const lt = [ "id", "class", "style", "open" ]; + +const createStructureSetupObservers = (t, n, o) => { + let e; + let s; + let c; + const [, i] = n; + const {V: r, U: a, $: l, K: f, nt: d, ot: _, et: g} = t; + const {T: h, M: p} = getEnvironment(); + const [v] = createCache({ + u: equalWH, + o: { w: 0, h: 0 } - }, () => { - const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible); - - has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible); - const contentScroll = scrollSize(_content); - const viewportScroll = scrollSize(_viewport); - const fractional = fractionalSize(_viewport); - has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true); + }, (() => { + const t = _(z, x); + t && g(z, x); + const n = scrollSize(l); + const o = scrollSize(a); + const e = fractionalSize(a); + t && g(z, x, true); return { - w: viewportScroll.w + contentScroll.w + fractional.w, - h: viewportScroll.h + contentScroll.h + fractional.h + w: o.w + n.w + e.w, + h: o.h + n.h + e.h }; - }); - const contentMutationObserverAttr = _isTextarea ? baseStyleChangingAttrsTextarea : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea); - const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, { - _timeout: () => debounceTimeout, - _maxDelay: () => debounceMaxDelay, - - _mergeParams(prev, curr) { - const [prevObj] = prev; - const [currObj] = curr; - return [keys(prevObj).concat(keys(currObj)).reduce((obj, key) => { - obj[key] = prevObj[key] || currObj[key]; - return obj; - }, {})]; - } - - }); - - const updateViewportAttrsFromHost = attributes => { - each(attributes || viewportAttrsFromTarget, attribute => { - if (indexOf(viewportAttrsFromTarget, attribute) > -1) { - const hostAttr = attr(_host, attribute); - - if (isString(hostAttr)) { - attr(_viewport, attribute, hostAttr); - } else { - removeAttr(_viewport, attribute); - } - } - }); - }; - - const onTrinsicChanged = heightIntrinsicCache => { - const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache; - setState({ - _heightIntrinsic: heightIntrinsic - }); - structureSetupUpdate({ - _heightIntrinsicChanged: heightIntrinsicChanged - }); - }; - - const onSizeChanged = ({ - _sizeChanged, - _directionIsRTLCache, - _appear - }) => { - const updateFn = !_sizeChanged || _appear ? structureSetupUpdate : structureSetupUpdateWithDebouncedAdaptiveUpdateHints; - let directionChanged = false; - - if (_directionIsRTLCache) { - const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache; - directionChanged = directionIsRTLChanged; - setState({ - _directionIsRTL: directionIsRTL - }); - } - - updateFn({ - _sizeChanged, - _directionChanged: directionChanged - }); - }; - - const onContentMutation = contentChangedTroughEvent => { - const [, contentSizeChanged] = updateContentSizeCache(); - const updateFn = contentChangedTroughEvent ? structureSetupUpdate : structureSetupUpdateWithDebouncedAdaptiveUpdateHints; - - if (contentSizeChanged) { - updateFn({ - _contentMutation: true - }); - } - }; - - const onHostMutation = (targetChangedAttrs, targetStyleChanged) => { - if (targetStyleChanged) { - structureSetupUpdateWithDebouncedAdaptiveUpdateHints({ - _hostMutation: true - }); - } else if (!_viewportIsTarget) { - updateViewportAttrsFromHost(targetChangedAttrs); - } - }; - - const destroyTrinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged); - const destroySizeObserver = !_viewportIsTarget && createSizeObserver(_host, onSizeChanged, { - _appear: true, - _direction: !_nativeScrollbarStyling - }); - const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, { - _styleChangingAttributes: baseStyleChangingAttrs, - _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget) - }); - const viewportIsTargetResizeObserver = _viewportIsTarget && new ResizeObserverConstructor(onSizeChanged.bind(0, { - _sizeChanged: true })); - viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host); - updateViewportAttrsFromHost(); - return [checkOption => { - const [ignoreMutation] = checkOption('updating.ignoreMutation'); - const [attributes, attributesChanged] = checkOption('updating.attributes'); - const [elementEvents, elementEventsChanged] = checkOption('updating.elementEvents'); - const [debounceValue, debounceChanged] = checkOption('updating.debounce'); - const updateContentMutationObserver = elementEventsChanged || attributesChanged; - - const ignoreMutationFromOptions = mutation => isFunction(ignoreMutation) && ignoreMutation(mutation); - - if (updateContentMutationObserver) { - if (contentMutationObserver) { - contentMutationObserver[1](); - contentMutationObserver[0](); + const w = f ? at : lt.concat(at); + const b = debounce(o, { + g: () => e, + p: () => s, + v(t, n) { + const [o] = t; + const [e] = n; + return [ keys(o).concat(keys(e)).reduce(((t, n) => { + t[n] = o[n] || e[n]; + return t; + }), {}) ]; + } + }); + const updateViewportAttrsFromHost = t => { + each(t || rt, (t => { + if (indexOf(rt, t) > -1) { + const n = attr(r, t); + if (isString(n)) { + attr(a, t, n); + } else { + removeAttr(a, t); + } } - - contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, { - _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []), - _attributes: contentMutationObserverAttr.concat(attributes || []), - _eventContentChange: elementEvents, - _nestedTargetSelector: hostSelector, - _ignoreContentChange: (mutation, isNestedTarget) => { - const { - target, - attributeName - } = mutation; - const ignore = !isNestedTarget && attributeName ? liesBetween(target, hostSelector, viewportSelector) : false; - return ignore || !!ignoreMutationFromOptions(mutation); + })); + }; + const onTrinsicChanged = t => { + const [n, e] = t; + i({ + st: n + }); + o({ + ct: e + }); + }; + const onSizeChanged = ({it: t, $t: n, At: e}) => { + const s = !t || e ? o : b; + let c = false; + if (n) { + const [t, o] = n; + c = o; + i({ + lt: t + }); + } + s({ + it: t, + ut: c + }); + }; + const onContentMutation = t => { + const [, n] = v(); + const e = t ? o : b; + if (n) { + e({ + rt: true + }); + } + }; + const onHostMutation = (t, n) => { + if (n) { + b({ + bt: true + }); + } else if (!d) { + updateViewportAttrsFromHost(t); + } + }; + const y = (l || !p) && createTrinsicObserver(r, onTrinsicChanged); + const m = !d && createSizeObserver(r, onSizeChanged, { + At: true, + Ot: !h + }); + const [S] = createDOMObserver(r, false, onHostMutation, { + It: lt, + Lt: lt.concat(rt) + }); + const C = d && new u(onSizeChanged.bind(0, { + it: true + })); + C && C.observe(r); + updateViewportAttrsFromHost(); + return [ t => { + const [n] = t("updating.ignoreMutation"); + const [o, i] = t("updating.attributes"); + const [r, u] = t("updating.elementEvents"); + const [f, d] = t("updating.debounce"); + const _ = u || i; + const ignoreMutationFromOptions = t => isFunction(n) && n(t); + if (_) { + if (c) { + c[1](); + c[0](); + } + c = createDOMObserver(l || a, true, onContentMutation, { + It: w.concat(o || []), + Lt: w.concat(o || []), + Tt: r, + zt: ct, + Et: (t, n) => { + const {target: o, attributeName: e} = t; + const s = !n && e ? liesBetween(o, ct, it) : false; + return s || !!ignoreMutationFromOptions(t); } }); } - - if (debounceChanged) { - structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush(); - - if (isArray(debounceValue)) { - const timeout = debounceValue[0]; - const maxWait = debounceValue[1]; - debounceTimeout = isNumber(timeout) ? timeout : false; - debounceMaxDelay = isNumber(maxWait) ? maxWait : false; - } else if (isNumber(debounceValue)) { - debounceTimeout = debounceValue; - debounceMaxDelay = false; + if (d) { + b.m(); + if (isArray(f)) { + const t = f[0]; + const n = f[1]; + e = isNumber(t) ? t : false; + s = isNumber(n) ? n : false; + } else if (isNumber(f)) { + e = f; + s = false; } else { - debounceTimeout = false; - debounceMaxDelay = false; + e = false; + s = false; } } }, () => { - contentMutationObserver && contentMutationObserver[0](); - destroyTrinsicObserver && destroyTrinsicObserver(); - destroySizeObserver && destroySizeObserver(); - viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect(); - destroyHostMutationObserver(); - }]; + c && c[0](); + y && y(); + m && m(); + C && C.disconnect(); + S(); + } ]; }; -const initialStructureSetupUpdateState = { - _padding: { +const ut = { + A: { t: 0, r: 0, b: 0, l: 0 }, - _paddingAbsolute: false, - _viewportPaddingStyle: { + ft: false, + dt: { marginRight: 0, marginBottom: 0, marginLeft: 0, @@ -2252,348 +1995,286 @@ const initialStructureSetupUpdateState = { paddingBottom: 0, paddingLeft: 0 }, - _overflowAmount: { + yt: { x: 0, y: 0 }, - _overflowStyle: { - x: 'hidden', - y: 'hidden' + vt: { + x: "hidden", + y: "hidden" }, - _hasOverflow: { + St: { x: false, y: false }, - _heightIntrinsic: false, - _directionIsRTL: false -}; -const createStructureSetup = (target, options) => { - const checkOptionsFallback = createOptionCheck(options, {}); - const state = createState(initialStructureSetupUpdateState); - const onUpdatedListeners = new Set(); - const [getState] = state; - - const runOnUpdatedListeners = (updateHints, changedOptions, force) => { - runEach(onUpdatedListeners, [updateHints, changedOptions || {}, !!force]); - }; - - const [elements, destroyElements] = createStructureSetupElements(target); - const updateStructure = createStructureSetupUpdate(elements, state); - const [updateObservers, destroyObservers] = createStructureSetupObservers(elements, state, updateHints => { - runOnUpdatedListeners(updateStructure(checkOptionsFallback, updateHints)); - }); - const structureSetupState = getState.bind(0); - - structureSetupState._addOnUpdatedListener = listener => { - onUpdatedListeners.add(listener); - }; - - structureSetupState._elements = elements; - return [(changedOptions, force) => { - const checkOption = createOptionCheck(options, changedOptions, force); - updateObservers(checkOption); - runOnUpdatedListeners(updateStructure(checkOption, {}, force)); - }, structureSetupState, () => { - onUpdatedListeners.clear(); - destroyObservers(); - destroyElements(); - }]; + st: false, + lt: false }; -const generateScrollbarDOM = scrollbarClassName => { - const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`); - const track = createDiv(classNameScrollbarTrack); - const handle = createDiv(classNameScrollbarHandle); - appendChildren(scrollbar, track); - appendChildren(track, handle); +const createStructureSetup = (t, n) => { + const o = createOptionCheck(n, {}); + const e = createState(ut); + const s = new Set; + const [c] = e; + const runOnUpdatedListeners = (t, n, o) => { + runEach(s, [ t, n || {}, !!o ]); + }; + const [i, r] = createStructureSetupElements(t); + const a = createStructureSetupUpdate(i, e); + const [l, u] = createStructureSetupObservers(i, e, (t => { + runOnUpdatedListeners(a(o, t)); + })); + const f = c.bind(0); + f.Pt = t => { + s.add(t); + }; + f.Mt = i; + return [ (t, o) => { + const e = createOptionCheck(n, t, o); + l(e); + runOnUpdatedListeners(a(e, {}, o)); + }, f, () => { + s.clear(); + u(); + r(); + } ]; +}; + +const generateScrollbarDOM = t => { + const n = createDiv(`${F} ${t}`); + const o = createDiv(B); + const e = createDiv(V); + appendChildren(n, o); + appendChildren(o, e); return { - _scrollbar: scrollbar, - _track: track, - _handle: handle + jt: n, + Nt: o, + Rt: e }; }; -const createScrollbarsSetupElements = (target, structureSetupElements) => { - const { - _getInitializationStrategy - } = getEnvironment(); - - const { - _scrollbarsSlot: environmentScrollbarSlot - } = _getInitializationStrategy(); - - const { - _target, - _host, - _viewport, - _targetIsElm - } = structureSetupElements; - const initializationScrollbarSlot = !_targetIsElm && target.scrollbarsSlot; - const initializationScrollbarSlotResult = isFunction(initializationScrollbarSlot) ? initializationScrollbarSlot(_target, _host, _viewport) : initializationScrollbarSlot; - const evaluatedScrollbarSlot = initializationScrollbarSlotResult || (isFunction(environmentScrollbarSlot) ? environmentScrollbarSlot(_target, _host, _viewport) : environmentScrollbarSlot) || _host; - const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal); - const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical); - const { - _scrollbar: horizontalScrollbar - } = horizontalScrollbarStructure; - const { - _scrollbar: verticalScrollbar - } = verticalScrollbarStructure; - appendChildren(evaluatedScrollbarSlot, horizontalScrollbar); - appendChildren(evaluatedScrollbarSlot, verticalScrollbar); - return [{ - _horizontalScrollbarStructure: horizontalScrollbarStructure, - _verticalScrollbarStructure: verticalScrollbarStructure - }, removeElements.bind(0, [horizontalScrollbar, verticalScrollbar])]; +const createScrollbarsSetupElements = (t, n) => { + const {N: o} = getEnvironment(); + const {Ft: e} = o(); + const {Y: s, V: c, U: i, tt: r} = n; + const a = !r && t.scrollbarsSlot; + const l = dynamicInitializationElement([ s, c, i ], (() => c), e, a); + const u = generateScrollbarDOM(H); + const f = generateScrollbarDOM(k); + const {jt: d} = u; + const {jt: _} = f; + appendChildren(l, d); + appendChildren(l, _); + return [ { + Ht: u, + kt: f + }, removeElements.bind(0, [ d, _ ]) ]; }; -const createScrollbarsSetup = (target, options, structureSetupElements) => { - const state = createState({}); - const [getState] = state; - const [elements, destroyElements] = createScrollbarsSetupElements(target, structureSetupElements); - const scrollbarsSetupState = getState.bind(0); - scrollbarsSetupState._elements = elements; - return [(changedOptions, force) => { - const checkOption = createOptionCheck(options, changedOptions, force); - console.log(checkOption); - }, scrollbarsSetupState, () => { - destroyElements(); - }]; +const createScrollbarsSetup = (t, n, o) => { + const e = createState({}); + const [s] = e; + const [c, i] = createScrollbarsSetupElements(t, o); + const r = s.bind(0); + r.Mt = c; + return [ (t, o) => { + const e = createOptionCheck(n, t, o); + console.log(e); + }, r, () => { + i(); + } ]; }; -const pluginRegistry = {}; -const getPlugins = () => assignDeep({}, pluginRegistry); -const addPlugin = addedPlugin => each(isArray(addedPlugin) ? addedPlugin : [addedPlugin], plugin => { - pluginRegistry[plugin[0]] = plugin[1]; -}); +const ft = {}; -const optionsTemplateTypes = { - boolean: '__TPL_boolean_TYPE__', - number: '__TPL_number_TYPE__', - string: '__TPL_string_TYPE__', - array: '__TPL_array_TYPE__', - object: '__TPL_object_TYPE__', - function: '__TPL_function_TYPE__', - null: '__TPL_null_TYPE__' +const getPlugins = () => assignDeep({}, ft); + +const addPlugin = t => each(isArray(t) ? t : [ t ], (t => { + ft[t[0]] = t[1]; +})); + +const dt = { + boolean: "__TPL_boolean_TYPE__", + number: "__TPL_number_TYPE__", + string: "__TPL_string_TYPE__", + array: "__TPL_array_TYPE__", + object: "__TPL_object_TYPE__", + function: "__TPL_function_TYPE__", + null: "__TPL_null_TYPE__" }; -const numberAllowedValues = optionsTemplateTypes.number; -const booleanAllowedValues = optionsTemplateTypes.boolean; -const arrayNullValues = [optionsTemplateTypes.array, optionsTemplateTypes.null]; -const overflowAllowedValues = 'hidden scroll visible visible-hidden'; -const scrollbarsVisibilityAllowedValues = 'visible hidden auto'; -const scrollbarsAutoHideAllowedValues = 'never scroll leavemove'; +const _t = dt.number; + +const gt = dt.boolean; + +const ht = [ dt.array, dt.null ]; + +const pt = "hidden scroll visible visible-hidden"; + +const vt = "visible hidden auto"; + +const wt = "never scroll leavemove"; + ({ - paddingAbsolute: booleanAllowedValues, + paddingAbsolute: gt, updating: { - elementEvents: arrayNullValues, - attributes: arrayNullValues, - debounce: [optionsTemplateTypes.number, optionsTemplateTypes.array, optionsTemplateTypes.null], - ignoreMutation: [optionsTemplateTypes.function, optionsTemplateTypes.null] + elementEvents: ht, + attributes: ht, + debounce: [ dt.number, dt.array, dt.null ], + ignoreMutation: [ dt.function, dt.null ] }, overflow: { - x: overflowAllowedValues, - y: overflowAllowedValues + x: pt, + y: pt }, scrollbars: { - visibility: scrollbarsVisibilityAllowedValues, - autoHide: scrollbarsAutoHideAllowedValues, - autoHideDelay: numberAllowedValues, - dragScroll: booleanAllowedValues, - clickScroll: booleanAllowedValues, - touch: booleanAllowedValues + visibility: vt, + autoHide: wt, + autoHideDelay: _t, + dragScroll: gt, + clickScroll: gt, + touch: gt }, nativeScrollbarsOverlaid: { - show: booleanAllowedValues, - initialize: booleanAllowedValues + show: gt, + initialize: gt } }); -const optionsValidationPluginName = '__osOptionsValidationPlugin'; -const targets = new Set(); -const targetInstanceMap = new WeakMap(); -const addInstance = (target, osInstance) => { - targetInstanceMap.set(target, osInstance); - targets.add(target); +const bt = "__osOptionsValidationPlugin"; + +const yt = new Set; + +const mt = new WeakMap; + +const addInstance = (t, n) => { + mt.set(t, n); + yt.add(t); }; -const removeInstance = target => { - targetInstanceMap.delete(target); - targets.delete(target); + +const removeInstance = t => { + mt.delete(t); + yt.delete(t); }; -const getInstance = target => targetInstanceMap.get(target); -const createOSEventListenerHub = initialEventListeners => createEventListenerHub(initialEventListeners); +const getInstance = t => mt.get(t); -const OverlayScrollbars = (target, options, eventListeners) => { - const { - _getDefaultOptions, - _nativeScrollbarIsOverlaid, - _addListener: addEnvListener - } = getEnvironment(); - const plugins = getPlugins(); - const instanceTarget = isHTMLElement(target) ? target : target.target; - const potentialInstance = getInstance(instanceTarget); - - if (potentialInstance) { - return potentialInstance; +const OverlayScrollbars = (t, n, o) => { + const {F: e, I: s, j: c} = getEnvironment(); + const i = getPlugins(); + const r = isHTMLElement(t) ? t : t.target; + const a = getInstance(r); + if (a) { + return a; } - - const optionsValidationPlugin = plugins[optionsValidationPluginName]; - - const validateOptions = newOptions => { - const opts = newOptions || {}; - const validate = optionsValidationPlugin && optionsValidationPlugin._; - return validate ? validate(opts, true) : opts; + const l = i[bt]; + const validateOptions = t => { + const n = t || {}; + const o = l && l.Bt; + return o ? o(n, true) : n; }; - - const currentOptions = assignDeep({}, _getDefaultOptions(), validateOptions(options)); - const [addEvent, removeEvent, triggerEvent] = createOSEventListenerHub(eventListeners); - - if (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y && !currentOptions.nativeScrollbarsOverlaid.initialize) { - triggerEvent('initializationWithdrawn'); + const u = assignDeep({}, e(), validateOptions(n)); + const [f, d, _] = createEventListenerHub(o); + if (s.x && s.y && !u.nativeScrollbarsOverlaid.initialize) { + _("initializationWithdrawn"); } - - const [updateStructure, structureState, destroyStructure] = createStructureSetup(target, currentOptions); - const [updateScrollbars,, destroyScrollbars] = createScrollbarsSetup(target, currentOptions, structureState._elements); - - const update = (changedOptions, force) => { - updateStructure(changedOptions, force); - updateScrollbars(changedOptions, force); + const [g, h, p] = createStructureSetup(t, u); + const [v, , w] = createScrollbarsSetup(t, u, h.Mt); + const update = (t, n) => { + g(t, n); + v(t, n); }; - - const removeEnvListener = addEnvListener(update.bind(0, {}, true)); - - structureState._addOnUpdatedListener((updateHints, changedOptions, force) => { - const { - _sizeChanged, - _directionChanged, - _heightIntrinsicChanged, - _overflowAmountChanged, - _overflowStyleChanged, - _contentMutation, - _hostMutation - } = updateHints; - triggerEvent('updated', { + const b = c(update.bind(0, {}, true)); + h.Pt(((t, n, o) => { + const {it: e, ut: s, ct: c, xt: i, Ct: r, rt: a, bt: l} = t; + _("updated", { updateHints: { - sizeChanged: _sizeChanged, - directionChanged: _directionChanged, - heightIntrinsicChanged: _heightIntrinsicChanged, - overflowAmountChanged: _overflowAmountChanged, - overflowStyleChanged: _overflowStyleChanged, - contentMutation: _contentMutation, - hostMutation: _hostMutation + sizeChanged: e, + directionChanged: s, + heightIntrinsicChanged: c, + overflowAmountChanged: i, + overflowStyleChanged: r, + contentMutation: a, + hostMutation: l }, - changedOptions, - force + changedOptions: n, + force: o }); - }); - - const instance = { - options(newOptions) { - if (newOptions) { - const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions)); - - if (!isEmptyObject(changedOptions)) { - assignDeep(currentOptions, changedOptions); - update(changedOptions); + })); + const y = { + options(t) { + if (t) { + const n = getOptionsDiff(u, validateOptions(t)); + if (!isEmptyObject(n)) { + assignDeep(u, n); + update(n); } } - - return assignDeep({}, currentOptions); + return assignDeep({}, u); }, - - on: addEvent, - off: removeEvent, - + on: f, + off: d, state() { - const { - _overflowAmount, - _overflowStyle, - _hasOverflow, - _padding, - _paddingAbsolute - } = structureState(); + const {yt: t, vt: n, St: o, A: e, ft: s} = h(); return assignDeep({}, { - overflowAmount: _overflowAmount, - overflowStyle: _overflowStyle, - hasOverflow: _hasOverflow, - padding: _padding, - paddingAbsolute: _paddingAbsolute + overflowAmount: t, + overflowStyle: n, + hasOverflow: o, + padding: e, + paddingAbsolute: s }); }, - elements() { - const { - _target, - _host, - _padding, - _viewport, - _content - } = structureState._elements; + const {Y: t, V: n, A: o, U: e, $: s} = h.Mt; return assignDeep({}, { - target: _target, - host: _host, - padding: _padding || _viewport, - viewport: _viewport, - content: _content || _viewport + target: t, + host: n, + padding: o || e, + viewport: e, + content: s || e }); }, - - update(force) { - update({}, force); + update(t) { + update({}, t); }, - destroy: () => { - removeInstance(instanceTarget); - removeEnvListener(); - removeEvent(); - destroyScrollbars(); - destroyStructure(); - triggerEvent('destroyed'); + removeInstance(r); + b(); + d(); + w(); + p(); + _("destroyed"); } }; - each(keys(plugins), pluginName => { - const pluginInstance = plugins[pluginName]; - - if (isFunction(pluginInstance)) { - pluginInstance(OverlayScrollbars, instance); + each(keys(i), (t => { + const n = i[t]; + if (isFunction(n)) { + n(OverlayScrollbars, y); } - }); - instance.update(true); - addInstance(instanceTarget, instance); - triggerEvent('initialized'); - return instance; + })); + y.update(true); + addInstance(r, y); + _("initialized"); + return y; }; + OverlayScrollbars.plugin = addPlugin; OverlayScrollbars.env = () => { - const { - _nativeScrollbarSize, - _nativeScrollbarIsOverlaid, - _nativeScrollbarStyling, - _rtlScrollBehavior, - _flexboxGlue, - _cssCustomProperties, - _defaultInitializationStrategy, - _defaultDefaultOptions, - _getInitializationStrategy, - _setInitializationStrategy, - _getDefaultOptions, - _setDefaultOptions - } = getEnvironment(); + const {L: t, I: n, T: o, P: e, M: s, D: c, k: i, B: r, N: a, R: l, F: u, H: f} = getEnvironment(); return assignDeep({}, { - scrollbarSize: _nativeScrollbarSize, - scrollbarIsOverlaid: _nativeScrollbarIsOverlaid, - scrollbarStyling: _nativeScrollbarStyling, - rtlScrollBehavior: _rtlScrollBehavior, - flexboxGlue: _flexboxGlue, - cssCustomProperties: _cssCustomProperties, - defaultInitializationStrategy: _defaultInitializationStrategy, - defaultDefaultOptions: _defaultDefaultOptions, - getInitializationStrategy: _getInitializationStrategy, - setInitializationStrategy: _setInitializationStrategy, - getDefaultOptions: _getDefaultOptions, - setDefaultOptions: _setDefaultOptions + scrollbarSize: t, + scrollbarIsOverlaid: n, + scrollbarStyling: o, + rtlScrollBehavior: e, + flexboxGlue: s, + cssCustomProperties: c, + defaultInitializationStrategy: i, + defaultDefaultOptions: r, + getInitializationStrategy: a, + setInitializationStrategy: l, + getDefaultOptions: u, + setDefaultOptions: f }); }; diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index 7a7017a..2aa0132 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/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/style.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/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/plugins/plugins.ts","../src/plugins/optionsValidation/validation.ts","../src/plugins/optionsValidation/optionsValidation.ts","../src/instances.ts","../src/eventListeners.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\nexport function createCache(options: CacheOptions): CacheContextual;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update: CacheUpdater\r\n): Cache;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n}\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) =>\r\n isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: any[]) => any {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n if (Array.from && arr) {\r\n return Array.from(arr);\r\n }\r\n const result: T[] = [];\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, args?: any[]): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n } else {\r\n each(arr, runFn);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W\r\n): T & U & V & W;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W,\r\n object4: X\r\n): T & U & V & W & X;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W,\r\n object4: X,\r\n object5: Y\r\n): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { from } from 'support/utils/array';\r\nimport { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | false | null | undefined,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n): void;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n};\r\n\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(value);\r\n};\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | false | null | undefined, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollLeft(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollTop(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | false | null | undefined): string;\r\nexport function val(elm: HTMLInputElement | false | null | undefined, value: string): void;\r\nexport function val(\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { 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 | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | 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 = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\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 { 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 { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the fractional- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (isUndefined(passiveEventsSupport)) {\r\n passiveEventsSupport = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener) as EventListener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return runEach.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","import { isArray } from 'support/utils/types';\r\nimport { keys } from 'support/utils/object';\r\nimport { each, from } from 'support/utils/array';\r\n\r\nexport type EventListener<\r\n NameArgsMap extends Record,\r\n Name extends Extract = Extract\r\n> = (...args: NameArgsMap[Name] extends undefined ? [] : [args: NameArgsMap[Name]]) => void;\r\n\r\nexport type EventListenerGroup<\r\n NameArgsMap extends Record,\r\n Name extends Extract = Extract\r\n> = EventListener | EventListener[];\r\n\r\nexport type AddEventListener> = <\r\n Name extends Extract\r\n>(\r\n name: Name,\r\n listener: EventListenerGroup\r\n) => () => void;\r\n\r\nexport type RemoveEventListener> = <\r\n Name extends Extract\r\n>(\r\n name?: Name,\r\n listener?: EventListenerGroup\r\n) => void;\r\n\r\nexport type TriggerEventListener> = <\r\n Name extends Extract\r\n>(\r\n name: Name,\r\n ...args: NameArgsMap[Name] extends undefined ? [] : [args: NameArgsMap[Name]]\r\n) => void;\r\n\r\nexport type InitialEventListeners> = {\r\n [K in Extract]?: EventListenerGroup;\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 AddEventListener,\r\n RemoveEventListener,\r\n TriggerEventListener\r\n] => {\r\n const events = new Map, Set>>();\r\n const removeEvent: RemoveEventListener = (name?, listener?) => {\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 EventListenerGroup | undefined);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n };\r\n const addEvent: AddEventListener = (name, listener) => {\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 EventListenerGroup);\r\n\r\n return removeEvent.bind(0, name as any, listener as EventListenerGroup);\r\n };\r\n const triggerEvent: TriggerEventListener = (name, args?) => {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args) {\r\n (event as (args: NameArgsMap[Extract]) => void)(args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n };\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { OSOptions, ReadonlyOSOptions } from 'options';\r\nimport type { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (\r\n changedOptions: PartialOptions,\r\n force?: boolean\r\n) => 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 stringify = (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 OSOptions {\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: OSOptions = {\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 (stringify(currOptionValue) === stringify(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 { OSOptions, defaultOptions } from 'options';\r\nimport { OSTargetElement, PartialOptions } from 'typings';\r\n\r\ntype StructureInitializationStrategyElementFn =\r\n | ((target: OSTargetElement) => HTMLElement | T)\r\n | T;\r\n\r\ntype ScrollbarsInitializationStrategyElementFn =\r\n | ((target: OSTargetElement, host: HTMLElement, viewport: HTMLElement) => HTMLElement | T)\r\n | T;\r\n\r\n/**\r\n * A Static element is an element which MUST be generated.\r\n * If null or undefined (or the returned result is null or undefined), the initialization function is generatig the element, otherwise\r\n * the element returned by the function acts as the generated element.\r\n */\r\nexport type StructureInitializationStrategyStaticElement = StructureInitializationStrategyElementFn<\r\n null | undefined\r\n>;\r\n\r\n/**\r\n * A Dynamic element is an element which CAN be generated.\r\n * If boolean (or the returned result is boolean), the generation of the element is forced (or not).\r\n * If the function returns and element, the element returned by the function acts as the generated element.\r\n */\r\nexport type StructureInitializationStrategyDynamicElement =\r\n StructureInitializationStrategyElementFn;\r\n\r\nexport interface StructureInitializationStrategy {\r\n _host: StructureInitializationStrategyStaticElement;\r\n _viewport: StructureInitializationStrategyStaticElement;\r\n _padding: StructureInitializationStrategyDynamicElement;\r\n _content: StructureInitializationStrategyDynamicElement;\r\n}\r\n\r\nexport interface ScrollbarsInitializationStrategy {\r\n /**\r\n * The scrollbars slot. If null or undefined (or the returned result is null or undefined), the initialization function is deciding the element, otherwise\r\n * the element returned by the function acts as the scrollbars slot.\r\n */\r\n _scrollbarsSlot: ScrollbarsInitializationStrategyElementFn;\r\n}\r\n\r\nexport interface InitializationStrategy\r\n extends StructureInitializationStrategy,\r\n ScrollbarsInitializationStrategy {}\r\n\r\nexport type DefaultInitializationStrategy = {\r\n [K in keyof InitializationStrategy]: Extract<\r\n InitializationStrategy[K],\r\n boolean | null | undefined\r\n >;\r\n};\r\n\r\nexport interface EnvironmentListenersNameArgsMap {\r\n _: undefined;\r\n}\r\n\r\nexport interface Environment {\r\n readonly _nativeScrollbarSize: XY;\r\n readonly _nativeScrollbarIsOverlaid: XY;\r\n readonly _nativeScrollbarStyling: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _defaultInitializationStrategy: DefaultInitializationStrategy;\r\n readonly _defaultDefaultOptions: OSOptions;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): OSOptions;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n const revertFbxGlueMax = addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst getDefaultInitializationStrategy = (\r\n nativeScrollbarStyling: boolean\r\n): DefaultInitializationStrategy => ({\r\n _host: null,\r\n _viewport: null,\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n _scrollbarsSlot: null,\r\n});\r\n\r\nconst createEnvironment = (): Environment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n });\r\n const [nativeScrollbarSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarStyling = getNativeScrollbarStyling(envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const initializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling);\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: Environment = {\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener: (listener) => 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(\r\n 0,\r\n {} as OSOptions,\r\n defaultDefaultOptions\r\n ),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent('_');\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nexport const getEnvironment = (): Environment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n is,\r\n createDiv,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n isBoolean,\r\n isFunction,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport {\r\n getEnvironment,\r\n StructureInitializationStrategyStaticElement,\r\n StructureInitializationStrategyDynamicElement,\r\n} from 'environment';\r\nimport { OSTarget, OSTargetElement, StructureInitialization } from 'typings';\r\n\r\nexport type StructureSetupElements = [targetObj: StructureSetupElementsObj, destroy: () => void];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: OSTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement | false => {\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } =\r\n getEnvironment();\r\n /* istanbul ignore next */\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst staticCreationFromStrategy = (\r\n target: OSTargetElement,\r\n initializationValue?: HTMLElement | undefined,\r\n strategy?: StructureInitializationStrategyStaticElement\r\n): HTMLElement => {\r\n const result =\r\n initializationValue ||\r\n (isFunction(strategy) ? strategy(target) : (strategy as null | undefined));\r\n return result || createDiv();\r\n};\r\n\r\nconst dynamicCreationFromStrategy = (\r\n target: OSTargetElement,\r\n initializationValue: HTMLElement | boolean | undefined,\r\n strategy: StructureInitializationStrategyDynamicElement\r\n): HTMLElement | false => {\r\n const takeInitializationValue = isBoolean(initializationValue) || initializationValue;\r\n const result = takeInitializationValue\r\n ? (initializationValue as boolean | HTMLElement)\r\n : isFunction(strategy)\r\n ? strategy(target)\r\n : strategy;\r\n\r\n return result === true ? createDiv() : result;\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value?: string | false | null | undefined) => {\r\n attr(elm, dataAttributeHost, value || '');\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (target: OSTarget): StructureSetupElements => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling } = getEnvironment();\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as OSTargetElement)\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 && _nativeScrollbarStyling;\r\n const potentialViewportElement = staticCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.viewport,\r\n viewportInitializationStrategy\r\n );\r\n const potentiallySingleElm = potentialViewportElement === targetElement;\r\n const viewportIsTarget = singleElmSupport && potentiallySingleElm;\r\n const viewportElement =\r\n potentiallySingleElm && !viewportIsTarget\r\n ? staticCreationFromStrategy(targetElement)\r\n : potentialViewportElement;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.host,\r\n hostInitializationStrategy\r\n )\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding: dynamicCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.padding,\r\n paddingInitializationStrategy\r\n ),\r\n _content: dynamicCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.content,\r\n contentInitializationStrategy\r\n ),\r\n _viewportArrange: !viewportIsTarget && createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarStyling && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n\r\n return [evaluatedTargetObj, runEach.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n noop,\r\n each,\r\n equalXY,\r\n attrClass,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportArrange,\r\n classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\ntype UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nconst { max } = Math;\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarSize,\r\n _flexboxGlue,\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [updateOverflowStyleCache] = createCache>(xyCacheOptions);\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _paddingAbsolute, _padding: padding } = getState();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const fSize = fractionalSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = _paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n hostClientSize.h +\r\n fSize.h +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n ): ViewportOverflowState => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const getStatePerAxis = (\r\n styleKey: string,\r\n isOverlaid: boolean,\r\n nativeScrollbarSize: number\r\n ) => {\r\n const overflowStyle = style(_viewport, styleKey);\r\n // can't do something like \"viewportStyleObj && viewportStyleObj[styleKey] || overflowStyle\" here!\r\n const objectPrefferedOverflowStyle = viewportStyleObj\r\n ? viewportStyleObj[styleKey]\r\n : overflowStyle;\r\n const overflowScroll = objectPrefferedOverflowStyle === 'scroll';\r\n const nonScrollbarStylingHideOffset = isOverlaid ? arrangeHideOffset : nativeScrollbarSize;\r\n const scrollbarsHideOffset =\r\n overflowScroll && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset : 0;\r\n const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset;\r\n\r\n return [overflowStyle, overflowScroll, scrollbarsHideOffset, scrollbarsHideOffsetArrange] as [\r\n overflowStyle: OverflowStyle,\r\n overflowScroll: boolean,\r\n scrollbarsHideOffset: number,\r\n scrollbarsHideOffsetArrange: boolean\r\n ];\r\n };\r\n\r\n const [xOverflowStyle, xOverflowScroll, xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowX', _nativeScrollbarIsOverlaid.x, _nativeScrollbarSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarIsOverlaid.y, _nativeScrollbarSize.y);\r\n\r\n return {\r\n _overflowStyle: {\r\n x: xOverflowStyle,\r\n y: yOverflowStyle,\r\n },\r\n _overflowScroll: {\r\n x: xOverflowScroll,\r\n y: yOverflowScroll,\r\n },\r\n _scrollbarsHideOffset: {\r\n x: xScrollbarsHideOffset,\r\n y: yScrollbarsHideOffset,\r\n },\r\n _scrollbarsHideOffsetArrange: {\r\n x: xScrollbarsHideOffsetArrange,\r\n y: yScrollbarsHideOffsetArrange,\r\n },\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n hasOverflow: XY,\r\n overflowOption: XY,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setAxisOverflowStyle = (behavior: OverflowBehavior, hasOverflowAxis: boolean) => {\r\n const overflowVisible = overflowIsVisible(behavior);\r\n const overflowVisibleBehavior =\r\n (hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, '')) || '';\r\n return [\r\n hasOverflowAxis && !overflowVisible ? behavior : '',\r\n overflowIsVisible(overflowVisibleBehavior) ? 'hidden' : overflowVisibleBehavior,\r\n ];\r\n };\r\n\r\n const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x);\r\n const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y);\r\n\r\n viewportStyleObj.overflowX = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX;\r\n viewportStyleObj.overflowY = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY;\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\r\n if (doViewportArrange) {\r\n const { _viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;\r\n const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(\r\n `#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingLeft'\r\n : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] =\r\n horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n ): UndoViewportArrangeResult => {\r\n if (doViewportArrange) {\r\n const finalViewportOverflowState =\r\n viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n\r\n removeClass(_viewport, classNameViewportArrange);\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return [\r\n () => {\r\n hideNativeScrollbars(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n doViewportArrange,\r\n prevStyle\r\n );\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n finalViewportOverflowState,\r\n ];\r\n }\r\n return [noop];\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('nativeScrollbarsOverlaid.show');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\r\n );\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [\r\n on(expandElement, scrollEventName, onScroll),\r\n on(shrinkElement, scrollEventName, onScroll),\r\n ]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport type DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [destroy: () => void, update: () => void];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n });\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { runEach } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY } from 'support';\r\nimport type { OSOptions, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { OSTarget, PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _addOnUpdatedListener: (listener: OnUpdatedListener) => void;\r\n}\r\n\r\nexport type OnUpdatedListener = (\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n) => void;\r\n\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: OSTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const onUpdatedListeners = new Set();\r\n const [getState] = state;\r\n const runOnUpdatedListeners = (\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions?: PartialOptions,\r\n force?: boolean\r\n ) => {\r\n runEach(onUpdatedListeners, [updateHints, changedOptions || {}, !!force]);\r\n };\r\n\r\n const [elements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n runOnUpdatedListeners(updateStructure(checkOptionsFallback, updateHints));\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n onUpdatedListeners.add(listener);\r\n };\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObservers(checkOption);\r\n runOnUpdatedListeners(updateStructure(checkOption, {}, force));\r\n },\r\n structureSetupState,\r\n () => {\r\n onUpdatedListeners.clear();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { appendChildren, createDiv, removeElements, isFunction } 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, ScrollbarsInitializationStrategy } from 'environment';\r\nimport { OSTarget, ScrollbarsInitialization } from 'typings';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [elements: ScrollbarsSetupElementsObj, destroy: () => void];\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: OSTarget,\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 initializationScrollbarSlotResult = isFunction(initializationScrollbarSlot)\r\n ? initializationScrollbarSlot(_target, _host, _viewport)\r\n : initializationScrollbarSlot;\r\n const evaluatedScrollbarSlot =\r\n initializationScrollbarSlotResult ||\r\n (isFunction(environmentScrollbarSlot)\r\n ? environmentScrollbarSlot(_target, _host, _viewport)\r\n : environmentScrollbarSlot) ||\r\n _host;\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { OSTarget } from 'typings';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n}\r\n\r\nexport const createScrollbarsSetup = (\r\n target: OSTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, destroyElements] = createScrollbarsSetupElements(target, structureSetupElements);\r\n\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { assignDeep, each, isArray } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type OSPluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type OSPlugin = [string, T];\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: OSPlugin | OSPlugin[]) =>\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as OSPlugin[], (plugin) => {\r\n pluginRegistry[plugin[0]] = plugin[1];\r\n });\r\n","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject, PartialOptions } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: any, ...args: any[]) => any;\r\nexport type OptionsTemplateType = ExtractPropsKey<\r\n OptionsTemplateTypeMap,\r\n T\r\n>;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = [\r\n PartialOptions, // validated\r\n Record // foreign\r\n];\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = {\r\n boolean: '__TPL_boolean_TYPE__',\r\n number: '__TPL_number_TYPE__',\r\n string: '__TPL_string_TYPE__',\r\n array: '__TPL_array_TYPE__',\r\n object: '__TPL_object_TYPE__',\r\n function: '__TPL_function_TYPE__',\r\n null: '__TPL_null_TYPE__',\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array =\r\n template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const [validated, foreign] = validateRecursive(\r\n templateValue as T,\r\n optionsValue,\r\n doWriteErrors,\r\n propPrefix + prop\r\n );\r\n validatedOptions[prop] = validated as any;\r\n optionsCopy[prop] = foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n validatedOptions[prop] = optionsValue;\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${\r\n errorEnumStrings.length > 0\r\n ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n : ''\r\n }`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return [validatedOptions, optionsCopy]; // optionsCopy equals now to foreign options\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a tuple which looks like:\r\n * [\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * ]\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import { OSPlugin } from 'plugins';\r\nimport { OSOptions, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidation/validation';\r\nimport { PartialOptions } from 'typings';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: OSPlugin = [\r\n optionsValidationPluginName,\r\n {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n];\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import { OSOptions } from 'options';\r\nimport { createEventListenerHub } from 'support';\r\nimport { PartialOptions } from 'typings';\r\nimport type {\r\n InitialEventListeners,\r\n AddEventListener,\r\n RemoveEventListener,\r\n TriggerEventListener,\r\n EventListener,\r\n} from 'support/eventListeners';\r\n/*\r\nonScrollStart : null,\r\nonScroll : null,\r\nonScrollStop : null,\r\nonOverflowChanged : null,\r\nonOverflowAmountChanged : null, // fusion with onOverflowChanged\r\nonDirectionChanged : null, // gone\r\nonContentSizeChanged : null, // gone\r\nonHostSizeChanged : null, // gone\r\n*/\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\r\n force: boolean;\r\n}\r\n\r\nexport interface OSEventListenersNameArgsMap {\r\n initialized: undefined;\r\n initializationWithdrawn: undefined;\r\n updated: OnUpdatedEventListenerArgs;\r\n destroyed: undefined;\r\n}\r\n\r\nexport type OSEventListener<\r\n N extends Extract = Extract<\r\n keyof OSEventListenersNameArgsMap,\r\n string\r\n >\r\n> = EventListener;\r\n\r\nexport type AddOSEventListener = AddEventListener;\r\n\r\nexport type RemoveOSEventListener = RemoveEventListener;\r\n\r\nexport type TriggerOSEventListener = TriggerEventListener;\r\n\r\nexport type InitialOSEventListeners = InitialEventListeners;\r\n\r\nexport const createOSEventListenerHub = (initialEventListeners?: InitialOSEventListeners) =>\r\n createEventListenerHub(initialEventListeners);\r\n","import { OSTarget, OSInitializationObject, PartialOptions, OverflowStyle } from 'typings';\r\nimport {\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} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, OSOptions, ReadonlyOSOptions } from 'options';\r\nimport { DefaultInitializationStrategy, getEnvironment, InitializationStrategy } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n OSPlugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport {\r\n createOSEventListenerHub,\r\n InitialOSEventListeners,\r\n AddOSEventListener,\r\n RemoveOSEventListener,\r\n} from 'eventListeners';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: OSTarget | OSInitializationObject,\r\n options?: PartialOptions,\r\n eventListeners?: InitialOSEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(osPlugin: OSPlugin | OSPlugin[]): void;\r\n env(): OverlayScrollbarsEnv;\r\n}\r\n\r\nexport interface OverlayScrollbarsEnv {\r\n scrollbarSize: XY;\r\n scrollbarIsOverlaid: XY;\r\n scrollbarStyling: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n defaultInitializationStrategy: DefaultInitializationStrategy;\r\n defaultDefaultOptions: OSOptions;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): OSOptions;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface OverlayScrollbarsState {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n}\r\n\r\nexport interface OverlayScrollbarsElements {\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 OverlayScrollbars {\r\n options(): OSOptions;\r\n options(newOptions?: PartialOptions): OSOptions;\r\n\r\n update(force?: boolean): void;\r\n destroy(): void;\r\n\r\n state(): OverlayScrollbarsState;\r\n elements(): OverlayScrollbarsElements;\r\n\r\n on: AddOSEventListener;\r\n off: RemoveOSEventListener;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n const {\r\n _getDefaultOptions,\r\n _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: PartialOptions) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createOSEventListenerHub(eventListeners);\r\n\r\n if (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\r\n triggerEvent('initializationWithdrawn');\r\n }\r\n\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, , destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState._elements\r\n );\r\n\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n });\r\n });\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: removeEvent,\r\n state() {\r\n const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n },\r\n destroy: () => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n removeEvent();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n triggerEvent('destroyed');\r\n },\r\n };\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n instance.update(true);\r\n\r\n addInstance(instanceTarget, instance);\r\n\r\n triggerEvent('initialized');\r\n\r\n return instance;\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarSize: _nativeScrollbarSize,\r\n scrollbarIsOverlaid: _nativeScrollbarIsOverlaid,\r\n scrollbarStyling: _nativeScrollbarStyling,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["createCache","options","update","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","Object","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","Set","forEach","value","elm","isEmptyArray","runEach","args","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","style","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","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","getCSSVal","computedStyle","getPropertyValue","setCSSVal","setProperty","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","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","stringify","JSON","_","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarStyling","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","getDefaultInitializationStrategy","nativeScrollbarStyling","_host","_viewport","_padding","_content","_scrollbarsSlot","createEnvironment","envDOM","envElm","envChildElm","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","nativeScrollbarSize","nativeScrollbarIsOverlaid","initializationStrategy","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","scrollbarSizeChanged","getEnvironment","contentArrangeCounter","unwrap","createUniqueViewportArrangeElement","create","staticCreationFromStrategy","initializationValue","strategy","dynamicCreationFromStrategy","takeInitializationValue","addDataAttrHost","createStructureSetupElements","hostInitializationStrategy","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","potentialViewportElement","viewport","potentiallySingleElm","viewportIsTarget","viewportElement","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","getState","updateHints","_heightIntrinsic","_heightIntrinsicChanged","heightIntrinsicChanged","height","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_directionIsRTL","_directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","width","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_viewportPaddingStyle","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportScrollSize","viewportClientSize","sizeFraction","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","doViewportArrange","updateSizeFraction","getCurrentSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","updateOverflowStyleCache","fixFlexboxGlue","viewportOverflowState","heightIntrinsic","_overflowScroll","_scrollbarsHideOffset","hostClientSize","isContentBox","subtractXScrollbar","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","_scrollbarsHideOffsetArrange","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","visibleBehaviorX","visibleBehaviorY","arrangeViewport","directionIsRTL","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","viewportPaddingStyle","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_hostMutation","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","redoViewportArrange","undoViewportArrangeOverflowState","sizeFractionChanged","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmount","overflowAmountChanged","removeClipping","viewportArranged","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","scrollEventName","scrollAmount","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","getIsDirectionRTL","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","appear","doDirectionScroll","currRContentRect","prevContentRect","pop","contentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_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","updateContentSizeCache","contentScroll","viewportScroll","fractional","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","onUpdatedListeners","runOnUpdatedListeners","destroyElements","updateStructure","updateObservers","destroyObservers","structureSetupState","_addOnUpdatedListener","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","environmentScrollbarSlot","initializationScrollbarSlot","scrollbarsSlot","initializationScrollbarSlotResult","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","scrollbarsSetupState","console","log","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","optionsTemplateTypes","boolean","number","string","object","function","null","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsValidationPluginName","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","createOSEventListenerHub","OverlayScrollbars","eventListeners","addEnvListener","plugins","instanceTarget","potentialInstance","optionsValidationPlugin","validateOptions","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","destroyScrollbars","removeEnvListener","sizeChanged","hostMutation","instance","pluginName","pluginInstance","scrollbarIsOverlaid","scrollbarStyling","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/style.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/dom/offset.ts","../src/support/eventListeners.ts","../src/setups/setups.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/initialization.ts","../src/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/plugins/plugins.ts","../src/plugins/optionsValidation/validation.ts","../src/plugins/optionsValidation/optionsValidation.ts","../src/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\nexport function createCache(options: CacheOptions): CacheContextual;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update: CacheUpdater\r\n): Cache;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n}\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) =>\r\n isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: any[]) => any {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n if (Array.from && arr) {\r\n return Array.from(arr);\r\n }\r\n const result: T[] = [];\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, args?: any[]): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n } else {\r\n each(arr, runFn);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W\r\n): T & U & V & W;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W,\r\n object4: X\r\n): T & U & V & W & X;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W,\r\n object4: X,\r\n object5: Y\r\n): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { from } from 'support/utils/array';\r\nimport { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | false | null | undefined,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n): void;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n};\r\n\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(value);\r\n};\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | false | null | undefined, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollLeft(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollTop(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | false | null | undefined): string;\r\nexport function val(elm: HTMLInputElement | false | null | undefined, value: string): void;\r\nexport function val(\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n // animationiterationcount: 1,\r\n // columncount: 1,\r\n // fillopacity: 1,\r\n // flexgrow: 1,\r\n // flexshrink: 1,\r\n // fontweight: 1,\r\n // lineheight: 1,\r\n // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val;\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | false | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | false | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI(\r\n 'IntersectionObserver'\r\n);\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && className && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): boolean => classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): (() => void) => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n return removeClass.bind(0, elm, className);\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n // @ts-ignore\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the fractional- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (isUndefined(passiveEventsSupport)) {\r\n passiveEventsSupport = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener) as EventListener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return runEach.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","import { isArray } from 'support/utils/types';\r\nimport { keys } from 'support/utils/object';\r\nimport { each, from } from 'support/utils/array';\r\n\r\nexport type EventListener<\r\n EventMap extends Record,\r\n Name extends keyof EventMap = keyof EventMap\r\n> = (...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]]) => void;\r\n\r\nexport type InitialEventListeners> = {\r\n [K in keyof EventMap]?: EventListener | EventListener[];\r\n};\r\n\r\nconst manageListener = >(\r\n callback: (listener?: EventListener) => void,\r\n listener?: EventListener | EventListener[]\r\n) => {\r\n each(isArray(listener) ? listener : [listener], callback);\r\n};\r\n\r\nexport const createEventListenerHub = >(\r\n initialEventListeners?: InitialEventListeners\r\n) => {\r\n type EventListener = (\r\n ...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]]\r\n ) => void;\r\n\r\n const events = new Map>();\r\n\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener[]\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener!);\r\n }\r\n }, listener as any);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n }\r\n\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener[]\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void {\r\n const eventSet = events.get(name) || new Set();\r\n events.set(name, eventSet);\r\n\r\n manageListener((currListener) => {\r\n currListener && eventSet.add(currListener);\r\n }, listener as any);\r\n\r\n return removeEvent.bind(0, name as any, listener as any);\r\n }\r\n\r\n function triggerEvent(\r\n name: Name,\r\n ...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]]\r\n ): void {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args) {\r\n (event as (args: EventMap[keyof EventMap]) => void)(args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n }\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent] as [\r\n typeof addEvent,\r\n typeof removeEvent,\r\n typeof triggerEvent\r\n ];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T;\r\n\r\nexport type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean];\r\n\r\nexport type SetupUpdateSegment> = (\r\n updateHints: Hints,\r\n checkOption: SetupUpdateCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport type SetupState> = [\r\n get: () => T,\r\n set: (newState: Partial) => void\r\n];\r\n\r\nexport type Setup = Record> = [\r\n update: SetupUpdate,\r\n state: (() => DynamicState) & StaticState,\r\n destroy: () => void\r\n];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: PartialOptions,\r\n force?: boolean\r\n ): SetupUpdateCheckOption =>\r\n (path: string) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n\r\nexport const createState = (initialState: S): SetupState => {\r\n let state: S = initialState;\r\n return [\r\n () => state,\r\n (newState: Partial) => {\r\n state = assignDeep({}, state, newState);\r\n },\r\n ];\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const dataAttributeHost = 'data-overlayscrollbars';\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostViewportScrollbarStyling = 'viewportStyled';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\nexport const classNameOverflowVisible = `os-overflow-visible`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { PartialOptions, ReadonlyOptions } from 'typings';\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw new Error();\r\n }\r\n return val;\r\n });\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior =\r\n | 'hidden'\r\n | 'scroll'\r\n | 'visible'\r\n | 'visible-hidden'\r\n | 'visible-scroll';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n attributes: string[] | null;\r\n debounce: [timeout: number, maxWait: number] | number | null; // (if tuple: [timeout: 0, maxWait: 33], if number: [timeout: number, maxWait: false]) debounce for content Changes\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n}\r\n\r\nexport type ReadonlyOSOptions = ReadonlyOptions;\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n // resize: 'none', // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: false, // true || false\r\n updating: {\r\n elementEvents: [['img', 'load']], // array of tuples || null\r\n debounce: [0, 33], // number || number array || null\r\n attributes: null, // string array || null\r\n ignoreMutation: null, // () => any || null\r\n },\r\n overflow: {\r\n x: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: false, // true || false\r\n initialize: false, // true || false\r\n },\r\n scrollbars: {\r\n visibility: 'auto', // visible || hidden || auto || v || h || a\r\n autoHide: 'never', // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: 800, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n touch: true, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: false, // true || false\r\n dynHeight: false, // true || false\r\n inheritedAttrs: ['style', 'class'], // string || array || null\r\n },\r\n */\r\n};\r\n\r\nexport const getOptionsDiff = (\r\n currOptions: T,\r\n newOptions: PartialOptions\r\n): PartialOptions => {\r\n const diff: PartialOptions = {};\r\n const optionsKeys = keys(newOptions).concat(keys(currOptions));\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {}), getOptionsDiff(currOptionValue, newOptionValue));\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n EventListener,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { PartialOptions } from 'typings';\r\nimport { InitializationStrategy } from 'initialization';\r\n\r\nexport interface EnvironmentListenersNameArgsMap {\r\n _: undefined;\r\n}\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarSize: XY;\r\n readonly _nativeScrollbarIsOverlaid: XY;\r\n readonly _nativeScrollbarStyling: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _defaultInitializationStrategy: InitializationStrategy;\r\n readonly _defaultDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n const revertFbxGlueMax = addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst getDefaultInitializationStrategy = (\r\n nativeScrollbarStyling: boolean\r\n): InitializationStrategy => ({\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n});\r\n\r\nconst createEnvironment = (): InternalEnvironment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n });\r\n const [nativeScrollbarSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarStyling = getNativeScrollbarStyling(envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const initializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling);\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener: (listener) => addEvent('_', listener),\r\n _getInitializationStrategy: assignDeep.bind(\r\n 0,\r\n {} as InitializationStrategy,\r\n initializationStrategy\r\n ),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n assignDeep(initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent('_');\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): InternalEnvironment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { isFunction, isBoolean, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n StructureInitializationStrategy,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n} from 'setups/scrollbarsSetup';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type InitializationStrategy = StructureInitializationStrategy &\r\n ScrollbarsInitializationStrategy;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type StaticInitializationElement =\r\n | ((...args: Args) => StaticInitialization)\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic element CAN be present.\r\n * If its a element the element will be handled as the repsective element.\r\n * True means that the respective dynamic element is forced to be generated.\r\n * False means that the respective dynamic element is forced NOT to be generated.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type InitializtationElementStrategy = Exclude;\r\n\r\nexport type DefaultInitializtationElementStrategy<\r\n InitElm extends StaticInitializationElement | DynamicInitializationElement\r\n> = Extract any> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nconst staticInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultStaticInitializationElement: DefaultInitializtationElementStrategy,\r\n staticInitializationElementStrategy?: InitializtationElementStrategy,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement => {\r\n const result =\r\n staticInitializationElementValue ||\r\n (isFunction(staticInitializationElementStrategy)\r\n ? staticInitializationElementStrategy.apply(0, args)\r\n : staticInitializationElementStrategy);\r\n\r\n return (\r\n (isFunction(result) ? result.apply(0, args) : result) ||\r\n defaultStaticInitializationElement.apply(0, args)\r\n );\r\n};\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 const takeInitializationValue =\r\n isBoolean(dynamicInitializationElementValue) || !!dynamicInitializationElementValue;\r\n const result = takeInitializationValue\r\n ? (dynamicInitializationElementValue as boolean | HTMLElement)\r\n : isFunction(dynamicInitializationElementStrategy)\r\n ? dynamicInitializationElementStrategy.apply(0, args)\r\n : dynamicInitializationElementStrategy;\r\n\r\n return result === true || isNull(result) || isUndefined(result) || isFunction(result)\r\n ? defaultDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement };\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureInitialization,\r\n StructureStaticInitializationElement,\r\n} from 'setups/structureSetup/structureSetup.initialization';\r\n\r\nexport type StructureSetupElements = [targetObj: StructureSetupElementsObj, destroy: () => void];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nconst createNewDiv = createDiv.bind(0, '');\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement | false => {\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } =\r\n getEnvironment();\r\n /* istanbul ignore next */\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value?: string | false | null | undefined) => {\r\n attr(elm, dataAttributeHost, value || '');\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling } = getEnvironment();\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as InitializationTargetElement)\r\n : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = !!ResizeObserverConstructor && _nativeScrollbarStyling;\r\n const staticInitializationElement =\r\n generalStaticInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const dynamicInitializationElement =\r\n generalDynamicInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const potentialViewportElement = staticInitializationElement(\r\n createNewDiv,\r\n viewportInitializationStrategy,\r\n targetStructureInitialization.viewport\r\n );\r\n const potentiallySingleElm = potentialViewportElement === targetElement;\r\n const viewportIsTarget = singleElmSupport && potentiallySingleElm;\r\n const viewportElement =\r\n potentiallySingleElm && !viewportIsTarget\r\n ? staticInitializationElement(createNewDiv)\r\n : potentialViewportElement;\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: dynamicInitializationElement(\r\n createNewDiv,\r\n paddingInitializationStrategy,\r\n targetStructureInitialization.padding\r\n ),\r\n _content: dynamicInitializationElement(\r\n createNewDiv,\r\n contentInitializationStrategy,\r\n targetStructureInitialization.content\r\n ),\r\n _viewportArrange: !viewportIsTarget && createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarStyling && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n\r\n return [evaluatedTargetObj, runEach.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n noop,\r\n each,\r\n equalXY,\r\n attrClass,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportArrange,\r\n classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\ntype UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nconst { max } = Math;\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarSize,\r\n _flexboxGlue,\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [updateOverflowStyleCache] = createCache>(xyCacheOptions);\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _paddingAbsolute, _padding: padding } = getState();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const fSize = fractionalSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = _paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n hostClientSize.h +\r\n fSize.h +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n ): ViewportOverflowState => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const getStatePerAxis = (\r\n styleKey: string,\r\n isOverlaid: boolean,\r\n nativeScrollbarSize: number\r\n ) => {\r\n const overflowStyle = style(_viewport, styleKey);\r\n // can't do something like \"viewportStyleObj && viewportStyleObj[styleKey] || overflowStyle\" here!\r\n const objectPrefferedOverflowStyle = viewportStyleObj\r\n ? viewportStyleObj[styleKey]\r\n : overflowStyle;\r\n const overflowScroll = objectPrefferedOverflowStyle === 'scroll';\r\n const nonScrollbarStylingHideOffset = isOverlaid ? arrangeHideOffset : nativeScrollbarSize;\r\n const scrollbarsHideOffset =\r\n overflowScroll && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset : 0;\r\n const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset;\r\n\r\n return [overflowStyle, overflowScroll, scrollbarsHideOffset, scrollbarsHideOffsetArrange] as [\r\n overflowStyle: OverflowStyle,\r\n overflowScroll: boolean,\r\n scrollbarsHideOffset: number,\r\n scrollbarsHideOffsetArrange: boolean\r\n ];\r\n };\r\n\r\n const [xOverflowStyle, xOverflowScroll, xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowX', _nativeScrollbarIsOverlaid.x, _nativeScrollbarSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarIsOverlaid.y, _nativeScrollbarSize.y);\r\n\r\n return {\r\n _overflowStyle: {\r\n x: xOverflowStyle,\r\n y: yOverflowStyle,\r\n },\r\n _overflowScroll: {\r\n x: xOverflowScroll,\r\n y: yOverflowScroll,\r\n },\r\n _scrollbarsHideOffset: {\r\n x: xScrollbarsHideOffset,\r\n y: yScrollbarsHideOffset,\r\n },\r\n _scrollbarsHideOffsetArrange: {\r\n x: xScrollbarsHideOffsetArrange,\r\n y: yScrollbarsHideOffsetArrange,\r\n },\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n hasOverflow: XY,\r\n overflowOption: XY,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setAxisOverflowStyle = (behavior: OverflowBehavior, hasOverflowAxis: boolean) => {\r\n const overflowVisible = overflowIsVisible(behavior);\r\n const overflowVisibleBehavior =\r\n (hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, '')) || '';\r\n return [\r\n hasOverflowAxis && !overflowVisible ? behavior : '',\r\n overflowIsVisible(overflowVisibleBehavior) ? 'hidden' : overflowVisibleBehavior,\r\n ];\r\n };\r\n\r\n const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x);\r\n const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y);\r\n\r\n viewportStyleObj.overflowX = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX;\r\n viewportStyleObj.overflowY = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY;\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\r\n if (doViewportArrange) {\r\n const { _viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;\r\n const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(\r\n `#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingLeft'\r\n : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] =\r\n horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n ): UndoViewportArrangeResult => {\r\n if (doViewportArrange) {\r\n const finalViewportOverflowState =\r\n viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n\r\n removeClass(_viewport, classNameViewportArrange);\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return [\r\n () => {\r\n hideNativeScrollbars(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n doViewportArrange,\r\n prevStyle\r\n );\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n finalViewportOverflowState,\r\n ];\r\n }\r\n return [noop];\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('nativeScrollbarsOverlaid.show');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\r\n );\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [\r\n on(expandElement, scrollEventName, onScroll),\r\n on(shrinkElement, scrollEventName, onScroll),\r\n ]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport type DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [destroy: () => void, update: () => void];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n });\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { runEach } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _addOnUpdatedListener: (listener: OnUpdatedListener) => void;\r\n}\r\n\r\nexport type OnUpdatedListener = (\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n) => void;\r\n\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const onUpdatedListeners = new Set();\r\n const [getState] = state;\r\n const runOnUpdatedListeners = (\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions?: PartialOptions,\r\n force?: boolean\r\n ) => {\r\n runEach(onUpdatedListeners, [updateHints, changedOptions || {}, !!force]);\r\n };\r\n\r\n const [elements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n runOnUpdatedListeners(updateStructure(checkOptionsFallback, updateHints));\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n onUpdatedListeners.add(listener);\r\n };\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObservers(checkOption);\r\n runOnUpdatedListeners(updateStructure(checkOption, {}, force));\r\n },\r\n structureSetupState,\r\n () => {\r\n onUpdatedListeners.clear();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { appendChildren, createDiv, removeElements } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [elements: ScrollbarsSetupElementsObj, destroy: () => void];\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } =\r\n _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot =\r\n !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n environmentScrollbarSlot,\r\n initializationScrollbarSlot\r\n );\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n}\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, destroyElements] = createScrollbarsSetupElements(target, structureSetupElements);\r\n\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { assignDeep, each, isArray } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type OSPluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type OSPlugin = [string, T];\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: OSPlugin | OSPlugin[]) =>\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as OSPlugin[], (plugin) => {\r\n pluginRegistry[plugin[0]] = plugin[1];\r\n });\r\n","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject, PartialOptions } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: any, ...args: any[]) => any;\r\nexport type OptionsTemplateType = ExtractPropsKey<\r\n OptionsTemplateTypeMap,\r\n T\r\n>;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = [\r\n PartialOptions, // validated\r\n Record // foreign\r\n];\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = {\r\n boolean: '__TPL_boolean_TYPE__',\r\n number: '__TPL_number_TYPE__',\r\n string: '__TPL_string_TYPE__',\r\n array: '__TPL_array_TYPE__',\r\n object: '__TPL_object_TYPE__',\r\n function: '__TPL_function_TYPE__',\r\n null: '__TPL_null_TYPE__',\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array =\r\n template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const [validated, foreign] = validateRecursive(\r\n templateValue as T,\r\n optionsValue,\r\n doWriteErrors,\r\n propPrefix + prop\r\n );\r\n validatedOptions[prop] = validated as any;\r\n optionsCopy[prop] = foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n validatedOptions[prop] = optionsValue;\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${\r\n errorEnumStrings.length > 0\r\n ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n : ''\r\n }`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return [validatedOptions, optionsCopy]; // optionsCopy equals now to foreign options\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a tuple which looks like:\r\n * [\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * ]\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import { OSPlugin } from 'plugins';\r\nimport { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidation/validation';\r\nimport { PartialOptions } from 'typings';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: OSPlugin = [\r\n optionsValidationPluginName,\r\n {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n];\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n each,\r\n isFunction,\r\n keys,\r\n isHTMLElement,\r\n XY,\r\n TRBL,\r\n createEventListenerHub,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n OSPlugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport type { PartialOptions, OverflowStyle } from 'typings';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n InitializationStrategy,\r\n} from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\n\r\n/*\r\nonScrollStart : null,\r\nonScroll : null,\r\nonScrollStop : null,\r\nonOverflowChanged : null,\r\nonOverflowAmountChanged : null, // fusion with onOverflowChanged\r\nonDirectionChanged : null, // gone\r\nonContentSizeChanged : null, // gone\r\nonHostSizeChanged : null, // gone\r\n*/\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget | InitializationTargetObject,\r\n options?: PartialOptions,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(osPlugin: OSPlugin | OSPlugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarSize: XY;\r\n scrollbarIsOverlaid: XY;\r\n scrollbarStyling: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n defaultInitializationStrategy: InitializationStrategy;\r\n defaultDefaultOptions: Options;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n}\r\n\r\nexport interface Elements {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n padding: HTMLElement;\r\n viewport: HTMLElement;\r\n content: HTMLElement;\r\n}\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\r\n force: boolean;\r\n}\r\n\r\nexport interface EventListenerMap {\r\n initialized: undefined;\r\n initializationWithdrawn: undefined;\r\n updated: OnUpdatedEventListenerArgs;\r\n destroyed: undefined;\r\n}\r\n\r\nexport type InitialEventListeners = GeneralInitialEventListeners;\r\n\r\nexport type EventListener = GeneralEventListener<\r\n EventListenerMap,\r\n Name\r\n>;\r\n\r\nexport interface OverlayScrollbars {\r\n options(): Options;\r\n options(newOptions?: PartialOptions): Options;\r\n\r\n update(force?: boolean): void;\r\n\r\n destroy(): void;\r\n\r\n state(): State;\r\n\r\n elements(): Elements;\r\n\r\n on(name: Name, listener: EventListener): () => void;\r\n on(name: Name, listener: EventListener[]): () => void;\r\n\r\n off(name: Name, listener?: EventListener): void;\r\n off(name: Name, listener?: EventListener[]): void;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n const {\r\n _getDefaultOptions,\r\n _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: PartialOptions) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);\r\n\r\n if (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\r\n triggerEvent('initializationWithdrawn');\r\n }\r\n\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, , destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState._elements\r\n );\r\n\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n });\r\n });\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: removeEvent,\r\n state() {\r\n const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n },\r\n destroy: () => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n removeEvent();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n triggerEvent('destroyed');\r\n },\r\n };\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n instance.update(true);\r\n\r\n addInstance(instanceTarget, instance);\r\n\r\n triggerEvent('initialized');\r\n\r\n return instance;\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarSize: _nativeScrollbarSize,\r\n scrollbarIsOverlaid: _nativeScrollbarIsOverlaid,\r\n scrollbarStyling: _nativeScrollbarStyling,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["createCache","options","update","o","u","_equal","_","_alwaysUpdateValues","_value","_initialValue","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","isUndefined","obj","undefined","isNull","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","type","key","cstr","ctor","ctorProto","prototype","hasOwnConstructor","hasOwnProperty","call","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","ElementNodeType","isElement","Element","each","source","callback","i","Object","keys","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","scrollLeft","scrollTop","style","styles","getSingleStyle","getStyles","getStylesResult","computedStyle","getComputedStyle","getCSSVal","reduce","result","setCSSVal","Node","ELEMENT_NODE","toString","replace","toLowerCase","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","Set","forEach","isEmptyArray","runEach","args","runFn","fn","prop","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","g","_timeout","p","_maxDelay","v","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getPropertyValue","setProperty","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","fractionalSize","cssHeight","cssWidth","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","removeEvent","eventSet","events","currListener","clear","addEvent","set","triggerEvent","event","Map","initialListenerKeys","getPropByPath","path","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostViewportScrollbarStyling","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","opsStringify","JSON","stringify","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarStyling","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","getDefaultInitializationStrategy","nativeScrollbarStyling","_padding","_content","createEnvironment","envDOM","envElm","envChildElm","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","nativeScrollbarSize","nativeScrollbarIsOverlaid","initializationStrategy","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","scrollbarSizeChanged","getEnvironment","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","takeInitializationValue","contentArrangeCounter","createNewDiv","unwrap","createUniqueViewportArrangeElement","T","I","D","create","addDataAttrHost","createStructureSetupElements","N","_host","hostInitializationStrategy","_viewport","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","potentialViewportElement","viewport","potentiallySingleElm","viewportIsTarget","viewportElement","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","Y","V","A","U","$","q","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","getState","updateHints","M","st","_heightIntrinsic","ct","_heightIntrinsicChanged","heightIntrinsicChanged","height","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","lt","_directionIsRTL","it","rt","ut","_directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","width","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_viewportPaddingStyle","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportScrollSize","viewportClientSize","sizeFraction","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","nt","et","L","doViewportArrange","updateSizeFraction","getCurrentSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","updateOverflowStyleCache","fixFlexboxGlue","viewportOverflowState","heightIntrinsic","ft","gt","_overflowScroll","ht","_scrollbarsHideOffset","hostClientSize","isContentBox","subtractXScrollbar","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","_scrollbarsHideOffsetArrange","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","visibleBehaviorX","visibleBehaviorY","arrangeViewport","directionIsRTL","dt","wt","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","viewportPaddingStyle","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","bt","_hostMutation","_t","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","redoViewportArrange","undoViewportArrangeOverflowState","sizeFractionChanged","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmount","overflowAmountChanged","removeClipping","viewportArranged","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","scrollEventName","scrollAmount","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","getIsDirectionRTL","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","appear","doDirectionScroll","currRContentRect","prevContentRect","pop","contentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","Lt","_attributes","It","_styleChangingAttributes","Tt","_eventContentChange","zt","_nestedTargetSelector","Dt","_ignoreTargetChange","Et","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","K","ot","updateContentSizeCache","contentScroll","viewportScroll","fractional","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","onUpdatedListeners","runOnUpdatedListeners","destroyElements","updateStructure","updateObservers","destroyObservers","structureSetupState","_addOnUpdatedListener","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","_scrollbarsSlot","environmentScrollbarSlot","tt","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","scrollbarsSetupState","console","log","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","optionsTemplateTypes","boolean","number","string","object","function","null","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsValidationPluginName","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","F","addEnvListener","plugins","instanceTarget","potentialInstance","optionsValidationPlugin","validateOptions","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","destroyScrollbars","removeEnvListener","xt","Ct","sizeChanged","hostMutation","instance","yt","vt","St","pluginName","pluginInstance","P","k","B","R","H","scrollbarIsOverlaid","scrollbarStyling","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js index f65de5b..d86c93a 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,s:o,u:r}=t;let i,a=n;const s=(t,e)=>{const n=a,s=t,l=e||(o?!o(n,s):n!==s);return(l||r)&&(a=s,i=n),[a,l,i]};return[e?t=>s(e(a,i),t):s,t=>[a,!!t,i]]}const e=Node.ELEMENT_NODE,{toString:n,hasOwnProperty:o}=Object.prototype;function r(t){return void 0===t}function i(t){return null===t}function a(t){return"number"==typeof t}function s(t){return"string"==typeof t}function l(t){return"boolean"==typeof t}function c(t){return"function"==typeof t}function d(t){return Array.isArray(t)}function u(t){return"object"==typeof t&&!d(t)&&!i(t)}function _(t){const e=!!t&&t.length,n=a(e)&&e>-1&&e%1==0;return!!(d(t)||!c(t)&&n)&&(!(e>0&&u(t))||e-1 in t)}function g(t){if(!t||!u(t)||"object"!==(t=>r(t)||i(t)?`${t}`:n.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase())(t))return!1;let e;const a="constructor",s=t[a],l=s&&s.prototype,c=o.call(t,a),d=l&&o.call(l,"isPrototypeOf");if(s&&!c&&!d)return!1;for(e in t);return r(e)||o.call(t,e)}function f(t){const n=window.HTMLElement;return!!t&&(n?t instanceof n:t.nodeType===e)}function h(t){const n=window.Element;return!!t&&(n?t instanceof n:t.nodeType===e)}function v(t,e){if(_(t))for(let n=0;ne(t[n],n,t));return t}const w=(t,e,n)=>t.indexOf(e,n),p=(t,e,n)=>(n||s(e)||!_(e)?t.push(e):Array.prototype.push.apply(t,e),t),b=t=>{if(Array.from&&t)return Array.from(t);const e=[];return t instanceof Set?t.forEach(t=>{p(e,t)}):v(t,t=>{p(e,t)}),e},y=t=>!!t&&0===t.length,S=(t,e)=>{const n=t=>t&&t.apply(void 0,e||[]);t instanceof Set?t.forEach(n):v(t,n)},m=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),x=t=>t?Object.keys(t):[];function C(t,e,n,o,r,a,s){const l=[e,n,o,r,a,s];return"object"==typeof t&&!i(t)||c(t)||(t={}),v(l,e=>{v(x(e),n=>{const o=e[n];if(t===o)return!0;const r=d(o);if(o&&(g(o)||r)){const e=t[n];let i=e;r&&!d(e)?i=[]:r||g(e)||(i={}),t[n]=C(i,o)}else t[n]=o})}),t}function $(t,e,n,o){if(r(o))return n?n[t]:e;n&&(n[t]=o)}function O(t,e,n){if(r(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)}const I=(t,e,n,o)=>{const r=O(t,e)||"",i=new Set(r.split(" "));i[o?"add":"delete"](n),O(t,e,b(i).join(" ").trim())},z=(t,e)=>{t&&t.removeAttribute(e)};function A(t,e){return $("scrollLeft",0,t,e)}function M(t,e){return $("scrollTop",0,t,e)}const L=Element.prototype,R=(t,e)=>{const n=[],o=e?h(e)?e:null:document;return o?p(n,o.querySelectorAll(t)):n},T=(t,e)=>{if(h(t)){return(L.matches||L.msMatchesSelector).call(t,e)}return!1},D=t=>t?b(t.childNodes):[],V=t=>t?t.parentElement:null,P=(t,e)=>{if(h(t)){const n=L.closest;if(n)return n.call(t,e);do{if(T(t,e))return t;t=V(t)}while(t)}return null},H=(t,e,n)=>{const o=t&&P(t,e),r=t&&((t,e)=>{const n=e?h(e)?e:null:document;return n?n.querySelector(t):null})(n,o);return!(!o||!r)&&(o===t||r===t||P(P(t,n),e)!==o)},B=(t,e,n)=>{if(n){let o,r=e;t&&(_(n)?(o=document.createDocumentFragment(),v(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))}},E=(t,e)=>{B(t,null,e)},j=(t,e)=>{B(t,t&&t.firstChild,e)},k=(t,e)=>{B(V(t),t&&t.nextSibling,e)},q=t=>{if(_(t))v(b(t),t=>q(t));else if(t){const e=V(t);e&&e.removeChild(t)}},G=t=>{const e=document.createElement("div");return t&&O(e,"class",t),e},F=t=>{const e=G();return e.innerHTML=t.trim(),v(D(e),t=>q(t))},N=t=>t.charAt(0).toUpperCase()+t.slice(1),W=["-webkit-","-moz-","-o-","-ms-"],X=["WebKit","Moz","O","MS","webkit","moz","o","ms"],Y={},U={},J=t=>{let e=U[t];if(m(U,t))return e;const n=N(t),o=G().style;return v(W,r=>{const i=r.replace(/-/g,""),a=[t,r+t,i+n,N(i)+n];return!(e=a.find(t=>void 0!==o[t]))}),U[t]=e||""},K=t=>{let e=Y[t]||window[t];return m(Y,t)||(v(X,n=>(e=e||window[n+N(t)],!e)),Y[t]=e),e},Q=K("MutationObserver"),Z=K("IntersectionObserver"),tt=K("ResizeObserver"),et=K("cancelAnimationFrame"),nt=K("requestAnimationFrame"),ot=/[^\x20\t\r\n\f]+/g,rt=(t,e,n)=>{let o,r=0,i=!1;if(t&&e&&s(e)){const a=e.match(ot)||[];for(i=a.length>0;o=a[r++];)i=!!n(t.classList,o)&&i}return i},it=(t,e)=>{rt(t,e,(t,e)=>t.remove(e))},at=(t,e)=>(rt(t,e,(t,e)=>t.add(e)),it.bind(0,t,e)),st=(t,e,n,o)=>{if(t&&e){let r=!0;return v(n,n=>{(o?o(t[n]):t[n])!==(o?o(e[n]):e[n])&&(r=!1)}),r}return!1},lt=(t,e)=>st(t,e,["w","h"]),ct=(t,e)=>st(t,e,["x","y"]),dt=(t,e)=>st(t,e,["t","r","b","l"]),ut=(t,e,n)=>st(t,e,["width","height"],n&&(t=>Math.round(t))),_t=t=>{t&&window.clearTimeout(t),t&&et(t)},gt=()=>{},ft=(t,e)=>{let n,o,r,i;const{_:s,g:l,v:d}=e||{},u=window.setTimeout,_=function(e){_t(n),_t(o),o=n=r=void 0,t.apply(this,e)},g=t=>d&&r?d(r,t):t,f=()=>{n&&_(g(i)||i)},h=function(){const t=b(arguments),e=c(s)?s():s,d=a(e)&&e>=0;if(d){const s=c(l)?l():l,d=a(s)&&s>=0,h=e>0?u:nt,v=g(t)||t,w=_.bind(0,v);_t(n),n=h(w,e),d&&!o&&(o=u(f,s)),r=i=v}else _(t)};return h.p=f,h},ht={opacity:1,zindex:1},vt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},wt=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],pt=(t,e,n)=>{try{if(t){const{style:o}=t;r(o[e])?o.setProperty(e,n):o[e]=((t,e)=>!ht[t.toLowerCase()]&&a(e)?`${e}px`:e)(e,n)}}catch(o){}};function bt(t,e){const n=s(e);if(d(e)||n){let o=n?"":{};if(t){const r=window.getComputedStyle(t,null);o=n?wt(t,r,e):e.reduce((e,n)=>(e[n]=wt(t,r,n),e),o)}return o}v(x(e),n=>pt(t,n,e[n]))}const yt=(t,e,n)=>{const o=e?`${e}-`:"",r=n?`-${n}`:"",i=`${o}top${r}`,a=`${o}right${r}`,s=`${o}bottom${r}`,l=`${o}left${r}`,c=bt(t,[i,a,s,l]);return{t:vt(c[i]),r:vt(c[a]),b:vt(c[s]),l:vt(c[l])}},St={w:0,h:0},mt=()=>({w:window.innerWidth,h:window.innerHeight}),xt=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:St,Ct=t=>t?{w:t.clientWidth,h:t.clientHeight}:St,$t=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:St,Ot=t=>{const e=parseFloat(bt(t,"height"))||0,n=parseFloat(bt(t,"height"))||0;return{w:n-Math.round(n),h:e-Math.round(e)}},It=t=>t.getBoundingClientRect();let zt;const At=t=>t.split(" "),Mt=(t,e,n,o)=>{v(At(e),e=>{t.removeEventListener(e,n,o)})},Lt=(t,e,n,o)=>{const i=(()=>{if(r(zt)){zt=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){zt=!0}}))}catch(t){}}return zt})(),a=i&&o&&o.S||!1,s=o&&o.m||!1,l=o&&o.C||!1,c=[],d=i?{passive:a,capture:s}:s;return v(At(e),e=>{const o=l?r=>{t.removeEventListener(e,o,s),n&&n(r)}:n;p(c,Mt.bind(null,t,e,o,s)),t.addEventListener(e,o,d)}),S.bind(0,c)},Rt=t=>(t=>t.stopPropagation())(t)||(t=>t.preventDefault())(t),Tt={x:0,y:0},Dt=t=>{const e=t?It(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:Tt},Vt=(t,e)=>{v(d(e)?e:[e],t)},Pt=t=>{const e=new Map,n=(t,n)=>{if(t){const o=e.get(t);Vt(t=>{o&&o[t?"delete":"clear"](t)},n)}else e.forEach(t=>{t.clear()}),e.clear()},o=(t,o)=>{const r=e.get(t)||new Set;return e.set(t,r),Vt(t=>{t&&r.add(t)},o),n.bind(0,t,o)};return v(x(t),e=>{o(e,t[e])}),[o,n,(t,n)=>{const o=e.get(t);v(b(o),t=>{n?t(n):t()})}]},Ht=(t,e)=>t?e.split(".").reduce((t,e)=>t&&m(t,e)?t[e]:void 0,t):void 0,Bt=(t,e,n)=>o=>[Ht(t,o),n||void 0!==Ht(e,o)],Et=t=>{let e=t;return[()=>e,t=>{e=C({},e,t)}]},jt="os-environment",kt=`${jt}-flexbox-glue`,qt=`${kt}-max`,Gt="data-overlayscrollbars",Ft=`${Gt}-overflow-x`,Nt=`${Gt}-overflow-y`,Wt="overflowVisible",Xt="viewportStyled",Yt="os-padding",Ut="os-viewport",Jt=`${Ut}-arrange`,Kt="os-content",Qt=`${Ut}-scrollbar-styled`,Zt=`os-overflow-visible`,te="os-size-observer",ee=`${te}-appear`,ne=`${te}-listener`,oe=`${ne}-scroll`,re=`${ne}-item`,ie=`${re}-final`,ae="os-trinsic-observer",se="os-scrollbar",le=`${se}-horizontal`,ce=`${se}-vertical`,de="os-scrollbar-track",ue="os-scrollbar-handle",_e=t=>JSON.stringify(t,(t,e)=>{if(c(e))throw new Error;return e}),ge={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=(t,e)=>{const n={};return v(x(e).concat(x(t)),o=>{const r=t[o],i=e[o];if(u(r)&&u(i))C(n[o]={},fe(r,i));else if(m(e,o)&&i!==r){let t=!0;if(d(r)||d(i))try{_e(r)===_e(i)&&(t=!1)}catch(a){}t&&(n[o]=i)}}),n};let he;const{abs:ve,round:we}=Math,pe=(t,e,n)=>{E(t,e);const o=Ct(e),r=xt(e),i=Ot(n);return{x:r.h-o.h+i.h,y:r.w-o.w+i.w}},be=(t,e)=>{const n="hidden";bt(t,{overflowX:n,overflowY:n,direction:"rtl"}),A(t,0);const o=Dt(t),r=Dt(e);A(t,-999);const i=Dt(e);return{i:o.x===r.x,n:r.x!==i.x}},ye=(t,e)=>{const n=at(t,kt),o=It(t),r=It(e),i=ut(r,o,!0),a=at(t,qt),s=It(t),l=It(e),c=ut(l,s,!0);return n(),a(),i&&c},Se=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},me=()=>{const{body:e}=document,n=F(`
`)[0],o=n.firstChild,[r,,i]=Pt(),[a,s]=t({o:pe(e,n,o),s:ct}),[l]=s(),c=(t=>{let e=!1;const n=at(t,Qt);try{e="none"===bt(t,J("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(o){}return n(),e})(n),d={x:0===l.x,y:0===l.y},u=(t=>({$:null,O:null,I:!t,A:!1,M:null}))(c),_=C({},ge),g={L:l,R:d,T:c,D:"-1"===bt(n,"zIndex"),V:be(n,o),P:ye(n,o),H:t=>r("_",t),B:C.bind(0,{},u),j(t){C(u,t)},k:C.bind(0,{},_),q(t){C(_,t)},G:C({},u),F:C({},_)};if(z(n,"style"),q(n),!(c||d.x&&d.y)){let t=mt(),r=Se();window.addEventListener("resize",()=>{const s=mt(),l={w:s.w-t.w,h:s.h-t.h};if(0===l.w&&0===l.h)return;const c=ve(l.w),d=ve(l.h),u={w:ve(we(s.w/(t.w/100))),h:ve(we(s.h/(t.h/100)))},_=Se(),g=c>2&&d>2,f=!((t,e)=>{const n=ve(t),o=ve(e);return!(n===o||n+1===o||n-1===o)})(u.w,u.h);if(g&&f&&(_!==r&&r>0)){const[t,r]=a(pe(e,n,o));C(he.L,t),q(n),r&&i("_")}t=s,r=_})}return g},xe=()=>(he||(he=me()),he);let Ce=0;const $e=t=>{E(V(t),D(t)),q(t)},Oe=()=>{const{T:t,R:e,D:n}=xe(),o=!!(!n&&!t&&(e.x||e.y))&&document.createElement("style");return o&&(O(o,"id",`${Jt}-${Ce}`),Ce++),o},Ie=(t,e,n)=>e||(c(n)?n(t):n)||G(),ze=(t,e,n)=>{const o=l(e)||e?e:c(n)?n(t):n;return!0===o?G():o},Ae=t=>{const{B:e,T:n}=xe(),{$:o,O:r,I:i,A:a}=e(),s=f(t),l=t,c=s?t:l.target,d=T(c,"textarea"),u=!d&&T(c,"body"),_=c.ownerDocument,g=_.body,h=_.defaultView,v=!!tt&&n,b=Ie(c,l.viewport,r),y=b===c,m=v&&y,C=y&&!m?Ie(c):b,$={N:c,$:d?Ie(c,l.host,o):c,O:C,I:ze(c,l.padding,i),A:ze(c,l.content,a),W:!m&&Oe(),X:h,Y:_,U:V(g),J:g,K:d,Z:u,tt:s,et:m,nt:(t,e)=>m?((t,e,n)=>{const o=O(t,e)||"";return new Set(o.split(" ")).has(n)})(C,Gt,e):((t,e)=>rt(t,e,(t,e)=>t.contains(e)))(C,t),ot:(t,e,n)=>m?I(C,Gt,e,n):(n?at:it)(C,t)},A=x($).reduce((t,e)=>{const n=$[e];return p(t,!(!n||V(n))&&n)},[]),M=t=>t?w(A,t)>-1:null,{N:L,$:R,I:P,O:H,A:j,W:G}=$,F=[],N=d&&M(R),W=d?L:D([j,H,P,R,L].find(t=>!1===M(t))),X=j||H,Y=(O(U=R,Gt,(m?"viewport":"host")||""),z.bind(0,U,Gt));var U;const J=at(P,Yt),K=at(H,!m&&Ut),Q=at(j,Kt);var Z,et;return N&&(k(L,R),p(F,()=>{k(R,L),q(R)})),E(X,W),E(R,P),E(P||R,!m&&H),E(H,j),p(F,()=>{Y(),z(H,Ft),z(H,Nt),M(j)&&$e(j),M(H)&&$e(H),M(P)&&$e(P),J(),K(),Q()}),n&&!m&&p(F,it.bind(0,H,Qt)),G&&(et=G,B(V(Z=H),Z,et),p(F,q.bind(0,G))),[$,S.bind(0,F)]},Me=(t,e)=>{const{A:n}=t,[o]=e;return t=>{const{P:e}=xe(),{rt:r}=o(),{it:i}=t,a=(n||!e)&&i;return a&&bt(n,{height:r?"":"100%"}),{st:a,lt:a}}},Le=(e,n)=>{const[o,r]=n,{$:i,I:a,O:s,et:l}=e,[c,d]=t({s:dt,o:yt()},yt.bind(0,i,"padding",""));return(t,e,n)=>{let[i,u]=d(n);const{T:_,P:g}=xe(),{ct:f}=o(),{st:h,lt:v,dt:w}=t,[p,b]=e("paddingAbsolute");(h||u||!g&&v)&&([i,u]=c(n));const y=!l&&(b||w||u);if(y){const t=!p||!a&&!_,e=i.r+i.l,n=i.t+i.b,o={marginRight:t&&!f?-e:0,marginBottom:t?-n:0,marginLeft:t&&f?-e:0,top:t?-i.t:0,right:t?f?-i.r:"auto":0,left:t?f?"auto":-i.l:0,width:t?`calc(100% + ${e}px)`:""},l={paddingTop:t?i.t:0,paddingRight:t?i.r:0,paddingBottom:t?i.b:0,paddingLeft:t?i.l:0};bt(a||s,o),bt(s,l),r({I:i,ut:!t,_t:a?l:C({},o,l)})}return{gt:y}}},{max:Re}=Math,Te="visible",De="hidden",Ve=42,Pe={s:lt,o:{w:0,h:0}},He={s:ct,o:{x:De,y:De}},Be=(t,e,n)=>n?at(t,e):it(t,e),Ee=t=>0===t.indexOf(Te),je=(e,n)=>{const[o,r]=n,{$:i,I:a,O:s,W:l,et:c,ot:d}=e,{L:u,P:_,T:g,R:f}=xe(),h=!c&&!g&&(f.x||f.y),[w,p]=t(Pe,Ot.bind(0,s)),[b,y]=t(Pe,$t.bind(0,s)),[S,m]=t(Pe),[C]=t(He),$=(t,e)=>{if(bt(s,{height:""}),e){const{ut:e,I:n}=o(),{ft:r,ht:a}=t,l=Ot(i),c=Ct(i),d="content-box"===bt(s,"boxSizing"),u=e||d?n.b+n.t:0,_=!(f.x&&d);bt(s,{height:c.h+l.h+(r.x&&_?a.x:0)-u})}},z=(t,e)=>{const n=g||t?0:Ve,o=(t,o,r)=>{const i=bt(s,t),a="scroll"===(e?e[t]:i);return[i,a,a&&!g?o?n:r:0,o&&!!n]},[r,i,a,l]=o("overflowX",f.x,u.x),[c,d,_,h]=o("overflowY",f.y,u.y);return{vt:{x:r,y:c},ft:{x:i,y:d},ht:{x:a,y:_},wt:{x:l,y:h}}},A=(t,e,n,r)=>{if(h){const{_t:i}=o(),{ht:a,wt:c}=t,{x:d,y:u}=c,{x:_,y:g}=a,f=i[r?"paddingRight":"paddingLeft"],h=i.paddingTop,v=e.w+n.w,w=e.h+n.h,p={w:g&&u?`${g+v-f}px`:"",h:_&&d?`${_+w-h}px`:""};if(l){const{sheet:t}=l;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${O(l,"id")} + .${Jt}::before {}`,0);const n=e[0].style;n.width=p.w,n.height=p.h}}}else bt(s,{"--os-vaw":p.w,"--os-vah":p.h})}return h},M=(t,e,n,r)=>{const{ht:i,wt:a}=t,{x:s,y:l}=a,{x:c,y:d}=i,{_t:u}=o(),_=e?"marginLeft":"marginRight",g=e?"paddingLeft":"paddingRight",f=u[_],h=u.marginBottom,v=u[g],w=u.paddingBottom;r.width=`calc(100% + ${d+-1*f}px)`,r[_]=-d+f,r.marginBottom=-c+h,n&&(r[g]=v+(l?d:0),r.paddingBottom=w+(s?c:0))};return(t,e,n)=>{const{st:l,pt:u,lt:L,gt:R,it:T,dt:D}=t,{rt:V,ct:P}=o(),[H,B]=e("nativeScrollbarsOverlaid.show"),[E,j]=e("overflow"),k=H&&f.x&&f.y,q=!c&&!_&&(l||L||u||B||T),G=Ee(E.x),F=Ee(E.y),N=G||F;let W,X=p(n),Y=y(n),U=m(n);if(B&&g&&d(Qt,Xt,!k),q&&(W=z(k),$(W,V)),l||R||L||D||B){N&&d(Zt,Wt,!1);const[t,e]=((t,e,n)=>{if(h){const r=n||z(t),{_t:i}=o(),{wt:a}=r,{x:l,y:c}=a,d={},u=t=>v(t.split(" "),t=>{d[t]=i[t]});l&&u("marginBottom paddingTop paddingBottom"),c&&u("marginLeft marginRight paddingLeft paddingRight");const g=bt(s,x(d));return it(s,Jt),_||(d.height=""),bt(s,d),[()=>{M(r,e,h,g),bt(s,g),at(s,Jt)},r]}return[gt]})(k,P,W),[r,i]=X=w(n),[a,l]=Y=b(n),c=Ct(s);let u=a,g=c;t(),(l||i||B)&&e&&!k&&A(e,a,r,P)&&(g=Ct(s),u=$t(s)),U=S(((t,e,n)=>{const o=window.devicePixelRatio%1!=0?1:0,r={w:Re(0,t.w-e.w-Re(0,n.w)),h:Re(0,t.h-e.h-Re(0,n.h))};return{w:r.w>o?r.w:0,h:r.h>o?r.h:0}})({w:Re(a.w,u.w),h:Re(a.h,u.h)},{w:g.w+Re(0,c.w-a.w),h:g.h+Re(0,c.h-a.h)},r),n)}const[J,K]=U,[Q,Z]=Y,[tt,et]=X,nt={x:J.w>0,y:J.h>0},ot=G&&F&&(nt.x||nt.y)||G&&nt.x&&!nt.y||F&&nt.y&&!nt.x;if(R||D||et||Z||K||j||B||q){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},e=((t,e,n,o)=>{const r=(t,e)=>{const n=Ee(t),o=e&&n&&t.replace(`${Te}-`,"")||"";return[e&&!n?t:"",Ee(o)?"hidden":o]},[i,a]=r(n.x,e.x),[s,l]=r(n.y,e.y);return o.overflowX=a&&s?a:i,o.overflowY=l&&i?l:s,z(t,o)})(k,nt,E,t),n=A(e,Q,tt,P);c||M(e,P,n,t),q&&$(e,V),c?(O(i,Ft,t.overflowX),O(i,Nt,t.overflowY)):bt(s,t)}I(i,Gt,Wt,ot),Be(a,Zt,ot),!c&&Be(s,Zt,N);const[rt,st]=C(z(k).vt);return r({vt:rt,bt:{x:J.w,y:J.h},yt:nt}),{St:st,xt:K}}},ke=(t,e,n)=>{const o={},r=e||{};return v(x(t).concat(x(r)),e=>{const i=t[e],a=r[e];o[e]=!!(n||i||a)}),o},qe="animationstart",Ge="scroll",Fe=3333333,Ne=t=>"rtl"===bt(t,"direction"),We=t=>t&&(t.height||t.width),Xe=(e,n,o)=>{const{Ct:r=!1,$t:i=!1}=o||{},{V:a}=xe(),s=F(`
`)[0],c=s.firstChild,_=Ne.bind(0,s),[g]=t({o:void 0,u:!0,s:(t,e)=>!(!t||!We(t)&&We(e))}),f=t=>{const e=d(t)&&t.length>0&&u(t[0]),o=!e&&l(t[0]);let i=!1,c=!1,_=!0;if(e){const[e,,n]=g(t.pop().contentRect),o=We(e),r=We(n);i=!n||!o,c=!r&&o,_=!i}else o?[,_]=t:c=!0===t;if(r&&_){const e=o?t[0]:Ne(s);A(s,e?a.n?-Fe:a.i?0:Fe:Fe),M(s,Fe)}i||n({st:!o,Ot:o?t:void 0,$t:!!c})},h=[];let v,w=!!i&&f;if(tt){const t=new tt(f);t.observe(c),p(h,()=>{t.disconnect()})}else{const t=F(`
`);E(c,t),at(c,oe);const e=t[0],n=e.lastChild,o=e.firstChild,r=null==o?void 0:o.firstChild;let a,s=xt(e),l=s,d=!1;const u=()=>{A(o,Fe),M(o,Fe),A(n,Fe),M(n,Fe)},_=t=>{a=0,d&&(s=l,f(!0===t))},g=t=>{l=xt(e),d=!t||!lt(l,s),t?(Rt(t),d&&!a&&(et(a),a=nt(_))):_(!1===t),u()};p(h,[Lt(o,Ge,g),Lt(n,Ge,g)]),bt(r,{width:Fe,height:Fe}),u(),w=i?g.bind(0,!1):u}if(r){v=t({o:!_()},_);const[e]=v;p(h,Lt(s,Ge,t=>{const n=e(),[o,r]=n;r&&(it(c,"ltr rtl"),at(c,o?"rtl":"ltr"),f(n)),Rt(t)}))}return w&&(at(s,ee),p(h,Lt(s,qe,w,{C:!!tt}))),j(e,s),()=>{S(h),q(s)}},Ye=(t,e,n,o)=>{let r=!1;const{It:i,zt:a,At:l,Mt:c,Lt:d,Rt:u}=o||{},[_,g]=((t,e,n)=>{let o,r=!1;const i=i=>{if(n){v(n.reduce((e,n)=>{if(n){const o=n[0],r=n[1],a=r&&o&&(i?i(o):R(o,t));a&&a.length&&r&&s(r)&&p(e,[a,r.trim()],!0)}return e},[]),t=>v(t[0],n=>{const i=t[1],a=o.get(n);if(a){const t=a[0],e=a[1];t===i&&e()}const s=Lt(n,i,t=>{r?(s(),o.delete(n)):e(t)});o.set(n,[i,s])}))}};return n&&(o=new WeakMap,i()),[()=>{r=!0},i]})(t,ft(()=>{r&&n(!0)},{_:33,g:99}),l),f=a||[],h=(i||[]).concat(f),b=r=>{const i=d||gt,a=u||gt,l=[],_=[];let h=!1,b=!1,S=!1;v(r,n=>{const{attributeName:r,target:d,type:u,oldValue:g,addedNodes:v}=n,y="attributes"===u,m="childList"===u,x=t===d,C=y&&s(r)?O(d,r):0,$=0!==C&&g!==C,I=w(f,r)>-1&&$;if(e&&!x){const e=!y,s=y&&I,l=s&&c&&T(d,c),u=(l?!i(d,r,g,C):e||s)&&!a(n,!!l,t,o);p(_,v),b=b||u,S=S||m}!e&&x&&$&&!i(d,r,g,C)&&(p(l,r),h=h||I)}),S&&!y(_)&&g(t=>_.reduce((e,n)=>(p(e,R(t,n)),T(n,t)?p(e,n):e),[])),e?b&&n(!1):y(l)&&!h||n(l,h)},S=new Q(b);return S.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:h,subtree:e,childList:e,characterData:e}),r=!0,[()=>{r&&(_(),S.disconnect(),r=!1)},()=>{r&&b(S.takeRecords())}]},Ue=`[${Gt}]`,Je=`.${Ut}`,Ke=["tabindex"],Qe=["wrap","cols","rows"],Ze=["id","class","style","open"],tn=(e,n,o)=>{let r,i,l;const[,u]=n,{$:_,O:g,A:f,K:h,et:b,nt:y,ot:m}=e,{T:C,P:$}=xe(),[I]=t({s:lt,o:{w:0,h:0}},()=>{const t=y(Zt,Wt);t&&m(Zt,Wt);const e=$t(f),n=$t(g),o=Ot(g);return t&&m(Zt,Wt,!0),{w:n.w+e.w+o.w,h:n.h+e.h+o.h}}),A=h?Qe:Ze.concat(Qe),M=ft(o,{_:()=>r,g:()=>i,v(t,e){const[n]=t,[o]=e;return[x(n).concat(x(o)).reduce((t,e)=>(t[e]=n[e]||o[e],t),{})]}}),L=t=>{v(t||Ke,t=>{if(w(Ke,t)>-1){const e=O(_,t);s(e)?O(g,t,e):z(g,t)}})},R=({st:t,Ot:e,$t:n})=>{const r=!t||n?o:M;let i=!1;if(e){const[t,n]=e;i=n,u({ct:t})}r({st:t,dt:i})},T=t=>{const[,e]=I();e&&(t?o:M)({lt:!0})},D=(f||!$)&&((e,n)=>{const o=G(ae),r=[],[i]=t({o:!1}),a=t=>{if(t){const o=i(0===(e=t).h||e.isIntersecting||e.intersectionRatio>0),[,r]=o;r&&n(o)}var e};if(Z){const t=new Z(t=>{t&&t.length>0&&a(t.pop())},{root:e});t.observe(o),p(r,()=>{t.disconnect()})}else{const t=()=>{const t=xt(o);a(t)};p(r,Xe(o,t)),t()}return j(e,o),()=>{S(r),q(o)}})(_,t=>{const[e,n]=t;u({rt:e}),o({it:n})}),V=!b&&Xe(_,R,{$t:!0,Ct:!C}),[P]=Ye(_,!1,(t,e)=>{e?M({pt:!0}):b||L(t)},{zt:Ze,It:Ze.concat(Ke)}),B=b&&new tt(R.bind(0,{st:!0}));return B&&B.observe(_),L(),[t=>{const[e]=t("updating.ignoreMutation"),[n,o]=t("updating.attributes"),[s,u]=t("updating.elementEvents"),[_,h]=t("updating.debounce");if((u||o)&&(l&&(l[1](),l[0]()),l=Ye(f||g,!0,T,{zt:A.concat(n||[]),It:A.concat(n||[]),At:s,Mt:Ue,Rt:(t,n)=>{const{target:o,attributeName:r}=t;return!(n||!r)&&H(o,Ue,Je)||!!(t=>c(e)&&e(t))(t)}})),h)if(M.p(),d(_)){const t=_[0],e=_[1];r=!!a(t)&&t,i=!!a(e)&&e}else a(_)?(r=_,i=!1):(r=!1,i=!1)},()=>{l&&l[0](),D&&D(),V&&V(),B&&B.disconnect(),P()}]},en={I:{t:0,r:0,b:0,l:0},ut:!1,_t:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},bt:{x:0,y:0},vt:{x:"hidden",y:"hidden"},yt:{x:!1,y:!1},rt:!1,ct:!1},nn=(t,e)=>{const n=Bt(e,{}),o=Et(en),r=new Set,[i]=o,s=(t,e,n)=>{S(r,[t,e||{},!!n])},[l,c]=Ae(t),d=((t,e)=>{const{O:n}=t,{T:o,R:r,P:i}=xe(),s=!o&&(r.x||r.y),l=[Me(t,e),Le(t,e),je(t,e)];return(t,e,o)=>{const r=ke(C({st:!1,gt:!1,dt:!1,it:!1,xt:!1,St:!1,pt:!1,lt:!1},e),{},o),c=s||!i,d=c&&A(n),u=c&&M(n);let _=r;return v(l,e=>{_=ke(_,e(_,t,!!o)||{},o)}),a(d)&&A(n,d),a(u)&&M(n,u),_}})(l,o),[u,_]=tn(l,o,t=>{s(d(n,t))}),g=i.bind(0);return g.Tt=t=>{r.add(t)},g.Dt=l,[(t,n)=>{const o=Bt(e,t,n);u(o),s(d(o,{},n))},g,()=>{r.clear(),_(),c()}]},on=t=>{const e=G(`${se} ${t}`),n=G(de),o=G(ue);return E(e,n),E(n,o),{Vt:e,Pt:n,Ht:o}},rn=(t,e,n)=>{const o=Et({}),[r]=o,[i,a]=((t,e)=>{const{B:n}=xe(),{M:o}=n(),{N:r,$:i,O:a,tt:s}=e,l=!s&&t.scrollbarsSlot,d=(c(l)?l(r,i,a):l)||(c(o)?o(r,i,a):o)||i,u=on(le),_=on(ce),{Vt:g}=u,{Vt:f}=_;return E(d,g),E(d,f),[{Bt:u,Et:_},q.bind(0,[g,f])]})(t,n),s=r.bind(0);return s.Dt=i,[(t,n)=>{const o=Bt(e,t,n);console.log(o)},s,()=>{a()}]},an={},sn="__osOptionsValidationPlugin",ln=new Set,cn=new WeakMap,dn=(t,e,n)=>{const{k:o,R:r,H:i}=xe(),a=C({},an),s=f(t)?t:t.target,l=(t=>cn.get(t))(s);if(l)return l;const d=a[sn],u=t=>{const e=t||{},n=d&&d.jt;return n?n(e,!0):e},_=C({},o(),u(e)),[g,h,w]=Pt(n);r.x&&r.y&&!_.nativeScrollbarsOverlaid.initialize&&w("initializationWithdrawn");const[p,b,y]=nn(t,_),[S,,m]=rn(t,_,b.Dt),$=(t,e)=>{p(t,e),S(t,e)},O=i($.bind(0,{},!0));b.Tt((t,e,n)=>{const{st:o,dt:r,it:i,xt:a,St:s,lt:l,pt:c}=t;w("updated",{updateHints:{sizeChanged:o,directionChanged:r,heightIntrinsicChanged:i,overflowAmountChanged:a,overflowStyleChanged:s,contentMutation:l,hostMutation:c},changedOptions:e,force:n})});const I={options(t){if(t){const e=fe(_,u(t));(function(t){for(const e in t)return!1;return!0})(e)||(C(_,e),$(e))}return C({},_)},on:g,off:h,state(){const{bt:t,vt:e,yt:n,I:o,ut:r}=b();return C({},{overflowAmount:t,overflowStyle:e,hasOverflow:n,padding:o,paddingAbsolute:r})},elements(){const{N:t,$:e,I:n,O:o,A:r}=b.Dt;return C({},{target:t,host:e,padding:n||o,viewport:o,content:r||o})},update(t){$({},t)},destroy:()=>{(t=>{cn.delete(t),ln.delete(t)})(s),O(),h(),m(),y(),w("destroyed")}};return v(x(a),t=>{const e=a[t];c(e)&&e(dn,I)}),I.update(!0),((t,e)=>{cn.set(t,e),ln.add(t)})(s,I),w("initialized"),I};dn.plugin=t=>v(d(t)?t:[t],t=>{an[t[0]]=t[1]}),dn.env=()=>{const{L:t,R:e,T:n,V:o,P:r,D:i,G:a,F:s,B:l,j:c,k:d,q:u}=xe();return C({},{scrollbarSize:t,scrollbarIsOverlaid:e,scrollbarStyling:n,rtlScrollBehavior:o,flexboxGlue:r,cssCustomProperties:i,defaultInitializationStrategy:a,defaultDefaultOptions:s,getInitializationStrategy:l,setInitializationStrategy:c,getDefaultOptions:d,setDefaultOptions:u})};export{dn as default}; \ No newline at end of file +function t(t,e){const{o:n,u:o,_:r}=t;let i,s=n;const c=(t,e)=>{const n=s,c=t,l=e||(o?!o(n,c):n!==c);return(l||r)&&(s=c,i=n),[s,l,i]};return[e?t=>c(e(s,i),t):c,t=>[s,!!t,i]]}function e(t){return void 0===t}function n(t){return null===t}function o(t){return"number"==typeof t}function r(t){return"string"==typeof t}function i(t){return"boolean"==typeof t}function s(t){return"function"==typeof t}function c(t){return Array.isArray(t)}function l(t){return"object"==typeof t&&!c(t)&&!n(t)}function a(t){const e=!!t&&t.length,n=o(e)&&e>-1&&e%1==0;return!(!(c(t)||!s(t)&&n)||e>0&&l(t)&&!(e-1 in t))}function d(t){if(!t||!l(t)||"object"!==S(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 u(t){const e=window.HTMLElement;return!!t&&(e?t instanceof e:t.nodeType===m)}function f(t){const e=window.Element;return!!t&&(e?t instanceof e:t.nodeType===m)}function h(t,e){if(a(t))for(let n=0;ne(t[n],n,t)));return t}function p(t,e,o,r,i,l,a){const u=[e,o,r,i,l,a];return"object"==typeof t&&!n(t)||s(t)||(t={}),h(u,(e=>{h(R(e),(n=>{const o=e[n];if(t===o)return!0;const r=c(o);if(o&&(d(o)||r)){const e=t[n];let i=e;r&&!c(e)?i=[]:r||d(e)||(i={}),t[n]=p(i,o)}else t[n]=o}))})),t}function w(t,n,o,r){if(e(r))return o?o[t]:n;o&&(o[t]=r)}function g(t,n,o){if(e(o))return t?t.getAttribute(n):null;t&&t.setAttribute(n,o)}function y(t,e){return w("scrollLeft",0,t,e)}function b(t,e){return w("scrollTop",0,t,e)}function v(t,e){const n=r(e);if(c(e)||n){let o=n?"":{};if(t){const r=window.getComputedStyle(t,null);o=n?bt(t,r,e):e.reduce(((e,n)=>(e[n]=bt(t,r,n),e)),o)}return o}h(R(e),(n=>vt(t,n,e[n])))}const m=Node.ELEMENT_NODE,{toString:x,hasOwnProperty:$}=Object.prototype,S=t=>e(t)||n(t)?`${t}`:x.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase(),O=(t,e,n)=>t.indexOf(e,n),A=(t,e,n)=>(n||r(e)||!a(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=>{A(e,t)})):h(t,(t=>{A(e,t)})),e},M=t=>!!t&&0===t.length,C=(t,e)=>{const n=t=>t&&t.apply(void 0,e||[]);t instanceof Set?t.forEach(n):h(t,n)},E=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),R=t=>t?Object.keys(t):[],T=(t,e,n,o)=>{const r=g(t,e)||"",i=new Set(r.split(" "));i[o?"add":"delete"](n),g(t,e,L(i).join(" ").trim())},z=(t,e)=>{t&&t.removeAttribute(e)},I=Element.prototype,P=(t,e)=>{const n=[],o=e?f(e)?e:null:document;return o?A(n,o.querySelectorAll(t)):n},B=(t,e)=>!!f(t)&&(I.matches||I.msMatchesSelector).call(t,e),N=t=>t?L(t.childNodes):[],j=t=>t?t.parentElement:null,D=(t,e)=>{if(f(t)){const n=I.closest;if(n)return n.call(t,e);do{if(B(t,e))return t;t=j(t)}while(t)}return null},V=(t,e,n)=>{if(n){let o,r=e;t&&(a(n)?(o=document.createDocumentFragment(),h(n,(t=>{t===r&&(r=t.previousSibling),o.appendChild(t)}))):o=n,e&&(r?r!==e&&(r=r.nextSibling):r=t.firstChild),t.insertBefore(o,r||null))}},k=(t,e)=>{V(t,null,e)},H=(t,e)=>{V(t,t&&t.firstChild,e)},F=(t,e)=>{V(j(t),t&&t.nextSibling,e)},U=t=>{if(a(t))h(L(t),(t=>U(t)));else if(t){const e=j(t);e&&e.removeChild(t)}},Y=t=>{const e=document.createElement("div");return t&&g(e,"class",t),e},_=t=>{const e=Y();return e.innerHTML=t.trim(),h(N(e),(t=>U(t)))},W=t=>t.charAt(0).toUpperCase()+t.slice(1),X=["-webkit-","-moz-","-o-","-ms-"],q=["WebKit","Moz","O","MS","webkit","moz","o","ms"],K={},G={},J=t=>{let e=G[t];if(E(G,t))return e;const n=W(t),o=Y().style;return h(X,(r=>{const i=r.replace(/-/g,""),s=[t,r+t,i+n,W(i)+n];return!(e=s.find((t=>void 0!==o[t])))})),G[t]=e||""},Z=t=>{let e=K[t]||window[t];return E(K,t)||(h(q,(n=>(e=e||window[n+W(t)],!e))),K[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)))},ct=(t,e)=>(it(t,e,((t,e)=>t.add(e))),st.bind(0,t,e)),lt=(t,e,n,o)=>{if(t&&e){let r=!0;return h(n,(n=>{(o?o(t[n]):t[n])!==(o?o(e[n]):e[n])&&(r=!1)})),r}return!1},at=(t,e)=>lt(t,e,["w","h"]),dt=(t,e)=>lt(t,e,["x","y"]),ut=(t,e)=>lt(t,e,["t","r","b","l"]),ft=(t,e,n)=>lt(t,e,["width","height"],n&&(t=>Math.round(t))),ht=t=>{t&&window.clearTimeout(t),t&&nt(t)},pt=()=>{},wt=(t,e)=>{let n,r,i,c;const{g:l,p:a,v:d}=e||{},u=window.setTimeout,f=function(e){ht(n),ht(r),r=n=i=void 0,t.apply(this,e)},h=t=>d&&i?d(i,t):t,p=()=>{n&&f(h(c)||c)},w=function(){const t=L(arguments),e=s(l)?l():l,d=o(e)&&e>=0;if(d){const l=s(a)?a():a,d=o(l)&&l>=0,w=e>0?u:ot,g=h(t)||t,y=f.bind(0,g);ht(n),n=w(y,e),d&&!r&&(r=u(p,l)),i=c=g}else f(t)};return w.m=p,w},gt={opacity:1,zindex:1},yt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},bt=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],vt=(t,n,r)=>{try{if(t){const{style:i}=t;e(i[n])?i.setProperty(n,r):i[n]=((t,e)=>!gt[t.toLowerCase()]&&o(e)?`${e}px`:e)(n,r)}}catch(I){}},mt=(t,e,n)=>{const o=e?`${e}-`:"",r=n?`-${n}`:"",i=`${o}top${r}`,s=`${o}right${r}`,c=`${o}bottom${r}`,l=`${o}left${r}`,a=v(t,[i,s,c,l]);return{t:yt(a[i]),r:yt(a[s]),b:yt(a[c]),l:yt(a[l])}},xt={w:0,h:0},$t=()=>({w:window.innerWidth,h:window.innerHeight}),St=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:xt,Ot=t=>t?{w:t.clientWidth,h:t.clientHeight}:xt,At=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:xt,Lt=t=>{const e=parseFloat(v(t,"height"))||0,n=parseFloat(v(t,"height"))||0;return{w:n-Math.round(n),h:e-Math.round(e)}},Mt=t=>t.getBoundingClientRect();let Ct;const Et=t=>t.split(" "),Rt=(t,e,n,o)=>{h(Et(e),(e=>{t.removeEventListener(e,n,o)}))},Tt=(t,n,o,r)=>{const i=(()=>{if(e(Ct)){Ct=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){Ct=!0}}))}catch(t){}}return Ct})(),s=i&&r&&r.S||!1,c=r&&r.C||!1,l=r&&r.O||!1,a=[],d=i?{passive:s,capture:c}:c;return h(Et(n),(e=>{const n=l?r=>{t.removeEventListener(e,n,c),o&&o(r)}:o;A(a,Rt.bind(null,t,e,n,c)),t.addEventListener(e,n,d)})),C.bind(0,a)},zt=t=>(t=>t.stopPropagation())(t)||(t=>t.preventDefault())(t),It={x:0,y:0},Pt=t=>{const e=t?Mt(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:It},Bt=(t,e)=>{h(c(e)?e:[e],t)},Nt=t=>{function e(t,e){if(t){const n=o.get(t);Bt((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),Bt((t=>{t&&r.add(t)}),n),e.bind(0,t,n)}const o=new Map;return h(R(t),(e=>{n(e,t[e])})),[n,e,function(t,...e){const n=o.get(t);h(L(n),(t=>{e?t(e):t()}))}]},jt=(t,e)=>t?e.split(".").reduce(((t,e)=>t&&E(t,e)?t[e]:void 0),t):void 0,Dt=(t,e,n)=>o=>[jt(t,o),n||void 0!==jt(e,o)],Vt=t=>{let e=t;return[()=>e,t=>{e=p({},e,t)}]},kt="os-environment",Ht=`${kt}-flexbox-glue`,Ft=`${Ht}-max`,Ut="data-overlayscrollbars",Yt=`${Ut}-overflow-x`,_t=`${Ut}-overflow-y`,Wt="overflowVisible",Xt="viewportStyled",qt="os-padding",Kt="os-viewport",Gt=`${Kt}-arrange`,Jt="os-content",Zt=`${Kt}-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",ce="os-scrollbar",le=`${ce}-horizontal`,ae=`${ce}-vertical`,de="os-scrollbar-track",ue="os-scrollbar-handle",fe=t=>JSON.stringify(t,((t,e)=>{if(s(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 h(R(e).concat(R(t)),(o=>{const r=t[o],i=e[o];if(l(r)&&l(i))p(n[o]={},pe(r,i));else if(E(e,o)&&i!==r){let t=!0;if(c(r)||c(i))try{fe(r)===fe(i)&&(t=!1)}catch(K){}t&&(n[o]=i)}})),n};let we;const{abs:ge,round:ye}=Math,be=(t,e,n)=>{k(t,e);const o=Ot(e),r=St(e),i=Lt(n);return{x:r.h-o.h+i.h,y:r.w-o.w+i.w}},ve=(t,e)=>{const n="hidden";v(t,{overflowX:n,overflowY:n,direction:"rtl"}),y(t,0);const o=Pt(t),r=Pt(e);y(t,-999);const i=Pt(e);return{i:o.x===r.x,n:r.x!==i.x}},me=(t,e)=>{const n=ct(t,Ht),o=Mt(t),r=Mt(e),i=ft(r,o,!0),s=ct(t,Ft),c=Mt(t),l=Mt(e),a=ft(l,c,!0);return n(),s(),i&&a},xe=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},$e=()=>(we||(we=(()=>{const{body:e}=document,n=_(`
`)[0],o=n.firstChild,[r,,i]=Nt(),[s,c]=t({o:be(e,n,o),u:dt}),[l]=c(),a=(t=>{let e=!1;const n=ct(t,Zt);try{e="none"===v(t,J("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(o){}return n(),e})(n),d={x:0===l.x,y:0===l.y},u=(t=>({A:!t,$:!1}))(a),f=p({},he),h={L:l,I:d,T:a,D:"-1"===v(n,"zIndex"),P:ve(n,o),M:me(n,o),j:t=>r("_",t),N:p.bind(0,{},u),R(t){p(u,t)},F:p.bind(0,{},f),H(t){p(f,t)},k:p({},u),B:p({},f)};if(z(n,"style"),U(n),!(a||d.x&&d.y)){let t=$t(),r=xe();window.addEventListener("resize",(()=>{const c=$t(),l={w:c.w-t.w,h:c.h-t.h};if(0===l.w&&0===l.h)return;const a=ge(l.w),d=ge(l.h),u={w:ge(ye(c.w/(t.w/100))),h:ge(ye(c.h/(t.h/100)))},f=xe(),h=a>2&&d>2,w=!((t,e)=>{const n=ge(t),o=ge(e);return!(n===o||n+1===o||n-1===o)})(u.w,u.h);if(h&&w&&f!==r&&r>0){const[t,r]=s(be(e,n,o));p(we.L,t),U(n),r&&i("_")}t=c,r=f}))}return h})()),we),Se=(t,e,n,o)=>{const r=o||(s(n)?n.apply(0,t):n);return(s(r)?r.apply(0,t):r)||e.apply(0,t)},Oe=(t,o,r,c)=>{const l=i(c)||c?c:s(r)?r.apply(0,t):r;return!0===l||n(l)||e(l)||s(l)?o.apply(0,t):l};let Ae=0;const Le=Y.bind(0,""),Me=t=>{k(j(t),N(t)),U(t)},Ce=()=>{const{T:t,I:e,D:n}=$e(),o=!(n||t||!e.x&&!e.y)&&document.createElement("style");return o&&(g(o,"id",`${Gt}-${Ae}`),Ae++),o},Ee=t=>{const{N:e,T:n}=$e(),{V:o,U:r,A:i,$:s}=e(),c=u(t),l=t,a=c?t:l.target,d=B(a,"textarea"),f=!d&&B(a,"body"),h=a.ownerDocument,p=h.body,w=h.defaultView,y=!!et&&n,b=Se.bind(0,[a]),v=Oe.bind(0,[a]),m=b(Le,r,l.viewport),x=m===a,$=y&&x,S=x&&!$?b(Le):m,L={Y:a,V:d?b(Le,o,l.host):a,U:S,A:v(Le,i,l.padding),$:v(Le,s,l.content),q:!$&&Ce(),G:w,W:h,X:j(p),J:p,K:d,Z:f,tt:c,nt:$,ot:(t,e)=>$?((t,e,n)=>{const o=g(t,Ut)||"";return new Set(o.split(" ")).has(n)})(S,0,e):((t,e)=>it(t,e,((t,e)=>t.contains(e))))(S,t),et:(t,e,n)=>$?T(S,Ut,e,n):(n?ct:st)(S,t)},M=R(L).reduce(((t,e)=>{const n=L[e];return A(t,!(!n||j(n))&&n)}),[]),E=t=>t?O(M,t)>-1:null,{Y:I,V:P,A:D,U:H,$:Y,q:_}=L,W=[],X=d&&E(P),q=d?I:N([Y,H,D,P,I].find((t=>!1===E(t)))),K=Y||H,G=((t,e)=>(g(t,Ut,e||""),z.bind(0,t,Ut)))(P,$?"viewport":"host"),J=ct(D,qt),Z=ct(H,!$&&Kt),Q=ct(Y,Jt);return X&&(F(I,P),A(W,(()=>{F(P,I),U(P)}))),k(K,q),k(P,D),k(D||P,!$&&H),k(H,Y),A(W,(()=>{G(),z(H,Yt),z(H,_t),E(Y)&&Me(Y),E(H)&&Me(H),E(D)&&Me(D),J(),Z(),Q()})),n&&!$&&A(W,st.bind(0,H,Zt)),_&&(((t,e)=>{V(j(t),t,e)})(H,_),A(W,U.bind(0,_))),[L,C.bind(0,W)]},Re=(t,e)=>{const{$:n}=t,[o]=e;return t=>{const{M:e}=$e(),{st:r}=o(),{ct:i}=t,s=(n||!e)&&i;return s&&v(n,{height:r?"":"100%"}),{it:s,rt:s}}},Te=(e,n)=>{const[o,r]=n,{V:i,A:s,U:c,nt:l}=e,[a,d]=t({u:ut,o:mt()},mt.bind(0,i,"padding",""));return(t,e,n)=>{let[i,u]=d(n);const{T:f,M:h}=$e(),{lt:w}=o(),{it:g,rt:y,ut:b}=t,[m,x]=e("paddingAbsolute");(g||u||!h&&y)&&([i,u]=a(n));const $=!l&&(x||b||u);if($){const t=!m||!s&&!f,e=i.r+i.l,n=i.t+i.b,o={marginRight:t&&!w?-e:0,marginBottom:t?-n:0,marginLeft:t&&w?-e:0,top:t?-i.t:0,right:t?w?-i.r:"auto":0,left:t?w?"auto":-i.l:0,width:t?`calc(100% + ${e}px)`:""},l={paddingTop:t?i.t:0,paddingRight:t?i.r:0,paddingBottom:t?i.b:0,paddingLeft:t?i.l:0};v(s||c,o),v(c,l),r({A:i,ft:!t,dt:s?l:p({},o,l)})}return{_t:$}}},{max:ze}=Math,Ie="visible",Pe="hidden",Be=42,Ne={u:at,o:{w:0,h:0}},je={u:dt,o:{x:Pe,y:Pe}},De=(t,e,n)=>n?ct(t,e):st(t,e),Ve=t=>0===t.indexOf(Ie),ke=(e,n)=>{const[o,r]=n,{V:i,A:s,U:c,q:l,nt:a,et:d}=e,{L:u,M:f,T:p,I:w}=$e(),y=!a&&!p&&(w.x||w.y),[b,m]=t(Ne,Lt.bind(0,c)),[x,$]=t(Ne,At.bind(0,c)),[S,O]=t(Ne),[A]=t(je),L=(t,e)=>{if(v(c,{height:""}),e){const{ft:e,A:n}=o(),{gt:r,ht:s}=t,l=Lt(i),a=Ot(i),d="content-box"===v(c,"boxSizing"),u=e||d?n.b+n.t:0,f=!(w.x&&d);v(c,{height:a.h+l.h+(r.x&&f?s.x:0)-u})}},M=(t,e)=>{const n=p||t?0:Be,o=(t,o,r)=>{const i=v(c,t),s="scroll"===(e?e[t]:i);return[i,s,s&&!p?o?n:r:0,o&&!!n]},[r,i,s,l]=o("overflowX",w.x,u.x),[a,d,f,h]=o("overflowY",w.y,u.y);return{vt:{x:r,y:a},gt:{x:i,y:d},ht:{x:s,y:f},wt:{x:l,y:h}}},C=(t,e,n,o)=>{const r=(t,e)=>{const n=Ve(t),o=e&&n&&t.replace(`${Ie}-`,"")||"";return[e&&!n?t:"",Ve(o)?"hidden":o]},[i,s]=r(n.x,e.x),[c,l]=r(n.y,e.y);return o.overflowX=s&&c?s:i,o.overflowY=l&&i?l:c,M(t,o)},E=(t,e,n,r)=>{if(y){const{dt:i}=o(),{ht:s,wt:a}=t,{x:d,y:u}=a,{x:f,y:h}=s,p=i[r?"paddingRight":"paddingLeft"],w=i.paddingTop,y=e.w+n.w,b=e.h+n.h,m={w:h&&u?`${h+y-p}px`:"",h:f&&d?`${f+b-w}px`:""};if(l){const{sheet:t}=l;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${g(l,"id")} + .${Gt}::before {}`,0);const n=e[0].style;n.width=m.w,n.height=m.h}}}else v(c,{"--os-vaw":m.w,"--os-vah":m.h})}return y},z=(t,e,n,r)=>{const{ht:i,wt:s}=t,{x:c,y:l}=s,{x:a,y:d}=i,{dt:u}=o(),f=e?"marginLeft":"marginRight",h=e?"paddingLeft":"paddingRight",p=u[f],w=u.marginBottom,g=u[h],y=u.paddingBottom;r.width=`calc(100% + ${d+-1*p}px)`,r[f]=-d+p,r.marginBottom=-a+w,n&&(r[h]=g+(l?d:0),r.paddingBottom=y+(c?a:0))},I=(t,e,n)=>{if(y){const r=n||M(t),{dt:i}=o(),{wt:s}=r,{x:l,y:a}=s,d={},u=t=>h(t.split(" "),(t=>{d[t]=i[t]}));l&&u("marginBottom paddingTop paddingBottom"),a&&u("marginLeft marginRight paddingLeft paddingRight");const p=v(c,R(d));return st(c,Gt),f||(d.height=""),v(c,d),[()=>{z(r,e,y,p),v(c,p),ct(c,Gt)},r]}return[pt]};return(t,e,n)=>{const{it:l,bt:u,rt:h,_t:y,ct:R,ut:P}=t,{st:B,lt:N}=o(),[j,D]=e("nativeScrollbarsOverlaid.show"),[V,k]=e("overflow"),H=j&&w.x&&w.y,F=!a&&!f&&(l||h||u||D||R),U=Ve(V.x),Y=Ve(V.y),_=U||Y;let W,X=m(n),q=$(n),K=O(n);if(D&&p&&d(Zt,Xt,!H),F&&(W=M(H),L(W,B)),l||y||h||P||D){_&&d(Qt,Wt,!1);const[t,e]=I(H,N,W),[o,r]=X=b(n),[i,s]=q=x(n),l=Ot(c);let a=i,u=l;t(),(s||r||D)&&e&&!H&&E(e,i,o,N)&&(u=Ot(c),a=At(c)),K=S(((t,e,n)=>{const o=window.devicePixelRatio%1!=0?1:0,r={w:ze(0,t.w-e.w-ze(0,n.w)),h:ze(0,t.h-e.h-ze(0,n.h))};return{w:r.w>o?r.w:0,h:r.h>o?r.h:0}})({w:ze(i.w,a.w),h:ze(i.h,a.h)},{w:u.w+ze(0,l.w-i.w),h:u.h+ze(0,l.h-i.h)},o),n)}const[G,J]=K,[Z,Q]=q,[tt,et]=X,nt={x:G.w>0,y:G.h>0},ot=U&&Y&&(nt.x||nt.y)||U&&nt.x&&!nt.y||Y&&nt.y&&!nt.x;if(y||P||et||Q||J||k||D||F){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},e=C(H,nt,V,t),n=E(e,Z,tt,N);a||z(e,N,n,t),F&&L(e,B),a?(g(i,Yt,t.overflowX),g(i,_t,t.overflowY)):v(c,t)}T(i,Ut,Wt,ot),De(s,Qt,ot),!a&&De(c,Qt,_);const[rt,it]=A(M(H).vt);return r({vt:rt,yt:{x:G.w,y:G.h},St:nt}),{Ct:it,xt:J}}},He=(t,e,n)=>{const o={},r=e||{};return h(R(t).concat(R(r)),(e=>{const i=t[e],s=r[e];o[e]=!!(n||i||s)})),o},Fe="animationstart",Ue="scroll",Ye=3333333,_e=t=>"rtl"===v(t,"direction"),We=t=>t&&(t.height||t.width),Xe=(e,n,o)=>{const{Ot:r=!1,At:s=!1}=o||{},{P:a}=$e(),d=_(`
`)[0],u=d.firstChild,f=_e.bind(0,d),[h]=t({o:void 0,_:!0,u:(t,e)=>!(!t||!We(t)&&We(e))}),p=t=>{const e=c(t)&&t.length>0&&l(t[0]),o=!e&&i(t[0]);let s=!1,u=!1,f=!0;if(e){const[e,,n]=h(t.pop().contentRect),o=We(e),r=We(n);s=!n||!o,u=!r&&o,f=!s}else o?[,f]=t:u=!0===t;if(r&&f){const e=o?t[0]:_e(d);y(d,e?a.n?-Ye:a.i?0:Ye:Ye),b(d,Ye)}s||n({it:!o,$t:o?t:void 0,At:!!u})},w=[];let g,m=!!s&&p;if(et){const t=new et(p);t.observe(u),A(w,(()=>{t.disconnect()}))}else{const t=_(`
`);k(u,t),ct(u,oe);const e=t[0],n=e.lastChild,o=e.firstChild,r=null==o?void 0:o.firstChild;let i,c=St(e),l=c,a=!1;const d=()=>{y(o,Ye),b(o,Ye),y(n,Ye),b(n,Ye)},f=t=>{i=0,a&&(c=l,p(!0===t))},h=t=>{l=St(e),a=!t||!at(l,c),t?(zt(t),a&&!i&&(nt(i),i=ot(f))):f(!1===t),d()};A(w,[Tt(o,Ue,h),Tt(n,Ue,h)]),v(r,{width:Ye,height:Ye}),d(),m=s?h.bind(0,!1):d}if(r){g=t({o:!f()},f);const[e]=g;A(w,Tt(d,Ue,(t=>{const n=e(),[o,r]=n;r&&(st(u,"ltr rtl"),ct(u,o?"rtl":"ltr"),p(n)),zt(t)})))}return m&&(ct(d,ee),A(w,Tt(d,Fe,m,{O:!!et}))),H(e,d),()=>{C(w),U(d)}},qe=(e,n)=>{const o=Y(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),A(r,(()=>{t.disconnect()}))}else{const t=()=>{const t=St(o);s(t)};A(r,Xe(o,t)),t()}return H(e,o),()=>{C(r),U(o)}},Ke=(t,e,n,o)=>{let i=!1;const{Lt:s,It:c,Tt:l,zt:a,Dt:d,Et:u}=o||{},[f,p]=((t,e,n)=>{let o,i=!1;const s=s=>{if(n){const c=n.reduce(((e,n)=>{if(n){const o=n[0],i=n[1],c=i&&o&&(s?s(o):P(o,t));c&&c.length&&i&&r(i)&&A(e,[c,i.trim()],!0)}return e}),[]);h(c,(t=>h(t[0],(n=>{const r=t[1],s=o.get(n);if(s){const t=s[0],e=s[1];t===r&&e()}const c=Tt(n,r,(t=>{i?(c(),o.delete(n)):e(t)}));o.set(n,[r,c])}))))}};return n&&(o=new WeakMap,s()),[()=>{i=!0},s]})(t,wt((()=>{i&&n(!0)}),{g:33,p:99}),l),w=c||[],y=(s||[]).concat(w),b=i=>{const s=d||pt,c=u||pt,l=[],f=[];let y=!1,b=!1,v=!1;h(i,(n=>{const{attributeName:i,target:d,type:u,oldValue:h,addedNodes:p}=n,m="attributes"===u,x="childList"===u,$=t===d,S=m&&r(i)?g(d,i):0,L=0!==S&&h!==S,M=O(w,i)>-1&&L;if(e&&!$){const e=!m,r=m&&M,l=r&&a&&B(d,a),u=(l?!s(d,i,h,S):e||r)&&!c(n,!!l,t,o);A(f,p),b=b||u,v=v||x}!e&&$&&L&&!s(d,i,h,S)&&(A(l,i),y=y||M)})),v&&!M(f)&&p((t=>f.reduce(((e,n)=>(A(e,P(t,n)),B(n,t)?A(e,n):e)),[]))),e?b&&n(!1):M(l)&&!y||n(l,y)},v=new Q(b);return v.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:e,childList:e,characterData:e}),i=!0,[()=>{i&&(f(),v.disconnect(),i=!1)},()=>{i&&b(v.takeRecords())}]},Ge=`[${Ut}]`,Je=`.${Kt}`,Ze=["tabindex"],Qe=["wrap","cols","rows"],tn=["id","class","style","open"],en=(e,n,i)=>{let l,a,d;const[,u]=n,{V:p,U:w,$:y,K:b,nt:v,ot:m,et:x}=e,{T:$,M:S}=$e(),[A]=t({u:at,o:{w:0,h:0}},(()=>{const t=m(Qt,Wt);t&&x(Qt,Wt);const e=At(y),n=At(w),o=Lt(w);return t&&x(Qt,Wt,!0),{w:n.w+e.w+o.w,h:n.h+e.h+o.h}})),L=b?Qe:tn.concat(Qe),M=wt(i,{g:()=>l,p:()=>a,v(t,e){const[n]=t,[o]=e;return[R(n).concat(R(o)).reduce(((t,e)=>(t[e]=n[e]||o[e],t)),{})]}}),C=t=>{h(t||Ze,(t=>{if(O(Ze,t)>-1){const e=g(p,t);r(e)?g(w,t,e):z(w,t)}}))},E=({it:t,$t:e,At:n})=>{const o=!t||n?i:M;let r=!1;if(e){const[t,n]=e;r=n,u({lt:t})}o({it:t,ut:r})},T=t=>{const[,e]=A();e&&(t?i:M)({rt:!0})},I=(y||!S)&&qe(p,(t=>{const[e,n]=t;u({st:e}),i({ct:n})})),P=!v&&Xe(p,E,{At:!0,Ot:!$}),[B]=Ke(p,!1,((t,e)=>{e?M({bt:!0}):v||C(t)}),{It:tn,Lt:tn.concat(Ze)}),N=v&&new et(E.bind(0,{it:!0}));return N&&N.observe(p),C(),[t=>{const[e]=t("updating.ignoreMutation"),[n,r]=t("updating.attributes"),[i,u]=t("updating.elementEvents"),[h,p]=t("updating.debounce"),g=t=>s(e)&&e(t);if((u||r)&&(d&&(d[1](),d[0]()),d=Ke(y||w,!0,T,{It:L.concat(n||[]),Lt:L.concat(n||[]),Tt:i,zt:Ge,Et:(t,e)=>{const{target:n,attributeName:o}=t;return!(e||!o)&&((t,e,n)=>{const o=t&&D(t,e),r=t&&((t,e)=>{const n=e?f(e)?e:null:document;return n?n.querySelector(t):null})(n,o);return!(!o||!r||o!==t&&r!==t&&D(D(t,n),e)===o)})(n,Ge,Je)||!!g(t)}})),p)if(M.m(),c(h)){const t=h[0],e=h[1];l=!!o(t)&&t,a=!!o(e)&&e}else o(h)?(l=h,a=!1):(l=!1,a=!1)},()=>{d&&d[0](),I&&I(),P&&P(),N&&N.disconnect(),B()}]},nn={A:{t:0,r:0,b:0,l:0},ft:!1,dt:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},yt:{x:0,y:0},vt:{x:"hidden",y:"hidden"},St:{x:!1,y:!1},st:!1,lt:!1},on=t=>{const e=Y(`${ce} ${t}`),n=Y(de),o=Y(ue);return k(e,n),k(n,o),{jt:e,Nt:n,Rt:o}},rn={},sn="__osOptionsValidationPlugin",cn=new Set,ln=new WeakMap,an=(t,e,n)=>{const{F:r,I:i,j:c}=$e(),l=p({},rn),a=u(t)?t:t.target,d=(t=>ln.get(t))(a);if(d)return d;const f=l[sn],w=t=>{const e=t||{},n=f&&f.Bt;return n?n(e,!0):e},g=p({},r(),w(e)),[v,m,x]=Nt(n);i.x&&i.y&&!g.nativeScrollbarsOverlaid.initialize&&x("initializationWithdrawn");const[$,S,O]=((t,e)=>{const n=Dt(e,{}),r=Vt(nn),i=new Set,[s]=r,c=(t,e,n)=>{C(i,[t,e||{},!!n])},[l,a]=Ee(t),d=((t,e)=>{const{U:n}=t,{T:r,I:i,M:s}=$e(),c=!r&&(i.x||i.y),l=[Re(t,e),Te(t,e),ke(t,e)];return(t,e,r)=>{const i=He(p({it:!1,_t:!1,ut:!1,ct:!1,xt:!1,Ct:!1,bt:!1,rt:!1},e),{},r),a=c||!s,d=a&&y(n),u=a&&b(n);let f=i;return h(l,(e=>{f=He(f,e(f,t,!!r)||{},r)})),o(d)&&y(n,d),o(u)&&b(n,u),f}})(l,r),[u,f]=en(l,r,(t=>{c(d(n,t))})),w=s.bind(0);return w.Pt=t=>{i.add(t)},w.Mt=l,[(t,n)=>{const o=Dt(e,t,n);u(o),c(d(o,{},n))},w,()=>{i.clear(),f(),a()}]})(t,g),[A,,L]=((t,e,n)=>{const o=Vt({}),[r]=o,[i,s]=((t,e)=>{const{N:n}=$e(),{Ft:o}=n(),{Y:r,V:i,U:s,tt:c}=e,l=!c&&t.scrollbarsSlot,a=Oe([r,i,s],(()=>i),o,l),d=on(le),u=on(ae),{jt:f}=d,{jt:h}=u;return k(a,f),k(a,h),[{Ht:d,kt:u},U.bind(0,[f,h])]})(t,n),c=r.bind(0);return c.Mt=i,[(t,n)=>{const o=Dt(e,t,n);console.log(o)},c,()=>{s()}]})(t,g,S.Mt),M=(t,e)=>{$(t,e),A(t,e)},E=c(M.bind(0,{},!0));S.Pt(((t,e,n)=>{const{it:o,ut:r,ct:i,xt:s,Ct:c,rt:l,bt:a}=t;x("updated",{updateHints:{sizeChanged:o,directionChanged:r,heightIntrinsicChanged:i,overflowAmountChanged:s,overflowStyleChanged:c,contentMutation:l,hostMutation:a},changedOptions:e,force:n})}));const T={options(t){if(t){const e=pe(g,w(t));(function(t){for(const e in t)return!1;return!0})(e)||(p(g,e),M(e))}return p({},g)},on:v,off:m,state(){const{yt:t,vt:e,St:n,A:o,ft:r}=S();return p({},{overflowAmount:t,overflowStyle:e,hasOverflow:n,padding:o,paddingAbsolute:r})},elements(){const{Y:t,V:e,A:n,U:o,$:r}=S.Mt;return p({},{target:t,host:e,padding:n||o,viewport:o,content:r||o})},update(t){M({},t)},destroy:()=>{(t=>{ln.delete(t),cn.delete(t)})(a),E(),m(),L(),O(),x("destroyed")}};return h(R(l),(t=>{const e=l[t];s(e)&&e(an,T)})),T.update(!0),((t,e)=>{ln.set(t,e),cn.add(t)})(a,T),x("initialized"),T};an.plugin=t=>h(c(t)?t:[t],(t=>{rn[t[0]]=t[1]})),an.env=()=>{const{L:t,I:e,T:n,P:o,M:r,D:i,k:s,B:c,N:l,R:a,F:d,H:u}=$e();return p({},{scrollbarSize:t,scrollbarIsOverlaid:e,scrollbarStyling:n,rtlScrollBehavior:o,flexboxGlue:r,cssCustomProperties:i,defaultInitializationStrategy:s,defaultDefaultOptions:c,getInitializationStrategy:l,setInitializationStrategy:a,getDefaultOptions:d,setDefaultOptions:u})};export{an as default}; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index d31c819..00dd4bc 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -1,2171 +1,2179 @@ -function createCache(options, update) { - const { _initialValue, _equal, _alwaysUpdateValues } = options; - let _value = _initialValue; - let _previous; - const cacheUpdateContextual = (newValue, force) => { - const curr = _value; - const newVal = newValue; - const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal); - if (changed || _alwaysUpdateValues) { - _value = newVal; - _previous = curr; - } - return [_value, changed, _previous]; - }; - const cacheUpdateIsolated = (force) => cacheUpdateContextual(update(_value, _previous), force); - const getCurrentCache = (force) => [ - _value, - !!force, - _previous - ]; - return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache]; -} - -const ElementNodeType = Node.ELEMENT_NODE; -const { toString, hasOwnProperty: hasOwnProperty$1 } = Object.prototype; -function isUndefined(obj) { - return obj === void 0; -} -function isNull(obj) { - return obj === null; -} -const type = (obj) => isUndefined(obj) || isNull(obj) ? `${obj}` : toString.call(obj).replace(/^\[object (.+)\]$/, "$1").toLowerCase(); -function isNumber(obj) { - return typeof obj === "number"; -} -function isString(obj) { - return typeof obj === "string"; -} -function isBoolean(obj) { - return typeof obj === "boolean"; -} -function isFunction(obj) { - return typeof obj === "function"; -} -function isArray(obj) { - return Array.isArray(obj); -} -function isObject(obj) { - return typeof obj === "object" && !isArray(obj) && !isNull(obj); -} -function isArrayLike(obj) { - const length = !!obj && obj.length; - const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; - return isArray(obj) || !isFunction(obj) && lengthCorrectFormat ? length > 0 && isObject(obj) ? length - 1 in obj : true : false; -} -function isPlainObject(obj) { - if (!obj || !isObject(obj) || type(obj) !== "object") - return false; - let key; - const cstr = "constructor"; - const ctor = obj[cstr]; - const ctorProto = ctor && ctor.prototype; - const hasOwnConstructor = hasOwnProperty$1.call(obj, cstr); - const hasIsPrototypeOf = ctorProto && hasOwnProperty$1.call(ctorProto, "isPrototypeOf"); - if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) { - return false; - } - for (key in obj) { - } - return isUndefined(key) || hasOwnProperty$1.call(obj, key); -} -function isHTMLElement(obj) { - const instanceofObj = window.HTMLElement; - return obj ? instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType : false; -} -function isElement(obj) { - const instanceofObj = window.Element; - return obj ? instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType : false; -} - -function each(source, callback) { - if (isArrayLike(source)) { - for (let i = 0; i < source.length; i++) { - if (callback(source[i], i, source) === false) { - break; +(function(r, a) { + "object" === typeof exports && "undefined" !== typeof module ? module.exports = a() : "function" === typeof define && define.amd ? define(a) : (r = "undefined" !== typeof globalThis ? globalThis : r || self, + r.OverlayScrollbars = a()); +})(this, (function() { + "use strict"; + function createCache(r, a) { + var e = r.v, t = r.o, n = r.u; + var i = e; + var v; + var o = function cacheUpdateContextual(r, a) { + var e = i; + var o = r; + var u = a || (t ? !t(e, o) : e !== o); + if (u || n) { + i = o; + v = e; } + 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 ]; + } + 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 a = !!r && r.length; + var e = isNumber(a) && a > -1 && a % 1 == 0; + return isArray(r) || !isFunction(r) && e ? a > 0 && isObject(r) ? a - 1 in r : true : false; + } + function isPlainObject(r) { + if (!r || !isObject(r) || "object" !== n(r)) { + return false; } - } else if (source) { - each(Object.keys(source), (key) => callback(source[key], key, source)); + var a; + var e = "constructor"; + var i = r[e]; + var v = i && i.prototype; + var o = t.call(r, e); + var u = v && t.call(v, "isPrototypeOf"); + if (i && !o && !u) { + return false; + } + for (a in r) {} + return isUndefined(a) || t.call(r, a); } - return source; -} -const indexOf = (arr, item, fromIndex) => arr.indexOf(item, fromIndex); -const push = (array, items, arrayIsSingleItem) => { - !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items) : array.push(items); - return array; -}; -const from = (arr) => { - if (Array.from && arr) { - return Array.from(arr); + function isHTMLElement(a) { + var e = window.HTMLElement; + return a ? e ? a instanceof e : a.nodeType === r : false; } - const result = []; - if (arr instanceof Set) { - arr.forEach((value) => { - push(result, value); - }); - } else { - each(arr, (elm) => { - push(result, elm); - }); + function isElement(a) { + var e = window.Element; + return a ? e ? a instanceof e : a.nodeType === r : false; } - return result; -}; -const isEmptyArray = (array) => !!array && array.length === 0; -const runEach = (arr, args) => { - const runFn = (fn) => fn && fn.apply(void 0, args || []); - if (arr instanceof Set) { - arr.forEach(runFn); - } else { - each(arr, runFn); - } -}; - -const hasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); -const keys = (obj) => obj ? Object.keys(obj) : []; -function assignDeep(target, object1, object2, object3, object4, object5, object6) { - const sources = [object1, object2, object3, object4, object5, object6]; - if ((typeof target !== "object" || isNull(target)) && !isFunction(target)) { - target = {}; - } - each(sources, (source) => { - each(keys(source), (key) => { - const copy = source[key]; - if (target === copy) { - return true; - } - const copyIsArray = isArray(copy); - if (copy && (isPlainObject(copy) || copyIsArray)) { - const src = target[key]; - let clone = src; - if (copyIsArray && !isArray(src)) { - clone = []; - } else if (!copyIsArray && !isPlainObject(src)) { - clone = {}; + function each(r, a) { + if (isArrayLike(r)) { + for (var e = 0; e < r.length; e++) { + if (false === a(r[e], e, r)) { + break; } - target[key] = assignDeep(clone, copy); - } else { - target[key] = copy; } - }); - }); - return target; -} -function isEmptyObject(obj) { - for (const name in obj) - return false; - return true; -} - -function getSetProp(topLeft, fallback, elm, value) { - if (isUndefined(value)) { - return elm ? elm[topLeft] : fallback; - } - elm && (elm[topLeft] = value); -} -function attr(elm, attrName, value) { - if (isUndefined(value)) { - return elm ? elm.getAttribute(attrName) : null; - } - elm && elm.setAttribute(attrName, value); -} -const attrClass = (elm, attrName, value, add) => { - const currValues = attr(elm, attrName) || ""; - const currValuesSet = new Set(currValues.split(" ")); - currValuesSet[add ? "add" : "delete"](value); - attr(elm, attrName, from(currValuesSet).join(" ").trim()); -}; -const hasAttrClass = (elm, attrName, value) => { - const currValues = attr(elm, attrName) || ""; - const currValuesSet = new Set(currValues.split(" ")); - return currValuesSet.has(value); -}; -const removeAttr = (elm, attrName) => { - elm && elm.removeAttribute(attrName); -}; -function scrollLeft(elm, value) { - return getSetProp("scrollLeft", 0, elm, value); -} -function scrollTop(elm, value) { - return getSetProp("scrollTop", 0, elm, value); -} - -const elmPrototype = Element.prototype; -const find = (selector, elm) => { - const arr = []; - const rootElm = elm ? isElement(elm) ? elm : null : document; - return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr; -}; -const findFirst = (selector, elm) => { - const rootElm = elm ? isElement(elm) ? elm : null : document; - return rootElm ? rootElm.querySelector(selector) : null; -}; -const is = (elm, selector) => { - if (isElement(elm)) { - const fn = elmPrototype.matches || elmPrototype.msMatchesSelector; - return fn.call(elm, selector); - } - return false; -}; -const contents = (elm) => elm ? from(elm.childNodes) : []; -const parent = (elm) => elm ? elm.parentElement : null; -const closest = (elm, selector) => { - if (isElement(elm)) { - const closestFn = elmPrototype.closest; - if (closestFn) { - return closestFn.call(elm, selector); + } else if (r) { + each(Object.keys(r), (function(e) { + return a(r[e], e, r); + })); } - do { - if (is(elm, selector)) { - return elm; - } - elm = parent(elm); - } while (elm); + return r; } - return null; -}; -const liesBetween = (elm, highBoundarySelector, deepBoundarySelector) => { - const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector); - const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm); - return closestHighBoundaryElm && closestDeepBoundaryElm ? closestHighBoundaryElm === elm || closestDeepBoundaryElm === elm || closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm : false; -}; - -const before = (parentElm, preferredAnchor, insertedElms) => { - if (insertedElms) { - let anchor = preferredAnchor; - let fragment; - if (parentElm) { - if (isArrayLike(insertedElms)) { - fragment = document.createDocumentFragment(); - each(insertedElms, (insertedElm) => { - if (insertedElm === anchor) { - anchor = insertedElm.previousSibling; + function assignDeep(r, a, e, t, n, i, v) { + var o = [ a, e, t, n, i, v ]; + if (("object" !== typeof r || isNull(r)) && !isFunction(r)) { + r = {}; + } + each(o, (function(a) { + each(c(a), (function(e) { + var t = a[e]; + if (r === t) { + return true; + } + var n = isArray(t); + if (t && (isPlainObject(t) || n)) { + var i = r[e]; + var v = i; + if (n && !isArray(i)) { + v = []; + } else if (!n && !isPlainObject(i)) { + v = {}; } - fragment.appendChild(insertedElm); - }); - } else { - fragment = insertedElms; - } - if (preferredAnchor) { - if (!anchor) { - anchor = parentElm.firstChild; - } else if (anchor !== preferredAnchor) { - anchor = anchor.nextSibling; - } - } - parentElm.insertBefore(fragment, anchor || null); - } - } -}; -const appendChildren = (node, children) => { - before(node, null, children); -}; -const prependChildren = (node, children) => { - before(node, node && node.firstChild, children); -}; -const insertBefore = (node, insertedNodes) => { - before(parent(node), node, insertedNodes); -}; -const insertAfter = (node, insertedNodes) => { - before(parent(node), node && node.nextSibling, insertedNodes); -}; -const removeElements = (nodes) => { - if (isArrayLike(nodes)) { - each(from(nodes), (e) => removeElements(e)); - } else if (nodes) { - const parentElm = parent(nodes); - if (parentElm) { - parentElm.removeChild(nodes); - } - } -}; - -const createDiv = (classNames) => { - const div = document.createElement("div"); - if (classNames) { - attr(div, "class", classNames); - } - return div; -}; -const createDOM = (html) => { - const createdDiv = createDiv(); - createdDiv.innerHTML = html.trim(); - return each(contents(createdDiv), (elm) => removeElements(elm)); -}; - -const firstLetterToUpper = (str) => str.charAt(0).toUpperCase() + str.slice(1); -const getDummyStyle = () => createDiv().style; -const cssPrefixes = ["-webkit-", "-moz-", "-o-", "-ms-"]; -const jsPrefixes = [ - "WebKit", - "Moz", - "O", - "MS", - "webkit", - "moz", - "o", - "ms" -]; -const jsCache = {}; -const cssCache = {}; -const cssProperty = (name) => { - let result = cssCache[name]; - if (hasOwnProperty(cssCache, name)) { - return result; - } - const uppercasedName = firstLetterToUpper(name); - const elmStyle = getDummyStyle(); - each(cssPrefixes, (prefix) => { - const prefixWithoutDashes = prefix.replace(/-/g, ""); - const resultPossibilities = [ - name, - prefix + name, - prefixWithoutDashes + uppercasedName, - firstLetterToUpper(prefixWithoutDashes) + uppercasedName - ]; - return !(result = resultPossibilities.find((resultPossibility) => elmStyle[resultPossibility] !== void 0)); - }); - return cssCache[name] = result || ""; -}; -const jsAPI = (name) => { - let result = jsCache[name] || window[name]; - if (hasOwnProperty(jsCache, name)) { - return result; - } - each(jsPrefixes, (prefix) => { - result = result || window[prefix + firstLetterToUpper(name)]; - return !result; - }); - jsCache[name] = result; - return result; -}; - -const MutationObserverConstructor = jsAPI("MutationObserver"); -const IntersectionObserverConstructor = jsAPI("IntersectionObserver"); -const ResizeObserverConstructor = jsAPI("ResizeObserver"); -const cAF = jsAPI("cancelAnimationFrame"); -const rAF = jsAPI("requestAnimationFrame"); - -const rnothtmlwhite = /[^\x20\t\r\n\f]+/g; -const classListAction = (elm, className, action) => { - let clazz; - let i = 0; - let result = false; - if (elm && className && isString(className)) { - const classes = className.match(rnothtmlwhite) || []; - result = classes.length > 0; - while (clazz = classes[i++]) { - result = !!action(elm.classList, clazz) && result; - } - } - return result; -}; -const hasClass = (elm, className) => classListAction(elm, className, (classList, clazz) => classList.contains(clazz)); -const removeClass = (elm, className) => { - classListAction(elm, className, (classList, clazz) => classList.remove(clazz)); -}; -const addClass = (elm, className) => { - classListAction(elm, className, (classList, clazz) => classList.add(clazz)); - return removeClass.bind(0, elm, className); -}; - -const equal = (a, b, props, propMutation) => { - if (a && b) { - let result = true; - each(props, (prop) => { - const compareA = propMutation ? propMutation(a[prop]) : a[prop]; - const compareB = propMutation ? propMutation(b[prop]) : b[prop]; - if (compareA !== compareB) { - result = false; - } - }); - return result; - } - return false; -}; -const equalWH = (a, b) => equal(a, b, ["w", "h"]); -const equalXY = (a, b) => equal(a, b, ["x", "y"]); -const equalTRBL = (a, b) => equal(a, b, ["t", "r", "b", "l"]); -const equalBCRWH = (a, b, round) => equal(a, b, ["width", "height"], round && ((value) => Math.round(value))); - -const clearTimeouts = (id) => { - id && window.clearTimeout(id); - id && cAF(id); -}; -const noop = () => { -}; -const debounce = (functionToDebounce, options) => { - let timeoutId; - let maxTimeoutId; - let prevArguments; - let latestArguments; - const { _timeout, _maxDelay, _mergeParams } = options || {}; - const setT = window.setTimeout; - const invokeFunctionToDebounce = function(args) { - clearTimeouts(timeoutId); - clearTimeouts(maxTimeoutId); - maxTimeoutId = timeoutId = prevArguments = void 0; - functionToDebounce.apply(this, args); - }; - const mergeParms = (curr) => _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr; - const flush = () => { - if (timeoutId) { - invokeFunctionToDebounce(mergeParms(latestArguments) || latestArguments); - } - }; - const debouncedFn = function() { - const args = from(arguments); - const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout; - const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0; - if (hasTimeout) { - const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay; - const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0; - const setTimeoutFn = finalTimeout > 0 ? setT : rAF; - const mergeParamsResult = mergeParms(args); - const invokedArgs = mergeParamsResult || args; - const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs); - clearTimeouts(timeoutId); - timeoutId = setTimeoutFn(boundInvoke, finalTimeout); - if (hasMaxWait && !maxTimeoutId) { - maxTimeoutId = setT(flush, finalMaxWait); - } - prevArguments = latestArguments = invokedArgs; - } else { - invokeFunctionToDebounce(args); - } - }; - debouncedFn._flush = flush; - return debouncedFn; -}; - -const cssNumber = { - opacity: 1, - zindex: 1 -}; -const parseToZeroOrNumber = (value, toFloat) => { - const num = toFloat ? parseFloat(value) : parseInt(value, 10); - return Number.isNaN(num) ? 0 : num; -}; -const adaptCSSVal = (prop, val) => !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val; -const getCSSVal = (elm, computedStyle, prop) => computedStyle != null ? computedStyle[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop]; -const setCSSVal = (elm, prop, val) => { - try { - if (elm) { - const { style: elmStyle } = elm; - if (!isUndefined(elmStyle[prop])) { - elmStyle[prop] = adaptCSSVal(prop, val); - } else { - elmStyle.setProperty(prop, val); - } - } - } catch (e) { - } -}; -function style(elm, styles) { - const getSingleStyle = isString(styles); - const getStyles = isArray(styles) || getSingleStyle; - if (getStyles) { - let getStylesResult = getSingleStyle ? "" : {}; - if (elm) { - const computedStyle = window.getComputedStyle(elm, null); - getStylesResult = getSingleStyle ? getCSSVal(elm, computedStyle, styles) : styles.reduce((result, key) => { - result[key] = getCSSVal(elm, computedStyle, key); - return result; - }, getStylesResult); - } - return getStylesResult; - } - each(keys(styles), (key) => setCSSVal(elm, key, styles[key])); -} -const topRightBottomLeft = (elm, propertyPrefix, propertySuffix) => { - const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : ""; - const finalSuffix = propertySuffix ? `-${propertySuffix}` : ""; - const top = `${finalPrefix}top${finalSuffix}`; - const right = `${finalPrefix}right${finalSuffix}`; - const bottom = `${finalPrefix}bottom${finalSuffix}`; - const left = `${finalPrefix}left${finalSuffix}`; - const result = style(elm, [top, right, bottom, left]); - return { - t: parseToZeroOrNumber(result[top]), - r: parseToZeroOrNumber(result[right]), - b: parseToZeroOrNumber(result[bottom]), - l: parseToZeroOrNumber(result[left]) - }; -}; - -const zeroObj$1 = { - w: 0, - h: 0 -}; -const windowSize = () => ({ - w: window.innerWidth, - h: window.innerHeight -}); -const offsetSize = (elm) => elm ? { - w: elm.offsetWidth, - h: elm.offsetHeight -} : zeroObj$1; -const clientSize = (elm) => elm ? { - w: elm.clientWidth, - h: elm.clientHeight -} : zeroObj$1; -const scrollSize = (elm) => elm ? { - w: elm.scrollWidth, - h: elm.scrollHeight -} : zeroObj$1; -const fractionalSize = (elm) => { - const cssHeight = parseFloat(style(elm, "height")) || 0; - const cssWidth = parseFloat(style(elm, "height")) || 0; - return { - w: cssWidth - Math.round(cssWidth), - h: cssHeight - Math.round(cssHeight) - }; -}; -const getBoundingClientRect = (elm) => elm.getBoundingClientRect(); - -let passiveEventsSupport; -const supportPassiveEvents = () => { - if (isUndefined(passiveEventsSupport)) { - passiveEventsSupport = false; - try { - window.addEventListener("test", null, Object.defineProperty({}, "passive", { - get: function() { - passiveEventsSupport = true; + r[e] = assignDeep(v, t); + } else { + r[e] = t; } })); - } catch (e) { - } + })); + return r; } - return passiveEventsSupport; -}; -const splitEventNames = (eventNames) => eventNames.split(" "); -const off = (target, eventNames, listener, capture) => { - each(splitEventNames(eventNames), (eventName) => { - target.removeEventListener(eventName, listener, capture); - }); -}; -const on = (target, eventNames, listener, options) => { - const doSupportPassiveEvents = supportPassiveEvents(); - const passive = doSupportPassiveEvents && options && options._passive || false; - const capture = options && options._capture || false; - const once = options && options._once || false; - const offListeners = []; - const nativeOptions = doSupportPassiveEvents ? { - passive, - capture - } : capture; - each(splitEventNames(eventNames), (eventName) => { - const finalListener = once ? (evt) => { - target.removeEventListener(eventName, finalListener, capture); - listener && listener(evt); - } : listener; - push(offListeners, off.bind(null, target, eventName, finalListener, capture)); - target.addEventListener(eventName, finalListener, nativeOptions); - }); - return runEach.bind(0, offListeners); -}; -const stopPropagation = (evt) => evt.stopPropagation(); -const preventDefault = (evt) => evt.preventDefault(); -const stopAndPrevent = (evt) => stopPropagation(evt) || preventDefault(evt); - -const zeroObj = { - x: 0, - y: 0 -}; -const absoluteCoordinates = (elm) => { - const rect = elm ? getBoundingClientRect(elm) : 0; - return rect ? { - x: rect.left + window.pageYOffset, - y: rect.top + window.pageXOffset - } : zeroObj; -}; - -const manageListener = (callback, listener) => { - each(isArray(listener) ? listener : [listener], callback); -}; -const createEventListenerHub = (initialEventListeners) => { - const events = /* @__PURE__ */ new Map(); - const removeEvent = (name, listener) => { - if (name) { - const eventSet = events.get(name); - manageListener((currListener) => { - if (eventSet) { - eventSet[currListener ? "delete" : "clear"](currListener); - } - }, listener); + function isEmptyObject(r) { + for (var a in r) { + return false; + } + return true; + } + function getSetProp(r, a, e, t) { + if (isUndefined(t)) { + return e ? e[r] : a; + } + e && (e[r] = t); + } + function attr(r, a, e) { + if (isUndefined(e)) { + return r ? r.getAttribute(a) : null; + } + r && r.setAttribute(a, e); + } + function scrollLeft(r, a) { + return getSetProp("scrollLeft", 0, r, a); + } + function scrollTop(r, a) { + return getSetProp("scrollTop", 0, r, a); + } + function style(r, a) { + var e = isString(a); + var t = isArray(a) || e; + if (t) { + var n = e ? "" : {}; + if (r) { + var i = window.getComputedStyle(r, null); + n = e ? vr(r, i, a) : a.reduce((function(a, e) { + a[e] = vr(r, i, e); + return a; + }), n); + } + return n; + } + each(c(a), (function(e) { + return or(r, e, a[e]); + })); + } + var r = Node.ELEMENT_NODE; + var a = Object.prototype, e = a.toString, t = a.hasOwnProperty; + var n = function type(r) { + return isUndefined(r) || isNull(r) ? "" + r : e.call(r).replace(/^\[object (.+)\]$/, "$1").toLowerCase(); + }; + var i = function indexOf(r, a, e) { + return r.indexOf(a, e); + }; + var v = function push(r, a, e) { + !e && !isString(a) && isArrayLike(a) ? Array.prototype.push.apply(r, a) : r.push(a); + return r; + }; + var o = function from(r) { + if (Array.from && r) { + return Array.from(r); + } + var a = []; + if (r instanceof Set) { + r.forEach((function(r) { + v(a, r); + })); } else { - events.forEach((eventSet) => { - eventSet.clear(); - }); - events.clear(); + each(r, (function(r) { + v(a, r); + })); + } + return a; + }; + var u = function isEmptyArray(r) { + return !!r && 0 === r.length; + }; + var f = function runEach(r, a) { + var e = function runFn(r) { + return r && r.apply(void 0, a || []); + }; + if (r instanceof Set) { + r.forEach(e); + } else { + each(r, e); } }; - const addEvent = (name, listener) => { - const eventSet = events.get(name) || /* @__PURE__ */ new Set(); - events.set(name, eventSet); - manageListener((currListener) => { - currListener && eventSet.add(currListener); - }, listener); - return removeEvent.bind(0, name, listener); + var s = function hasOwnProperty(r, a) { + return Object.prototype.hasOwnProperty.call(r, a); }; - const triggerEvent = (name, args) => { - const eventSet = events.get(name); - each(from(eventSet), (event) => { - if (args) { - event(args); - } else { - event(); + var c = function keys(r) { + return r ? Object.keys(r) : []; + }; + var l = function attrClass(r, a, e, t) { + var n = attr(r, a) || ""; + var i = new Set(n.split(" ")); + i[t ? "add" : "delete"](e); + attr(r, a, o(i).join(" ").trim()); + }; + var d = function hasAttrClass(r, a, e) { + var t = attr(r, a) || ""; + var n = new Set(t.split(" ")); + return n.has(e); + }; + var g = function removeAttr(r, a) { + r && r.removeAttribute(a); + }; + var p = Element.prototype; + var h = function find(r, a) { + var e = []; + var t = a ? isElement(a) ? a : null : document; + return t ? v(e, t.querySelectorAll(r)) : e; + }; + var w = function findFirst(r, a) { + var e = a ? isElement(a) ? a : null : document; + return e ? e.querySelector(r) : null; + }; + var y = function is(r, a) { + if (isElement(r)) { + var e = p.matches || p.msMatchesSelector; + return e.call(r, a); + } + return false; + }; + var m = function contents(r) { + return r ? o(r.childNodes) : []; + }; + var b = function parent(r) { + return r ? r.parentElement : null; + }; + var _ = function closest(r, a) { + if (isElement(r)) { + var e = p.closest; + if (e) { + return e.call(r, a); } - }); - }; - const initialListenerKeys = keys(initialEventListeners); - each(initialListenerKeys, (key) => { - addEvent(key, initialEventListeners[key]); - }); - return [addEvent, removeEvent, triggerEvent]; -}; - -const getPropByPath = (obj, path) => obj ? path.split(".").reduce((o, prop) => o && hasOwnProperty(o, prop) ? o[prop] : void 0, obj) : void 0; -const createOptionCheck = (options, changedOptions, force) => (path) => [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== void 0]; -const createState = (initialState) => { - let state = initialState; - return [ - () => state, - (newState) => { - state = assignDeep({}, state, newState); - } - ]; -}; - -const classNameEnvironment = "os-environment"; -const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`; -const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`; -const dataAttributeHost = "data-overlayscrollbars"; -const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`; -const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`; -const dataValueHostOverflowVisible = "overflowVisible"; -const dataValueHostViewportScrollbarStyling = "viewportStyled"; -const classNamePadding = "os-padding"; -const classNameViewport = "os-viewport"; -const classNameViewportArrange = `${classNameViewport}-arrange`; -const classNameContent = "os-content"; -const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`; -const classNameOverflowVisible = `os-overflow-visible`; -const classNameSizeObserver = "os-size-observer"; -const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`; -const classNameSizeObserverListener = `${classNameSizeObserver}-listener`; -const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`; -const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`; -const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`; -const classNameTrinsicObserver = "os-trinsic-observer"; -const classNameScrollbar = "os-scrollbar"; -const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`; -const classNameScrollbarVertical = `${classNameScrollbar}-vertical`; -const classNameScrollbarTrack = "os-scrollbar-track"; -const classNameScrollbarHandle = "os-scrollbar-handle"; - -const stringify = (value) => JSON.stringify(value, (_, val) => { - if (isFunction(val)) { - throw new Error(); - } - return val; -}); -const defaultOptions = { - paddingAbsolute: false, - updating: { - elementEvents: [["img", "load"]], - debounce: [0, 33], - attributes: null, - ignoreMutation: null - }, - overflow: { - x: "scroll", - y: "scroll" - }, - nativeScrollbarsOverlaid: { - show: false, - initialize: false - }, - scrollbars: { - visibility: "auto", - autoHide: "never", - autoHideDelay: 800, - dragScroll: true, - clickScroll: false, - touch: true - } -}; -const getOptionsDiff = (currOptions, newOptions) => { - const diff = {}; - const optionsKeys = keys(newOptions).concat(keys(currOptions)); - each(optionsKeys, (optionKey) => { - const currOptionValue = currOptions[optionKey]; - const newOptionValue = newOptions[optionKey]; - if (isObject(currOptionValue) && isObject(newOptionValue)) { - assignDeep(diff[optionKey] = {}, getOptionsDiff(currOptionValue, newOptionValue)); - } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) { - let isDiff = true; - if (isArray(currOptionValue) || isArray(newOptionValue)) { - try { - if (stringify(currOptionValue) === stringify(newOptionValue)) { - isDiff = false; - } - } catch (e) { + do { + if (y(r, a)) { + return r; } - } - if (isDiff) { - diff[optionKey] = newOptionValue; - } + r = b(r); + } while (r); } - }); - return diff; -}; - -let environmentInstance; -const { abs, round } = Math; -const diffBiggerThanOne = (valOne, valTwo) => { - const absValOne = abs(valOne); - const absValTwo = abs(valTwo); - return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo); -}; -const getNativeScrollbarSize = (body, measureElm, measureElmChild) => { - appendChildren(body, measureElm); - const cSize = clientSize(measureElm); - const oSize = offsetSize(measureElm); - const fSize = fractionalSize(measureElmChild); - return { - x: oSize.h - cSize.h + fSize.h, - y: oSize.w - cSize.w + fSize.w + return null; }; -}; -const getNativeScrollbarStyling = (testElm) => { - let result = false; - const revertClass = addClass(testElm, classNameViewportScrollbarStyling); - try { - result = style(testElm, cssProperty("scrollbar-width")) === "none" || window.getComputedStyle(testElm, "::-webkit-scrollbar").getPropertyValue("display") === "none"; - } catch (ex) { - } - revertClass(); - return result; -}; -const getRtlScrollBehavior = (parentElm, childElm) => { - const strHidden = "hidden"; - style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: "rtl" }); - scrollLeft(parentElm, 0); - const parentOffset = absoluteCoordinates(parentElm); - const childOffset = absoluteCoordinates(childElm); - scrollLeft(parentElm, -999); - const childOffsetAfterScroll = absoluteCoordinates(childElm); - return { - i: parentOffset.x === childOffset.x, - n: childOffset.x !== childOffsetAfterScroll.x + var S = function liesBetween(r, a, e) { + var t = r && _(r, a); + var n = r && w(e, t); + return t && n ? t === r || n === r || _(_(r, e), a) !== t : false; }; -}; -const getFlexboxGlue = (parentElm, childElm) => { - const revertFbxGlue = addClass(parentElm, classNameEnvironmentFlexboxGlue); - const minOffsetsizeParent = getBoundingClientRect(parentElm); - const minOffsetsize = getBoundingClientRect(childElm); - const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true); - const revertFbxGlueMax = addClass(parentElm, classNameEnvironmentFlexboxGlueMax); - const maxOffsetsizeParent = getBoundingClientRect(parentElm); - const maxOffsetsize = getBoundingClientRect(childElm); - const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true); - revertFbxGlue(); - revertFbxGlueMax(); - return supportsMin && supportsMax; -}; -const getWindowDPR = () => { - const dDPI = window.screen.deviceXDPI || 0; - const sDPI = window.screen.logicalXDPI || 1; - return window.devicePixelRatio || dDPI / sDPI; -}; -const getDefaultInitializationStrategy = (nativeScrollbarStyling) => ({ - _host: null, - _viewport: null, - _padding: !nativeScrollbarStyling, - _content: false, - _scrollbarsSlot: null -}); -const createEnvironment = () => { - const { body } = document; - const envDOM = createDOM(`
`); - const envElm = envDOM[0]; - const envChildElm = envElm.firstChild; - const [addEvent, , triggerEvent] = createEventListenerHub(); - const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({ - _initialValue: getNativeScrollbarSize(body, envElm, envChildElm), - _equal: equalXY - }); - const [nativeScrollbarSize] = getNativeScrollbarSizeCache(); - const nativeScrollbarStyling = getNativeScrollbarStyling(envElm); - const nativeScrollbarIsOverlaid = { - x: nativeScrollbarSize.x === 0, - y: nativeScrollbarSize.y === 0 - }; - const initializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling); - const defaultDefaultOptions = assignDeep({}, defaultOptions); - const env = { - _nativeScrollbarSize: nativeScrollbarSize, - _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid, - _nativeScrollbarStyling: nativeScrollbarStyling, - _cssCustomProperties: style(envElm, "zIndex") === "-1", - _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm), - _flexboxGlue: getFlexboxGlue(envElm, envChildElm), - _addListener: (listener) => addEvent("_", listener), - _getInitializationStrategy: assignDeep.bind(0, {}, initializationStrategy), - _setInitializationStrategy(newInitializationStrategy) { - assignDeep(initializationStrategy, newInitializationStrategy); - }, - _getDefaultOptions: assignDeep.bind(0, {}, defaultDefaultOptions), - _setDefaultOptions(newDefaultOptions) { - assignDeep(defaultDefaultOptions, newDefaultOptions); - }, - _defaultInitializationStrategy: assignDeep({}, initializationStrategy), - _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions) - }; - removeAttr(envElm, "style"); - removeElements(envElm); - if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) { - let size = windowSize(); - let dpr = getWindowDPR(); - window.addEventListener("resize", () => { - const sizeNew = windowSize(); - const deltaSize = { - w: sizeNew.w - size.w, - h: sizeNew.h - size.h - }; - if (deltaSize.w === 0 && deltaSize.h === 0) - return; - const deltaAbsSize = { - w: abs(deltaSize.w), - h: abs(deltaSize.h) - }; - const deltaAbsRatio = { - w: abs(round(sizeNew.w / (size.w / 100))), - h: abs(round(sizeNew.h / (size.h / 100))) - }; - const dprNew = getWindowDPR(); - const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2; - const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h); - const dprChanged = dprNew !== dpr && dpr > 0; - const isZoom = deltaIsBigger && difference && dprChanged; - if (isZoom) { - const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(getNativeScrollbarSize(body, envElm, envChildElm)); - assignDeep(environmentInstance._nativeScrollbarSize, scrollbarSize); - removeElements(envElm); - if (scrollbarSizeChanged) { - triggerEvent("_"); - } - } - size = sizeNew; - dpr = dprNew; - }); - } - return env; -}; -const getEnvironment = () => { - if (!environmentInstance) { - environmentInstance = createEnvironment(); - } - return environmentInstance; -}; - -let contentArrangeCounter = 0; -const unwrap = (elm) => { - appendChildren(parent(elm), contents(elm)); - removeElements(elm); -}; -const createUniqueViewportArrangeElement = () => { - const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment(); - const create = !_cssCustomProperties && !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y); - const result = create ? document.createElement("style") : false; - if (result) { - attr(result, "id", `${classNameViewportArrange}-${contentArrangeCounter}`); - contentArrangeCounter++; - } - return result; -}; -const staticCreationFromStrategy = (target, initializationValue, strategy) => { - const result = initializationValue || (isFunction(strategy) ? strategy(target) : strategy); - return result || createDiv(); -}; -const dynamicCreationFromStrategy = (target, initializationValue, strategy) => { - const takeInitializationValue = isBoolean(initializationValue) || initializationValue; - const result = takeInitializationValue ? initializationValue : isFunction(strategy) ? strategy(target) : strategy; - return result === true ? createDiv() : result; -}; -const addDataAttrHost = (elm, value) => { - attr(elm, dataAttributeHost, value || ""); - return removeAttr.bind(0, elm, dataAttributeHost); -}; -const createStructureSetupElements = (target) => { - const { _getInitializationStrategy, _nativeScrollbarStyling } = getEnvironment(); - const { - _host: hostInitializationStrategy, - _viewport: viewportInitializationStrategy, - _padding: paddingInitializationStrategy, - _content: contentInitializationStrategy - } = _getInitializationStrategy(); - const targetIsElm = isHTMLElement(target); - const targetStructureInitialization = target; - const targetElement = targetIsElm ? target : targetStructureInitialization.target; - const isTextarea = is(targetElement, "textarea"); - const isBody = !isTextarea && is(targetElement, "body"); - const ownerDocument = targetElement.ownerDocument; - const bodyElm = ownerDocument.body; - const wnd = ownerDocument.defaultView; - const singleElmSupport = !!ResizeObserverConstructor && _nativeScrollbarStyling; - const potentialViewportElement = staticCreationFromStrategy(targetElement, targetStructureInitialization.viewport, viewportInitializationStrategy); - const potentiallySingleElm = potentialViewportElement === targetElement; - const viewportIsTarget = singleElmSupport && potentiallySingleElm; - const viewportElement = potentiallySingleElm && !viewportIsTarget ? staticCreationFromStrategy(targetElement) : potentialViewportElement; - const evaluatedTargetObj = { - _target: targetElement, - _host: isTextarea ? staticCreationFromStrategy(targetElement, targetStructureInitialization.host, hostInitializationStrategy) : targetElement, - _viewport: viewportElement, - _padding: dynamicCreationFromStrategy(targetElement, targetStructureInitialization.padding, paddingInitializationStrategy), - _content: dynamicCreationFromStrategy(targetElement, targetStructureInitialization.content, contentInitializationStrategy), - _viewportArrange: !viewportIsTarget && createUniqueViewportArrangeElement(), - _windowElm: wnd, - _documentElm: ownerDocument, - _htmlElm: parent(bodyElm), - _bodyElm: bodyElm, - _isTextarea: isTextarea, - _isBody: isBody, - _targetIsElm: targetIsElm, - _viewportIsTarget: viewportIsTarget, - _viewportHasClass: (className, attributeClassName) => viewportIsTarget ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName) : hasClass(viewportElement, className), - _viewportAddRemoveClass: (className, attributeClassName, add) => viewportIsTarget ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add) : (add ? addClass : removeClass)(viewportElement, className) - }; - const generatedElements = keys(evaluatedTargetObj).reduce((arr, key) => { - const value = evaluatedTargetObj[key]; - return push(arr, value && !parent(value) ? value : false); - }, []); - const elementIsGenerated = (elm) => elm ? indexOf(generatedElements, elm) > -1 : null; - const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj; - const destroyFns = []; - const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host); - const targetContents = isTextarea ? _target : contents([_content, _viewport, _padding, _host, _target].find((elm) => elementIsGenerated(elm) === false)); - const contentSlot = _content || _viewport; - const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? "viewport" : "host"); - const removePaddingClass = addClass(_padding, classNamePadding); - const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport); - const removeContentClass = addClass(_content, classNameContent); - if (isTextareaHostGenerated) { - insertAfter(_target, _host); - push(destroyFns, () => { - insertAfter(_host, _target); - removeElements(_host); - }); - } - appendChildren(contentSlot, targetContents); - appendChildren(_host, _padding); - appendChildren(_padding || _host, !viewportIsTarget && _viewport); - appendChildren(_viewport, _content); - push(destroyFns, () => { - removeHostDataAttr(); - removeAttr(_viewport, dataAttributeHostOverflowX); - removeAttr(_viewport, dataAttributeHostOverflowY); - if (elementIsGenerated(_content)) { - unwrap(_content); - } - if (elementIsGenerated(_viewport)) { - unwrap(_viewport); - } - if (elementIsGenerated(_padding)) { - unwrap(_padding); - } - removePaddingClass(); - removeViewportClass(); - removeContentClass(); - }); - if (_nativeScrollbarStyling && !viewportIsTarget) { - push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling)); - } - if (_viewportArrange) { - insertBefore(_viewport, _viewportArrange); - push(destroyFns, removeElements.bind(0, _viewportArrange)); - } - return [evaluatedTargetObj, runEach.bind(0, destroyFns)]; -}; - -const createTrinsicUpdate = (structureSetupElements, state) => { - const { _content } = structureSetupElements; - const [getState] = state; - return (updateHints) => { - const { _flexboxGlue } = getEnvironment(); - const { _heightIntrinsic } = getState(); - const { _heightIntrinsicChanged } = updateHints; - const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged; - if (heightIntrinsicChanged) { - style(_content, { - height: _heightIntrinsic ? "" : "100%" - }); - } - return { - _sizeChanged: heightIntrinsicChanged, - _contentMutation: heightIntrinsicChanged - }; - }; -}; - -const createPaddingUpdate = (structureSetupElements, state) => { - const [getState, setState] = state; - const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements; - const [updatePaddingCache, currentPaddingCache] = createCache({ - _equal: equalTRBL, - _initialValue: topRightBottomLeft() - }, topRightBottomLeft.bind(0, _host, "padding", "")); - return (updateHints, checkOption, force) => { - let [padding, paddingChanged] = currentPaddingCache(force); - const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment(); - const { _directionIsRTL } = getState(); - const { _sizeChanged, _contentMutation, _directionChanged } = updateHints; - const [paddingAbsolute, paddingAbsoluteChanged] = checkOption("paddingAbsolute"); - const contentMutation = !_flexboxGlue && _contentMutation; - if (_sizeChanged || paddingChanged || contentMutation) { - [padding, paddingChanged] = updatePaddingCache(force); - } - const paddingStyleChanged = !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged); - if (paddingStyleChanged) { - const paddingRelative = !paddingAbsolute || !_padding && !_nativeScrollbarStyling; - const paddingHorizontal = padding.r + padding.l; - const paddingVertical = padding.t + padding.b; - const paddingStyle = { - marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0, - marginBottom: paddingRelative ? -paddingVertical : 0, - marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0, - top: paddingRelative ? -padding.t : 0, - right: paddingRelative ? _directionIsRTL ? -padding.r : "auto" : 0, - left: paddingRelative ? _directionIsRTL ? "auto" : -padding.l : 0, - width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : "" - }; - const viewportStyle = { - paddingTop: paddingRelative ? padding.t : 0, - paddingRight: paddingRelative ? padding.r : 0, - paddingBottom: paddingRelative ? padding.b : 0, - paddingLeft: paddingRelative ? padding.l : 0 - }; - style(_padding || _viewport, paddingStyle); - style(_viewport, viewportStyle); - setState({ - _padding: padding, - _paddingAbsolute: !paddingRelative, - _viewportPaddingStyle: _padding ? viewportStyle : assignDeep({}, paddingStyle, viewportStyle) - }); - } - return { - _paddingStyleChanged: paddingStyleChanged - }; - }; -}; - -const { max } = Math; -const strVisible = "visible"; -const strHidden = "hidden"; -const overlaidScrollbarsHideOffset = 42; -const whCacheOptions = { - _equal: equalWH, - _initialValue: { w: 0, h: 0 } -}; -const xyCacheOptions = { - _equal: equalXY, - _initialValue: { x: strHidden, y: strHidden } -}; -const getOverflowAmount = (viewportScrollSize, viewportClientSize, sizeFraction) => { - const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0; - const amount = { - w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)), - h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)) - }; - return { - w: amount.w > tollerance ? amount.w : 0, - h: amount.h > tollerance ? amount.h : 0 - }; -}; -const conditionalClass = (elm, classNames, add) => add ? addClass(elm, classNames) : removeClass(elm, classNames); -const overflowIsVisible = (overflowBehavior) => overflowBehavior.indexOf(strVisible) === 0; -const createOverflowUpdate = (structureSetupElements, state) => { - const [getState, setState] = state; - const { - _host, - _padding, - _viewport, - _viewportArrange, - _viewportIsTarget, - _viewportAddRemoveClass - } = structureSetupElements; - const { - _nativeScrollbarSize, - _flexboxGlue, - _nativeScrollbarStyling, - _nativeScrollbarIsOverlaid - } = getEnvironment(); - const doViewportArrange = !_viewportIsTarget && !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y); - const [updateSizeFraction, getCurrentSizeFraction] = createCache(whCacheOptions, fractionalSize.bind(0, _viewport)); - const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache(whCacheOptions, scrollSize.bind(0, _viewport)); - const [updateOverflowAmountCache, getCurrentOverflowAmountCache] = createCache(whCacheOptions); - const [updateOverflowStyleCache] = createCache(xyCacheOptions); - const fixFlexboxGlue = (viewportOverflowState, heightIntrinsic) => { - style(_viewport, { - height: "" - }); - if (heightIntrinsic) { - const { _paddingAbsolute, _padding: padding } = getState(); - const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState; - const fSize = fractionalSize(_host); - const hostClientSize = clientSize(_host); - const isContentBox = style(_viewport, "boxSizing") === "content-box"; - const paddingVertical = _paddingAbsolute || isContentBox ? padding.b + padding.t : 0; - const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox); - style(_viewport, { - height: hostClientSize.h + fSize.h + (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) - paddingVertical - }); - } - }; - const getViewportOverflowState = (showNativeOverlaidScrollbars, viewportStyleObj) => { - const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0; - const getStatePerAxis = (styleKey, isOverlaid, nativeScrollbarSize) => { - const overflowStyle = style(_viewport, styleKey); - const objectPrefferedOverflowStyle = viewportStyleObj ? viewportStyleObj[styleKey] : overflowStyle; - const overflowScroll = objectPrefferedOverflowStyle === "scroll"; - const nonScrollbarStylingHideOffset = isOverlaid ? arrangeHideOffset : nativeScrollbarSize; - const scrollbarsHideOffset = overflowScroll && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset : 0; - const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset; - return [overflowStyle, overflowScroll, scrollbarsHideOffset, scrollbarsHideOffsetArrange]; - }; - const [xOverflowStyle, xOverflowScroll, xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] = getStatePerAxis("overflowX", _nativeScrollbarIsOverlaid.x, _nativeScrollbarSize.x); - const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] = getStatePerAxis("overflowY", _nativeScrollbarIsOverlaid.y, _nativeScrollbarSize.y); - return { - _overflowStyle: { - x: xOverflowStyle, - y: yOverflowStyle - }, - _overflowScroll: { - x: xOverflowScroll, - y: yOverflowScroll - }, - _scrollbarsHideOffset: { - x: xScrollbarsHideOffset, - y: yScrollbarsHideOffset - }, - _scrollbarsHideOffsetArrange: { - x: xScrollbarsHideOffsetArrange, - y: yScrollbarsHideOffsetArrange - } - }; - }; - const setViewportOverflowState = (showNativeOverlaidScrollbars, hasOverflow, overflowOption, viewportStyleObj) => { - const setAxisOverflowStyle = (behavior, hasOverflowAxis) => { - const overflowVisible = overflowIsVisible(behavior); - const overflowVisibleBehavior = hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, "") || ""; - return [ - hasOverflowAxis && !overflowVisible ? behavior : "", - overflowIsVisible(overflowVisibleBehavior) ? "hidden" : overflowVisibleBehavior - ]; - }; - const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x); - const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y); - viewportStyleObj.overflowX = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX; - viewportStyleObj.overflowY = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY; - return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj); - }; - const arrangeViewport = (viewportOverflowState, viewportScrollSize, sizeFraction, directionIsRTL) => { - if (doViewportArrange) { - const { _viewportPaddingStyle } = getState(); - const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState; - const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange; - const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset; - const viewportArrangeHorizontalPaddingKey = directionIsRTL ? "paddingRight" : "paddingLeft"; - const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[viewportArrangeHorizontalPaddingKey]; - const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop; - const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w; - const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h; - const arrangeSize = { - w: hideOffsetY && arrangeY ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px` : "", - h: hideOffsetX && arrangeX ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px` : "" - }; - if (_viewportArrange) { - const { sheet } = _viewportArrange; - if (sheet) { - const { cssRules } = sheet; - if (cssRules) { - if (!cssRules.length) { - sheet.insertRule(`#${attr(_viewportArrange, "id")} + .${classNameViewportArrange}::before {}`, 0); + var C = function before(r, a, e) { + if (e) { + var t = a; + var n; + if (r) { + if (isArrayLike(e)) { + n = document.createDocumentFragment(); + each(e, (function(r) { + if (r === t) { + t = r.previousSibling; } - const ruleStyle = cssRules[0].style; - ruleStyle.width = arrangeSize.w; - ruleStyle.height = arrangeSize.h; - } - } - } else { - style(_viewport, { - "--os-vaw": arrangeSize.w, - "--os-vah": arrangeSize.h - }); - } - } - return doViewportArrange; - }; - const hideNativeScrollbars = (viewportOverflowState, directionIsRTL, viewportArrange, viewportStyleObj) => { - const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState; - const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange; - const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset; - const { _viewportPaddingStyle: viewportPaddingStyle } = getState(); - const horizontalMarginKey = directionIsRTL ? "marginLeft" : "marginRight"; - const viewportHorizontalPaddingKey = directionIsRTL ? "paddingLeft" : "paddingRight"; - const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey]; - const verticalMarginValue = viewportPaddingStyle.marginBottom; - const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey]; - const verticalPaddingValue = viewportPaddingStyle.paddingBottom; - viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`; - viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue; - viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue; - if (viewportArrange) { - viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0); - viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0); - } - }; - const undoViewportArrange = (showNativeOverlaidScrollbars, directionIsRTL, viewportOverflowState) => { - if (doViewportArrange) { - const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars); - const { _viewportPaddingStyle: viewportPaddingStyle } = getState(); - const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState; - const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange; - const finalPaddingStyle = {}; - const assignProps = (props) => each(props.split(" "), (prop) => { - finalPaddingStyle[prop] = viewportPaddingStyle[prop]; - }); - if (arrangeX) { - assignProps("marginBottom paddingTop paddingBottom"); - } - if (arrangeY) { - assignProps("marginLeft marginRight paddingLeft paddingRight"); - } - const prevStyle = style(_viewport, keys(finalPaddingStyle)); - removeClass(_viewport, classNameViewportArrange); - if (!_flexboxGlue) { - finalPaddingStyle.height = ""; - } - style(_viewport, finalPaddingStyle); - return [ - () => { - hideNativeScrollbars(finalViewportOverflowState, directionIsRTL, doViewportArrange, prevStyle); - style(_viewport, prevStyle); - addClass(_viewport, classNameViewportArrange); - }, - finalViewportOverflowState - ]; - } - return [noop]; - }; - return (updateHints, checkOption, force) => { - const { - _sizeChanged, - _hostMutation, - _contentMutation, - _paddingStyleChanged, - _heightIntrinsicChanged, - _directionChanged - } = updateHints; - const { _heightIntrinsic, _directionIsRTL } = getState(); - const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] = checkOption("nativeScrollbarsOverlaid.show"); - const [overflow, overflowChanged] = checkOption("overflow"); - const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y; - const adjustFlexboxGlue = !_viewportIsTarget && !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || _heightIntrinsicChanged); - const overflowXVisible = overflowIsVisible(overflow.x); - const overflowYVisible = overflowIsVisible(overflow.y); - const overflowVisible = overflowXVisible || overflowYVisible; - let sizeFractionCache = getCurrentSizeFraction(force); - let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force); - let overflowAmuntCache = getCurrentOverflowAmountCache(force); - let preMeasureViewportOverflowState; - if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) { - _viewportAddRemoveClass(classNameViewportScrollbarStyling, dataValueHostViewportScrollbarStyling, !showNativeOverlaidScrollbars); - } - if (adjustFlexboxGlue) { - preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars); - fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic); - } - if (_sizeChanged || _paddingStyleChanged || _contentMutation || _directionChanged || showNativeOverlaidScrollbarsChanged) { - if (overflowVisible) { - _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false); - } - const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(showNativeOverlaidScrollbars, _directionIsRTL, preMeasureViewportOverflowState); - const [sizeFraction2, sizeFractionChanged2] = sizeFractionCache = updateSizeFraction(force); - const [viewportScrollSize2, viewportScrollSizeChanged2] = viewportScrollSizeCache = updateViewportScrollSizeCache(force); - const viewportclientSize = clientSize(_viewport); - let arrangedViewportScrollSize = viewportScrollSize2; - let arrangedViewportClientSize = viewportclientSize; - redoViewportArrange(); - if ((viewportScrollSizeChanged2 || sizeFractionChanged2 || showNativeOverlaidScrollbarsChanged) && undoViewportArrangeOverflowState && !showNativeOverlaidScrollbars && arrangeViewport(undoViewportArrangeOverflowState, viewportScrollSize2, sizeFraction2, _directionIsRTL)) { - arrangedViewportClientSize = clientSize(_viewport); - arrangedViewportScrollSize = scrollSize(_viewport); - } - overflowAmuntCache = updateOverflowAmountCache(getOverflowAmount({ - w: max(viewportScrollSize2.w, arrangedViewportScrollSize.w), - h: max(viewportScrollSize2.h, arrangedViewportScrollSize.h) - }, { - w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize2.w), - h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize2.h) - }, sizeFraction2), force); - } - const [overflowAmount, overflowAmountChanged] = overflowAmuntCache; - const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache; - const [sizeFraction, sizeFractionChanged] = sizeFractionCache; - const hasOverflow = { - x: overflowAmount.w > 0, - y: overflowAmount.h > 0 - }; - const removeClipping = overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y) || overflowXVisible && hasOverflow.x && !hasOverflow.y || overflowYVisible && hasOverflow.y && !hasOverflow.x; - if (_paddingStyleChanged || _directionChanged || sizeFractionChanged || viewportScrollSizeChanged || overflowAmountChanged || overflowChanged || showNativeOverlaidScrollbarsChanged || adjustFlexboxGlue) { - const viewportStyle = { - marginRight: 0, - marginBottom: 0, - marginLeft: 0, - width: "", - overflowY: "", - overflowX: "" - }; - const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, hasOverflow, overflow, viewportStyle); - const viewportArranged = arrangeViewport(viewportOverflowState, viewportScrollSize, sizeFraction, _directionIsRTL); - if (!_viewportIsTarget) { - hideNativeScrollbars(viewportOverflowState, _directionIsRTL, viewportArranged, viewportStyle); - } - if (adjustFlexboxGlue) { - fixFlexboxGlue(viewportOverflowState, _heightIntrinsic); - } - if (_viewportIsTarget) { - attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX); - attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY); - } else { - style(_viewport, viewportStyle); - } - } - attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping); - conditionalClass(_padding, classNameOverflowVisible, removeClipping); - !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible); - const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle); - setState({ - _overflowStyle: overflowStyle, - _overflowAmount: { - x: overflowAmount.w, - y: overflowAmount.h - }, - _hasOverflow: hasOverflow - }); - return { - _overflowStyleChanged: overflowStyleChanged, - _overflowAmountChanged: overflowAmountChanged - }; - }; -}; - -const prepareUpdateHints = (leading, adaptive, force) => { - const result = {}; - const finalAdaptive = adaptive || {}; - const objKeys = keys(leading).concat(keys(finalAdaptive)); - each(objKeys, (key) => { - const leadingValue = leading[key]; - const adaptiveValue = finalAdaptive[key]; - result[key] = !!(force || leadingValue || adaptiveValue); - }); - return result; -}; -const createStructureSetupUpdate = (structureSetupElements, state) => { - const { _viewport } = structureSetupElements; - const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _flexboxGlue } = getEnvironment(); - const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y); - const updateSegments = [ - createTrinsicUpdate(structureSetupElements, state), - createPaddingUpdate(structureSetupElements, state), - createOverflowUpdate(structureSetupElements, state) - ]; - return (checkOption, updateHints, force) => { - const initialUpdateHints = prepareUpdateHints(assignDeep({ - _sizeChanged: false, - _paddingStyleChanged: false, - _directionChanged: false, - _heightIntrinsicChanged: false, - _overflowAmountChanged: false, - _overflowStyleChanged: false, - _hostMutation: false, - _contentMutation: false - }, updateHints), {}, force); - const adjustScrollOffset = doViewportArrange || !_flexboxGlue; - const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport); - const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport); - let adaptivedUpdateHints = initialUpdateHints; - each(updateSegments, (updateSegment) => { - adaptivedUpdateHints = prepareUpdateHints(adaptivedUpdateHints, updateSegment(adaptivedUpdateHints, checkOption, !!force) || {}, force); - }); - if (isNumber(scrollOffsetX)) { - scrollLeft(_viewport, scrollOffsetX); - } - if (isNumber(scrollOffsetY)) { - scrollTop(_viewport, scrollOffsetY); - } - return adaptivedUpdateHints; - }; -}; - -const animationStartEventName = "animationstart"; -const scrollEventName = "scroll"; -const scrollAmount = 3333333; -const getElmDirectionIsRTL = (elm) => style(elm, "direction") === "rtl"; -const domRectHasDimensions = (rect) => rect && (rect.height || rect.width); -const createSizeObserver = (target, onSizeChangedCallback, options) => { - const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {}; - const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment(); - const baseElements = createDOM(`
`); - const sizeObserver = baseElements[0]; - const listenerElement = sizeObserver.firstChild; - const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver); - const [updateResizeObserverContentRectCache] = createCache({ - _initialValue: void 0, - _alwaysUpdateValues: true, - _equal: (currVal, newVal) => !(!currVal || !domRectHasDimensions(currVal) && domRectHasDimensions(newVal)) - }); - const onSizeChangedCallbackProxy = (sizeChangedContext) => { - const isResizeObserverCall = isArray(sizeChangedContext) && sizeChangedContext.length > 0 && isObject(sizeChangedContext[0]); - const hasDirectionCache = !isResizeObserverCall && isBoolean(sizeChangedContext[0]); - let skip = false; - let appear = false; - let doDirectionScroll = true; - if (isResizeObserverCall) { - const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(sizeChangedContext.pop().contentRect); - const hasDimensions = domRectHasDimensions(currRContentRect); - const hadDimensions = domRectHasDimensions(prevContentRect); - skip = !prevContentRect || !hasDimensions; - appear = !hadDimensions && hasDimensions; - doDirectionScroll = !skip; - } else if (hasDirectionCache) { - [, doDirectionScroll] = sizeChangedContext; - } else { - appear = sizeChangedContext === true; - } - if (observeDirectionChange && doDirectionScroll) { - const rtl = hasDirectionCache ? sizeChangedContext[0] : getElmDirectionIsRTL(sizeObserver); - scrollLeft(sizeObserver, rtl ? rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount : scrollAmount); - scrollTop(sizeObserver, scrollAmount); - } - if (!skip) { - onSizeChangedCallback({ - _sizeChanged: !hasDirectionCache, - _directionIsRTLCache: hasDirectionCache ? sizeChangedContext : void 0, - _appear: !!appear - }); - } - }; - const offListeners = []; - let appearCallback = observeAppearChange ? onSizeChangedCallbackProxy : false; - let directionIsRTLCache; - if (ResizeObserverConstructor) { - const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy); - resizeObserverInstance.observe(listenerElement); - push(offListeners, () => { - resizeObserverInstance.disconnect(); - }); - } else { - const observerElementChildren = createDOM(`
`); - appendChildren(listenerElement, observerElementChildren); - addClass(listenerElement, classNameSizeObserverListenerScroll); - const observerElementChildrenRoot = observerElementChildren[0]; - const shrinkElement = observerElementChildrenRoot.lastChild; - const expandElement = observerElementChildrenRoot.firstChild; - const expandElementChild = expandElement == null ? void 0 : expandElement.firstChild; - let cacheSize = offsetSize(observerElementChildrenRoot); - let currSize = cacheSize; - let isDirty = false; - let rAFId; - const reset = () => { - scrollLeft(expandElement, scrollAmount); - scrollTop(expandElement, scrollAmount); - scrollLeft(shrinkElement, scrollAmount); - scrollTop(shrinkElement, scrollAmount); - }; - const onResized = (appear) => { - rAFId = 0; - if (isDirty) { - cacheSize = currSize; - onSizeChangedCallbackProxy(appear === true); - } - }; - const onScroll = (scrollEvent) => { - currSize = offsetSize(observerElementChildrenRoot); - isDirty = !scrollEvent || !equalWH(currSize, cacheSize); - if (scrollEvent) { - stopAndPrevent(scrollEvent); - if (isDirty && !rAFId) { - cAF(rAFId); - rAFId = rAF(onResized); - } - } else { - onResized(scrollEvent === false); - } - reset(); - }; - push(offListeners, [ - on(expandElement, scrollEventName, onScroll), - on(shrinkElement, scrollEventName, onScroll) - ]); - style(expandElementChild, { - width: scrollAmount, - height: scrollAmount - }); - reset(); - appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset; - } - if (observeDirectionChange) { - directionIsRTLCache = createCache({ - _initialValue: !getIsDirectionRTL() - }, getIsDirectionRTL); - const [updateDirectionIsRTLCache] = directionIsRTLCache; - push(offListeners, on(sizeObserver, scrollEventName, (event) => { - const directionIsRTLCacheValues = updateDirectionIsRTLCache(); - const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues; - if (directionIsRTLChanged) { - removeClass(listenerElement, "ltr rtl"); - if (directionIsRTL) { - addClass(listenerElement, "rtl"); + n.appendChild(r); + })); } else { - addClass(listenerElement, "ltr"); + n = e; } - onSizeChangedCallbackProxy(directionIsRTLCacheValues); - } - stopAndPrevent(event); - })); - } - if (appearCallback) { - addClass(sizeObserver, classNameSizeObserverAppear); - push(offListeners, on(sizeObserver, animationStartEventName, appearCallback, { - _once: !!ResizeObserverConstructor - })); - } - prependChildren(target, sizeObserver); - return () => { - runEach(offListeners); - removeElements(sizeObserver); - }; -}; - -const isHeightIntrinsic = (ioEntryOrSize) => ioEntryOrSize.h === 0 || ioEntryOrSize.isIntersecting || ioEntryOrSize.intersectionRatio > 0; -const createTrinsicObserver = (target, onTrinsicChangedCallback) => { - const trinsicObserver = createDiv(classNameTrinsicObserver); - const offListeners = []; - const [updateHeightIntrinsicCache] = createCache({ - _initialValue: false - }); - const triggerOnTrinsicChangedCallback = (updateValue) => { - if (updateValue) { - const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue)); - const [, heightIntrinsicChanged] = heightIntrinsic; - if (heightIntrinsicChanged) { - onTrinsicChangedCallback(heightIntrinsic); + if (a) { + if (!t) { + t = r.firstChild; + } else if (t !== a) { + t = t.nextSibling; + } + } + r.insertBefore(n, t || null); } } }; - if (IntersectionObserverConstructor) { - const intersectionObserverInstance = new IntersectionObserverConstructor((entries) => { - if (entries && entries.length > 0) { - triggerOnTrinsicChangedCallback(entries.pop()); - } - }, { root: target }); - intersectionObserverInstance.observe(trinsicObserver); - push(offListeners, () => { - intersectionObserverInstance.disconnect(); - }); - } else { - const onSizeChanged = () => { - const newSize = offsetSize(trinsicObserver); - triggerOnTrinsicChangedCallback(newSize); - }; - push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)); - onSizeChanged(); - } - prependChildren(target, trinsicObserver); - return () => { - runEach(offListeners); - removeElements(trinsicObserver); + var O = function appendChildren(r, a) { + C(r, null, a); }; -}; - -const createEventContentChange = (target, callback, eventContentChange) => { - let map; - let destroyed = false; - const destroy = () => { - destroyed = true; + var A = function prependChildren(r, a) { + C(r, r && r.firstChild, a); }; - const updateElements = (getElements) => { - if (eventContentChange) { - const eventElmList = eventContentChange.reduce((arr, item) => { - if (item) { - const selector = item[0]; - const eventNames = item[1]; - const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target)); - if (elements && elements.length && eventNames && isString(eventNames)) { - push(arr, [elements, eventNames.trim()], true); - } - } - return arr; - }, []); - each(eventElmList, (item) => each(item[0], (elm) => { - const eventNames = item[1]; - const entry = map.get(elm); - if (entry) { - const entryEventNames = entry[0]; - const entryOff = entry[1]; - if (entryEventNames === eventNames) { - entryOff(); - } - } - const off = on(elm, eventNames, (event) => { - if (destroyed) { - off(); - map.delete(elm); - } else { - callback(event); - } - }); - map.set(elm, [eventNames, off]); + var x = function insertBefore(r, a) { + C(b(r), r, a); + }; + var D = function insertAfter(r, a) { + C(b(r), r && r.nextSibling, a); + }; + var E = function removeElements(r) { + if (isArrayLike(r)) { + each(o(r), (function(r) { + return removeElements(r); })); + } else if (r) { + var a = b(r); + if (a) { + a.removeChild(r); + } } }; - if (eventContentChange) { - map = /* @__PURE__ */ new WeakMap(); - updateElements(); - } - return [destroy, updateElements]; -}; -const createDOMObserver = (target, isContentObserver, callback, options) => { - let isConnected = false; - const { - _attributes, - _styleChangingAttributes, - _eventContentChange, - _nestedTargetSelector, - _ignoreTargetChange, - _ignoreContentChange - } = options || {}; - const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(target, debounce(() => { - if (isConnected) { - callback(true); + var z = function createDiv(r) { + var a = document.createElement("div"); + if (r) { + attr(a, "class", r); } - }, { _timeout: 33, _maxDelay: 99 }), _eventContentChange); - const finalAttributes = _attributes || []; - const finalStyleChangingAttributes = _styleChangingAttributes || []; - const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); - const observerCallback = (mutations) => { - const ignoreTargetChange = _ignoreTargetChange || noop; - const ignoreContentChange = _ignoreContentChange || noop; - const targetChangedAttrs = []; - const totalAddedNodes = []; - let targetStyleChanged = false; - let contentChanged = false; - let childListChanged = false; - each(mutations, (mutation) => { - const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation; - const isAttributesType = type === "attributes"; - const isChildListType = type === "childList"; - const targetIsMutationTarget = target === mutationTarget; - const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget, attributeName) : 0; - const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue; - const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged; - if (isContentObserver && !targetIsMutationTarget) { - const notOnlyAttrChanged = !isAttributesType; - const contentAttrChanged = isAttributesType && styleChangingAttrChanged; - const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector); - const baseAssertion = isNestedTarget ? !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue) : notOnlyAttrChanged || contentAttrChanged; - const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options); - push(totalAddedNodes, addedNodes); - contentChanged = contentChanged || contentFinalChanged; - childListChanged = childListChanged || isChildListType; - } - if (!isContentObserver && targetIsMutationTarget && attributeChanged && !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue)) { - push(targetChangedAttrs, attributeName); - targetStyleChanged = targetStyleChanged || styleChangingAttrChanged; + return a; + }; + var L = function createDOM(r) { + var a = z(); + a.innerHTML = r.trim(); + return each(m(a), (function(r) { + return E(r); + })); + }; + var I = function firstLetterToUpper(r) { + return r.charAt(0).toUpperCase() + r.slice(1); + }; + var T = function getDummyStyle() { + return z().style; + }; + var M = [ "-webkit-", "-moz-", "-o-", "-ms-" ]; + var P = [ "WebKit", "Moz", "O", "MS", "webkit", "moz", "o", "ms" ]; + var F = {}; + var R = {}; + var N = function cssProperty(r) { + var a = R[r]; + if (s(R, r)) { + return a; + } + var e = I(r); + var t = T(); + each(M, (function(n) { + var i = n.replace(/-/g, ""); + var v = [ r, n + r, i + e, I(i) + e ]; + return !(a = v.find((function(r) { + return void 0 !== t[r]; + }))); + })); + return R[r] = a || ""; + }; + var j = function jsAPI(r) { + var a = F[r] || window[r]; + if (s(F, r)) { + return a; + } + each(P, (function(e) { + a = a || window[e + I(r)]; + return !a; + })); + F[r] = a; + return a; + }; + var B = j("MutationObserver"); + var V = j("IntersectionObserver"); + var k = j("ResizeObserver"); + var H = j("cancelAnimationFrame"); + var U = j("requestAnimationFrame"); + var q = /[^\x20\t\r\n\f]+/g; + var W = function classListAction(r, a, e) { + var t; + var n = 0; + var i = false; + if (r && a && isString(a)) { + var v = a.match(q) || []; + i = v.length > 0; + while (t = v[n++]) { + i = !!e(r.classList, t) && i; } + } + return i; + }; + var G = function hasClass(r, a) { + return W(r, a, (function(r, a) { + return r.contains(a); + })); + }; + var X = function removeClass(r, a) { + W(r, a, (function(r, a) { + return r.remove(a); + })); + }; + var Y = function addClass(r, a) { + W(r, a, (function(r, a) { + return r.add(a); + })); + return X.bind(0, r, a); + }; + var $ = function equal(r, a, e, t) { + if (r && a) { + var n = true; + each(e, (function(e) { + var i = t ? t(r[e]) : r[e]; + var v = t ? t(a[e]) : a[e]; + if (i !== v) { + n = false; + } + })); + return n; + } + return false; + }; + var J = function equalWH(r, a) { + return $(r, a, [ "w", "h" ]); + }; + var K = function equalXY(r, a) { + return $(r, a, [ "x", "y" ]); + }; + var Z = function equalTRBL(r, a) { + return $(r, a, [ "t", "r", "b", "l" ]); + }; + var Q = function equalBCRWH(r, a, e) { + return $(r, a, [ "width", "height" ], e && function(r) { + return Math.round(r); }); - if (childListChanged && !isEmptyArray(totalAddedNodes)) { - updateEventContentChangeElements((selector) => totalAddedNodes.reduce((arr, node) => { - push(arr, find(selector, node)); - return is(node, selector) ? push(arr, node) : arr; - }, [])); - } - if (isContentObserver) { - contentChanged && callback(false); - } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) { - callback(targetChangedAttrs, targetStyleChanged); - } }; - const mutationObserver = new MutationObserverConstructor(observerCallback); - mutationObserver.observe(target, { - attributes: true, - attributeOldValue: true, - attributeFilter: observedAttributes, - subtree: isContentObserver, - childList: isContentObserver, - characterData: isContentObserver - }); - isConnected = true; - return [ - () => { - if (isConnected) { - destroyEventContentChange(); - mutationObserver.disconnect(); - isConnected = false; - } - }, - () => { - if (isConnected) { - observerCallback(mutationObserver.takeRecords()); - } - } - ]; -}; - -const hostSelector = `[${dataAttributeHost}]`; -const viewportSelector = `.${classNameViewport}`; -const viewportAttrsFromTarget = ["tabindex"]; -const baseStyleChangingAttrsTextarea = ["wrap", "cols", "rows"]; -const baseStyleChangingAttrs = ["id", "class", "style", "open"]; -const createStructureSetupObservers = (structureSetupElements, state, structureSetupUpdate) => { - let debounceTimeout; - let debounceMaxDelay; - let contentMutationObserver; - const [, setState] = state; - const { - _host, - _viewport, - _content, - _isTextarea, - _viewportIsTarget, - _viewportHasClass, - _viewportAddRemoveClass - } = structureSetupElements; - const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment(); - const [updateContentSizeCache] = createCache({ - _equal: equalWH, - _initialValue: { w: 0, h: 0 } - }, () => { - const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible); - has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible); - const contentScroll = scrollSize(_content); - const viewportScroll = scrollSize(_viewport); - const fractional = fractionalSize(_viewport); - has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true); - return { - w: viewportScroll.w + contentScroll.w + fractional.w, - h: viewportScroll.h + contentScroll.h + fractional.h + var rr = function clearTimeouts(r) { + r && window.clearTimeout(r); + r && H(r); + }; + var ar = function noop() {}; + var er = function debounce(r, a) { + var e; + var t; + var n; + var i; + var v = a || {}, u = v.g, f = v.p, s = v.m; + var c = window.setTimeout; + var l = function invokeFunctionToDebounce(a) { + rr(e); + rr(t); + t = e = n = void 0; + r.apply(this, a); }; - }); - const contentMutationObserverAttr = _isTextarea ? baseStyleChangingAttrsTextarea : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea); - const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, { - _timeout: () => debounceTimeout, - _maxDelay: () => debounceMaxDelay, - _mergeParams(prev, curr) { - const [prevObj] = prev; - const [currObj] = curr; - return [ - keys(prevObj).concat(keys(currObj)).reduce((obj, key) => { - obj[key] = prevObj[key] || currObj[key]; - return obj; - }, {}) - ]; - } - }); - const updateViewportAttrsFromHost = (attributes) => { - each(attributes || viewportAttrsFromTarget, (attribute) => { - if (indexOf(viewportAttrsFromTarget, attribute) > -1) { - const hostAttr = attr(_host, attribute); - if (isString(hostAttr)) { - attr(_viewport, attribute, hostAttr); + var d = function mergeParms(r) { + return s && n ? s(n, r) : r; + }; + var g = function flush() { + if (e) { + l(d(i) || i); + } + }; + var p = function debouncedFn() { + var r = o(arguments); + var a = isFunction(u) ? u() : u; + var v = isNumber(a) && a >= 0; + if (v) { + var s = isFunction(f) ? f() : f; + var p = isNumber(s) && s >= 0; + var h = a > 0 ? c : U; + var w = d(r); + var y = w || r; + var m = l.bind(0, y); + rr(e); + e = h(m, a); + if (p && !t) { + t = c(g, s); + } + n = i = y; + } else { + l(r); + } + }; + p._ = g; + return p; + }; + var tr = { + opacity: 1, + zindex: 1 + }; + var nr = function parseToZeroOrNumber(r, a) { + var e = a ? parseFloat(r) : parseInt(r, 10); + return Number.isNaN(e) ? 0 : e; + }; + var ir = function adaptCSSVal(r, a) { + return !tr[r.toLowerCase()] && isNumber(a) ? a + "px" : a; + }; + var vr = function getCSSVal(r, a, e) { + return null != a ? a[e] || a.getPropertyValue(e) : r.style[e]; + }; + var or = function setCSSVal(r, a, e) { + try { + if (r) { + var t = r.style; + if (!isUndefined(t[a])) { + t[a] = ir(a, e); } else { - removeAttr(_viewport, attribute); + t.setProperty(a, e); } } - }); + } catch (n) {} }; - const onTrinsicChanged = (heightIntrinsicCache) => { - const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache; - setState({ _heightIntrinsic: heightIntrinsic }); - structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged }); + var ur = function topRightBottomLeft(r, a, e) { + var t = a ? a + "-" : ""; + var n = e ? "-" + e : ""; + var i = t + "top" + n; + var v = t + "right" + n; + var o = t + "bottom" + n; + var u = t + "left" + n; + var f = style(r, [ i, v, o, u ]); + return { + t: nr(f[i]), + r: nr(f[v]), + b: nr(f[o]), + l: nr(f[u]) + }; }; - const onSizeChanged = ({ - _sizeChanged, - _directionIsRTLCache, - _appear - }) => { - const updateFn = !_sizeChanged || _appear ? structureSetupUpdate : structureSetupUpdateWithDebouncedAdaptiveUpdateHints; - let directionChanged = false; - if (_directionIsRTLCache) { - const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache; - directionChanged = directionIsRTLChanged; - setState({ _directionIsRTL: directionIsRTL }); - } - updateFn({ _sizeChanged, _directionChanged: directionChanged }); + var fr = { + w: 0, + h: 0 }; - const onContentMutation = (contentChangedTroughEvent) => { - const [, contentSizeChanged] = updateContentSizeCache(); - const updateFn = contentChangedTroughEvent ? structureSetupUpdate : structureSetupUpdateWithDebouncedAdaptiveUpdateHints; - if (contentSizeChanged) { - updateFn({ - _contentMutation: true - }); - } + var sr = function windowSize() { + return { + w: window.innerWidth, + h: window.innerHeight + }; }; - const onHostMutation = (targetChangedAttrs, targetStyleChanged) => { - if (targetStyleChanged) { - structureSetupUpdateWithDebouncedAdaptiveUpdateHints({ - _hostMutation: true - }); - } else if (!_viewportIsTarget) { - updateViewportAttrsFromHost(targetChangedAttrs); - } + var cr = function offsetSize(r) { + return r ? { + w: r.offsetWidth, + h: r.offsetHeight + } : fr; }; - const destroyTrinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged); - const destroySizeObserver = !_viewportIsTarget && createSizeObserver(_host, onSizeChanged, { - _appear: true, - _direction: !_nativeScrollbarStyling - }); - const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, { - _styleChangingAttributes: baseStyleChangingAttrs, - _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget) - }); - const viewportIsTargetResizeObserver = _viewportIsTarget && new ResizeObserverConstructor(onSizeChanged.bind(0, { _sizeChanged: true })); - viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host); - updateViewportAttrsFromHost(); - return [ - (checkOption) => { - const [ignoreMutation] = checkOption("updating.ignoreMutation"); - const [attributes, attributesChanged] = checkOption("updating.attributes"); - const [elementEvents, elementEventsChanged] = checkOption("updating.elementEvents"); - const [debounceValue, debounceChanged] = checkOption("updating.debounce"); - const updateContentMutationObserver = elementEventsChanged || attributesChanged; - const ignoreMutationFromOptions = (mutation) => isFunction(ignoreMutation) && ignoreMutation(mutation); - if (updateContentMutationObserver) { - if (contentMutationObserver) { - contentMutationObserver[1](); - contentMutationObserver[0](); - } - contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, { - _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []), - _attributes: contentMutationObserverAttr.concat(attributes || []), - _eventContentChange: elementEvents, - _nestedTargetSelector: hostSelector, - _ignoreContentChange: (mutation, isNestedTarget) => { - const { target, attributeName } = mutation; - const ignore = !isNestedTarget && attributeName ? liesBetween(target, hostSelector, viewportSelector) : false; - return ignore || !!ignoreMutationFromOptions(mutation); + var lr = function clientSize(r) { + return r ? { + w: r.clientWidth, + h: r.clientHeight + } : fr; + }; + var dr = function scrollSize(r) { + return r ? { + w: r.scrollWidth, + h: r.scrollHeight + } : fr; + }; + var gr = function fractionalSize(r) { + var a = parseFloat(style(r, "height")) || 0; + var e = parseFloat(style(r, "height")) || 0; + return { + w: e - Math.round(e), + h: a - Math.round(a) + }; + }; + var pr = function getBoundingClientRect(r) { + return r.getBoundingClientRect(); + }; + var hr; + var wr = function supportPassiveEvents() { + if (isUndefined(hr)) { + hr = false; + try { + window.addEventListener("test", null, Object.defineProperty({}, "passive", { + get: function get() { + hr = true; } - }); - } - if (debounceChanged) { - structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush(); - if (isArray(debounceValue)) { - const timeout = debounceValue[0]; - const maxWait = debounceValue[1]; - debounceTimeout = isNumber(timeout) ? timeout : false; - debounceMaxDelay = isNumber(maxWait) ? maxWait : false; - } else if (isNumber(debounceValue)) { - debounceTimeout = debounceValue; - debounceMaxDelay = false; - } else { - debounceTimeout = false; - debounceMaxDelay = false; - } - } - }, - () => { - contentMutationObserver && contentMutationObserver[0](); - destroyTrinsicObserver && destroyTrinsicObserver(); - destroySizeObserver && destroySizeObserver(); - viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect(); - destroyHostMutationObserver(); + })); + } catch (r) {} } - ]; -}; - -const initialStructureSetupUpdateState = { - _padding: { - t: 0, - r: 0, - b: 0, - l: 0 - }, - _paddingAbsolute: false, - _viewportPaddingStyle: { - marginRight: 0, - marginBottom: 0, - marginLeft: 0, - paddingTop: 0, - paddingRight: 0, - paddingBottom: 0, - paddingLeft: 0 - }, - _overflowAmount: { + return hr; + }; + var yr = function splitEventNames(r) { + return r.split(" "); + }; + var mr = function off(r, a, e, t) { + each(yr(a), (function(a) { + r.removeEventListener(a, e, t); + })); + }; + var br = function on(r, a, e, t) { + var n = wr(); + var i = n && t && t.S || false; + var o = t && t.C || false; + var u = t && t.O || false; + var s = []; + var c = n ? { + passive: i, + capture: o + } : o; + each(yr(a), (function(a) { + var t = u ? function(n) { + r.removeEventListener(a, t, o); + e && e(n); + } : e; + v(s, mr.bind(null, r, a, t, o)); + r.addEventListener(a, t, c); + })); + return f.bind(0, s); + }; + var _r = function stopPropagation(r) { + return r.stopPropagation(); + }; + var Sr = function preventDefault(r) { + return r.preventDefault(); + }; + var Cr = function stopAndPrevent(r) { + return _r(r) || Sr(r); + }; + var Or = { x: 0, y: 0 - }, - _overflowStyle: { - x: "hidden", - y: "hidden" - }, - _hasOverflow: { - x: false, - y: false - }, - _heightIntrinsic: false, - _directionIsRTL: false -}; -const createStructureSetup = (target, options) => { - const checkOptionsFallback = createOptionCheck(options, {}); - const state = createState(initialStructureSetupUpdateState); - const onUpdatedListeners = /* @__PURE__ */ new Set(); - const [getState] = state; - const runOnUpdatedListeners = (updateHints, changedOptions, force) => { - runEach(onUpdatedListeners, [updateHints, changedOptions || {}, !!force]); }; - const [elements, destroyElements] = createStructureSetupElements(target); - const updateStructure = createStructureSetupUpdate(elements, state); - const [updateObservers, destroyObservers] = createStructureSetupObservers(elements, state, (updateHints) => { - runOnUpdatedListeners(updateStructure(checkOptionsFallback, updateHints)); - }); - const structureSetupState = getState.bind(0); - structureSetupState._addOnUpdatedListener = (listener) => { - onUpdatedListeners.add(listener); + var Ar = function absoluteCoordinates(r) { + var a = r ? pr(r) : 0; + return a ? { + x: a.left + window.pageYOffset, + y: a.top + window.pageXOffset + } : Or; }; - structureSetupState._elements = elements; - return [ - (changedOptions, force) => { - const checkOption = createOptionCheck(options, changedOptions, force); - updateObservers(checkOption); - runOnUpdatedListeners(updateStructure(checkOption, {}, force)); - }, - structureSetupState, - () => { - onUpdatedListeners.clear(); - destroyObservers(); - destroyElements(); + var xr = function manageListener(r, a) { + each(isArray(a) ? a : [ a ], r); + }; + var Dr = function createEventListenerHub(r) { + function removeEvent(r, e) { + if (r) { + var t = a.get(r); + xr((function(r) { + if (t) { + t[r ? "delete" : "clear"](r); + } + }), e); + } else { + a.forEach((function(r) { + r.clear(); + })); + a.clear(); + } } - ]; -}; - -const generateScrollbarDOM = (scrollbarClassName) => { - const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`); - const track = createDiv(classNameScrollbarTrack); - const handle = createDiv(classNameScrollbarHandle); - appendChildren(scrollbar, track); - appendChildren(track, handle); - return { - _scrollbar: scrollbar, - _track: track, - _handle: handle - }; -}; -const createScrollbarsSetupElements = (target, structureSetupElements) => { - const { _getInitializationStrategy } = getEnvironment(); - const { _scrollbarsSlot: environmentScrollbarSlot } = _getInitializationStrategy(); - const { _target, _host, _viewport, _targetIsElm } = structureSetupElements; - const initializationScrollbarSlot = !_targetIsElm && target.scrollbarsSlot; - const initializationScrollbarSlotResult = isFunction(initializationScrollbarSlot) ? initializationScrollbarSlot(_target, _host, _viewport) : initializationScrollbarSlot; - const evaluatedScrollbarSlot = initializationScrollbarSlotResult || (isFunction(environmentScrollbarSlot) ? environmentScrollbarSlot(_target, _host, _viewport) : environmentScrollbarSlot) || _host; - const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal); - const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical); - const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure; - const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure; - appendChildren(evaluatedScrollbarSlot, horizontalScrollbar); - appendChildren(evaluatedScrollbarSlot, verticalScrollbar); - return [ - { - _horizontalScrollbarStructure: horizontalScrollbarStructure, - _verticalScrollbarStructure: verticalScrollbarStructure - }, - removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]) - ]; -}; - -const createScrollbarsSetup = (target, options, structureSetupElements) => { - const state = createState({}); - const [getState] = state; - const [elements, destroyElements] = createScrollbarsSetupElements(target, structureSetupElements); - const scrollbarsSetupState = getState.bind(0); - scrollbarsSetupState._elements = elements; - return [ - (changedOptions, force) => { - const checkOption = createOptionCheck(options, changedOptions, force); - console.log(checkOption); - }, - scrollbarsSetupState, - () => { - destroyElements(); + function addEvent(r, e) { + var t = a.get(r) || new Set; + a.set(r, t); + xr((function(r) { + r && t.add(r); + }), e); + return removeEvent.bind(0, r, e); } - ]; -}; - -const pluginRegistry = {}; -const getPlugins = () => assignDeep({}, pluginRegistry); -const addPlugin = (addedPlugin) => each(isArray(addedPlugin) ? addedPlugin : [addedPlugin], (plugin) => { - pluginRegistry[plugin[0]] = plugin[1]; -}); - -const optionsValidationPluginName = "__osOptionsValidationPlugin"; - -const targets = /* @__PURE__ */ new Set(); -const targetInstanceMap = /* @__PURE__ */ new WeakMap(); -const addInstance = (target, osInstance) => { - targetInstanceMap.set(target, osInstance); - targets.add(target); -}; -const removeInstance = (target) => { - targetInstanceMap.delete(target); - targets.delete(target); -}; -const getInstance = (target) => targetInstanceMap.get(target); - -const createOSEventListenerHub = (initialEventListeners) => createEventListenerHub(initialEventListeners); - -const OverlayScrollbars = (target, options, eventListeners) => { - const { - _getDefaultOptions, - _nativeScrollbarIsOverlaid, - _addListener: addEnvListener - } = getEnvironment(); - const plugins = getPlugins(); - const instanceTarget = isHTMLElement(target) ? target : target.target; - const potentialInstance = getInstance(instanceTarget); - if (potentialInstance) { - return potentialInstance; - } - const optionsValidationPlugin = plugins[optionsValidationPluginName]; - const validateOptions = (newOptions) => { - const opts = newOptions || {}; - const validate = optionsValidationPlugin && optionsValidationPlugin._; - return validate ? validate(opts, true) : opts; + function triggerEvent(r) { + for (var e = arguments.length, t = new Array(e > 1 ? e - 1 : 0), n = 1; n < e; n++) { + t[n - 1] = arguments[n]; + } + var i = a.get(r); + each(o(i), (function(r) { + if (t) { + r(t); + } else { + r(); + } + })); + } + var a = new Map; + var e = c(r); + each(e, (function(a) { + addEvent(a, r[a]); + })); + return [ addEvent, removeEvent, triggerEvent ]; }; - const currentOptions = assignDeep({}, _getDefaultOptions(), validateOptions(options)); - const [addEvent, removeEvent, triggerEvent] = createOSEventListenerHub(eventListeners); - if (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y && !currentOptions.nativeScrollbarsOverlaid.initialize) { - triggerEvent("initializationWithdrawn"); - } - const [updateStructure, structureState, destroyStructure] = createStructureSetup(target, currentOptions); - const [updateScrollbars, , destroyScrollbars] = createScrollbarsSetup(target, currentOptions, structureState._elements); - const update = (changedOptions, force) => { - updateStructure(changedOptions, force); - updateScrollbars(changedOptions, force); + var Er = function getPropByPath(r, a) { + return r ? a.split(".").reduce((function(r, a) { + return r && s(r, a) ? r[a] : void 0; + }), r) : void 0; }; - const removeEnvListener = addEnvListener(update.bind(0, {}, true)); - structureState._addOnUpdatedListener((updateHints, changedOptions, force) => { - const { - _sizeChanged, - _directionChanged, - _heightIntrinsicChanged, - _overflowAmountChanged, - _overflowStyleChanged, - _contentMutation, - _hostMutation - } = updateHints; - triggerEvent("updated", { - updateHints: { - sizeChanged: _sizeChanged, - directionChanged: _directionChanged, - heightIntrinsicChanged: _heightIntrinsicChanged, - overflowAmountChanged: _overflowAmountChanged, - overflowStyleChanged: _overflowStyleChanged, - contentMutation: _contentMutation, - hostMutation: _hostMutation - }, - changedOptions, - force - }); - }); - const instance = { - options(newOptions) { - if (newOptions) { - const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions)); - if (!isEmptyObject(changedOptions)) { - assignDeep(currentOptions, changedOptions); - update(changedOptions); + var zr = function createOptionCheck(r, a, e) { + return function(t) { + return [ Er(r, t), e || void 0 !== Er(a, t) ]; + }; + }; + var Lr = function createState(r) { + var a = r; + return [ function() { + return a; + }, function(r) { + a = assignDeep({}, a, r); + } ]; + }; + var Ir = "os-environment"; + var Tr = Ir + "-flexbox-glue"; + var Mr = Tr + "-max"; + var Pr = "data-overlayscrollbars"; + var Fr = Pr + "-overflow-x"; + var Rr = Pr + "-overflow-y"; + var Nr = "overflowVisible"; + var jr = "viewportStyled"; + var Br = "os-padding"; + var Vr = "os-viewport"; + var kr = Vr + "-arrange"; + var Hr = "os-content"; + var Ur = Vr + "-scrollbar-styled"; + var qr = "os-overflow-visible"; + var Wr = "os-size-observer"; + var Gr = Wr + "-appear"; + var Xr = Wr + "-listener"; + var Yr = Xr + "-scroll"; + var $r = Xr + "-item"; + var Jr = $r + "-final"; + var Kr = "os-trinsic-observer"; + var Zr = "os-scrollbar"; + var Qr = Zr + "-horizontal"; + var ra = Zr + "-vertical"; + var aa = "os-scrollbar-track"; + var ea = "os-scrollbar-handle"; + var ta = function opsStringify(r) { + return JSON.stringify(r, (function(r, a) { + if (isFunction(a)) { + throw new Error; + } + return a; + })); + }; + var na = { + paddingAbsolute: false, + updating: { + elementEvents: [ [ "img", "load" ] ], + debounce: [ 0, 33 ], + attributes: null, + ignoreMutation: null + }, + overflow: { + x: "scroll", + y: "scroll" + }, + nativeScrollbarsOverlaid: { + show: false, + initialize: false + }, + scrollbars: { + visibility: "auto", + autoHide: "never", + autoHideDelay: 800, + dragScroll: true, + clickScroll: false, + touch: true + } + }; + var ia = function getOptionsDiff(r, a) { + var e = {}; + var t = c(a).concat(c(r)); + each(t, (function(t) { + var n = r[t]; + var i = a[t]; + if (isObject(n) && isObject(i)) { + assignDeep(e[t] = {}, getOptionsDiff(n, i)); + } else if (s(a, t) && i !== n) { + var v = true; + if (isArray(n) || isArray(i)) { + try { + if (ta(n) === ta(i)) { + v = false; + } + } catch (o) {} + } + if (v) { + e[t] = i; } } - return assignDeep({}, currentOptions); - }, - on: addEvent, - off: removeEvent, - state() { - const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } = structureState(); - return assignDeep({}, { - overflowAmount: _overflowAmount, - overflowStyle: _overflowStyle, - hasOverflow: _hasOverflow, - padding: _padding, - paddingAbsolute: _paddingAbsolute - }); - }, - elements() { - const { _target, _host, _padding, _viewport, _content } = structureState._elements; - return assignDeep({}, { - target: _target, - host: _host, - padding: _padding || _viewport, - viewport: _viewport, - content: _content || _viewport - }); - }, - update(force) { - update({}, force); - }, - destroy: () => { - removeInstance(instanceTarget); - removeEnvListener(); - removeEvent(); - destroyScrollbars(); - destroyStructure(); - triggerEvent("destroyed"); + })); + return e; + }; + var va; + var oa = Math.abs, ua = Math.round; + var fa = function diffBiggerThanOne(r, a) { + var e = oa(r); + var t = oa(a); + return !(e === t || e + 1 === t || e - 1 === t); + }; + var sa = function getNativeScrollbarSize(r, a, e) { + O(r, a); + var t = lr(a); + var n = cr(a); + var i = gr(e); + return { + x: n.h - t.h + i.h, + y: n.w - t.w + i.w + }; + }; + var ca = function getNativeScrollbarStyling(r) { + var a = false; + var e = Y(r, Ur); + try { + a = "none" === style(r, N("scrollbar-width")) || "none" === window.getComputedStyle(r, "::-webkit-scrollbar").getPropertyValue("display"); + } catch (t) {} + e(); + return a; + }; + var la = function getRtlScrollBehavior(r, a) { + var e = "hidden"; + style(r, { + overflowX: e, + overflowY: e, + direction: "rtl" + }); + scrollLeft(r, 0); + var t = Ar(r); + var n = Ar(a); + scrollLeft(r, -999); + var i = Ar(a); + return { + i: t.x === n.x, + n: n.x !== i.x + }; + }; + var da = function getFlexboxGlue(r, a) { + var e = Y(r, Tr); + var t = pr(r); + var n = pr(a); + var i = Q(n, t, true); + var v = Y(r, Mr); + var o = pr(r); + var u = pr(a); + var f = Q(u, o, true); + e(); + v(); + return i && f; + }; + var ga = function getWindowDPR() { + var r = window.screen.deviceXDPI || 0; + var a = window.screen.logicalXDPI || 1; + return window.devicePixelRatio || r / a; + }; + var pa = function getDefaultInitializationStrategy(r) { + return { + A: !r, + D: false + }; + }; + var ha = function createEnvironment() { + var r = document, a = r.body; + var e = L('
'); + var t = e[0]; + var n = t.firstChild; + var i = Dr(), v = i[0], o = i[2]; + var u = createCache({ + v: sa(a, t, n), + o: K + }), f = u[0], s = u[1]; + var c = s(), l = c[0]; + var d = ca(t); + var p = { + x: 0 === l.x, + y: 0 === l.y + }; + var h = pa(d); + var w = assignDeep({}, na); + var y = { + L: l, + I: p, + T: d, + M: "-1" === style(t, "zIndex"), + P: la(t, n), + F: da(t, n), + R: function _addListener(r) { + return v("_", r); + }, + N: assignDeep.bind(0, {}, h), + j: function _setInitializationStrategy(r) { + assignDeep(h, r); + }, + B: assignDeep.bind(0, {}, w), + V: function _setDefaultOptions(r) { + assignDeep(w, r); + }, + k: assignDeep({}, h), + H: assignDeep({}, w) + }; + g(t, "style"); + E(t); + if (!d && (!p.x || !p.y)) { + var m = sr(); + var b = ga(); + window.addEventListener("resize", (function() { + var r = sr(); + var e = { + w: r.w - m.w, + h: r.h - m.h + }; + if (0 === e.w && 0 === e.h) { + return; + } + var i = { + w: oa(e.w), + h: oa(e.h) + }; + var v = { + w: oa(ua(r.w / (m.w / 100))), + h: oa(ua(r.h / (m.h / 100))) + }; + var u = ga(); + var s = i.w > 2 && i.h > 2; + var c = !fa(v.w, v.h); + var l = u !== b && b > 0; + var d = s && c && l; + if (d) { + var g = f(sa(a, t, n)), p = g[0], h = g[1]; + assignDeep(va.L, p); + E(t); + if (h) { + o("_"); + } + } + m = r; + b = u; + })); + } + return y; + }; + var wa = function getEnvironment() { + if (!va) { + va = ha(); + } + return va; + }; + var ya = function staticInitializationElement(r, a, e, t) { + var n = t || (isFunction(e) ? e.apply(0, r) : e); + return (isFunction(n) ? n.apply(0, r) : n) || a.apply(0, r); + }; + var ma = function dynamicInitializationElement(r, a, e, t) { + var n = isBoolean(t) || !!t; + var i = n ? t : isFunction(e) ? e.apply(0, r) : e; + return true === i || isNull(i) || isUndefined(i) || isFunction(i) ? a.apply(0, r) : i; + }; + var ba = 0; + var _a = z.bind(0, ""); + var Sa = function unwrap(r) { + O(b(r), m(r)); + E(r); + }; + var Ca = function createUniqueViewportArrangeElement() { + var r = wa(), a = r.T, e = r.I, t = r.M; + var n = !t && !a && (e.x || e.y); + var i = n ? document.createElement("style") : false; + if (i) { + attr(i, "id", kr + "-" + ba); + ba++; + } + return i; + }; + var Oa = function addDataAttrHost(r, a) { + attr(r, Pr, a || ""); + return g.bind(0, r, Pr); + }; + var Aa = function createStructureSetupElements(r) { + var a = wa(), e = a.N, t = a.T; + var n = e(), o = n.U, u = n.q, s = n.A, p = n.D; + var h = isHTMLElement(r); + var w = r; + var _ = h ? r : w.target; + var S = y(_, "textarea"); + var C = !S && y(_, "body"); + var A = _.ownerDocument; + var z = A.body; + var L = A.defaultView; + var I = !!k && t; + var T = ya.bind(0, [ _ ]); + var M = ma.bind(0, [ _ ]); + var P = T(_a, u, w.viewport); + var F = P === _; + var R = I && F; + var N = F && !R ? T(_a) : P; + var j = { + W: _, + U: S ? T(_a, o, w.host) : _, + q: N, + A: M(_a, s, w.padding), + D: M(_a, p, w.content), + G: !R && Ca(), + X: L, + Y: A, + $: b(z), + J: z, + K: S, + Z: C, + rr: h, + ar: R, + er: function _viewportHasClass(r, a) { + return R ? d(N, Pr, a) : G(N, r); + }, + tr: function _viewportAddRemoveClass(r, a, e) { + return R ? l(N, Pr, a, e) : (e ? Y : X)(N, r); + } + }; + var B = c(j).reduce((function(r, a) { + var e = j[a]; + return v(r, e && !b(e) ? e : false); + }), []); + var V = function elementIsGenerated(r) { + return r ? i(B, r) > -1 : null; + }; + var H = j.W, U = j.U, q = j.A, W = j.q, $ = j.D, J = j.G; + var K = []; + var Z = S && V(U); + var Q = S ? H : m([ $, W, q, U, H ].find((function(r) { + return false === V(r); + }))); + var rr = $ || W; + var ar = Oa(U, R ? "viewport" : "host"); + var er = Y(q, Br); + var tr = Y(W, !R && Vr); + var nr = Y($, Hr); + if (Z) { + D(H, U); + v(K, (function() { + D(U, H); + E(U); + })); + } + O(rr, Q); + O(U, q); + O(q || U, !R && W); + O(W, $); + v(K, (function() { + ar(); + g(W, Fr); + g(W, Rr); + if (V($)) { + Sa($); + } + if (V(W)) { + Sa(W); + } + if (V(q)) { + Sa(q); + } + er(); + tr(); + nr(); + })); + if (t && !R) { + v(K, X.bind(0, W, Ur)); + } + if (J) { + x(W, J); + v(K, E.bind(0, J)); + } + return [ j, f.bind(0, K) ]; + }; + var xa = function createTrinsicUpdate(r, a) { + var e = r.D; + var t = a[0]; + return function(r) { + var a = wa(), n = a.F; + var i = t(), v = i.nr; + var o = r.ir; + var u = (e || !n) && o; + if (u) { + style(e, { + height: v ? "" : "100%" + }); + } + return { + vr: u, + ur: u + }; + }; + }; + var Da = function createPaddingUpdate(r, a) { + var e = a[0], t = a[1]; + var n = r.U, i = r.A, v = r.q, o = r.ar; + var u = createCache({ + o: Z, + v: ur() + }, ur.bind(0, n, "padding", "")), f = u[0], s = u[1]; + return function(r, a, n) { + var u = s(n), c = u[0], l = u[1]; + var d = wa(), g = d.T, p = d.F; + var h = e(), w = h.sr; + var y = r.vr, m = r.ur, b = r.cr; + var _ = a("paddingAbsolute"), S = _[0], C = _[1]; + var O = !p && m; + if (y || l || O) { + var A = f(n); + c = A[0]; + l = A[1]; + } + var x = !o && (C || b || l); + if (x) { + var D = !S || !i && !g; + var E = c.r + c.l; + var z = c.t + c.b; + var L = { + marginRight: D && !w ? -E : 0, + marginBottom: D ? -z : 0, + marginLeft: D && w ? -E : 0, + top: D ? -c.t : 0, + right: D ? w ? -c.r : "auto" : 0, + left: D ? w ? "auto" : -c.l : 0, + width: D ? "calc(100% + " + E + "px)" : "" + }; + var I = { + paddingTop: D ? c.t : 0, + paddingRight: D ? c.r : 0, + paddingBottom: D ? c.b : 0, + paddingLeft: D ? c.l : 0 + }; + style(i || v, L); + style(v, I); + t({ + A: c, + lr: !D, + dr: i ? I : assignDeep({}, L, I) + }); + } + return { + gr: x + }; + }; + }; + var Ea = Math.max; + var za = "visible"; + var La = "hidden"; + var Ia = 42; + var Ta = { + o: J, + v: { + w: 0, + h: 0 } }; - each(keys(plugins), (pluginName) => { - const pluginInstance = plugins[pluginName]; - if (isFunction(pluginInstance)) { - pluginInstance(OverlayScrollbars, instance); + var Ma = { + o: K, + v: { + x: La, + y: La } - }); - instance.update(true); - addInstance(instanceTarget, instance); - triggerEvent("initialized"); - return instance; -}; -OverlayScrollbars.plugin = addPlugin; -OverlayScrollbars.env = () => { - const { - _nativeScrollbarSize, - _nativeScrollbarIsOverlaid, - _nativeScrollbarStyling, - _rtlScrollBehavior, - _flexboxGlue, - _cssCustomProperties, - _defaultInitializationStrategy, - _defaultDefaultOptions, - _getInitializationStrategy, - _setInitializationStrategy, - _getDefaultOptions, - _setDefaultOptions - } = getEnvironment(); - return assignDeep({}, { - scrollbarSize: _nativeScrollbarSize, - scrollbarIsOverlaid: _nativeScrollbarIsOverlaid, - scrollbarStyling: _nativeScrollbarStyling, - rtlScrollBehavior: _rtlScrollBehavior, - flexboxGlue: _flexboxGlue, - cssCustomProperties: _cssCustomProperties, - defaultInitializationStrategy: _defaultInitializationStrategy, - defaultDefaultOptions: _defaultDefaultOptions, - getInitializationStrategy: _getInitializationStrategy, - setInitializationStrategy: _setInitializationStrategy, - getDefaultOptions: _getDefaultOptions, - setDefaultOptions: _setDefaultOptions - }); -}; - -export { OverlayScrollbars as default }; + }; + var Pa = function getOverflowAmount(r, a, e) { + var t = window.devicePixelRatio % 1 !== 0 ? 1 : 0; + var n = { + w: Ea(0, r.w - a.w - Ea(0, e.w)), + h: Ea(0, r.h - a.h - Ea(0, e.h)) + }; + return { + w: n.w > t ? n.w : 0, + h: n.h > t ? n.h : 0 + }; + }; + var Fa = function conditionalClass(r, a, e) { + return e ? Y(r, a) : X(r, a); + }; + var Ra = function overflowIsVisible(r) { + return 0 === r.indexOf(za); + }; + var Na = function createOverflowUpdate(r, a) { + var e = a[0], t = a[1]; + var n = r.U, i = r.A, v = r.q, o = r.G, u = r.ar, f = r.tr; + var s = wa(), d = s.L, g = s.F, p = s.T, h = s.I; + var w = !u && !p && (h.x || h.y); + var y = createCache(Ta, gr.bind(0, v)), m = y[0], b = y[1]; + var _ = createCache(Ta, dr.bind(0, v)), S = _[0], C = _[1]; + var O = createCache(Ta), A = O[0], x = O[1]; + var D = createCache(Ma), E = D[0]; + var z = function fixFlexboxGlue(r, a) { + style(v, { + height: "" + }); + if (a) { + var t = e(), i = t.lr, o = t.A; + var u = r.pr, f = r.hr; + var s = gr(n); + var c = lr(n); + var l = "content-box" === style(v, "boxSizing"); + var d = i || l ? o.b + o.t : 0; + var g = !(h.x && l); + style(v, { + height: c.h + s.h + (u.x && g ? f.x : 0) - d + }); + } + }; + var L = function getViewportOverflowState(r, a) { + var e = !p && !r ? Ia : 0; + var t = function getStatePerAxis(r, t, n) { + var i = style(v, r); + var o = a ? a[r] : i; + var u = "scroll" === o; + var f = t ? e : n; + var s = u && !p ? f : 0; + var c = t && !!e; + return [ i, u, s, c ]; + }; + var n = t("overflowX", h.x, d.x), i = n[0], o = n[1], u = n[2], f = n[3]; + var s = t("overflowY", h.y, d.y), c = s[0], l = s[1], g = s[2], w = s[3]; + return { + wr: { + x: i, + y: c + }, + pr: { + x: o, + y: l + }, + hr: { + x: u, + y: g + }, + yr: { + x: f, + y: w + } + }; + }; + var I = function setViewportOverflowState(r, a, e, t) { + var n = function setAxisOverflowStyle(r, a) { + var e = Ra(r); + var t = a && e && r.replace(za + "-", "") || ""; + return [ a && !e ? r : "", Ra(t) ? "hidden" : t ]; + }; + var i = n(e.x, a.x), v = i[0], o = i[1]; + var u = n(e.y, a.y), f = u[0], s = u[1]; + t.overflowX = o && f ? o : v; + t.overflowY = s && v ? s : f; + return L(r, t); + }; + var T = function arrangeViewport(r, a, t, n) { + if (w) { + var i = e(), u = i.dr; + var f = r.hr, s = r.yr; + var c = s.x, l = s.y; + var d = f.x, g = f.y; + var p = n ? "paddingRight" : "paddingLeft"; + var h = u[p]; + var y = u.paddingTop; + var m = a.w + t.w; + var b = a.h + t.h; + var _ = { + w: g && l ? g + m - h + "px" : "", + h: d && c ? d + b - y + "px" : "" + }; + if (o) { + var S = o.sheet; + if (S) { + var C = S.cssRules; + if (C) { + if (!C.length) { + S.insertRule("#" + attr(o, "id") + " + ." + kr + "::before {}", 0); + } + var O = C[0].style; + O.width = _.w; + O.height = _.h; + } + } + } else { + style(v, { + "--os-vaw": _.w, + "--os-vah": _.h + }); + } + } + return w; + }; + var M = function hideNativeScrollbars(r, a, t, n) { + var i = r.hr, v = r.yr; + var o = v.x, u = v.y; + var f = i.x, s = i.y; + var c = e(), l = c.dr; + var d = a ? "marginLeft" : "marginRight"; + var g = a ? "paddingLeft" : "paddingRight"; + var p = l[d]; + var h = l.marginBottom; + var w = l[g]; + var y = l.paddingBottom; + n.width = "calc(100% + " + (s + -1 * p) + "px)"; + n[d] = -s + p; + n.marginBottom = -f + h; + if (t) { + n[g] = w + (u ? s : 0); + n.paddingBottom = y + (o ? f : 0); + } + }; + var P = function undoViewportArrange(r, a, t) { + if (w) { + var n = t || L(r); + var i = e(), o = i.dr; + var u = n.yr; + var f = u.x, s = u.y; + var l = {}; + var d = function assignProps(r) { + return each(r.split(" "), (function(r) { + l[r] = o[r]; + })); + }; + if (f) { + d("marginBottom paddingTop paddingBottom"); + } + if (s) { + d("marginLeft marginRight paddingLeft paddingRight"); + } + var p = style(v, c(l)); + X(v, kr); + if (!g) { + l.height = ""; + } + style(v, l); + return [ function() { + M(n, a, w, p); + style(v, p); + Y(v, kr); + }, n ]; + } + return [ ar ]; + }; + return function(r, a, o) { + var s = r.vr, c = r.mr, d = r.ur, w = r.gr, y = r.ir, _ = r.cr; + var O = e(), D = O.nr, F = O.sr; + var R = a("nativeScrollbarsOverlaid.show"), N = R[0], j = R[1]; + var B = a("overflow"), V = B[0], k = B[1]; + var H = N && h.x && h.y; + var U = !u && !g && (s || d || c || j || y); + var q = Ra(V.x); + var W = Ra(V.y); + var G = q || W; + var X = b(o); + var Y = C(o); + var $ = x(o); + var J; + if (j && p) { + f(Ur, jr, !H); + } + if (U) { + J = L(H); + z(J, D); + } + if (s || w || d || _ || j) { + if (G) { + f(qr, Nr, false); + } + var K = P(H, F, J), Z = K[0], Q = K[1]; + var rr = X = m(o), ar = rr[0], er = rr[1]; + var tr = Y = S(o), nr = tr[0], ir = tr[1]; + var vr = lr(v); + var or = nr; + var ur = vr; + Z(); + if ((ir || er || j) && Q && !H && T(Q, nr, ar, F)) { + ur = lr(v); + or = dr(v); + } + $ = A(Pa({ + w: Ea(nr.w, or.w), + h: Ea(nr.h, or.h) + }, { + w: ur.w + Ea(0, vr.w - nr.w), + h: ur.h + Ea(0, vr.h - nr.h) + }, ar), o); + } + var fr = $, sr = fr[0], cr = fr[1]; + var gr = Y, pr = gr[0], hr = gr[1]; + var wr = X, yr = wr[0], mr = wr[1]; + var br = { + x: sr.w > 0, + y: sr.h > 0 + }; + var _r = q && W && (br.x || br.y) || q && br.x && !br.y || W && br.y && !br.x; + if (w || _ || mr || hr || cr || k || j || U) { + var Sr = { + marginRight: 0, + marginBottom: 0, + marginLeft: 0, + width: "", + overflowY: "", + overflowX: "" + }; + var Cr = I(H, br, V, Sr); + var Or = T(Cr, pr, yr, F); + if (!u) { + M(Cr, F, Or, Sr); + } + if (U) { + z(Cr, D); + } + if (u) { + attr(n, Fr, Sr.overflowX); + attr(n, Rr, Sr.overflowY); + } else { + style(v, Sr); + } + } + l(n, Pr, Nr, _r); + Fa(i, qr, _r); + !u && Fa(v, qr, G); + var Ar = E(L(H).wr), xr = Ar[0], Dr = Ar[1]; + t({ + wr: xr, + br: { + x: sr.w, + y: sr.h + }, + _r: br + }); + return { + Sr: Dr, + Cr: cr + }; + }; + }; + var ja = function prepareUpdateHints(r, a, e) { + var t = {}; + var n = a || {}; + var i = c(r).concat(c(n)); + each(i, (function(a) { + var i = r[a]; + var v = n[a]; + t[a] = !!(e || i || v); + })); + return t; + }; + var Ba = function createStructureSetupUpdate(r, a) { + var e = r.q; + var t = wa(), n = t.T, i = t.I, v = t.F; + var o = !n && (i.x || i.y); + var u = [ xa(r, a), Da(r, a), Na(r, a) ]; + return function(r, a, t) { + var n = ja(assignDeep({ + vr: false, + gr: false, + cr: false, + ir: false, + Cr: false, + Sr: false, + mr: false, + ur: false + }, a), {}, t); + var i = o || !v; + var f = i && scrollLeft(e); + var s = i && scrollTop(e); + var c = n; + each(u, (function(a) { + c = ja(c, a(c, r, !!t) || {}, t); + })); + if (isNumber(f)) { + scrollLeft(e, f); + } + if (isNumber(s)) { + scrollTop(e, s); + } + return c; + }; + }; + var Va = "animationstart"; + var ka = "scroll"; + var Ha = 3333333; + var Ua = function getElmDirectionIsRTL(r) { + return "rtl" === style(r, "direction"); + }; + var qa = function domRectHasDimensions(r) { + return r && (r.height || r.width); + }; + var Wa = function createSizeObserver(r, a, e) { + var t = e || {}, n = t.Or, i = void 0 === n ? false : n, o = t.Ar, u = void 0 === o ? false : o; + var s = wa(), c = s.P; + var l = L('
'); + var d = l[0]; + var g = d.firstChild; + var p = Ua.bind(0, d); + var h = createCache({ + v: void 0, + u: true, + o: function _equal(r, a) { + return !(!r || !qa(r) && qa(a)); + } + }), w = h[0]; + var y = function onSizeChangedCallbackProxy(r) { + var e = isArray(r) && r.length > 0 && isObject(r[0]); + var t = !e && isBoolean(r[0]); + var n = false; + var v = false; + var o = true; + if (e) { + var u = w(r.pop().contentRect), f = u[0], s = u[2]; + var l = qa(f); + var g = qa(s); + n = !s || !l; + v = !g && l; + o = !n; + } else if (t) { + o = r[1]; + } else { + v = true === r; + } + if (i && o) { + var p = t ? r[0] : Ua(d); + scrollLeft(d, p ? c.n ? -Ha : c.i ? 0 : Ha : Ha); + scrollTop(d, Ha); + } + if (!n) { + a({ + vr: !t, + Dr: t ? r : void 0, + Ar: !!v + }); + } + }; + var m = []; + var b = u ? y : false; + var _; + if (k) { + var S = new k(y); + S.observe(g); + v(m, (function() { + S.disconnect(); + })); + } else { + var C = L('
'); + O(g, C); + Y(g, Yr); + var x = C[0]; + var D = x.lastChild; + var z = x.firstChild; + var I = null == z ? void 0 : z.firstChild; + var T = cr(x); + var M = T; + var P = false; + var F; + var R = function reset() { + scrollLeft(z, Ha); + scrollTop(z, Ha); + scrollLeft(D, Ha); + scrollTop(D, Ha); + }; + var N = function onResized(r) { + F = 0; + if (P) { + T = M; + y(true === r); + } + }; + var j = function onScroll(r) { + M = cr(x); + P = !r || !J(M, T); + if (r) { + Cr(r); + if (P && !F) { + H(F); + F = U(N); + } + } else { + N(false === r); + } + R(); + }; + v(m, [ br(z, ka, j), br(D, ka, j) ]); + style(I, { + width: Ha, + height: Ha + }); + R(); + b = u ? j.bind(0, false) : R; + } + if (i) { + _ = createCache({ + v: !p() + }, p); + var B = _, V = B[0]; + v(m, br(d, ka, (function(r) { + var a = V(); + var e = a[0], t = a[1]; + if (t) { + X(g, "ltr rtl"); + if (e) { + Y(g, "rtl"); + } else { + Y(g, "ltr"); + } + y(a); + } + Cr(r); + }))); + } + if (b) { + Y(d, Gr); + v(m, br(d, Va, b, { + O: !!k + })); + } + A(r, d); + return function() { + f(m); + E(d); + }; + }; + var Ga = function isHeightIntrinsic(r) { + return 0 === r.h || r.isIntersecting || r.intersectionRatio > 0; + }; + var Xa = function createTrinsicObserver(r, a) { + var e = z(Kr); + var t = []; + var n = createCache({ + v: false + }), i = n[0]; + var o = function triggerOnTrinsicChangedCallback(r) { + if (r) { + var e = i(Ga(r)); + var t = e[1]; + if (t) { + a(e); + } + } + }; + if (V) { + var u = new V((function(r) { + if (r && r.length > 0) { + o(r.pop()); + } + }), { + root: r + }); + u.observe(e); + v(t, (function() { + u.disconnect(); + })); + } else { + var s = function onSizeChanged() { + var r = cr(e); + o(r); + }; + v(t, Wa(e, s)); + s(); + } + A(r, e); + return function() { + f(t); + E(e); + }; + }; + var Ya = function createEventContentChange(r, a, e) { + var t; + var n = false; + var i = function destroy() { + n = true; + }; + var o = function updateElements(i) { + if (e) { + var o = e.reduce((function(a, e) { + if (e) { + var t = e[0]; + var n = e[1]; + var o = n && t && (i ? i(t) : h(t, r)); + if (o && o.length && n && isString(n)) { + v(a, [ o, n.trim() ], true); + } + } + return a; + }), []); + each(o, (function(r) { + return each(r[0], (function(e) { + var i = r[1]; + var v = t.get(e); + if (v) { + var o = v[0]; + var u = v[1]; + if (o === i) { + u(); + } + } + var f = br(e, i, (function(r) { + if (n) { + f(); + t.delete(e); + } else { + a(r); + } + })); + t.set(e, [ i, f ]); + })); + })); + } + }; + if (e) { + t = new WeakMap; + o(); + } + return [ i, o ]; + }; + var $a = function createDOMObserver(r, a, e, t) { + var n = false; + var o = t || {}, f = o.Er, s = o.zr, c = o.Lr, l = o.Ir, d = o.Tr, g = o.Mr; + var p = Ya(r, er((function() { + if (n) { + e(true); + } + }), { + g: 33, + p: 99 + }), c), w = p[0], m = p[1]; + var b = f || []; + var _ = s || []; + var S = b.concat(_); + var C = function observerCallback(n) { + var o = d || ar; + var f = g || ar; + var s = []; + var c = []; + var p = false; + var w = false; + var b = false; + each(n, (function(e) { + var n = e.attributeName, u = e.target, d = e.type, g = e.oldValue, h = e.addedNodes; + var m = "attributes" === d; + var S = "childList" === d; + var C = r === u; + var O = m && isString(n) ? attr(u, n) : 0; + var A = 0 !== O && g !== O; + var x = i(_, n) > -1 && A; + if (a && !C) { + var D = !m; + var E = m && x; + var z = E && l && y(u, l); + var L = z ? !o(u, n, g, O) : D || E; + var I = L && !f(e, !!z, r, t); + v(c, h); + w = w || I; + b = b || S; + } + if (!a && C && A && !o(u, n, g, O)) { + v(s, n); + p = p || x; + } + })); + if (b && !u(c)) { + m((function(r) { + return c.reduce((function(a, e) { + v(a, h(r, e)); + return y(e, r) ? v(a, e) : a; + }), []); + })); + } + if (a) { + w && e(false); + } else if (!u(s) || p) { + e(s, p); + } + }; + var O = new B(C); + O.observe(r, { + attributes: true, + attributeOldValue: true, + attributeFilter: S, + subtree: a, + childList: a, + characterData: a + }); + n = true; + return [ function() { + if (n) { + w(); + O.disconnect(); + n = false; + } + }, function() { + if (n) { + C(O.takeRecords()); + } + } ]; + }; + var Ja = "[" + Pr + "]"; + var Ka = "." + Vr; + var Za = [ "tabindex" ]; + var Qa = [ "wrap", "cols", "rows" ]; + var re = [ "id", "class", "style", "open" ]; + var ae = function createStructureSetupObservers(r, a, e) { + var t; + var n; + var v; + var o = a[1]; + var u = r.U, f = r.q, s = r.D, l = r.K, d = r.ar, p = r.er, h = r.tr; + var w = wa(), y = w.T, m = w.F; + var b = createCache({ + o: J, + v: { + w: 0, + h: 0 + } + }, (function() { + var r = p(qr, Nr); + r && h(qr, Nr); + var a = dr(s); + var e = dr(f); + var t = gr(f); + r && h(qr, Nr, true); + return { + w: e.w + a.w + t.w, + h: e.h + a.h + t.h + }; + })), _ = b[0]; + var C = l ? Qa : re.concat(Qa); + var O = er(e, { + g: function _timeout() { + return t; + }, + p: function _maxDelay() { + return n; + }, + m: function _mergeParams(r, a) { + var e = r[0]; + var t = a[0]; + return [ c(e).concat(c(t)).reduce((function(r, a) { + r[a] = e[a] || t[a]; + return r; + }), {}) ]; + } + }); + var A = function updateViewportAttrsFromHost(r) { + each(r || Za, (function(r) { + if (i(Za, r) > -1) { + var a = attr(u, r); + if (isString(a)) { + attr(f, r, a); + } else { + g(f, r); + } + } + })); + }; + var x = function onTrinsicChanged(r) { + var a = r[0], t = r[1]; + o({ + nr: a + }); + e({ + ir: t + }); + }; + var D = function onSizeChanged(r) { + var a = r.vr, t = r.Dr, n = r.Ar; + var i = !a || n ? e : O; + var v = false; + if (t) { + var u = t[0], f = t[1]; + v = f; + o({ + sr: u + }); + } + i({ + vr: a, + cr: v + }); + }; + var E = function onContentMutation(r) { + var a = _(), t = a[1]; + var n = r ? e : O; + if (t) { + n({ + ur: true + }); + } + }; + var z = function onHostMutation(r, a) { + if (a) { + O({ + mr: true + }); + } else if (!d) { + A(r); + } + }; + var L = (s || !m) && Xa(u, x); + var I = !d && Wa(u, D, { + Ar: true, + Or: !y + }); + var T = $a(u, false, z, { + zr: re, + Er: re.concat(Za) + }), M = T[0]; + var P = d && new k(D.bind(0, { + vr: true + })); + P && P.observe(u); + A(); + return [ function(r) { + var a = r("updating.ignoreMutation"), e = a[0]; + var i = r("updating.attributes"), o = i[0], u = i[1]; + var c = r("updating.elementEvents"), l = c[0], d = c[1]; + var g = r("updating.debounce"), p = g[0], h = g[1]; + var w = d || u; + var y = function ignoreMutationFromOptions(r) { + return isFunction(e) && e(r); + }; + if (w) { + if (v) { + v[1](); + v[0](); + } + v = $a(s || f, true, E, { + zr: C.concat(o || []), + Er: C.concat(o || []), + Lr: l, + Ir: Ja, + Mr: function _ignoreContentChange(r, a) { + var e = r.target, t = r.attributeName; + var n = !a && t ? S(e, Ja, Ka) : false; + return n || !!y(r); + } + }); + } + if (h) { + O._(); + if (isArray(p)) { + var m = p[0]; + var b = p[1]; + t = isNumber(m) ? m : false; + n = isNumber(b) ? b : false; + } else if (isNumber(p)) { + t = p; + n = false; + } else { + t = false; + n = false; + } + } + }, function() { + v && v[0](); + L && L(); + I && I(); + P && P.disconnect(); + M(); + } ]; + }; + var ee = { + A: { + t: 0, + r: 0, + b: 0, + l: 0 + }, + lr: false, + dr: { + marginRight: 0, + marginBottom: 0, + marginLeft: 0, + paddingTop: 0, + paddingRight: 0, + paddingBottom: 0, + paddingLeft: 0 + }, + br: { + x: 0, + y: 0 + }, + wr: { + x: "hidden", + y: "hidden" + }, + _r: { + x: false, + y: false + }, + nr: false, + sr: false + }; + var te = function createStructureSetup(r, a) { + var e = zr(a, {}); + var t = Lr(ee); + var n = new Set; + var i = t[0]; + var v = function runOnUpdatedListeners(r, a, e) { + f(n, [ r, a || {}, !!e ]); + }; + var o = Aa(r), u = o[0], s = o[1]; + var c = Ba(u, t); + var l = ae(u, t, (function(r) { + v(c(e, r)); + })), d = l[0], g = l[1]; + var p = i.bind(0); + p.Pr = function(r) { + n.add(r); + }; + p.Fr = u; + return [ function(r, e) { + var t = zr(a, r, e); + d(t); + v(c(t, {}, e)); + }, p, function() { + n.clear(); + g(); + s(); + } ]; + }; + var ne = function generateScrollbarDOM(r) { + var a = z(Zr + " " + r); + var e = z(aa); + var t = z(ea); + O(a, e); + O(e, t); + return { + Rr: a, + Nr: e, + jr: t + }; + }; + var ie = function createScrollbarsSetupElements(r, a) { + var e = wa(), t = e.N; + var n = t(), i = n.Br; + var v = a.W, o = a.U, u = a.q, f = a.rr; + var s = !f && r.scrollbarsSlot; + var c = ma([ v, o, u ], (function() { + return o; + }), i, s); + var l = ne(Qr); + var d = ne(ra); + var g = l.Rr; + var p = d.Rr; + O(c, g); + O(c, p); + return [ { + Vr: l, + kr: d + }, E.bind(0, [ g, p ]) ]; + }; + var ve = function createScrollbarsSetup(r, a, e) { + var t = Lr({}); + var n = t[0]; + var i = ie(r, e), v = i[0], o = i[1]; + var u = n.bind(0); + u.Fr = v; + return [ function(r, e) { + var t = zr(a, r, e); + console.log(t); + }, u, function() { + o(); + } ]; + }; + var oe = {}; + var ue = function getPlugins() { + return assignDeep({}, oe); + }; + var fe = function addPlugin(r) { + return each(isArray(r) ? r : [ r ], (function(r) { + oe[r[0]] = r[1]; + })); + }; + var se = "__osOptionsValidationPlugin"; + var ce = new Set; + var le = new WeakMap; + var de = function addInstance(r, a) { + le.set(r, a); + ce.add(r); + }; + var ge = function removeInstance(r) { + le.delete(r); + ce.delete(r); + }; + var pe = function getInstance(r) { + return le.get(r); + }; + var he = function OverlayScrollbars(r, a, e) { + var t = wa(), n = t.B, i = t.I, v = t.R; + var o = ue(); + var u = isHTMLElement(r) ? r : r.target; + var f = pe(u); + if (f) { + return f; + } + var s = o[se]; + var l = function validateOptions(r) { + var a = r || {}; + var e = s && s.Hr; + return e ? e(a, true) : a; + }; + var d = assignDeep({}, n(), l(a)); + var g = Dr(e), p = g[0], h = g[1], w = g[2]; + if (i.x && i.y && !d.nativeScrollbarsOverlaid.initialize) { + w("initializationWithdrawn"); + } + var y = te(r, d), m = y[0], b = y[1], _ = y[2]; + var S = ve(r, d, b.Fr), C = S[0], O = S[2]; + var A = function update(r, a) { + m(r, a); + C(r, a); + }; + var x = v(A.bind(0, {}, true)); + b.Pr((function(r, a, e) { + var t = r.vr, n = r.cr, i = r.ir, v = r.Cr, o = r.Sr, u = r.ur, f = r.mr; + w("updated", { + updateHints: { + sizeChanged: t, + directionChanged: n, + heightIntrinsicChanged: i, + overflowAmountChanged: v, + overflowStyleChanged: o, + contentMutation: u, + hostMutation: f + }, + changedOptions: a, + force: e + }); + })); + var D = { + options: function options(r) { + if (r) { + var a = ia(d, l(r)); + if (!isEmptyObject(a)) { + assignDeep(d, a); + A(a); + } + } + return assignDeep({}, d); + }, + on: p, + off: h, + state: function state() { + var r = b(), a = r.br, e = r.wr, t = r._r, n = r.A, i = r.lr; + return assignDeep({}, { + overflowAmount: a, + overflowStyle: e, + hasOverflow: t, + padding: n, + paddingAbsolute: i + }); + }, + elements: function elements() { + var r = b.Fr, a = r.W, e = r.U, t = r.A, n = r.q, i = r.D; + return assignDeep({}, { + target: a, + host: e, + padding: t || n, + viewport: n, + content: i || n + }); + }, + update: function update(r) { + A({}, r); + }, + destroy: function destroy() { + ge(u); + x(); + h(); + O(); + _(); + w("destroyed"); + } + }; + each(c(o), (function(r) { + var a = o[r]; + if (isFunction(a)) { + a(OverlayScrollbars, D); + } + })); + D.update(true); + de(u, D); + w("initialized"); + return D; + }; + he.plugin = fe; + he.env = function() { + var r = wa(), a = r.L, e = r.I, t = r.T, n = r.P, i = r.F, v = r.M, o = r.k, u = r.H, f = r.N, s = r.j, c = r.B, l = r.V; + return assignDeep({}, { + scrollbarSize: a, + scrollbarIsOverlaid: e, + scrollbarStyling: t, + rtlScrollBehavior: n, + flexboxGlue: i, + cssCustomProperties: v, + defaultInitializationStrategy: o, + defaultDefaultOptions: u, + getInitializationStrategy: f, + setInitializationStrategy: s, + getDefaultOptions: c, + setDefaultOptions: l + }); + }; + return he; +})); //# sourceMappingURL=overlayscrollbars.js.map diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index 5f4e6a4..35b9573 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/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/style.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/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/plugins/plugins.ts","../src/plugins/optionsValidation/optionsValidation.ts","../src/instances.ts","../src/eventListeners.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\nexport function createCache(options: CacheOptions): CacheContextual;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update: CacheUpdater\r\n): Cache;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n}\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) =>\r\n isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: any[]) => any {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n if (Array.from && arr) {\r\n return Array.from(arr);\r\n }\r\n const result: T[] = [];\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, args?: any[]): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n } else {\r\n each(arr, runFn);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W\r\n): T & U & V & W;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W,\r\n object4: X\r\n): T & U & V & W & X;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W,\r\n object4: X,\r\n object5: Y\r\n): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { from } from 'support/utils/array';\r\nimport { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | false | null | undefined,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n): void;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n};\r\n\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(value);\r\n};\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | false | null | undefined, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollLeft(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollTop(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | false | null | undefined): string;\r\nexport function val(elm: HTMLInputElement | false | null | undefined, value: string): void;\r\nexport function val(\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { 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 | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | 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 = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\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 { 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 { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the fractional- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (isUndefined(passiveEventsSupport)) {\r\n passiveEventsSupport = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener) as EventListener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return runEach.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","import { isArray } from 'support/utils/types';\r\nimport { keys } from 'support/utils/object';\r\nimport { each, from } from 'support/utils/array';\r\n\r\nexport type EventListener<\r\n NameArgsMap extends Record,\r\n Name extends Extract = Extract\r\n> = (...args: NameArgsMap[Name] extends undefined ? [] : [args: NameArgsMap[Name]]) => void;\r\n\r\nexport type EventListenerGroup<\r\n NameArgsMap extends Record,\r\n Name extends Extract = Extract\r\n> = EventListener | EventListener[];\r\n\r\nexport type AddEventListener> = <\r\n Name extends Extract\r\n>(\r\n name: Name,\r\n listener: EventListenerGroup\r\n) => () => void;\r\n\r\nexport type RemoveEventListener> = <\r\n Name extends Extract\r\n>(\r\n name?: Name,\r\n listener?: EventListenerGroup\r\n) => void;\r\n\r\nexport type TriggerEventListener> = <\r\n Name extends Extract\r\n>(\r\n name: Name,\r\n ...args: NameArgsMap[Name] extends undefined ? [] : [args: NameArgsMap[Name]]\r\n) => void;\r\n\r\nexport type InitialEventListeners> = {\r\n [K in Extract]?: EventListenerGroup;\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 AddEventListener,\r\n RemoveEventListener,\r\n TriggerEventListener\r\n] => {\r\n const events = new Map, Set>>();\r\n const removeEvent: RemoveEventListener = (name?, listener?) => {\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 EventListenerGroup | undefined);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n };\r\n const addEvent: AddEventListener = (name, listener) => {\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 EventListenerGroup);\r\n\r\n return removeEvent.bind(0, name as any, listener as EventListenerGroup);\r\n };\r\n const triggerEvent: TriggerEventListener = (name, args?) => {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args) {\r\n (event as (args: NameArgsMap[Extract]) => void)(args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n };\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { OSOptions, ReadonlyOSOptions } from 'options';\r\nimport type { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (\r\n changedOptions: PartialOptions,\r\n force?: boolean\r\n) => 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 stringify = (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 OSOptions {\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: OSOptions = {\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 (stringify(currOptionValue) === stringify(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 { OSOptions, defaultOptions } from 'options';\r\nimport { OSTargetElement, PartialOptions } from 'typings';\r\n\r\ntype StructureInitializationStrategyElementFn =\r\n | ((target: OSTargetElement) => HTMLElement | T)\r\n | T;\r\n\r\ntype ScrollbarsInitializationStrategyElementFn =\r\n | ((target: OSTargetElement, host: HTMLElement, viewport: HTMLElement) => HTMLElement | T)\r\n | T;\r\n\r\n/**\r\n * A Static element is an element which MUST be generated.\r\n * If null or undefined (or the returned result is null or undefined), the initialization function is generatig the element, otherwise\r\n * the element returned by the function acts as the generated element.\r\n */\r\nexport type StructureInitializationStrategyStaticElement = StructureInitializationStrategyElementFn<\r\n null | undefined\r\n>;\r\n\r\n/**\r\n * A Dynamic element is an element which CAN be generated.\r\n * If boolean (or the returned result is boolean), the generation of the element is forced (or not).\r\n * If the function returns and element, the element returned by the function acts as the generated element.\r\n */\r\nexport type StructureInitializationStrategyDynamicElement =\r\n StructureInitializationStrategyElementFn;\r\n\r\nexport interface StructureInitializationStrategy {\r\n _host: StructureInitializationStrategyStaticElement;\r\n _viewport: StructureInitializationStrategyStaticElement;\r\n _padding: StructureInitializationStrategyDynamicElement;\r\n _content: StructureInitializationStrategyDynamicElement;\r\n}\r\n\r\nexport interface ScrollbarsInitializationStrategy {\r\n /**\r\n * The scrollbars slot. If null or undefined (or the returned result is null or undefined), the initialization function is deciding the element, otherwise\r\n * the element returned by the function acts as the scrollbars slot.\r\n */\r\n _scrollbarsSlot: ScrollbarsInitializationStrategyElementFn;\r\n}\r\n\r\nexport interface InitializationStrategy\r\n extends StructureInitializationStrategy,\r\n ScrollbarsInitializationStrategy {}\r\n\r\nexport type DefaultInitializationStrategy = {\r\n [K in keyof InitializationStrategy]: Extract<\r\n InitializationStrategy[K],\r\n boolean | null | undefined\r\n >;\r\n};\r\n\r\nexport interface EnvironmentListenersNameArgsMap {\r\n _: undefined;\r\n}\r\n\r\nexport interface Environment {\r\n readonly _nativeScrollbarSize: XY;\r\n readonly _nativeScrollbarIsOverlaid: XY;\r\n readonly _nativeScrollbarStyling: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _defaultInitializationStrategy: DefaultInitializationStrategy;\r\n readonly _defaultDefaultOptions: OSOptions;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): OSOptions;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n const revertFbxGlueMax = addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst getDefaultInitializationStrategy = (\r\n nativeScrollbarStyling: boolean\r\n): DefaultInitializationStrategy => ({\r\n _host: null,\r\n _viewport: null,\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n _scrollbarsSlot: null,\r\n});\r\n\r\nconst createEnvironment = (): Environment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n });\r\n const [nativeScrollbarSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarStyling = getNativeScrollbarStyling(envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const initializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling);\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: Environment = {\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener: (listener) => 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(\r\n 0,\r\n {} as OSOptions,\r\n defaultDefaultOptions\r\n ),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent('_');\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nexport const getEnvironment = (): Environment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n is,\r\n createDiv,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n isBoolean,\r\n isFunction,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport {\r\n getEnvironment,\r\n StructureInitializationStrategyStaticElement,\r\n StructureInitializationStrategyDynamicElement,\r\n} from 'environment';\r\nimport { OSTarget, OSTargetElement, StructureInitialization } from 'typings';\r\n\r\nexport type StructureSetupElements = [targetObj: StructureSetupElementsObj, destroy: () => void];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: OSTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement | false => {\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } =\r\n getEnvironment();\r\n /* istanbul ignore next */\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst staticCreationFromStrategy = (\r\n target: OSTargetElement,\r\n initializationValue?: HTMLElement | undefined,\r\n strategy?: StructureInitializationStrategyStaticElement\r\n): HTMLElement => {\r\n const result =\r\n initializationValue ||\r\n (isFunction(strategy) ? strategy(target) : (strategy as null | undefined));\r\n return result || createDiv();\r\n};\r\n\r\nconst dynamicCreationFromStrategy = (\r\n target: OSTargetElement,\r\n initializationValue: HTMLElement | boolean | undefined,\r\n strategy: StructureInitializationStrategyDynamicElement\r\n): HTMLElement | false => {\r\n const takeInitializationValue = isBoolean(initializationValue) || initializationValue;\r\n const result = takeInitializationValue\r\n ? (initializationValue as boolean | HTMLElement)\r\n : isFunction(strategy)\r\n ? strategy(target)\r\n : strategy;\r\n\r\n return result === true ? createDiv() : result;\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value?: string | false | null | undefined) => {\r\n attr(elm, dataAttributeHost, value || '');\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (target: OSTarget): StructureSetupElements => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling } = getEnvironment();\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as OSTargetElement)\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 && _nativeScrollbarStyling;\r\n const potentialViewportElement = staticCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.viewport,\r\n viewportInitializationStrategy\r\n );\r\n const potentiallySingleElm = potentialViewportElement === targetElement;\r\n const viewportIsTarget = singleElmSupport && potentiallySingleElm;\r\n const viewportElement =\r\n potentiallySingleElm && !viewportIsTarget\r\n ? staticCreationFromStrategy(targetElement)\r\n : potentialViewportElement;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.host,\r\n hostInitializationStrategy\r\n )\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding: dynamicCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.padding,\r\n paddingInitializationStrategy\r\n ),\r\n _content: dynamicCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.content,\r\n contentInitializationStrategy\r\n ),\r\n _viewportArrange: !viewportIsTarget && createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarStyling && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n\r\n return [evaluatedTargetObj, runEach.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n noop,\r\n each,\r\n equalXY,\r\n attrClass,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportArrange,\r\n classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\ntype UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nconst { max } = Math;\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarSize,\r\n _flexboxGlue,\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [updateOverflowStyleCache] = createCache>(xyCacheOptions);\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _paddingAbsolute, _padding: padding } = getState();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const fSize = fractionalSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = _paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n hostClientSize.h +\r\n fSize.h +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n ): ViewportOverflowState => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const getStatePerAxis = (\r\n styleKey: string,\r\n isOverlaid: boolean,\r\n nativeScrollbarSize: number\r\n ) => {\r\n const overflowStyle = style(_viewport, styleKey);\r\n // can't do something like \"viewportStyleObj && viewportStyleObj[styleKey] || overflowStyle\" here!\r\n const objectPrefferedOverflowStyle = viewportStyleObj\r\n ? viewportStyleObj[styleKey]\r\n : overflowStyle;\r\n const overflowScroll = objectPrefferedOverflowStyle === 'scroll';\r\n const nonScrollbarStylingHideOffset = isOverlaid ? arrangeHideOffset : nativeScrollbarSize;\r\n const scrollbarsHideOffset =\r\n overflowScroll && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset : 0;\r\n const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset;\r\n\r\n return [overflowStyle, overflowScroll, scrollbarsHideOffset, scrollbarsHideOffsetArrange] as [\r\n overflowStyle: OverflowStyle,\r\n overflowScroll: boolean,\r\n scrollbarsHideOffset: number,\r\n scrollbarsHideOffsetArrange: boolean\r\n ];\r\n };\r\n\r\n const [xOverflowStyle, xOverflowScroll, xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowX', _nativeScrollbarIsOverlaid.x, _nativeScrollbarSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarIsOverlaid.y, _nativeScrollbarSize.y);\r\n\r\n return {\r\n _overflowStyle: {\r\n x: xOverflowStyle,\r\n y: yOverflowStyle,\r\n },\r\n _overflowScroll: {\r\n x: xOverflowScroll,\r\n y: yOverflowScroll,\r\n },\r\n _scrollbarsHideOffset: {\r\n x: xScrollbarsHideOffset,\r\n y: yScrollbarsHideOffset,\r\n },\r\n _scrollbarsHideOffsetArrange: {\r\n x: xScrollbarsHideOffsetArrange,\r\n y: yScrollbarsHideOffsetArrange,\r\n },\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n hasOverflow: XY,\r\n overflowOption: XY,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setAxisOverflowStyle = (behavior: OverflowBehavior, hasOverflowAxis: boolean) => {\r\n const overflowVisible = overflowIsVisible(behavior);\r\n const overflowVisibleBehavior =\r\n (hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, '')) || '';\r\n return [\r\n hasOverflowAxis && !overflowVisible ? behavior : '',\r\n overflowIsVisible(overflowVisibleBehavior) ? 'hidden' : overflowVisibleBehavior,\r\n ];\r\n };\r\n\r\n const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x);\r\n const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y);\r\n\r\n viewportStyleObj.overflowX = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX;\r\n viewportStyleObj.overflowY = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY;\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\r\n if (doViewportArrange) {\r\n const { _viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;\r\n const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(\r\n `#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingLeft'\r\n : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] =\r\n horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n ): UndoViewportArrangeResult => {\r\n if (doViewportArrange) {\r\n const finalViewportOverflowState =\r\n viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n\r\n removeClass(_viewport, classNameViewportArrange);\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return [\r\n () => {\r\n hideNativeScrollbars(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n doViewportArrange,\r\n prevStyle\r\n );\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n finalViewportOverflowState,\r\n ];\r\n }\r\n return [noop];\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('nativeScrollbarsOverlaid.show');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\r\n );\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [\r\n on(expandElement, scrollEventName, onScroll),\r\n on(shrinkElement, scrollEventName, onScroll),\r\n ]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport type DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [destroy: () => void, update: () => void];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n });\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { runEach } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY } from 'support';\r\nimport type { OSOptions, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { OSTarget, PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _addOnUpdatedListener: (listener: OnUpdatedListener) => void;\r\n}\r\n\r\nexport type OnUpdatedListener = (\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n) => void;\r\n\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: OSTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const onUpdatedListeners = new Set();\r\n const [getState] = state;\r\n const runOnUpdatedListeners = (\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions?: PartialOptions,\r\n force?: boolean\r\n ) => {\r\n runEach(onUpdatedListeners, [updateHints, changedOptions || {}, !!force]);\r\n };\r\n\r\n const [elements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n runOnUpdatedListeners(updateStructure(checkOptionsFallback, updateHints));\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n onUpdatedListeners.add(listener);\r\n };\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObservers(checkOption);\r\n runOnUpdatedListeners(updateStructure(checkOption, {}, force));\r\n },\r\n structureSetupState,\r\n () => {\r\n onUpdatedListeners.clear();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { appendChildren, createDiv, removeElements, isFunction } 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, ScrollbarsInitializationStrategy } from 'environment';\r\nimport { OSTarget, ScrollbarsInitialization } from 'typings';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [elements: ScrollbarsSetupElementsObj, destroy: () => void];\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: OSTarget,\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 initializationScrollbarSlotResult = isFunction(initializationScrollbarSlot)\r\n ? initializationScrollbarSlot(_target, _host, _viewport)\r\n : initializationScrollbarSlot;\r\n const evaluatedScrollbarSlot =\r\n initializationScrollbarSlotResult ||\r\n (isFunction(environmentScrollbarSlot)\r\n ? environmentScrollbarSlot(_target, _host, _viewport)\r\n : environmentScrollbarSlot) ||\r\n _host;\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { OSTarget } from 'typings';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n}\r\n\r\nexport const createScrollbarsSetup = (\r\n target: OSTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, destroyElements] = createScrollbarsSetupElements(target, structureSetupElements);\r\n\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { assignDeep, each, isArray } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type OSPluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type OSPlugin = [string, T];\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: OSPlugin | OSPlugin[]) =>\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as OSPlugin[], (plugin) => {\r\n pluginRegistry[plugin[0]] = plugin[1];\r\n });\r\n","import { OSPlugin } from 'plugins';\r\nimport { OSOptions, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidation/validation';\r\nimport { PartialOptions } from 'typings';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: OSPlugin = [\r\n optionsValidationPluginName,\r\n {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n];\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import { OSOptions } from 'options';\r\nimport { createEventListenerHub } from 'support';\r\nimport { PartialOptions } from 'typings';\r\nimport type {\r\n InitialEventListeners,\r\n AddEventListener,\r\n RemoveEventListener,\r\n TriggerEventListener,\r\n EventListener,\r\n} from 'support/eventListeners';\r\n/*\r\nonScrollStart : null,\r\nonScroll : null,\r\nonScrollStop : null,\r\nonOverflowChanged : null,\r\nonOverflowAmountChanged : null, // fusion with onOverflowChanged\r\nonDirectionChanged : null, // gone\r\nonContentSizeChanged : null, // gone\r\nonHostSizeChanged : null, // gone\r\n*/\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\r\n force: boolean;\r\n}\r\n\r\nexport interface OSEventListenersNameArgsMap {\r\n initialized: undefined;\r\n initializationWithdrawn: undefined;\r\n updated: OnUpdatedEventListenerArgs;\r\n destroyed: undefined;\r\n}\r\n\r\nexport type OSEventListener<\r\n N extends Extract = Extract<\r\n keyof OSEventListenersNameArgsMap,\r\n string\r\n >\r\n> = EventListener;\r\n\r\nexport type AddOSEventListener = AddEventListener;\r\n\r\nexport type RemoveOSEventListener = RemoveEventListener;\r\n\r\nexport type TriggerOSEventListener = TriggerEventListener;\r\n\r\nexport type InitialOSEventListeners = InitialEventListeners;\r\n\r\nexport const createOSEventListenerHub = (initialEventListeners?: InitialOSEventListeners) =>\r\n createEventListenerHub(initialEventListeners);\r\n","import { OSTarget, OSInitializationObject, PartialOptions, OverflowStyle } from 'typings';\r\nimport {\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} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, OSOptions, ReadonlyOSOptions } from 'options';\r\nimport { DefaultInitializationStrategy, getEnvironment, InitializationStrategy } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n OSPlugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport {\r\n createOSEventListenerHub,\r\n InitialOSEventListeners,\r\n AddOSEventListener,\r\n RemoveOSEventListener,\r\n} from 'eventListeners';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: OSTarget | OSInitializationObject,\r\n options?: PartialOptions,\r\n eventListeners?: InitialOSEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(osPlugin: OSPlugin | OSPlugin[]): void;\r\n env(): OverlayScrollbarsEnv;\r\n}\r\n\r\nexport interface OverlayScrollbarsEnv {\r\n scrollbarSize: XY;\r\n scrollbarIsOverlaid: XY;\r\n scrollbarStyling: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n defaultInitializationStrategy: DefaultInitializationStrategy;\r\n defaultDefaultOptions: OSOptions;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): OSOptions;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface OverlayScrollbarsState {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n}\r\n\r\nexport interface OverlayScrollbarsElements {\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 OverlayScrollbars {\r\n options(): OSOptions;\r\n options(newOptions?: PartialOptions): OSOptions;\r\n\r\n update(force?: boolean): void;\r\n destroy(): void;\r\n\r\n state(): OverlayScrollbarsState;\r\n elements(): OverlayScrollbarsElements;\r\n\r\n on: AddOSEventListener;\r\n off: RemoveOSEventListener;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n const {\r\n _getDefaultOptions,\r\n _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: PartialOptions) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createOSEventListenerHub(eventListeners);\r\n\r\n if (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\r\n triggerEvent('initializationWithdrawn');\r\n }\r\n\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, , destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState._elements\r\n );\r\n\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n });\r\n });\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: removeEvent,\r\n state() {\r\n const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n },\r\n destroy: () => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n removeEvent();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n triggerEvent('destroyed');\r\n },\r\n };\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n instance.update(true);\r\n\r\n addInstance(instanceTarget, instance);\r\n\r\n triggerEvent('initialized');\r\n\r\n return instance;\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarSize: _nativeScrollbarSize,\r\n scrollbarIsOverlaid: _nativeScrollbarIsOverlaid,\r\n scrollbarStyling: _nativeScrollbarStyling,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["hasOwnProperty","zeroObj"],"mappings":"AAAO,SAAS,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE;AAC7C,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC;AACjE,EAAE,IAAI,MAAM,GAAG,aAAa,CAAC;AAC7B,EAAE,IAAI,SAAS,CAAC;AAChB,EAAE,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,KAAK,KAAK;AACrD,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC;AACxB,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC;AAC5B,IAAI,MAAM,OAAO,GAAG,KAAK,KAAK,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC;AAChF,IAAI,IAAI,OAAO,IAAI,mBAAmB,EAAE;AACxC,MAAM,MAAM,GAAG,MAAM,CAAC;AACtB,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,KAAK;AACL,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AACxC,GAAG,CAAC;AACJ,EAAE,MAAM,mBAAmB,GAAG,CAAC,KAAK,KAAK,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;AACjG,EAAE,MAAM,eAAe,GAAG,CAAC,KAAK,KAAK;AACrC,IAAI,MAAM;AACV,IAAI,CAAC,CAAC,KAAK;AACX,IAAI,SAAS;AACb,GAAG,CAAC;AACJ,EAAE,OAAO,CAAC,MAAM,GAAG,mBAAmB,GAAG,qBAAqB,EAAE,eAAe,CAAC,CAAC;AACjF;;ACrBA,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC;AAC1C,MAAM,EAAE,QAAQ,kBAAEA,gBAAc,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;AAC/C,SAAS,WAAW,CAAC,GAAG,EAAE;AACjC,EAAE,OAAO,GAAG,KAAK,KAAK,CAAC,CAAC;AACxB,CAAC;AACM,SAAS,MAAM,CAAC,GAAG,EAAE;AAC5B,EAAE,OAAO,GAAG,KAAK,IAAI,CAAC;AACtB,CAAC;AACM,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AACvI,SAAS,QAAQ,CAAC,GAAG,EAAE;AAC9B,EAAE,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC;AACjC,CAAC;AACM,SAAS,QAAQ,CAAC,GAAG,EAAE;AAC9B,EAAE,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC;AACjC,CAAC;AACM,SAAS,SAAS,CAAC,GAAG,EAAE;AAC/B,EAAE,OAAO,OAAO,GAAG,KAAK,SAAS,CAAC;AAClC,CAAC;AACM,SAAS,UAAU,CAAC,GAAG,EAAE;AAChC,EAAE,OAAO,OAAO,GAAG,KAAK,UAAU,CAAC;AACnC,CAAC;AACM,SAAS,OAAO,CAAC,GAAG,EAAE;AAC7B,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AACM,SAAS,QAAQ,CAAC,GAAG,EAAE;AAC9B,EAAE,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAClE,CAAC;AACM,SAAS,WAAW,CAAC,GAAG,EAAE;AACjC,EAAE,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;AACrC,EAAE,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;AACjF,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,mBAAmB,GAAG,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC;AAClI,CAAC;AACM,SAAS,aAAa,CAAC,GAAG,EAAE;AACnC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ;AACtD,IAAI,OAAO,KAAK,CAAC;AACjB,EAAE,IAAI,GAAG,CAAC;AACV,EAAE,MAAM,IAAI,GAAG,aAAa,CAAC;AAC7B,EAAE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AACzB,EAAE,MAAM,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC;AAC3C,EAAE,MAAM,iBAAiB,GAAGA,gBAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC3D,EAAE,MAAM,gBAAgB,GAAG,SAAS,IAAIA,gBAAc,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AACxF,EAAE,IAAI,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,gBAAgB,EAAE;AACvD,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE;AACnB,GAAG;AACH,EAAE,OAAO,WAAW,CAAC,GAAG,CAAC,IAAIA,gBAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC;AACM,SAAS,aAAa,CAAC,GAAG,EAAE;AACnC,EAAE,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC;AAC3C,EAAE,OAAO,GAAG,GAAG,aAAa,GAAG,GAAG,YAAY,aAAa,GAAG,GAAG,CAAC,QAAQ,KAAK,eAAe,GAAG,KAAK,CAAC;AACvG,CAAC;AACM,SAAS,SAAS,CAAC,GAAG,EAAE;AAC/B,EAAE,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;AACvC,EAAE,OAAO,GAAG,GAAG,aAAa,GAAG,GAAG,YAAY,aAAa,GAAG,GAAG,CAAC,QAAQ,KAAK,eAAe,GAAG,KAAK,CAAC;AACvG;;ACtDO,SAAS,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;AACvC,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;AAC3B,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,KAAK,EAAE;AACpD,QAAQ,MAAM;AACd,OAAO;AACP,KAAK;AACL,GAAG,MAAM,IAAI,MAAM,EAAE;AACrB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;AAC3E,GAAG;AACH,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACvE,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,iBAAiB,KAAK;AACzD,EAAE,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9H,EAAE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AACK,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK;AAC7B,EAAE,IAAI,KAAK,CAAC,IAAI,IAAI,GAAG,EAAE;AACzB,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,GAAG;AACH,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB,EAAE,IAAI,GAAG,YAAY,GAAG,EAAE;AAC1B,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AAC3B,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC1B,KAAK,CAAC,CAAC;AACP,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK;AACvB,MAAM,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AACK,MAAM,YAAY,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;AAC9D,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK;AACtC,EAAE,MAAM,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AAC3D,EAAE,IAAI,GAAG,YAAY,GAAG,EAAE;AAC1B,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvB,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACrB,GAAG;AACH,CAAC;;ACxCM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACtF,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAClD,SAAS,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AACzF,EAAE,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACzE,EAAE,IAAI,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC7E,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,GAAG;AACH,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK;AAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK;AAChC,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAC/B,MAAM,IAAI,MAAM,KAAK,IAAI,EAAE;AAC3B,QAAQ,OAAO,IAAI,CAAC;AACpB,OAAO;AACP,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACxC,MAAM,IAAI,IAAI,KAAK,aAAa,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,EAAE;AACxD,QAAQ,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAChC,QAAQ,IAAI,KAAK,GAAG,GAAG,CAAC;AACxB,QAAQ,IAAI,WAAW,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC1C,UAAU,KAAK,GAAG,EAAE,CAAC;AACrB,SAAS,MAAM,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;AACxD,UAAU,KAAK,GAAG,EAAE,CAAC;AACrB,SAAS;AACT,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9C,OAAO,MAAM;AACb,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAC3B,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACM,SAAS,aAAa,CAAC,GAAG,EAAE;AACnC,EAAE,KAAK,MAAM,IAAI,IAAI,GAAG;AACxB,IAAI,OAAO,KAAK,CAAC;AACjB,EAAE,OAAO,IAAI,CAAC;AACd;;AClCA,SAAS,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE;AACnD,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;AAC1B,IAAI,OAAO,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;AACzC,GAAG;AACH,EAAE,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AAChC,CAAC;AACM,SAAS,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC3C,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;AAC1B,IAAI,OAAO,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AACnD,GAAG;AACH,EAAE,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC;AACM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;AACxD,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC/C,EAAE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,EAAE,aAAa,CAAC,GAAG,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;AAC/C,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC,CAAC;AACK,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,KAAK;AACtD,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC/C,EAAE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,EAAE,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC,CAAC;AACK,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,QAAQ,KAAK;AAC7C,EAAE,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC,CAAC;AACK,SAAS,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE;AACvC,EAAE,OAAO,UAAU,CAAC,YAAY,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AACM,SAAS,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE;AACtC,EAAE,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAChD;;AC/BA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;AACvC,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK;AAChC,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;AACjB,EAAE,MAAM,OAAO,GAAG,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,QAAQ,CAAC;AAC/D,EAAE,OAAO,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC;AACvE,CAAC,CAAC;AACF,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK;AACrC,EAAE,MAAM,OAAO,GAAG,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,QAAQ,CAAC;AAC/D,EAAE,OAAO,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AAC1D,CAAC,CAAC;AACF,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,QAAQ,KAAK;AAC9B,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;AACtB,IAAI,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,iBAAiB,CAAC;AACtE,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAClC,GAAG;AACH,EAAE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAKF,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;AAC1D,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;AACvD,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,QAAQ,KAAK;AACnC,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;AACtB,IAAI,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;AAC3C,IAAI,IAAI,SAAS,EAAE;AACnB,MAAM,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC3C,KAAK;AACL,IAAI,GAAG;AACP,MAAM,IAAI,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE;AAC7B,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO;AACP,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACxB,KAAK,QAAQ,GAAG,EAAE;AAClB,GAAG;AACH,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,oBAAoB,EAAE,oBAAoB,KAAK;AACzE,EAAE,MAAM,sBAAsB,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;AAC3E,EAAE,MAAM,sBAAsB,GAAG,GAAG,IAAI,SAAS,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAC;AAChG,EAAE,OAAO,sBAAsB,IAAI,sBAAsB,GAAG,sBAAsB,KAAK,GAAG,IAAI,sBAAsB,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,oBAAoB,CAAC,EAAE,oBAAoB,CAAC,KAAK,sBAAsB,GAAG,KAAK,CAAC;AACrO,CAAC;;ACzCD,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,YAAY,KAAK;AAC7D,EAAE,IAAI,YAAY,EAAE;AACpB,IAAI,IAAI,MAAM,GAAG,eAAe,CAAC;AACjC,IAAI,IAAI,QAAQ,CAAC;AACjB,IAAI,IAAI,SAAS,EAAE;AACnB,MAAM,IAAI,WAAW,CAAC,YAAY,CAAC,EAAE;AACrC,QAAQ,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC;AACrD,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC,WAAW,KAAK;AAC5C,UAAU,IAAI,WAAW,KAAK,MAAM,EAAE;AACtC,YAAY,MAAM,GAAG,WAAW,CAAC,eAAe,CAAC;AACjD,WAAW;AACX,UAAU,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAC5C,SAAS,CAAC,CAAC;AACX,OAAO,MAAM;AACb,QAAQ,QAAQ,GAAG,YAAY,CAAC;AAChC,OAAO;AACP,MAAM,IAAI,eAAe,EAAE;AAC3B,QAAQ,IAAI,CAAC,MAAM,EAAE;AACrB,UAAU,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC;AACxC,SAAS,MAAM,IAAI,MAAM,KAAK,eAAe,EAAE;AAC/C,UAAU,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;AACtC,SAAS;AACT,OAAO;AACP,MAAM,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC;AACvD,KAAK;AACL,GAAG;AACH,CAAC,CAAC;AACK,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK;AAClD,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC,CAAC;AACK,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK;AACnD,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAClD,CAAC,CAAC;AACK,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,aAAa,KAAK;AACrD,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;AAC5C,CAAC,CAAC;AACK,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,aAAa,KAAK;AACpD,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAChE,CAAC,CAAC;AACK,MAAM,cAAc,GAAG,CAAC,KAAK,KAAK;AACzC,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;AAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,GAAG,MAAM,IAAI,KAAK,EAAE;AACpB,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,IAAI,IAAI,SAAS,EAAE;AACnB,MAAM,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnC,KAAK;AACL,GAAG;AACH,CAAC;;AC/CM,MAAM,SAAS,GAAG,CAAC,UAAU,KAAK;AACzC,EAAE,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC5C,EAAE,IAAI,UAAU,EAAE;AAClB,IAAI,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AACnC,GAAG;AACH,EAAE,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AACK,MAAM,SAAS,GAAG,CAAC,IAAI,KAAK;AACnC,EAAE,MAAM,UAAU,GAAG,SAAS,EAAE,CAAC;AACjC,EAAE,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACrC,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,KAAK,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,CAAC;;ACZD,MAAM,kBAAkB,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/E,MAAM,aAAa,GAAG,MAAM,SAAS,EAAE,CAAC,KAAK,CAAC;AACvC,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACzD,MAAM,UAAU,GAAG;AAC1B,EAAE,QAAQ;AACV,EAAE,KAAK;AACP,EAAE,GAAG;AACL,EAAE,IAAI;AACN,EAAE,QAAQ;AACV,EAAE,KAAK;AACP,EAAE,GAAG;AACL,EAAE,IAAI;AACN,CAAC,CAAC;AACK,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,MAAM,WAAW,GAAG,CAAC,IAAI,KAAK;AACrC,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9B,EAAE,IAAI,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;AACtC,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH,EAAE,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClD,EAAE,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;AACnC,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,KAAK;AAChC,IAAI,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACzD,IAAI,MAAM,mBAAmB,GAAG;AAChC,MAAM,IAAI;AACV,MAAM,MAAM,GAAG,IAAI;AACnB,MAAM,mBAAmB,GAAG,cAAc;AAC1C,MAAM,kBAAkB,CAAC,mBAAmB,CAAC,GAAG,cAAc;AAC9D,KAAK,CAAC;AACN,IAAI,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,iBAAiB,KAAK,QAAQ,CAAC,iBAAiB,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/G,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,EAAE,CAAC;AACvC,CAAC,CAAC;AAwBK,MAAM,KAAK,GAAG,CAAC,IAAI,KAAK;AAC/B,EAAE,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7C,EAAE,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;AACrC,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,KAAK;AAC/B,IAAI,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,IAAI,OAAO,CAAC,MAAM,CAAC;AACnB,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACzB,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;;ACtEM,MAAM,2BAA2B,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC;AAC9D,MAAM,+BAA+B,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACtE,MAAM,yBAAyB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,uBAAuB,CAAC;;ACFjD,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAC1C,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,KAAK;AACpD,EAAE,IAAI,KAAK,CAAC;AACZ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC;AACrB,EAAE,IAAI,GAAG,IAAI,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC/C,IAAI,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AACzD,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,IAAI,OAAO,KAAK,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE;AACjC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC;AACxD,KAAK;AACL,GAAG;AACH,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AACK,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,SAAS,KAAK,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,KAAK,KAAK,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACtH,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,SAAS,KAAK;AAC/C,EAAE,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,KAAK,KAAK,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACjF,CAAC,CAAC;AACK,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,SAAS,KAAK;AAC5C,EAAE,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,KAAK,KAAK,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9E,EAAE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;;ACvBM,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,KAAK;AACpD,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AACd,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC;AACtB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,KAAK;AAC1B,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACtE,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACtE,MAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACjC,QAAQ,MAAM,GAAG,KAAK,CAAC;AACvB,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH,EAAE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AACK,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAClD,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9D,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;;ACfpH,MAAM,aAAa,GAAG,CAAC,EAAE,KAAK;AAC9B,EAAE,EAAE,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAChC,EAAE,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;AAChB,CAAC,CAAC;AACK,MAAM,IAAI,GAAG,MAAM;AAC1B,CAAC,CAAC;AACK,MAAM,QAAQ,GAAG,CAAC,kBAAkB,EAAE,OAAO,KAAK;AACzD,EAAE,IAAI,SAAS,CAAC;AAChB,EAAE,IAAI,YAAY,CAAC;AACnB,EAAE,IAAI,aAAa,CAAC;AACpB,EAAE,IAAI,eAAe,CAAC;AACtB,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;AAC9D,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACjC,EAAE,MAAM,wBAAwB,GAAG,SAAS,IAAI,EAAE;AAClD,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;AAC7B,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;AAChC,IAAI,YAAY,GAAG,SAAS,GAAG,aAAa,GAAG,KAAK,CAAC,CAAC;AACtD,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzC,GAAG,CAAC;AACJ,EAAE,MAAM,UAAU,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,aAAa,GAAG,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;AACxG,EAAE,MAAM,KAAK,GAAG,MAAM;AACtB,IAAI,IAAI,SAAS,EAAE;AACnB,MAAM,wBAAwB,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,CAAC;AAC/E,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,MAAM,WAAW,GAAG,WAAW;AACjC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AACjC,IAAI,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC;AACtE,IAAI,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC,CAAC;AACnE,IAAI,IAAI,UAAU,EAAE;AACpB,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC;AAC3E,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC,CAAC;AACrE,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;AACzD,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;AACjD,MAAM,MAAM,WAAW,GAAG,iBAAiB,IAAI,IAAI,CAAC;AACpD,MAAM,MAAM,WAAW,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AACxE,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;AAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAC1D,MAAM,IAAI,UAAU,IAAI,CAAC,YAAY,EAAE;AACvC,QAAQ,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACjD,OAAO;AACP,MAAM,aAAa,GAAG,eAAe,GAAG,WAAW,CAAC;AACpD,KAAK,MAAM;AACX,MAAM,wBAAwB,CAAC,IAAI,CAAC,CAAC;AACrC,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC;AAC7B,EAAE,OAAO,WAAW,CAAC;AACrB,CAAC;;ACjDD,MAAM,SAAS,GAAG;AAClB,EAAE,OAAO,EAAE,CAAC;AACZ,EAAE,MAAM,EAAE,CAAC;AACX,CAAC,CAAC;AACF,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK;AAChD,EAAE,MAAM,GAAG,GAAG,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAChE,EAAE,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AACrC,CAAC,CAAC;AACF,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACtG,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,KAAK,aAAa,IAAI,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtJ,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK;AACtC,EAAE,IAAI;AACN,IAAI,IAAI,GAAG,EAAE;AACb,MAAM,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;AACtC,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;AACxC,QAAQ,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAChD,OAAO,MAAM;AACb,QAAQ,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACxC,OAAO;AACP,KAAK;AACL,GAAG,CAAC,OAAO,CAAC,EAAE;AACd,GAAG;AACH,CAAC,CAAC;AACK,SAAS,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE;AACnC,EAAE,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1C,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC;AACtD,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,IAAI,eAAe,GAAG,cAAc,GAAG,EAAE,GAAG,EAAE,CAAC;AACnD,IAAI,IAAI,GAAG,EAAE;AACb,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC/D,MAAM,eAAe,GAAG,cAAc,GAAG,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK;AAChH,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;AACzD,QAAQ,OAAO,MAAM,CAAC;AACtB,OAAO,EAAE,eAAe,CAAC,CAAC;AAC1B,KAAK;AACL,IAAI,OAAO,eAAe,CAAC;AAC3B,GAAG;AACH,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAOM,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,cAAc,KAAK;AAC3E,EAAE,MAAM,WAAW,GAAG,cAAc,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACjE,EAAE,MAAM,WAAW,GAAG,cAAc,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC;AACjE,EAAE,MAAM,GAAG,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;AAChD,EAAE,MAAM,KAAK,GAAG,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AACpD,EAAE,MAAM,MAAM,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AACtD,EAAE,MAAM,IAAI,GAAG,CAAC,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AAClD,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACxD,EAAE,OAAO;AACT,IAAI,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACvC,IAAI,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzC,IAAI,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1C,IAAI,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxC,GAAG,CAAC;AACJ,CAAC;;AC3DD,MAAMC,SAAO,GAAG;AAChB,EAAE,CAAC,EAAE,CAAC;AACN,EAAE,CAAC,EAAE,CAAC;AACN,CAAC,CAAC;AACK,MAAM,UAAU,GAAG,OAAO;AACjC,EAAE,CAAC,EAAE,MAAM,CAAC,UAAU;AACtB,EAAE,CAAC,EAAE,MAAM,CAAC,WAAW;AACvB,CAAC,CAAC,CAAC;AACI,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG;AACzC,EAAE,CAAC,EAAE,GAAG,CAAC,WAAW;AACpB,EAAE,CAAC,EAAE,GAAG,CAAC,YAAY;AACrB,CAAC,GAAGA,SAAO,CAAC;AACL,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG;AACzC,EAAE,CAAC,EAAE,GAAG,CAAC,WAAW;AACpB,EAAE,CAAC,EAAE,GAAG,CAAC,YAAY;AACrB,CAAC,GAAGA,SAAO,CAAC;AACL,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG;AACzC,EAAE,CAAC,EAAE,GAAG,CAAC,WAAW;AACpB,EAAE,CAAC,EAAE,GAAG,CAAC,YAAY;AACrB,CAAC,GAAGA,SAAO,CAAC;AACL,MAAM,cAAc,GAAG,CAAC,GAAG,KAAK;AACvC,EAAE,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1D,EAAE,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AACzD,EAAE,OAAO;AACT,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AACtC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AACxC,GAAG,CAAC;AACJ,CAAC,CAAC;AACK,MAAM,qBAAqB,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,qBAAqB,EAAE;;AC5BzE,IAAI,oBAAoB,CAAC;AACzB,MAAM,oBAAoB,GAAG,MAAM;AACnC,EAAE,IAAI,WAAW,CAAC,oBAAoB,CAAC,EAAE;AACzC,IAAI,oBAAoB,GAAG,KAAK,CAAC;AACjC,IAAI,IAAI;AACR,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE;AACjF,QAAQ,GAAG,EAAE,WAAW;AACxB,UAAU,oBAAoB,GAAG,IAAI,CAAC;AACtC,SAAS;AACT,OAAO,CAAC,CAAC,CAAC;AACV,KAAK,CAAC,OAAO,CAAC,EAAE;AAChB,KAAK;AACL,GAAG;AACH,EAAE,OAAO,oBAAoB,CAAC;AAC9B,CAAC,CAAC;AACF,MAAM,eAAe,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvD,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,KAAK;AAC9D,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,KAAK;AACnD,IAAI,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC7D,GAAG,CAAC,CAAC;AACL,CAAC,CAAC;AACK,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,KAAK;AAC7D,EAAE,MAAM,sBAAsB,GAAG,oBAAoB,EAAE,CAAC;AACxD,EAAE,MAAM,OAAO,GAAG,sBAAsB,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;AACjF,EAAE,MAAM,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;AACvD,EAAE,MAAM,IAAI,GAAG,OAAO,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;AACjD,EAAE,MAAM,YAAY,GAAG,EAAE,CAAC;AAC1B,EAAE,MAAM,aAAa,GAAG,sBAAsB,GAAG;AACjD,IAAI,OAAO;AACX,IAAI,OAAO;AACX,GAAG,GAAG,OAAO,CAAC;AACd,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,KAAK;AACnD,IAAI,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK;AAC1C,MAAM,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;AACpE,MAAM,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;AAChC,KAAK,GAAG,QAAQ,CAAC;AACjB,IAAI,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;AAClF,IAAI,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AACrE,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;AACvC,CAAC,CAAC;AACK,MAAM,eAAe,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,eAAe,EAAE,CAAC;AACvD,MAAM,cAAc,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,cAAc,EAAE,CAAC;AACrD,MAAM,cAAc,GAAG,CAAC,GAAG,KAAK,eAAe,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC;;AC5ClF,MAAM,OAAO,GAAG;AAChB,EAAE,CAAC,EAAE,CAAC;AACN,EAAE,CAAC,EAAE,CAAC;AACN,CAAC,CAAC;AACK,MAAM,mBAAmB,GAAG,CAAC,GAAG,KAAK;AAC5C,EAAE,MAAM,IAAI,GAAG,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpD,EAAE,OAAO,IAAI,GAAG;AAChB,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW;AACrC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,WAAW;AACpC,GAAG,GAAG,OAAO,CAAC;AACd,CAAC;;ACRD,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK;AAC/C,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC5D,CAAC,CAAC;AACK,MAAM,sBAAsB,GAAG,CAAC,qBAAqB,KAAK;AACjE,EAAE,MAAM,MAAM,mBAAmB,IAAI,GAAG,EAAE,CAAC;AAC3C,EAAE,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK;AAC1C,IAAI,IAAI,IAAI,EAAE;AACd,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC,MAAM,cAAc,CAAC,CAAC,YAAY,KAAK;AACvC,QAAQ,IAAI,QAAQ,EAAE;AACtB,UAAU,QAAQ,CAAC,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC;AACpE,SAAS;AACT,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnB,KAAK,MAAM;AACX,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK;AACnC,QAAQ,QAAQ,CAAC,KAAK,EAAE,CAAC;AACzB,OAAO,CAAC,CAAC;AACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACrB,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK;AACvC,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,GAAG,EAAE,CAAC;AACnE,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/B,IAAI,cAAc,CAAC,CAAC,YAAY,KAAK;AACrC,MAAM,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACjD,KAAK,EAAE,QAAQ,CAAC,CAAC;AACjB,IAAI,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/C,GAAG,CAAC;AACJ,EAAE,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK;AACvC,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,KAAK;AACpC,MAAM,IAAI,IAAI,EAAE;AAChB,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC;AACpB,OAAO,MAAM;AACb,QAAQ,KAAK,EAAE,CAAC;AAChB,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ,EAAE,MAAM,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC1D,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,GAAG,KAAK;AACrC,IAAI,QAAQ,CAAC,GAAG,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;;AC7CD,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;AACvI,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AAChK,MAAM,WAAW,GAAG,CAAC,YAAY,KAAK;AAC7C,EAAE,IAAI,KAAK,GAAG,YAAY,CAAC;AAC3B,EAAE,OAAO;AACT,IAAI,MAAM,KAAK;AACf,IAAI,CAAC,QAAQ,KAAK;AAClB,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC9C,KAAK;AACL,GAAG,CAAC;AACJ,CAAC;;ACXM,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAC9C,MAAM,+BAA+B,GAAG,CAAC,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;AAC/E,MAAM,kCAAkC,GAAG,CAAC,EAAE,+BAA+B,CAAC,IAAI,CAAC,CAAC;AACpF,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AACnD,MAAM,0BAA0B,GAAG,CAAC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACrE,MAAM,0BAA0B,GAAG,CAAC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACrE,MAAM,4BAA4B,GAAG,iBAAiB,CAAC;AACvD,MAAM,qCAAqC,GAAG,gBAAgB,CAAC;AAC/D,MAAM,gBAAgB,GAAG,YAAY,CAAC;AACtC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AACxC,MAAM,wBAAwB,GAAG,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAChE,MAAM,gBAAgB,GAAG,YAAY,CAAC;AACtC,MAAM,iCAAiC,GAAG,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;AAClF,MAAM,wBAAwB,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACvD,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AACjD,MAAM,2BAA2B,GAAG,CAAC,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACtE,MAAM,6BAA6B,GAAG,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAC1E,MAAM,mCAAmC,GAAG,CAAC,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;AACtF,MAAM,iCAAiC,GAAG,CAAC,EAAE,6BAA6B,CAAC,KAAK,CAAC,CAAC;AAClF,MAAM,sCAAsC,GAAG,CAAC,EAAE,iCAAiC,CAAC,MAAM,CAAC,CAAC;AAC5F,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AACvD,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAC1C,MAAM,4BAA4B,GAAG,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;AACxE,MAAM,0BAA0B,GAAG,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACpE,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AACrD,MAAM,wBAAwB,GAAG,qBAAqB;;ACxB7D,MAAM,SAAS,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK;AAC/D,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;AACvB,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;AACtB,GAAG;AACH,EAAE,OAAO,GAAG,CAAC;AACb,CAAC,CAAC,CAAC;AACI,MAAM,cAAc,GAAG;AAC9B,EAAE,eAAe,EAAE,KAAK;AACxB,EAAE,QAAQ,EAAE;AACZ,IAAI,aAAa,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACpC,IAAI,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACrB,IAAI,UAAU,EAAE,IAAI;AACpB,IAAI,cAAc,EAAE,IAAI;AACxB,GAAG;AACH,EAAE,QAAQ,EAAE;AACZ,IAAI,CAAC,EAAE,QAAQ;AACf,IAAI,CAAC,EAAE,QAAQ;AACf,GAAG;AACH,EAAE,wBAAwB,EAAE;AAC5B,IAAI,IAAI,EAAE,KAAK;AACf,IAAI,UAAU,EAAE,KAAK;AACrB,GAAG;AACH,EAAE,UAAU,EAAE;AACd,IAAI,UAAU,EAAE,MAAM;AACtB,IAAI,QAAQ,EAAE,OAAO;AACrB,IAAI,aAAa,EAAE,GAAG;AACtB,IAAI,UAAU,EAAE,IAAI;AACpB,IAAI,WAAW,EAAE,KAAK;AACtB,IAAI,KAAK,EAAE,IAAI;AACf,GAAG;AACH,CAAC,CAAC;AACK,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,UAAU,KAAK;AAC3D,EAAE,MAAM,IAAI,GAAG,EAAE,CAAC;AAClB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACjE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,KAAK;AACnC,IAAI,MAAM,eAAe,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;AACnD,IAAI,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AACjD,IAAI,IAAI,QAAQ,CAAC,eAAe,CAAC,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE;AAC/D,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC;AACxF,KAAK,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,cAAc,KAAK,eAAe,EAAE;AAC5F,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC;AACxB,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;AAC/D,QAAQ,IAAI;AACZ,UAAU,IAAI,SAAS,CAAC,eAAe,CAAC,KAAK,SAAS,CAAC,cAAc,CAAC,EAAE;AACxE,YAAY,MAAM,GAAG,KAAK,CAAC;AAC3B,WAAW;AACX,SAAS,CAAC,OAAO,CAAC,EAAE;AACpB,SAAS;AACT,OAAO;AACP,MAAM,IAAI,MAAM,EAAE;AAClB,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC;AACzC,OAAO;AACP,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;;AC5BD,IAAI,mBAAmB,CAAC;AACxB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;AAC5B,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK;AAC9C,EAAE,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AAChC,EAAE,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AAChC,EAAE,OAAO,EAAE,SAAS,KAAK,SAAS,IAAI,SAAS,GAAG,CAAC,KAAK,SAAS,IAAI,SAAS,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC;AAClG,CAAC,CAAC;AACF,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,KAAK;AACtE,EAAE,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACnC,EAAE,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AACvC,EAAE,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AACvC,EAAE,MAAM,KAAK,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC;AAChD,EAAE,OAAO;AACT,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAClC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAClC,GAAG,CAAC;AACJ,CAAC,CAAC;AACF,MAAM,yBAAyB,GAAG,CAAC,OAAO,KAAK;AAC/C,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC;AACrB,EAAE,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,EAAE,iCAAiC,CAAC,CAAC;AAC3E,EAAE,IAAI;AACN,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC;AACzK,GAAG,CAAC,OAAO,EAAE,EAAE;AACf,GAAG;AACH,EAAE,WAAW,EAAE,CAAC;AAChB,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AACF,MAAM,oBAAoB,GAAG,CAAC,SAAS,EAAE,QAAQ,KAAK;AACtD,EAAE,MAAM,SAAS,GAAG,QAAQ,CAAC;AAC7B,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACrF,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC3B,EAAE,MAAM,YAAY,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACtD,EAAE,MAAM,WAAW,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACpD,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;AAC9B,EAAE,MAAM,sBAAsB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAC/D,EAAE,OAAO;AACT,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;AACvC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,KAAK,sBAAsB,CAAC,CAAC;AACjD,GAAG,CAAC;AACJ,CAAC,CAAC;AACF,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,QAAQ,KAAK;AAChD,EAAE,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;AAC7E,EAAE,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAC/D,EAAE,MAAM,aAAa,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACxD,EAAE,MAAM,WAAW,GAAG,UAAU,CAAC,aAAa,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC;AAC3E,EAAE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAAC;AACnF,EAAE,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAC/D,EAAE,MAAM,aAAa,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACxD,EAAE,MAAM,WAAW,GAAG,UAAU,CAAC,aAAa,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC;AAC3E,EAAE,aAAa,EAAE,CAAC;AAClB,EAAE,gBAAgB,EAAE,CAAC;AACrB,EAAE,OAAO,WAAW,IAAI,WAAW,CAAC;AACpC,CAAC,CAAC;AACF,MAAM,YAAY,GAAG,MAAM;AAC3B,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;AAC7C,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;AAC9C,EAAE,OAAO,MAAM,CAAC,gBAAgB,IAAI,IAAI,GAAG,IAAI,CAAC;AAChD,CAAC,CAAC;AACF,MAAM,gCAAgC,GAAG,CAAC,sBAAsB,MAAM;AACtE,EAAE,KAAK,EAAE,IAAI;AACb,EAAE,SAAS,EAAE,IAAI;AACjB,EAAE,QAAQ,EAAE,CAAC,sBAAsB;AACnC,EAAE,QAAQ,EAAE,KAAK;AACjB,EAAE,eAAe,EAAE,IAAI;AACvB,CAAC,CAAC,CAAC;AACH,MAAM,iBAAiB,GAAG,MAAM;AAChC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;AAC5B,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,YAAY,EAAE,oBAAoB,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACrF,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3B,EAAE,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AACxC,EAAE,MAAM,CAAC,QAAQ,IAAI,YAAY,CAAC,GAAG,sBAAsB,EAAE,CAAC;AAC9D,EAAE,MAAM,CAAC,8BAA8B,EAAE,2BAA2B,CAAC,GAAG,WAAW,CAAC;AACpF,IAAI,aAAa,EAAE,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC;AACpE,IAAI,MAAM,EAAE,OAAO;AACnB,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,CAAC,mBAAmB,CAAC,GAAG,2BAA2B,EAAE,CAAC;AAC9D,EAAE,MAAM,sBAAsB,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;AACnE,EAAE,MAAM,yBAAyB,GAAG;AACpC,IAAI,CAAC,EAAE,mBAAmB,CAAC,CAAC,KAAK,CAAC;AAClC,IAAI,CAAC,EAAE,mBAAmB,CAAC,CAAC,KAAK,CAAC;AAClC,GAAG,CAAC;AACJ,EAAE,MAAM,sBAAsB,GAAG,gCAAgC,CAAC,sBAAsB,CAAC,CAAC;AAC1F,EAAE,MAAM,qBAAqB,GAAG,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;AAC/D,EAAE,MAAM,GAAG,GAAG;AACd,IAAI,oBAAoB,EAAE,mBAAmB;AAC7C,IAAI,0BAA0B,EAAE,yBAAyB;AACzD,IAAI,uBAAuB,EAAE,sBAAsB;AACnD,IAAI,oBAAoB,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,IAAI;AAC1D,IAAI,kBAAkB,EAAE,oBAAoB,CAAC,MAAM,EAAE,WAAW,CAAC;AACjE,IAAI,YAAY,EAAE,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC;AACrD,IAAI,YAAY,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;AACvD,IAAI,0BAA0B,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,sBAAsB,CAAC;AAC9E,IAAI,0BAA0B,CAAC,yBAAyB,EAAE;AAC1D,MAAM,UAAU,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,CAAC;AACpE,KAAK;AACL,IAAI,kBAAkB,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,qBAAqB,CAAC;AACrE,IAAI,kBAAkB,CAAC,iBAAiB,EAAE;AAC1C,MAAM,UAAU,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;AAC3D,KAAK;AACL,IAAI,8BAA8B,EAAE,UAAU,CAAC,EAAE,EAAE,sBAAsB,CAAC;AAC1E,IAAI,sBAAsB,EAAE,UAAU,CAAC,EAAE,EAAE,qBAAqB,CAAC;AACjE,GAAG,CAAC;AACJ,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9B,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;AACzB,EAAE,IAAI,CAAC,sBAAsB,KAAK,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE;AACjG,IAAI,IAAI,IAAI,GAAG,UAAU,EAAE,CAAC;AAC5B,IAAI,IAAI,GAAG,GAAG,YAAY,EAAE,CAAC;AAC7B,IAAI,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;AAC5C,MAAM,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AACnC,MAAM,MAAM,SAAS,GAAG;AACxB,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7B,OAAO,CAAC;AACR,MAAM,IAAI,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC,KAAK,CAAC;AAChD,QAAQ,OAAO;AACf,MAAM,MAAM,YAAY,GAAG;AAC3B,QAAQ,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3B,QAAQ,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3B,OAAO,CAAC;AACR,MAAM,MAAM,aAAa,GAAG;AAC5B,QAAQ,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACjD,QAAQ,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACjD,OAAO,CAAC;AACR,MAAM,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;AACpC,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;AACrE,MAAM,MAAM,UAAU,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;AAC9E,MAAM,MAAM,UAAU,GAAG,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;AACnD,MAAM,MAAM,MAAM,GAAG,aAAa,IAAI,UAAU,IAAI,UAAU,CAAC;AAC/D,MAAM,IAAI,MAAM,EAAE;AAClB,QAAQ,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC,GAAG,8BAA8B,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AACxI,QAAQ,UAAU,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;AAC5E,QAAQ,cAAc,CAAC,MAAM,CAAC,CAAC;AAC/B,QAAQ,IAAI,oBAAoB,EAAE;AAClC,UAAU,YAAY,CAAC,GAAG,CAAC,CAAC;AAC5B,SAAS;AACT,OAAO;AACP,MAAM,IAAI,GAAG,OAAO,CAAC;AACrB,MAAM,GAAG,GAAG,MAAM,CAAC;AACnB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AACK,MAAM,cAAc,GAAG,MAAM;AACpC,EAAE,IAAI,CAAC,mBAAmB,EAAE;AAC5B,IAAI,mBAAmB,GAAG,iBAAiB,EAAE,CAAC;AAC9C,GAAG;AACH,EAAE,OAAO,mBAAmB,CAAC;AAC7B,CAAC;;ACzID,IAAI,qBAAqB,GAAG,CAAC,CAAC;AAC9B,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK;AACxB,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7C,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC,CAAC;AACF,MAAM,kCAAkC,GAAG,MAAM;AACjD,EAAE,MAAM,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,GAAG,cAAc,EAAE,CAAC;AACzG,EAAE,MAAM,MAAM,GAAG,CAAC,oBAAoB,IAAI,CAAC,uBAAuB,KAAK,0BAA0B,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAC;AACrI,EAAE,MAAM,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;AAClE,EAAE,IAAI,MAAM,EAAE;AACd,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,wBAAwB,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAC/E,IAAI,qBAAqB,EAAE,CAAC;AAC5B,GAAG;AACH,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AACF,MAAM,0BAA0B,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,QAAQ,KAAK;AAC9E,EAAE,MAAM,MAAM,GAAG,mBAAmB,KAAK,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC7F,EAAE,OAAO,MAAM,IAAI,SAAS,EAAE,CAAC;AAC/B,CAAC,CAAC;AACF,MAAM,2BAA2B,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,QAAQ,KAAK;AAC/E,EAAE,MAAM,uBAAuB,GAAG,SAAS,CAAC,mBAAmB,CAAC,IAAI,mBAAmB,CAAC;AACxF,EAAE,MAAM,MAAM,GAAG,uBAAuB,GAAG,mBAAmB,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;AACpH,EAAE,OAAO,MAAM,KAAK,IAAI,GAAG,SAAS,EAAE,GAAG,MAAM,CAAC;AAChD,CAAC,CAAC;AACF,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,KAAK,KAAK;AACxC,EAAE,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AAC5C,EAAE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;AACpD,CAAC,CAAC;AACK,MAAM,4BAA4B,GAAG,CAAC,MAAM,KAAK;AACxD,EAAE,MAAM,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,GAAG,cAAc,EAAE,CAAC;AACnF,EAAE,MAAM;AACR,IAAI,KAAK,EAAE,0BAA0B;AACrC,IAAI,SAAS,EAAE,8BAA8B;AAC7C,IAAI,QAAQ,EAAE,6BAA6B;AAC3C,IAAI,QAAQ,EAAE,6BAA6B;AAC3C,GAAG,GAAG,0BAA0B,EAAE,CAAC;AACnC,EAAE,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC5C,EAAE,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAC/C,EAAE,MAAM,aAAa,GAAG,WAAW,GAAG,MAAM,GAAG,6BAA6B,CAAC,MAAM,CAAC;AACpF,EAAE,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AACnD,EAAE,MAAM,MAAM,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAC1D,EAAE,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC;AACpD,EAAE,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC;AACrC,EAAE,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,CAAC;AACxC,EAAE,MAAM,gBAAgB,GAAG,CAAC,CAAC,yBAAyB,IAAI,uBAAuB,CAAC;AAClF,EAAE,MAAM,wBAAwB,GAAG,0BAA0B,CAAC,aAAa,EAAE,6BAA6B,CAAC,QAAQ,EAAE,8BAA8B,CAAC,CAAC;AACrJ,EAAE,MAAM,oBAAoB,GAAG,wBAAwB,KAAK,aAAa,CAAC;AAC1E,EAAE,MAAM,gBAAgB,GAAG,gBAAgB,IAAI,oBAAoB,CAAC;AACpE,EAAE,MAAM,eAAe,GAAG,oBAAoB,IAAI,CAAC,gBAAgB,GAAG,0BAA0B,CAAC,aAAa,CAAC,GAAG,wBAAwB,CAAC;AAC3I,EAAE,MAAM,kBAAkB,GAAG;AAC7B,IAAI,OAAO,EAAE,aAAa;AAC1B,IAAI,KAAK,EAAE,UAAU,GAAG,0BAA0B,CAAC,aAAa,EAAE,6BAA6B,CAAC,IAAI,EAAE,0BAA0B,CAAC,GAAG,aAAa;AACjJ,IAAI,SAAS,EAAE,eAAe;AAC9B,IAAI,QAAQ,EAAE,2BAA2B,CAAC,aAAa,EAAE,6BAA6B,CAAC,OAAO,EAAE,6BAA6B,CAAC;AAC9H,IAAI,QAAQ,EAAE,2BAA2B,CAAC,aAAa,EAAE,6BAA6B,CAAC,OAAO,EAAE,6BAA6B,CAAC;AAC9H,IAAI,gBAAgB,EAAE,CAAC,gBAAgB,IAAI,kCAAkC,EAAE;AAC/E,IAAI,UAAU,EAAE,GAAG;AACnB,IAAI,YAAY,EAAE,aAAa;AAC/B,IAAI,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC;AAC7B,IAAI,QAAQ,EAAE,OAAO;AACrB,IAAI,WAAW,EAAE,UAAU;AAC3B,IAAI,OAAO,EAAE,MAAM;AACnB,IAAI,YAAY,EAAE,WAAW;AAC7B,IAAI,iBAAiB,EAAE,gBAAgB;AACvC,IAAI,iBAAiB,EAAE,CAAC,SAAS,EAAE,kBAAkB,KAAK,gBAAgB,GAAG,YAAY,CAAC,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC;AACxL,IAAI,uBAAuB,EAAE,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,KAAK,gBAAgB,GAAG,SAAS,CAAC,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,QAAQ,GAAG,WAAW,EAAE,eAAe,EAAE,SAAS,CAAC;AAC3N,GAAG,CAAC;AACJ,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;AAC1E,IAAI,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;AAC1C,IAAI,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;AAC9D,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,EAAE,MAAM,kBAAkB,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AACxF,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,kBAAkB,CAAC;AACjG,EAAE,MAAM,UAAU,GAAG,EAAE,CAAC;AACxB,EAAE,MAAM,uBAAuB,GAAG,UAAU,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC1E,EAAE,MAAM,cAAc,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,kBAAkB,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AAC3J,EAAE,MAAM,WAAW,GAAG,QAAQ,IAAI,SAAS,CAAC;AAC5C,EAAE,MAAM,kBAAkB,GAAG,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC;AAC5F,EAAE,MAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AAClE,EAAE,MAAM,mBAAmB,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,gBAAgB,IAAI,iBAAiB,CAAC,CAAC;AAC1F,EAAE,MAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AAClE,EAAE,IAAI,uBAAuB,EAAE;AAC/B,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAChC,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM;AAC3B,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAClC,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;AAC5B,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,cAAc,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAC9C,EAAE,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAClC,EAAE,cAAc,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC,gBAAgB,IAAI,SAAS,CAAC,CAAC;AACpE,EAAE,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACtC,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACzB,IAAI,kBAAkB,EAAE,CAAC;AACzB,IAAI,UAAU,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;AACtD,IAAI,UAAU,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;AACtD,IAAI,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE;AACtC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;AACvB,KAAK;AACL,IAAI,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE;AACvC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;AACxB,KAAK;AACL,IAAI,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE;AACtC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;AACvB,KAAK;AACL,IAAI,kBAAkB,EAAE,CAAC;AACzB,IAAI,mBAAmB,EAAE,CAAC;AAC1B,IAAI,kBAAkB,EAAE,CAAC;AACzB,GAAG,CAAC,CAAC;AACL,EAAE,IAAI,uBAAuB,IAAI,CAAC,gBAAgB,EAAE;AACpD,IAAI,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,iCAAiC,CAAC,CAAC,CAAC;AACxF,GAAG;AACH,EAAE,IAAI,gBAAgB,EAAE;AACxB,IAAI,YAAY,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAC9C,IAAI,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAC/D,GAAG;AACH,EAAE,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAC3D,CAAC;;ACzJM,MAAM,mBAAmB,GAAG,CAAC,sBAAsB,EAAE,KAAK,KAAK;AACtE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,sBAAsB,CAAC;AAC9C,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;AAC3B,EAAE,OAAO,CAAC,WAAW,KAAK;AAC1B,IAAI,MAAM,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE,CAAC;AAC9C,IAAI,MAAM,EAAE,gBAAgB,EAAE,GAAG,QAAQ,EAAE,CAAC;AAC5C,IAAI,MAAM,EAAE,uBAAuB,EAAE,GAAG,WAAW,CAAC;AACpD,IAAI,MAAM,sBAAsB,GAAG,CAAC,QAAQ,IAAI,CAAC,YAAY,KAAK,uBAAuB,CAAC;AAC1F,IAAI,IAAI,sBAAsB,EAAE;AAChC,MAAM,KAAK,CAAC,QAAQ,EAAE;AACtB,QAAQ,MAAM,EAAE,gBAAgB,GAAG,EAAE,GAAG,MAAM;AAC9C,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,OAAO;AACX,MAAM,YAAY,EAAE,sBAAsB;AAC1C,MAAM,gBAAgB,EAAE,sBAAsB;AAC9C,KAAK,CAAC;AACN,GAAG,CAAC;AACJ,CAAC;;AClBM,MAAM,mBAAmB,GAAG,CAAC,sBAAsB,EAAE,KAAK,KAAK;AACtE,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;AACrC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,GAAG,sBAAsB,CAAC;AACjG,EAAE,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,GAAG,WAAW,CAAC;AAChE,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,kBAAkB,EAAE;AACvC,GAAG,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;AACvD,EAAE,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,KAAK;AAC9C,IAAI,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC/D,IAAI,MAAM,EAAE,uBAAuB,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE,CAAC;AACvE,IAAI,MAAM,EAAE,eAAe,EAAE,GAAG,QAAQ,EAAE,CAAC;AAC3C,IAAI,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,WAAW,CAAC;AAC9E,IAAI,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;AACrF,IAAI,MAAM,eAAe,GAAG,CAAC,YAAY,IAAI,gBAAgB,CAAC;AAC9D,IAAI,IAAI,YAAY,IAAI,cAAc,IAAI,eAAe,EAAE;AAC3D,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC5D,KAAK;AACL,IAAI,MAAM,mBAAmB,GAAG,CAAC,YAAY,KAAK,sBAAsB,IAAI,iBAAiB,IAAI,cAAc,CAAC,CAAC;AACjH,IAAI,IAAI,mBAAmB,EAAE;AAC7B,MAAM,MAAM,eAAe,GAAG,CAAC,eAAe,IAAI,CAAC,QAAQ,IAAI,CAAC,uBAAuB,CAAC;AACxF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AACtD,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AACpD,MAAM,MAAM,YAAY,GAAG;AAC3B,QAAQ,WAAW,EAAE,eAAe,IAAI,CAAC,eAAe,GAAG,CAAC,iBAAiB,GAAG,CAAC;AACjF,QAAQ,YAAY,EAAE,eAAe,GAAG,CAAC,eAAe,GAAG,CAAC;AAC5D,QAAQ,UAAU,EAAE,eAAe,IAAI,eAAe,GAAG,CAAC,iBAAiB,GAAG,CAAC;AAC/E,QAAQ,GAAG,EAAE,eAAe,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC;AAC7C,QAAQ,KAAK,EAAE,eAAe,GAAG,eAAe,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC;AAC1E,QAAQ,IAAI,EAAE,eAAe,GAAG,eAAe,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC;AACzE,QAAQ,KAAK,EAAE,eAAe,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE;AAC3E,OAAO,CAAC;AACR,MAAM,MAAM,aAAa,GAAG;AAC5B,QAAQ,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC;AACnD,QAAQ,YAAY,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC;AACrD,QAAQ,aAAa,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC;AACtD,QAAQ,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC;AACpD,OAAO,CAAC;AACR,MAAM,KAAK,CAAC,QAAQ,IAAI,SAAS,EAAE,YAAY,CAAC,CAAC;AACjD,MAAM,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACtC,MAAM,QAAQ,CAAC;AACf,QAAQ,QAAQ,EAAE,OAAO;AACzB,QAAQ,gBAAgB,EAAE,CAAC,eAAe;AAC1C,QAAQ,qBAAqB,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,aAAa,CAAC;AACrG,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,OAAO;AACX,MAAM,oBAAoB,EAAE,mBAAmB;AAC/C,KAAK,CAAC;AACN,GAAG,CAAC;AACJ,CAAC;;ACxBD,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACrB,MAAM,UAAU,GAAG,SAAS,CAAC;AAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC;AAC3B,MAAM,4BAA4B,GAAG,EAAE,CAAC;AACxC,MAAM,cAAc,GAAG;AACvB,EAAE,MAAM,EAAE,OAAO;AACjB,EAAE,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC/B,CAAC,CAAC;AACF,MAAM,cAAc,GAAG;AACvB,EAAE,MAAM,EAAE,OAAO;AACjB,EAAE,aAAa,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE;AAC/C,CAAC,CAAC;AACF,MAAM,iBAAiB,GAAG,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,YAAY,KAAK;AACpF,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/D,EAAE,MAAM,MAAM,GAAG;AACjB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AACnF,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AACnF,GAAG,CAAC;AACJ,EAAE,OAAO;AACT,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC;AAC3C,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC;AAC3C,GAAG,CAAC;AACJ,CAAC,CAAC;AACF,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,KAAK,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AAClH,MAAM,iBAAiB,GAAG,CAAC,gBAAgB,KAAK,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACpF,MAAM,oBAAoB,GAAG,CAAC,sBAAsB,EAAE,KAAK,KAAK;AACvE,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;AACrC,EAAE,MAAM;AACR,IAAI,KAAK;AACT,IAAI,QAAQ;AACZ,IAAI,SAAS;AACb,IAAI,gBAAgB;AACpB,IAAI,iBAAiB;AACrB,IAAI,uBAAuB;AAC3B,GAAG,GAAG,sBAAsB,CAAC;AAC7B,EAAE,MAAM;AACR,IAAI,oBAAoB;AACxB,IAAI,YAAY;AAChB,IAAI,uBAAuB;AAC3B,IAAI,0BAA0B;AAC9B,GAAG,GAAG,cAAc,EAAE,CAAC;AACvB,EAAE,MAAM,iBAAiB,GAAG,CAAC,iBAAiB,IAAI,CAAC,uBAAuB,KAAK,0BAA0B,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAC;AAC7I,EAAE,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,GAAG,WAAW,CAAC,cAAc,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AACtH,EAAE,MAAM,CAAC,6BAA6B,EAAE,iCAAiC,CAAC,GAAG,WAAW,CAAC,cAAc,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AACxI,EAAE,MAAM,CAAC,yBAAyB,EAAE,6BAA6B,CAAC,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;AACjG,EAAE,MAAM,CAAC,wBAAwB,CAAC,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;AACjE,EAAE,MAAM,cAAc,GAAG,CAAC,qBAAqB,EAAE,eAAe,KAAK;AACrE,IAAI,KAAK,CAAC,SAAS,EAAE;AACrB,MAAM,MAAM,EAAE,EAAE;AAChB,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,eAAe,EAAE;AACzB,MAAM,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;AACjE,MAAM,MAAM,EAAE,eAAe,EAAE,qBAAqB,EAAE,GAAG,qBAAqB,CAAC;AAC/E,MAAM,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAC1C,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAC/C,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,aAAa,CAAC;AAC3E,MAAM,MAAM,eAAe,GAAG,gBAAgB,IAAI,YAAY,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3F,MAAM,MAAM,kBAAkB,GAAG,EAAE,0BAA0B,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC;AACjF,MAAM,KAAK,CAAC,SAAS,EAAE;AACvB,QAAQ,MAAM,EAAE,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,IAAI,kBAAkB,GAAG,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,eAAe;AACtI,OAAO,CAAC,CAAC;AACT,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,MAAM,wBAAwB,GAAG,CAAC,4BAA4B,EAAE,gBAAgB,KAAK;AACvF,IAAI,MAAM,iBAAiB,GAAG,CAAC,uBAAuB,IAAI,CAAC,4BAA4B,GAAG,4BAA4B,GAAG,CAAC,CAAC;AAC3H,IAAI,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,mBAAmB,KAAK;AAC3E,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACvD,MAAM,MAAM,4BAA4B,GAAG,gBAAgB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;AACzG,MAAM,MAAM,cAAc,GAAG,4BAA4B,KAAK,QAAQ,CAAC;AACvE,MAAM,MAAM,6BAA6B,GAAG,UAAU,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AACjG,MAAM,MAAM,oBAAoB,GAAG,cAAc,IAAI,CAAC,uBAAuB,GAAG,6BAA6B,GAAG,CAAC,CAAC;AAClH,MAAM,MAAM,2BAA2B,GAAG,UAAU,IAAI,CAAC,CAAC,iBAAiB,CAAC;AAC5E,MAAM,OAAO,CAAC,aAAa,EAAE,cAAc,EAAE,oBAAoB,EAAE,2BAA2B,CAAC,CAAC;AAChG,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAE,4BAA4B,CAAC,GAAG,eAAe,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;AACtL,IAAI,MAAM,CAAC,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAE,4BAA4B,CAAC,GAAG,eAAe,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;AACtL,IAAI,OAAO;AACX,MAAM,cAAc,EAAE;AACtB,QAAQ,CAAC,EAAE,cAAc;AACzB,QAAQ,CAAC,EAAE,cAAc;AACzB,OAAO;AACP,MAAM,eAAe,EAAE;AACvB,QAAQ,CAAC,EAAE,eAAe;AAC1B,QAAQ,CAAC,EAAE,eAAe;AAC1B,OAAO;AACP,MAAM,qBAAqB,EAAE;AAC7B,QAAQ,CAAC,EAAE,qBAAqB;AAChC,QAAQ,CAAC,EAAE,qBAAqB;AAChC,OAAO;AACP,MAAM,4BAA4B,EAAE;AACpC,QAAQ,CAAC,EAAE,4BAA4B;AACvC,QAAQ,CAAC,EAAE,4BAA4B;AACvC,OAAO;AACP,KAAK,CAAC;AACN,GAAG,CAAC;AACJ,EAAE,MAAM,wBAAwB,GAAG,CAAC,4BAA4B,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,KAAK;AACpH,IAAI,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE,eAAe,KAAK;AAChE,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC1D,MAAM,MAAM,uBAAuB,GAAG,eAAe,IAAI,eAAe,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;AACzH,MAAM,OAAO;AACb,QAAQ,eAAe,IAAI,CAAC,eAAe,GAAG,QAAQ,GAAG,EAAE;AAC3D,QAAQ,iBAAiB,CAAC,uBAAuB,CAAC,GAAG,QAAQ,GAAG,uBAAuB;AACvF,OAAO,CAAC;AACR,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAChG,IAAI,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAChG,IAAI,gBAAgB,CAAC,SAAS,GAAG,gBAAgB,IAAI,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAC9F,IAAI,gBAAgB,CAAC,SAAS,GAAG,gBAAgB,IAAI,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAC9F,IAAI,OAAO,wBAAwB,CAAC,4BAA4B,EAAE,gBAAgB,CAAC,CAAC;AACpF,GAAG,CAAC;AACJ,EAAE,MAAM,eAAe,GAAG,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc,KAAK;AACvG,IAAI,IAAI,iBAAiB,EAAE;AAC3B,MAAM,MAAM,EAAE,qBAAqB,EAAE,GAAG,QAAQ,EAAE,CAAC;AACnD,MAAM,MAAM,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,GAAG,qBAAqB,CAAC;AAC5F,MAAM,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,4BAA4B,CAAC;AACxE,MAAM,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,qBAAqB,CAAC;AACvE,MAAM,MAAM,mCAAmC,GAAG,cAAc,GAAG,cAAc,GAAG,aAAa,CAAC;AAClG,MAAM,MAAM,qCAAqC,GAAG,qBAAqB,CAAC,mCAAmC,CAAC,CAAC;AAC/G,MAAM,MAAM,mCAAmC,GAAG,qBAAqB,CAAC,UAAU,CAAC;AACnF,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;AAC3E,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;AAC3E,MAAM,MAAM,WAAW,GAAG;AAC1B,QAAQ,CAAC,EAAE,WAAW,IAAI,QAAQ,GAAG,CAAC,EAAE,WAAW,GAAG,sBAAsB,GAAG,qCAAqC,CAAC,EAAE,CAAC,GAAG,EAAE;AAC7H,QAAQ,CAAC,EAAE,WAAW,IAAI,QAAQ,GAAG,CAAC,EAAE,WAAW,GAAG,sBAAsB,GAAG,mCAAmC,CAAC,EAAE,CAAC,GAAG,EAAE;AAC3H,OAAO,CAAC;AACR,MAAM,IAAI,gBAAgB,EAAE;AAC5B,QAAQ,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC;AAC3C,QAAQ,IAAI,KAAK,EAAE;AACnB,UAAU,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;AACrC,UAAU,IAAI,QAAQ,EAAE;AACxB,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAClC,cAAc,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,wBAAwB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAChH,aAAa;AACb,YAAY,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAChD,YAAY,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC;AAC5C,YAAY,SAAS,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;AAC7C,WAAW;AACX,SAAS;AACT,OAAO,MAAM;AACb,QAAQ,KAAK,CAAC,SAAS,EAAE;AACzB,UAAU,UAAU,EAAE,WAAW,CAAC,CAAC;AACnC,UAAU,UAAU,EAAE,WAAW,CAAC,CAAC;AACnC,SAAS,CAAC,CAAC;AACX,OAAO;AACP,KAAK;AACL,IAAI,OAAO,iBAAiB,CAAC;AAC7B,GAAG,CAAC;AACJ,EAAE,MAAM,oBAAoB,GAAG,CAAC,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,KAAK;AAC7G,IAAI,MAAM,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,GAAG,qBAAqB,CAAC;AAC1F,IAAI,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,4BAA4B,CAAC;AACtE,IAAI,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,qBAAqB,CAAC;AACrE,IAAI,MAAM,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,GAAG,QAAQ,EAAE,CAAC;AACvE,IAAI,MAAM,mBAAmB,GAAG,cAAc,GAAG,YAAY,GAAG,aAAa,CAAC;AAC9E,IAAI,MAAM,4BAA4B,GAAG,cAAc,GAAG,aAAa,GAAG,cAAc,CAAC;AACzF,IAAI,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;AAC5E,IAAI,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,YAAY,CAAC;AAClE,IAAI,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,4BAA4B,CAAC,CAAC;AACtF,IAAI,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,aAAa,CAAC;AACpE,IAAI,gBAAgB,CAAC,KAAK,GAAG,CAAC,YAAY,EAAE,WAAW,GAAG,qBAAqB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1F,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,GAAG,qBAAqB,CAAC;AACjF,IAAI,gBAAgB,CAAC,YAAY,GAAG,CAAC,WAAW,GAAG,mBAAmB,CAAC;AACvE,IAAI,IAAI,eAAe,EAAE;AACzB,MAAM,gBAAgB,CAAC,4BAA4B,CAAC,GAAG,sBAAsB,IAAI,QAAQ,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC;AAC7G,MAAM,gBAAgB,CAAC,aAAa,GAAG,oBAAoB,IAAI,QAAQ,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC;AAC3F,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,MAAM,mBAAmB,GAAG,CAAC,4BAA4B,EAAE,cAAc,EAAE,qBAAqB,KAAK;AACvG,IAAI,IAAI,iBAAiB,EAAE;AAC3B,MAAM,MAAM,0BAA0B,GAAG,qBAAqB,IAAI,wBAAwB,CAAC,4BAA4B,CAAC,CAAC;AACzH,MAAM,MAAM,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,GAAG,QAAQ,EAAE,CAAC;AACzE,MAAM,MAAM,EAAE,4BAA4B,EAAE,GAAG,0BAA0B,CAAC;AAC1E,MAAM,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,4BAA4B,CAAC;AACxE,MAAM,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACnC,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK;AACtE,QAAQ,iBAAiB,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAC7D,OAAO,CAAC,CAAC;AACT,MAAM,IAAI,QAAQ,EAAE;AACpB,QAAQ,WAAW,CAAC,uCAAuC,CAAC,CAAC;AAC7D,OAAO;AACP,MAAM,IAAI,QAAQ,EAAE;AACpB,QAAQ,WAAW,CAAC,iDAAiD,CAAC,CAAC;AACvE,OAAO;AACP,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAClE,MAAM,WAAW,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;AACvD,MAAM,IAAI,CAAC,YAAY,EAAE;AACzB,QAAQ,iBAAiB,CAAC,MAAM,GAAG,EAAE,CAAC;AACtC,OAAO;AACP,MAAM,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAC1C,MAAM,OAAO;AACb,QAAQ,MAAM;AACd,UAAU,oBAAoB,CAAC,0BAA0B,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;AACzG,UAAU,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACtC,UAAU,QAAQ,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;AACxD,SAAS;AACT,QAAQ,0BAA0B;AAClC,OAAO,CAAC;AACR,KAAK;AACL,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAClB,GAAG,CAAC;AACJ,EAAE,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,KAAK;AAC9C,IAAI,MAAM;AACV,MAAM,YAAY;AAClB,MAAM,aAAa;AACnB,MAAM,gBAAgB;AACtB,MAAM,oBAAoB;AAC1B,MAAM,uBAAuB;AAC7B,MAAM,iBAAiB;AACvB,KAAK,GAAG,WAAW,CAAC;AACpB,IAAI,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,QAAQ,EAAE,CAAC;AAC7D,IAAI,MAAM,CAAC,kCAAkC,EAAE,mCAAmC,CAAC,GAAG,WAAW,CAAC,+BAA+B,CAAC,CAAC;AACnI,IAAI,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AAChE,IAAI,MAAM,4BAA4B,GAAG,kCAAkC,IAAI,0BAA0B,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC;AAC5I,IAAI,MAAM,iBAAiB,GAAG,CAAC,iBAAiB,IAAI,CAAC,YAAY,KAAK,YAAY,IAAI,gBAAgB,IAAI,aAAa,IAAI,mCAAmC,IAAI,uBAAuB,CAAC,CAAC;AAC3L,IAAI,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3D,IAAI,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3D,IAAI,MAAM,eAAe,GAAG,gBAAgB,IAAI,gBAAgB,CAAC;AACjE,IAAI,IAAI,iBAAiB,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;AAC1D,IAAI,IAAI,uBAAuB,GAAG,iCAAiC,CAAC,KAAK,CAAC,CAAC;AAC3E,IAAI,IAAI,kBAAkB,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;AAClE,IAAI,IAAI,+BAA+B,CAAC;AACxC,IAAI,IAAI,mCAAmC,IAAI,uBAAuB,EAAE;AACxE,MAAM,uBAAuB,CAAC,iCAAiC,EAAE,qCAAqC,EAAE,CAAC,4BAA4B,CAAC,CAAC;AACvI,KAAK;AACL,IAAI,IAAI,iBAAiB,EAAE;AAC3B,MAAM,+BAA+B,GAAG,wBAAwB,CAAC,4BAA4B,CAAC,CAAC;AAC/F,MAAM,cAAc,CAAC,+BAA+B,EAAE,gBAAgB,CAAC,CAAC;AACxE,KAAK;AACL,IAAI,IAAI,YAAY,IAAI,oBAAoB,IAAI,gBAAgB,IAAI,iBAAiB,IAAI,mCAAmC,EAAE;AAC9H,MAAM,IAAI,eAAe,EAAE;AAC3B,QAAQ,uBAAuB,CAAC,wBAAwB,EAAE,4BAA4B,EAAE,KAAK,CAAC,CAAC;AAC/F,OAAO;AACP,MAAM,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,CAAC,GAAG,mBAAmB,CAAC,4BAA4B,EAAE,eAAe,EAAE,+BAA+B,CAAC,CAAC;AAC1K,MAAM,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC,GAAG,iBAAiB,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAClG,MAAM,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,GAAG,uBAAuB,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;AAC/H,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AACvD,MAAM,IAAI,0BAA0B,GAAG,mBAAmB,CAAC;AAC3D,MAAM,IAAI,0BAA0B,GAAG,kBAAkB,CAAC;AAC1D,MAAM,mBAAmB,EAAE,CAAC;AAC5B,MAAM,IAAI,CAAC,0BAA0B,IAAI,oBAAoB,IAAI,mCAAmC,KAAK,gCAAgC,IAAI,CAAC,4BAA4B,IAAI,eAAe,CAAC,gCAAgC,EAAE,mBAAmB,EAAE,aAAa,EAAE,eAAe,CAAC,EAAE;AACtR,QAAQ,0BAA0B,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AAC3D,QAAQ,0BAA0B,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AAC3D,OAAO;AACP,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,iBAAiB,CAAC;AACvE,QAAQ,CAAC,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC,CAAC;AACnE,QAAQ,CAAC,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC,CAAC;AACnE,OAAO,EAAE;AACT,QAAQ,CAAC,EAAE,0BAA0B,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC;AAC9F,QAAQ,CAAC,EAAE,0BAA0B,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC;AAC9F,OAAO,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;AAChC,KAAK;AACL,IAAI,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC,GAAG,kBAAkB,CAAC;AACvE,IAAI,MAAM,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,GAAG,uBAAuB,CAAC;AACpF,IAAI,MAAM,CAAC,YAAY,EAAE,mBAAmB,CAAC,GAAG,iBAAiB,CAAC;AAClE,IAAI,MAAM,WAAW,GAAG;AACxB,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC;AAC7B,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC;AAC7B,KAAK,CAAC;AACN,IAAI,MAAM,cAAc,GAAG,gBAAgB,IAAI,gBAAgB,KAAK,WAAW,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,gBAAgB,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,gBAAgB,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAClN,IAAI,IAAI,oBAAoB,IAAI,iBAAiB,IAAI,mBAAmB,IAAI,yBAAyB,IAAI,qBAAqB,IAAI,eAAe,IAAI,mCAAmC,IAAI,iBAAiB,EAAE;AAC/M,MAAM,MAAM,aAAa,GAAG;AAC5B,QAAQ,WAAW,EAAE,CAAC;AACtB,QAAQ,YAAY,EAAE,CAAC;AACvB,QAAQ,UAAU,EAAE,CAAC;AACrB,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,SAAS,EAAE,EAAE;AACrB,QAAQ,SAAS,EAAE,EAAE;AACrB,OAAO,CAAC;AACR,MAAM,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,4BAA4B,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AACjI,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;AACzH,MAAM,IAAI,CAAC,iBAAiB,EAAE;AAC9B,QAAQ,oBAAoB,CAAC,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;AACtG,OAAO;AACP,MAAM,IAAI,iBAAiB,EAAE;AAC7B,QAAQ,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC;AAChE,OAAO;AACP,MAAM,IAAI,iBAAiB,EAAE;AAC7B,QAAQ,IAAI,CAAC,KAAK,EAAE,0BAA0B,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,KAAK,EAAE,0BAA0B,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;AACzE,OAAO,MAAM;AACb,QAAQ,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACxC,OAAO;AACP,KAAK;AACL,IAAI,SAAS,CAAC,KAAK,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,cAAc,CAAC,CAAC;AACtF,IAAI,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,cAAc,CAAC,CAAC;AACzE,IAAI,CAAC,iBAAiB,IAAI,gBAAgB,CAAC,SAAS,EAAE,wBAAwB,EAAE,eAAe,CAAC,CAAC;AACjG,IAAI,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC,GAAG,wBAAwB,CAAC,wBAAwB,CAAC,4BAA4B,CAAC,CAAC,cAAc,CAAC,CAAC;AAClJ,IAAI,QAAQ,CAAC;AACb,MAAM,cAAc,EAAE,aAAa;AACnC,MAAM,eAAe,EAAE;AACvB,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC;AAC3B,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC;AAC3B,OAAO;AACP,MAAM,YAAY,EAAE,WAAW;AAC/B,KAAK,CAAC,CAAC;AACP,IAAI,OAAO;AACX,MAAM,qBAAqB,EAAE,oBAAoB;AACjD,MAAM,sBAAsB,EAAE,qBAAqB;AACnD,KAAK,CAAC;AACN,GAAG,CAAC;AACJ,CAAC;;AC/TD,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,KAAK;AACzD,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB,EAAE,MAAM,aAAa,GAAG,QAAQ,IAAI,EAAE,CAAC;AACvC,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC5D,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK;AACzB,IAAI,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACtC,IAAI,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AAC7C,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,YAAY,IAAI,aAAa,CAAC,CAAC;AAC7D,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AACK,MAAM,0BAA0B,GAAG,CAAC,sBAAsB,EAAE,KAAK,KAAK;AAC7E,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,sBAAsB,CAAC;AAC/C,EAAE,MAAM,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE,CAAC;AACjG,EAAE,MAAM,iBAAiB,GAAG,CAAC,uBAAuB,KAAK,0BAA0B,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAC;AACvH,EAAE,MAAM,cAAc,GAAG;AACzB,IAAI,mBAAmB,CAAC,sBAAsB,EAAE,KAAK,CAAC;AACtD,IAAI,mBAAmB,CAAC,sBAAsB,EAAE,KAAK,CAAC;AACtD,IAAI,oBAAoB,CAAC,sBAAsB,EAAE,KAAK,CAAC;AACvD,GAAG,CAAC;AACJ,EAAE,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,KAAK;AAC9C,IAAI,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,UAAU,CAAC;AAC7D,MAAM,YAAY,EAAE,KAAK;AACzB,MAAM,oBAAoB,EAAE,KAAK;AACjC,MAAM,iBAAiB,EAAE,KAAK;AAC9B,MAAM,uBAAuB,EAAE,KAAK;AACpC,MAAM,sBAAsB,EAAE,KAAK;AACnC,MAAM,qBAAqB,EAAE,KAAK;AAClC,MAAM,aAAa,EAAE,KAAK;AAC1B,MAAM,gBAAgB,EAAE,KAAK;AAC7B,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AAChC,IAAI,MAAM,kBAAkB,GAAG,iBAAiB,IAAI,CAAC,YAAY,CAAC;AAClE,IAAI,MAAM,aAAa,GAAG,kBAAkB,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;AACtE,IAAI,MAAM,aAAa,GAAG,kBAAkB,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;AACrE,IAAI,IAAI,oBAAoB,GAAG,kBAAkB,CAAC;AAClD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,KAAK;AAC5C,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,oBAAoB,EAAE,aAAa,CAAC,oBAAoB,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;AAC9I,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE;AACjC,MAAM,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC3C,KAAK;AACL,IAAI,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE;AACjC,MAAM,SAAS,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC1C,KAAK;AACL,IAAI,OAAO,oBAAoB,CAAC;AAChC,GAAG,CAAC;AACJ,CAAC;;ACpBD,MAAM,uBAAuB,GAAG,gBAAgB,CAAC;AACjD,MAAM,eAAe,GAAG,QAAQ,CAAC;AACjC,MAAM,YAAY,GAAG,OAAO,CAAC;AAC7B,MAAM,oBAAoB,GAAG,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,KAAK,CAAC;AACxE,MAAM,oBAAoB,GAAG,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AACpE,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,KAAK;AAC9E,EAAE,MAAM,EAAE,UAAU,EAAE,sBAAsB,GAAG,KAAK,EAAE,OAAO,EAAE,mBAAmB,GAAG,KAAK,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;AAC7G,EAAE,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,cAAc,EAAE,CAAC;AACrE,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,YAAY,EAAE,qBAAqB,CAAC,cAAc,EAAE,6BAA6B,CAAC,cAAc,CAAC,CAAC,CAAC;AACrI,EAAE,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AACvC,EAAE,MAAM,eAAe,GAAG,YAAY,CAAC,UAAU,CAAC;AAClD,EAAE,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;AACvE,EAAE,MAAM,CAAC,oCAAoC,CAAC,GAAG,WAAW,CAAC;AAC7D,IAAI,aAAa,EAAE,KAAK,CAAC;AACzB,IAAI,mBAAmB,EAAE,IAAI;AAC7B,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,EAAE,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC9G,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,0BAA0B,GAAG,CAAC,kBAAkB,KAAK;AAC7D,IAAI,MAAM,oBAAoB,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AACjI,IAAI,MAAM,iBAAiB,GAAG,CAAC,oBAAoB,IAAI,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AACxF,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC;AACrB,IAAI,IAAI,MAAM,GAAG,KAAK,CAAC;AACvB,IAAI,IAAI,iBAAiB,GAAG,IAAI,CAAC;AACjC,IAAI,IAAI,oBAAoB,EAAE;AAC9B,MAAM,MAAM,CAAC,gBAAgB,IAAI,eAAe,CAAC,GAAG,oCAAoC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;AAC/H,MAAM,MAAM,aAAa,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;AACnE,MAAM,MAAM,aAAa,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC;AAClE,MAAM,IAAI,GAAG,CAAC,eAAe,IAAI,CAAC,aAAa,CAAC;AAChD,MAAM,MAAM,GAAG,CAAC,aAAa,IAAI,aAAa,CAAC;AAC/C,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC;AAChC,KAAK,MAAM,IAAI,iBAAiB,EAAE;AAClC,MAAM,GAAG,iBAAiB,CAAC,GAAG,kBAAkB,CAAC;AACjD,KAAK,MAAM;AACX,MAAM,MAAM,GAAG,kBAAkB,KAAK,IAAI,CAAC;AAC3C,KAAK;AACL,IAAI,IAAI,sBAAsB,IAAI,iBAAiB,EAAE;AACrD,MAAM,MAAM,GAAG,GAAG,iBAAiB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;AACjG,MAAM,UAAU,CAAC,YAAY,EAAE,GAAG,GAAG,iBAAiB,CAAC,CAAC,GAAG,CAAC,YAAY,GAAG,iBAAiB,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC;AAClI,MAAM,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAC5C,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,MAAM,qBAAqB,CAAC;AAC5B,QAAQ,YAAY,EAAE,CAAC,iBAAiB;AACxC,QAAQ,oBAAoB,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,KAAK,CAAC;AAC7E,QAAQ,OAAO,EAAE,CAAC,CAAC,MAAM;AACzB,OAAO,CAAC,CAAC;AACT,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,MAAM,YAAY,GAAG,EAAE,CAAC;AAC1B,EAAE,IAAI,cAAc,GAAG,mBAAmB,GAAG,0BAA0B,GAAG,KAAK,CAAC;AAChF,EAAE,IAAI,mBAAmB,CAAC;AAC1B,EAAE,IAAI,yBAAyB,EAAE;AACjC,IAAI,MAAM,sBAAsB,GAAG,IAAI,yBAAyB,CAAC,0BAA0B,CAAC,CAAC;AAC7F,IAAI,sBAAsB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AACpD,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM;AAC7B,MAAM,sBAAsB,CAAC,UAAU,EAAE,CAAC;AAC1C,KAAK,CAAC,CAAC;AACP,GAAG,MAAM;AACT,IAAI,MAAM,uBAAuB,GAAG,SAAS,CAAC,CAAC,YAAY,EAAE,iCAAiC,CAAC,wBAAwB,EAAE,iCAAiC,CAAC,cAAc,EAAE,sCAAsC,CAAC,0BAA0B,EAAE,iCAAiC,CAAC,cAAc,EAAE,sCAAsC,CAAC,sDAAsD,CAAC,CAAC,CAAC;AAChY,IAAI,cAAc,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC;AAC7D,IAAI,QAAQ,CAAC,eAAe,EAAE,mCAAmC,CAAC,CAAC;AACnE,IAAI,MAAM,2BAA2B,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;AACnE,IAAI,MAAM,aAAa,GAAG,2BAA2B,CAAC,SAAS,CAAC;AAChE,IAAI,MAAM,aAAa,GAAG,2BAA2B,CAAC,UAAU,CAAC;AACjE,IAAI,MAAM,kBAAkB,GAAG,aAAa,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC;AACzF,IAAI,IAAI,SAAS,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAC;AAC5D,IAAI,IAAI,QAAQ,GAAG,SAAS,CAAC;AAC7B,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC;AACxB,IAAI,IAAI,KAAK,CAAC;AACd,IAAI,MAAM,KAAK,GAAG,MAAM;AACxB,MAAM,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AAC9C,MAAM,SAAS,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AAC7C,MAAM,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AAC9C,MAAM,SAAS,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AAC7C,KAAK,CAAC;AACN,IAAI,MAAM,SAAS,GAAG,CAAC,MAAM,KAAK;AAClC,MAAM,KAAK,GAAG,CAAC,CAAC;AAChB,MAAM,IAAI,OAAO,EAAE;AACnB,QAAQ,SAAS,GAAG,QAAQ,CAAC;AAC7B,QAAQ,0BAA0B,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;AACpD,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,QAAQ,GAAG,CAAC,WAAW,KAAK;AACtC,MAAM,QAAQ,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAC;AACzD,MAAM,OAAO,GAAG,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC9D,MAAM,IAAI,WAAW,EAAE;AACvB,QAAQ,cAAc,CAAC,WAAW,CAAC,CAAC;AACpC,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE;AAC/B,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC;AACrB,UAAU,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;AACjC,SAAS;AACT,OAAO,MAAM;AACb,QAAQ,SAAS,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC;AACzC,OAAO;AACP,MAAM,KAAK,EAAE,CAAC;AACd,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,YAAY,EAAE;AACvB,MAAM,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,QAAQ,CAAC;AAClD,MAAM,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,QAAQ,CAAC;AAClD,KAAK,CAAC,CAAC;AACP,IAAI,KAAK,CAAC,kBAAkB,EAAE;AAC9B,MAAM,KAAK,EAAE,YAAY;AACzB,MAAM,MAAM,EAAE,YAAY;AAC1B,KAAK,CAAC,CAAC;AACP,IAAI,KAAK,EAAE,CAAC;AACZ,IAAI,cAAc,GAAG,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;AAC3E,GAAG;AACH,EAAE,IAAI,sBAAsB,EAAE;AAC9B,IAAI,mBAAmB,GAAG,WAAW,CAAC;AACtC,MAAM,aAAa,EAAE,CAAC,iBAAiB,EAAE;AACzC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AAC1B,IAAI,MAAM,CAAC,yBAAyB,CAAC,GAAG,mBAAmB,CAAC;AAC5D,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,CAAC,KAAK,KAAK;AACpE,MAAM,MAAM,yBAAyB,GAAG,yBAAyB,EAAE,CAAC;AACpE,MAAM,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC,GAAG,yBAAyB,CAAC;AAChF,MAAM,IAAI,qBAAqB,EAAE;AACjC,QAAQ,WAAW,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;AAChD,QAAQ,IAAI,cAAc,EAAE;AAC5B,UAAU,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AAC3C,SAAS,MAAM;AACf,UAAU,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AAC3C,SAAS;AACT,QAAQ,0BAA0B,CAAC,yBAAyB,CAAC,CAAC;AAC9D,OAAO;AACP,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;AAC5B,KAAK,CAAC,CAAC,CAAC;AACR,GAAG;AACH,EAAE,IAAI,cAAc,EAAE;AACtB,IAAI,QAAQ,CAAC,YAAY,EAAE,2BAA2B,CAAC,CAAC;AACxD,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,EAAE,uBAAuB,EAAE,cAAc,EAAE;AACjF,MAAM,KAAK,EAAE,CAAC,CAAC,yBAAyB;AACxC,KAAK,CAAC,CAAC,CAAC;AACR,GAAG;AACH,EAAE,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACxC,EAAE,OAAO,MAAM;AACf,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;AAC1B,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC;AACjC,GAAG,CAAC;AACJ,CAAC;;AC/JD,MAAM,iBAAiB,GAAG,CAAC,aAAa,KAAK,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,cAAc,IAAI,aAAa,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACnI,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,wBAAwB,KAAK;AAC3E,EAAE,MAAM,eAAe,GAAG,SAAS,CAAC,wBAAwB,CAAC,CAAC;AAC9D,EAAE,MAAM,YAAY,GAAG,EAAE,CAAC;AAC1B,EAAE,MAAM,CAAC,0BAA0B,CAAC,GAAG,WAAW,CAAC;AACnD,IAAI,aAAa,EAAE,KAAK;AACxB,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,+BAA+B,GAAG,CAAC,WAAW,KAAK;AAC3D,IAAI,IAAI,WAAW,EAAE;AACrB,MAAM,MAAM,eAAe,GAAG,0BAA0B,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;AACzF,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,eAAe,CAAC;AACzD,MAAM,IAAI,sBAAsB,EAAE;AAClC,QAAQ,wBAAwB,CAAC,eAAe,CAAC,CAAC;AAClD,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,IAAI,+BAA+B,EAAE;AACvC,IAAI,MAAM,4BAA4B,GAAG,IAAI,+BAA+B,CAAC,CAAC,OAAO,KAAK;AAC1F,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,QAAQ,+BAA+B,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACvD,OAAO;AACP,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AACzB,IAAI,4BAA4B,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAC1D,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM;AAC7B,MAAM,4BAA4B,CAAC,UAAU,EAAE,CAAC;AAChD,KAAK,CAAC,CAAC;AACP,GAAG,MAAM;AACT,IAAI,MAAM,aAAa,GAAG,MAAM;AAChC,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;AAClD,MAAM,+BAA+B,CAAC,OAAO,CAAC,CAAC;AAC/C,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;AAC3E,IAAI,aAAa,EAAE,CAAC;AACpB,GAAG;AACH,EAAE,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAC3C,EAAE,OAAO,MAAM;AACf,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;AAC1B,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;AACpC,GAAG,CAAC;AACJ,CAAC;;ACrCD,MAAM,wBAAwB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,kBAAkB,KAAK;AAC3E,EAAE,IAAI,GAAG,CAAC;AACV,EAAE,IAAI,SAAS,GAAG,KAAK,CAAC;AACxB,EAAE,MAAM,OAAO,GAAG,MAAM;AACxB,IAAI,SAAS,GAAG,IAAI,CAAC;AACrB,GAAG,CAAC;AACJ,EAAE,MAAM,cAAc,GAAG,CAAC,WAAW,KAAK;AAC1C,IAAI,IAAI,kBAAkB,EAAE;AAC5B,MAAM,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AACpE,QAAQ,IAAI,IAAI,EAAE;AAClB,UAAU,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,UAAU,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACrC,UAAU,MAAM,QAAQ,GAAG,UAAU,IAAI,QAAQ,KAAK,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACpH,UAAU,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,IAAI,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE;AACjF,YAAY,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC3D,WAAW;AACX,SAAS;AACT,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO,EAAE,EAAE,CAAC,CAAC;AACb,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK;AAC1D,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,QAAQ,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,QAAQ,IAAI,KAAK,EAAE;AACnB,UAAU,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3C,UAAU,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACpC,UAAU,IAAI,eAAe,KAAK,UAAU,EAAE;AAC9C,YAAY,QAAQ,EAAE,CAAC;AACvB,WAAW;AACX,SAAS;AACT,QAAQ,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,KAAK,KAAK;AACnD,UAAU,IAAI,SAAS,EAAE;AACzB,YAAY,GAAG,EAAE,CAAC;AAClB,YAAY,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5B,WAAW,MAAM;AACjB,YAAY,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5B,WAAW;AACX,SAAS,CAAC,CAAC;AACX,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;AACxC,OAAO,CAAC,CAAC,CAAC;AACV,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,IAAI,kBAAkB,EAAE;AAC1B,IAAI,GAAG,mBAAmB,IAAI,OAAO,EAAE,CAAC;AACxC,IAAI,cAAc,EAAE,CAAC;AACrB,GAAG;AACH,EAAE,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AACnC,CAAC,CAAC;AACK,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,KAAK;AACnF,EAAE,IAAI,WAAW,GAAG,KAAK,CAAC;AAC1B,EAAE,MAAM;AACR,IAAI,WAAW;AACf,IAAI,wBAAwB;AAC5B,IAAI,mBAAmB;AACvB,IAAI,qBAAqB;AACzB,IAAI,mBAAmB;AACvB,IAAI,oBAAoB;AACxB,GAAG,GAAG,OAAO,IAAI,EAAE,CAAC;AACpB,EAAE,MAAM,CAAC,yBAAyB,EAAE,gCAAgC,CAAC,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM;AACxH,IAAI,IAAI,WAAW,EAAE;AACrB,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrB,KAAK;AACL,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAC5D,EAAE,MAAM,eAAe,GAAG,WAAW,IAAI,EAAE,CAAC;AAC5C,EAAE,MAAM,4BAA4B,GAAG,wBAAwB,IAAI,EAAE,CAAC;AACtE,EAAE,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAClF,EAAE,MAAM,gBAAgB,GAAG,CAAC,SAAS,KAAK;AAC1C,IAAI,MAAM,kBAAkB,GAAG,mBAAmB,IAAI,IAAI,CAAC;AAC3D,IAAI,MAAM,mBAAmB,GAAG,oBAAoB,IAAI,IAAI,CAAC;AAC7D,IAAI,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAClC,IAAI,MAAM,eAAe,GAAG,EAAE,CAAC;AAC/B,IAAI,IAAI,kBAAkB,GAAG,KAAK,CAAC;AACnC,IAAI,IAAI,cAAc,GAAG,KAAK,CAAC;AAC/B,IAAI,IAAI,gBAAgB,GAAG,KAAK,CAAC;AACjC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,KAAK;AAClC,MAAM,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC;AAC7F,MAAM,MAAM,gBAAgB,GAAG,IAAI,KAAK,YAAY,CAAC;AACrD,MAAM,MAAM,eAAe,GAAG,IAAI,KAAK,WAAW,CAAC;AACnD,MAAM,MAAM,sBAAsB,GAAG,MAAM,KAAK,cAAc,CAAC;AAC/D,MAAM,MAAM,cAAc,GAAG,gBAAgB,IAAI,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;AACnH,MAAM,MAAM,gBAAgB,GAAG,cAAc,KAAK,CAAC,IAAI,QAAQ,KAAK,cAAc,CAAC;AACnF,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAAC,4BAA4B,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,gBAAgB,CAAC;AACrH,MAAM,IAAI,iBAAiB,IAAI,CAAC,sBAAsB,EAAE;AACxD,QAAQ,MAAM,kBAAkB,GAAG,CAAC,gBAAgB,CAAC;AACrD,QAAQ,MAAM,kBAAkB,GAAG,gBAAgB,IAAI,wBAAwB,CAAC;AAChF,QAAQ,MAAM,cAAc,GAAG,kBAAkB,IAAI,qBAAqB,IAAI,EAAE,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;AACxH,QAAQ,MAAM,aAAa,GAAG,cAAc,GAAG,CAAC,kBAAkB,CAAC,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,GAAG,kBAAkB,IAAI,kBAAkB,CAAC;AACvK,QAAQ,MAAM,mBAAmB,GAAG,aAAa,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACvH,QAAQ,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;AAC1C,QAAQ,cAAc,GAAG,cAAc,IAAI,mBAAmB,CAAC;AAC/D,QAAQ,gBAAgB,GAAG,gBAAgB,IAAI,eAAe,CAAC;AAC/D,OAAO;AACP,MAAM,IAAI,CAAC,iBAAiB,IAAI,sBAAsB,IAAI,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE;AAC5J,QAAQ,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;AAChD,QAAQ,kBAAkB,GAAG,kBAAkB,IAAI,wBAAwB,CAAC;AAC5E,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,gBAAgB,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE;AAC5D,MAAM,gCAAgC,CAAC,CAAC,QAAQ,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AAC3F,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;AACxC,QAAQ,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;AAC1D,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACd,KAAK;AACL,IAAI,IAAI,iBAAiB,EAAE;AAC3B,MAAM,cAAc,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxC,KAAK,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,kBAAkB,EAAE;AACxE,MAAM,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;AACvD,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,MAAM,gBAAgB,GAAG,IAAI,2BAA2B,CAAC,gBAAgB,CAAC,CAAC;AAC7E,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE;AACnC,IAAI,UAAU,EAAE,IAAI;AACpB,IAAI,iBAAiB,EAAE,IAAI;AAC3B,IAAI,eAAe,EAAE,kBAAkB;AACvC,IAAI,OAAO,EAAE,iBAAiB;AAC9B,IAAI,SAAS,EAAE,iBAAiB;AAChC,IAAI,aAAa,EAAE,iBAAiB;AACpC,GAAG,CAAC,CAAC;AACL,EAAE,WAAW,GAAG,IAAI,CAAC;AACrB,EAAE,OAAO;AACT,IAAI,MAAM;AACV,MAAM,IAAI,WAAW,EAAE;AACvB,QAAQ,yBAAyB,EAAE,CAAC;AACpC,QAAQ,gBAAgB,CAAC,UAAU,EAAE,CAAC;AACtC,QAAQ,WAAW,GAAG,KAAK,CAAC;AAC5B,OAAO;AACP,KAAK;AACL,IAAI,MAAM;AACV,MAAM,IAAI,WAAW,EAAE;AACvB,QAAQ,gBAAgB,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC;AACzD,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ,CAAC;;ACtHD,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC9C,MAAM,gBAAgB,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACjD,MAAM,uBAAuB,GAAG,CAAC,UAAU,CAAC,CAAC;AAC7C,MAAM,8BAA8B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAChE,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACzD,MAAM,6BAA6B,GAAG,CAAC,sBAAsB,EAAE,KAAK,EAAE,oBAAoB,KAAK;AACtG,EAAE,IAAI,eAAe,CAAC;AACtB,EAAE,IAAI,gBAAgB,CAAC;AACvB,EAAE,IAAI,uBAAuB,CAAC;AAC9B,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC;AAC7B,EAAE,MAAM;AACR,IAAI,KAAK;AACT,IAAI,SAAS;AACb,IAAI,QAAQ;AACZ,IAAI,WAAW;AACf,IAAI,iBAAiB;AACrB,IAAI,iBAAiB;AACrB,IAAI,uBAAuB;AAC3B,GAAG,GAAG,sBAAsB,CAAC;AAC7B,EAAE,MAAM,EAAE,uBAAuB,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE,CAAC;AACrE,EAAE,MAAM,CAAC,sBAAsB,CAAC,GAAG,WAAW,CAAC;AAC/C,IAAI,MAAM,EAAE,OAAO;AACnB,IAAI,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACjC,GAAG,EAAE,MAAM;AACX,IAAI,MAAM,GAAG,GAAG,iBAAiB,CAAC,wBAAwB,EAAE,4BAA4B,CAAC,CAAC;AAC1F,IAAI,GAAG,IAAI,uBAAuB,CAAC,wBAAwB,EAAE,4BAA4B,CAAC,CAAC;AAC3F,IAAI,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC/C,IAAI,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AACjD,IAAI,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;AACjD,IAAI,GAAG,IAAI,uBAAuB,CAAC,wBAAwB,EAAE,4BAA4B,EAAE,IAAI,CAAC,CAAC;AACjG,IAAI,OAAO;AACX,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AAC1D,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AAC1D,KAAK,CAAC;AACN,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,2BAA2B,GAAG,WAAW,GAAG,8BAA8B,GAAG,sBAAsB,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;AACnJ,EAAE,MAAM,oDAAoD,GAAG,QAAQ,CAAC,oBAAoB,EAAE;AAC9F,IAAI,QAAQ,EAAE,MAAM,eAAe;AACnC,IAAI,SAAS,EAAE,MAAM,gBAAgB;AACrC,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE;AAC7B,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;AAC7B,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;AAC7B,MAAM,OAAO;AACb,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;AACjE,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;AAClD,UAAU,OAAO,GAAG,CAAC;AACrB,SAAS,EAAE,EAAE,CAAC;AACd,OAAO,CAAC;AACR,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,2BAA2B,GAAG,CAAC,UAAU,KAAK;AACtD,IAAI,IAAI,CAAC,UAAU,IAAI,uBAAuB,EAAE,CAAC,SAAS,KAAK;AAC/D,MAAM,IAAI,OAAO,CAAC,uBAAuB,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5D,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAChD,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAChC,UAAU,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC/C,SAAS,MAAM;AACf,UAAU,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAC3C,SAAS;AACT,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ,EAAE,MAAM,gBAAgB,GAAG,CAAC,oBAAoB,KAAK;AACrD,IAAI,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,GAAG,oBAAoB,CAAC;AAC3E,IAAI,QAAQ,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC;AACpD,IAAI,oBAAoB,CAAC,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,CAAC,CAAC;AAC9E,GAAG,CAAC;AACJ,EAAE,MAAM,aAAa,GAAG,CAAC;AACzB,IAAI,YAAY;AAChB,IAAI,oBAAoB;AACxB,IAAI,OAAO;AACX,GAAG,KAAK;AACR,IAAI,MAAM,QAAQ,GAAG,CAAC,YAAY,IAAI,OAAO,GAAG,oBAAoB,GAAG,oDAAoD,CAAC;AAC5H,IAAI,IAAI,gBAAgB,GAAG,KAAK,CAAC;AACjC,IAAI,IAAI,oBAAoB,EAAE;AAC9B,MAAM,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC,GAAG,oBAAoB,CAAC;AAC3E,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAC/C,MAAM,QAAQ,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,CAAC;AACpD,KAAK;AACL,IAAI,QAAQ,CAAC,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACpE,GAAG,CAAC;AACJ,EAAE,MAAM,iBAAiB,GAAG,CAAC,yBAAyB,KAAK;AAC3D,IAAI,MAAM,GAAG,kBAAkB,CAAC,GAAG,sBAAsB,EAAE,CAAC;AAC5D,IAAI,MAAM,QAAQ,GAAG,yBAAyB,GAAG,oBAAoB,GAAG,oDAAoD,CAAC;AAC7H,IAAI,IAAI,kBAAkB,EAAE;AAC5B,MAAM,QAAQ,CAAC;AACf,QAAQ,gBAAgB,EAAE,IAAI;AAC9B,OAAO,CAAC,CAAC;AACT,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,MAAM,cAAc,GAAG,CAAC,kBAAkB,EAAE,kBAAkB,KAAK;AACrE,IAAI,IAAI,kBAAkB,EAAE;AAC5B,MAAM,oDAAoD,CAAC;AAC3D,QAAQ,aAAa,EAAE,IAAI;AAC3B,OAAO,CAAC,CAAC;AACT,KAAK,MAAM,IAAI,CAAC,iBAAiB,EAAE;AACnC,MAAM,2BAA2B,CAAC,kBAAkB,CAAC,CAAC;AACtD,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,MAAM,sBAAsB,GAAG,CAAC,QAAQ,IAAI,CAAC,YAAY,KAAK,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAC/G,EAAE,MAAM,mBAAmB,GAAG,CAAC,iBAAiB,IAAI,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE;AAC7F,IAAI,OAAO,EAAE,IAAI;AACjB,IAAI,UAAU,EAAE,CAAC,uBAAuB;AACxC,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,CAAC,2BAA2B,CAAC,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE;AACxF,IAAI,wBAAwB,EAAE,sBAAsB;AACpD,IAAI,WAAW,EAAE,sBAAsB,CAAC,MAAM,CAAC,uBAAuB,CAAC;AACvE,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,8BAA8B,GAAG,iBAAiB,IAAI,IAAI,yBAAyB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3I,EAAE,8BAA8B,IAAI,8BAA8B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClF,EAAE,2BAA2B,EAAE,CAAC;AAChC,EAAE,OAAO;AACT,IAAI,CAAC,WAAW,KAAK;AACrB,MAAM,MAAM,CAAC,cAAc,CAAC,GAAG,WAAW,CAAC,yBAAyB,CAAC,CAAC;AACtE,MAAM,MAAM,CAAC,UAAU,EAAE,iBAAiB,CAAC,GAAG,WAAW,CAAC,qBAAqB,CAAC,CAAC;AACjF,MAAM,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC,GAAG,WAAW,CAAC,wBAAwB,CAAC,CAAC;AAC1F,MAAM,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,GAAG,WAAW,CAAC,mBAAmB,CAAC,CAAC;AAChF,MAAM,MAAM,6BAA6B,GAAG,oBAAoB,IAAI,iBAAiB,CAAC;AACtF,MAAM,MAAM,yBAAyB,GAAG,CAAC,QAAQ,KAAK,UAAU,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC7G,MAAM,IAAI,6BAA6B,EAAE;AACzC,QAAQ,IAAI,uBAAuB,EAAE;AACrC,UAAU,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;AACvC,UAAU,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;AACvC,SAAS;AACT,QAAQ,uBAAuB,GAAG,iBAAiB,CAAC,QAAQ,IAAI,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE;AACpG,UAAU,wBAAwB,EAAE,2BAA2B,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;AACxF,UAAU,WAAW,EAAE,2BAA2B,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;AAC3E,UAAU,mBAAmB,EAAE,aAAa;AAC5C,UAAU,qBAAqB,EAAE,YAAY;AAC7C,UAAU,oBAAoB,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK;AAC9D,YAAY,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC;AACvD,YAAY,MAAM,MAAM,GAAG,CAAC,cAAc,IAAI,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC;AAC1H,YAAY,OAAO,MAAM,IAAI,CAAC,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AACnE,WAAW;AACX,SAAS,CAAC,CAAC;AACX,OAAO;AACP,MAAM,IAAI,eAAe,EAAE;AAC3B,QAAQ,oDAAoD,CAAC,MAAM,EAAE,CAAC;AACtE,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC,EAAE;AACpC,UAAU,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AAC3C,UAAU,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AAC3C,UAAU,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC;AAChE,UAAU,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC;AACjE,SAAS,MAAM,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE;AAC5C,UAAU,eAAe,GAAG,aAAa,CAAC;AAC1C,UAAU,gBAAgB,GAAG,KAAK,CAAC;AACnC,SAAS,MAAM;AACf,UAAU,eAAe,GAAG,KAAK,CAAC;AAClC,UAAU,gBAAgB,GAAG,KAAK,CAAC;AACnC,SAAS;AACT,OAAO;AACP,KAAK;AACL,IAAI,MAAM;AACV,MAAM,uBAAuB,IAAI,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9D,MAAM,sBAAsB,IAAI,sBAAsB,EAAE,CAAC;AACzD,MAAM,mBAAmB,IAAI,mBAAmB,EAAE,CAAC;AACnD,MAAM,8BAA8B,IAAI,8BAA8B,CAAC,UAAU,EAAE,CAAC;AACpF,MAAM,2BAA2B,EAAE,CAAC;AACpC,KAAK;AACL,GAAG,CAAC;AACJ,CAAC;;ACvLD,MAAM,gCAAgC,GAAG;AACzC,EAAE,QAAQ,EAAE;AACZ,IAAI,CAAC,EAAE,CAAC;AACR,IAAI,CAAC,EAAE,CAAC;AACR,IAAI,CAAC,EAAE,CAAC;AACR,IAAI,CAAC,EAAE,CAAC;AACR,GAAG;AACH,EAAE,gBAAgB,EAAE,KAAK;AACzB,EAAE,qBAAqB,EAAE;AACzB,IAAI,WAAW,EAAE,CAAC;AAClB,IAAI,YAAY,EAAE,CAAC;AACnB,IAAI,UAAU,EAAE,CAAC;AACjB,IAAI,UAAU,EAAE,CAAC;AACjB,IAAI,YAAY,EAAE,CAAC;AACnB,IAAI,aAAa,EAAE,CAAC;AACpB,IAAI,WAAW,EAAE,CAAC;AAClB,GAAG;AACH,EAAE,eAAe,EAAE;AACnB,IAAI,CAAC,EAAE,CAAC;AACR,IAAI,CAAC,EAAE,CAAC;AACR,GAAG;AACH,EAAE,cAAc,EAAE;AAClB,IAAI,CAAC,EAAE,QAAQ;AACf,IAAI,CAAC,EAAE,QAAQ;AACf,GAAG;AACH,EAAE,YAAY,EAAE;AAChB,IAAI,CAAC,EAAE,KAAK;AACZ,IAAI,CAAC,EAAE,KAAK;AACZ,GAAG;AACH,EAAE,gBAAgB,EAAE,KAAK;AACzB,EAAE,eAAe,EAAE,KAAK;AACxB,CAAC,CAAC;AACK,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK;AACzD,EAAE,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC9D,EAAE,MAAM,KAAK,GAAG,WAAW,CAAC,gCAAgC,CAAC,CAAC;AAC9D,EAAE,MAAM,kBAAkB,mBAAmB,IAAI,GAAG,EAAE,CAAC;AACvD,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;AAC3B,EAAE,MAAM,qBAAqB,GAAG,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,KAAK;AACxE,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,WAAW,EAAE,cAAc,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9E,GAAG,CAAC;AACJ,EAAE,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;AAC3E,EAAE,MAAM,eAAe,GAAG,0BAA0B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACtE,EAAE,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,GAAG,6BAA6B,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,WAAW,KAAK;AAC9G,IAAI,qBAAqB,CAAC,eAAe,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC,CAAC;AAC9E,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/C,EAAE,mBAAmB,CAAC,qBAAqB,GAAG,CAAC,QAAQ,KAAK;AAC5D,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACrC,GAAG,CAAC;AACJ,EAAE,mBAAmB,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC3C,EAAE,OAAO;AACT,IAAI,CAAC,cAAc,EAAE,KAAK,KAAK;AAC/B,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;AAC5E,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;AACnC,MAAM,qBAAqB,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AACrE,KAAK;AACL,IAAI,mBAAmB;AACvB,IAAI,MAAM;AACV,MAAM,kBAAkB,CAAC,KAAK,EAAE,CAAC;AACjC,MAAM,gBAAgB,EAAE,CAAC;AACzB,MAAM,eAAe,EAAE,CAAC;AACxB,KAAK;AACL,GAAG,CAAC;AACJ,CAAC;;AC3DD,MAAM,oBAAoB,GAAG,CAAC,kBAAkB,KAAK;AACrD,EAAE,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAC7E,EAAE,MAAM,KAAK,GAAG,SAAS,CAAC,uBAAuB,CAAC,CAAC;AACnD,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC,wBAAwB,CAAC,CAAC;AACrD,EAAE,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACnC,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAChC,EAAE,OAAO;AACT,IAAI,UAAU,EAAE,SAAS;AACzB,IAAI,MAAM,EAAE,KAAK;AACjB,IAAI,OAAO,EAAE,MAAM;AACnB,GAAG,CAAC;AACJ,CAAC,CAAC;AACK,MAAM,6BAA6B,GAAG,CAAC,MAAM,EAAE,sBAAsB,KAAK;AACjF,EAAE,MAAM,EAAE,0BAA0B,EAAE,GAAG,cAAc,EAAE,CAAC;AAC1D,EAAE,MAAM,EAAE,eAAe,EAAE,wBAAwB,EAAE,GAAG,0BAA0B,EAAE,CAAC;AACrF,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,sBAAsB,CAAC;AAC7E,EAAE,MAAM,2BAA2B,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,cAAc,CAAC;AAC7E,EAAE,MAAM,iCAAiC,GAAG,UAAU,CAAC,2BAA2B,CAAC,GAAG,2BAA2B,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,2BAA2B,CAAC;AAC3K,EAAE,MAAM,sBAAsB,GAAG,iCAAiC,KAAK,UAAU,CAAC,wBAAwB,CAAC,GAAG,wBAAwB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,wBAAwB,CAAC,IAAI,KAAK,CAAC;AACvM,EAAE,MAAM,4BAA4B,GAAG,oBAAoB,CAAC,4BAA4B,CAAC,CAAC;AAC1F,EAAE,MAAM,0BAA0B,GAAG,oBAAoB,CAAC,0BAA0B,CAAC,CAAC;AACtF,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,4BAA4B,CAAC;AAC3E,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,0BAA0B,CAAC;AACvE,EAAE,cAAc,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC;AAC9D,EAAE,cAAc,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;AAC5D,EAAE,OAAO;AACT,IAAI;AACJ,MAAM,6BAA6B,EAAE,4BAA4B;AACjE,MAAM,2BAA2B,EAAE,0BAA0B;AAC7D,KAAK;AACL,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;AACpE,GAAG,CAAC;AACJ,CAAC;;ACrCM,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,sBAAsB,KAAK;AAClF,EAAE,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;AAC3B,EAAE,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,6BAA6B,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;AACpG,EAAE,MAAM,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChD,EAAE,oBAAoB,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC5C,EAAE,OAAO;AACT,IAAI,CAAC,cAAc,EAAE,KAAK,KAAK;AAC/B,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;AAC5E,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC/B,KAAK;AACL,IAAI,oBAAoB;AACxB,IAAI,MAAM;AACV,MAAM,eAAe,EAAE,CAAC;AACxB,KAAK;AACL,GAAG,CAAC;AACJ,CAAC;;ACnBD,MAAM,cAAc,GAAG,EAAE,CAAC;AACnB,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;AACxD,MAAM,SAAS,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,KAAK;AAC/G,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC;;AC8CK,MAAM,2BAA2B,GAAG,6BAA6B;;ACnDxE,MAAM,OAAO,mBAAmB,IAAI,GAAG,EAAE,CAAC;AAC1C,MAAM,iBAAiB,mBAAmB,IAAI,OAAO,EAAE,CAAC;AACjD,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,UAAU,KAAK;AACnD,EAAE,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC5C,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC,CAAC;AACK,MAAM,cAAc,GAAG,CAAC,MAAM,KAAK;AAC1C,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC,CAAC;AACK,MAAM,WAAW,GAAG,CAAC,MAAM,KAAK,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;;ACT7D,MAAM,wBAAwB,GAAG,CAAC,qBAAqB,KAAK,sBAAsB,CAAC,qBAAqB,CAAC;;ACmBpG,MAAC,iBAAiB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK;AACtE,EAAE,MAAM;AACR,IAAI,kBAAkB;AACtB,IAAI,0BAA0B;AAC9B,IAAI,YAAY,EAAE,cAAc;AAChC,GAAG,GAAG,cAAc,EAAE,CAAC;AACvB,EAAE,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AAC/B,EAAE,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACxE,EAAE,MAAM,iBAAiB,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;AACxD,EAAE,IAAI,iBAAiB,EAAE;AACzB,IAAI,OAAO,iBAAiB,CAAC;AAC7B,GAAG;AACH,EAAE,MAAM,uBAAuB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;AACvE,EAAE,MAAM,eAAe,GAAG,CAAC,UAAU,KAAK;AAC1C,IAAI,MAAM,IAAI,GAAG,UAAU,IAAI,EAAE,CAAC;AAClC,IAAI,MAAM,QAAQ,GAAG,uBAAuB,IAAI,uBAAuB,CAAC,CAAC,CAAC;AAC1E,IAAI,OAAO,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;AAClD,GAAG,CAAC;AACJ,EAAE,MAAM,cAAc,GAAG,UAAU,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AACxF,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;AACzF,EAAE,IAAI,0BAA0B,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,UAAU,EAAE;AAC3H,IAAI,YAAY,CAAC,yBAAyB,CAAC,CAAC;AAC5C,GAAG;AACH,EAAE,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,gBAAgB,CAAC,GAAG,oBAAoB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAC3G,EAAE,MAAM,CAAC,gBAAgB,IAAI,iBAAiB,CAAC,GAAG,qBAAqB,CAAC,MAAM,EAAE,cAAc,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;AAC1H,EAAE,MAAM,MAAM,GAAG,CAAC,cAAc,EAAE,KAAK,KAAK;AAC5C,IAAI,eAAe,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AAC3C,IAAI,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AAC5C,GAAG,CAAC;AACJ,EAAE,MAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACrE,EAAE,cAAc,CAAC,qBAAqB,CAAC,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,KAAK;AAC/E,IAAI,MAAM;AACV,MAAM,YAAY;AAClB,MAAM,iBAAiB;AACvB,MAAM,uBAAuB;AAC7B,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,gBAAgB;AACtB,MAAM,aAAa;AACnB,KAAK,GAAG,WAAW,CAAC;AACpB,IAAI,YAAY,CAAC,SAAS,EAAE;AAC5B,MAAM,WAAW,EAAE;AACnB,QAAQ,WAAW,EAAE,YAAY;AACjC,QAAQ,gBAAgB,EAAE,iBAAiB;AAC3C,QAAQ,sBAAsB,EAAE,uBAAuB;AACvD,QAAQ,qBAAqB,EAAE,sBAAsB;AACrD,QAAQ,oBAAoB,EAAE,qBAAqB;AACnD,QAAQ,eAAe,EAAE,gBAAgB;AACzC,QAAQ,YAAY,EAAE,aAAa;AACnC,OAAO;AACP,MAAM,cAAc;AACpB,MAAM,KAAK;AACX,KAAK,CAAC,CAAC;AACP,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,QAAQ,GAAG;AACnB,IAAI,OAAO,CAAC,UAAU,EAAE;AACxB,MAAM,IAAI,UAAU,EAAE;AACtB,QAAQ,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE;AAC5C,UAAU,UAAU,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AACrD,UAAU,MAAM,CAAC,cAAc,CAAC,CAAC;AACjC,SAAS;AACT,OAAO;AACP,MAAM,OAAO,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;AAC5C,KAAK;AACL,IAAI,EAAE,EAAE,QAAQ;AAChB,IAAI,GAAG,EAAE,WAAW;AACpB,IAAI,KAAK,GAAG;AACZ,MAAM,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE,CAAC;AAC7G,MAAM,OAAO,UAAU,CAAC,EAAE,EAAE;AAC5B,QAAQ,cAAc,EAAE,eAAe;AACvC,QAAQ,aAAa,EAAE,cAAc;AACrC,QAAQ,WAAW,EAAE,YAAY;AACjC,QAAQ,OAAO,EAAE,QAAQ;AACzB,QAAQ,eAAe,EAAE,gBAAgB;AACzC,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,QAAQ,GAAG;AACf,MAAM,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC;AACzF,MAAM,OAAO,UAAU,CAAC,EAAE,EAAE;AAC5B,QAAQ,MAAM,EAAE,OAAO;AACvB,QAAQ,IAAI,EAAE,KAAK;AACnB,QAAQ,OAAO,EAAE,QAAQ,IAAI,SAAS;AACtC,QAAQ,QAAQ,EAAE,SAAS;AAC3B,QAAQ,OAAO,EAAE,QAAQ,IAAI,SAAS;AACtC,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,MAAM,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AACxB,KAAK;AACL,IAAI,OAAO,EAAE,MAAM;AACnB,MAAM,cAAc,CAAC,cAAc,CAAC,CAAC;AACrC,MAAM,iBAAiB,EAAE,CAAC;AAC1B,MAAM,WAAW,EAAE,CAAC;AACpB,MAAM,iBAAiB,EAAE,CAAC;AAC1B,MAAM,gBAAgB,EAAE,CAAC;AACzB,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;AAChC,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,KAAK;AACtC,IAAI,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAC/C,IAAI,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE;AACpC,MAAM,cAAc,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAClD,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxB,EAAE,WAAW,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;AACxC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;AAC9B,EAAE,OAAO,QAAQ,CAAC;AAClB,EAAE;AACF,iBAAiB,CAAC,MAAM,GAAG,SAAS,CAAC;AACrC,iBAAiB,CAAC,GAAG,GAAG,MAAM;AAC9B,EAAE,MAAM;AACR,IAAI,oBAAoB;AACxB,IAAI,0BAA0B;AAC9B,IAAI,uBAAuB;AAC3B,IAAI,kBAAkB;AACtB,IAAI,YAAY;AAChB,IAAI,oBAAoB;AACxB,IAAI,8BAA8B;AAClC,IAAI,sBAAsB;AAC1B,IAAI,0BAA0B;AAC9B,IAAI,0BAA0B;AAC9B,IAAI,kBAAkB;AACtB,IAAI,kBAAkB;AACtB,GAAG,GAAG,cAAc,EAAE,CAAC;AACvB,EAAE,OAAO,UAAU,CAAC,EAAE,EAAE;AACxB,IAAI,aAAa,EAAE,oBAAoB;AACvC,IAAI,mBAAmB,EAAE,0BAA0B;AACnD,IAAI,gBAAgB,EAAE,uBAAuB;AAC7C,IAAI,iBAAiB,EAAE,kBAAkB;AACzC,IAAI,WAAW,EAAE,YAAY;AAC7B,IAAI,mBAAmB,EAAE,oBAAoB;AAC7C,IAAI,6BAA6B,EAAE,8BAA8B;AACjE,IAAI,qBAAqB,EAAE,sBAAsB;AACjD,IAAI,yBAAyB,EAAE,0BAA0B;AACzD,IAAI,yBAAyB,EAAE,0BAA0B;AACzD,IAAI,iBAAiB,EAAE,kBAAkB;AACzC,IAAI,iBAAiB,EAAE,kBAAkB;AACzC,GAAG,CAAC,CAAC;AACL,CAAC;;;;"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/style.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/dom/offset.ts","../src/support/eventListeners.ts","../src/setups/setups.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/initialization.ts","../src/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/plugins/plugins.ts","../src/plugins/optionsValidation/optionsValidation.ts","../src/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\nexport function createCache(options: CacheOptions): CacheContextual;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update: CacheUpdater\r\n): Cache;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n}\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) =>\r\n isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: any[]) => any {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n if (Array.from && arr) {\r\n return Array.from(arr);\r\n }\r\n const result: T[] = [];\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, args?: any[]): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n } else {\r\n each(arr, runFn);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W\r\n): T & U & V & W;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W,\r\n object4: X\r\n): T & U & V & W & X;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W,\r\n object4: X,\r\n object5: Y\r\n): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { from } from 'support/utils/array';\r\nimport { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | false | null | undefined,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n): void;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n};\r\n\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(value);\r\n};\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | false | null | undefined, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollLeft(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollTop(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | false | null | undefined): string;\r\nexport function val(elm: HTMLInputElement | false | null | undefined, value: string): void;\r\nexport function val(\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n // animationiterationcount: 1,\r\n // columncount: 1,\r\n // fillopacity: 1,\r\n // flexgrow: 1,\r\n // flexshrink: 1,\r\n // fontweight: 1,\r\n // lineheight: 1,\r\n // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val;\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | false | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | false | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI(\r\n 'IntersectionObserver'\r\n);\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && className && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): boolean => classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): (() => void) => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n return removeClass.bind(0, elm, className);\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n // @ts-ignore\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the fractional- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (isUndefined(passiveEventsSupport)) {\r\n passiveEventsSupport = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener) as EventListener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return runEach.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","import { isArray } from 'support/utils/types';\r\nimport { keys } from 'support/utils/object';\r\nimport { each, from } from 'support/utils/array';\r\n\r\nexport type EventListener<\r\n EventMap extends Record,\r\n Name extends keyof EventMap = keyof EventMap\r\n> = (...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]]) => void;\r\n\r\nexport type InitialEventListeners> = {\r\n [K in keyof EventMap]?: EventListener | EventListener[];\r\n};\r\n\r\nconst manageListener = >(\r\n callback: (listener?: EventListener) => void,\r\n listener?: EventListener | EventListener[]\r\n) => {\r\n each(isArray(listener) ? listener : [listener], callback);\r\n};\r\n\r\nexport const createEventListenerHub = >(\r\n initialEventListeners?: InitialEventListeners\r\n) => {\r\n type EventListener = (\r\n ...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]]\r\n ) => void;\r\n\r\n const events = new Map>();\r\n\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener[]\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener!);\r\n }\r\n }, listener as any);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n }\r\n\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener[]\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void {\r\n const eventSet = events.get(name) || new Set();\r\n events.set(name, eventSet);\r\n\r\n manageListener((currListener) => {\r\n currListener && eventSet.add(currListener);\r\n }, listener as any);\r\n\r\n return removeEvent.bind(0, name as any, listener as any);\r\n }\r\n\r\n function triggerEvent(\r\n name: Name,\r\n ...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]]\r\n ): void {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args) {\r\n (event as (args: EventMap[keyof EventMap]) => void)(args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n }\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent] as [\r\n typeof addEvent,\r\n typeof removeEvent,\r\n typeof triggerEvent\r\n ];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T;\r\n\r\nexport type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean];\r\n\r\nexport type SetupUpdateSegment> = (\r\n updateHints: Hints,\r\n checkOption: SetupUpdateCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport type SetupState> = [\r\n get: () => T,\r\n set: (newState: Partial) => void\r\n];\r\n\r\nexport type Setup = Record> = [\r\n update: SetupUpdate,\r\n state: (() => DynamicState) & StaticState,\r\n destroy: () => void\r\n];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: PartialOptions,\r\n force?: boolean\r\n ): SetupUpdateCheckOption =>\r\n (path: string) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n\r\nexport const createState = (initialState: S): SetupState => {\r\n let state: S = initialState;\r\n return [\r\n () => state,\r\n (newState: Partial) => {\r\n state = assignDeep({}, state, newState);\r\n },\r\n ];\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const dataAttributeHost = 'data-overlayscrollbars';\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostViewportScrollbarStyling = 'viewportStyled';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\nexport const classNameOverflowVisible = `os-overflow-visible`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { PartialOptions, ReadonlyOptions } from 'typings';\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw new Error();\r\n }\r\n return val;\r\n });\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior =\r\n | 'hidden'\r\n | 'scroll'\r\n | 'visible'\r\n | 'visible-hidden'\r\n | 'visible-scroll';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n attributes: string[] | null;\r\n debounce: [timeout: number, maxWait: number] | number | null; // (if tuple: [timeout: 0, maxWait: 33], if number: [timeout: number, maxWait: false]) debounce for content Changes\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n}\r\n\r\nexport type ReadonlyOSOptions = ReadonlyOptions;\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n // resize: 'none', // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: false, // true || false\r\n updating: {\r\n elementEvents: [['img', 'load']], // array of tuples || null\r\n debounce: [0, 33], // number || number array || null\r\n attributes: null, // string array || null\r\n ignoreMutation: null, // () => any || null\r\n },\r\n overflow: {\r\n x: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: false, // true || false\r\n initialize: false, // true || false\r\n },\r\n scrollbars: {\r\n visibility: 'auto', // visible || hidden || auto || v || h || a\r\n autoHide: 'never', // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: 800, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n touch: true, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: false, // true || false\r\n dynHeight: false, // true || false\r\n inheritedAttrs: ['style', 'class'], // string || array || null\r\n },\r\n */\r\n};\r\n\r\nexport const getOptionsDiff = (\r\n currOptions: T,\r\n newOptions: PartialOptions\r\n): PartialOptions => {\r\n const diff: PartialOptions = {};\r\n const optionsKeys = keys(newOptions).concat(keys(currOptions));\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {}), getOptionsDiff(currOptionValue, newOptionValue));\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n EventListener,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { PartialOptions } from 'typings';\r\nimport { InitializationStrategy } from 'initialization';\r\n\r\nexport interface EnvironmentListenersNameArgsMap {\r\n _: undefined;\r\n}\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarSize: XY;\r\n readonly _nativeScrollbarIsOverlaid: XY;\r\n readonly _nativeScrollbarStyling: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _defaultInitializationStrategy: InitializationStrategy;\r\n readonly _defaultDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n const revertFbxGlueMax = addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst getDefaultInitializationStrategy = (\r\n nativeScrollbarStyling: boolean\r\n): InitializationStrategy => ({\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n});\r\n\r\nconst createEnvironment = (): InternalEnvironment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n });\r\n const [nativeScrollbarSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarStyling = getNativeScrollbarStyling(envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const initializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling);\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener: (listener) => addEvent('_', listener),\r\n _getInitializationStrategy: assignDeep.bind(\r\n 0,\r\n {} as InitializationStrategy,\r\n initializationStrategy\r\n ),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n assignDeep(initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent('_');\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): InternalEnvironment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { isFunction, isBoolean, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n StructureInitializationStrategy,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n} from 'setups/scrollbarsSetup';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type InitializationStrategy = StructureInitializationStrategy &\r\n ScrollbarsInitializationStrategy;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type StaticInitializationElement =\r\n | ((...args: Args) => StaticInitialization)\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic element CAN be present.\r\n * If its a element the element will be handled as the repsective element.\r\n * True means that the respective dynamic element is forced to be generated.\r\n * False means that the respective dynamic element is forced NOT to be generated.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type InitializtationElementStrategy = Exclude;\r\n\r\nexport type DefaultInitializtationElementStrategy<\r\n InitElm extends StaticInitializationElement | DynamicInitializationElement\r\n> = Extract any> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nconst staticInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultStaticInitializationElement: DefaultInitializtationElementStrategy,\r\n staticInitializationElementStrategy?: InitializtationElementStrategy,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement => {\r\n const result =\r\n staticInitializationElementValue ||\r\n (isFunction(staticInitializationElementStrategy)\r\n ? staticInitializationElementStrategy.apply(0, args)\r\n : staticInitializationElementStrategy);\r\n\r\n return (\r\n (isFunction(result) ? result.apply(0, args) : result) ||\r\n defaultStaticInitializationElement.apply(0, args)\r\n );\r\n};\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 const takeInitializationValue =\r\n isBoolean(dynamicInitializationElementValue) || !!dynamicInitializationElementValue;\r\n const result = takeInitializationValue\r\n ? (dynamicInitializationElementValue as boolean | HTMLElement)\r\n : isFunction(dynamicInitializationElementStrategy)\r\n ? dynamicInitializationElementStrategy.apply(0, args)\r\n : dynamicInitializationElementStrategy;\r\n\r\n return result === true || isNull(result) || isUndefined(result) || isFunction(result)\r\n ? defaultDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement };\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureInitialization,\r\n StructureStaticInitializationElement,\r\n} from 'setups/structureSetup/structureSetup.initialization';\r\n\r\nexport type StructureSetupElements = [targetObj: StructureSetupElementsObj, destroy: () => void];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nconst createNewDiv = createDiv.bind(0, '');\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement | false => {\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } =\r\n getEnvironment();\r\n /* istanbul ignore next */\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value?: string | false | null | undefined) => {\r\n attr(elm, dataAttributeHost, value || '');\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling } = getEnvironment();\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as InitializationTargetElement)\r\n : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = !!ResizeObserverConstructor && _nativeScrollbarStyling;\r\n const staticInitializationElement =\r\n generalStaticInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const dynamicInitializationElement =\r\n generalDynamicInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const potentialViewportElement = staticInitializationElement(\r\n createNewDiv,\r\n viewportInitializationStrategy,\r\n targetStructureInitialization.viewport\r\n );\r\n const potentiallySingleElm = potentialViewportElement === targetElement;\r\n const viewportIsTarget = singleElmSupport && potentiallySingleElm;\r\n const viewportElement =\r\n potentiallySingleElm && !viewportIsTarget\r\n ? staticInitializationElement(createNewDiv)\r\n : potentialViewportElement;\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: dynamicInitializationElement(\r\n createNewDiv,\r\n paddingInitializationStrategy,\r\n targetStructureInitialization.padding\r\n ),\r\n _content: dynamicInitializationElement(\r\n createNewDiv,\r\n contentInitializationStrategy,\r\n targetStructureInitialization.content\r\n ),\r\n _viewportArrange: !viewportIsTarget && createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarStyling && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n\r\n return [evaluatedTargetObj, runEach.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n noop,\r\n each,\r\n equalXY,\r\n attrClass,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportArrange,\r\n classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\ntype UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nconst { max } = Math;\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarSize,\r\n _flexboxGlue,\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [updateOverflowStyleCache] = createCache>(xyCacheOptions);\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _paddingAbsolute, _padding: padding } = getState();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const fSize = fractionalSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = _paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n hostClientSize.h +\r\n fSize.h +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n ): ViewportOverflowState => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const getStatePerAxis = (\r\n styleKey: string,\r\n isOverlaid: boolean,\r\n nativeScrollbarSize: number\r\n ) => {\r\n const overflowStyle = style(_viewport, styleKey);\r\n // can't do something like \"viewportStyleObj && viewportStyleObj[styleKey] || overflowStyle\" here!\r\n const objectPrefferedOverflowStyle = viewportStyleObj\r\n ? viewportStyleObj[styleKey]\r\n : overflowStyle;\r\n const overflowScroll = objectPrefferedOverflowStyle === 'scroll';\r\n const nonScrollbarStylingHideOffset = isOverlaid ? arrangeHideOffset : nativeScrollbarSize;\r\n const scrollbarsHideOffset =\r\n overflowScroll && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset : 0;\r\n const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset;\r\n\r\n return [overflowStyle, overflowScroll, scrollbarsHideOffset, scrollbarsHideOffsetArrange] as [\r\n overflowStyle: OverflowStyle,\r\n overflowScroll: boolean,\r\n scrollbarsHideOffset: number,\r\n scrollbarsHideOffsetArrange: boolean\r\n ];\r\n };\r\n\r\n const [xOverflowStyle, xOverflowScroll, xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowX', _nativeScrollbarIsOverlaid.x, _nativeScrollbarSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarIsOverlaid.y, _nativeScrollbarSize.y);\r\n\r\n return {\r\n _overflowStyle: {\r\n x: xOverflowStyle,\r\n y: yOverflowStyle,\r\n },\r\n _overflowScroll: {\r\n x: xOverflowScroll,\r\n y: yOverflowScroll,\r\n },\r\n _scrollbarsHideOffset: {\r\n x: xScrollbarsHideOffset,\r\n y: yScrollbarsHideOffset,\r\n },\r\n _scrollbarsHideOffsetArrange: {\r\n x: xScrollbarsHideOffsetArrange,\r\n y: yScrollbarsHideOffsetArrange,\r\n },\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n hasOverflow: XY,\r\n overflowOption: XY,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setAxisOverflowStyle = (behavior: OverflowBehavior, hasOverflowAxis: boolean) => {\r\n const overflowVisible = overflowIsVisible(behavior);\r\n const overflowVisibleBehavior =\r\n (hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, '')) || '';\r\n return [\r\n hasOverflowAxis && !overflowVisible ? behavior : '',\r\n overflowIsVisible(overflowVisibleBehavior) ? 'hidden' : overflowVisibleBehavior,\r\n ];\r\n };\r\n\r\n const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x);\r\n const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y);\r\n\r\n viewportStyleObj.overflowX = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX;\r\n viewportStyleObj.overflowY = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY;\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\r\n if (doViewportArrange) {\r\n const { _viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;\r\n const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(\r\n `#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingLeft'\r\n : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] =\r\n horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n ): UndoViewportArrangeResult => {\r\n if (doViewportArrange) {\r\n const finalViewportOverflowState =\r\n viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n\r\n removeClass(_viewport, classNameViewportArrange);\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return [\r\n () => {\r\n hideNativeScrollbars(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n doViewportArrange,\r\n prevStyle\r\n );\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n finalViewportOverflowState,\r\n ];\r\n }\r\n return [noop];\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('nativeScrollbarsOverlaid.show');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\r\n );\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [\r\n on(expandElement, scrollEventName, onScroll),\r\n on(shrinkElement, scrollEventName, onScroll),\r\n ]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport type DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [destroy: () => void, update: () => void];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n });\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { runEach } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _addOnUpdatedListener: (listener: OnUpdatedListener) => void;\r\n}\r\n\r\nexport type OnUpdatedListener = (\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n) => void;\r\n\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const onUpdatedListeners = new Set();\r\n const [getState] = state;\r\n const runOnUpdatedListeners = (\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions?: PartialOptions,\r\n force?: boolean\r\n ) => {\r\n runEach(onUpdatedListeners, [updateHints, changedOptions || {}, !!force]);\r\n };\r\n\r\n const [elements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n runOnUpdatedListeners(updateStructure(checkOptionsFallback, updateHints));\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n onUpdatedListeners.add(listener);\r\n };\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObservers(checkOption);\r\n runOnUpdatedListeners(updateStructure(checkOption, {}, force));\r\n },\r\n structureSetupState,\r\n () => {\r\n onUpdatedListeners.clear();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { appendChildren, createDiv, removeElements } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [elements: ScrollbarsSetupElementsObj, destroy: () => void];\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } =\r\n _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot =\r\n !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n environmentScrollbarSlot,\r\n initializationScrollbarSlot\r\n );\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n}\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, destroyElements] = createScrollbarsSetupElements(target, structureSetupElements);\r\n\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { assignDeep, each, isArray } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type OSPluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type OSPlugin = [string, T];\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: OSPlugin | OSPlugin[]) =>\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as OSPlugin[], (plugin) => {\r\n pluginRegistry[plugin[0]] = plugin[1];\r\n });\r\n","import { OSPlugin } from 'plugins';\r\nimport { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidation/validation';\r\nimport { PartialOptions } from 'typings';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: OSPlugin = [\r\n optionsValidationPluginName,\r\n {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n];\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n each,\r\n isFunction,\r\n keys,\r\n isHTMLElement,\r\n XY,\r\n TRBL,\r\n createEventListenerHub,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n OSPlugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport type { PartialOptions, OverflowStyle } from 'typings';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n InitializationStrategy,\r\n} from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\n\r\n/*\r\nonScrollStart : null,\r\nonScroll : null,\r\nonScrollStop : null,\r\nonOverflowChanged : null,\r\nonOverflowAmountChanged : null, // fusion with onOverflowChanged\r\nonDirectionChanged : null, // gone\r\nonContentSizeChanged : null, // gone\r\nonHostSizeChanged : null, // gone\r\n*/\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget | InitializationTargetObject,\r\n options?: PartialOptions,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(osPlugin: OSPlugin | OSPlugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarSize: XY;\r\n scrollbarIsOverlaid: XY;\r\n scrollbarStyling: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n defaultInitializationStrategy: InitializationStrategy;\r\n defaultDefaultOptions: Options;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n}\r\n\r\nexport interface Elements {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n padding: HTMLElement;\r\n viewport: HTMLElement;\r\n content: HTMLElement;\r\n}\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\r\n force: boolean;\r\n}\r\n\r\nexport interface EventListenerMap {\r\n initialized: undefined;\r\n initializationWithdrawn: undefined;\r\n updated: OnUpdatedEventListenerArgs;\r\n destroyed: undefined;\r\n}\r\n\r\nexport type InitialEventListeners = GeneralInitialEventListeners;\r\n\r\nexport type EventListener = GeneralEventListener<\r\n EventListenerMap,\r\n Name\r\n>;\r\n\r\nexport interface OverlayScrollbars {\r\n options(): Options;\r\n options(newOptions?: PartialOptions): Options;\r\n\r\n update(force?: boolean): void;\r\n\r\n destroy(): void;\r\n\r\n state(): State;\r\n\r\n elements(): Elements;\r\n\r\n on(name: Name, listener: EventListener): () => void;\r\n on(name: Name, listener: EventListener[]): () => void;\r\n\r\n off(name: Name, listener?: EventListener): void;\r\n off(name: Name, listener?: EventListener[]): void;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n const {\r\n _getDefaultOptions,\r\n _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: PartialOptions) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);\r\n\r\n if (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\r\n triggerEvent('initializationWithdrawn');\r\n }\r\n\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, , destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState._elements\r\n );\r\n\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n });\r\n });\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: removeEvent,\r\n state() {\r\n const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n },\r\n destroy: () => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n removeEvent();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n triggerEvent('destroyed');\r\n },\r\n };\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n instance.update(true);\r\n\r\n addInstance(instanceTarget, instance);\r\n\r\n triggerEvent('initialized');\r\n\r\n return instance;\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarSize: _nativeScrollbarSize,\r\n scrollbarIsOverlaid: _nativeScrollbarIsOverlaid,\r\n scrollbarStyling: _nativeScrollbarStyling,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["createCache","options","update","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","isUndefined","obj","undefined","isNull","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","type","key","cstr","ctor","ctorProto","prototype","hasOwnConstructor","hasOwnProperty","call","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","ElementNodeType","isElement","Element","each","source","callback","i","Object","keys","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","scrollLeft","scrollTop","style","styles","getSingleStyle","getStyles","getStylesResult","computedStyle","getComputedStyle","getCSSVal","reduce","result","setCSSVal","Node","ELEMENT_NODE","toString","replace","toLowerCase","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","Set","forEach","isEmptyArray","runEach","args","runFn","fn","prop","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","_timeout","_maxDelay","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getPropertyValue","setProperty","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","fractionalSize","cssHeight","cssWidth","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","removeEvent","eventSet","events","currListener","clear","addEvent","set","triggerEvent","_len","_key","event","Map","initialListenerKeys","getPropByPath","path","o","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostViewportScrollbarStyling","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","opsStringify","JSON","stringify","_","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarStyling","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","getDefaultInitializationStrategy","nativeScrollbarStyling","_padding","_content","createEnvironment","_document","envDOM","envElm","envChildElm","_createEventListenerH","_createCache","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","_getNativeScrollbarSi","nativeScrollbarSize","nativeScrollbarIsOverlaid","initializationStrategy","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","_updateNativeScrollba","scrollbarSizeChanged","getEnvironment","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","takeInitializationValue","contentArrangeCounter","createNewDiv","unwrap","createUniqueViewportArrangeElement","_getEnvironment","create","addDataAttrHost","createStructureSetupElements","_getEnvironment2","_getInitializationStr","hostInitializationStrategy","_host","viewportInitializationStrategy","_viewport","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","potentialViewportElement","viewport","potentiallySingleElm","viewportIsTarget","viewportElement","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","getState","updateHints","_getState","_heightIntrinsic","_heightIntrinsicChanged","heightIntrinsicChanged","height","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","_currentPaddingCache","paddingChanged","_directionIsRTL","_directionChanged","_checkOption","paddingAbsoluteChanged","contentMutation","_updatePaddingCache","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","width","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_viewportPaddingStyle","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportScrollSize","viewportClientSize","sizeFraction","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","doViewportArrange","updateSizeFraction","getCurrentSizeFraction","_createCache2","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","_createCache3","getCurrentOverflowAmountCache","updateOverflowStyleCache","_createCache4","fixFlexboxGlue","viewportOverflowState","heightIntrinsic","_overflowScroll","_scrollbarsHideOffset","hostClientSize","isContentBox","subtractXScrollbar","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","_getStatePerAxis","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","_getStatePerAxis2","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","_scrollbarsHideOffsetArrange","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","_setAxisOverflowStyle","visibleBehaviorX","_setAxisOverflowStyle2","visibleBehaviorY","arrangeViewport","directionIsRTL","_getState2","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","_getState3","viewportPaddingStyle","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","_getState4","finalPaddingStyle","assignProps","prevStyle","_hostMutation","_getState5","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","_checkOption2","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","_undoViewportArrange","redoViewportArrange","undoViewportArrangeOverflowState","_sizeFractionCache","sizeFractionChanged","_viewportScrollSizeCa","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","_overflowAmuntCache","overflowAmount","overflowAmountChanged","_viewportScrollSizeCa2","_sizeFractionCache2","removeClipping","viewportArranged","_updateOverflowStyleC","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","scrollEventName","scrollAmount","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_ref$_direction","_ref","_direction","observeDirectionChange","_ref$_appear","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","getIsDirectionRTL","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","appear","doDirectionScroll","_updateResizeObserver","pop","contentRect","currRContentRect","prevContentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreContentChange","_createEventContentCh","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","contentScroll","viewportScroll","fractional","updateContentSizeCache","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","_updateContentSizeCac","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","_createDOMObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","_checkOption3","elementEventsChanged","debounceValue","_checkOption4","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","onUpdatedListeners","runOnUpdatedListeners","_createStructureSetup","destroyElements","updateStructure","updateObservers","_createStructureSetup2","destroyObservers","structureSetupState","_addOnUpdatedListener","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","environmentScrollbarSlot","_scrollbarsSlot","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","_createScrollbarsSetu","scrollbarsSetupState","console","log","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","optionsValidationPluginName","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","addEnvListener","plugins","instanceTarget","potentialInstance","optionsValidationPlugin","validateOptions","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","destroyScrollbars","removeEnvListener","sizeChanged","hostMutation","instance","_structureState","pluginName","pluginInstance","scrollbarIsOverlaid","scrollbarStyling","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.min.js index fc4d840..6f26cb2 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.min.js @@ -1 +1 @@ -!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars=t()}(this,(function(){"use strict";function n(n,t){var r,i=n.o,e=n.u,o=n.v,u=i,a=function(n,t){var i=u,a=n,f=t||(e?!e(i,a):i!==a);return(f||o)&&(u=a,r=i),[u,f,r]};return[t?function(n){return a(t(u,r),n)}:a,function(n){return[u,!!n,r]}]}var t=Node.ELEMENT_NODE,r=Object.prototype,i=r.toString,e=r.hasOwnProperty;function o(n){return void 0===n}function u(n){return null===n}function a(n){return"number"==typeof n}function f(n){return"string"==typeof n}function c(n){return"boolean"==typeof n}function l(n){return"function"==typeof n}function v(n){return Array.isArray(n)}function d(n){return"object"==typeof n&&!v(n)&&!u(n)}function s(n){var t=!!n&&n.length,r=a(t)&&t>-1&&t%1==0;return!!(v(n)||!l(n)&&r)&&(!(t>0&&d(n))||t-1 in n)}function g(n){if(!n||!d(n)||"object"!==function(n){return o(n)||u(n)?""+n:i.call(n).replace(/^\[object (.+)\]$/,"$1").toLowerCase()}(n))return!1;var t,r="constructor",a=n[r],f=a&&a.prototype,c=e.call(n,r),l=f&&e.call(f,"isPrototypeOf");if(a&&!c&&!l)return!1;for(t in n);return o(t)||e.call(n,t)}function h(n){var r=window.HTMLElement;return!!n&&(r?n instanceof r:n.nodeType===t)}function w(n){var r=window.Element;return!!n&&(r?n instanceof r:n.nodeType===t)}function _(n,t){if(s(n))for(var r=0;r0;i=u[e++];)o=!!r(n.classList,i)&&o}return o},an=function(n,t){un(n,t,(function(n,t){return n.remove(t)}))},fn=function(n,t){return un(n,t,(function(n,t){return n.add(t)})),an.bind(0,n,t)},cn=function(n,t,r,i){if(n&&t){var e=!0;return _(r,(function(r){(i?i(n[r]):n[r])!==(i?i(t[r]):t[r])&&(e=!1)})),e}return!1},ln=function(n,t){return cn(n,t,["w","h"])},vn=function(n,t){return cn(n,t,["x","y"])},dn=function(n,t){return cn(n,t,["t","r","b","l"])},sn=function(n,t,r){return cn(n,t,["width","height"],r&&function(n){return Math.round(n)})},gn=function(n){n&&window.clearTimeout(n),n&&rn(n)},hn=function(){},wn=function(n,t){var r,i,e,o,u=t||{},f=u.s,c=u.g,v=u._,d=window.setTimeout,s=function(t){gn(r),gn(i),i=r=e=void 0,n.apply(this,t)},g=function(n){return v&&e?v(e,n):n},h=function(){r&&s(g(o)||o)},w=function(){var n=y(arguments),t=l(f)?f():f,u=a(t)&&t>=0;if(u){var v=l(c)?c():c,w=a(v)&&v>=0,_=t>0?d:en,p=g(n),b=p||n,m=s.bind(0,b);gn(r),r=_(m,t),w&&!i&&(i=d(h,v)),e=o=b}else s(n)};return w.p=h,w},_n={opacity:1,zindex:1},pn=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return Number.isNaN(r)?0:r},bn=function(n,t,r){return null!=t?t[r]||t.getPropertyValue(r):n.style[r]},yn=function(n,t,r){try{if(n){var i=n.style;o(i[t])?i.setProperty(t,r):i[t]=function(n,t){return!_n[n.toLowerCase()]&&a(t)?t+"px":t}(t,r)}}catch(e){}};function mn(n,t){var r=f(t);if(v(t)||r){var i=r?"":{};if(n){var e=window.getComputedStyle(n,null);i=r?bn(n,e,t):t.reduce((function(t,r){return t[r]=bn(n,e,r),t}),i)}return i}_(C(t),(function(r){return yn(n,r,t[r])}))}var Sn,xn,Cn=function(n,t,r){var i=t?t+"-":"",e=r?"-"+r:"",o=i+"top"+e,u=i+"right"+e,a=i+"bottom"+e,f=i+"left"+e,c=mn(n,[o,u,a,f]);return{t:pn(c[o]),r:pn(c[u]),b:pn(c[a]),l:pn(c[f])}},On={w:0,h:0},zn=function(){return{w:window.innerWidth,h:window.innerHeight}},An=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:On},In=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:On},Mn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:On},Ln=function(n){var t=parseFloat(mn(n,"height"))||0,r=parseFloat(mn(n,"height"))||0;return{w:r-Math.round(r),h:t-Math.round(t)}},Rn=function(n){return n.getBoundingClientRect()},Tn=function(n){return n.split(" ")},Vn=function(n,t,r,i){_(Tn(t),(function(t){n.removeEventListener(t,r,i)}))},jn=function(n,t,r,i){var e=function(){if(o(Sn)){Sn=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){Sn=!0}}))}catch(n){}}return Sn}(),u=e&&i&&i.m||!1,a=i&&i.S||!1,f=i&&i.C||!1,c=[],l=e?{passive:u,capture:a}:a;return _(Tn(t),(function(t){var i=f?function(e){n.removeEventListener(t,i,a),r&&r(e)}:r;b(c,Vn.bind(null,n,t,i,a)),n.addEventListener(t,i,l)})),S.bind(0,c)},Bn=function(n){return function(n){return n.stopPropagation()}(n)||function(n){return n.preventDefault()}(n)},Dn={x:0,y:0},En=function(n){var t=n?Rn(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:Dn},kn=function(n,t){_(v(t)?t:[t],n)},qn=function(n){var t=new Map,r=function(n,r){if(n){var i=t.get(n);kn((function(n){i&&i[n?"delete":"clear"](n)}),r)}else t.forEach((function(n){n.clear()})),t.clear()},i=function(n,i){var e=t.get(n)||new Set;return t.set(n,e),kn((function(n){n&&e.add(n)}),i),r.bind(0,n,i)};return _(C(n),(function(t){i(t,n[t])})),[i,r,function(n,r){var i=t.get(n);_(y(i),(function(n){r?n(r):n()}))}]},Pn=function(n,t){return n?t.split(".").reduce((function(n,t){return n&&x(n,t)?n[t]:void 0}),n):void 0},Fn=function(n,t,r){return function(i){return[Pn(n,i),r||void 0!==Pn(t,i)]}},Hn=function(n){var t=n;return[function(){return t},function(n){t=O({},t,n)}]},Wn="os-environment",Nn=Wn+"-flexbox-glue",Xn=Nn+"-max",Yn="data-overlayscrollbars",Gn=Yn+"-overflow-x",$n=Yn+"-overflow-y",Jn="overflowVisible",Kn="viewportStyled",Un="os-padding",Qn="os-viewport",Zn=Qn+"-arrange",nt="os-content",tt=Qn+"-scrollbar-styled",rt="os-overflow-visible",it="os-size-observer",et=it+"-appear",ot=it+"-listener",ut=ot+"-scroll",at=ot+"-item",ft=at+"-final",ct="os-trinsic-observer",lt="os-scrollbar",vt=lt+"-horizontal",dt=lt+"-vertical",st="os-scrollbar-track",gt="os-scrollbar-handle",ht=function(n){return JSON.stringify(n,(function(n,t){if(l(t))throw new Error;return t}))},wt={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}},_t=Math.abs,pt=Math.round,bt=function(n,t,r){P(n,t);var i=In(t),e=An(t),o=Ln(r);return{x:e.h-i.h+o.h,y:e.w-i.w+o.w}},yt=function(n,t){var r="hidden";mn(n,{overflowX:r,overflowY:r,direction:"rtl"}),L(n,0);var i=En(n),e=En(t);L(n,-999);var o=En(t);return{i:i.x===e.x,n:e.x!==o.x}},mt=function(){var n=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/t},St=function(){var t,r,i,e,o,u,a,f,c,l,v=document.body,d=X('
')[0],s=d.firstChild,g=qn(),h=g[0],w=g[2],_=n({o:bt(v,d,s),u:vn}),p=_[0],b=(0,_[1])()[0],y=function(n){var t=!1,r=fn(n,tt);try{t="none"===mn(n,U("scrollbar-width"))||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(i){}return r(),t}(d),m={x:0===b.x,y:0===b.y},S=function(n){return{O:null,A:null,I:!n,M:!1,L:null}}(y),x=O({},wt),C={R:b,T:m,V:y,j:"-1"===mn(d,"zIndex"),B:yt(d,s),D:(t=d,r=s,i=fn(t,Nn),e=Rn(t),o=Rn(r),u=sn(o,e,!0),a=fn(t,Xn),f=Rn(t),c=Rn(r),l=sn(c,f,!0),i(),a(),u&&l),k:function(n){return h("_",n)},q:O.bind(0,{},S),P:function(n){O(S,n)},F:O.bind(0,{},x),H:function(n){O(x,n)},W:O({},S),N:O({},x)};if(M(d,"style"),W(d),!(y||m.x&&m.y)){var z=zn(),A=mt();window.addEventListener("resize",(function(){var n=zn(),t={w:n.w-z.w,h:n.h-z.h};if(0!==t.w||0!==t.h){var r,i,e,o=_t(t.w),u=_t(t.h),a={w:_t(pt(n.w/(z.w/100))),h:_t(pt(n.h/(z.h/100)))},f=mt(),c=o>2&&u>2,l=(r=a.h,i=_t(a.w),e=_t(r),!(i!==e&&i+1!==e&&i-1!==e));if(c&&l&&(f!==A&&A>0)){var g=p(bt(v,d,s)),h=g[0],_=g[1];O(xn.R,h),W(d),_&&w("_")}z=n,A=f}}))}return C},xt=function(){return xn||(xn=St()),xn},Ct=0,Ot=function(n){P(D(n),B(n)),W(n)},zt=function(){var n=xt(),t=n.V,r=n.T,i=!!(!n.j&&!t&&(r.x||r.y))&&document.createElement("style");return i&&(A(i,"id",Zn+"-"+Ct),Ct++),i},At=function(n,t,r){return t||(l(r)?r(n):r)||N()},It=function(n,t,r){var i=c(t)||t?t:l(r)?r(n):r;return!0===i?N():i},Mt=function(n){var t,r,i,e=xt(),o=e.q,u=e.V,a=o(),f=a.O,c=a.A,l=a.I,v=a.M,d=h(n),s=n,g=d?n:s.target,w=j(g,"textarea"),_=!w&&j(g,"body"),y=g.ownerDocument,m=y.body,x=y.defaultView,O=!!tn&&u,z=At(g,s.viewport,c),L=z===g,R=O&&L,T=L&&!R?At(g):z,V={X:g,O:w?At(g,s.host,f):g,A:T,I:It(g,s.padding,l),M:It(g,s.content,v),Y:!R&&zt(),G:x,$:y,J:D(m),K:m,U:w,Z:_,nn:d,tn:R,rn:function(n,t){return R?(r=t,i=A(T,Yn)||"",new Set(i.split(" ")).has(r)):function(n,t){return un(n,t,(function(n,t){return n.contains(t)}))}(T,n);var r,i},in:function(n,t,r){return R?I(T,Yn,t,r):(r?fn:an)(T,n)}},E=C(V).reduce((function(n,t){var r=V[t];return b(n,!(!r||D(r))&&r)}),[]),k=function(n){return n?p(E,n)>-1:null},F=V.X,N=V.O,X=V.I,Y=V.A,G=V.M,$=V.Y,J=[],K=w&&k(N),U=w?F:B([G,Y,X,N,F].find((function(n){return!1===k(n)}))),Q=G||Y,Z=(A(t=N,Yn,(R?"viewport":"host")||""),M.bind(0,t,Yn)),nn=fn(X,Un),rn=fn(Y,!R&&Qn),en=fn(G,nt);return K&&(H(F,N),b(J,(function(){H(N,F),W(N)}))),P(Q,U),P(N,X),P(X||N,!R&&Y),P(Y,G),b(J,(function(){Z(),M(Y,Gn),M(Y,$n),k(G)&&Ot(G),k(Y)&&Ot(Y),k(X)&&Ot(X),nn(),rn(),en()})),u&&!R&&b(J,an.bind(0,Y,tt)),$&&(i=$,q(D(r=Y),r,i),b(J,W.bind(0,$))),[V,S.bind(0,J)]},Lt=function(n,t){var r=n.M,i=t[0];return function(n){var t=xt().D,e=i().en,o=n.un,u=(r||!t)&&o;return u&&mn(r,{height:e?"":"100%"}),{an:u,fn:u}}},Rt=function(t,r){var i=r[0],e=r[1],o=t.O,u=t.I,a=t.A,f=t.tn,c=n({u:dn,o:Cn()},Cn.bind(0,o,"padding","")),l=c[0],v=c[1];return function(n,t,r){var o=v(r),c=o[0],d=o[1],s=xt(),g=s.V,h=s.D,w=i().cn,_=n.an,p=n.fn,b=n.ln,y=t("paddingAbsolute"),m=y[0],S=y[1];if(_||d||!h&&p){var x=l(r);c=x[0],d=x[1]}var C=!f&&(S||b||d);if(C){var z=!m||!u&&!g,A=c.r+c.l,I=c.t+c.b,M={marginRight:z&&!w?-A:0,marginBottom:z?-I:0,marginLeft:z&&w?-A:0,top:z?-c.t:0,right:z?w?-c.r:"auto":0,left:z?w?"auto":-c.l:0,width:z?"calc(100% + "+A+"px)":""},L={paddingTop:z?c.t:0,paddingRight:z?c.r:0,paddingBottom:z?c.b:0,paddingLeft:z?c.l:0};mn(u||a,M),mn(a,L),e({I:c,vn:!z,dn:u?L:O({},M,L)})}return{sn:C}}},Tt=Math.max,Vt="visible",jt="hidden",Bt=42,Dt={u:ln,o:{w:0,h:0}},Et={u:vn,o:{x:jt,y:jt}},kt=function(n,t,r){return r?fn(n,t):an(n,t)},qt=function(n){return 0===n.indexOf(Vt)},Pt=function(t,r){var i=r[0],e=r[1],o=t.O,u=t.I,a=t.A,f=t.Y,c=t.tn,l=t.in,v=xt(),d=v.R,s=v.D,g=v.V,h=v.T,w=!c&&!g&&(h.x||h.y),p=n(Dt,Ln.bind(0,a)),b=p[0],y=p[1],m=n(Dt,Mn.bind(0,a)),S=m[0],x=m[1],O=n(Dt),z=O[0],M=O[1],L=n(Et)[0],R=function(n,t){if(mn(a,{height:""}),t){var r=i(),e=r.vn,u=r.I,f=n.gn,c=n.hn,l=Ln(o),v=In(o),d="content-box"===mn(a,"boxSizing"),s=e||d?u.b+u.t:0,g=!(h.x&&d);mn(a,{height:v.h+l.h+(f.x&&g?c.x:0)-s})}},T=function(n,t){var r=g||n?0:Bt,i=function(n,i,e){var o=mn(a,n),u="scroll"===(t?t[n]:o);return[o,u,u&&!g?i?r:e:0,i&&!!r]},e=i("overflowX",h.x,d.x),o=e[0],u=e[1],f=e[2],c=e[3],l=i("overflowY",h.y,d.y);return{wn:{x:o,y:l[0]},gn:{x:u,y:l[1]},hn:{x:f,y:l[2]},_n:{x:c,y:l[3]}}},V=function(n,t,r,e){if(w){var o=i().dn,u=n.hn,c=n._n,l=c.x,v=c.y,d=u.x,s=u.y,g=o[e?"paddingRight":"paddingLeft"],h=o.paddingTop,_=t.w+r.w,p=t.h+r.h,b={w:s&&v?s+_-g+"px":"",h:d&&l?d+p-h+"px":""};if(f){var y=f.sheet;if(y){var m=y.cssRules;if(m){m.length||y.insertRule("#"+A(f,"id")+" + ."+Zn+"::before {}",0);var S=m[0].style;S.width=b.w,S.height=b.h}}}else mn(a,{"--os-vaw":b.w,"--os-vah":b.h})}return w},j=function(n,t,r,e){var o=n.hn,u=n._n,a=u.x,f=u.y,c=o.x,l=o.y,v=i().dn,d=t?"marginLeft":"marginRight",s=t?"paddingLeft":"paddingRight",g=v[d],h=v.marginBottom,w=v[s],_=v.paddingBottom;e.width="calc(100% + "+(l+-1*g)+"px)",e[d]=-l+g,e.marginBottom=-c+h,r&&(e[s]=w+(f?l:0),e.paddingBottom=_+(a?c:0))};return function(n,t,r){var f,v=n.an,d=n.pn,p=n.fn,m=n.sn,O=n.un,B=n.ln,D=i(),E=D.en,k=D.cn,q=t("nativeScrollbarsOverlaid.show"),P=q[0],F=q[1],H=t("overflow"),W=H[0],N=H[1],X=P&&h.x&&h.y,Y=!c&&!s&&(v||p||d||F||O),G=qt(W.x),$=qt(W.y),J=G||$,K=y(r),U=x(r),Q=M(r);if(F&&g&&l(tt,Kn,!X),Y&&(f=T(X),R(f,E)),v||m||p||B||F){J&&l(rt,Jn,!1);var Z=function(n,t,r){if(w){var e=r||T(n),o=i().dn,u=e._n,f=u.x,c=u.y,l={},v=function(n){return _(n.split(" "),(function(n){l[n]=o[n]}))};f&&v("marginBottom paddingTop paddingBottom"),c&&v("marginLeft marginRight paddingLeft paddingRight");var d=mn(a,C(l));return an(a,Zn),s||(l.height=""),mn(a,l),[function(){j(e,t,w,d),mn(a,d),fn(a,Zn)},e]}return[hn]}(X,k,f),nn=Z[0],tn=Z[1],rn=K=b(r),en=rn[0],on=rn[1],un=U=S(r),cn=un[0],ln=un[1],vn=In(a),dn=cn,sn=vn;nn(),(ln||on||F)&&tn&&!X&&V(tn,cn,en,k)&&(sn=In(a),dn=Mn(a)),Q=z(function(n,t,r){var i=window.devicePixelRatio%1!=0?1:0,e={w:Tt(0,n.w-t.w-Tt(0,r.w)),h:Tt(0,n.h-t.h-Tt(0,r.h))};return{w:e.w>i?e.w:0,h:e.h>i?e.h:0}}({w:Tt(cn.w,dn.w),h:Tt(cn.h,dn.h)},{w:sn.w+Tt(0,vn.w-cn.w),h:sn.h+Tt(0,vn.h-cn.h)},en),r)}var gn=Q,wn=gn[0],_n=gn[1],pn=U,bn=pn[0],yn=pn[1],Sn=K,xn=Sn[0],Cn=Sn[1],On={x:wn.w>0,y:wn.h>0},zn=G&&$&&(On.x||On.y)||G&&On.x&&!On.y||$&&On.y&&!On.x;if(m||B||Cn||yn||_n||N||F||Y){var An={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},Ln=function(n,t,r,i){var e=function(n,t){var r=qt(n),i=t&&r&&n.replace(Vt+"-","")||"";return[t&&!r?n:"",qt(i)?"hidden":i]},o=e(r.x,t.x),u=o[0],a=o[1],f=e(r.y,t.y),c=f[0],l=f[1];return i.overflowX=a&&c?a:u,i.overflowY=l&&u?l:c,T(n,i)}(X,On,W,An),Rn=V(Ln,bn,xn,k);c||j(Ln,k,Rn,An),Y&&R(Ln,E),c?(A(o,Gn,An.overflowX),A(o,$n,An.overflowY)):mn(a,An)}I(o,Yn,Jn,zn),kt(u,rt,zn),!c&&kt(a,rt,J);var Tn=L(T(X).wn),Vn=Tn[0],jn=Tn[1];return e({wn:Vn,bn:{x:wn.w,y:wn.h},yn:On}),{mn:jn,Sn:_n}}},Ft=function(n,t,r){var i={},e=t||{};return _(C(n).concat(C(e)),(function(t){var o=n[t],u=e[t];i[t]=!!(r||o||u)})),i},Ht="animationstart",Wt="scroll",Nt=3333333,Xt=function(n){return"rtl"===mn(n,"direction")},Yt=function(n){return n&&(n.height||n.width)},Gt=function(t,r,i){var e=i||{},o=e.xn,u=void 0!==o&&o,a=e.Cn,f=void 0!==a&&a,l=xt().B,s=X('
')[0],g=s.firstChild,h=Xt.bind(0,s),w=n({o:void 0,v:!0,u:function(n,t){return!(!n||!Yt(n)&&Yt(t))}})[0],_=function(n){var t=v(n)&&n.length>0&&d(n[0]),i=!t&&c(n[0]),e=!1,o=!1,a=!0;if(t){var f=w(n.pop().contentRect),g=f[0],h=f[2],_=Yt(g);o=!Yt(h)&&_,a=!(e=!h||!_)}else i?a=n[1]:o=!0===n;if(u&&a){var p=i?n[0]:Xt(s);L(s,p?l.n?-Nt:l.i?0:Nt:Nt),R(s,Nt)}e||r({an:!i,On:i?n:void 0,Cn:!!o})},p=[],y=!!f&&_;if(tn){var m=new tn(_);m.observe(g),b(p,(function(){m.disconnect()}))}else{var x=X('
');P(g,x),fn(g,ut);var C,O=x[0],z=O.lastChild,A=O.firstChild,I=null==A?void 0:A.firstChild,M=An(O),T=M,V=!1,j=function(){L(A,Nt),R(A,Nt),L(z,Nt),R(z,Nt)},B=function(n){C=0,V&&(M=T,_(!0===n))},D=function(n){T=An(O),V=!n||!ln(T,M),n?(Bn(n),V&&!C&&(rn(C),C=en(B))):B(!1===n),j()};b(p,[jn(A,Wt,D),jn(z,Wt,D)]),mn(I,{width:Nt,height:Nt}),j(),y=f?D.bind(0,!1):j}if(u){var E=n({o:!h()},h)[0];b(p,jn(s,Wt,(function(n){var t=E(),r=t[0];t[1]&&(an(g,"ltr rtl"),fn(g,r?"rtl":"ltr"),_(t)),Bn(n)})))}return y&&(fn(s,et),b(p,jn(s,Ht,y,{C:!!tn}))),F(t,s),function(){S(p),W(s)}},$t=function(n,t,r,i){var e=!1,o=i||{},u=o.zn,a=o.An,c=o.In,l=o.Mn,v=o.Ln,d=o.Rn,s=function(n,t,r){var i,e=!1,o=function(o){r&&_(r.reduce((function(t,r){if(r){var i=r[0],e=r[1],u=e&&i&&(o?o(i):V(i,n));u&&u.length&&e&&f(e)&&b(t,[u,e.trim()],!0)}return t}),[]),(function(n){return _(n[0],(function(r){var o=n[1],u=i.get(r);if(u){var a=u[0],f=u[1];a===o&&f()}var c=jn(r,o,(function(n){e?(c(),i.delete(r)):t(n)}));i.set(r,[o,c])}))}))};return r&&(i=new WeakMap,o()),[function(){e=!0},o]}(n,wn((function(){e&&r(!0)}),{s:33,g:99}),c),g=s[0],h=s[1],w=a||[],y=(u||[]).concat(w),S=function(e){var o=v||hn,u=d||hn,a=[],c=[],s=!1,g=!1,y=!1;_(e,(function(r){var e=r.attributeName,v=r.target,d=r.type,h=r.oldValue,_=r.addedNodes,m="attributes"===d,S="childList"===d,x=n===v,C=m&&f(e)?A(v,e):0,O=0!==C&&h!==C,z=p(w,e)>-1&&O;if(t&&!x){var I=!m,M=m&&z,L=M&&l&&j(v,l),R=(L?!o(v,e,h,C):I||M)&&!u(r,!!L,n,i);b(c,_),g=g||R,y=y||S}!t&&x&&O&&!o(v,e,h,C)&&(b(a,e),s=s||z)})),y&&!m(c)&&h((function(n){return c.reduce((function(t,r){return b(t,V(n,r)),j(r,n)?b(t,r):t}),[])})),t?g&&r(!1):m(a)&&!s||r(a,s)},x=new Z(S);return x.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:t,childList:t,characterData:t}),e=!0,[function(){e&&(g(),x.disconnect(),e=!1)},function(){e&&S(x.takeRecords())}]},Jt="["+Yn+"]",Kt="."+Qn,Ut=["tabindex"],Qt=["wrap","cols","rows"],Zt=["id","class","style","open"],nr=function(t,r,i){var e,o,u,c=r[1],d=t.O,s=t.A,g=t.M,h=t.U,w=t.tn,y=t.rn,m=t.in,x=xt(),O=x.V,z=x.D,I=n({u:ln,o:{w:0,h:0}},(function(){var n=y(rt,Jn);n&&m(rt,Jn);var t=Mn(g),r=Mn(s),i=Ln(s);return n&&m(rt,Jn,!0),{w:r.w+t.w+i.w,h:r.h+t.h+i.h}}))[0],L=h?Qt:Zt.concat(Qt),R=wn(i,{s:function(){return e},g:function(){return o},_:function(n,t){var r=n[0],i=t[0];return[C(r).concat(C(i)).reduce((function(n,t){return n[t]=r[t]||i[t],n}),{})]}}),T=function(n){_(n||Ut,(function(n){if(p(Ut,n)>-1){var t=A(d,n);f(t)?A(s,n,t):M(s,n)}}))},V=function(n){var t=n.an,r=n.On,e=n.Cn,o=!t||e?i:R,u=!1;if(r){var a=r[0];u=r[1],c({cn:a})}o({an:t,ln:u})},j=function(n){I()[1]&&(n?i:R)({fn:!0})},B=(g||!z)&&function(t,r){var i=N(ct),e=[],o=n({o:!1})[0],u=function(n){if(n){var t=o(0===(i=n).h||i.isIntersecting||i.intersectionRatio>0);t[1]&&r(t)}var i};if(nn){var a=new nn((function(n){n&&n.length>0&&u(n.pop())}),{root:t});a.observe(i),b(e,(function(){a.disconnect()}))}else{var f=function(){var n=An(i);u(n)};b(e,Gt(i,f)),f()}return F(t,i),function(){S(e),W(i)}}(d,(function(n){var t=n[0],r=n[1];c({en:t}),i({un:r})})),D=!w&&Gt(d,V,{Cn:!0,xn:!O}),E=$t(d,!1,(function(n,t){t?R({pn:!0}):w||T(n)}),{An:Zt,zn:Zt.concat(Ut)})[0],q=w&&new tn(V.bind(0,{an:!0}));return q&&q.observe(d),T(),[function(n){var t=n("updating.ignoreMutation")[0],r=n("updating.attributes"),i=r[0],f=r[1],c=n("updating.elementEvents"),d=c[0],h=c[1],w=n("updating.debounce"),_=w[0],p=w[1];if((h||f)&&(u&&(u[1](),u[0]()),u=$t(g||s,!0,j,{An:L.concat(i||[]),zn:L.concat(i||[]),In:d,Mn:Jt,Rn:function(n,r){var i=n.target,e=n.attributeName;return!(r||!e)&&k(i,Jt,Kt)||!!function(n){return l(t)&&t(n)}(n)}})),p)if(R.p(),v(_)){var b=_[0],y=_[1];e=!!a(b)&&b,o=!!a(y)&&y}else a(_)?(e=_,o=!1):(e=!1,o=!1)},function(){u&&u[0](),B&&B(),D&&D(),q&&q.disconnect(),E()}]},tr={I:{t:0,r:0,b:0,l:0},vn:!1,dn:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},bn:{x:0,y:0},wn:{x:"hidden",y:"hidden"},yn:{x:!1,y:!1},en:!1,cn:!1},rr=function(n,t){var r=Fn(t,{}),i=Hn(tr),e=new Set,o=i[0],u=function(n,t,r){S(e,[n,t||{},!!r])},f=Mt(n),c=f[0],l=f[1],v=function(n,t){var r=n.A,i=xt(),e=i.V,o=i.T,u=i.D,f=!e&&(o.x||o.y),c=[Lt(n,t),Rt(n,t),Pt(n,t)];return function(n,t,i){var e=Ft(O({an:!1,sn:!1,ln:!1,un:!1,Sn:!1,mn:!1,pn:!1,fn:!1},t),{},i),o=f||!u,l=o&&L(r),v=o&&R(r),d=e;return _(c,(function(t){d=Ft(d,t(d,n,!!i)||{},i)})),a(l)&&L(r,l),a(v)&&R(r,v),d}}(c,i),d=nr(c,i,(function(n){u(v(r,n))})),s=d[0],g=d[1],h=o.bind(0);return h.Tn=function(n){e.add(n)},h.Vn=c,[function(n,r){var i=Fn(t,n,r);s(i),u(v(i,{},r))},h,function(){e.clear(),g(),l()}]},ir=function(n){var t=N(lt+" "+n),r=N(st),i=N(gt);return P(t,r),P(r,i),{jn:t,Bn:r,Dn:i}},er=function(n,t,r){var i=Hn({})[0],e=function(n,t){var r=(0,xt().q)().L,i=t.X,e=t.O,o=t.A,u=!t.nn&&n.scrollbarsSlot,a=(l(u)?u(i,e,o):u)||(l(r)?r(i,e,o):r)||e,f=ir(vt),c=ir(dt),v=f.jn,d=c.jn;return P(a,v),P(a,d),[{En:f,kn:c},W.bind(0,[v,d])]}(n,r),o=e[0],u=e[1],a=i.bind(0);return a.Vn=o,[function(n,r){var i=Fn(t,n,r);console.log(i)},a,function(){u()}]},or={},ur="__osOptionsValidationPlugin",ar=new Set,fr=new WeakMap,cr=function n(t,r,i){var e=xt(),o=e.F,u=e.T,a=e.k,f=O({},or),c=h(t)?t:t.target,s=function(n){return fr.get(n)}(c);if(s)return s;var g=f[ur],w=function(n){var t=n||{},r=g&&g.qn;return r?r(t,!0):t},p=O({},o(),w(r)),b=qn(i),y=b[0],m=b[1],S=b[2];u.x&&u.y&&!p.nativeScrollbarsOverlaid.initialize&&S("initializationWithdrawn");var z=rr(t,p),A=z[0],I=z[1],M=z[2],L=er(t,p,I.Vn),R=L[0],T=L[2],V=function(n,t){A(n,t),R(n,t)},j=a(V.bind(0,{},!0));I.Tn((function(n,t,r){var i=n.an,e=n.ln,o=n.un,u=n.Sn,a=n.mn,f=n.fn,c=n.pn;S("updated",{updateHints:{sizeChanged:i,directionChanged:e,heightIntrinsicChanged:o,overflowAmountChanged:u,overflowStyleChanged:a,contentMutation:f,hostMutation:c},changedOptions:t,force:r})}));var B={options:function(n){if(n){var t=function n(t,r){var i={};return _(C(r).concat(C(t)),(function(e){var o=t[e],u=r[e];if(d(o)&&d(u))O(i[e]={},n(o,u));else if(x(r,e)&&u!==o){var a=!0;if(v(o)||v(u))try{ht(o)===ht(u)&&(a=!1)}catch(f){}a&&(i[e]=u)}})),i}(p,w(n));(function(n){for(var t in n)return!1;return!0})(t)||(O(p,t),V(t))}return O({},p)},on:y,off:m,state:function(){var n=I();return O({},{overflowAmount:n.bn,overflowStyle:n.wn,hasOverflow:n.yn,padding:n.I,paddingAbsolute:n.vn})},elements:function(){var n=I.Vn,t=n.X,r=n.O,i=n.I,e=n.A;return O({},{target:t,host:r,padding:i||e,viewport:e,content:n.M||e})},update:function(n){V({},n)},destroy:function(){!function(n){fr.delete(n),ar.delete(n)}(c),j(),m(),T(),M(),S("destroyed")}};return _(C(f),(function(t){var r=f[t];l(r)&&r(n,B)})),B.update(!0),function(n,t){fr.set(n,t),ar.add(n)}(c,B),S("initialized"),B};return cr.plugin=function(n){return _(v(n)?n:[n],(function(n){or[n[0]]=n[1]}))},cr.env=function(){var n=xt();return O({},{scrollbarSize:n.R,scrollbarIsOverlaid:n.T,scrollbarStyling:n.V,rtlScrollBehavior:n.B,flexboxGlue:n.D,cssCustomProperties:n.j,defaultInitializationStrategy:n.W,defaultDefaultOptions:n.N,getInitializationStrategy:n.q,setInitializationStrategy:n.P,getDefaultOptions:n.F,setDefaultOptions:n.H})},cr})); \ No newline at end of file +!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars=t()}(this,(function(){"use strict";function n(n,t){var r,e=n.v,i=n.o,o=n.u,u=e,a=function(n,t){var e=u,a=n,c=t||(i?!i(e,a):e!==a);return(c||o)&&(u=a,r=e),[u,c,r]};return[t?function(n){return a(t(u,r),n)}:a,function(n){return[u,!!n,r]}]}function t(n){return void 0===n}function r(n){return null===n}function e(n){return"number"==typeof n}function i(n){return"string"==typeof n}function o(n){return"boolean"==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)&&!r(n)}function f(n){var t=!!n&&n.length,r=e(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"!==C(n))return!1;var r,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(r in n);return t(r)||L.call(n,r)}function d(n){var t=window.HTMLElement;return!!n&&(t?n instanceof t:n.nodeType===S)}function v(n){var t=window.Element;return!!n&&(t?n instanceof t:n.nodeType===S)}function s(n,t){if(f(n))for(var r=0;r0;e=a[o++];)u=!!r(n.classList,e)&&u}return u},dn=function(n,t){return ln(n,t,(function(n,t){return n.contains(t)}))},vn=function(n,t){ln(n,t,(function(n,t){return n.remove(t)}))},sn=function(n,t){return ln(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 s(r,(function(r){(e?e(n[r]):n[r])!==(e?e(t[r]):t[r])&&(i=!1)})),i}return!1},pn=function(n,t){return hn(n,t,["w","h"])},wn=function(n,t){return hn(n,t,["x","y"])},gn=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)})},bn=function(n){n&&window.clearTimeout(n),n&&an(n)},mn=function(){},xn=function(n,t){var r,i,o,a,c=t||{},f=c.g,l=c.p,d=c.m,v=window.setTimeout,s=function(t){bn(r),bn(i),i=r=o=void 0,n.apply(this,t)},h=function(n){return d&&o?d(o,n):n},p=function(){r&&s(h(a)||a)},w=function(){var n=R(arguments),t=u(f)?f():f,c=e(t)&&t>=0;if(c){var d=u(l)?l():l,w=e(d)&&d>=0,g=t>0?v:cn,y=h(n),b=y||n,m=s.bind(0,b);bn(r),r=g(m,t),w&&!i&&(i=v(p,d)),o=a=b}else s(n)};return w._=p,w},Sn={opacity:1,zindex:1},On=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return Number.isNaN(r)?0:r},An=function(n,t,r){return null!=t?t[r]||t.getPropertyValue(r):n.style[r]},Ln=function(n,r,i){try{if(n){var o=n.style;t(o[r])?o.setProperty(r,i):o[r]=function(n,t){return!Sn[n.toLowerCase()]&&e(t)?t+"px":t}(r,i)}}catch(C){}},Cn=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=b(n,[o,u,a,c]);return{t:On(f[o]),r:On(f[u]),b:On(f[a]),l:On(f[c])}},Mn={w:0,h:0},En=function(){return{w:window.innerWidth,h:window.innerHeight}},Rn=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:Mn},Tn=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:Mn},zn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:Mn},Dn=function(n){var t=parseFloat(b(n,"height"))||0,r=parseFloat(b(n,"height"))||0;return{w:r-Math.round(r),h:t-Math.round(t)}},In=function(n){return n.getBoundingClientRect()},Pn=function(n){return n.split(" ")},Bn=function(n,t,r,e){s(Pn(t),(function(t){n.removeEventListener(t,r,e)}))},Fn=function(n,r,e,i){var o=function(){if(t(m)){m=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){m=!0}}))}catch(n){}}return m}(),u=o&&i&&i.S||!1,a=i&&i.C||!1,c=i&&i.O||!1,f=[],l=o?{passive:u,capture:a}:a;return s(Pn(r),(function(t){var r=c?function(i){n.removeEventListener(t,r,a),e&&e(i)}:e;E(f,Bn.bind(null,n,t,r,a)),n.addEventListener(t,r,l)})),z.bind(0,f)},Nn=function(n){return function(n){return n.stopPropagation()}(n)||function(n){return n.preventDefault()}(n)},jn={x:0,y:0},kn=function(n){var t=n?In(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:jn},qn=function(n,t){s(a(t)?t:[t],n)},Hn=function(n){function t(n,t){if(n){var r=e.get(n);qn((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),qn((function(n){n&&i.add(n)}),r),t.bind(0,n,r)}var e=new Map;return s(I(n),(function(t){r(t,n[t])})),[r,t,function(n){for(var t=arguments.length,r=new Array(t>1?t-1:0),i=1;i
')[0],e=r.firstChild,i=Hn(),o=i[0],u=i[2],a=n({v:St(t,r,e),o:wn}),c=a[0],f=(0,a[1])()[0],l=function(n){var t=!1,e=sn(n,et);try{t="none"===b(n,function(n){var t=tn[n];if(D(tn,n))return t;var r=J(n),e=K().style;return s(Z,(function(i){var o=i.replace(/-/g,""),u=[n,i+n,o+r,J(o)+r];return!(t=u.find((function(n){return void 0!==e[n]})))})),tn[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},v=function(n){return{A:!n,D:!1}}(l),p=h({},yt),w={L:f,I:d,T:l,M:"-1"===b(r,"zIndex"),P:Ot(r,e),F:At(r,e),R:function(n){return o("_",n)},N:h.bind(0,{},v),j:function(n){h(v,n)},B:h.bind(0,{},p),V:function(n){h(p,n)},k:h({},v),H:h({},p)};if(B(r,"style"),G(r),!(l||d.x&&d.y)){var g=En(),y=Lt();window.addEventListener("resize",(function(){var n=En(),i={w:n.w-g.w,h:n.h-g.h};if(0!==i.w||0!==i.h){var o=mt(i.w),a=mt(i.h),f={w:mt(xt(n.w/(g.w/100))),h:mt(xt(n.h/(g.h/100)))},l=Lt(),d=o>2&&a>2,v=!function(n,t){var r=mt(n),e=mt(t);return!(r===e||r+1===e||r-1===e)}(f.w,f.h);if(d&&v&&l!==y&&y>0){var s=c(St(t,r,e)),p=s[0],w=s[1];h(x.L,p),G(r),w&&u("_")}g=n,y=l}}))}return w}()),x},Mt=function(n,t,r,e){var i=e||(u(r)?r.apply(0,n):r);return(u(i)?i.apply(0,n):i)||t.apply(0,n)},Et=function(n,e,i,a){var c=o(a)||a?a:u(i)?i.apply(0,n):i;return!0===c||r(c)||t(c)||u(c)?e.apply(0,n):c},Rt=0,Tt=K.bind(0,""),zt=function(n){_(q(n),k(n)),G(n)},Dt=function(){var n=Ct(),t=n.T,r=n.I,e=!(n.M||t||!r.x&&!r.y)&&document.createElement("style");return e&&(w(e,"id",tt+"-"+Rt),Rt++),e},It=function(n){var t=Ct(),r=t.N,e=t.T,i=r(),o=i.U,u=i.q,a=i.A,c=i.D,f=d(n),l=n,v=f?n:l.target,s=j(v,"textarea"),h=!s&&j(v,"body"),p=v.ownerDocument,g=p.body,y=p.defaultView,b=!!un&&e,m=Mt.bind(0,[v]),x=Et.bind(0,[v]),S=m(Tt,u,l.viewport),O=S===v,A=b&&O,L=O&&!A?m(Tt):S,C={W:v,U:s?m(Tt,o,l.host):v,q:L,A:x(Tt,a,l.padding),D:x(Tt,c,l.content),G:!A&&Dt(),X:y,Y:p,$:q(g),J:g,K:s,Z:h,rr:f,ar:A,er:function(n,t){return A?function(n,t,r){var e=w(n,t)||"";return new Set(e.split(" ")).has(r)}(L,Gn,t):dn(L,n)},tr:function(n,t,r){return A?P(L,Gn,t,r):(r?sn:vn)(L,n)}},R=I(C).reduce((function(n,t){var r=C[t];return E(n,!(!r||q(r))&&r)}),[]),T=function(n){return n?M(R,n)>-1:null},D=C.W,F=C.U,N=C.A,H=C.q,W=C.D,V=C.G,U=[],K=s&&T(F),$=s?D:k([W,H,N,F,D].find((function(n){return!1===T(n)}))),J=W||H,Z=function(n,t){return w(n,Gn,t||""),B.bind(0,n,Gn)}(F,A?"viewport":"host"),Q=sn(N,Qn),nn=sn(H,!A&&nt),tn=sn(W,rt);return K&&(Y(D,F),E(U,(function(){Y(F,D),G(F)}))),_(J,$),_(F,N),_(N||F,!A&&H),_(H,W),E(U,(function(){Z(),B(H,Kn),B(H,$n),T(W)&&zt(W),T(H)&&zt(H),T(N)&&zt(N),Q(),nn(),tn()})),e&&!A&&E(U,vn.bind(0,H,et)),V&&(X(H,V),E(U,G.bind(0,V))),[C,z.bind(0,U)]},Pt=function(n,t){var r=n.D,e=t[0];return function(n){var t=Ct().F,i=e().nr,o=n.ir,u=(r||!t)&&o;return u&&b(r,{height:i?"":"100%"}),{vr:u,ur:u}}},Bt=function(t,r){var e=r[0],i=r[1],o=t.U,u=t.A,a=t.q,c=t.ar,f=n({o:gn,v:Cn()},Cn.bind(0,o,"padding","")),l=f[0],d=f[1];return function(n,t,r){var o=d(r),f=o[0],v=o[1],s=Ct(),p=s.T,w=s.F,g=e().sr,y=n.vr,m=n.ur,x=n.cr,S=t("paddingAbsolute"),O=S[0],A=S[1];if(y||v||!w&&m){var L=l(r);f=L[0],v=L[1]}var C=!c&&(A||x||v);if(C){var M=!O||!u&&!p,E=f.r+f.l,R=f.t+f.b,T={marginRight:M&&!g?-E:0,marginBottom:M?-R:0,marginLeft:M&&g?-E:0,top:M?-f.t:0,right:M?g?-f.r:"auto":0,left:M?g?"auto":-f.l:0,width:M?"calc(100% + "+E+"px)":""},z={paddingTop:M?f.t:0,paddingRight:M?f.r:0,paddingBottom:M?f.b:0,paddingLeft:M?f.l:0};b(u||a,T),b(a,z),i({A:f,lr:!M,dr:u?z:h({},T,z)})}return{gr:C}}},Ft=Math.max,Nt="visible",jt="hidden",kt=42,qt={o:pn,v:{w:0,h:0}},Ht={o:wn,v:{x:jt,y:jt}},Wt=function(n,t,r){return r?sn(n,t):vn(n,t)},Vt=function(n){return 0===n.indexOf(Nt)},_t=function(t,r){var e=r[0],i=r[1],o=t.U,u=t.A,a=t.q,c=t.G,f=t.ar,l=t.tr,d=Ct(),v=d.L,h=d.F,p=d.T,g=d.I,y=!f&&!p&&(g.x||g.y),m=n(qt,Dn.bind(0,a)),x=m[0],S=m[1],O=n(qt,zn.bind(0,a)),A=O[0],L=O[1],C=n(qt),M=C[0],E=C[1],R=n(Ht)[0],T=function(n,t){if(b(a,{height:""}),t){var r=e(),i=r.lr,u=r.A,c=n.pr,f=n.hr,l=Dn(o),d=Tn(o),v="content-box"===b(a,"boxSizing"),s=i||v?u.b+u.t:0,h=!(g.x&&v);b(a,{height:d.h+l.h+(c.x&&h?f.x:0)-s})}},z=function(n,t){var r=p||n?0:kt,e=function(n,e,i){var o=b(a,n),u="scroll"===(t?t[n]:o);return[o,u,u&&!p?e?r:i:0,e&&!!r]},i=e("overflowX",g.x,v.x),o=i[0],u=i[1],c=i[2],f=i[3],l=e("overflowY",g.y,v.y);return{wr:{x:o,y:l[0]},pr:{x:u,y:l[1]},hr:{x:c,y:l[2]},yr:{x:f,y:l[3]}}},D=function(n,t,r,i){if(y){var o=e().dr,u=n.hr,f=n.yr,l=f.x,d=f.y,v=u.x,s=u.y,h=o[i?"paddingRight":"paddingLeft"],p=o.paddingTop,g=t.w+r.w,m=t.h+r.h,x={w:s&&d?s+g-h+"px":"",h:v&&l?v+m-p+"px":""};if(c){var S=c.sheet;if(S){var O=S.cssRules;if(O){O.length||S.insertRule("#"+w(c,"id")+" + ."+tt+"::before {}",0);var A=O[0].style;A.width=x.w,A.height=x.h}}}else b(a,{"--os-vaw":x.w,"--os-vah":x.h})}return y},B=function(n,t,r,i){var o=n.hr,u=n.yr,a=u.x,c=u.y,f=o.x,l=o.y,d=e().dr,v=t?"marginLeft":"marginRight",s=t?"paddingLeft":"paddingRight",h=d[v],p=d.marginBottom,w=d[s],g=d.paddingBottom;i.width="calc(100% + "+(l+-1*h)+"px)",i[v]=-l+h,i.marginBottom=-f+p,r&&(i[s]=w+(c?l:0),i.paddingBottom=g+(a?f:0))},F=function(n,t,r){if(y){var i=r||z(n),o=e().dr,u=i.yr,c=u.x,f=u.y,l={},d=function(n){return s(n.split(" "),(function(n){l[n]=o[n]}))};c&&d("marginBottom paddingTop paddingBottom"),f&&d("marginLeft marginRight paddingLeft paddingRight");var v=b(a,I(l));return vn(a,tt),h||(l.height=""),b(a,l),[function(){B(i,t,y,v),b(a,v),sn(a,tt)},i]}return[mn]};return function(n,t,r){var c,d=n.vr,v=n.mr,s=n.ur,y=n.gr,m=n.ir,O=n.cr,C=e(),I=C.nr,N=C.sr,j=t("nativeScrollbarsOverlaid.show"),k=j[0],q=j[1],H=t("overflow"),W=H[0],V=H[1],_=k&&g.x&&g.y,U=!f&&!h&&(d||s||v||q||m),X=Vt(W.x),Y=Vt(W.y),G=X||Y,K=S(r),$=L(r),J=E(r);if(q&&p&&l(et,Zn,!_),U&&(c=z(_),T(c,I)),d||y||s||O||q){G&&l(it,Jn,!1);var Z=F(_,N,c),Q=Z[0],nn=Z[1],tn=K=x(r),rn=tn[0],en=tn[1],on=$=A(r),un=on[0],an=on[1],cn=Tn(a),fn=un,ln=cn;Q(),(an||en||q)&&nn&&!_&&D(nn,un,rn,N)&&(ln=Tn(a),fn=zn(a)),J=M(function(n,t,r){var e=window.devicePixelRatio%1!=0?1:0,i={w:Ft(0,n.w-t.w-Ft(0,r.w)),h:Ft(0,n.h-t.h-Ft(0,r.h))};return{w:i.w>e?i.w:0,h:i.h>e?i.h:0}}({w:Ft(un.w,fn.w),h:Ft(un.h,fn.h)},{w:ln.w+Ft(0,cn.w-un.w),h:ln.h+Ft(0,cn.h-un.h)},rn),r)}var dn=J,vn=dn[0],sn=dn[1],hn=$,pn=hn[0],wn=hn[1],gn=K,yn=gn[0],bn=gn[1],mn={x:vn.w>0,y:vn.h>0},xn=X&&Y&&(mn.x||mn.y)||X&&mn.x&&!mn.y||Y&&mn.y&&!mn.x;if(y||O||bn||wn||sn||V||q||U){var Sn={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},On=function(n,t,r,e){var i=function(n,t){var r=Vt(n),e=t&&r&&n.replace(Nt+"-","")||"";return[t&&!r?n:"",Vt(e)?"hidden":e]},o=i(r.x,t.x),u=o[0],a=o[1],c=i(r.y,t.y),f=c[0],l=c[1];return e.overflowX=a&&f?a:u,e.overflowY=l&&u?l:f,z(n,e)}(_,mn,W,Sn),An=D(On,pn,yn,N);f||B(On,N,An,Sn),U&&T(On,I),f?(w(o,Kn,Sn.overflowX),w(o,$n,Sn.overflowY)):b(a,Sn)}P(o,Gn,Jn,xn),Wt(u,it,xn),!f&&Wt(a,it,G);var Ln=R(z(_).wr),Cn=Ln[0],Mn=Ln[1];return i({wr:Cn,br:{x:vn.w,y:vn.h},_r:mn}),{Sr:Mn,Cr:sn}}},Ut=function(n,t,r){var e={},i=t||{};return s(I(n).concat(I(i)),(function(t){var o=n[t],u=i[t];e[t]=!!(r||o||u)})),e},Xt="animationstart",Yt="scroll",Gt=3333333,Kt=function(n){return"rtl"===b(n,"direction")},$t=function(n){return n&&(n.height||n.width)},Jt=function(t,r,e){var i=e||{},u=i.Or,f=void 0!==u&&u,l=i.Ar,d=void 0!==l&&l,v=Ct().P,s=$('
')[0],h=s.firstChild,p=Kt.bind(0,s),w=n({v:void 0,u:!0,o:function(n,t){return!(!n||!$t(n)&&$t(t))}}),m=w[0],x=function(n){var t=a(n)&&n.length>0&&c(n[0]),e=!t&&o(n[0]),i=!1,u=!1,l=!0;if(t){var d=m(n.pop().contentRect),h=d[0],p=d[2],w=$t(h);u=!$t(p)&&w,l=!(i=!p||!w)}else e?l=n[1]:u=!0===n;if(f&&l){var b=e?n[0]:Kt(s);g(s,b?v.n?-Gt:v.i?0:Gt:Gt),y(s,Gt)}i||r({vr:!e,Dr:e?n:void 0,Ar:!!u})},S=[],O=!!d&&x;if(un){var A=new un(x);A.observe(h),E(S,(function(){A.disconnect()}))}else{var L=$('
');_(h,L),sn(h,ct);var C,M=L[0],R=M.lastChild,T=M.firstChild,D=null==T?void 0:T.firstChild,I=Rn(M),P=I,B=!1,F=function(){g(T,Gt),y(T,Gt),g(R,Gt),y(R,Gt)},N=function(n){C=0,B&&(I=P,x(!0===n))},j=function(n){P=Rn(M),B=!n||!pn(P,I),n?(Nn(n),B&&!C&&(an(C),C=cn(N))):N(!1===n),F()};E(S,[Fn(T,Yt,j),Fn(R,Yt,j)]),b(D,{width:Gt,height:Gt}),F(),O=d?j.bind(0,!1):F}if(f){var k=n({v:!p()},p)[0];E(S,Fn(s,Yt,(function(n){var t=k(),r=t[0];t[1]&&(vn(h,"ltr rtl"),sn(h,r?"rtl":"ltr"),x(t)),Nn(n)})))}return O&&(sn(s,ut),E(S,Fn(s,Xt,O,{O:!!un}))),U(t,s),function(){z(S),G(s)}},Zt=function(t,r){var e=K(dt),i=[],o=n({v:!1})[0],u=function(n){if(n){var t=o(function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}(n));t[1]&&r(t)}};if(on){var a=new on((function(n){n&&n.length>0&&u(n.pop())}),{root:t});a.observe(e),E(i,(function(){a.disconnect()}))}else{var c=function(){var n=Rn(e);u(n)};E(i,Jt(e,c)),c()}return U(t,e),function(){z(i),G(e)}},Qt=function(n,t,r,e){var o=!1,u=e||{},a=u.Er,c=u.zr,f=u.Lr,l=u.Ir,d=u.Tr,v=u.Mr,h=function(n,t,r){var e,o=!1,u=function(u){if(r){var a=r.reduce((function(t,r){if(r){var e=r[0],o=r[1],a=o&&e&&(u?u(e):N(e,n));a&&a.length&&o&&i(o)&&E(t,[a,o.trim()],!0)}return t}),[]);s(a,(function(n){return s(n[0],(function(r){var i=n[1],u=e.get(r);if(u){var a=u[0],c=u[1];a===i&&c()}var f=Fn(r,i,(function(n){o?(f(),e.delete(r)):t(n)}));e.set(r,[i,f])}))}))}};return r&&(e=new WeakMap,u()),[function(){o=!0},u]}(n,xn((function(){o&&r(!0)}),{g:33,p:99}),f),p=h[0],g=h[1],y=c||[],b=(a||[]).concat(y),m=function(o){var u=d||mn,a=v||mn,c=[],f=[],h=!1,p=!1,b=!1;s(o,(function(r){var o=r.attributeName,d=r.target,v=r.type,s=r.oldValue,g=r.addedNodes,m="attributes"===v,x="childList"===v,S=n===d,O=m&&i(o)?w(d,o):0,A=0!==O&&s!==O,L=M(y,o)>-1&&A;if(t&&!S){var C=!m,R=m&&L,T=R&&l&&j(d,l),z=(T?!u(d,o,s,O):C||R)&&!a(r,!!T,n,e);E(f,g),p=p||z,b=b||x}!t&&S&&A&&!u(d,o,s,O)&&(E(c,o),h=h||L)})),b&&!T(f)&&g((function(n){return f.reduce((function(t,r){return E(t,N(n,r)),j(r,n)?E(t,r):t}),[])})),t?p&&r(!1):T(c)&&!h||r(c,h)},x=new en(m);return x.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:b,subtree:t,childList:t,characterData:t}),o=!0,[function(){o&&(p(),x.disconnect(),o=!1)},function(){o&&m(x.takeRecords())}]},nr="["+Gn+"]",tr="."+nt,rr=["tabindex"],er=["wrap","cols","rows"],ir=["id","class","style","open"],or=function(t,r,o){var c,f,l,d=r[1],v=t.U,h=t.q,p=t.D,g=t.K,y=t.ar,b=t.er,m=t.tr,x=Ct(),S=x.T,O=x.F,A=n({o:pn,v:{w:0,h:0}},(function(){var n=b(it,Jn);n&&m(it,Jn);var t=zn(p),r=zn(h),e=Dn(h);return n&&m(it,Jn,!0),{w:r.w+t.w+e.w,h:r.h+t.h+e.h}})),L=A[0],C=g?er:ir.concat(er),E=xn(o,{g:function(){return c},p:function(){return f},m:function(n,t){var r=n[0],e=t[0];return[I(r).concat(I(e)).reduce((function(n,t){return n[t]=r[t]||e[t],n}),{})]}}),R=function(n){s(n||rr,(function(n){if(M(rr,n)>-1){var t=w(v,n);i(t)?w(h,n,t):B(h,n)}}))},T=function(n){var t=n.vr,r=n.Dr,e=n.Ar,i=!t||e?o:E,u=!1;if(r){var a=r[0];u=r[1],d({sr:a})}i({vr:t,cr:u})},z=function(n){L()[1]&&(n?o:E)({ur:!0})},D=(p||!O)&&Zt(v,(function(n){var t=n[0],r=n[1];d({nr:t}),o({ir:r})})),P=!y&&Jt(v,T,{Ar:!0,Or:!S}),F=Qt(v,!1,(function(n,t){t?E({mr:!0}):y||R(n)}),{zr:ir,Er:ir.concat(rr)}),N=F[0],j=y&&new un(T.bind(0,{vr:!0}));return j&&j.observe(v),R(),[function(n){var t=n("updating.ignoreMutation")[0],r=n("updating.attributes"),i=r[0],o=r[1],d=n("updating.elementEvents"),v=d[0],s=d[1],w=n("updating.debounce"),g=w[0],y=w[1],b=function(n){return u(t)&&t(n)};if((s||o)&&(l&&(l[1](),l[0]()),l=Qt(p||h,!0,z,{zr:C.concat(i||[]),Er:C.concat(i||[]),Lr:v,Ir:nr,Mr:function(n,t){var r=n.target,e=n.attributeName;return!(t||!e)&&W(r,nr,tr)||!!b(n)}})),y)if(E._(),a(g)){var m=g[0],x=g[1];c=!!e(m)&&m,f=!!e(x)&&x}else e(g)?(c=g,f=!1):(c=!1,f=!1)},function(){l&&l[0](),D&&D(),P&&P(),j&&j.disconnect(),N()}]},ur={A:{t:0,r:0,b:0,l:0},lr:!1,dr:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},br:{x:0,y:0},wr:{x:"hidden",y:"hidden"},_r:{x:!1,y:!1},nr:!1,sr:!1},ar=function(n,t){var r=Vn(t,{}),i=_n(ur),o=new Set,u=i[0],a=function(n,t,r){z(o,[n,t||{},!!r])},c=It(n),f=c[0],l=c[1],d=function(n,t){var r=n.q,i=Ct(),o=i.T,u=i.I,a=i.F,c=!o&&(u.x||u.y),f=[Pt(n,t),Bt(n,t),_t(n,t)];return function(n,t,i){var o=Ut(h({vr:!1,gr:!1,cr:!1,ir:!1,Cr:!1,Sr:!1,mr:!1,ur:!1},t),{},i),u=c||!a,l=u&&g(r),d=u&&y(r),v=o;return s(f,(function(t){v=Ut(v,t(v,n,!!i)||{},i)})),e(l)&&g(r,l),e(d)&&y(r,d),v}}(f,i),v=or(f,i,(function(n){a(d(r,n))})),p=v[0],w=v[1],b=u.bind(0);return b.Pr=function(n){o.add(n)},b.Fr=f,[function(n,r){var e=Vn(t,n,r);p(e),a(d(e,{},r))},b,function(){o.clear(),w(),l()}]},cr=function(n){var t=K(vt+" "+n),r=K(pt),e=K(wt);return _(t,r),_(r,e),{Rr:t,Nr:r,jr:e}},fr=function(n,t,r){var e=_n({})[0],i=function(n,t){var r=(0,Ct().N)().Br,e=t.W,i=t.U,o=t.q,u=!t.rr&&n.scrollbarsSlot,a=Et([e,i,o],(function(){return i}),r,u),c=cr(st),f=cr(ht),l=c.Rr,d=f.Rr;return _(a,l),_(a,d),[{Vr:c,kr:f},G.bind(0,[l,d])]}(n,r),o=i[0],u=i[1],a=e.bind(0);return a.Fr=o,[function(n,r){var e=Vn(t,n,r);console.log(e)},a,function(){u()}]},lr={},dr="__osOptionsValidationPlugin",vr=new Set,sr=new WeakMap,hr=function n(t,r,e){var i=Ct(),o=i.B,a=i.I,c=i.R,f=h({},lr),l=d(t)?t:t.target,v=function(n){return sr.get(n)}(l);if(v)return v;var p=f[dr],w=function(n){var t=n||{},r=p&&p.Hr;return r?r(t,!0):t},g=h({},o(),w(r)),y=Hn(e),b=y[0],m=y[1],x=y[2];a.x&&a.y&&!g.nativeScrollbarsOverlaid.initialize&&x("initializationWithdrawn");var S=ar(t,g),O=S[0],A=S[1],L=S[2],C=fr(t,g,A.Fr),M=C[0],E=C[2],R=function(n,t){O(n,t),M(n,t)},T=c(R.bind(0,{},!0));A.Pr((function(n,t,r){var e=n.vr,i=n.cr,o=n.ir,u=n.Cr,a=n.Sr,c=n.ur,f=n.mr;x("updated",{updateHints:{sizeChanged:e,directionChanged:i,heightIntrinsicChanged:o,overflowAmountChanged:u,overflowStyleChanged:a,contentMutation:c,hostMutation:f},changedOptions:t,force:r})}));var z={options:function(n){if(n){var t=bt(g,w(n));(function(n){for(var t in n)return!1;return!0})(t)||(h(g,t),R(t))}return h({},g)},on:b,off:m,state:function(){var n=A();return h({},{overflowAmount:n.br,overflowStyle:n.wr,hasOverflow:n._r,padding:n.A,paddingAbsolute:n.lr})},elements:function(){var n=A.Fr,t=n.W,r=n.U,e=n.A,i=n.q;return h({},{target:t,host:r,padding:e||i,viewport:i,content:n.D||i})},update:function(n){R({},n)},destroy:function(){!function(n){sr.delete(n),vr.delete(n)}(l),T(),m(),E(),L(),x("destroyed")}};return s(I(f),(function(t){var r=f[t];u(r)&&r(n,z)})),z.update(!0),function(n,t){sr.set(n,t),vr.add(n)}(l,z),x("initialized"),z};return hr.plugin=function(n){return s(a(n)?n:[n],(function(n){lr[n[0]]=n[1]}))},hr.env=function(){var n=Ct();return h({},{scrollbarSize:n.L,scrollbarIsOverlaid:n.I,scrollbarStyling:n.T,rtlScrollBehavior:n.P,flexboxGlue:n.F,cssCustomProperties:n.M,defaultInitializationStrategy:n.k,defaultDefaultOptions:n.H,getInitializationStrategy:n.N,setInitializationStrategy:n.j,getDefaultOptions:n.B,setDefaultOptions:n.V})},hr})); \ No newline at end of file diff --git a/packages/overlayscrollbars/src/environment.ts b/packages/overlayscrollbars/src/environment.ts index 0c5a0a2..791c32c 100644 --- a/packages/overlayscrollbars/src/environment.ts +++ b/packages/overlayscrollbars/src/environment.ts @@ -27,81 +27,31 @@ import { classNameEnvironmentFlexboxGlueMax, classNameViewportScrollbarStyling, } from 'classnames'; -import { OSOptions, defaultOptions } from 'options'; -import { OSTargetElement, PartialOptions } from 'typings'; - -type StructureInitializationStrategyElementFn = - | ((target: OSTargetElement) => HTMLElement | T) - | T; - -type ScrollbarsInitializationStrategyElementFn = - | ((target: OSTargetElement, host: HTMLElement, viewport: HTMLElement) => HTMLElement | T) - | T; - -/** - * A Static element is an element which MUST be generated. - * If null or undefined (or the returned result is null or undefined), the initialization function is generatig the element, otherwise - * the element returned by the function acts as the generated element. - */ -export type StructureInitializationStrategyStaticElement = StructureInitializationStrategyElementFn< - null | undefined ->; - -/** - * A Dynamic element is an element which CAN be generated. - * If boolean (or the returned result is boolean), the generation of the element is forced (or not). - * If the function returns and element, the element returned by the function acts as the generated element. - */ -export type StructureInitializationStrategyDynamicElement = - StructureInitializationStrategyElementFn; - -export interface StructureInitializationStrategy { - _host: StructureInitializationStrategyStaticElement; - _viewport: StructureInitializationStrategyStaticElement; - _padding: StructureInitializationStrategyDynamicElement; - _content: StructureInitializationStrategyDynamicElement; -} - -export interface ScrollbarsInitializationStrategy { - /** - * The scrollbars slot. If null or undefined (or the returned result is null or undefined), the initialization function is deciding the element, otherwise - * the element returned by the function acts as the scrollbars slot. - */ - _scrollbarsSlot: ScrollbarsInitializationStrategyElementFn; -} - -export interface InitializationStrategy - extends StructureInitializationStrategy, - ScrollbarsInitializationStrategy {} - -export type DefaultInitializationStrategy = { - [K in keyof InitializationStrategy]: Extract< - InitializationStrategy[K], - boolean | null | undefined - >; -}; +import { Options, defaultOptions } from 'options'; +import { PartialOptions } from 'typings'; +import { InitializationStrategy } from 'initialization'; export interface EnvironmentListenersNameArgsMap { _: undefined; } -export interface Environment { +export interface InternalEnvironment { readonly _nativeScrollbarSize: XY; readonly _nativeScrollbarIsOverlaid: XY; readonly _nativeScrollbarStyling: boolean; readonly _rtlScrollBehavior: { n: boolean; i: boolean }; readonly _flexboxGlue: boolean; readonly _cssCustomProperties: boolean; - readonly _defaultInitializationStrategy: DefaultInitializationStrategy; - readonly _defaultDefaultOptions: OSOptions; + readonly _defaultInitializationStrategy: InitializationStrategy; + readonly _defaultDefaultOptions: Options; _addListener(listener: EventListener): () => void; _getInitializationStrategy(): InitializationStrategy; _setInitializationStrategy(newInitializationStrategy: Partial): void; - _getDefaultOptions(): OSOptions; - _setDefaultOptions(newDefaultOptions: PartialOptions): void; + _getDefaultOptions(): Options; + _setDefaultOptions(newDefaultOptions: PartialOptions): void; } -let environmentInstance: Environment; +let environmentInstance: InternalEnvironment; const { abs, round } = Math; const diffBiggerThanOne = (valOne: number, valTwo: number): boolean => { @@ -199,15 +149,12 @@ const getWindowDPR = (): number => { const getDefaultInitializationStrategy = ( nativeScrollbarStyling: boolean -): DefaultInitializationStrategy => ({ - _host: null, - _viewport: null, +): InitializationStrategy => ({ _padding: !nativeScrollbarStyling, _content: false, - _scrollbarsSlot: null, }); -const createEnvironment = (): Environment => { +const createEnvironment = (): InternalEnvironment => { const { body } = document; const envDOM = createDOM(`
`); const envElm = envDOM[0] as HTMLElement; @@ -226,7 +173,7 @@ const createEnvironment = (): Environment => { const initializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling); const defaultDefaultOptions = assignDeep({}, defaultOptions); - const env: Environment = { + const env: InternalEnvironment = { _nativeScrollbarSize: nativeScrollbarSize, _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid, _nativeScrollbarStyling: nativeScrollbarStyling, @@ -242,11 +189,7 @@ const createEnvironment = (): Environment => { _setInitializationStrategy(newInitializationStrategy) { assignDeep(initializationStrategy, newInitializationStrategy); }, - _getDefaultOptions: assignDeep.bind( - 0, - {} as OSOptions, - defaultDefaultOptions - ), + _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions), _setDefaultOptions(newDefaultOptions) { assignDeep(defaultDefaultOptions, newDefaultOptions); }, @@ -305,9 +248,11 @@ const createEnvironment = (): Environment => { return env; }; -export const getEnvironment = (): Environment => { +const getEnvironment = (): InternalEnvironment => { if (!environmentInstance) { environmentInstance = createEnvironment(); } return environmentInstance; }; + +export { getEnvironment }; diff --git a/packages/overlayscrollbars/src/eventListeners.ts b/packages/overlayscrollbars/src/eventListeners.ts deleted file mode 100644 index 8e57846..0000000 --- a/packages/overlayscrollbars/src/eventListeners.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { OSOptions } from 'options'; -import { createEventListenerHub } from 'support'; -import { PartialOptions } from 'typings'; -import type { - InitialEventListeners, - AddEventListener, - RemoveEventListener, - TriggerEventListener, - EventListener, -} from 'support/eventListeners'; -/* -onScrollStart : null, -onScroll : null, -onScrollStop : null, -onOverflowChanged : null, -onOverflowAmountChanged : null, // fusion with onOverflowChanged -onDirectionChanged : null, // gone -onContentSizeChanged : null, // gone -onHostSizeChanged : null, // gone -*/ - -export interface OnUpdatedEventListenerArgs { - updateHints: { - sizeChanged: boolean; - directionChanged: boolean; - heightIntrinsicChanged: boolean; - overflowAmountChanged: boolean; - overflowStyleChanged: boolean; - hostMutation: boolean; - contentMutation: boolean; - }; - changedOptions: PartialOptions; - force: boolean; -} - -export interface OSEventListenersNameArgsMap { - initialized: undefined; - initializationWithdrawn: undefined; - updated: OnUpdatedEventListenerArgs; - destroyed: undefined; -} - -export type OSEventListener< - N extends Extract = Extract< - keyof OSEventListenersNameArgsMap, - string - > -> = EventListener; - -export type AddOSEventListener = AddEventListener; - -export type RemoveOSEventListener = RemoveEventListener; - -export type TriggerOSEventListener = TriggerEventListener; - -export type InitialOSEventListeners = InitialEventListeners; - -export const createOSEventListenerHub = (initialEventListeners?: InitialOSEventListeners) => - createEventListenerHub(initialEventListeners); diff --git a/packages/overlayscrollbars/src/initialization.ts b/packages/overlayscrollbars/src/initialization.ts new file mode 100644 index 0000000..ab986d6 --- /dev/null +++ b/packages/overlayscrollbars/src/initialization.ts @@ -0,0 +1,87 @@ +import { isFunction, isBoolean, isNull, isUndefined } from 'support'; +import type { + StructureInitialization, + StructureInitializationStrategy, +} from 'setups/structureSetup'; +import type { + ScrollbarsInitialization, + ScrollbarsInitializationStrategy, +} from 'setups/scrollbarsSetup'; + +type StaticInitialization = HTMLElement | null | undefined; +type DynamicInitialization = HTMLElement | boolean | null | undefined; + +export type InitializationTargetElement = HTMLElement | HTMLTextAreaElement; + +export type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization; + +export type InitializationTarget = InitializationTargetElement | InitializationTargetObject; + +export type InitializationStrategy = StructureInitializationStrategy & + ScrollbarsInitializationStrategy; + +/** + * Static elements MUST be present. + * Null or undefined behave like if this element wasn't specified during initialization. + */ +export type StaticInitializationElement = + | ((...args: Args) => StaticInitialization) + | StaticInitialization; + +/** + * Dynamic element CAN be present. + * If its a element the element will be handled as the repsective element. + * True means that the respective dynamic element is forced to be generated. + * False means that the respective dynamic element is forced NOT to be generated. + * Null or undefined behave like if this element wasn't specified during initialization. + */ +export type DynamicInitializationElement = + | ((...args: Args) => DynamicInitialization) + | DynamicInitialization; + +export type InitializtationElementStrategy = Exclude; + +export type DefaultInitializtationElementStrategy< + InitElm extends StaticInitializationElement | DynamicInitializationElement +> = Extract any> extends (...args: infer P) => any + ? (...args: P) => HTMLElement + : never; + +const staticInitializationElement = >( + args: Parameters any>>, + defaultStaticInitializationElement: DefaultInitializtationElementStrategy, + staticInitializationElementStrategy?: InitializtationElementStrategy, + staticInitializationElementValue?: T | false +): HTMLElement => { + const result = + staticInitializationElementValue || + (isFunction(staticInitializationElementStrategy) + ? staticInitializationElementStrategy.apply(0, args) + : staticInitializationElementStrategy); + + return ( + (isFunction(result) ? result.apply(0, args) : result) || + defaultStaticInitializationElement.apply(0, args) + ); +}; + +const dynamicInitializationElement = >( + args: Parameters any>>, + defaultDynamicInitializationElement: DefaultInitializtationElementStrategy, + dynamicInitializationElementStrategy?: InitializtationElementStrategy, + dynamicInitializationElementValue?: T | false +): HTMLElement | false => { + const takeInitializationValue = + isBoolean(dynamicInitializationElementValue) || !!dynamicInitializationElementValue; + const result = takeInitializationValue + ? (dynamicInitializationElementValue as boolean | HTMLElement) + : isFunction(dynamicInitializationElementStrategy) + ? dynamicInitializationElementStrategy.apply(0, args) + : dynamicInitializationElementStrategy; + + return result === true || isNull(result) || isUndefined(result) || isFunction(result) + ? defaultDynamicInitializationElement.apply(0, args) + : result; +}; + +export { staticInitializationElement, dynamicInitializationElement }; diff --git a/packages/overlayscrollbars/src/options.ts b/packages/overlayscrollbars/src/options.ts index 22002a3..899e427 100644 --- a/packages/overlayscrollbars/src/options.ts +++ b/packages/overlayscrollbars/src/options.ts @@ -1,7 +1,7 @@ import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support'; import { PartialOptions, ReadonlyOptions } from 'typings'; -const stringify = (value: any) => +const opsStringify = (value: any) => JSON.stringify(value, (_, val) => { if (isFunction(val)) { throw new Error(); @@ -38,7 +38,7 @@ export type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void; export type UpdatedCallback = (this: any, args?: UpdatedArgs) => void; -export interface OSOptions { +export interface Options { paddingAbsolute: boolean; updating: { elementEvents: Array<[elementSelector: string, eventNames: string]> | null; @@ -64,7 +64,7 @@ export interface OSOptions { }; } -export type ReadonlyOSOptions = ReadonlyOptions; +export type ReadonlyOSOptions = ReadonlyOptions; export interface OverflowChangedArgs { x: boolean; @@ -93,7 +93,7 @@ export interface UpdatedArgs { forced: boolean; } -export const defaultOptions: OSOptions = { +export const defaultOptions: Options = { // resize: 'none', // none || both || horizontal || vertical || n || b || h || v paddingAbsolute: false, // true || false updating: { @@ -145,7 +145,7 @@ export const getOptionsDiff = ( if (isArray(currOptionValue) || isArray(newOptionValue)) { try { - if (stringify(currOptionValue) === stringify(newOptionValue)) { + if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) { isDiff = false; } } catch {} diff --git a/packages/overlayscrollbars/src/overlayscrollbars.ts b/packages/overlayscrollbars/src/overlayscrollbars.ts index 10d3bd6..b0e30f8 100644 --- a/packages/overlayscrollbars/src/overlayscrollbars.ts +++ b/packages/overlayscrollbars/src/overlayscrollbars.ts @@ -1,4 +1,3 @@ -import { OSTarget, OSInitializationObject, PartialOptions, OverflowStyle } from 'typings'; import { assignDeep, isEmptyObject, @@ -8,10 +7,11 @@ import { isHTMLElement, XY, TRBL, + createEventListenerHub, } from 'support'; import { createStructureSetup, createScrollbarsSetup } from 'setups'; -import { getOptionsDiff, OSOptions, ReadonlyOSOptions } from 'options'; -import { DefaultInitializationStrategy, getEnvironment, InitializationStrategy } from 'environment'; +import { getOptionsDiff, Options, ReadonlyOSOptions } from 'options'; +import { getEnvironment } from 'environment'; import { getPlugins, addPlugin, @@ -20,41 +20,56 @@ import { OptionsValidationPluginInstance, } from 'plugins'; import { addInstance, getInstance, removeInstance } from 'instances'; -import { - createOSEventListenerHub, - InitialOSEventListeners, - AddOSEventListener, - RemoveOSEventListener, -} from 'eventListeners'; +import type { PartialOptions, OverflowStyle } from 'typings'; +import type { + InitializationTarget, + InitializationTargetObject, + InitializationStrategy, +} from 'initialization'; +import type { + InitialEventListeners as GeneralInitialEventListeners, + EventListener as GeneralEventListener, +} from 'support/eventListeners'; + +/* +onScrollStart : null, +onScroll : null, +onScrollStop : null, +onOverflowChanged : null, +onOverflowAmountChanged : null, // fusion with onOverflowChanged +onDirectionChanged : null, // gone +onContentSizeChanged : null, // gone +onHostSizeChanged : null, // gone +*/ export interface OverlayScrollbarsStatic { ( - target: OSTarget | OSInitializationObject, - options?: PartialOptions, - eventListeners?: InitialOSEventListeners + target: InitializationTarget | InitializationTargetObject, + options?: PartialOptions, + eventListeners?: GeneralInitialEventListeners ): OverlayScrollbars; plugin(osPlugin: OSPlugin | OSPlugin[]): void; - env(): OverlayScrollbarsEnv; + env(): Environment; } -export interface OverlayScrollbarsEnv { +export interface Environment { scrollbarSize: XY; scrollbarIsOverlaid: XY; scrollbarStyling: boolean; rtlScrollBehavior: { n: boolean; i: boolean }; flexboxGlue: boolean; cssCustomProperties: boolean; - defaultInitializationStrategy: DefaultInitializationStrategy; - defaultDefaultOptions: OSOptions; + defaultInitializationStrategy: InitializationStrategy; + defaultDefaultOptions: Options; getInitializationStrategy(): InitializationStrategy; setInitializationStrategy(newInitializationStrategy: Partial): void; - getDefaultOptions(): OSOptions; - setDefaultOptions(newDefaultOptions: PartialOptions): void; + getDefaultOptions(): Options; + setDefaultOptions(newDefaultOptions: PartialOptions): void; } -export interface OverlayScrollbarsState { +export interface State { padding: TRBL; paddingAbsolute: boolean; overflowAmount: XY; @@ -62,7 +77,7 @@ export interface OverlayScrollbarsState { hasOverflow: XY; } -export interface OverlayScrollbarsElements { +export interface Elements { target: HTMLElement; host: HTMLElement; padding: HTMLElement; @@ -70,18 +85,51 @@ export interface OverlayScrollbarsElements { content: HTMLElement; } +export interface OnUpdatedEventListenerArgs { + updateHints: { + sizeChanged: boolean; + directionChanged: boolean; + heightIntrinsicChanged: boolean; + overflowAmountChanged: boolean; + overflowStyleChanged: boolean; + hostMutation: boolean; + contentMutation: boolean; + }; + changedOptions: PartialOptions; + force: boolean; +} + +export interface EventListenerMap { + initialized: undefined; + initializationWithdrawn: undefined; + updated: OnUpdatedEventListenerArgs; + destroyed: undefined; +} + +export type InitialEventListeners = GeneralInitialEventListeners; + +export type EventListener = GeneralEventListener< + EventListenerMap, + Name +>; + export interface OverlayScrollbars { - options(): OSOptions; - options(newOptions?: PartialOptions): OSOptions; + options(): Options; + options(newOptions?: PartialOptions): Options; update(force?: boolean): void; + destroy(): void; - state(): OverlayScrollbarsState; - elements(): OverlayScrollbarsElements; + state(): State; - on: AddOSEventListener; - off: RemoveOSEventListener; + elements(): Elements; + + on(name: Name, listener: EventListener): () => void; + on(name: Name, listener: EventListener[]): () => void; + + off(name: Name, listener?: EventListener): void; + off(name: Name, listener?: EventListener[]): void; } /** @@ -109,7 +157,7 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = ( const optionsValidationPlugin = plugins[ optionsValidationPluginName ] as OptionsValidationPluginInstance; - const validateOptions = (newOptions?: PartialOptions) => { + const validateOptions = (newOptions?: PartialOptions) => { const opts = newOptions || {}; const validate = optionsValidationPlugin && optionsValidationPlugin._; return validate ? validate(opts, true) : opts; @@ -119,7 +167,7 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = ( _getDefaultOptions(), validateOptions(options) ); - const [addEvent, removeEvent, triggerEvent] = createOSEventListenerHub(eventListeners); + const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners); if ( _nativeScrollbarIsOverlaid.x && @@ -139,7 +187,7 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = ( structureState._elements ); - const update = (changedOptions: PartialOptions, force?: boolean) => { + const update = (changedOptions: PartialOptions, force?: boolean) => { updateStructure(changedOptions, force); updateScrollbars(changedOptions, force); }; @@ -173,7 +221,7 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = ( }); const instance: OverlayScrollbars = { - options(newOptions?: PartialOptions) { + options(newOptions?: PartialOptions) { if (newOptions) { const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions)); diff --git a/packages/overlayscrollbars/src/plugins/optionsValidation/optionsValidation.ts b/packages/overlayscrollbars/src/plugins/optionsValidation/optionsValidation.ts index 46ae93b..1b4ce10 100644 --- a/packages/overlayscrollbars/src/plugins/optionsValidation/optionsValidation.ts +++ b/packages/overlayscrollbars/src/plugins/optionsValidation/optionsValidation.ts @@ -1,5 +1,5 @@ import { OSPlugin } from 'plugins'; -import { OSOptions, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } from 'options'; +import { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } from 'options'; import { validateOptions, OptionsTemplate, @@ -18,7 +18,7 @@ const scrollbarsVisibilityAllowedValues: OptionsTemplateValue = 'never scroll leavemove'; -const optionsTemplate: OptionsTemplate = { +const optionsTemplate: OptionsTemplate = { // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b || paddingAbsolute: booleanAllowedValues, // true || false updating: { @@ -53,7 +53,7 @@ const optionsTemplate: OptionsTemplate = { }; export type OptionsValidationPluginInstance = { - _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions; + _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions; }; export const optionsValidationPluginName = '__osOptionsValidationPlugin'; @@ -61,7 +61,7 @@ export const optionsValidationPluginName = '__osOptionsValidationPlugin'; export const optionsValidationPlugin: OSPlugin = [ optionsValidationPluginName, { - _: (options: PartialOptions, doWriteErrors?: boolean) => { + _: (options: PartialOptions, doWriteErrors?: boolean) => { const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors); return { ...foreign, ...validated }; }, diff --git a/packages/overlayscrollbars/src/setups/scrollbarsSetup/index.ts b/packages/overlayscrollbars/src/setups/scrollbarsSetup/index.ts index bf9d2d6..161529d 100644 --- a/packages/overlayscrollbars/src/setups/scrollbarsSetup/index.ts +++ b/packages/overlayscrollbars/src/setups/scrollbarsSetup/index.ts @@ -1 +1,2 @@ export * from 'setups/scrollbarsSetup/scrollbarsSetup'; +export * from 'setups/scrollbarsSetup/scrollbarsSetup.initialization'; diff --git a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts index afe07b1..e2e7f07 100644 --- a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts +++ b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts @@ -1,4 +1,4 @@ -import { appendChildren, createDiv, removeElements, isFunction } from 'support'; +import { appendChildren, createDiv, removeElements } from 'support'; import { classNameScrollbar, classNameScrollbarHorizontal, @@ -6,9 +6,15 @@ import { classNameScrollbarTrack, classNameScrollbarHandle, } from 'classnames'; -import { getEnvironment, ScrollbarsInitializationStrategy } from 'environment'; -import { OSTarget, ScrollbarsInitialization } from 'typings'; +import { getEnvironment } from 'environment'; +import { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization'; +import type { InitializationTarget } from 'initialization'; import type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements'; +import type { + ScrollbarsInitialization, + ScrollbarsInitializationStrategy, + ScrollbarsDynamicInitializationElement, +} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization'; export interface ScrollbarStructure { _scrollbar: HTMLElement; @@ -39,7 +45,7 @@ const generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => }; export const createScrollbarsSetupElements = ( - target: OSTarget, + target: InitializationTarget, structureSetupElements: StructureSetupElementsObj ): ScrollbarsSetupElements => { const { _getInitializationStrategy } = getEnvironment(); @@ -48,15 +54,13 @@ export const createScrollbarsSetupElements = ( const { _target, _host, _viewport, _targetIsElm } = structureSetupElements; const initializationScrollbarSlot = !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot; - const initializationScrollbarSlotResult = isFunction(initializationScrollbarSlot) - ? initializationScrollbarSlot(_target, _host, _viewport) - : initializationScrollbarSlot; const evaluatedScrollbarSlot = - initializationScrollbarSlotResult || - (isFunction(environmentScrollbarSlot) - ? environmentScrollbarSlot(_target, _host, _viewport) - : environmentScrollbarSlot) || - _host; + generalDynamicInitializationElement( + [_target, _host, _viewport], + () => _host, + environmentScrollbarSlot, + initializationScrollbarSlot + ); const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal); const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical); diff --git a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.initialization.ts b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.initialization.ts new file mode 100644 index 0000000..0ae0485 --- /dev/null +++ b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.initialization.ts @@ -0,0 +1,27 @@ +import type { + InitializationTargetElement, + InitializtationElementStrategy, + DynamicInitializationElement, +} from 'initialization'; + +export type ScrollbarsDynamicInitializationElement = DynamicInitializationElement< + [target: InitializationTargetElement, host: HTMLElement, viewport: HTMLElement] +>; + +/** + * Object for special initialization. + * + * If element is provided, the provided element takes all its responsibilities. + * DOM hierarchy isn't checked in this case, its assumed that hieararchy is correct in such a case. + * + * Null or Undefined means that the environment initialization strategy is used. + */ +export interface ScrollbarsInitialization { + scrollbarsSlot?: ScrollbarsDynamicInitializationElement; +} + +export type ScrollbarsInitializationStrategy = { + [K in keyof ScrollbarsInitialization as `_${K}`]: InitializtationElementStrategy< + ScrollbarsInitialization[K] + >; +}; diff --git a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.ts b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.ts index 7382b41..4f2e492 100644 --- a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.ts +++ b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.ts @@ -6,7 +6,7 @@ import { import type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements'; import type { ReadonlyOSOptions } from 'options'; import type { Setup } from 'setups'; -import type { OSTarget } from 'typings'; +import type { InitializationTarget } from 'initialization'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface ScrollbarsSetupState {} @@ -16,7 +16,7 @@ export interface ScrollbarsSetupStaticState { } export const createScrollbarsSetup = ( - target: OSTarget, + target: InitializationTarget, options: ReadonlyOSOptions, structureSetupElements: StructureSetupElementsObj ): Setup => { diff --git a/packages/overlayscrollbars/src/setups/setups.ts b/packages/overlayscrollbars/src/setups/setups.ts index 633c0ce..4f93545 100644 --- a/packages/overlayscrollbars/src/setups/setups.ts +++ b/packages/overlayscrollbars/src/setups/setups.ts @@ -1,13 +1,10 @@ import { assignDeep, hasOwnProperty } from 'support'; -import type { OSOptions, ReadonlyOSOptions } from 'options'; +import type { Options, ReadonlyOSOptions } from 'options'; import type { PartialOptions } from 'typings'; export type SetupElements> = [elements: T, destroy: () => void]; -export type SetupUpdate = ( - changedOptions: PartialOptions, - force?: boolean -) => T; +export type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T; export type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean]; @@ -36,7 +33,7 @@ const getPropByPath = (obj: any, path: string): T => export const createOptionCheck = ( options: ReadonlyOSOptions, - changedOptions: PartialOptions, + changedOptions: PartialOptions, force?: boolean ): SetupUpdateCheckOption => (path: string) => diff --git a/packages/overlayscrollbars/src/setups/structureSetup/index.ts b/packages/overlayscrollbars/src/setups/structureSetup/index.ts index b424c3a..765ca4f 100644 --- a/packages/overlayscrollbars/src/setups/structureSetup/index.ts +++ b/packages/overlayscrollbars/src/setups/structureSetup/index.ts @@ -1 +1,2 @@ export * from 'setups/structureSetup/structureSetup'; +export * from 'setups/structureSetup/structureSetup.initialization'; diff --git a/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.elements.ts b/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.elements.ts index 7bb2ddb..9bd0815 100644 --- a/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.elements.ts +++ b/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.elements.ts @@ -1,8 +1,8 @@ import { isHTMLElement, appendChildren, - is, createDiv, + is, contents, insertAfter, addClass, @@ -15,8 +15,6 @@ import { runEach, insertBefore, attr, - isBoolean, - isFunction, keys, removeAttr, attrClass, @@ -33,17 +31,22 @@ import { classNameContent, classNameViewportScrollbarStyling, } from 'classnames'; +import { getEnvironment } from 'environment'; import { - getEnvironment, - StructureInitializationStrategyStaticElement, - StructureInitializationStrategyDynamicElement, -} from 'environment'; -import { OSTarget, OSTargetElement, StructureInitialization } from 'typings'; + staticInitializationElement as generalStaticInitializationElement, + dynamicInitializationElement as generalDynamicInitializationElement, +} from 'initialization'; +import type { InitializationTarget, InitializationTargetElement } from 'initialization'; +import type { + StructureDynamicInitializationElement, + StructureInitialization, + StructureStaticInitializationElement, +} from 'setups/structureSetup/structureSetup.initialization'; export type StructureSetupElements = [targetObj: StructureSetupElementsObj, destroy: () => void]; export interface StructureSetupElementsObj { - _target: OSTargetElement; + _target: InitializationTargetElement; _host: HTMLElement; _viewport: HTMLElement; _padding: HTMLElement | false; @@ -64,6 +67,8 @@ export interface StructureSetupElementsObj { let contentArrangeCounter = 0; +const createNewDiv = createDiv.bind(0, ''); + const unwrap = (elm: HTMLElement | false | null | undefined) => { appendChildren(parent(elm), contents(elm)); removeElements(elm); @@ -87,38 +92,14 @@ const createUniqueViewportArrangeElement = (): HTMLStyleElement | false => { return result; }; -const staticCreationFromStrategy = ( - target: OSTargetElement, - initializationValue?: HTMLElement | undefined, - strategy?: StructureInitializationStrategyStaticElement -): HTMLElement => { - const result = - initializationValue || - (isFunction(strategy) ? strategy(target) : (strategy as null | undefined)); - return result || createDiv(); -}; - -const dynamicCreationFromStrategy = ( - target: OSTargetElement, - initializationValue: HTMLElement | boolean | undefined, - strategy: StructureInitializationStrategyDynamicElement -): HTMLElement | false => { - const takeInitializationValue = isBoolean(initializationValue) || initializationValue; - const result = takeInitializationValue - ? (initializationValue as boolean | HTMLElement) - : isFunction(strategy) - ? strategy(target) - : strategy; - - return result === true ? createDiv() : result; -}; - const addDataAttrHost = (elm: HTMLElement, value?: string | false | null | undefined) => { attr(elm, dataAttributeHost, value || ''); return removeAttr.bind(0, elm, dataAttributeHost); }; -export const createStructureSetupElements = (target: OSTarget): StructureSetupElements => { +export const createStructureSetupElements = ( + target: InitializationTarget +): StructureSetupElements => { const { _getInitializationStrategy, _nativeScrollbarStyling } = getEnvironment(); const { _host: hostInitializationStrategy, @@ -129,7 +110,7 @@ export const createStructureSetupElements = (target: OSTarget): StructureSetupEl const targetIsElm = isHTMLElement(target); const targetStructureInitialization = target as StructureInitialization; const targetElement = targetIsElm - ? (target as OSTargetElement) + ? (target as InitializationTargetElement) : targetStructureInitialization.target; const isTextarea = is(targetElement, 'textarea'); const isBody = !isTextarea && is(targetElement, 'body'); @@ -137,36 +118,44 @@ export const createStructureSetupElements = (target: OSTarget): StructureSetupEl const bodyElm = ownerDocument.body as HTMLBodyElement; const wnd = ownerDocument.defaultView as Window; const singleElmSupport = !!ResizeObserverConstructor && _nativeScrollbarStyling; - const potentialViewportElement = staticCreationFromStrategy( - targetElement, - targetStructureInitialization.viewport, - viewportInitializationStrategy + const staticInitializationElement = + generalStaticInitializationElement.bind(0, [ + targetElement, + ]); + const dynamicInitializationElement = + generalDynamicInitializationElement.bind(0, [ + targetElement, + ]); + const potentialViewportElement = staticInitializationElement( + createNewDiv, + viewportInitializationStrategy, + targetStructureInitialization.viewport ); const potentiallySingleElm = potentialViewportElement === targetElement; const viewportIsTarget = singleElmSupport && potentiallySingleElm; const viewportElement = potentiallySingleElm && !viewportIsTarget - ? staticCreationFromStrategy(targetElement) + ? staticInitializationElement(createNewDiv) : potentialViewportElement; const evaluatedTargetObj: StructureSetupElementsObj = { _target: targetElement, _host: isTextarea - ? staticCreationFromStrategy( - targetElement, - targetStructureInitialization.host, - hostInitializationStrategy + ? staticInitializationElement( + createNewDiv, + hostInitializationStrategy, + targetStructureInitialization.host ) : (targetElement as HTMLElement), _viewport: viewportElement, - _padding: dynamicCreationFromStrategy( - targetElement, - targetStructureInitialization.padding, - paddingInitializationStrategy + _padding: dynamicInitializationElement( + createNewDiv, + paddingInitializationStrategy, + targetStructureInitialization.padding ), - _content: dynamicCreationFromStrategy( - targetElement, - targetStructureInitialization.content, - contentInitializationStrategy + _content: dynamicInitializationElement( + createNewDiv, + contentInitializationStrategy, + targetStructureInitialization.content ), _viewportArrange: !viewportIsTarget && createUniqueViewportArrangeElement(), _windowElm: wnd, diff --git a/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.initialization.ts b/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.initialization.ts new file mode 100644 index 0000000..17235df --- /dev/null +++ b/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.initialization.ts @@ -0,0 +1,38 @@ +import type { + InitializationTargetElement, + StaticInitializationElement, + DynamicInitializationElement, + InitializtationElementStrategy, +} from 'initialization'; + +export type StructureStaticInitializationElement = StaticInitializationElement< + [target: InitializationTargetElement] +>; + +export type StructureDynamicInitializationElement = DynamicInitializationElement< + [target: InitializationTargetElement] +>; + +/** + * Object for special initialization. + * + * Target is always required, if element is not provided or undefined it will be generated. + * + * If element is provided, the provided element takes all its responsibilities. + * DOM hierarchy isn't checked in this case, its assumed that hieararchy is correct in such a case. + * + * Null or Undefined means that the environment initialization strategy is used. + */ +export interface StructureInitialization { + target: InitializationTargetElement; + host?: StructureStaticInitializationElement; // only relevant for textarea + viewport?: StructureStaticInitializationElement; + padding?: StructureDynamicInitializationElement; + content?: StructureDynamicInitializationElement; +} + +export type StructureInitializationStrategy = { + [K in keyof Omit as `_${K}`]: InitializtationElementStrategy< + StructureInitialization[K] + >; +}; diff --git a/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.ts b/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.ts index f04eade..33dfeaf 100644 --- a/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.ts +++ b/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.ts @@ -6,9 +6,10 @@ import { createStructureSetupObservers } from 'setups/structureSetup/structureSe import type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update'; import type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements'; import type { TRBL, XY } from 'support'; -import type { OSOptions, ReadonlyOSOptions } from 'options'; +import type { Options, ReadonlyOSOptions } from 'options'; import type { Setup } from 'setups'; -import type { OSTarget, PartialOptions, StyleObject, OverflowStyle } from 'typings'; +import type { InitializationTarget } from 'initialization'; +import type { PartialOptions, StyleObject, OverflowStyle } from 'typings'; export interface StructureSetupState { _padding: TRBL; @@ -28,7 +29,7 @@ export interface StructureSetupStaticState { export type OnUpdatedListener = ( updateHints: StructureSetupUpdateHints, - changedOptions: PartialOptions, + changedOptions: PartialOptions, force: boolean ) => void; @@ -66,7 +67,7 @@ const initialStructureSetupUpdateState: StructureSetupState = { }; export const createStructureSetup = ( - target: OSTarget, + target: InitializationTarget, options: ReadonlyOSOptions ): Setup => { const checkOptionsFallback = createOptionCheck(options, {}); @@ -75,7 +76,7 @@ export const createStructureSetup = ( const [getState] = state; const runOnUpdatedListeners = ( updateHints: StructureSetupUpdateHints, - changedOptions?: PartialOptions, + changedOptions?: PartialOptions, force?: boolean ) => { runEach(onUpdatedListeners, [updateHints, changedOptions || {}, !!force]); diff --git a/packages/overlayscrollbars/src/support/dom/manipulation.ts b/packages/overlayscrollbars/src/support/dom/manipulation.ts index 78cedd5..63e2a75 100644 --- a/packages/overlayscrollbars/src/support/dom/manipulation.ts +++ b/packages/overlayscrollbars/src/support/dom/manipulation.ts @@ -12,11 +12,11 @@ type NodeCollection = ArrayLike | Node | false | null | undefined; */ const before = ( parentElm: Node | false | null | undefined, - preferredAnchor: Node | null | undefined, + preferredAnchor: Node | false | null | undefined, insertedElms: NodeCollection ): void => { if (insertedElms) { - let anchor: Node | null | undefined = preferredAnchor; + let anchor: Node | false | null | undefined = preferredAnchor; let fragment: DocumentFragment | Node | null | undefined; // parent must be defined @@ -54,7 +54,10 @@ const before = ( * @param node The Node to which the children shall be appended. * @param children The Nodes which shall be appended. */ -export const appendChildren = (node: Node | null | undefined, children: NodeCollection): void => { +export const appendChildren = ( + node: Node | false | null | undefined, + children: NodeCollection +): void => { before(node, null, children); }; @@ -63,7 +66,10 @@ export const appendChildren = (node: Node | null | undefined, children: NodeColl * @param node The Node to which the children shall be prepended. * @param children The Nodes which shall be prepended. */ -export const prependChildren = (node: Node | null | undefined, children: NodeCollection): void => { +export const prependChildren = ( + node: Node | false | null | undefined, + children: NodeCollection +): void => { before(node, node && node.firstChild, children); }; @@ -73,7 +79,7 @@ export const prependChildren = (node: Node | null | undefined, children: NodeCol * @param insertedNodes The Nodes which shall be inserted. */ export const insertBefore = ( - node: Node | null | undefined, + node: Node | false | null | undefined, insertedNodes: NodeCollection ): void => { before(parent(node), node, insertedNodes); @@ -84,7 +90,10 @@ export const insertBefore = ( * @param node The Node after which the given Nodes shall be inserted. * @param insertedNodes The Nodes which shall be inserted. */ -export const insertAfter = (node: Node | null | undefined, insertedNodes: NodeCollection): void => { +export const insertAfter = ( + node: Node | false | null | undefined, + insertedNodes: NodeCollection +): void => { before(parent(node), node && node.nextSibling, insertedNodes); }; diff --git a/packages/overlayscrollbars/src/support/eventListeners.ts b/packages/overlayscrollbars/src/support/eventListeners.ts index 0e1fb84..f55ffad 100644 --- a/packages/overlayscrollbars/src/support/eventListeners.ts +++ b/packages/overlayscrollbars/src/support/eventListeners.ts @@ -3,96 +3,102 @@ import { keys } from 'support/utils/object'; import { each, from } from 'support/utils/array'; export type EventListener< - NameArgsMap extends Record, - Name extends Extract = Extract -> = (...args: NameArgsMap[Name] extends undefined ? [] : [args: NameArgsMap[Name]]) => void; + EventMap extends Record, + Name extends keyof EventMap = keyof EventMap +> = (...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]]) => void; -export type EventListenerGroup< - NameArgsMap extends Record, - Name extends Extract = Extract -> = EventListener | EventListener[]; - -export type AddEventListener> = < - Name extends Extract ->( - name: Name, - listener: EventListenerGroup -) => () => void; - -export type RemoveEventListener> = < - Name extends Extract ->( - name?: Name, - listener?: EventListenerGroup -) => void; - -export type TriggerEventListener> = < - Name extends Extract ->( - name: Name, - ...args: NameArgsMap[Name] extends undefined ? [] : [args: NameArgsMap[Name]] -) => void; - -export type InitialEventListeners> = { - [K in Extract]?: EventListenerGroup; +export type InitialEventListeners> = { + [K in keyof EventMap]?: EventListener | EventListener[]; }; -const manageListener = >( - callback: (listener?: EventListener) => void, - listener?: EventListener | EventListener[] +const manageListener = >( + callback: (listener?: EventListener) => void, + listener?: EventListener | EventListener[] ) => { each(isArray(listener) ? listener : [listener], callback); }; -export const createEventListenerHub = >( - initialEventListeners?: InitialEventListeners -): [ - AddEventListener, - RemoveEventListener, - TriggerEventListener -] => { - const events = new Map, Set>>(); - const removeEvent: RemoveEventListener = (name?, listener?) => { +export const createEventListenerHub = >( + initialEventListeners?: InitialEventListeners +) => { + type EventListener = ( + ...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]] + ) => void; + + const events = new Map>(); + + function removeEvent( + name?: Name, + listener?: EventListener + ): void; + function removeEvent( + name?: Name, + listener?: EventListener[] + ): void; + function removeEvent( + name?: Name, + listener?: EventListener | EventListener[] + ): void { if (name) { const eventSet = events.get(name); manageListener((currListener) => { if (eventSet) { eventSet[currListener ? 'delete' : 'clear'](currListener!); } - }, listener as EventListenerGroup | undefined); + }, listener as any); } else { events.forEach((eventSet) => { eventSet.clear(); }); events.clear(); } - }; - const addEvent: AddEventListener = (name, listener) => { + } + + function addEvent( + name: Name, + listener: EventListener + ): () => void; + function addEvent( + name: Name, + listener: EventListener[] + ): () => void; + function addEvent( + name: Name, + listener: EventListener | EventListener[] + ): () => void { const eventSet = events.get(name) || new Set(); events.set(name, eventSet); manageListener((currListener) => { currListener && eventSet.add(currListener); - }, listener as EventListenerGroup); + }, listener as any); - return removeEvent.bind(0, name as any, listener as EventListenerGroup); - }; - const triggerEvent: TriggerEventListener = (name, args?) => { + return removeEvent.bind(0, name as any, listener as any); + } + + function triggerEvent( + name: Name, + ...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]] + ): void { const eventSet = events.get(name); each(from(eventSet), (event) => { if (args) { - (event as (args: NameArgsMap[Extract]) => void)(args as any); + (event as (args: EventMap[keyof EventMap]) => void)(args as any); } else { (event as () => void)(); } }); - }; + } - const initialListenerKeys = keys(initialEventListeners) as Extract[]; + const initialListenerKeys = keys(initialEventListeners) as Extract[]; each(initialListenerKeys, (key) => { addEvent(key, initialEventListeners![key] as any); }); - return [addEvent, removeEvent, triggerEvent]; + return [addEvent, removeEvent, triggerEvent] as [ + typeof addEvent, + typeof removeEvent, + typeof triggerEvent + ]; }; diff --git a/packages/overlayscrollbars/src/typings.ts b/packages/overlayscrollbars/src/typings.ts index febcfc2..e75cf24 100644 --- a/packages/overlayscrollbars/src/typings.ts +++ b/packages/overlayscrollbars/src/typings.ts @@ -14,59 +14,6 @@ export type StyleObject = { | number; }; -export type InternalVersionOf = { - [K in keyof T as `_${Uncapitalize}`]: T[K]; -}; - -export type OSTargetElement = HTMLElement | HTMLTextAreaElement; - -/** - * Static elements MUST be present. - */ -type StructureInitializationStaticElement = HTMLElement; - -/** - * Dynamic element CAN be present. - * If its a element the element will be handled as the repsective element. - * True means that the respective dynamic element is forced to be generated. - * False means that the respective dynamic element is forced NOT to be generated. - */ -type StructureInitializationDynamicElement = HTMLElement | boolean; - -/** - * Object for special initialization. - * - * Target is always required, if element is not provided or undefined it will be generated. - * - * If element is provided, the provided element takes all its responsibilities. - * DOM hierarchy isn't checked in this case, its assumed that hieararchy is correct in such a case. - * - * Undefined means that the environment initialization strategy for the respective element is used. - */ -export interface StructureInitialization { - target: OSTargetElement; - host?: StructureInitializationStaticElement; // only relevant for textarea - viewport?: StructureInitializationStaticElement; - padding?: StructureInitializationDynamicElement; - content?: StructureInitializationDynamicElement; -} - -/** - * Object for special initialization. - * - * scrollbarsSlot is the element to which the scrollbars are applied to. If null or undefined the plugin decides by itself whats the scrollbars slot. - */ -export interface ScrollbarsInitialization { - scrollbarsSlot?: - | null - | HTMLElement - | ((target: OSTargetElement, host: HTMLElement, viewport: HTMLElement) => null | HTMLElement); -} - -export interface OSInitializationObject extends StructureInitialization, ScrollbarsInitialization {} - -export type OSTarget = OSTargetElement | OSInitializationObject; - export type OverflowStyle = 'scroll' | 'hidden' | 'visible'; /* diff --git a/packages/overlayscrollbars/tests/jest/setups/structureSetup/structureSetup.elements.test.ts b/packages/overlayscrollbars/tests/jest/setups/structureSetup/structureSetup.elements.test.ts index a114c0f..6196261 100644 --- a/packages/overlayscrollbars/tests/jest/setups/structureSetup/structureSetup.elements.test.ts +++ b/packages/overlayscrollbars/tests/jest/setups/structureSetup/structureSetup.elements.test.ts @@ -1,13 +1,14 @@ -import { - Environment, - StructureInitializationStrategyStaticElement, - StructureInitializationStrategyDynamicElement, -} from 'environment'; -import { OSTarget, StructureInitialization } from 'typings'; +import { InternalEnvironment } from 'environment'; import { createStructureSetupElements, StructureSetupElementsObj, } from 'setups/structureSetup/structureSetup.elements'; +import type { InitializationTarget, InitializtationElementStrategy } from 'initialization'; +import type { + StructureInitialization, + StructureStaticInitializationElement, + StructureDynamicInitializationElement, +} from 'setups/structureSetup/structureSetup.initialization'; import { isHTMLElement } from 'support'; const mockGetEnvironment = jest.fn(); @@ -16,7 +17,7 @@ jest.mock('environment', () => ({ })); interface StructureSetupElementsProxy { - input: OSTarget; + input: InitializationTarget; elements: StructureSetupElementsObj; destroy: () => void; } @@ -95,7 +96,7 @@ const assertCorrectDOMStructure = (textarea?: boolean) => { }; const createStructureSetupProxy = ( - target: OSTarget | StructureInitialization + target: InitializationTarget | StructureInitialization ): StructureSetupElementsProxy => { const [elements, destroy] = createStructureSetupElements(target); return { @@ -108,7 +109,7 @@ const createStructureSetupProxy = ( const assertCorrectSetupElements = ( textarea: boolean, setupElementsProxy: StructureSetupElementsProxy, - environment: Environment + environment: InternalEnvironment ): [StructureSetupElementsObj, () => void] => { const { input, elements, destroy } = setupElementsProxy; const { _target, _host, _padding, _viewport, _content } = elements; @@ -165,11 +166,11 @@ const assertCorrectSetupElements = ( const styleElm = document.querySelector('style'); const checkStrategyDependendElements = ( elm: Element | null, - input: HTMLElement | boolean | undefined, + input: StructureStaticInitializationElement | StructureDynamicInitializationElement, isStaticStrategy: boolean, strategy: - | StructureInitializationStrategyStaticElement - | StructureInitializationStrategyDynamicElement + | InitializtationElementStrategy + | InitializtationElementStrategy ) => { if (input) { expect(elm).toBeTruthy(); @@ -179,7 +180,8 @@ const assertCorrectSetupElements = ( } if (input === undefined) { if (isStaticStrategy) { - strategy = strategy as StructureInitializationStrategyStaticElement; + strategy = + strategy as InitializtationElementStrategy; if (typeof strategy === 'function') { const result = strategy(target); if (result) { @@ -191,14 +193,13 @@ const assertCorrectSetupElements = ( expect(elm).toBeTruthy(); } } else { - strategy = strategy as StructureInitializationStrategyDynamicElement; + strategy = + strategy as InitializtationElementStrategy; expect(strategy).not.toBe(null); expect(strategy).not.toBe(undefined); if (typeof strategy === 'function') { const result = strategy(target); const resultIsBoolean = typeof result === 'boolean'; - expect(result).not.toBe(null); - expect(result).not.toBe(undefined); if (resultIsBoolean) { if (result) { expect(elm).toBeTruthy(); @@ -265,7 +266,7 @@ const assertCorrectDestroy = (snapshot: string, destroy: () => void) => { expect(snapshot).toBe(getSnapshot()); }; -const env: Environment = jest.requireActual('environment').getEnvironment(); +const env: InternalEnvironment = jest.requireActual('environment').getEnvironment(); const envDefault = { name: 'default', env, @@ -317,12 +318,8 @@ const envInitStrategyAssigned = { _getInitializationStrategy: () => ({ _host: () => document.querySelector('#host1') as HTMLElement, _viewport: (target: HTMLElement) => target.querySelector('#viewport') as HTMLElement, - _content: (target: HTMLElement) => - target.querySelector('#content') || - env._defaultInitializationStrategy._content, - _padding: (target: HTMLElement) => - target.querySelector('#padding') || - env._defaultInitializationStrategy._padding, + _content: (target: HTMLElement) => target.querySelector('#content'), + _padding: (target: HTMLElement) => target.querySelector('#padding'), _scrollbarsSlot: null, }), }, diff --git a/packages/overlayscrollbars/tests/playwright/environment/index.test.ts b/packages/overlayscrollbars/tests/playwright/environment/index.test.ts index bbd7e6c..8ccfad3 100644 --- a/packages/overlayscrollbars/tests/playwright/environment/index.test.ts +++ b/packages/overlayscrollbars/tests/playwright/environment/index.test.ts @@ -1,14 +1,14 @@ // @ts-ignore import { playwrightRollup } from '@/playwright/rollup'; import { test } from '@playwright/test'; -import { Environment } from 'environment'; +import { InternalEnvironment } from 'environment'; playwrightRollup(); test.describe('Environment', () => { test('page should be titled "Environment"', async ({ page }) => { // @ts-ignore - const a: Environment = await page.evaluate(() => window.environment.envInstance); + const a: InternalEnvironment = await page.evaluate(() => window.environment.envInstance); console.log(a); await expect(page.title()).resolves.toMatch('environment'); }); diff --git a/packages/overlayscrollbars/tests/playwright/setups/structureSetup/update/index.browser.ts b/packages/overlayscrollbars/tests/playwright/setups/structureSetup/update/index.browser.ts index 9fac564..5faff24 100644 --- a/packages/overlayscrollbars/tests/playwright/setups/structureSetup/update/index.browser.ts +++ b/packages/overlayscrollbars/tests/playwright/setups/structureSetup/update/index.browser.ts @@ -22,7 +22,7 @@ import { resize } from '@/testing-browser/Resize'; import { setTestResult, waitForOrFailTest } from '@/testing-browser/TestResult'; import { generateClassChangeSelectCallback, iterateSelect } from '@/testing-browser/Select'; import { timeout } from '@/testing-browser/timeout'; -import { OSOptions } from 'options'; +import { Options } from 'options'; import { PartialOptions } from 'typings'; interface Metrics { @@ -572,7 +572,7 @@ const iterateMinMax = async (afterEach?: () => any) => { await iterate(containerMinMaxSelect, afterEach); }; -const overflowTest = async (osOptions?: PartialOptions) => { +const overflowTest = async (osOptions?: PartialOptions) => { const additiveOverflow = () => { if (isFractionalPixelRatio()) { return 1; diff --git a/packages/overlayscrollbars/types/overlayscrollbars.d.ts b/packages/overlayscrollbars/types/overlayscrollbars.d.ts index b7083e4..17fb050 100644 --- a/packages/overlayscrollbars/types/overlayscrollbars.d.ts +++ b/packages/overlayscrollbars/types/overlayscrollbars.d.ts @@ -1,46 +1,6 @@ type PartialOptions = { [P in keyof T]?: T[P] extends Record ? PartialOptions : T[P]; }; -type OSTargetElement = HTMLElement | HTMLTextAreaElement; -/** - * Static elements MUST be present. - */ -type StructureInitializationStaticElement = HTMLElement; -/** - * Dynamic element CAN be present. - * If its a element the element will be handled as the repsective element. - * True means that the respective dynamic element is forced to be generated. - * False means that the respective dynamic element is forced NOT to be generated. - */ -type StructureInitializationDynamicElement = HTMLElement | boolean; -/** - * Object for special initialization. - * - * Target is always required, if element is not provided or undefined it will be generated. - * - * If element is provided, the provided element takes all its responsibilities. - * DOM hierarchy isn't checked in this case, its assumed that hieararchy is correct in such a case. - * - * Undefined means that the environment initialization strategy for the respective element is used. - */ -interface StructureInitialization { - target: OSTargetElement; - host?: StructureInitializationStaticElement; // only relevant for textarea - viewport?: StructureInitializationStaticElement; - padding?: StructureInitializationDynamicElement; - content?: StructureInitializationDynamicElement; -} -/** - * Object for special initialization. - * - * scrollbarsSlot is the element to which the scrollbars are applied to. If null or undefined the plugin decides by itself whats the scrollbars slot. - */ -interface ScrollbarsInitialization { - scrollbarsSlot?: null | HTMLElement | ((target: OSTargetElement, host: HTMLElement, viewport: HTMLElement) => null | HTMLElement); -} -interface OSInitializationObject extends StructureInitialization, ScrollbarsInitialization { -} -type OSTarget = OSTargetElement | OSInitializationObject; type OverflowStyle = "scroll" | "hidden" | "visible"; interface TRBL { t: number; @@ -52,20 +12,17 @@ interface XY { x: T; y: T; } -type EventListener, Name extends Extract> = (...args: NameArgsMap[Name] extends undefined ? [ +type EventListener, Name extends keyof EventMap> = (...args: EventMap[Name] extends undefined ? [ ] : [ - args: NameArgsMap[Name] + args: EventMap[Name] ]) => void; -type EventListenerGroup, Name extends Extract> = EventListener | EventListener[]; -type AddEventListener> = >(name: Name, listener: EventListenerGroup) => () => void; -type RemoveEventListener> = >(name?: Name, listener?: EventListenerGroup) => void; -type InitialEventListeners> = { - [K in Extract]?: EventListenerGroup; +type InitialEventListeners> = { + [K in keyof EventMap]?: EventListener | EventListener[]; }; type OverflowBehavior = "hidden" | "scroll" | "visible" | "visible-hidden" | "visible-scroll"; type VisibilityBehavior = "visible" | "hidden" | "auto"; type AutoHideBehavior = "never" | "scroll" | "leave" | "move"; -interface OSOptions { +interface Options { paddingAbsolute: boolean; updating: { elementEvents: Array<[ @@ -96,43 +53,78 @@ interface OSOptions { initialize: boolean; }; } -type StructureInitializationStrategyElementFn = ((target: OSTargetElement) => HTMLElement | T) | T; -type ScrollbarsInitializationStrategyElementFn = ((target: OSTargetElement, host: HTMLElement, viewport: HTMLElement) => HTMLElement | T) | T; -/** - * A Static element is an element which MUST be generated. - * If null or undefined (or the returned result is null or undefined), the initialization function is generatig the element, otherwise - * the element returned by the function acts as the generated element. - */ -type StructureInitializationStrategyStaticElement = StructureInitializationStrategyElementFn; -/** - * A Dynamic element is an element which CAN be generated. - * If boolean (or the returned result is boolean), the generation of the element is forced (or not). - * If the function returns and element, the element returned by the function acts as the generated element. - */ -type StructureInitializationStrategyDynamicElement = StructureInitializationStrategyElementFn; -interface StructureInitializationStrategy { - _host: StructureInitializationStrategyStaticElement; - _viewport: StructureInitializationStrategyStaticElement; - _padding: StructureInitializationStrategyDynamicElement; - _content: StructureInitializationStrategyDynamicElement; -} -interface ScrollbarsInitializationStrategy { - /** - * The scrollbars slot. If null or undefined (or the returned result is null or undefined), the initialization function is deciding the element, otherwise - * the element returned by the function acts as the scrollbars slot. - */ - _scrollbarsSlot: ScrollbarsInitializationStrategyElementFn; -} -interface InitializationStrategy extends StructureInitializationStrategy, ScrollbarsInitializationStrategy { -} -type DefaultInitializationStrategy = { - [K in keyof InitializationStrategy]: Extract; -}; type OSPluginInstance = Record | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void); type OSPlugin = [ string, T ]; +type ScrollbarsDynamicInitializationElement = DynamicInitializationElement<[ + target: InitializationTargetElement, + host: HTMLElement, + viewport: HTMLElement +]>; +/** + * Object for special initialization. + * + * If element is provided, the provided element takes all its responsibilities. + * DOM hierarchy isn't checked in this case, its assumed that hieararchy is correct in such a case. + * + * Null or Undefined means that the environment initialization strategy is used. + */ +interface ScrollbarsInitialization { + scrollbarsSlot?: ScrollbarsDynamicInitializationElement; +} +type ScrollbarsInitializationStrategy = { + [K in keyof ScrollbarsInitialization as `_${K}`]: InitializtationElementStrategy; +}; +type StructureStaticInitializationElement = StaticInitializationElement<[ + target: InitializationTargetElement +]>; +type StructureDynamicInitializationElement = DynamicInitializationElement<[ + target: InitializationTargetElement +]>; +/** + * Object for special initialization. + * + * Target is always required, if element is not provided or undefined it will be generated. + * + * If element is provided, the provided element takes all its responsibilities. + * DOM hierarchy isn't checked in this case, its assumed that hieararchy is correct in such a case. + * + * Null or Undefined means that the environment initialization strategy is used. + */ +interface StructureInitialization { + target: InitializationTargetElement; + host?: StructureStaticInitializationElement; // only relevant for textarea + viewport?: StructureStaticInitializationElement; + padding?: StructureDynamicInitializationElement; + content?: StructureDynamicInitializationElement; +} +type StructureInitializationStrategy = { + [K in keyof Omit as `_${K}`]: InitializtationElementStrategy; +}; +type StaticInitialization = HTMLElement | null | undefined; +type DynamicInitialization = HTMLElement | boolean | null | undefined; +type InitializationTargetElement = HTMLElement | HTMLTextAreaElement; +type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization; +type InitializationTarget = InitializationTargetElement | InitializationTargetObject; +type InitializationStrategy = StructureInitializationStrategy & ScrollbarsInitializationStrategy; +/** + * Static elements MUST be present. + * Null or undefined behave like if this element wasn't specified during initialization. + */ +type StaticInitializationElement = ((...args: Args) => StaticInitialization) | StaticInitialization; +/** + * Dynamic element CAN be present. + * If its a element the element will be handled as the repsective element. + * True means that the respective dynamic element is forced to be generated. + * False means that the respective dynamic element is forced NOT to be generated. + * Null or undefined behave like if this element wasn't specified during initialization. + */ +type DynamicInitializationElement = ((...args: Args) => DynamicInitialization) | DynamicInitialization; +type InitializtationElementStrategy = Exclude; +type GeneralInitialEventListeners = InitialEventListeners; +type GeneralEventListener = EventListener; /* onScrollStart : null, onScroll : null, @@ -143,6 +135,42 @@ onDirectionChanged : null, // gone onContentSizeChanged : null, // gone onHostSizeChanged : null, // gone */ +interface OverlayScrollbarsStatic { + (target: InitializationTarget | InitializationTargetObject, options?: PartialOptions, eventListeners?: GeneralInitialEventListeners): OverlayScrollbars; + plugin(osPlugin: OSPlugin | OSPlugin[]): void; + env(): Environment; +} +interface Environment { + scrollbarSize: XY; + scrollbarIsOverlaid: XY; + scrollbarStyling: boolean; + rtlScrollBehavior: { + n: boolean; + i: boolean; + }; + flexboxGlue: boolean; + cssCustomProperties: boolean; + defaultInitializationStrategy: InitializationStrategy; + defaultDefaultOptions: Options; + getInitializationStrategy(): InitializationStrategy; + setInitializationStrategy(newInitializationStrategy: Partial): void; + getDefaultOptions(): Options; + setDefaultOptions(newDefaultOptions: PartialOptions): void; +} +interface State { + padding: TRBL; + paddingAbsolute: boolean; + overflowAmount: XY; + overflowStyle: XY; + hasOverflow: XY; +} +interface Elements { + target: HTMLElement; + host: HTMLElement; + padding: HTMLElement; + viewport: HTMLElement; + content: HTMLElement; +} interface OnUpdatedEventListenerArgs { updateHints: { sizeChanged: boolean; @@ -153,63 +181,27 @@ interface OnUpdatedEventListenerArgs { hostMutation: boolean; contentMutation: boolean; }; - changedOptions: PartialOptions; + changedOptions: PartialOptions; force: boolean; } -interface OSEventListenersNameArgsMap { +interface EventListenerMap { initialized: undefined; initializationWithdrawn: undefined; updated: OnUpdatedEventListenerArgs; destroyed: undefined; } -type AddOSEventListener = AddEventListener; -type RemoveOSEventListener = RemoveEventListener; -type InitialOSEventListeners = InitialEventListeners; -interface OverlayScrollbarsStatic { - (target: OSTarget | OSInitializationObject, options?: PartialOptions, eventListeners?: InitialOSEventListeners): OverlayScrollbars; - plugin(osPlugin: OSPlugin | OSPlugin[]): void; - env(): OverlayScrollbarsEnv; -} -interface OverlayScrollbarsEnv { - scrollbarSize: XY; - scrollbarIsOverlaid: XY; - scrollbarStyling: boolean; - rtlScrollBehavior: { - n: boolean; - i: boolean; - }; - flexboxGlue: boolean; - cssCustomProperties: boolean; - defaultInitializationStrategy: DefaultInitializationStrategy; - defaultDefaultOptions: OSOptions; - getInitializationStrategy(): InitializationStrategy; - setInitializationStrategy(newInitializationStrategy: Partial): void; - getDefaultOptions(): OSOptions; - setDefaultOptions(newDefaultOptions: PartialOptions): void; -} -interface OverlayScrollbarsState { - padding: TRBL; - paddingAbsolute: boolean; - overflowAmount: XY; - overflowStyle: XY; - hasOverflow: XY; -} -interface OverlayScrollbarsElements { - target: HTMLElement; - host: HTMLElement; - padding: HTMLElement; - viewport: HTMLElement; - content: HTMLElement; -} +type EventListener$0 = GeneralEventListener; interface OverlayScrollbars { - options(): OSOptions; - options(newOptions?: PartialOptions): OSOptions; + options(): Options; + options(newOptions?: PartialOptions): Options; update(force?: boolean): void; destroy(): void; - state(): OverlayScrollbarsState; - elements(): OverlayScrollbarsElements; - on: AddOSEventListener; - off: RemoveOSEventListener; + state(): State; + elements(): Elements; + on(name: Name, listener: EventListener$0): () => void; + on(name: Name, listener: EventListener$0[]): () => void; + off(name: Name, listener?: EventListener$0): void; + off(name: Name, listener?: EventListener$0[]): void; } /** * Notes: diff --git a/yarn.lock b/yarn.lock index 8431327..8ef1335 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,7 +17,7 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== @@ -1248,6 +1248,14 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.13" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" @@ -4784,7 +4792,7 @@ jest-watcher@^28.1.1: jest-util "^28.1.1" string-length "^4.0.1" -jest-worker@^26.0.0: +jest-worker@^26.2.1: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== @@ -6574,17 +6582,17 @@ rollup-plugin-styles@^3.10.0: source-map "^0.7.3" tslib "^2.1.0" -rollup-plugin-terser@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-6.1.0.tgz#071866585aea104bfbb9dd1019ac523e63c81e45" - integrity sha512-4fB3M9nuoWxrwm39habpd4hvrbrde2W2GG4zEGPQg1YITNkM3Tqur5jSuXlWNzbv/2aMLJ+dZJaySc3GCD8oDw== +rollup-plugin-terser@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== dependencies: - "@babel/code-frame" "^7.8.3" - jest-worker "^26.0.0" - serialize-javascript "^3.0.0" - terser "^4.7.0" + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" -rollup-plugin-ts@^3.0.1: +rollup-plugin-ts@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rollup-plugin-ts/-/rollup-plugin-ts-3.0.2.tgz#ee1a3f9ffe202ceff0b4d2f725fa268fa0c921bf" integrity sha512-67qi2QTHewhLyKDG6fX3jpohWpmUPPIT/xJ7rsYK46X6MqmoWy64Ti0y8ygPfLv8mXDCdRZUofM3mTxDfCswRA== @@ -6688,10 +6696,10 @@ semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: dependencies: lru-cache "^6.0.0" -serialize-javascript@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" - integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== dependencies: randombytes "^2.1.0" @@ -6845,7 +6853,7 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@~0.5.12: +source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -7145,14 +7153,15 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser@^4.7.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== +terser@^5.0.0: + version "5.14.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.1.tgz#7c95eec36436cb11cf1902cc79ac564741d19eca" + integrity sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ== dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" + source-map-support "~0.5.20" test-exclude@^6.0.0: version "6.0.0" @@ -7326,7 +7335,7 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typescript@^4.5.4, typescript@^4.7.3: +typescript@^4.5.4, typescript@^4.7.4: version "4.7.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==