diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index 44147b2..4d34ed3 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -388,34 +388,10 @@ const equal = (a, b, props) => { }; 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 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$1(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]; - result = resultPossibilities.find((resultPossibility) => elmStyle[resultPossibility] !== undefined); - return !result; - }); - cssCache[name] = result; - return result; -}; const jsAPI = (name) => { let result = jsCache[name] || window[name]; @@ -476,11 +452,6 @@ const cssNumber = { zoom: 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.getPropertyValue(prop) : elm.style[prop]); @@ -515,20 +486,6 @@ function style(elm, styles) { each(keys(styles), (key) => setCSSVal(elm, key, styles[key])); } -const topRightBottomLeft = (elm, property) => { - const finalProp = property || ''; - const top = `${finalProp}-top`; - const right = `${finalProp}-right`; - const bottom = `${finalProp}-bottom`; - const left = `${finalProp}-left`; - 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 = { x: 0, @@ -567,7 +524,14 @@ const createCache = (update, options) => { }; }; - return cacheUpdate; + return { + _update: cacheUpdate, + _current: (force) => ({ + _value, + _previous, + _changed: !!force, + }), + }; }; function createCommonjsModule(fn) { @@ -710,6 +674,7 @@ const classNameHost = 'os-host'; const classNamePadding = 'os-padding'; const classNameViewport = 'os-viewport'; const classNameContent = 'os-content'; +const classNameContentArrange = `${classNameContent}-arrange`; const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`; const classNameSizeObserver = 'os-size-observer'; const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`; @@ -732,18 +697,6 @@ const getNativeScrollbarSize = (body, measureElm) => { }; }; -const getNativeScrollbarStyling = (testElm) => { - let result = false; - addClass(testElm, classNameViewportScrollbarStyling); - - try { - result = - style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none'; - } catch (ex) {} - - return result; -}; - const getRtlScrollBehavior = (parentElm, childElm) => { const strHidden = 'hidden'; style(parentElm, { @@ -792,16 +745,17 @@ const createEnvironment = () => { const envElm = envDOM[0]; const envChildElm = envElm.firstChild; const onChangedListener = new Set(); - const nativeScrollBarSize = getNativeScrollbarSize(body, envElm); + const nativeScrollbarSize = getNativeScrollbarSize(body, envElm); + const nativeScrollbarStyling = false; const nativeScrollbarIsOverlaid = { - x: nativeScrollBarSize.x === 0, - y: nativeScrollBarSize.y === 0, + x: nativeScrollbarSize.x === 0, + y: nativeScrollbarSize.y === 0, }; const env = { _autoUpdateLoop: false, - _nativeScrollbarSize: nativeScrollBarSize, + _nativeScrollbarSize: nativeScrollbarSize, _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid, - _nativeScrollbarStyling: getNativeScrollbarStyling(envElm), + _nativeScrollbarStyling: nativeScrollbarStyling, _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm), _flexboxGlue: getFlexboxGlue(envElm, envChildElm), @@ -814,13 +768,12 @@ const createEnvironment = () => { }, }; removeAttr(envElm, 'style'); - removeAttr(envElm, 'class'); removeElements(envElm); if (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y) { let size = windowSize(); let dpr = getWindowDPR(); - let scrollbarSize = nativeScrollBarSize; + let scrollbarSize = nativeScrollbarSize; window.addEventListener('resize', () => { if (onChangedListener.size) { const sizeNew = windowSize(); @@ -871,555 +824,6 @@ const getEnvironment = () => { return environmentInstance; }; -const getPropByPath = (obj, path) => obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty$1(o, prop) ? o[prop] : undefined), obj); - -const createLifecycleBase = (defaultOptionsWithTemplate, initialOptions, updateFunction) => { - const { _template: optionsTemplate, _options: defaultOptions } = transformOptions(defaultOptionsWithTemplate); - const options = assignDeep({}, defaultOptions, validateOptions(initialOptions || {}, optionsTemplate, null, true)._validated); - - const update = (hints) => { - const { _force, _changedOptions } = hints; - - const checkOption = (path) => ({ - _value: getPropByPath(options, path), - _changed: _force || getPropByPath(_changedOptions, path) !== undefined, - }); - - updateFunction(!!_force, checkOption); - }; - - update({ - _force: true, - }); - return { - _options(newOptions) { - if (newOptions) { - const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, options, true); - - if (!isEmptyObject(_changedOptions)) { - assignDeep(options, _changedOptions); - update({ - _changedOptions, - }); - } - } - - return options; - }, - - _update: (_force) => { - update({ - _force, - }); - }, - }; -}; - -const overflowBehaviorAllowedValues = 'visible-hidden visible-scroll scroll hidden'; -const defaultOptionsWithTemplate = { - paddingAbsolute: [false, optionsTemplateTypes.boolean], - overflowBehavior: { - x: ['scroll', overflowBehaviorAllowedValues], - y: ['scroll', overflowBehaviorAllowedValues], - }, -}; -const cssMarginEnd = cssProperty('margin-inline-end'); -const cssBorderEnd = cssProperty('border-inline-end'); -const createStructureLifecycle = (target, initialOptions) => { - const { _host, _padding, _viewport, _content } = target; - const destructFns = []; - const env = getEnvironment(); - const scrollbarsOverlaid = env._nativeScrollbarIsOverlaid; - const supportsScrollbarStyling = env._nativeScrollbarStyling; - const supportFlexboxGlue = env._flexboxGlue; - const directionObserverObsolete = (cssMarginEnd && cssBorderEnd) || supportsScrollbarStyling || scrollbarsOverlaid.y; - const updatePaddingCache = createCache(() => topRightBottomLeft(_host, 'padding'), { - _equal: equalTRBL, - }); - const updateOverflowAmountCache = createCache( - (ctx) => ({ - x: Math.max(0, Math.round((ctx._contentScrollSize.w - ctx._viewportSize.w) * 100) / 100), - y: Math.max(0, Math.round((ctx._contentScrollSize.h - ctx._viewportSize.h) * 100) / 100), - }), - { - _equal: equalXY, - } - ); - const { _options, _update } = createLifecycleBase(defaultOptionsWithTemplate, initialOptions, (force, checkOption) => { - const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute'); - const { _value: padding, _changed: paddingChanged } = updatePaddingCache(force); - - if (paddingAbsoluteChanged || paddingChanged) { - const paddingStyle = { - t: 0, - r: 0, - b: 0, - l: 0, - }; - - if (!paddingAbsolute) { - paddingStyle.t = -padding.t; - paddingStyle.r = -(padding.r + padding.l); - paddingStyle.b = -(padding.b + padding.t); - paddingStyle.l = -padding.l; - } - - style(_padding, { - top: paddingStyle.t, - left: paddingStyle.l, - 'margin-right': paddingStyle.r, - 'margin-bottom': paddingStyle.b, - 'max-width': `calc(100% + ${paddingStyle.r * -1}px)`, - }); - } - - const viewportOffsetSize = offsetSize(_padding); - const contentClientSize = offsetSize(_content); - const contentScrollSize = scrollSize(_content); - const overflowAmuntCache = updateOverflowAmountCache(force, { - _contentScrollSize: contentScrollSize, - _viewportSize: { - w: viewportOffsetSize.w + Math.max(0, contentClientSize.w - contentScrollSize.w), - h: viewportOffsetSize.h + Math.max(0, contentClientSize.h - contentScrollSize.h), - }, - }); - const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache; - console.log('overflowAmount', overflowAmount); - console.log('overflowAmountChanged', overflowAmountChanged); - }); - - const onSizeChanged = () => { - _update(); - }; - - const onTrinsicChanged = (widthIntrinsic, heightIntrinsicCache) => { - const { _changed, _value } = heightIntrinsicCache; - - if (_changed) { - style(_content, { - height: _value ? 'auto' : '100%', - }); - } - }; - - return { - _options, - _update, - _onSizeChanged: onSizeChanged, - _onTrinsicChanged: onTrinsicChanged, - - _destruct() { - runEach(destructFns); - }, - }; -}; - -const animationStartEventName = 'animationstart'; -const scrollEventName = 'scroll'; -const scrollAmount = 3333333; -const directionIsRTLMap = { - direction: ['rtl'], -}; - -const directionIsRTL = (elm) => { - let isRTL = false; - const styles = style(elm, ['direction']); - each(styles, (value, key) => { - isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1; - }); - return isRTL; -}; - -const domRectHasDimensions = (rect) => rect && (rect.height || rect.width); - -const createSizeObserver = (target, onSizeChangedCallback, options) => { - const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {}; - - const rtlScrollBehavior = getEnvironment()._rtlScrollBehavior; - - const baseElements = createDOM(`
`); - const sizeObserver = baseElements[0]; - const listenerElement = sizeObserver.firstChild; - const updateResizeObserverContentRectCache = createCache(0, { - _alwaysUpdateValues: true, - _equal: (currVal, newVal) => !(!currVal || (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))), - }); - - const onSizeChangedCallbackProxy = (sizeChangedContext) => { - const hasDirectionCache = sizeChangedContext && isBoolean(sizeChangedContext._value); - let skip = false; - - if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) { - const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop().contentRect); - skip = !_previous || !domRectHasDimensions(_value); - } else if (hasDirectionCache) { - sizeChangedContext._changed; - } - - if (observeDirectionChange) { - const rtl = hasDirectionCache ? sizeChangedContext._value : directionIsRTL(sizeObserver); - scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount); - scrollTop(sizeObserver, scrollAmount); - } - - if (!skip) { - onSizeChangedCallback(hasDirectionCache ? sizeChangedContext : undefined); - } - }; - - const offListeners = []; - let appearCallback = observeAppearChange ? onSizeChangedCallbackProxy : false; - - 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(listenerElement); - let currSize = cacheSize; - let isDirty = false; - let rAFId; - - const reset = () => { - scrollLeft(expandElement, scrollAmount); - scrollTop(expandElement, scrollAmount); - scrollLeft(shrinkElement, scrollAmount); - scrollTop(shrinkElement, scrollAmount); - }; - - const onResized = () => { - rAFId = 0; - - if (isDirty) { - cacheSize = currSize; - onSizeChangedCallbackProxy(); - } - }; - - const onScroll = (scrollEvent) => { - currSize = offsetSize(listenerElement); - isDirty = !scrollEvent || !equalWH(currSize, cacheSize); - - if (scrollEvent && isDirty && !rAFId) { - cAF(rAFId); - rAFId = rAF(onResized); - } else if (!scrollEvent) { - onResized(); - } - - reset(); - - if (scrollEvent) { - preventDefault(scrollEvent); - stopPropagation(scrollEvent); - } - - return false; - }; - - push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]); - style(expandElementChild, { - width: scrollAmount, - height: scrollAmount, - }); - reset(); - appearCallback = observeAppearChange ? () => onScroll() : reset; - } - - if (observeDirectionChange) { - const updateDirectionIsRTLCache = createCache(() => directionIsRTL(sizeObserver)); - push( - offListeners, - on(sizeObserver, scrollEventName, (event) => { - const directionIsRTLCache = updateDirectionIsRTLCache(); - const { _value, _changed } = directionIsRTLCache; - - if (_changed) { - if (_value) { - style(listenerElement, { - left: 'auto', - right: 0, - }); - } else { - style(listenerElement, { - left: 0, - right: 'auto', - }); - } - - onSizeChangedCallbackProxy(directionIsRTLCache); - } - - preventDefault(event); - stopPropagation(event); - return false; - }) - ); - } - - if (appearCallback) { - addClass(sizeObserver, classNameSizeObserverAppear); - push( - offListeners, - on(sizeObserver, animationStartEventName, appearCallback, { - _once: !!ResizeObserverConstructor, - }) - ); - } - - prependChildren(target, sizeObserver); - return () => { - runEach(offListeners); - removeElements(sizeObserver); - }; -}; - -const createTrinsicObserver = (target, onTrinsicChangedCallback) => { - const trinsicObserver = createDOM(`
`)[0]; - const offListeners = []; - const updateHeightIntrinsicCache = createCache( - (ioEntryOrSize) => ioEntryOrSize.h === 0 || ioEntryOrSize.isIntersecting || ioEntryOrSize.intersectionRatio > 0, - { - _initialValue: false, - } - ); - - if (IntersectionObserverConstructor) { - const intersectionObserverInstance = new IntersectionObserverConstructor( - (entries) => { - if (entries && entries.length > 0) { - const last = entries.pop(); - - if (last) { - const heightIntrinsicCache = updateHeightIntrinsicCache(0, last); - - if (heightIntrinsicCache._changed) { - onTrinsicChangedCallback(false, heightIntrinsicCache); - } - } - } - }, - { - root: target, - } - ); - intersectionObserverInstance.observe(trinsicObserver); - push(offListeners, () => intersectionObserverInstance.disconnect()); - } else { - push( - offListeners, - createSizeObserver(trinsicObserver, () => { - const newSize = offsetSize(trinsicObserver); - const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize); - - if (heightIntrinsicCache._changed) { - onTrinsicChangedCallback(false, heightIntrinsicCache); - } - }) - ); - } - - prependChildren(target, trinsicObserver); - return () => { - runEach(offListeners); - removeElements(trinsicObserver); - }; -}; - -const createEventContentChange = (target, eventContentChange, map, callback) => { - let eventContentChangeRef; - - const addEvent = (elm, eventName) => { - const entry = map.get(elm); - const newEntry = isUndefined(entry); - - const registerEvent = () => { - map.set(elm, eventName); - on(elm, eventName, callback); - }; - - if (!newEntry && eventName !== entry) { - off(elm, entry, callback); - registerEvent(); - } else if (newEntry) { - registerEvent(); - } - }; - - const _destroy = () => { - map.forEach((eventName, elm) => { - off(elm, eventName, callback); - }); - map.clear(); - }; - - const _updateElements = (getElements) => { - if (eventContentChangeRef) { - const eventElmList = eventContentChangeRef.reduce((arr, item) => { - if (item) { - const selector = item[0]; - const eventName = item[1]; - const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target)); - - if (elements) { - push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName], true); - } - } - - return arr; - }, []); - each(eventElmList, (item) => { - const elements = item[0]; - const eventName = item[1]; - each(elements, (elm) => { - addEvent(elm, eventName); - }); - }); - } - }; - - const _update = (newEventContentChange) => { - eventContentChangeRef = newEventContentChange; - - _destroy(); - - _updateElements(); - }; - - if (eventContentChange) { - _update(eventContentChange); - } - - return { - _destroy, - _updateElements, - _update, - }; -}; - -const createDOMObserver = (target, callback, options) => { - let isConnected = false; - const { - _observeContent, - _attributes, - _styleChangingAttributes, - _eventContentChange, - _nestedTargetSelector, - _ignoreTargetAttrChange: _ignoreTargetChange, - _ignoreContentChange, - } = options || {}; - const { - _updateElements: updateEventContentChangeElements, - _destroy: destroyEventContentChange, - _update: updateEventContentChange, - } = createEventContentChange( - target, - _observeContent && _eventContentChange, - new Map(), - debounce(() => { - if (isConnected) { - callback([], false, true); - } - }, 80) - ); - 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 targetAttrChanged = - attributeChanged && - targetIsMutationTarget && - !_observeContent && - !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue); - const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged; - - if (targetAttrChanged) { - push(targetChangedAttrs, attributeName); - } - - if (_observeContent) { - const notOnlyAttrChanged = !isAttributesType; - const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget; - 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; - } - - targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged); - }); - - if (childListChanged && !isEmptyArray(totalAddedNodes)) { - updateEventContentChangeElements((selector) => - totalAddedNodes.reduce((arr, node) => { - push(arr, find(selector, node)); - return is(node, selector) ? push(arr, node) : arr; - }, []) - ); - } - - if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) { - callback(targetChangedAttrs, targetStyleChanged, contentChanged); - } - }; - - const mutationObserver = new MutationObserverConstructor(observerCallback); - mutationObserver.observe(target, { - attributes: true, - attributeOldValue: true, - attributeFilter: observedAttributes, - subtree: _observeContent, - childList: _observeContent, - characterData: _observeContent, - }); - isConnected = true; - return { - _disconnect: () => { - if (isConnected) { - destroyEventContentChange(); - mutationObserver.disconnect(); - isConnected = false; - } - }, - _updateEventContentChange: (newEventContentChange) => { - updateEventContentChange(isConnected && _observeContent && newEventContentChange); - }, - _update: () => { - if (isConnected) { - observerCallback(mutationObserver.takeRecords()); - } - }, - }; -}; - const unwrap = (elm) => { appendChildren(parent(elm), contents(elm)); removeElements(elm); @@ -1530,6 +934,19 @@ const createStructureSetup = (target) => { _host, }); + const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment(); + + if (_nativeScrollbarStyling) { + push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling)); + } else if (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y) { + if (obj._content) { + const contentArrangeElm = createDiv(classNameContentArrange); + prependChildren(_viewport, contentArrangeElm); + push(destroyFns, removeElements.bind(0, contentArrangeElm)); + obj._contentArrange = contentArrangeElm; + } + } + return { _targetObj: obj, _targetCtx: ctx, @@ -1539,47 +956,814 @@ const createStructureSetup = (target) => { }; }; -const OverlayScrollbars = (target, options, extensions) => { - const structureSetup = createStructureSetup(target); - const lifecycles = []; - const { _host, _viewport, _content } = structureSetup._targetObj; - push(lifecycles, createStructureLifecycle(structureSetup._targetObj)); +const getPropByPath = (obj, path) => obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty$1(o, prop) ? o[prop] : undefined), obj); - const onSizeChanged = (directionCache) => { - if (directionCache) { - each(lifecycles, (lifecycle) => { - lifecycle._onDirectionChanged && lifecycle._onDirectionChanged(directionCache); +const createLifecycleUpdateFunction = (lifecycleHub, updateFunction) => { + return (updateHints, changedOptions, force) => { + const checkOption = (path) => ({ + _value: getPropByPath(lifecycleHub._options, path), + _changed: force || getPropByPath(changedOptions, path) !== undefined, + }); + + return updateFunction(!!force, updateHints, checkOption) || {}; + }; +}; + +const overlaidScrollbarsHideOffset = 42; +const overlaidScrollbarsHideBorderStyle = `${overlaidScrollbarsHideOffset}px solid transparent`; +const createOverflowLifecycle = (lifecycleHub) => { + const { _host, _padding, _viewport, _content, _contentArrange } = lifecycleHub._structureSetup._targetObj; + const { _update: updateContentScrollSizeCache, _current: getCurrentContentScrollSizeCache } = createCache(() => scrollSize(_content || _viewport), { + _equal: equalWH, + }); + const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache( + (ctx) => ({ + x: Math.max(0, Math.round((ctx._contentScrollSize.w - ctx._viewportSize.w) * 100) / 100), + y: Math.max(0, Math.round((ctx._contentScrollSize.h - ctx._viewportSize.h) * 100) / 100), + }), + { + _equal: equalXY, + } + ); + + const setViewportOverflowStyle = (horizontal, amount, behavior, styleObj) => { + const overflowKey = horizontal ? 'overflowX' : 'overflowY'; + const behaviorIsScroll = behavior === 'scroll'; + const behaviorIsVisibleScroll = behavior === 'visible-scroll'; + const hideOverflow = behaviorIsScroll || behavior === 'hidden'; + const applyStyle = amount > 0 && hideOverflow; + + if (applyStyle) { + styleObj[overflowKey] = behavior; + } + + return { + _visible: !applyStyle, + _behavior: behaviorIsVisibleScroll ? 'scroll' : 'hidden', + }; + }; + + const hideNativeScrollbars = (contentScrollSize, showNativeOverlaidScrollbars, directionIsRTL, viewportStyleObj, contentStyleObj) => { + const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment(); + const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid; + const scrollX = viewportStyleObj.overflowX === 'scroll'; + const scrollY = viewportStyleObj.overflowY === 'scroll'; + const horizontalMarginKey = directionIsRTL ? 'marginLeft' : 'marginRight'; + const horizontalBorderKey = directionIsRTL ? 'borderLeft' : 'borderRight'; + const overlaidHideOffset = _content && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0; + const scrollbarsHideOffset = { + x: overlaidX ? overlaidHideOffset : _nativeScrollbarSize.x, + y: overlaidY ? overlaidHideOffset : _nativeScrollbarSize.y, + }; + + if (!_nativeScrollbarStyling) { + if (scrollX) { + viewportStyleObj.marginBottom = -scrollbarsHideOffset.x; + contentStyleObj.borderBottom = overlaidX && overlaidHideOffset ? overlaidScrollbarsHideBorderStyle : ''; + } + + if (scrollY) { + viewportStyleObj.maxWidth = `calc(100% + ${scrollbarsHideOffset.y}px)`; + viewportStyleObj[horizontalMarginKey] = -scrollbarsHideOffset.y; + contentStyleObj[horizontalBorderKey] = overlaidY && overlaidHideOffset ? overlaidScrollbarsHideBorderStyle : ''; + } + + if (_contentArrange) { + style(_contentArrange, { + width: scrollY && !showNativeOverlaidScrollbars ? overlaidHideOffset + contentScrollSize.w : '', + height: scrollX && !showNativeOverlaidScrollbars ? overlaidHideOffset + contentScrollSize.h : '', + }); + } + } + + return { + _scrollbarsHideOffset: scrollbarsHideOffset, + _scroll: { + x: scrollX, + y: scrollY, + }, + }; + }; + + const setFlexboxGlueStyle = (heightIntrinsic, scrollX, scrollbarsHideOffsetX) => { + const offsetLeft = scrollLeft(_viewport); + const offsetTop = scrollTop(_viewport); + style(_viewport, { + maxHeight: '', + }); + + if (heightIntrinsic) { + style(_viewport, { + maxHeight: _host.clientHeight + (scrollX ? scrollbarsHideOffsetX : 0), }); - } else { - each(lifecycles, (lifecycle) => { - lifecycle._onSizeChanged && lifecycle._onSizeChanged(); + } + + scrollLeft(_viewport, offsetLeft); + scrollTop(_viewport, offsetTop); + }; + + return createLifecycleUpdateFunction(lifecycleHub, (force, updateHints, checkOption) => { + const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation } = updateHints; + const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment(); + const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption( + 'nativeScrollbarsOverlaid.show' + ); + const adjustFlexboxGlue = !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged); + const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y; + let overflowAmuntCache = getCurrentOverflowAmountCache(); + let contentScrollSizeCache = getCurrentContentScrollSizeCache(); + + if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) { + if (showNativeOverlaidScrollbars) { + removeClass(_viewport, classNameViewportScrollbarStyling); + } else { + addClass(_viewport, classNameViewportScrollbarStyling); + } + } + + if (_sizeChanged || _contentMutation) { + const viewportOffsetSize = offsetSize(_padding); + const contentClientSize = offsetSize(_content || _viewport); + const contentArrangeOffsetSize = offsetSize(_contentArrange); + contentScrollSizeCache = updateContentScrollSizeCache(force); + const { _value: _contentScrollSize } = contentScrollSizeCache; + overflowAmuntCache = updateOverflowAmountCache(force, { + _contentScrollSize: { + w: Math.max(_contentScrollSize.w, contentArrangeOffsetSize.w), + h: Math.max(_contentScrollSize.h, contentArrangeOffsetSize.h), + }, + _viewportSize: { + w: viewportOffsetSize.w + Math.max(0, contentClientSize.w - _contentScrollSize.w), + h: viewportOffsetSize.h + Math.max(0, contentClientSize.h - _contentScrollSize.h), + }, + }); + } + + const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL; + const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = contentScrollSizeCache; + const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache; + const { _value: overflow, _changed: overflowChanged } = checkOption('overflow'); + const adjustDirection = directionChanged && !_nativeScrollbarStyling; + + if ( + contentScrollSizeChanged || + overflowAmountChanged || + overflowChanged || + showNativeOverlaidScrollbarsChanged || + adjustDirection || + adjustFlexboxGlue + ) { + const viewportStyle = { + overflowY: '', + overflowX: '', + marginTop: '', + marginRight: '', + marginBottom: '', + marginLeft: '', + maxWidth: '', + }; + const contentStyle = { + borderTop: '', + borderRight: '', + borderBottom: '', + borderLeft: '', + }; + const { _visible: xVisible, _behavior: xVisibleBehavior } = setViewportOverflowStyle(true, overflowAmount.x, overflow.x, viewportStyle); + const { _visible: yVisible, _behavior: yVisibleBehavior } = setViewportOverflowStyle(false, overflowAmount.y, overflow.y, viewportStyle); + + if (xVisible && !yVisible) { + viewportStyle.overflowX = xVisibleBehavior; + } + + if (yVisible && !xVisible) { + viewportStyle.overflowY = yVisibleBehavior; + } + + const { _scrollbarsHideOffset, _scroll } = hideNativeScrollbars( + contentScrollSize, + showNativeOverlaidScrollbars, + directionIsRTL, + viewportStyle, + contentStyle + ); + + if (adjustFlexboxGlue) { + setFlexboxGlueStyle(!!_heightIntrinsic._value, _scroll.x, _scrollbarsHideOffset.x); + } + + style(_viewport, viewportStyle); + style(_content, contentStyle); + } + }); +}; + +const animationStartEventName = 'animationstart'; +const scrollEventName = 'scroll'; +const scrollAmount = 3333333; +const directionIsRTLMap = { + direction: ['rtl'], +}; + +const directionIsRTL = (elm) => { + let isRTL = false; + const styles = style(elm, ['direction']); + each(styles, (value, key) => { + isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1; + }); + return isRTL; +}; + +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 { _update: updateResizeObserverContentRectCache } = createCache(0, { + _alwaysUpdateValues: true, + _equal: (currVal, newVal) => !(!currVal || (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))), + }); + + const onSizeChangedCallbackProxy = (sizeChangedContext) => { + const hasDirectionCache = sizeChangedContext && isBoolean(sizeChangedContext._value); + let skip = false; + + if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) { + const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop().contentRect); + skip = !_previous || !domRectHasDimensions(_value); + } else if (hasDirectionCache) { + sizeChangedContext._changed; + } + + if (observeDirectionChange) { + const rtl = hasDirectionCache ? sizeChangedContext._value : directionIsRTL(sizeObserver); + scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount); + scrollTop(sizeObserver, scrollAmount); + } + + if (!skip) { + onSizeChangedCallback(hasDirectionCache ? sizeChangedContext : undefined); + } + }; + + 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(listenerElement); + let currSize = cacheSize; + let isDirty = false; + let rAFId; + + const reset = () => { + scrollLeft(expandElement, scrollAmount); + scrollTop(expandElement, scrollAmount); + scrollLeft(shrinkElement, scrollAmount); + scrollTop(shrinkElement, scrollAmount); + }; + + const onResized = () => { + rAFId = 0; + + if (isDirty) { + cacheSize = currSize; + onSizeChangedCallbackProxy(); + } + }; + + const onScroll = (scrollEvent) => { + currSize = offsetSize(listenerElement); + isDirty = !scrollEvent || !equalWH(currSize, cacheSize); + + if (scrollEvent && isDirty && !rAFId) { + cAF(rAFId); + rAFId = rAF(onResized); + } else if (!scrollEvent) { + onResized(); + } + + reset(); + + if (scrollEvent) { + preventDefault(scrollEvent); + stopPropagation(scrollEvent); + } + + return false; + }; + + push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]); + style(expandElementChild, { + width: scrollAmount, + height: scrollAmount, + }); + reset(); + appearCallback = observeAppearChange ? () => onScroll() : reset; + } + + if (observeDirectionChange) { + directionIsRTLCache = createCache(() => directionIsRTL(sizeObserver)); + const { _update: updateDirectionIsRTLCache } = directionIsRTLCache; + push( + offListeners, + on(sizeObserver, scrollEventName, (event) => { + const directionIsRTLCacheValues = updateDirectionIsRTLCache(); + const { _value, _changed } = directionIsRTLCacheValues; + + if (_changed) { + if (_value) { + style(listenerElement, { + left: 'auto', + right: 0, + }); + } else { + style(listenerElement, { + left: 0, + right: 'auto', + }); + } + + onSizeChangedCallbackProxy(directionIsRTLCacheValues); + } + + preventDefault(event); + stopPropagation(event); + return false; + }) + ); + } + + if (appearCallback) { + addClass(sizeObserver, classNameSizeObserverAppear); + push( + offListeners, + on(sizeObserver, animationStartEventName, appearCallback, { + _once: !!ResizeObserverConstructor, + }) + ); + } + + prependChildren(target, sizeObserver); + return { + _destroy() { + runEach(offListeners); + removeElements(sizeObserver); + }, + + _getCurrentCacheValues(force) { + return { + _directionIsRTL: directionIsRTLCache + ? directionIsRTLCache._current(force) + : { + _value: false, + _previous: false, + _changed: false, + }, + }; + }, + }; +}; + +const createTrinsicObserver = (target, onTrinsicChangedCallback) => { + const trinsicObserver = createDOM(`
`)[0]; + const offListeners = []; + const { _update: updateHeightIntrinsicCache, _current: getCurrentHeightIntrinsicCache } = createCache( + (ioEntryOrSize) => ioEntryOrSize.h === 0 || ioEntryOrSize.isIntersecting || ioEntryOrSize.intersectionRatio > 0, + { + _initialValue: false, + } + ); + + if (IntersectionObserverConstructor) { + const intersectionObserverInstance = new IntersectionObserverConstructor( + (entries) => { + if (entries && entries.length > 0) { + const last = entries.pop(); + + if (last) { + const heightIntrinsic = updateHeightIntrinsicCache(0, last); + + if (heightIntrinsic._changed) { + onTrinsicChangedCallback(heightIntrinsic); + } + } + } + }, + { + root: target, + } + ); + intersectionObserverInstance.observe(trinsicObserver); + push(offListeners, () => intersectionObserverInstance.disconnect()); + } else { + push( + offListeners, + createSizeObserver(trinsicObserver, () => { + const newSize = offsetSize(trinsicObserver); + const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize); + + if (heightIntrinsicCache._changed) { + onTrinsicChangedCallback(heightIntrinsicCache); + } + })._destroy + ); + } + + prependChildren(target, trinsicObserver); + return { + _destroy() { + runEach(offListeners); + removeElements(trinsicObserver); + }, + + _getCurrentCacheValues(force) { + return { + _heightIntrinsic: getCurrentHeightIntrinsicCache(force), + }; + }, + }; +}; + +const createEventContentChange = (target, eventContentChange, map, callback) => { + let eventContentChangeRef; + + const addEvent = (elm, eventName) => { + const entry = map.get(elm); + const newEntry = isUndefined(entry); + + const registerEvent = () => { + map.set(elm, eventName); + on(elm, eventName, callback); + }; + + if (!newEntry && eventName !== entry) { + off(elm, entry, callback); + registerEvent(); + } else if (newEntry) { + registerEvent(); + } + }; + + const _destroy = () => { + map.forEach((eventName, elm) => { + off(elm, eventName, callback); + }); + map.clear(); + }; + + const _updateElements = (getElements) => { + if (eventContentChangeRef) { + const eventElmList = eventContentChangeRef.reduce((arr, item) => { + if (item) { + const selector = item[0]; + const eventName = item[1]; + const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target)); + + if (elements) { + push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName], true); + } + } + + return arr; + }, []); + each(eventElmList, (item) => { + const elements = item[0]; + const eventName = item[1]; + each(elements, (elm) => { + addEvent(elm, eventName); + }); }); } }; - const onTrinsicChanged = (widthIntrinsic, heightIntrinsicCache) => { + const _update = (newEventContentChange) => { + eventContentChangeRef = newEventContentChange; + + _destroy(); + + _updateElements(); + }; + + if (eventContentChange) { + _update(eventContentChange); + } + + return { + _destroy, + _updateElements, + _update, + }; +}; + +const createDOMObserver = (target, callback, options) => { + let isConnected = false; + const { + _observeContent, + _attributes, + _styleChangingAttributes, + _eventContentChange, + _nestedTargetSelector, + _ignoreTargetAttrChange: _ignoreTargetChange, + _ignoreContentChange, + } = options || {}; + const { + _updateElements: updateEventContentChangeElements, + _destroy: destroyEventContentChange, + _update: updateEventContentChange, + } = createEventContentChange( + target, + _observeContent && _eventContentChange, + new Map(), + debounce(() => { + if (isConnected) { + callback([], false, true); + } + }, 84) + ); + 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 targetAttrChanged = + attributeChanged && + targetIsMutationTarget && + !_observeContent && + !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue); + const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged; + + if (targetAttrChanged) { + push(targetChangedAttrs, attributeName); + } + + if (_observeContent) { + const notOnlyAttrChanged = !isAttributesType; + const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget; + 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; + } + + targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged); + }); + + if (childListChanged && !isEmptyArray(totalAddedNodes)) { + updateEventContentChangeElements((selector) => + totalAddedNodes.reduce((arr, node) => { + push(arr, find(selector, node)); + return is(node, selector) ? push(arr, node) : arr; + }, []) + ); + } + + if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) { + callback(targetChangedAttrs, targetStyleChanged, contentChanged); + } + }; + + const mutationObserver = new MutationObserverConstructor(observerCallback); + mutationObserver.observe(target, { + attributes: true, + attributeOldValue: true, + attributeFilter: observedAttributes, + subtree: _observeContent, + childList: _observeContent, + characterData: _observeContent, + }); + isConnected = true; + return { + _disconnect: () => { + if (isConnected) { + destroyEventContentChange(); + mutationObserver.disconnect(); + isConnected = false; + } + }, + _updateEventContentChange: (newEventContentChange) => { + updateEventContentChange(isConnected && _observeContent && newEventContentChange); + }, + _update: () => { + if (isConnected) { + observerCallback(mutationObserver.takeRecords()); + } + }, + }; +}; + +const attrs = ['id', 'class', 'style', 'open']; +const directionIsRTLCacheValuesFallback = { + _value: false, + _previous: false, + _changed: false, +}; +const heightIntrinsicCacheValuesFallback = { + _value: false, + _previous: false, + _changed: false, +}; +const createLifecycleHub = (options, structureSetup) => { + const { _host, _viewport, _content } = structureSetup._targetObj; + const { + _nativeScrollbarStyling, + _flexboxGlue, + _addListener: addEnvironmentListener, + _removeListener: removeEnvironmentListener, + } = getEnvironment(); + const lifecycles = []; + const instance = { + _options: options, + _structureSetup: structureSetup, + }; + push(lifecycles, createOverflowLifecycle(instance)); + + const runLifecycles = (updateHints, changedOptions, force) => { + let { _directionIsRTL, _heightIntrinsic, _sizeChanged = force || false, _hostMutation = force || false, _contentMutation = force || false } = + updateHints || {}; + const finalDirectionIsRTL = + _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback); + const finalHeightIntrinsic = + _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback); each(lifecycles, (lifecycle) => { - lifecycle._onTrinsicChanged && lifecycle._onTrinsicChanged(widthIntrinsic, heightIntrinsicCache); + const { _sizeChanged: adaptiveSizeChanged, _hostMutation: adaptiveHostMutation, _contentMutation: adaptiveContentMutation } = lifecycle( + { + _directionIsRTL: finalDirectionIsRTL, + _heightIntrinsic: finalHeightIntrinsic, + _sizeChanged, + _hostMutation, + _contentMutation, + }, + changedOptions, + force + ); + _sizeChanged = adaptiveSizeChanged || _sizeChanged; + _hostMutation = adaptiveHostMutation || _hostMutation; + _contentMutation = adaptiveContentMutation || _contentMutation; }); }; - createSizeObserver(_host, onSizeChanged, { + const onSizeChanged = (directionIsRTL) => { + const sizeChanged = !directionIsRTL; + runLifecycles({ + _directionIsRTL: directionIsRTL, + _sizeChanged: sizeChanged, + }); + }; + + const onTrinsicChanged = (heightIntrinsic) => { + runLifecycles({ + _heightIntrinsic: heightIntrinsic, + }); + }; + + const onHostMutation = () => { + requestAnimationFrame(() => { + runLifecycles({ + _hostMutation: true, + }); + }); + }; + + const onContentMutation = () => { + requestAnimationFrame(() => { + runLifecycles({ + _contentMutation: true, + }); + }); + }; + + const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, - _direction: true, + _direction: !_nativeScrollbarStyling, }); - createTrinsicObserver(_host, onTrinsicChanged); - createDOMObserver(_host, () => { - return null; + const trinsicObserver = createTrinsicObserver(_host, onTrinsicChanged); + const hostMutationObserver = createDOMObserver(_host, onHostMutation, { + _styleChangingAttributes: attrs, + _attributes: attrs, }); - createDOMObserver( - _content || _viewport, - () => { - return null; + const contentMutationObserver = createDOMObserver(_content || _viewport, onContentMutation, { + _observeContent: true, + _styleChangingAttributes: attrs, + _attributes: attrs, + _eventContentChange: options.updating.elementEvents, + }); + + const updateAll = (changedOptions, force) => { + runLifecycles(null, changedOptions, force); + }; + + const envUpdateListener = updateAll.bind(null, null, true); + addEnvironmentListener(envUpdateListener); + console.log('flexboxGlue', _flexboxGlue); + return { + _update: updateAll, + + _destroy() { + removeEnvironmentListener(envUpdateListener); }, - { - _observeContent: true, - } - ); + }; +}; + +const numberAllowedValues = optionsTemplateTypes.number; +const stringArrayNullAllowedValues = [optionsTemplateTypes.string, optionsTemplateTypes.array, optionsTemplateTypes.null]; +const booleanTrueTemplate = [true, optionsTemplateTypes.boolean]; +const booleanFalseTemplate = [false, optionsTemplateTypes.boolean]; +const resizeAllowedValues = 'none both horizontal vertical'; +const overflowAllowedValues = 'visible-hidden visible-scroll scroll hidden'; +const scrollbarsVisibilityAllowedValues = 'visible hidden auto'; +const scrollbarsAutoHideAllowedValues = 'never scroll leavemove'; +const defaultOptionsWithTemplate = { + resize: ['none', resizeAllowedValues], + paddingAbsolute: booleanFalseTemplate, + updating: { + elementEvents: [[['img', 'load']], [optionsTemplateTypes.array, optionsTemplateTypes.null]], + contentMutationDebounce: [80, numberAllowedValues], + hostMutationDebounce: [0, numberAllowedValues], + resizeDebounce: [0, numberAllowedValues], + }, + overflow: { + x: ['scroll', overflowAllowedValues], + y: ['scroll', overflowAllowedValues], + }, + scrollbars: { + visibility: ['auto', scrollbarsVisibilityAllowedValues], + autoHide: ['never', scrollbarsAutoHideAllowedValues], + autoHideDelay: [800, numberAllowedValues], + dragScroll: booleanTrueTemplate, + clickScroll: booleanFalseTemplate, + touch: booleanTrueTemplate, + }, + textarea: { + dynWidth: booleanFalseTemplate, + dynHeight: booleanFalseTemplate, + inheritedAttrs: [['style', 'class'], stringArrayNullAllowedValues], + }, + nativeScrollbarsOverlaid: { + show: booleanFalseTemplate, + initialize: booleanFalseTemplate, + }, +}; +const { _template: optionsTemplate, _options: defaultOptions } = transformOptions(defaultOptionsWithTemplate); + +const OverlayScrollbars = (target, options, extensions) => { + const currentOptions = assignDeep({}, defaultOptions, validateOptions(options || {}, optionsTemplate, null, true)._validated); + const structureSetup = createStructureSetup(target); + const lifecycleHub = createLifecycleHub(currentOptions, structureSetup); + const instance = { + options(newOptions) { + if (newOptions) { + const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, currentOptions, true); + + if (!isEmptyObject(_changedOptions)) { + assignDeep(currentOptions, _changedOptions); + + lifecycleHub._update(_changedOptions); + } + } + + return currentOptions; + }, + + update(force) { + lifecycleHub._update(null, force); + }, + }; + instance.update(true); + return instance; }; var index = () => { diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index 2aa674a..5a4e34b 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/utils/types.ts","../src/support/dom/attribute.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/class.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../src/support/cache/cache.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/environment/environment.ts","../src/lifecycles/lifecycleBase.ts","../src/lifecycles/structureLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup.ts","../src/overlayscrollbars/overlayscrollbars.ts","../src/index.ts"],"sourcesContent":["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 return 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\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: Array) => unknown {\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) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : 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 ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : 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 ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { 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 | null,\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 | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * 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 | null, 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 | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): 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 | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): 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 | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\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 | void\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 | void\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void\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 | void\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: Array, item: T, fromIndex?: number): number => 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: Array, items: T | ArrayLike, arrayIsSingleItem?: boolean): Array => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items as Array) : 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) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n\r\n each(arr, (elm) => {\r\n push(result, elm);\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: Array | null | undefined) => 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, p1?: unknown): void => {\r\n const runFn = (fn: RunEachItem) => fn && fn(p1);\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 => 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(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): 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 { 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 | null | undefined,\r\n className: string,\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 && 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 = (elm: Element | null | undefined, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\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 */\r\nexport const addClass = (elm: Element | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (classNameA: string | null | undefined, classNameB: string | null | undefined) => {\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 { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | 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 => (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 = (elm: InputElementType, highBoundarySelector: string, deepBoundarySelector: string): 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 | 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 = (parentElm: Node | null | undefined, preferredAnchor: Node | null | undefined, insertedElms: NodeCollection): 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 = (node: Node | null | undefined, insertedNodes: NodeCollection): 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","export interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean => !!(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 | 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 | 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 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 | null | undefined): boolean => (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 = (target: EventTarget, eventNames: string, listener: EventListener, capture?: boolean): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener, 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 = (target: EventTarget, eventNames: string, listener: EventListener, options?: OnOptions): (() => 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: Event) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener;\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) => 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) => evt.preventDefault();\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 = (a: T | undefined, b: T | undefined, props: Array): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n if (a[prop] !== b[prop]) {\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","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 = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\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, or undefined 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 | undefined => {\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 result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return 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 wuthout, or undefined 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 | undefined => {\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 cssCache[name] = result;\r\n return 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('IntersectionObserver');\r\nexport const ResizeObserverConstructor: any | undefined = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\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 timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray } from 'support/utils/types';\r\nimport { PlainObject } 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\ntype CssStyles = { [key: string]: string | number };\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 opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 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 => (!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 ? computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | null | undefined, prop: string, val: string | number): void => {\r\n try {\r\n if (elm && elm.style[prop] !== undefined) {\r\n elm.style[prop] = adaptCSSVal(prop, val);\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(elm: HTMLElement | null | undefined, styles: CssStyles): void;\r\nexport function style(elm: HTMLElement | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(elm: HTMLElement | null | undefined, styles: CssStyles | Array | string): { [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 | null): 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 | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | null | undefined, property?: string): TRBL => {\r\n const finalProp = property || '';\r\n const top = `${finalProp}-top`;\r\n const right = `${finalProp}-right`;\r\n const bottom = `${finalProp}-bottom`;\r\n const left = `${finalProp}-left`;\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 { 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","export interface Cache {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n readonly _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C ? (force?: boolean | 0, context?: C) => Cache : (force: boolean | 0, context: C) => Cache;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): CacheUpdate => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\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 {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return cacheUpdate;\r\n};\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, Func, OptionsValidationResult, OptionsValidated } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\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 options The options object which shall be validated.\r\n * @param template The template according to which the options object 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 options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = 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 validatedResult = validateRecursive(optionsValue, templateValue as PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._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 const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\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 }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\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 options The options object which shall be validated.\r\n * @param template The template according to which the options object 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 */\r\nconst validateOptions = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff?: T | null,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\r\n};\r\n\r\nexport { validateOptions, optionsTemplateTypes };\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","import { OptionsTemplate, OptionsWithOptionsTemplate, OptionsTemplateTypes } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\nimport { isArray } from 'support/utils/types';\r\nimport { each, keys } from 'support/utils';\r\n\r\nexport interface OptionsWithOptionsTemplateTransformation> {\r\n _template: OptionsTemplate;\r\n _options: T;\r\n}\r\n\r\n/**\r\n * Transforms the given OptionsWithOptionsTemplate object to its corresponding generic (T) Object or its corresponding Template object.\r\n * @param optionsWithOptionsTemplate The OptionsWithOptionsTemplate object which shall be converted.\r\n * @param toTemplate True if the given OptionsWithOptionsTemplate shall be converted to its corresponding Template object.\r\n */\r\nexport function transformOptions>(\r\n optionsWithOptionsTemplate: OptionsWithOptionsTemplate\r\n): OptionsWithOptionsTemplateTransformation {\r\n const result: any = {\r\n _template: {},\r\n _options: {},\r\n };\r\n\r\n each(keys(optionsWithOptionsTemplate), (key: Extract) => {\r\n const val: PlainObject | OptionsTemplateTypes | Array = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\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 classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\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","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\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 runEach,\r\n equalWH,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _autoUpdateLoop: boolean;\r\n _nativeScrollbarSize: XY;\r\n _nativeScrollbarIsOverlaid: XY;\r\n _nativeScrollbarStyling: boolean;\r\n _rtlScrollBehavior: { n: boolean; i: boolean };\r\n _flexboxGlue: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { 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 addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = offsetSize(parentElm);\r\n const minOffsetsize = offsetSize(childElm);\r\n const supportsMin = equalWH(minOffsetsize, minOffsetsizeParent);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = offsetSize(parentElm);\r\n const maxOffsetsize = offsetSize(childElm);\r\n const supportsMax = equalWH(maxOffsetsize, maxOffsetsizeParent);\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 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 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\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollBarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollBarSize.x === 0,\r\n y: nativeScrollBarSize.y === 0,\r\n };\r\n\r\n const env: Environment = {\r\n _autoUpdateLoop: false,\r\n _nativeScrollbarSize: nativeScrollBarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: getNativeScrollbarStyling(envElm),\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeAttr(envElm, 'class');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n let scrollbarSize = nativeScrollBarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\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 newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\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 Cache,\r\n OptionsValidated,\r\n OptionsWithOptionsTemplate,\r\n transformOptions,\r\n validateOptions,\r\n assignDeep,\r\n hasOwnProperty,\r\n isEmptyObject,\r\n} from 'support';\r\nimport { PlainObject } from 'typings';\r\n\r\ninterface LifecycleBaseUpdateHints {\r\n _force?: boolean;\r\n _changedOptions?: OptionsValidated;\r\n}\r\n\r\nexport interface LifecycleBase {\r\n _options(newOptions?: O): O;\r\n _update(force?: boolean): void;\r\n}\r\n\r\nexport interface Lifecycle extends LifecycleBase {\r\n _destruct(): void;\r\n _onSizeChanged?(): void;\r\n _onDirectionChanged?(directionCache: Cache): void;\r\n _onTrinsicChanged?(widthIntrinsic: boolean, heightIntrinsicCache: Cache): void;\r\n}\r\n\r\nexport interface LifecycleOptionInfo {\r\n _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\n/**\r\n * Creates a object which can be seen as the base of a lifecycle because it provides all the tools to manage a lifecycle and its options, cache and base functions.\r\n * @param defaultOptionsWithTemplate A object which describes the options and the default options of the lifecycle.\r\n * @param initialOptions The initialOptions for the lifecylce. (Can be undefined)\r\n * @param updateFunction The update function where cache and options updates are handled. Has two arguments which are the changedOptions and the changedCache objects.\r\n */\r\nexport const createLifecycleBase = (\r\n defaultOptionsWithTemplate: OptionsWithOptionsTemplate>,\r\n initialOptions: O | undefined,\r\n updateFunction: (force: boolean, checkOption: LifecycleCheckOption) => any\r\n): LifecycleBase => {\r\n const { _template: optionsTemplate, _options: defaultOptions } = transformOptions>(defaultOptionsWithTemplate);\r\n const options: Required = assignDeep(\r\n {},\r\n defaultOptions,\r\n validateOptions(initialOptions || ({} as O), optionsTemplate, null, true)._validated\r\n );\r\n\r\n const update = (hints: LifecycleBaseUpdateHints) => {\r\n const { _force, _changedOptions } = hints;\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: _force || getPropByPath(_changedOptions, path) !== undefined,\r\n });\r\n updateFunction(!!_force, checkOption);\r\n };\r\n\r\n update({ _force: true });\r\n\r\n return {\r\n _options(newOptions?: O) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, options, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(options, _changedOptions);\r\n update({ _changedOptions });\r\n }\r\n }\r\n return options;\r\n },\r\n _update: (_force?: boolean) => {\r\n update({ _force });\r\n },\r\n };\r\n};\r\n","import {\r\n Cache,\r\n cssProperty,\r\n runEach,\r\n createCache,\r\n topRightBottomLeft,\r\n TRBL,\r\n WH,\r\n XY,\r\n equalTRBL,\r\n equalXY,\r\n optionsTemplateTypes as oTypes,\r\n OptionsTemplateValue,\r\n style,\r\n OptionsWithOptionsTemplate,\r\n scrollSize,\r\n offsetSize,\r\n} from 'support';\r\nimport { PreparedOSTargetObject } from 'setups/structureSetup';\r\nimport { createLifecycleBase, Lifecycle } from 'lifecycles/lifecycleBase';\r\nimport { getEnvironment, Environment } from 'environment';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll';\r\nexport interface StructureLifecycleOptions {\r\n paddingAbsolute: boolean;\r\n overflowBehavior?: {\r\n x?: OverflowBehavior;\r\n y?: OverflowBehavior;\r\n };\r\n}\r\n\r\nconst overflowBehaviorAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate> = {\r\n paddingAbsolute: [false, oTypes.boolean],\r\n overflowBehavior: {\r\n x: ['scroll', overflowBehaviorAllowedValues],\r\n y: ['scroll', overflowBehaviorAllowedValues],\r\n },\r\n};\r\n\r\nconst cssMarginEnd = cssProperty('margin-inline-end');\r\nconst cssBorderEnd = cssProperty('border-inline-end');\r\n\r\nexport const createStructureLifecycle = (\r\n target: PreparedOSTargetObject,\r\n initialOptions?: StructureLifecycleOptions\r\n): Lifecycle => {\r\n const { _host, _padding, _viewport, _content } = target;\r\n const destructFns: (() => any)[] = [];\r\n const env: Environment = getEnvironment();\r\n const scrollbarsOverlaid = env._nativeScrollbarIsOverlaid;\r\n const supportsScrollbarStyling = env._nativeScrollbarStyling;\r\n const supportFlexboxGlue = env._flexboxGlue;\r\n // direction change is only needed to update scrollbar hiding, therefore its not needed if css can do it, scrollbars are invisible or overlaid on y axis\r\n const directionObserverObsolete = (cssMarginEnd && cssBorderEnd) || supportsScrollbarStyling || scrollbarsOverlaid.y;\r\n\r\n const updatePaddingCache = createCache(() => topRightBottomLeft(_host, 'padding'), { _equal: equalTRBL });\r\n const updateOverflowAmountCache = createCache, { _contentScrollSize: WH; _viewportSize: WH }>(\r\n (ctx) => ({\r\n x: Math.max(0, Math.round((ctx!._contentScrollSize.w - ctx!._viewportSize.w) * 100) / 100),\r\n y: Math.max(0, Math.round((ctx!._contentScrollSize.h - ctx!._viewportSize.h) * 100) / 100),\r\n }),\r\n { _equal: equalXY }\r\n );\r\n\r\n const { _options, _update } = createLifecycleBase(defaultOptionsWithTemplate, initialOptions, (force, checkOption) => {\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n const { _value: padding, _changed: paddingChanged } = updatePaddingCache(force);\r\n\r\n if (paddingAbsoluteChanged || paddingChanged) {\r\n const paddingStyle: TRBL = {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n };\r\n\r\n if (!paddingAbsolute) {\r\n paddingStyle.t = -padding!.t;\r\n paddingStyle.r = -(padding!.r + padding!.l);\r\n paddingStyle.b = -(padding!.b + padding!.t);\r\n paddingStyle.l = -padding!.l;\r\n }\r\n\r\n style(_padding, {\r\n top: paddingStyle.t,\r\n left: paddingStyle.l,\r\n 'margin-right': paddingStyle.r,\r\n 'margin-bottom': paddingStyle.b,\r\n 'max-width': `calc(100% + ${paddingStyle.r * -1}px)`,\r\n });\r\n }\r\n\r\n const viewportOffsetSize = offsetSize(_padding);\r\n const contentClientSize = offsetSize(_content);\r\n const contentScrollSize = scrollSize(_content);\r\n const overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: contentScrollSize,\r\n _viewportSize: {\r\n w: viewportOffsetSize.w + Math.max(0, contentClientSize.w - contentScrollSize.w),\r\n h: viewportOffsetSize.h + Math.max(0, contentClientSize.h - contentScrollSize.h),\r\n },\r\n });\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n console.log('overflowAmount', overflowAmount);\r\n console.log('overflowAmountChanged', overflowAmountChanged);\r\n\r\n /*\r\n var setOverflowVariables = function (horizontal) {\r\n var scrollbarVars = getScrollbarVars(horizontal);\r\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\r\n var xyI = scrollbarVarsInverted._x_y;\r\n var xy = scrollbarVars._x_y;\r\n var wh = scrollbarVars._w_h;\r\n var widthHeight = scrollbarVars._width_height;\r\n var scrollMax = _strScroll + scrollbarVars._Left_Top + 'Max';\r\n var fractionalOverflowAmount = viewportRect[widthHeight] ? MATH.abs(viewportRect[widthHeight] - _viewportSize[wh]) : 0;\r\n var checkFractionalOverflowAmount = previousOverflowAmount && previousOverflowAmount[xy] > 0 && _viewportElementNative[scrollMax] === 0;\r\n overflowBehaviorIsVS[xy] = overflowBehavior[xy] === 'v-s';\r\n overflowBehaviorIsVH[xy] = overflowBehavior[xy] === 'v-h';\r\n overflowBehaviorIsS[xy] = overflowBehavior[xy] === 's';\r\n overflowAmount[xy] = MATH.max(0, MATH.round((contentScrollSize[wh] - _viewportSize[wh]) * 100) / 100);\r\n overflowAmount[xy] *=\r\n hideOverflowForceTextarea || (checkFractionalOverflowAmount && fractionalOverflowAmount > 0 && fractionalOverflowAmount < 1) ? 0 : 1;\r\n hasOverflow[xy] = overflowAmount[xy] > 0;\r\n\r\n //hideOverflow:\r\n //x || y : true === overflow is hidden by \"overflow: scroll\" OR \"overflow: hidden\"\r\n //xs || ys : true === overflow is hidden by \"overflow: scroll\"\r\n hideOverflow[xy] =\r\n overflowBehaviorIsVS[xy] || overflowBehaviorIsVH[xy]\r\n ? hasOverflow[xyI] && !overflowBehaviorIsVS[xyI] && !overflowBehaviorIsVH[xyI]\r\n : hasOverflow[xy];\r\n hideOverflow[xy + 's'] = hideOverflow[xy] ? overflowBehaviorIsS[xy] || overflowBehaviorIsVS[xy] : false;\r\n\r\n canScroll[xy] = hasOverflow[xy] && hideOverflow[xy + 's'];\r\n };\r\n*/\r\n /*\r\n if (!supportsScrollbarStyling) {\r\n paddingStyle.r -= env._nativeScrollbarSize.y;\r\n paddingStyle.b -= env._nativeScrollbarSize.x;\r\n }\r\n */\r\n });\r\n\r\n const onSizeChanged = () => {\r\n _update();\r\n };\r\n const onTrinsicChanged = (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => {\r\n const { _changed, _value } = heightIntrinsicCache;\r\n if (_changed) {\r\n style(_content, { height: _value ? 'auto' : '100%' });\r\n }\r\n };\r\n\r\n return {\r\n _options,\r\n _update,\r\n _onSizeChanged: onSizeChanged,\r\n _onTrinsicChanged: onTrinsicChanged,\r\n _destruct() {\r\n runEach(destructFns);\r\n },\r\n };\r\n};\r\n","import {\r\n Cache,\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 preventDefault,\r\n stopPropagation,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n indexOf,\r\n each,\r\n isBoolean,\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\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTLMap = {\r\n direction: ['rtl'],\r\n // 'writing-mode': ['sideways-rl', 'tb', 'tb-rl', 'vertical-rl'],\r\n};\r\nconst directionIsRTL = (elm: HTMLElement): boolean => {\r\n let isRTL = false;\r\n const styles = style(elm, ['direction' /* , 'writing-mode' */]);\r\n each(styles, (value, key) => {\r\n isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1;\r\n });\r\n return isRTL;\r\n};\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\ninterface SizeObserverEntry {\r\n contentRect: DOMRectReadOnly;\r\n}\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionIsRTLCache?: Cache) => any,\r\n options?: SizeObserverOptions\r\n): (() => void) => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const rtlScrollBehavior = getEnvironment()._rtlScrollBehavior;\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const updateResizeObserverContentRectCache = createCache(0, {\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 = (sizeChangedContext?: Cache | SizeObserverEntry[] | Event) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as Cache)._value);\r\n\r\n let skip = 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 (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as Cache)._changed; // direction scroll when DirectionCache changed, false toherwise\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const rtl = hasDirectionCache ? (sizeChangedContext as Cache)._value : directionIsRTL(sizeObserver);\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(hasDirectionCache ? (sizeChangedContext as Cache) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : false;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\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(listenerElement);\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 = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n } else if (!scrollEvent) {\r\n onResized();\r\n }\r\n\r\n reset();\r\n\r\n if (scrollEvent) {\r\n preventDefault(scrollEvent);\r\n stopPropagation(scrollEvent);\r\n }\r\n return false;\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\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 reset();\r\n appearCallback = observeAppearChange ? () => onScroll() : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const updateDirectionIsRTLCache = createCache(() => directionIsRTL(sizeObserver));\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCache = updateDirectionIsRTLCache();\r\n const { _value, _changed } = directionIsRTLCache;\r\n if (_changed) {\r\n if (_value) {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCache);\r\n }\r\n\r\n preventDefault(event);\r\n stopPropagation(event);\r\n return false;\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 Cache,\r\n createDOM,\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 const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => any\r\n): (() => void) => {\r\n const trinsicObserver = createDOM(`
`)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n const updateHeightIntrinsicCache = createCache>(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\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 const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(false, heightIntrinsicCache);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n push(\r\n offListeners,\r\n createSizeObserver(trinsicObserver, () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(false, heightIntrinsicCache);\r\n }\r\n })\r\n );\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 off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined>\r\n | false\r\n | null\r\n | undefined;\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMObserverOptions | undefined\r\n) => boolean;\r\nexport type DOMObserverIgnoreTargetAttrChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\nexport interface DOMObserverOptions {\r\n _observeContent?: boolean; // do observe children and trigger content change\r\n _attributes?: string[]; // observed attributes\r\n _styleChangingAttributes?: string[]; // list of attributes that trigger a contentChange or a targetStyleChange if changed\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname]\r\n _nestedTargetSelector?: string;\r\n _ignoreTargetAttrChange?: DOMObserverIgnoreTargetAttrChange;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange;\r\n}\r\nexport interface DOMObserver {\r\n _disconnect: () => void;\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n _update: () => void;\r\n}\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\nconst createEventContentChange = (\r\n target: Element,\r\n eventContentChange: DOMObserverEventContentChange,\r\n map: Map,\r\n callback: (...args: any) => any\r\n) => {\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const addEvent = (elm: Node, eventName: string) => {\r\n const entry = map.get(elm);\r\n const newEntry = isUndefined(entry);\r\n const registerEvent = () => {\r\n map.set(elm, eventName);\r\n on(elm, eventName, callback);\r\n };\r\n\r\n if (!newEntry && eventName !== entry) {\r\n off(elm, entry!, callback);\r\n registerEvent();\r\n } else if (newEntry) {\r\n registerEvent();\r\n }\r\n };\r\n const _destroy = () => {\r\n map.forEach((eventName: string, elm: Node) => {\r\n off(elm, eventName, callback);\r\n });\r\n map.clear();\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventName = item[1];\r\n const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements) {\r\n push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName!], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) => {\r\n const elements = item[0];\r\n const eventName = item[1];\r\n\r\n each(elements, (elm) => {\r\n addEvent(elm, eventName);\r\n });\r\n });\r\n }\r\n };\r\n const _update = (newEventContentChange: DOMObserverEventContentChange) => {\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _update(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _update,\r\n };\r\n};\r\n\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n callback: (targetChangedAttrs: string[], targetStyleChanged: boolean, contentChanged: boolean) => any,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _observeContent,\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetAttrChange: _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = options || {};\r\n const {\r\n _updateElements: updateEventContentChangeElements,\r\n _destroy: destroyEventContentChange,\r\n _update: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n _observeContent && _eventContentChange,\r\n new Map(),\r\n debounce(() => {\r\n if (isConnected) {\r\n callback([], false, true);\r\n }\r\n }, 80)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); // TODO: observer textarea attrs if textarea\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 = isAttributesType && isString(attributeName) ? attr(mutationTarget as HTMLElement, attributeName!) : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const targetAttrChanged =\r\n attributeChanged &&\r\n targetIsMutationTarget &&\r\n !_observeContent &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null);\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n if (targetAttrChanged) {\r\n push(targetChangedAttrs, attributeName!);\r\n }\r\n if (_observeContent) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget;\r\n const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged = 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 targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged);\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\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 if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) {\r\n callback(targetChangedAttrs, targetStyleChanged, contentChanged);\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: _observeContent,\r\n childList: _observeContent,\r\n characterData: _observeContent,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _disconnect: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && _observeContent && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n };\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 isUndefined,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n} from 'support';\r\nimport { classNameHost, classNamePadding, classNameViewport, classNameContent } from 'classnames';\r\nimport { OSTarget, OSTargetObject, InternalVersionOf, OSTargetElement } from 'typings';\r\n\r\nexport interface OSTargetContext {\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: HTMLDocument;\r\n}\r\n\r\nexport interface PreparedOSTargetObject extends Required> {\r\n _host: HTMLElement;\r\n}\r\n\r\nexport interface StructureSetup {\r\n _targetObj: PreparedOSTargetObject;\r\n _targetCtx: OSTargetContext;\r\n _destroy: () => void;\r\n}\r\n\r\nconst unwrap = (elm: HTMLElement | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: InternalVersionOf = targetIsElm\r\n ? ({} as InternalVersionOf)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _padding: (target as OSTargetObject).padding,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _content: (target as OSTargetObject).content,\r\n };\r\n\r\n if (targetIsElm) {\r\n const padding = createDiv(classNamePadding);\r\n const viewport = createDiv(classNameViewport);\r\n const content = createDiv(classNameContent);\r\n\r\n appendChildren(padding, viewport);\r\n appendChildren(viewport, content);\r\n\r\n osTargetObj._target = target as OSTargetElement;\r\n osTargetObj._padding = padding;\r\n osTargetObj._viewport = viewport;\r\n osTargetObj._content = content;\r\n }\r\n\r\n let { _target, _padding, _viewport, _content } = osTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextarea = is(_target, 'textarea');\r\n const isBody = !isTextarea && is(_target, 'body');\r\n const _host = (isTextarea ? osTargetObj._host || createDiv() : _target) as HTMLElement;\r\n const getTargetContents = (contentSlot: HTMLElement) => (isTextarea ? (_target as HTMLTextAreaElement) : contents(contentSlot as HTMLElement));\r\n const isTextareaHostGenerated = isTextarea && _host !== osTargetObj._host;\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 if (targetIsElm) {\r\n appendChildren(_content!, getTargetContents(_target));\r\n appendChildren(_host, _padding);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(_content));\r\n removeElements(_padding);\r\n removeClass(_host, classNameHost);\r\n });\r\n } else {\r\n const contentContainingElm = _content || _viewport || _padding || _host;\r\n const createPadding = isUndefined(_padding);\r\n const createViewport = isUndefined(_viewport);\r\n const createContent = isUndefined(_content);\r\n const targetContents = getTargetContents(contentContainingElm);\r\n\r\n _padding = osTargetObj._padding = createPadding ? createDiv() : _padding;\r\n _viewport = osTargetObj._viewport = createViewport ? createDiv() : _viewport;\r\n _content = osTargetObj._content = createContent ? createDiv() : _content;\r\n\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, targetContents);\r\n\r\n push(destroyFns, () => {\r\n if (createContent) {\r\n unwrap(_content);\r\n }\r\n if (createViewport) {\r\n unwrap(_viewport);\r\n }\r\n if (createPadding) {\r\n unwrap(_padding);\r\n }\r\n removeClass(_host, classNameHost);\r\n removeClass(_padding, classNamePadding);\r\n removeClass(_viewport, classNameViewport);\r\n removeClass(_content, classNameContent);\r\n });\r\n }\r\n\r\n addClass(_host, classNameHost);\r\n addClass(_padding, classNamePadding);\r\n addClass(_viewport, classNameViewport);\r\n addClass(_content, classNameContent);\r\n\r\n const ownerDocument: HTMLDocument = _target.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const ctx: OSTargetContext = {\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 };\r\n // @ts-ignore\r\n const obj: PreparedOSTargetObject = {\r\n ...osTargetObj,\r\n _host,\r\n };\r\n\r\n return {\r\n _targetObj: obj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\nimport { createStructureLifecycle } from 'lifecycles/structureLifecycle';\r\nimport { Cache, each, push } from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { Lifecycle } from 'lifecycles/lifecycleBase';\r\n\r\nconst OverlayScrollbars = (target: OSTarget | OSTargetObject, options?: any, extensions?: any): void => {\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycles: Lifecycle[] = [];\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n\r\n push(lifecycles, createStructureLifecycle(structureSetup._targetObj));\r\n\r\n // eslint-disable-next-line\r\n const onSizeChanged = (directionCache?: Cache) => {\r\n if (directionCache) {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onDirectionChanged && lifecycle._onDirectionChanged(directionCache);\r\n });\r\n } else {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onSizeChanged && lifecycle._onSizeChanged();\r\n });\r\n }\r\n };\r\n const onTrinsicChanged = (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onTrinsicChanged && lifecycle._onTrinsicChanged(widthIntrinsic, heightIntrinsicCache);\r\n });\r\n };\r\n\r\n createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: true });\r\n createTrinsicObserver(_host, onTrinsicChanged);\r\n createDOMObserver(_host, () => {\r\n return null;\r\n });\r\n createDOMObserver(\r\n _content || _viewport,\r\n () => {\r\n return null;\r\n },\r\n { _observeContent: true }\r\n );\r\n};\r\n\r\nexport { OverlayScrollbars };\r\n","import { createDOM } from 'support/dom';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverlayScrollbars } from 'overlayscrollbars/overlayscrollbars';\r\n\r\nconst abc = {\r\n a: 1,\r\n b: 1,\r\n c: 1,\r\n};\r\n\r\nexport default () => {\r\n return [\r\n getEnvironment(),\r\n OverlayScrollbars(document.body),\r\n createDOM(\r\n '\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n fdfhdfgh\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
'\r\n ),\r\n ];\r\n};\r\n"],"names":["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","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertAfter","insertedNodes","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","options","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","equalWH","equalXY","equalTRBL","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","style","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","property","finalProp","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","createCache","update","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","environmentInstance","abs","round","Math","getNativeScrollbarSize","body","measureElm","cSize","oSize","getNativeScrollbarStyling","testElm","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollBarSize","nativeScrollbarIsOverlaid","env","_autoUpdateLoop","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","getPropByPath","path","o","createLifecycleBase","defaultOptionsWithTemplate","initialOptions","updateFunction","optionsTemplate","defaultOptions","hints","_force","_changedOptions","checkOption","newOptions","_update","overflowBehaviorAllowedValues","paddingAbsolute","oTypes","boolean","overflowBehavior","cssMarginEnd","cssBorderEnd","createStructureLifecycle","_host","_padding","_viewport","_content","destructFns","scrollbarsOverlaid","supportsScrollbarStyling","supportFlexboxGlue","directionObserverObsolete","updatePaddingCache","updateOverflowAmountCache","ctx","max","_contentScrollSize","_viewportSize","paddingAbsoluteChanged","padding","paddingChanged","paddingStyle","viewportOffsetSize","contentClientSize","contentScrollSize","overflowAmuntCache","overflowAmount","overflowAmountChanged","log","onSizeChanged","onTrinsicChanged","widthIntrinsic","heightIntrinsicCache","height","_onSizeChanged","_onTrinsicChanged","_destruct","animationStartEventName","scrollEventName","scrollAmount","directionIsRTLMap","directionIsRTL","isRTL","domRectHasDimensions","width","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","pop","contentRect","doDirectionScroll","rtl","appearCallback","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCache","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","intersectionObserverInstance","entries","last","root","newSize","createEventContentChange","eventContentChange","map","eventContentChangeRef","addEvent","entry","newEntry","registerEvent","_destroy","clear","_updateElements","getElements","eventElmList","elements","newEventContentChange","createDOMObserver","isConnected","_observeContent","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetAttrChange","_ignoreTargetChange","_ignoreContentChange","updateEventContentChangeElements","destroyEventContentChange","updateEventContentChange","Map","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","targetAttrChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","_disconnect","_updateEventContentChange","takeRecords","unwrap","createStructureSetup","targetIsElm","osTargetObj","host","_target","viewport","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetObj","_targetCtx","OverlayScrollbars","extensions","structureSetup","lifecycles","directionCache","lifecycle","_onDirectionChanged"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/utils/types.ts","../src/support/dom/attribute.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/class.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../src/support/cache/cache.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/environment/environment.ts","../src/setups/structureSetup.ts","../src/lifecycles/lifecycleUpdateFunction.ts","../src/lifecycles/overflowLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHub.ts","../src/options/options.ts","../src/overlayscrollbars/overlayscrollbars.ts","../src/index.ts"],"sourcesContent":["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 return 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\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: Array) => unknown {\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) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : 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 ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : 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 ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { 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 | null,\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 | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * 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 | null, 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 | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): 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 | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): 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 | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\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 | void\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 | void\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void\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 | void\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: Array, item: T, fromIndex?: number): number => 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: Array, items: T | ArrayLike, arrayIsSingleItem?: boolean): Array => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items as Array) : 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) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n\r\n each(arr, (elm) => {\r\n push(result, elm);\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: Array | null | undefined) => 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, p1?: unknown): void => {\r\n const runFn = (fn: RunEachItem) => fn && fn(p1);\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 => 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(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): 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 { 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 | null | undefined,\r\n className: string,\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 && 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 = (elm: Element | null | undefined, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\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 */\r\nexport const addClass = (elm: Element | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (classNameA: string | null | undefined, classNameB: string | null | undefined) => {\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 { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | 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 => (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 = (elm: InputElementType, highBoundarySelector: string, deepBoundarySelector: string): 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 | 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 = (parentElm: Node | null | undefined, preferredAnchor: Node | null | undefined, insertedElms: NodeCollection): 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 = (node: Node | null | undefined, insertedNodes: NodeCollection): 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","export interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean => !!(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 | 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 | 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 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 | null | undefined): boolean => (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 = (target: EventTarget, eventNames: string, listener: (event: T) => any, capture?: boolean): 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) => 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) => evt.preventDefault();\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 = (a: T | undefined, b: T | undefined, props: Array): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n if (a[prop] !== b[prop]) {\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","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 = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\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, or undefined 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 | undefined => {\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 result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return 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 wuthout, or undefined 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 | undefined => {\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 cssCache[name] = result;\r\n return 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('IntersectionObserver');\r\nexport const ResizeObserverConstructor: any | undefined = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\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 timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray } from 'support/utils/types';\r\nimport { PlainObject } 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\ntype CssStyles = { [key: string]: string | number };\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 opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 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 => (!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 ? computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | null | undefined, prop: string, val: string | number): void => {\r\n try {\r\n if (elm && elm.style[prop] !== undefined) {\r\n elm.style[prop] = adaptCSSVal(prop, val);\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(elm: HTMLElement | null | undefined, styles: CssStyles): void;\r\nexport function style(elm: HTMLElement | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(elm: HTMLElement | null | undefined, styles: CssStyles | Array | string): { [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 | null): 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 | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | null | undefined, property?: string): TRBL => {\r\n const finalProp = property || '';\r\n const top = `${finalProp}-top`;\r\n const right = `${finalProp}-right`;\r\n const bottom = `${finalProp}-bottom`;\r\n const left = `${finalProp}-left`;\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 { 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","export interface CacheValues {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport interface Cache {\r\n _current: (force?: boolean) => CacheValues;\r\n _update: CacheUpdate;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C\r\n ? (force?: boolean | 0, context?: C) => CacheValues\r\n : (force: boolean | 0, context: C) => CacheValues;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): Cache => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\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 {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return {\r\n _update: cacheUpdate,\r\n _current: (force?: boolean) => ({\r\n _value,\r\n _previous,\r\n _changed: !!force,\r\n }),\r\n };\r\n};\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, Func, OptionsValidationResult, OptionsValidated } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\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 options The options object which shall be validated.\r\n * @param template The template according to which the options object 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 options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = 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 validatedResult = validateRecursive(optionsValue, templateValue as PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._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 const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\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 }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\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 options The options object which shall be validated.\r\n * @param template The template according to which the options object 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 */\r\nconst validateOptions = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff?: T | null,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\r\n};\r\n\r\nexport { validateOptions, optionsTemplateTypes };\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","import { OptionsTemplate, OptionsWithOptionsTemplate, OptionsTemplateTypes } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\nimport { isArray } from 'support/utils/types';\r\nimport { each, keys } from 'support/utils';\r\n\r\nexport interface OptionsWithOptionsTemplateTransformation> {\r\n _template: OptionsTemplate;\r\n _options: T;\r\n}\r\n\r\n/**\r\n * Transforms the given OptionsWithOptionsTemplate object to its corresponding generic (T) Object or its corresponding Template object.\r\n * @param optionsWithOptionsTemplate The OptionsWithOptionsTemplate object which shall be converted.\r\n * @param toTemplate True if the given OptionsWithOptionsTemplate shall be converted to its corresponding Template object.\r\n */\r\nexport function transformOptions>(\r\n optionsWithOptionsTemplate: OptionsWithOptionsTemplate\r\n): OptionsWithOptionsTemplateTransformation {\r\n const result: any = {\r\n _template: {},\r\n _options: {},\r\n };\r\n\r\n each(keys(optionsWithOptionsTemplate), (key: Extract) => {\r\n const val: PlainObject | OptionsTemplateTypes | Array = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\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 classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameContent = 'os-content';\r\nexport const classNameContentArrange = `${classNameContent}-arrange`;\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\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","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\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 runEach,\r\n equalWH,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _autoUpdateLoop: boolean;\r\n _nativeScrollbarSize: XY;\r\n _nativeScrollbarIsOverlaid: XY;\r\n _nativeScrollbarStyling: boolean;\r\n _rtlScrollBehavior: { n: boolean; i: boolean };\r\n _flexboxGlue: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { 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 addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = offsetSize(parentElm);\r\n const minOffsetsize = offsetSize(childElm);\r\n const supportsMin = equalWH(minOffsetsize, minOffsetsizeParent);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = offsetSize(parentElm);\r\n const maxOffsetsize = offsetSize(childElm);\r\n const supportsMax = equalWH(maxOffsetsize, maxOffsetsizeParent);\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 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 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\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = false; //getNativeScrollbarStyling(envElm); TODO: Re-enable\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n\r\n const env: Environment = {\r\n _autoUpdateLoop: false,\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\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 let scrollbarSize = nativeScrollbarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\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 newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\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 isUndefined,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n prependChildren,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameContent,\r\n classNameContentArrange,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, InternalVersionOf, OSTargetElement } from 'typings';\r\n\r\nexport interface OSTargetContext {\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: HTMLDocument;\r\n}\r\n\r\nexport interface PreparedOSTargetObject extends Required> {\r\n _host: HTMLElement;\r\n _contentArrange: HTMLElement | null;\r\n}\r\n\r\nexport interface StructureSetup {\r\n _targetObj: PreparedOSTargetObject;\r\n _targetCtx: OSTargetContext;\r\n _destroy: () => void;\r\n}\r\n\r\nconst unwrap = (elm: HTMLElement | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: InternalVersionOf = targetIsElm\r\n ? ({} as InternalVersionOf)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _padding: (target as OSTargetObject).padding,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _content: (target as OSTargetObject).content,\r\n };\r\n\r\n if (targetIsElm) {\r\n const padding = createDiv(classNamePadding);\r\n const viewport = createDiv(classNameViewport);\r\n const content = createDiv(classNameContent);\r\n\r\n appendChildren(padding, viewport);\r\n appendChildren(viewport, content);\r\n\r\n osTargetObj._target = target as OSTargetElement;\r\n osTargetObj._padding = padding;\r\n osTargetObj._viewport = viewport;\r\n osTargetObj._content = content;\r\n }\r\n\r\n let { _target, _padding, _viewport, _content } = osTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextarea = is(_target, 'textarea');\r\n const isBody = !isTextarea && is(_target, 'body');\r\n const _host = (isTextarea ? osTargetObj._host || createDiv() : _target) as HTMLElement;\r\n const getTargetContents = (contentSlot: HTMLElement) => (isTextarea ? (_target as HTMLTextAreaElement) : contents(contentSlot as HTMLElement));\r\n const isTextareaHostGenerated = isTextarea && _host !== osTargetObj._host;\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 if (targetIsElm) {\r\n appendChildren(_content!, getTargetContents(_target));\r\n appendChildren(_host, _padding);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(_content));\r\n removeElements(_padding);\r\n removeClass(_host, classNameHost);\r\n });\r\n } else {\r\n const contentContainingElm = _content || _viewport || _padding || _host;\r\n const createPadding = isUndefined(_padding);\r\n const createViewport = isUndefined(_viewport);\r\n const createContent = isUndefined(_content);\r\n const targetContents = getTargetContents(contentContainingElm);\r\n\r\n _padding = osTargetObj._padding = createPadding ? createDiv() : _padding;\r\n _viewport = osTargetObj._viewport = createViewport ? createDiv() : _viewport;\r\n _content = osTargetObj._content = createContent ? createDiv() : _content;\r\n\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, targetContents);\r\n\r\n push(destroyFns, () => {\r\n if (createContent) {\r\n unwrap(_content);\r\n }\r\n if (createViewport) {\r\n unwrap(_viewport);\r\n }\r\n if (createPadding) {\r\n unwrap(_padding);\r\n }\r\n removeClass(_host, classNameHost);\r\n removeClass(_padding, classNamePadding);\r\n removeClass(_viewport, classNameViewport);\r\n removeClass(_content, classNameContent);\r\n });\r\n }\r\n\r\n addClass(_host, classNameHost);\r\n addClass(_padding, classNamePadding);\r\n addClass(_viewport, classNameViewport);\r\n addClass(_content, classNameContent);\r\n\r\n const ownerDocument: HTMLDocument = _target.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const ctx: OSTargetContext = {\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 };\r\n // @ts-ignore\r\n const obj: PreparedOSTargetObject = {\r\n ...osTargetObj,\r\n _host,\r\n };\r\n\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y) {\r\n if (obj._content) {\r\n const contentArrangeElm = createDiv(classNameContentArrange);\r\n\r\n prependChildren(_viewport, contentArrangeElm);\r\n push(destroyFns, removeElements.bind(0, contentArrangeElm));\r\n\r\n obj._contentArrange = contentArrangeElm;\r\n }\r\n }\r\n\r\n return {\r\n _targetObj: obj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { CacheValues, OptionsValidated, hasOwnProperty } from 'support';\r\nimport { Options } from 'options';\r\nimport { LifecycleHub } from 'lifecycles/lifecycleHub';\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nexport interface LifecycleUpdateHints extends LifecycleAdaptiveUpdateHints {\r\n _directionIsRTL: CacheValues;\r\n _heightIntrinsic: CacheValues;\r\n}\r\n\r\nexport type LifecycleUpdateFunction = (\r\n updateHints: LifecycleUpdateHints,\r\n changedOptions?: OptionsValidated | null,\r\n force?: boolean\r\n) => Partial;\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\n/**\r\n * Creates a update function for a lifecycle.\r\n * @param lifecycleHub The LifecycleHub which is managing this lifecylce.\r\n * @param updateFunction The update function where cache and options updates are handled. Has two arguments which are the changedOptions and the changedCache objects.\r\n */\r\nexport const createLifecycleUpdateFunction = (\r\n lifecycleHub: LifecycleHub,\r\n updateFunction: (\r\n force: boolean,\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption\r\n ) => Partial | void\r\n): LifecycleUpdateFunction => {\r\n return (updateHints: LifecycleUpdateHints, changedOptions?: OptionsValidated | null, force?: boolean) => {\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(lifecycleHub._options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n return updateFunction(!!force, updateHints, checkOption) || {};\r\n };\r\n};\r\n","import {\r\n createCache,\r\n WH,\r\n XY,\r\n equalXY,\r\n style,\r\n scrollSize,\r\n offsetSize,\r\n CacheValues,\r\n equalWH,\r\n scrollLeft,\r\n scrollTop,\r\n addClass,\r\n removeClass,\r\n} from 'support';\r\nimport { createLifecycleUpdateFunction, LifecycleUpdateFunction } from 'lifecycles/lifecycleUpdateFunction';\r\nimport { LifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { PlainObject } from 'typings';\r\nimport { classNameViewportScrollbarStyling } from 'classnames';\r\n\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst overlaidScrollbarsHideBorderStyle = `${overlaidScrollbarsHideOffset}px solid transparent`;\r\ninterface OverflowAmountCacheContext {\r\n _contentScrollSize: WH;\r\n _viewportSize: WH;\r\n}\r\n\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): LifecycleUpdateFunction => {\r\n const { _host, _padding, _viewport, _content, _contentArrange } = lifecycleHub._structureSetup._targetObj;\r\n const { _update: updateContentScrollSizeCache, _current: getCurrentContentScrollSizeCache } = createCache>(\r\n () => scrollSize(_content || _viewport),\r\n { _equal: equalWH }\r\n );\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n (ctx) => ({\r\n x: Math.max(0, Math.round((ctx._contentScrollSize.w - ctx._viewportSize.w) * 100) / 100),\r\n y: Math.max(0, Math.round((ctx._contentScrollSize.h - ctx._viewportSize.h) * 100) / 100),\r\n }),\r\n { _equal: equalXY }\r\n );\r\n\r\n const setViewportOverflowStyle = (horizontal: boolean, amount: number, behavior: OverflowBehavior, styleObj: PlainObject) => {\r\n const overflowKey = horizontal ? 'overflowX' : 'overflowY';\r\n //const scrollMaxKey = horizontal ? 'scrollLeftMax' : 'scrollTopMax';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n const behaviorIsVisibleScroll = behavior === 'visible-scroll';\r\n const hideOverflow = behaviorIsScroll || behavior === 'hidden';\r\n //const scrollMax = _viewport[scrollMaxKey];\r\n //const scrollMaxOverflow = isNumber(scrollMax) ? scrollMax > 0 : true;\r\n const applyStyle = amount > 0 && hideOverflow;\r\n\r\n if (applyStyle) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: !applyStyle,\r\n _behavior: behaviorIsVisibleScroll ? 'scroll' : 'hidden',\r\n };\r\n };\r\n\r\n const hideNativeScrollbars = (\r\n contentScrollSize: WH,\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportStyleObj: PlainObject,\r\n contentStyleObj: PlainObject\r\n ) => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const scrollX = viewportStyleObj.overflowX === 'scroll';\r\n const scrollY = viewportStyleObj.overflowY === 'scroll';\r\n const horizontalMarginKey = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const horizontalBorderKey = directionIsRTL ? 'borderLeft' : 'borderRight';\r\n const overlaidHideOffset = _content && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const scrollbarsHideOffset = {\r\n x: overlaidX ? overlaidHideOffset : _nativeScrollbarSize.x,\r\n y: overlaidY ? overlaidHideOffset : _nativeScrollbarSize.y,\r\n };\r\n\r\n if (!_nativeScrollbarStyling) {\r\n if (scrollX) {\r\n viewportStyleObj.marginBottom = -scrollbarsHideOffset.x;\r\n\r\n contentStyleObj.borderBottom = overlaidX && overlaidHideOffset ? overlaidScrollbarsHideBorderStyle : '';\r\n }\r\n if (scrollY) {\r\n viewportStyleObj.maxWidth = `calc(100% + ${scrollbarsHideOffset.y}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -scrollbarsHideOffset.y;\r\n\r\n contentStyleObj[horizontalBorderKey] = overlaidY && overlaidHideOffset ? overlaidScrollbarsHideBorderStyle : '';\r\n }\r\n\r\n if (_contentArrange) {\r\n style(_contentArrange, {\r\n width: scrollY && !showNativeOverlaidScrollbars ? overlaidHideOffset + contentScrollSize.w : '',\r\n height: scrollX && !showNativeOverlaidScrollbars ? overlaidHideOffset + contentScrollSize.h : '',\r\n });\r\n }\r\n }\r\n\r\n return {\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n _scroll: {\r\n x: scrollX,\r\n y: scrollY,\r\n },\r\n };\r\n };\r\n\r\n const setFlexboxGlueStyle = (heightIntrinsic: boolean, scrollX: boolean, scrollbarsHideOffsetX: number) => {\r\n const offsetLeft = scrollLeft(_viewport);\r\n const offsetTop = scrollTop(_viewport);\r\n\r\n style(_viewport, {\r\n maxHeight: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n style(_viewport, {\r\n maxHeight: _host.clientHeight + (scrollX ? scrollbarsHideOffsetX : 0),\r\n });\r\n }\r\n\r\n scrollLeft(_viewport, offsetLeft);\r\n scrollTop(_viewport, offsetTop);\r\n };\r\n\r\n return createLifecycleUpdateFunction(lifecycleHub, (force, updateHints, checkOption) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const adjustFlexboxGlue = !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged);\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache();\r\n let contentScrollSizeCache: CacheValues> = getCurrentContentScrollSizeCache();\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n if (showNativeOverlaidScrollbars) {\r\n removeClass(_viewport, classNameViewportScrollbarStyling);\r\n } else {\r\n addClass(_viewport, classNameViewportScrollbarStyling);\r\n }\r\n }\r\n\r\n if (_sizeChanged || _contentMutation) {\r\n const viewportOffsetSize = offsetSize(_padding);\r\n const contentClientSize = offsetSize(_content || _viewport);\r\n const contentArrangeOffsetSize = offsetSize(_contentArrange);\r\n\r\n contentScrollSizeCache = updateContentScrollSizeCache(force);\r\n const { _value: contentScrollSize } = contentScrollSizeCache;\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: {\r\n w: Math.max(contentScrollSize!.w, contentArrangeOffsetSize.w),\r\n h: Math.max(contentScrollSize!.h, contentArrangeOffsetSize.h),\r\n },\r\n _viewportSize: {\r\n w: viewportOffsetSize.w + Math.max(0, contentClientSize.w - contentScrollSize!.w),\r\n h: viewportOffsetSize.h + Math.max(0, contentClientSize.h - contentScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = contentScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n const { _value: overflow, _changed: overflowChanged } = checkOption<{\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n }>('overflow');\r\n const adjustDirection = directionChanged && !_nativeScrollbarStyling;\r\n\r\n if (\r\n contentScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustDirection ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: PlainObject = {\r\n overflowY: '',\r\n overflowX: '',\r\n marginTop: '',\r\n marginRight: '',\r\n marginBottom: '',\r\n marginLeft: '',\r\n maxWidth: '',\r\n };\r\n const contentStyle: PlainObject = {\r\n borderTop: '',\r\n borderRight: '',\r\n borderBottom: '',\r\n borderLeft: '',\r\n };\r\n\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setViewportOverflowStyle(true, overflowAmount!.x, overflow.x, viewportStyle);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setViewportOverflowStyle(false, overflowAmount!.y, overflow.y, viewportStyle);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyle.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyle.overflowY = yVisibleBehavior;\r\n }\r\n\r\n const { _scrollbarsHideOffset, _scroll } = hideNativeScrollbars(\r\n contentScrollSize!,\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL!,\r\n viewportStyle,\r\n contentStyle\r\n );\r\n\r\n if (adjustFlexboxGlue) {\r\n setFlexboxGlueStyle(!!_heightIntrinsic._value, _scroll.x, _scrollbarsHideOffset.x);\r\n }\r\n\r\n // TODO: enlargen viewport if div too small for firefox scrollbar hiding behavior\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n // TODO: hide host || padding overflow if scroll x or y\r\n\r\n style(_viewport, viewportStyle);\r\n style(_content, contentStyle);\r\n }\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 preventDefault,\r\n stopPropagation,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n indexOf,\r\n each,\r\n isBoolean,\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\ninterface SizeObserverEntry {\r\n contentRect: DOMRectReadOnly;\r\n}\r\n\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\n\r\nexport interface SizeObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _directionIsRTL: CacheValues;\r\n };\r\n}\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTLMap = {\r\n direction: ['rtl'],\r\n // 'writing-mode': ['sideways-rl', 'tb', 'tb-rl', 'vertical-rl'],\r\n};\r\nconst directionIsRTL = (elm: HTMLElement): boolean => {\r\n let isRTL = false;\r\n const styles = style(elm, ['direction' /* , 'writing-mode' */]);\r\n each(styles, (value, key) => {\r\n isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1;\r\n });\r\n return isRTL;\r\n};\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionIsRTLCache?: CacheValues) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const { _update: updateResizeObserverContentRectCache } = createCache(0, {\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 = (sizeChangedContext?: CacheValues | SizeObserverEntry[] | Event) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as CacheValues)._value);\r\n\r\n let skip = 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 (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as CacheValues)._changed; // direction scroll when DirectionCache changed, false toherwise\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const rtl = hasDirectionCache ? (sizeChangedContext as CacheValues)._value : directionIsRTL(sizeObserver);\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : 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, () => resizeObserverInstance.disconnect());\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(listenerElement);\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 = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n } else if (!scrollEvent) {\r\n onResized();\r\n }\r\n\r\n reset();\r\n\r\n if (scrollEvent) {\r\n preventDefault(scrollEvent);\r\n stopPropagation(scrollEvent);\r\n }\r\n return false;\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\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 reset();\r\n appearCallback = observeAppearChange ? () => onScroll() : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(() => directionIsRTL(sizeObserver));\r\n const { _update: updateDirectionIsRTLCache } = directionIsRTLCache;\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n if (_value) {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n preventDefault(event);\r\n stopPropagation(event);\r\n return false;\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 _destroy() {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _directionIsRTL: directionIsRTLCache\r\n ? directionIsRTLCache._current(force)\r\n : {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n },\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDOM,\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 interface TrinsicObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _heightIntrinsic: CacheValues;\r\n };\r\n}\r\n\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDOM(`
`)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n const { _update: updateHeightIntrinsicCache, _current: getCurrentHeightIntrinsicCache } = createCache<\r\n boolean,\r\n IntersectionObserverEntry | WH\r\n >(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\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 const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsic._changed) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n push(\r\n offListeners,\r\n createSizeObserver(trinsicObserver, () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n })._destroy\r\n );\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _heightIntrinsic: getCurrentHeightIntrinsicCache(force),\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined>\r\n | false\r\n | null\r\n | undefined;\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMObserverOptions | undefined\r\n) => boolean;\r\nexport type DOMObserverIgnoreTargetAttrChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\nexport interface DOMObserverOptions {\r\n _observeContent?: boolean; // do observe children and trigger content change\r\n _attributes?: string[]; // observed attributes\r\n _styleChangingAttributes?: string[]; // list of attributes that trigger a contentChange or a targetStyleChange if changed\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname]\r\n _nestedTargetSelector?: string;\r\n _ignoreTargetAttrChange?: DOMObserverIgnoreTargetAttrChange;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange;\r\n}\r\nexport interface DOMObserver {\r\n _disconnect: () => void;\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n _update: () => void;\r\n}\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\nconst createEventContentChange = (\r\n target: Element,\r\n eventContentChange: DOMObserverEventContentChange,\r\n map: Map,\r\n callback: (...args: any) => any\r\n) => {\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const addEvent = (elm: Node, eventName: string) => {\r\n const entry = map.get(elm);\r\n const newEntry = isUndefined(entry);\r\n const registerEvent = () => {\r\n map.set(elm, eventName);\r\n on(elm, eventName, callback);\r\n };\r\n\r\n if (!newEntry && eventName !== entry) {\r\n off(elm, entry!, callback);\r\n registerEvent();\r\n } else if (newEntry) {\r\n registerEvent();\r\n }\r\n };\r\n const _destroy = () => {\r\n map.forEach((eventName: string, elm: Node) => {\r\n off(elm, eventName, callback);\r\n });\r\n map.clear();\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventName = item[1];\r\n const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements) {\r\n push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName!], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) => {\r\n const elements = item[0];\r\n const eventName = item[1];\r\n\r\n each(elements, (elm) => {\r\n addEvent(elm, eventName);\r\n });\r\n });\r\n }\r\n };\r\n const _update = (newEventContentChange: DOMObserverEventContentChange) => {\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _update(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _update,\r\n };\r\n};\r\n\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n callback: (targetChangedAttrs: string[], targetStyleChanged: boolean, contentChanged: boolean) => any,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _observeContent,\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetAttrChange: _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = options || {};\r\n const {\r\n _updateElements: updateEventContentChangeElements,\r\n _destroy: destroyEventContentChange,\r\n _update: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n _observeContent && _eventContentChange,\r\n new Map(),\r\n debounce(() => {\r\n if (isConnected) {\r\n callback([], false, true);\r\n }\r\n }, 84)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); // TODO: observer textarea attrs if textarea\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 = isAttributesType && isString(attributeName) ? attr(mutationTarget as HTMLElement, attributeName!) : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const targetAttrChanged =\r\n attributeChanged &&\r\n targetIsMutationTarget &&\r\n !_observeContent &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null);\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n if (targetAttrChanged) {\r\n push(targetChangedAttrs, attributeName!);\r\n }\r\n if (_observeContent) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget;\r\n const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged = 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 targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged);\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\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 if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) {\r\n callback(targetChangedAttrs, targetStyleChanged, contentChanged);\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: _observeContent,\r\n childList: _observeContent,\r\n characterData: _observeContent,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _disconnect: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && _observeContent && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n };\r\n};\r\n","import { CacheValues, each, push, validateOptions, assignDeep, isEmptyObject, OptionsValidated } from 'support';\r\nimport { Options } from 'options';\r\nimport { getEnvironment, Environment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { createStructureLifecycle } from 'lifecycles/structureLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { LifecycleUpdateFunction, LifecycleUpdateHints } from 'lifecycles/lifecycleUpdateFunction';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: OptionsValidated | null, force?: boolean): void;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: Options;\r\n _structureSetup: StructureSetup;\r\n}\r\n\r\nconst attrs = ['id', 'class', 'style', 'open'];\r\nconst directionIsRTLCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst heightIntrinsicCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\n\r\nexport const createLifecycleHub = (options: Options, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const lifecycles: LifecycleUpdateFunction[] = [];\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n };\r\n\r\n // push(lifecycles, createStructureLifecycle(instance));\r\n push(lifecycles, createOverflowLifecycle(instance));\r\n\r\n const runLifecycles = (updateHints?: Partial | null, changedOptions?: OptionsValidated | null, force?: boolean) => {\r\n let { _directionIsRTL, _heightIntrinsic, _sizeChanged = force || false, _hostMutation = force || false, _contentMutation = force || false } =\r\n updateHints || {};\r\n const finalDirectionIsRTL =\r\n _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback);\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const { _sizeChanged: adaptiveSizeChanged, _hostMutation: adaptiveHostMutation, _contentMutation: adaptiveContentMutation } = lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n },\r\n changedOptions,\r\n force\r\n );\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n });\r\n };\r\n\r\n const onSizeChanged = (directionIsRTL?: CacheValues) => {\r\n const sizeChanged = !directionIsRTL;\r\n runLifecycles({\r\n _directionIsRTL: directionIsRTL,\r\n _sizeChanged: sizeChanged,\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n runLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onHostMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n runLifecycles({\r\n _hostMutation: true,\r\n });\r\n });\r\n };\r\n const onContentMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n runLifecycles({\r\n _contentMutation: true,\r\n });\r\n });\r\n };\r\n\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const trinsicObserver = createTrinsicObserver(_host, onTrinsicChanged);\r\n const hostMutationObserver = createDOMObserver(_host, onHostMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n });\r\n const contentMutationObserver = createDOMObserver(_content || _viewport, onContentMutation, {\r\n _observeContent: true,\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _eventContentChange: options!.updating!.elementEvents as [string, string][],\r\n /*\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget ? false : attributeName ? liesBetween(target as Element, hostSelector, '.content') : false;\r\n },\r\n _ignoreTargetAttrChange: (target, attrName, oldValue, newValue) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n const ignore = diff.length === 1 && diff[0].startsWith(ignorePrefix);\r\n return ignore;\r\n }\r\n return false;\r\n },\r\n */\r\n });\r\n\r\n const updateAll = (changedOptions?: OptionsValidated | null, force?: boolean) => {\r\n runLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = updateAll.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n console.log('flexboxGlue', _flexboxGlue);\r\n\r\n return {\r\n _update: updateAll,\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import {\r\n optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n Func,\r\n} from 'support/options';\r\nimport { ResizeBehavior, OverflowBehavior, VisibilityBehavior, AutoHideBehavior, Options } from 'options';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst stringArrayNullAllowedValues: OptionsTemplateValue | null> = [oTypes.string, oTypes.array, oTypes.null];\r\nconst booleanTrueTemplate: OptionsWithOptionsTemplateValue = [true, oTypes.boolean];\r\nconst booleanFalseTemplate: OptionsWithOptionsTemplateValue = [false, oTypes.boolean];\r\n// const callbackTemplate: OptionsWithOptionsTemplateValue = [null, [oTypes.function, oTypes.null]];\r\nconst resizeAllowedValues: OptionsTemplateValue = 'none both horizontal vertical';\r\nconst overflowAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue = 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue = 'never scroll leavemove';\r\n\r\n/**\r\n * A object which serves as \"default options object\" and \"options template object\".\r\n * I combined these two into one object so that I don't have to define two separate big objects, instead I define one big object.\r\n *\r\n * The property value is a tuple:\r\n * the first value is the default value\r\n * the second value is the template value\r\n * Example:\r\n * {\r\n * a: ['default', [Type.string, Type.null]],\r\n * b: [250, Type.number]\r\n * }\r\n * Property \"a\" has a default value of 'default' and it can be a string or null\r\n * Property \"b\" has a default value of 250 and it can be number\r\n */\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate> = {\r\n resize: ['none', resizeAllowedValues], // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: booleanFalseTemplate, // true || false\r\n updating: {\r\n elementEvents: [[['img', 'load']], [oTypes.array, oTypes.null]], // array of tuples || null\r\n contentMutationDebounce: [80, numberAllowedValues], // number\r\n hostMutationDebounce: [0, numberAllowedValues], // number\r\n resizeDebounce: [0, numberAllowedValues], // number\r\n },\r\n overflow: {\r\n x: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n visibility: ['auto', scrollbarsVisibilityAllowedValues], // visible || hidden || auto || v || h || a\r\n autoHide: ['never', scrollbarsAutoHideAllowedValues], // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: [800, numberAllowedValues], // number\r\n dragScroll: booleanTrueTemplate, // true || false\r\n clickScroll: booleanFalseTemplate, // true || false\r\n touch: booleanTrueTemplate, // true || false\r\n },\r\n textarea: {\r\n dynWidth: booleanFalseTemplate, // true || false\r\n dynHeight: booleanFalseTemplate, // true || false\r\n inheritedAttrs: [['style', 'class'], stringArrayNullAllowedValues], // string || array || null\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: booleanFalseTemplate, // true || false\r\n initialize: booleanFalseTemplate, // true || false\r\n },\r\n /*\r\n callbacks: {\r\n onInitialized: callbackTemplate, // null || function\r\n onInitializationWithdrawn: callbackTemplate, // null || function\r\n onDestroyed: callbackTemplate, // null || function\r\n onScrollStart: callbackTemplate, // null || function\r\n onScroll: callbackTemplate, // null || function\r\n onScrollStop: callbackTemplate, // null || function\r\n onOverflowChanged: callbackTemplate, // null || function\r\n onOverflowAmountChanged: callbackTemplate, // null || function\r\n onDirectionChanged: callbackTemplate, // null || function\r\n onContentSizeChanged: callbackTemplate, // null || function\r\n onHostSizeChanged: callbackTemplate, // null || function\r\n onUpdated: callbackTemplate, // null || function\r\n },\r\n */\r\n};\r\n\r\nexport const { _template: optionsTemplate, _options: defaultOptions } = transformOptions(defaultOptionsWithTemplate);\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\n\r\nimport { validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { Options, defaultOptions, optionsTemplate } from 'options';\r\n\r\nconst OverlayScrollbars = (target: OSTarget | OSTargetObject, options?: Options, extensions?: any): any => {\r\n const currentOptions: Required = assignDeep(\r\n {},\r\n defaultOptions,\r\n validateOptions(options || ({} as Options), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance = {\r\n options(newOptions?: Options) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, currentOptions, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(currentOptions, _changedOptions);\r\n lifecycleHub._update(_changedOptions);\r\n }\r\n }\r\n return currentOptions;\r\n },\r\n update(force?: boolean) {\r\n lifecycleHub._update(null, force);\r\n },\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n\r\nexport { OverlayScrollbars };\r\n","import { createDOM } from 'support/dom';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverlayScrollbars } from 'overlayscrollbars/overlayscrollbars';\r\n\r\nconst abc = {\r\n a: 1,\r\n b: 1,\r\n c: 1,\r\n};\r\n\r\nexport default () => {\r\n return [\r\n getEnvironment(),\r\n OverlayScrollbars(document.body),\r\n createDOM(\r\n '\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n fdfhdfgh\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
'\r\n ),\r\n ];\r\n};\r\n"],"names":["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","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertAfter","insertedNodes","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","options","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","equalWH","equalXY","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","prefix","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","x","y","absoluteCoordinates","rect","left","pageYOffset","top","pageXOffset","createCache","update","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameContent","classNameContentArrange","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","environmentInstance","abs","round","Math","getNativeScrollbarSize","body","measureElm","cSize","oSize","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarStyling","nativeScrollbarIsOverlaid","env","_autoUpdateLoop","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","createStructureSetup","targetIsElm","osTargetObj","_host","host","_target","_padding","padding","_viewport","viewport","_content","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","contentArrangeElm","_contentArrange","_targetObj","_targetCtx","_destroy","getPropByPath","path","o","createLifecycleUpdateFunction","lifecycleHub","updateFunction","updateHints","changedOptions","checkOption","overlaidScrollbarsHideOffset","overlaidScrollbarsHideBorderStyle","createOverflowLifecycle","_structureSetup","updateContentScrollSizeCache","getCurrentContentScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","max","_contentScrollSize","_viewportSize","setViewportOverflowStyle","horizontal","amount","behavior","styleObj","overflowKey","behaviorIsScroll","behaviorIsVisibleScroll","hideOverflow","applyStyle","_visible","_behavior","hideNativeScrollbars","contentScrollSize","showNativeOverlaidScrollbars","directionIsRTL","viewportStyleObj","contentStyleObj","overlaidX","overlaidY","scrollX","scrollY","horizontalMarginKey","horizontalBorderKey","overlaidHideOffset","scrollbarsHideOffset","marginBottom","borderBottom","maxWidth","width","height","_scrollbarsHideOffset","_scroll","setFlexboxGlueStyle","heightIntrinsic","scrollbarsHideOffsetX","offsetLeft","offsetTop","maxHeight","_directionIsRTL","_heightIntrinsic","_sizeChanged","_hostMutation","_contentMutation","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","overflowAmuntCache","contentScrollSizeCache","viewportOffsetSize","contentClientSize","contentArrangeOffsetSize","directionChanged","contentScrollSizeChanged","overflowAmount","overflowAmountChanged","overflow","overflowChanged","adjustDirection","viewportStyle","marginTop","marginRight","marginLeft","contentStyle","borderTop","borderRight","borderLeft","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","animationStartEventName","scrollEventName","scrollAmount","directionIsRTLMap","isRTL","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","pop","contentRect","doDirectionScroll","rtl","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","right","_getCurrentCacheValues","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","intersectionObserverInstance","entries","last","root","newSize","heightIntrinsicCache","createEventContentChange","eventContentChange","map","eventContentChangeRef","addEvent","entry","newEntry","registerEvent","clear","_updateElements","getElements","eventElmList","elements","newEventContentChange","createDOMObserver","isConnected","_observeContent","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetAttrChange","_ignoreTargetChange","_ignoreContentChange","updateEventContentChangeElements","destroyEventContentChange","updateEventContentChange","Map","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","targetAttrChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","_disconnect","_updateEventContentChange","takeRecords","attrs","directionIsRTLCacheValuesFallback","heightIntrinsicCacheValuesFallback","createLifecycleHub","structureSetup","addEnvironmentListener","removeEnvironmentListener","lifecycles","instance","runLifecycles","finalDirectionIsRTL","finalHeightIntrinsic","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","onSizeChanged","sizeChanged","onTrinsicChanged","onHostMutation","requestAnimationFrame","onContentMutation","hostMutationObserver","contentMutationObserver","updating","elementEvents","updateAll","envUpdateListener","log","numberAllowedValues","oTypes","number","stringArrayNullAllowedValues","null","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","contentMutationDebounce","hostMutationDebounce","resizeDebounce","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","optionsTemplate","defaultOptions","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions"],"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 2ca2060..2484fc1 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js @@ -1 +1 @@ -const t=Node.ELEMENT_NODE,{toString:e,hasOwnProperty:n}=Object.prototype;function o(t){return void 0===t}function r(t){return null===t}const s=t=>o(t)||r(t)?""+t:e.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase();function i(t){return"number"==typeof t}function c(t){return"string"==typeof t}function l(t){return"function"==typeof t}function a(t){return Array.isArray(t)}function d(t){return"object"==typeof t&&!a(t)&&!r(t)}function u(t){const e=!!t&&t.length,n=i(e)&&e>-1&&e%1==0;return!!(a(t)||!l(t)&&n)&&(!(e>0&&d(t))||e-1 in t)}function v(t){if(!t||!d(t)||"object"!==s(t))return!1;let e;const r=t.constructor,i=r&&r.prototype,c=n.call(t,"constructor"),l=i&&n.call(i,"isPrototypeOf");if(r&&!c&&!l)return!1;for(e in t);return o(e)||n.call(t,e)}function f(e){const n=window.Element;return!!e&&(n?e instanceof n:e.nodeType===t)}function _(t,e,n,r){if(o(r))return n?n[t]:e;n&&(n[t]=r)}function h(t,e,n){if(o(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)}const p=(t,e)=>{t&&t.removeAttribute(e)};function w(t,e){return _("scrollLeft",0,t,e)}function b(t,e){return _("scrollTop",0,t,e)}function g(t,e){if(u(t))for(let n=0;ne(t[n],n,t));return t}const m=(t,e,n)=>t.indexOf(e,n),y=(t,e,n)=>(n||c(e)||!u(e)?t.push(e):Array.prototype.push.apply(t,e),t),x=t=>{if(Array.from)return Array.from(t);const e=[];return g(t,t=>{y(e,t)}),e},z=t=>t&&0===t.length,O=(t,e)=>{const n=t=>t&&t(e);t instanceof Set?t.forEach(n):g(t,n)},S=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),C=t=>t?Object.keys(t):[];function j(t,e,n,o,s,i,c){const d=[e,n,o,s,i,c];return"object"==typeof t&&!r(t)||l(t)||(t={}),g(d,e=>{g(C(e),n=>{const o=e[n];if(t===o)return!0;const r=a(o);if(o&&(v(o)||r)){const e=t[n];let s=e;r&&!a(e)?s=[]:r||v(e)||(s={}),t[n]=j(s,o)}else t[n]=o})}),t}function A(t){for(const e in t)return!1;return!0}const M=/[^\x20\t\r\n\f]+/g,$=(t,e,n)=>{let o,r=0,s=!1;if(t&&c(e)){const i=e.match(M)||[];for(s=i.length>0;o=i[r++];)s=!!n(t.classList,o)&&s}return s},E=(t,e)=>{$(t,e,(t,e)=>t.add(e))},T=(t,e)=>{$(t,e,(t,e)=>t.remove(e))},L=Element.prototype,V=(t,e)=>{const n=[],o=e?f(e)?e:null:document;return o?y(n,o.querySelectorAll(t)):n},k=(t,e)=>{if(f(t)){return(L.matches||L.msMatchesSelector).call(t,e)}return!1},q=t=>t?x(t.childNodes):[],N=t=>t?t.parentElement:null,F=(t,e,n)=>{if(n){let o,r=e;t&&(u(n)?(o=document.createDocumentFragment(),g(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))}},P=(t,e)=>{F(t,null,e)},B=(t,e)=>{F(t,t&&t.firstChild,e)},I=(t,e)=>{F(N(t),t&&t.nextSibling,e)},U=t=>{if(u(t))g(x(t),t=>U(t));else if(t){const e=N(t);e&&e.removeChild(t)}},Y=t=>{const e=document.createElement("div");return t&&h(e,"class",t),e},D=t=>{const e=Y();return e.innerHTML=t.trim(),g(q(e),t=>U(t))},G={w:0,h:0},J=()=>({w:window.innerWidth,h:window.innerHeight}),K=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:G;let R;const W=t=>t.split(" "),X=(t,e,n,o)=>{g(W(e),e=>{t.removeEventListener(e,n,o)})},H=(t,e,n,r)=>{const s=(()=>{if(o(R)){R=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){R=!0}}))}catch(t){}}return R})(),i=s&&r&&r.o||!1,c=r&&r.s||!1,l=r&&r.u||!1,a=[],d=s?{passive:i,capture:c}:c;return g(W(e),e=>{const o=l?r=>{t.removeEventListener(e,o,c),n&&n(r)}:n;y(a,X.bind(null,t,e,o,c)),t.addEventListener(e,o,d)}),O.bind(0,a)},Q=t=>t.stopPropagation(),Z=t=>t.preventDefault(),tt=(t,e,n)=>{if(t&&e){let o=!0;return g(n,n=>{t[n]!==e[n]&&(o=!1)}),o}return!1},et=(t,e)=>tt(t,e,["w","h"]),nt=(t,e)=>tt(t,e,["x","y"]),ot=(t,e)=>tt(t,e,["t","r","b","l"]),rt=t=>t.charAt(0).toUpperCase()+t.slice(1),st=["-webkit-","-moz-","-o-","-ms-"],it=["WebKit","Moz","O","MS","webkit","moz","o","ms"],ct={},lt={},at=t=>{let e=lt[t];if(S(lt,t))return e;const n=rt(t),o=Y().style;return g(st,r=>{const s=r.replace(/-/g,""),i=[t,r+t,s+n,rt(s)+n];return e=i.find(t=>void 0!==o[t]),!e}),lt[t]=e,e},dt=t=>{let e=ct[t]||window[t];return S(ct,t)||(g(it,n=>(e=e||window[n+rt(t)],!e)),ct[t]=e),e},ut=dt("MutationObserver"),vt=dt("IntersectionObserver"),ft=dt("ResizeObserver"),_t=dt("cancelAnimationFrame"),ht=dt("requestAnimationFrame"),pt=()=>{},wt=(t,e,n)=>{let o,r;const s=i(e)&&e>0,c=i(n)&&n>0,l=s?window.clearTimeout:_t,a=s?window.setTimeout:ht,d=function(e){r=c?performance.now():0,o&&l(o),t.apply(this,e)};return function(){const t=d.bind(this,arguments),s=!!c&&performance.now()-r>=n;o&&l(o),o=s?t():a(t,e)}},bt={animationiterationcount:1,columncount:1,fillopacity:1,flexgrow:1,flexshrink:1,fontweight:1,lineheight:1,opacity:1,order:1,orphans:1,widows:1,zindex:1,zoom:1},gt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},mt=(t,e,n)=>null!=e?e.getPropertyValue(n):t.style[n],yt=(t,e,n)=>{try{t&&void 0!==t.style[e]&&(t.style[e]=((t,e)=>!bt[t.toLowerCase()]&&i(e)?e+"px":e)(e,n))}catch(o){}};function xt(t,e){const n=c(e);if(a(e)||n){let o=n?"":{};if(t){const r=window.getComputedStyle(t,null);o=n?mt(t,r,e):e.reduce((e,n)=>(e[n]=mt(t,r,n),e),o)}return o}g(C(e),n=>yt(t,n,e[n]))}const zt={x:0,y:0},Ot=t=>{const e=t?(t=>t.getBoundingClientRect())(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:zt},St=(t,e)=>{const{v:n,_:o,p:r}=e||{};let s,i=o;return(e,o)=>{const c=i,l=t?t(o,i,s):o,a=e||(n?!n(c,l):c!==l);return(a||r)&&(i=l,s=c),{g:i,m:s,O:a}}};var Ct=function(t){var e={exports:{}};return t(e,e.exports),e.exports}((function(t){function e(){return t.exports=e=Object.assign||function(t){for(var e=1;e(t[e]=At[0]+e+At[1],t),{}),$t=(t,e,n,r,i)=>{const l={},d=Ct({},t);return g(C(e).filter(e=>S(t,e)),u=>{const f=o(n[u])?{}:n[u],_=t[u],h=e[u],p=v(h),w=i?i+".":"";if(p&&v(_)){const t=$t(_,h,f,r,w+u);l[u]=t.S,d[u]=t.C,g([d,l],t=>{A(t[u])&&delete t[u]})}else if(!p){let t=!1;const e=[],n=[],i=s(_);if(g(a(h)?h:[h],r=>{let s;g(Mt,(t,e)=>{t===r&&(s=e)});const l=o(s);if(l&&c(_)){const n=r.split(" ");t=!!n.find(t=>t===_),y(e,n)}else t=Mt[i]===r;return y(n,l?Mt.string:s),!t}),t){(a(_)||v(_)?jt(_)!==jt(f):_!==f)&&(l[u]=_)}else r&&console.warn(`The option "${w}${u}" wasn't set, because it doesn't accept the type [ ${i.toUpperCase()} ] with the value of "${_}".\r\nAccepted types are: [ ${n.join(", ").toUpperCase()} ].\r\n${e.length>0?`\r\nValid strings are: [ ${e.join(", ")} ].`:""}`);delete d[u]}}),{C:d,S:l}},Et=(t,e,n,o)=>$t(t,e,n||{},o||!1);let Tt;const{abs:Lt,round:Vt}=Math,kt=(t,e)=>{P(t,e);const n=(o=e)?{w:o.clientWidth,h:o.clientHeight}:G;var o;const r=K(e);return{x:r.h-n.h,y:r.w-n.w}},qt=t=>{let e=!1;E(t,"os-viewport-scrollbar-styled");try{e="none"===xt(t,"scrollbar-width")||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(n){}return e},Nt=(t,e)=>{xt(t,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),w(t,0);const n=Ot(t),o=Ot(e);w(t,-999);const r=Ot(e);return{i:n.x===o.x,n:o.x!==r.x}},Ft=(t,e)=>{E(t,"os-environment-flexbox-glue");const n=K(t),o=K(e),r=et(o,n);E(t,"os-environment-flexbox-glue-max");const s=K(t),i=K(e),c=et(i,s);return r&&c},Pt=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},Bt=()=>{const{body:t}=document,e=D('
')[0],n=e.firstChild,o=new Set,r=kt(t,e),s={x:0===r.x,y:0===r.y},i={j:!1,A:r,M:s,$:qt(e),T:Nt(e,n),L:Ft(e,n),V(t){o.add(t)},k(t){o.delete(t)}};if(p(e,"style"),p(e,"class"),U(e),!s.x||!s.y){let n=J(),s=Pt(),i=r;window.addEventListener("resize",()=>{if(o.size){const r=J(),c={w:r.w-n.w,h:r.h-n.h};if(0===c.w&&0===c.h)return;const l={w:Lt(c.w),h:Lt(c.h)},a={w:Lt(Vt(r.w/(n.w/100))),h:Lt(Vt(r.h/(n.h/100)))},d=Pt(),u=l.w>2&&l.h>2,v=!((t,e)=>{const n=Lt(t),o=Lt(e);return!(n===o||n+1===o||n-1===o)})(a.w,a.h),f=d!==s&&s>0;if(u&&v&&f){const n=Tt.A=kt(t,e);U(e),i.x===n.x&&i.y===n.y||O(o),i=n}n=r,s=d}})}return i},It=()=>(Tt||(Tt=Bt()),Tt),Ut=(t,e)=>t&&e.split(".").reduce((t,e)=>t&&S(t,e)?t[e]:void 0,t),Yt=(t,e,n)=>{const{q:o,N:r}=function t(e){const n={q:{},N:{}};return g(C(e),o=>{const r=e[o];if(a(r))n.q[o]=r[1],n.N[o]=r[0];else{const e=t(r);n.q[o]=e.q,n.N[o]=e.N}}),n}(t),s=j({},r,Et(e||{},o,null,!0).S),i=t=>{const{F:e,P:o}=t;n(!!e,t=>({g:Ut(s,t),O:e||void 0!==Ut(o,t)}))};return i({F:!0}),{N(t){if(t){const{S:e}=Et(t,o,s,!0);A(e)||(j(s,e),i({P:e}))}return s},B:t=>{i({F:t})}}},Dt={paddingAbsolute:[!1,Mt.boolean],overflowBehavior:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]}},Gt=at("margin-inline-end"),Jt=at("border-inline-end"),Kt=(t,e)=>{const{I:n,U:o,Y:r,D:s}=t,i=[],c=It(),l=c.M,a=c.$,d=(c.L,Gt&&Jt||a||l.y,St(()=>((t,e)=>{const n=e||"",o=n+"-top",r=n+"-right",s=n+"-bottom",i=n+"-left",c=xt(t,[o,r,s,i]);return{t:gt(c[o]),r:gt(c[r]),b:gt(c[s]),l:gt(c[i])}})(n,"padding"),{v:ot})),u=St(t=>({x:Math.max(0,Math.round(100*(t.G.w-t.J.w))/100),y:Math.max(0,Math.round(100*(t.G.h-t.J.h))/100)}),{v:nt}),{N:v,B:f}=Yt(Dt,e,(t,e)=>{const{g:n,O:r}=e("paddingAbsolute"),{g:i,O:c}=d(t);if(r||c){const t={t:0,r:0,b:0,l:0};n||(t.t=-i.t,t.r=-(i.r+i.l),t.b=-(i.b+i.t),t.l=-i.l),xt(o,{top:t.t,left:t.l,"margin-right":t.r,"margin-bottom":t.b,"max-width":`calc(100% + ${-1*t.r}px)`})}const l=K(o),a=K(s),v=(f=s)?{w:f.scrollWidth,h:f.scrollHeight}:G;var f;const _=u(t,{G:v,J:{w:l.w+Math.max(0,a.w-v.w),h:l.h+Math.max(0,a.h-v.h)}}),{g:h,O:p}=_;console.log("overflowAmount",h),console.log("overflowAmountChanged",p)});return{N:v,B:f,K:()=>{f()},R:(t,e)=>{const{O:n,g:o}=e;n&&xt(s,{height:o?"auto":"100%"})},W(){O(i)}}},Rt={direction:["rtl"]},Wt=t=>{let e=!1;return g(xt(t,["direction"]),(t,n)=>{e=e||m(Rt[n],t)>-1}),e},Xt=t=>t&&(t.height||t.width),Ht=(t,e,n)=>{const{X:o=!1,H:r=!1}=n||{},s=It().T,i=D('
')[0],c=i.firstChild,l=St(0,{p:!0,v:(t,e)=>!(!t||!Xt(t)&&Xt(e))}),d=t=>{const n=t&&"boolean"==typeof t.g;let r=!1;if(a(t)&&t.length>0){const{m:e,g:n,O:o}=l(0,t.pop().contentRect);r=!e||!Xt(n)}else n&&t.O;if(o){const e=n?t.g:Wt(i);w(i,e?s.n?-3333333:s.i?0:3333333:3333333),b(i,3333333)}r||e(n?t:void 0)},u=[];let v=!!r&&d;if(ft){const t=new ft(d);t.observe(c),y(u,()=>t.disconnect())}else{const t=D('
');P(c,t),E(c,"os-size-observer-listener-scroll");const e=t[0],n=e.lastChild,o=e.firstChild,s=null==o?void 0:o.firstChild;let i,l=K(c),a=l,f=!1;const _=()=>{w(o,3333333),b(o,3333333),w(n,3333333),b(n,3333333)},h=()=>{i=0,f&&(l=a,d())},p=t=>(a=K(c),f=!t||!et(a,l),t&&f&&!i?(_t(i),i=ht(h)):t||h(),_(),t&&(Z(t),Q(t)),!1);y(u,[H(o,"scroll",p),H(n,"scroll",p)]),xt(s,{width:3333333,height:3333333}),_(),v=r?()=>p():_}if(o){const t=St(()=>Wt(i));y(u,H(i,"scroll",e=>{const n=t(),{g:o,O:r}=n;return r&&(xt(c,o?{left:"auto",right:0}:{left:0,right:"auto"}),d(n)),Z(e),Q(e),!1}))}return v&&(E(i,"os-size-observer-appear"),y(u,H(i,"animationstart",v,{u:!!ft}))),B(t,i),()=>{O(u),U(i)}},Qt=(t,e,n,r)=>{let s;const i=()=>{n.forEach((t,e)=>{X(e,t,r)}),n.clear()},c=e=>{if(s){g(s.reduce((n,o)=>{if(o){const r=o[0],s=o[1],i=s&&r&&(e?e(r):V(r,t));i&&y(n,[i,l(s)?s(i):s],!0)}return n},[]),t=>{const e=t[0],s=t[1];g(e,t=>{((t,e)=>{const s=n.get(t),i=o(s),c=()=>{n.set(t,e),H(t,e,r)};i||e===s?i&&c():(X(t,s,r),c())})(t,s)})})}},a=t=>{s=t,i(),c()};return e&&a(e),{Z:i,tt:c,B:a}},Zt=(t,e,n)=>{let o=!1;const{et:r,nt:s,ot:i,rt:l,st:a,it:d,ct:u}=n||{},{tt:v,Z:f,B:_}=Qt(t,r&&l,new Map,wt(()=>{o&&e([],!1,!0)},80)),p=i||[],w=(s||[]).concat(p),b=o=>{const s=d||pt,i=u||pt,l=[],f=[];let _=!1,w=!1,b=!1;g(o,e=>{const{attributeName:o,target:d,type:u,oldValue:v,addedNodes:g}=e,x="attributes"===u,z="childList"===u,O=t===d,S=x&&c(o)?h(d,o):0,C=0!==S&&v!==S,j=C&&O&&!r&&!s(d,o,v,S),A=m(p,o)>-1&&C;if(j&&y(l,o),r){const r=!x,c=x&&A&&!O,l=c&&a&&k(d,a),u=(l?!s(d,o,v,S):r||c)&&!i(e,!!l,t,n);y(f,g),w=w||u,b=b||z}_=_||j&&A}),b&&!z(f)&&v(t=>f.reduce((e,n)=>(y(e,V(t,n)),k(n,t)?y(e,n):e),[])),(!z(l)||_||w)&&e(l,_,w)},x=new ut(b);return x.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:w,subtree:r,childList:r,characterData:r}),o=!0,{lt:()=>{o&&(f(),x.disconnect(),o=!1)},at:t=>{_(o&&r&&t)},B:()=>{o&&b(x.takeRecords())}}},te=t=>{P(N(t),q(t)),U(t)},ee=e=>{const n=function(e){const n=window.HTMLElement;return!!e&&(n?e instanceof n:e.nodeType===t)}(e),r=n?{}:{I:e.host,dt:e.target,U:e.padding,Y:e.viewport,D:e.content};if(n){const t=Y("os-padding"),n=Y("os-viewport"),o=Y("os-content");P(t,n),P(n,o),r.dt=e,r.U=t,r.Y=n,r.D=o}let{dt:s,U:i,Y:c,D:l}=r;const a=[],d=k(s,"textarea"),u=!d&&k(s,"body"),v=d?r.I||Y():s,f=t=>d?s:q(t);if(d&&v!==r.I&&(I(s,v),y(a,()=>{I(v,s),U(v)})),n)P(l,f(s)),P(v,i),y(a,()=>{P(v,q(l)),U(i),T(v,"os-host")});else{const t=l||c||i||v,e=o(i),n=o(c),s=o(l),d=f(t);i=r.U=e?Y():i,c=r.Y=n?Y():c,l=r.D=s?Y():l,P(v,i),P(i||v,c),P(c,l);P(l||c,d),y(a,()=>{s&&te(l),n&&te(c),e&&te(i),T(v,"os-host"),T(i,"os-padding"),T(c,"os-viewport"),T(l,"os-content")})}E(v,"os-host"),E(i,"os-padding"),E(c,"os-viewport"),E(l,"os-content");const _=s.ownerDocument,h=_.body,p={ut:_.defaultView,vt:_,ft:N(h),_t:h,ht:d,pt:u};return{wt:Ct({},r,{I:v}),bt:p,Z:()=>{O(a)}}},ne=(t,e,n)=>{const o=ee(t),r=[],{I:s,Y:i,D:c}=o.wt;y(r,Kt(o.wt));Ht(s,t=>{g(r,t?e=>{e.gt&&e.gt(t)}:t=>{t.K&&t.K()})},{H:!0,X:!0}),((t,e)=>{const n=D('
')[0],o=[],r=St(t=>0===t.h||t.isIntersecting||t.intersectionRatio>0,{_:!1});if(vt){const s=new vt(t=>{if(t&&t.length>0){const n=t.pop();if(n){const t=r(0,n);t.O&&e(!1,t)}}},{root:t});s.observe(n),y(o,()=>s.disconnect())}else y(o,Ht(n,()=>{const t=K(n),o=r(0,t);o.O&&e(!1,o)}));B(t,n)})(s,(t,e)=>{g(r,n=>{n.R&&n.R(t,e)})}),Zt(s,()=>null),Zt(c||i,()=>null,{et:!0})};export default()=>[It(),ne(document.body),D('
fdfhdfgh
')]; \ No newline at end of file +const t=Node.ELEMENT_NODE,{toString:e,hasOwnProperty:n}=Object.prototype;function o(t){return void 0===t}function r(t){return null===t}const i=t=>o(t)||r(t)?""+t:e.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase();function s(t){return"number"==typeof t}function l(t){return"string"==typeof t}function c(t){return"function"==typeof t}function a(t){return Array.isArray(t)}function u(t){return"object"==typeof t&&!a(t)&&!r(t)}function d(t){const e=!!t&&t.length,n=s(e)&&e>-1&&e%1==0;return!!(a(t)||!c(t)&&n)&&(!(e>0&&u(t))||e-1 in t)}function _(t){if(!t||!u(t)||"object"!==i(t))return!1;let e;const r=t.constructor,s=r&&r.prototype,l=n.call(t,"constructor"),c=s&&n.call(s,"isPrototypeOf");if(r&&!l&&!c)return!1;for(e in t);return o(e)||n.call(t,e)}function v(e){const n=window.Element;return!!e&&(n?e instanceof n:e.nodeType===t)}function h(t,e,n,r){if(o(r))return n?n[t]:e;n&&(n[t]=r)}function f(t,e,n){if(o(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)}function b(t,e){return h("scrollLeft",0,t,e)}function g(t,e){return h("scrollTop",0,t,e)}function p(t,e){if(d(t))for(let n=0;ne(t[n],n,t));return t}const w=(t,e,n)=>t.indexOf(e,n),y=(t,e,n)=>(n||l(e)||!d(e)?t.push(e):Array.prototype.push.apply(t,e),t),m=t=>{if(Array.from)return Array.from(t);const e=[];return p(t,t=>{y(e,t)}),e},x=t=>t&&0===t.length,S=(t,e)=>{const n=t=>t&&t(e);t instanceof Set?t.forEach(n):p(t,n)},z=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),M=t=>t?Object.keys(t):[];function C(t,e,n,o,i,s,l){const u=[e,n,o,i,s,l];return"object"==typeof t&&!r(t)||c(t)||(t={}),p(u,e=>{p(M(e),n=>{const o=e[n];if(t===o)return!0;const r=a(o);if(o&&(_(o)||r)){const e=t[n];let i=e;r&&!a(e)?i=[]:r||_(e)||(i={}),t[n]=C(i,o)}else t[n]=o})}),t}function O(t){for(const e in t)return!1;return!0}const L=/[^\x20\t\r\n\f]+/g,A=(t,e,n)=>{let o,r=0,i=!1;if(t&&l(e)){const s=e.match(L)||[];for(i=s.length>0;o=s[r++];)i=!!n(t.classList,o)&&i}return i},I=(t,e)=>{A(t,e,(t,e)=>t.add(e))},T=(t,e)=>{A(t,e,(t,e)=>t.remove(e))},j=Element.prototype,E=(t,e)=>{const n=[],o=e?v(e)?e:null:document;return o?y(n,o.querySelectorAll(t)):n},R=(t,e)=>{if(v(t)){return(j.matches||j.msMatchesSelector).call(t,e)}return!1},$=t=>t?m(t.childNodes):[],V=t=>t?t.parentElement:null,q=(t,e,n)=>{if(n){let o,r=e;t&&(d(n)?(o=document.createDocumentFragment(),p(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))}},H=(t,e)=>{q(t,null,e)},k=(t,e)=>{q(t,t&&t.firstChild,e)},B=(t,e)=>{q(V(t),t&&t.nextSibling,e)},D=t=>{if(d(t))p(m(t),t=>D(t));else if(t){const e=V(t);e&&e.removeChild(t)}},F=t=>{const e=document.createElement("div");return t&&f(e,"class",t),e},G=t=>{const e=F();return e.innerHTML=t.trim(),p($(e),t=>D(t))},N={w:0,h:0},P=()=>({w:window.innerWidth,h:window.innerHeight}),U=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:N;let W;const Y=t=>t.split(" "),X=(t,e,n,o)=>{p(Y(e),e=>{t.removeEventListener(e,n,o)})},J=(t,e,n,r)=>{const i=(()=>{if(o(W)){W=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){W=!0}}))}catch(t){}}return W})(),s=i&&r&&r.t||!1,l=r&&r.o||!1,c=r&&r.s||!1,a=[],u=i?{passive:s,capture:l}:l;return p(Y(e),e=>{const o=c?r=>{t.removeEventListener(e,o,l),n&&n(r)}:n;y(a,X.bind(null,t,e,o,l)),t.addEventListener(e,o,u)}),S.bind(0,a)},K=t=>t.stopPropagation(),Q=t=>t.preventDefault(),Z=(t,e,n)=>{if(t&&e){let o=!0;return p(n,n=>{t[n]!==e[n]&&(o=!1)}),o}return!1},tt=(t,e)=>Z(t,e,["w","h"]),et=(t,e)=>Z(t,e,["x","y"]),nt=["WebKit","Moz","O","MS","webkit","moz","o","ms"],ot={},rt=t=>{let e=ot[t]||window[t];return z(ot,t)||(p(nt,n=>{var o;return e=e||window[n+(o=t,o.charAt(0).toUpperCase()+o.slice(1))],!e}),ot[t]=e),e},it=rt("MutationObserver"),st=rt("IntersectionObserver"),lt=rt("ResizeObserver"),ct=rt("cancelAnimationFrame"),at=rt("requestAnimationFrame"),ut=()=>{},dt=(t,e,n)=>{let o,r;const i=s(e)&&e>0,l=s(n)&&n>0,c=i?window.clearTimeout:ct,a=i?window.setTimeout:at,u=function(e){r=l?performance.now():0,o&&c(o),t.apply(this,e)};return function(){const t=u.bind(this,arguments),i=!!l&&performance.now()-r>=n;o&&c(o),o=i?t():a(t,e)}},_t={animationiterationcount:1,columncount:1,fillopacity:1,flexgrow:1,flexshrink:1,fontweight:1,lineheight:1,opacity:1,order:1,orphans:1,widows:1,zindex:1,zoom:1},vt=(t,e,n)=>null!=e?e.getPropertyValue(n):t.style[n],ht=(t,e,n)=>{try{t&&void 0!==t.style[e]&&(t.style[e]=((t,e)=>!_t[t.toLowerCase()]&&s(e)?e+"px":e)(e,n))}catch(o){}};function ft(t,e){const n=l(e);if(a(e)||n){let o=n?"":{};if(t){const r=window.getComputedStyle(t,null);o=n?vt(t,r,e):e.reduce((e,n)=>(e[n]=vt(t,r,n),e),o)}return o}p(M(e),n=>ht(t,n,e[n]))}const bt={x:0,y:0},gt=t=>{const e=t?(t=>t.getBoundingClientRect())(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:bt},pt=(t,e)=>{const{l:n,u:o,_:r}=e||{};let i,s=o;return{v:(e,o)=>{const l=s,c=t?t(o,s,i):o,a=e||(n?!n(l,c):l!==c);return(a||r)&&(s=c,i=l),{g:s,p:i,m:a}},S:t=>({g:s,p:i,m:!!t})}};var wt=function(t){var e={exports:{}};return t(e,e.exports),e.exports}((function(t){function e(){return t.exports=e=Object.assign||function(t){for(var e=1;e(t[e]=mt[0]+e+mt[1],t),{}),St=(t,e,n,r,s)=>{const c={},u=wt({},t);return p(M(e).filter(e=>z(t,e)),d=>{const v=o(n[d])?{}:n[d],h=t[d],f=e[d],b=_(f),g=s?s+".":"";if(b&&_(h)){const t=St(h,f,v,r,g+d);c[d]=t.M,u[d]=t.C,p([u,c],t=>{O(t[d])&&delete t[d]})}else if(!b){let t=!1;const e=[],n=[],s=i(h);if(p(a(f)?f:[f],r=>{let i;p(xt,(t,e)=>{t===r&&(i=e)});const c=o(i);if(c&&l(h)){const n=r.split(" ");t=!!n.find(t=>t===h),y(e,n)}else t=xt[s]===r;return y(n,c?xt.string:i),!t}),t){(a(h)||_(h)?yt(h)!==yt(v):h!==v)&&(c[d]=h)}else r&&console.warn(`The option "${g}${d}" wasn't set, because it doesn't accept the type [ ${s.toUpperCase()} ] with the value of "${h}".\r\nAccepted types are: [ ${n.join(", ").toUpperCase()} ].\r\n${e.length>0?`\r\nValid strings are: [ ${e.join(", ")} ].`:""}`);delete u[d]}}),{C:u,M:c}},zt=(t,e,n,o)=>St(t,e,n||{},o||!1);let Mt;const{abs:Ct,round:Ot}=Math,Lt=(t,e)=>{H(t,e);const n=(o=e)?{w:o.clientWidth,h:o.clientHeight}:N;var o;const r=U(e);return{x:r.h-n.h,y:r.w-n.w}},At=(t,e)=>{ft(t,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),b(t,0);const n=gt(t),o=gt(e);b(t,-999);const r=gt(e);return{i:n.x===o.x,n:o.x!==r.x}},It=(t,e)=>{I(t,"os-environment-flexbox-glue");const n=U(t),o=U(e),r=tt(o,n);I(t,"os-environment-flexbox-glue-max");const i=U(t),s=U(e),l=tt(s,i);return r&&l},Tt=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},jt=()=>{const{body:t}=document,e=G('
')[0],n=e.firstChild,o=new Set,r=Lt(t,e),i={x:0===r.x,y:0===r.y},s={O:!1,L:r,A:i,I:!1,T:At(e,n),j:It(e,n),R(t){o.add(t)},$(t){o.delete(t)}};var l,c;if(c="style",(l=e)&&l.removeAttribute(c),D(e),!i.x||!i.y){let n=P(),i=Tt(),s=r;window.addEventListener("resize",()=>{if(o.size){const r=P(),l={w:r.w-n.w,h:r.h-n.h};if(0===l.w&&0===l.h)return;const c={w:Ct(l.w),h:Ct(l.h)},a={w:Ct(Ot(r.w/(n.w/100))),h:Ct(Ot(r.h/(n.h/100)))},u=Tt(),d=c.w>2&&c.h>2,_=!((t,e)=>{const n=Ct(t),o=Ct(e);return!(n===o||n+1===o||n-1===o)})(a.w,a.h),v=u!==i&&i>0;if(d&&_&&v){const n=Mt.L=Lt(t,e);D(e),s.x===n.x&&s.y===n.y||S(o),s=n}n=r,i=u}})}return s},Et=()=>(Mt||(Mt=jt()),Mt),Rt=t=>{H(V(t),$(t)),D(t)},$t=e=>{const n=function(e){const n=window.HTMLElement;return!!e&&(n?e instanceof n:e.nodeType===t)}(e),r=n?{}:{V:e.host,q:e.target,H:e.padding,k:e.viewport,B:e.content};if(n){const t=F("os-padding"),n=F("os-viewport"),o=F("os-content");H(t,n),H(n,o),r.q=e,r.H=t,r.k=n,r.B=o}let{q:i,H:s,k:l,B:c}=r;const a=[],u=R(i,"textarea"),d=!u&&R(i,"body"),_=u?r.V||F():i,v=t=>u?i:$(t);if(u&&_!==r.V&&(B(i,_),y(a,()=>{B(_,i),D(_)})),n)H(c,v(i)),H(_,s),y(a,()=>{H(_,$(c)),D(s),T(_,"os-host")});else{const t=c||l||s||_,e=o(s),n=o(l),i=o(c),u=v(t);s=r.H=e?F():s,l=r.k=n?F():l,c=r.B=i?F():c,H(_,s),H(s||_,l),H(l,c);H(c||l,u),y(a,()=>{i&&Rt(c),n&&Rt(l),e&&Rt(s),T(_,"os-host"),T(s,"os-padding"),T(l,"os-viewport"),T(c,"os-content")})}I(_,"os-host"),I(s,"os-padding"),I(l,"os-viewport"),I(c,"os-content");const h=i.ownerDocument,f=h.body,b={D:h.defaultView,F:h,G:V(f),N:f,P:u,U:d},g=wt({},r,{V:_}),{I:p,A:w}=Et();if(p)y(a,T.bind(0,l,"os-viewport-scrollbar-styled"));else if((w.x||w.y)&&g.B){const t=F("os-content-arrange");k(l,t),y(a,D.bind(0,t)),g.W=t}return{Y:g,X:b,J:()=>{S(a)}}},Vt=(t,e)=>t&&e.split(".").reduce((t,e)=>t&&z(t,e)?t[e]:void 0,t),qt=t=>{const{V:e,H:n,k:o,B:r,W:i}=t.K.Y,{v:s,S:l}=pt(()=>{return(t=r||o)?{w:t.scrollWidth,h:t.scrollHeight}:N;var t},{l:tt}),{v:c,S:a}=pt(t=>({x:Math.max(0,Math.round(100*(t.Z.w-t.tt.w))/100),y:Math.max(0,Math.round(100*(t.Z.h-t.tt.h))/100)}),{l:et}),u=(t,e,n,o)=>{const r="visible-scroll"===n,i=e>0&&("scroll"===n||"hidden"===n);return i&&(o[t?"overflowX":"overflowY"]=n),{et:!i,nt:r?"scroll":"hidden"}};return((t,e)=>(n,o,r)=>e(!!r,n,e=>({g:Vt(t.ot,e),m:r||void 0!==Vt(o,e)}))||{})(t,(t,d,_)=>{const{rt:v,it:h,st:f,lt:p,ct:w}=d,{j:y,I:m,A:x}=Et(),{g:S,m:z}=_("nativeScrollbarsOverlaid.show"),M=!y&&(f||w||p||z),C=S&&x.x&&x.y;let O=a(),L=l();if(z&&m&&(C?T(o,"os-viewport-scrollbar-styled"):I(o,"os-viewport-scrollbar-styled")),f||w){const e=U(n),l=U(r||o),a=U(i);L=s(t);const{g:u}=L;O=c(t,{Z:{w:Math.max(u.w,a.w),h:Math.max(u.h,a.h)},tt:{w:e.w+Math.max(0,l.w-u.w),h:e.h+Math.max(0,l.h-u.h)}})}const{g:A,m:j}=v,{g:E,m:R}=L,{g:$,m:V}=O,{g:q,m:H}=_("overflow");if(R||V||H||z||j&&!m||M){const t={overflowY:"",overflowX:"",marginTop:"",marginRight:"",marginBottom:"",marginLeft:"",maxWidth:""},n={borderTop:"",borderRight:"",borderBottom:"",borderLeft:""},{et:s,nt:l}=u(!0,$.x,q.x,t),{et:c,nt:a}=u(!1,$.y,q.y,t);s&&!c&&(t.overflowX=l),c&&!s&&(t.overflowY=a);const{at:d,ut:_}=((t,e,n,o,s)=>{const{L:l,A:c,I:a}=Et(),{x:u,y:d}=c,_="scroll"===o.overflowX,v="scroll"===o.overflowY,h=n?"marginLeft":"marginRight",f=n?"borderLeft":"borderRight",b=r&&!e?42:0,g={x:u?b:l.x,y:d?b:l.y};return a||(_&&(o.marginBottom=-g.x,s.borderBottom=u&&b?"42px solid transparent":""),v&&(o.maxWidth=`calc(100% + ${g.y}px)`,o[h]=-g.y,s[f]=d&&b?"42px solid transparent":""),i&&ft(i,{width:v&&!e?b+t.w:"",height:_&&!e?b+t.h:""})),{at:g,ut:{x:_,y:v}}})(E,C,A,t,n);M&&((t,n,r)=>{const i=b(o),s=g(o);ft(o,{maxHeight:""}),t&&ft(o,{maxHeight:e.clientHeight+(n?r:0)}),b(o,i),g(o,s)})(!!h.g,_.x,d.x),ft(o,t),ft(r,n)}})},Ht={direction:["rtl"]},kt=t=>{let e=!1;return p(ft(t,["direction"]),(t,n)=>{e=e||w(Ht[n],t)>-1}),e},Bt=t=>t&&(t.height||t.width),Dt=(t,e,n)=>{const{dt:o=!1,_t:r=!1}=n||{},{T:i}=Et(),s=G('
')[0],l=s.firstChild,{v:c}=pt(0,{_:!0,l:(t,e)=>!(!t||!Bt(t)&&Bt(e))}),u=t=>{const n=t&&"boolean"==typeof t.g;let r=!1;if(a(t)&&t.length>0){const{p:e,g:n,m:o}=c(0,t.pop().contentRect);r=!e||!Bt(n)}else n&&t.m;if(o){const e=n?t.g:kt(s);b(s,e?i.n?-3333333:i.i?0:3333333:3333333),g(s,3333333)}r||e(n?t:void 0)},d=[];let _,v=!!r&&u;if(lt){const t=new lt(u);t.observe(l),y(d,()=>t.disconnect())}else{const t=G('
');H(l,t),I(l,"os-size-observer-listener-scroll");const e=t[0],n=e.lastChild,o=e.firstChild,i=null==o?void 0:o.firstChild;let s,c=U(l),a=c,_=!1;const h=()=>{b(o,3333333),g(o,3333333),b(n,3333333),g(n,3333333)},f=()=>{s=0,_&&(c=a,u())},p=t=>(a=U(l),_=!t||!tt(a,c),t&&_&&!s?(ct(s),s=at(f)):t||f(),h(),t&&(Q(t),K(t)),!1);y(d,[J(o,"scroll",p),J(n,"scroll",p)]),ft(i,{width:3333333,height:3333333}),h(),v=r?()=>p():h}if(o){_=pt(()=>kt(s));const{v:t}=_;y(d,J(s,"scroll",e=>{const n=t(),{g:o,m:r}=n;return r&&(ft(l,o?{left:"auto",right:0}:{left:0,right:"auto"}),u(n)),Q(e),K(e),!1}))}return v&&(I(s,"os-size-observer-appear"),y(d,J(s,"animationstart",v,{s:!!lt}))),k(t,s),{J(){S(d),D(s)},vt:t=>({rt:_?_.S(t):{g:!1,p:!1,m:!1}})}},Ft=(t,e,n,r)=>{let i;const s=()=>{n.forEach((t,e)=>{X(e,t,r)}),n.clear()},l=e=>{if(i){p(i.reduce((n,o)=>{if(o){const r=o[0],i=o[1],s=i&&r&&(e?e(r):E(r,t));s&&y(n,[s,c(i)?i(s):i],!0)}return n},[]),t=>{const e=t[0],i=t[1];p(e,t=>{((t,e)=>{const i=n.get(t),s=o(i),l=()=>{n.set(t,e),J(t,e,r)};s||e===i?s&&l():(X(t,i,r),l())})(t,i)})})}},a=t=>{i=t,s(),l()};return e&&a(e),{J:s,ht:l,v:a}},Gt=(t,e,n)=>{let o=!1;const{ft:r,bt:i,gt:s,pt:c,wt:a,yt:u,xt:d}=n||{},{ht:_,J:v,v:h}=Ft(t,r&&c,new Map,dt(()=>{o&&e([],!1,!0)},84)),b=s||[],g=(i||[]).concat(b),m=o=>{const i=u||ut,s=d||ut,c=[],v=[];let h=!1,g=!1,m=!1;p(o,e=>{const{attributeName:o,target:u,type:d,oldValue:_,addedNodes:p}=e,x="attributes"===d,S="childList"===d,z=t===u,M=x&&l(o)?f(u,o):0,C=0!==M&&_!==M,O=C&&z&&!r&&!i(u,o,_,M),L=w(b,o)>-1&&C;if(O&&y(c,o),r){const r=!x,l=x&&L&&!z,c=l&&a&&R(u,a),d=(c?!i(u,o,_,M):r||l)&&!s(e,!!c,t,n);y(v,p),g=g||d,m=m||S}h=h||O&&L}),m&&!x(v)&&_(t=>v.reduce((e,n)=>(y(e,E(t,n)),R(n,t)?y(e,n):e),[])),(!x(c)||h||g)&&e(c,h,g)},S=new it(m);return S.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:g,subtree:r,childList:r,characterData:r}),o=!0,{St:()=>{o&&(v(),S.disconnect(),o=!1)},zt:t=>{h(o&&r&&t)},v:()=>{o&&m(S.takeRecords())}}},Nt=["id","class","style","open"],Pt={g:!1,p:!1,m:!1},Ut={g:!1,p:!1,m:!1},Wt=(t,e)=>{const{V:n,k:o,B:r}=e.Y,{I:i,j:s,R:l,$:c}=Et(),a=[];y(a,qt({ot:t,K:e}));const u=(t,e,n)=>{let{rt:o,it:r,st:i=n||!1,lt:s=n||!1,ct:l=n||!1}=t||{};const c=o||(d?d.vt(n).rt:Pt),u=r||(_?_.vt(n).it:Ut);p(a,t=>{const{st:o,lt:r,ct:a}=t({rt:c,it:u,st:i,lt:s,ct:l},e,n);i=o||i,s=r||s,l=a||l})},d=Dt(n,t=>{u({rt:t,st:!t})},{_t:!0,dt:!i}),_=((t,e)=>{const n=G('
')[0],o=[],{v:r,S:i}=pt(t=>0===t.h||t.isIntersecting||t.intersectionRatio>0,{u:!1});if(st){const i=new st(t=>{if(t&&t.length>0){const n=t.pop();if(n){const t=r(0,n);t.m&&e(t)}}},{root:t});i.observe(n),y(o,()=>i.disconnect())}else y(o,Dt(n,()=>{const t=U(n),o=r(0,t);o.m&&e(o)}).J);return k(t,n),{J(){S(o),D(n)},vt:t=>({it:i(t)})}})(n,t=>{u({it:t})}),v=(Gt(n,()=>{requestAnimationFrame(()=>{u({lt:!0})})},{gt:Nt,bt:Nt}),Gt(r||o,()=>{requestAnimationFrame(()=>{u({ct:!0})})},{ft:!0,gt:Nt,bt:Nt,pt:t.updating.elementEvents}),(t,e)=>{u(null,t,e)}),h=v.bind(null,null,!0);return l(h),console.log("flexboxGlue",s),{v,J(){c(h)}}},Yt=xt.number,Xt=[xt.string,xt.array,xt.null],Jt=[!0,xt.boolean],Kt=[!1,xt.boolean],Qt={resize:["none","none both horizontal vertical"],paddingAbsolute:Kt,updating:{elementEvents:[[["img","load"]],[xt.array,xt.null]],contentMutationDebounce:[80,Yt],hostMutationDebounce:[0,Yt],resizeDebounce:[0,Yt]},overflow:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,Yt],dragScroll:Jt,clickScroll:Kt,touch:Jt},textarea:{dynWidth:Kt,dynHeight:Kt,inheritedAttrs:[["style","class"],Xt]},nativeScrollbarsOverlaid:{show:Kt,initialize:Kt}},{Mt:Zt,ot:te}=function t(e){const n={Mt:{},ot:{}};return p(M(e),o=>{const r=e[o];if(a(r))n.Mt[o]=r[1],n.ot[o]=r[0];else{const e=t(r);n.Mt[o]=e.Mt,n.ot[o]=e.ot}}),n}(Qt),ee=(t,e,n)=>{const o=C({},te,zt(e||{},Zt,null,!0).M),r=$t(t),i=Wt(o,r),s={options(t){if(t){const{M:e}=zt(t,Zt,o,!0);O(e)||(C(o,e),i.v(e))}return o},update(t){i.v(null,t)}};return s.update(!0),s};export default()=>[Et(),ee(document.body),G('
fdfhdfgh
')]; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index 289b832..85a2671 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -442,42 +442,12 @@ var equalXY = function equalXY(a, b) { return equal(a, b, ['x', 'y']); }; - var equalTRBL = function equalTRBL(a, b) { - return equal(a, b, ['t', 'r', 'b', 'l']); - }; var firstLetterToUpper = function firstLetterToUpper(str) { return str.charAt(0).toUpperCase() + str.slice(1); }; - - var getDummyStyle = function getDummyStyle() { - return createDiv().style; - }; - - var cssPrefixes = ['-webkit-', '-moz-', '-o-', '-ms-']; var jsPrefixes = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms']; var jsCache = {}; - var cssCache = {}; - var cssProperty = function cssProperty(name) { - var result = cssCache[name]; - - if (hasOwnProperty$1(cssCache, name)) { - return result; - } - - var uppercasedName = firstLetterToUpper(name); - var elmStyle = getDummyStyle(); - each(cssPrefixes, function (prefix) { - var prefixWithoutDashes = prefix.replace(/-/g, ''); - var resultPossibilities = [name, prefix + name, prefixWithoutDashes + uppercasedName, firstLetterToUpper(prefixWithoutDashes) + uppercasedName]; - result = resultPossibilities.find(function (resultPossibility) { - return elmStyle[resultPossibility] !== undefined; - }); - return !result; - }); - cssCache[name] = result; - return result; - }; var jsAPI = function jsAPI(name) { var result = jsCache[name] || window[name]; @@ -538,11 +508,6 @@ zoom: 1, }; - var parseToZeroOrNumber = function parseToZeroOrNumber(value, toFloat) { - var num = toFloat ? parseFloat(value) : parseInt(value, 10); - return Number.isNaN(num) ? 0 : num; - }; - var adaptCSSVal = function adaptCSSVal(prop, val) { return !cssNumber[prop.toLowerCase()] && isNumber(val) ? val + 'px' : val; }; @@ -583,20 +548,6 @@ return setCSSVal(elm, key, styles[key]); }); } - var topRightBottomLeft = function topRightBottomLeft(elm, property) { - var finalProp = property || ''; - var top = finalProp + '-top'; - var right = finalProp + '-right'; - var bottom = finalProp + '-bottom'; - var left = finalProp + '-left'; - var result = style(elm, [top, right, bottom, left]); - return { - t: parseToZeroOrNumber(result[top]), - r: parseToZeroOrNumber(result[right]), - b: parseToZeroOrNumber(result[bottom]), - l: parseToZeroOrNumber(result[left]), - }; - }; var zeroObj$1 = { x: 0, @@ -639,7 +590,16 @@ }; }; - return cacheUpdate; + return { + _update: cacheUpdate, + _current: function _current(force) { + return { + _value: _value, + _previous: _previous, + _changed: !!force, + }; + }, + }; }; function createCommonjsModule(fn) { @@ -793,6 +753,7 @@ var classNamePadding = 'os-padding'; var classNameViewport = 'os-viewport'; var classNameContent = 'os-content'; + var classNameContentArrange = classNameContent + '-arrange'; var classNameViewportScrollbarStyling = classNameViewport + '-scrollbar-styled'; var classNameSizeObserver = 'os-size-observer'; var classNameSizeObserverAppear = classNameSizeObserver + '-appear'; @@ -816,19 +777,6 @@ }; }; - var getNativeScrollbarStyling = function getNativeScrollbarStyling(testElm) { - var result = false; - addClass(testElm, classNameViewportScrollbarStyling); - - try { - result = - style(testElm, 'scrollbar-width') === 'none' || - window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none'; - } catch (ex) {} - - return result; - }; - var getRtlScrollBehavior = function getRtlScrollBehavior(parentElm, childElm) { var strHidden = 'hidden'; style(parentElm, { @@ -878,16 +826,17 @@ var envElm = envDOM[0]; var envChildElm = envElm.firstChild; var onChangedListener = new Set(); - var nativeScrollBarSize = getNativeScrollbarSize(body, envElm); + var nativeScrollbarSize = getNativeScrollbarSize(body, envElm); + var nativeScrollbarStyling = false; var nativeScrollbarIsOverlaid = { - x: nativeScrollBarSize.x === 0, - y: nativeScrollBarSize.y === 0, + x: nativeScrollbarSize.x === 0, + y: nativeScrollbarSize.y === 0, }; var env = { _autoUpdateLoop: false, - _nativeScrollbarSize: nativeScrollBarSize, + _nativeScrollbarSize: nativeScrollbarSize, _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid, - _nativeScrollbarStyling: getNativeScrollbarStyling(envElm), + _nativeScrollbarStyling: nativeScrollbarStyling, _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm), _flexboxGlue: getFlexboxGlue(envElm, envChildElm), _addListener: function _addListener(listener) { @@ -898,13 +847,12 @@ }, }; removeAttr(envElm, 'style'); - removeAttr(envElm, 'class'); removeElements(envElm); if (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y) { var size = windowSize(); var dpr = getWindowDPR(); - var scrollbarSize = nativeScrollBarSize; + var scrollbarSize = nativeScrollbarSize; window.addEventListener('resize', function () { if (onChangedListener.size) { var sizeNew = windowSize(); @@ -955,627 +903,6 @@ return environmentInstance; }; - var getPropByPath = function getPropByPath(obj, path) { - return ( - obj && - path.split('.').reduce(function (o, prop) { - return o && hasOwnProperty$1(o, prop) ? o[prop] : undefined; - }, obj) - ); - }; - - var createLifecycleBase = function createLifecycleBase(defaultOptionsWithTemplate, initialOptions, updateFunction) { - var _transformOptions = transformOptions(defaultOptionsWithTemplate), - optionsTemplate = _transformOptions._template, - defaultOptions = _transformOptions._options; - - var options = assignDeep({}, defaultOptions, validateOptions(initialOptions || {}, optionsTemplate, null, true)._validated); - - var update = function update(hints) { - var _force = hints._force, - _changedOptions = hints._changedOptions; - - var checkOption = function checkOption(path) { - return { - _value: getPropByPath(options, path), - _changed: _force || getPropByPath(_changedOptions, path) !== undefined, - }; - }; - - updateFunction(!!_force, checkOption); - }; - - update({ - _force: true, - }); - return { - _options: function _options(newOptions) { - if (newOptions) { - var _validateOptions = validateOptions(newOptions, optionsTemplate, options, true), - _changedOptions = _validateOptions._validated; - - if (!isEmptyObject(_changedOptions)) { - assignDeep(options, _changedOptions); - update({ - _changedOptions: _changedOptions, - }); - } - } - - return options; - }, - _update: function _update(_force) { - update({ - _force: _force, - }); - }, - }; - }; - - var overflowBehaviorAllowedValues = 'visible-hidden visible-scroll scroll hidden'; - var defaultOptionsWithTemplate = { - paddingAbsolute: [false, optionsTemplateTypes.boolean], - overflowBehavior: { - x: ['scroll', overflowBehaviorAllowedValues], - y: ['scroll', overflowBehaviorAllowedValues], - }, - }; - var cssMarginEnd = cssProperty('margin-inline-end'); - var cssBorderEnd = cssProperty('border-inline-end'); - var createStructureLifecycle = function createStructureLifecycle(target, initialOptions) { - var _host = target._host, - _padding = target._padding, - _viewport = target._viewport, - _content = target._content; - var destructFns = []; - var env = getEnvironment(); - var scrollbarsOverlaid = env._nativeScrollbarIsOverlaid; - var supportsScrollbarStyling = env._nativeScrollbarStyling; - var supportFlexboxGlue = env._flexboxGlue; - var directionObserverObsolete = (cssMarginEnd && cssBorderEnd) || supportsScrollbarStyling || scrollbarsOverlaid.y; - var updatePaddingCache = createCache( - function () { - return topRightBottomLeft(_host, 'padding'); - }, - { - _equal: equalTRBL, - } - ); - var updateOverflowAmountCache = createCache( - function (ctx) { - return { - x: Math.max(0, Math.round((ctx._contentScrollSize.w - ctx._viewportSize.w) * 100) / 100), - y: Math.max(0, Math.round((ctx._contentScrollSize.h - ctx._viewportSize.h) * 100) / 100), - }; - }, - { - _equal: equalXY, - } - ); - - var _createLifecycleBase = createLifecycleBase(defaultOptionsWithTemplate, initialOptions, function (force, checkOption) { - var _checkOption = checkOption('paddingAbsolute'), - paddingAbsolute = _checkOption._value, - paddingAbsoluteChanged = _checkOption._changed; - - var _updatePaddingCache = updatePaddingCache(force), - padding = _updatePaddingCache._value, - paddingChanged = _updatePaddingCache._changed; - - if (paddingAbsoluteChanged || paddingChanged) { - var paddingStyle = { - t: 0, - r: 0, - b: 0, - l: 0, - }; - - if (!paddingAbsolute) { - paddingStyle.t = -padding.t; - paddingStyle.r = -(padding.r + padding.l); - paddingStyle.b = -(padding.b + padding.t); - paddingStyle.l = -padding.l; - } - - style(_padding, { - top: paddingStyle.t, - left: paddingStyle.l, - 'margin-right': paddingStyle.r, - 'margin-bottom': paddingStyle.b, - 'max-width': 'calc(100% + ' + paddingStyle.r * -1 + 'px)', - }); - } - - var viewportOffsetSize = offsetSize(_padding); - var contentClientSize = offsetSize(_content); - var contentScrollSize = scrollSize(_content); - var overflowAmuntCache = updateOverflowAmountCache(force, { - _contentScrollSize: contentScrollSize, - _viewportSize: { - w: viewportOffsetSize.w + Math.max(0, contentClientSize.w - contentScrollSize.w), - h: viewportOffsetSize.h + Math.max(0, contentClientSize.h - contentScrollSize.h), - }, - }); - var overflowAmount = overflowAmuntCache._value, - overflowAmountChanged = overflowAmuntCache._changed; - console.log('overflowAmount', overflowAmount); - console.log('overflowAmountChanged', overflowAmountChanged); - }), - _options = _createLifecycleBase._options, - _update = _createLifecycleBase._update; - - var onSizeChanged = function onSizeChanged() { - _update(); - }; - - var onTrinsicChanged = function onTrinsicChanged(widthIntrinsic, heightIntrinsicCache) { - var _changed = heightIntrinsicCache._changed, - _value = heightIntrinsicCache._value; - - if (_changed) { - style(_content, { - height: _value ? 'auto' : '100%', - }); - } - }; - - return { - _options: _options, - _update: _update, - _onSizeChanged: onSizeChanged, - _onTrinsicChanged: onTrinsicChanged, - _destruct: function _destruct() { - runEach(destructFns); - }, - }; - }; - - var animationStartEventName = 'animationstart'; - var scrollEventName = 'scroll'; - var scrollAmount = 3333333; - var directionIsRTLMap = { - direction: ['rtl'], - }; - - var directionIsRTL = function directionIsRTL(elm) { - var isRTL = false; - var styles = style(elm, ['direction']); - each(styles, function (value, key) { - isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1; - }); - return isRTL; - }; - - var domRectHasDimensions = function domRectHasDimensions(rect) { - return rect && (rect.height || rect.width); - }; - - var createSizeObserver = function createSizeObserver(target, onSizeChangedCallback, options) { - var _ref = options || {}, - _ref$_direction = _ref._direction, - observeDirectionChange = _ref$_direction === void 0 ? false : _ref$_direction, - _ref$_appear = _ref._appear, - observeAppearChange = _ref$_appear === void 0 ? false : _ref$_appear; - - var rtlScrollBehavior = getEnvironment()._rtlScrollBehavior; - - var baseElements = createDOM('
'); - var sizeObserver = baseElements[0]; - var listenerElement = sizeObserver.firstChild; - var updateResizeObserverContentRectCache = createCache(0, { - _alwaysUpdateValues: true, - _equal: function _equal(currVal, newVal) { - return !(!currVal || (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))); - }, - }); - - var onSizeChangedCallbackProxy = function onSizeChangedCallbackProxy(sizeChangedContext) { - var hasDirectionCache = sizeChangedContext && isBoolean(sizeChangedContext._value); - var skip = false; - - if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) { - var _updateResizeObserver = updateResizeObserverContentRectCache(0, sizeChangedContext.pop().contentRect), - _previous = _updateResizeObserver._previous, - _value = _updateResizeObserver._value, - _changed = _updateResizeObserver._changed; - - skip = !_previous || !domRectHasDimensions(_value); - } else if (hasDirectionCache) { - sizeChangedContext._changed; - } - - if (observeDirectionChange) { - var rtl = hasDirectionCache ? sizeChangedContext._value : directionIsRTL(sizeObserver); - scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount); - scrollTop(sizeObserver, scrollAmount); - } - - if (!skip) { - onSizeChangedCallback(hasDirectionCache ? sizeChangedContext : undefined); - } - }; - - var offListeners = []; - var appearCallback = observeAppearChange ? onSizeChangedCallbackProxy : false; - - if (ResizeObserverConstructor) { - var resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy); - resizeObserverInstance.observe(listenerElement); - push(offListeners, function () { - return resizeObserverInstance.disconnect(); - }); - } else { - var observerElementChildren = createDOM( - '
' - ); - appendChildren(listenerElement, observerElementChildren); - addClass(listenerElement, classNameSizeObserverListenerScroll); - var observerElementChildrenRoot = observerElementChildren[0]; - var shrinkElement = observerElementChildrenRoot.lastChild; - var expandElement = observerElementChildrenRoot.firstChild; - var expandElementChild = expandElement == null ? void 0 : expandElement.firstChild; - var cacheSize = offsetSize(listenerElement); - var currSize = cacheSize; - var isDirty = false; - var rAFId; - - var reset = function reset() { - scrollLeft(expandElement, scrollAmount); - scrollTop(expandElement, scrollAmount); - scrollLeft(shrinkElement, scrollAmount); - scrollTop(shrinkElement, scrollAmount); - }; - - var onResized = function onResized() { - rAFId = 0; - - if (isDirty) { - cacheSize = currSize; - onSizeChangedCallbackProxy(); - } - }; - - var onScroll = function onScroll(scrollEvent) { - currSize = offsetSize(listenerElement); - isDirty = !scrollEvent || !equalWH(currSize, cacheSize); - - if (scrollEvent && isDirty && !rAFId) { - cAF(rAFId); - rAFId = rAF(onResized); - } else if (!scrollEvent) { - onResized(); - } - - reset(); - - if (scrollEvent) { - preventDefault(scrollEvent); - stopPropagation(scrollEvent); - } - - return false; - }; - - push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]); - style(expandElementChild, { - width: scrollAmount, - height: scrollAmount, - }); - reset(); - appearCallback = observeAppearChange - ? function () { - return onScroll(); - } - : reset; - } - - if (observeDirectionChange) { - var updateDirectionIsRTLCache = createCache(function () { - return directionIsRTL(sizeObserver); - }); - push( - offListeners, - on(sizeObserver, scrollEventName, function (event) { - var directionIsRTLCache = updateDirectionIsRTLCache(); - var _value = directionIsRTLCache._value, - _changed = directionIsRTLCache._changed; - - if (_changed) { - if (_value) { - style(listenerElement, { - left: 'auto', - right: 0, - }); - } else { - style(listenerElement, { - left: 0, - right: 'auto', - }); - } - - onSizeChangedCallbackProxy(directionIsRTLCache); - } - - preventDefault(event); - stopPropagation(event); - return false; - }) - ); - } - - if (appearCallback) { - addClass(sizeObserver, classNameSizeObserverAppear); - push( - offListeners, - on(sizeObserver, animationStartEventName, appearCallback, { - _once: !!ResizeObserverConstructor, - }) - ); - } - - prependChildren(target, sizeObserver); - return function () { - runEach(offListeners); - removeElements(sizeObserver); - }; - }; - - var createTrinsicObserver = function createTrinsicObserver(target, onTrinsicChangedCallback) { - var trinsicObserver = createDOM('
')[0]; - var offListeners = []; - var updateHeightIntrinsicCache = createCache( - function (ioEntryOrSize) { - return ioEntryOrSize.h === 0 || ioEntryOrSize.isIntersecting || ioEntryOrSize.intersectionRatio > 0; - }, - { - _initialValue: false, - } - ); - - if (IntersectionObserverConstructor) { - var intersectionObserverInstance = new IntersectionObserverConstructor( - function (entries) { - if (entries && entries.length > 0) { - var last = entries.pop(); - - if (last) { - var heightIntrinsicCache = updateHeightIntrinsicCache(0, last); - - if (heightIntrinsicCache._changed) { - onTrinsicChangedCallback(false, heightIntrinsicCache); - } - } - } - }, - { - root: target, - } - ); - intersectionObserverInstance.observe(trinsicObserver); - push(offListeners, function () { - return intersectionObserverInstance.disconnect(); - }); - } else { - push( - offListeners, - createSizeObserver(trinsicObserver, function () { - var newSize = offsetSize(trinsicObserver); - var heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize); - - if (heightIntrinsicCache._changed) { - onTrinsicChangedCallback(false, heightIntrinsicCache); - } - }) - ); - } - - prependChildren(target, trinsicObserver); - return function () { - runEach(offListeners); - removeElements(trinsicObserver); - }; - }; - - var createEventContentChange = function createEventContentChange(target, eventContentChange, map, callback) { - var eventContentChangeRef; - - var addEvent = function addEvent(elm, eventName) { - var entry = map.get(elm); - var newEntry = isUndefined(entry); - - var registerEvent = function registerEvent() { - map.set(elm, eventName); - on(elm, eventName, callback); - }; - - if (!newEntry && eventName !== entry) { - off(elm, entry, callback); - registerEvent(); - } else if (newEntry) { - registerEvent(); - } - }; - - var _destroy = function _destroy() { - map.forEach(function (eventName, elm) { - off(elm, eventName, callback); - }); - map.clear(); - }; - - var _updateElements = function _updateElements(getElements) { - if (eventContentChangeRef) { - var eventElmList = eventContentChangeRef.reduce(function (arr, item) { - if (item) { - var selector = item[0]; - var eventName = item[1]; - var elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target)); - - if (elements) { - push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName], true); - } - } - - return arr; - }, []); - each(eventElmList, function (item) { - var elements = item[0]; - var eventName = item[1]; - each(elements, function (elm) { - addEvent(elm, eventName); - }); - }); - } - }; - - var _update = function _update(newEventContentChange) { - eventContentChangeRef = newEventContentChange; - - _destroy(); - - _updateElements(); - }; - - if (eventContentChange) { - _update(eventContentChange); - } - - return { - _destroy: _destroy, - _updateElements: _updateElements, - _update: _update, - }; - }; - - var createDOMObserver = function createDOMObserver(target, callback, options) { - var isConnected = false; - - var _ref = options || {}, - _observeContent = _ref._observeContent, - _attributes = _ref._attributes, - _styleChangingAttributes = _ref._styleChangingAttributes, - _eventContentChange = _ref._eventContentChange, - _nestedTargetSelector = _ref._nestedTargetSelector, - _ignoreTargetChange = _ref._ignoreTargetAttrChange, - _ignoreContentChange = _ref._ignoreContentChange; - - var _createEventContentCh = createEventContentChange( - target, - _observeContent && _eventContentChange, - new Map(), - debounce(function () { - if (isConnected) { - callback([], false, true); - } - }, 80) - ), - updateEventContentChangeElements = _createEventContentCh._updateElements, - destroyEventContentChange = _createEventContentCh._destroy, - updateEventContentChange = _createEventContentCh._update; - - var finalAttributes = _attributes || []; - var finalStyleChangingAttributes = _styleChangingAttributes || []; - var observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); - - var observerCallback = function observerCallback(mutations) { - var ignoreTargetChange = _ignoreTargetChange || noop; - var ignoreContentChange = _ignoreContentChange || noop; - var targetChangedAttrs = []; - var totalAddedNodes = []; - var targetStyleChanged = false; - var contentChanged = false; - var childListChanged = false; - each(mutations, function (mutation) { - var attributeName = mutation.attributeName, - mutationTarget = mutation.target, - type = mutation.type, - oldValue = mutation.oldValue, - addedNodes = mutation.addedNodes; - var isAttributesType = type === 'attributes'; - var isChildListType = type === 'childList'; - var targetIsMutationTarget = target === mutationTarget; - var attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget, attributeName) : 0; - var attributeChanged = attributeValue !== 0 && oldValue !== attributeValue; - var targetAttrChanged = - attributeChanged && - targetIsMutationTarget && - !_observeContent && - !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue); - var styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged; - - if (targetAttrChanged) { - push(targetChangedAttrs, attributeName); - } - - if (_observeContent) { - var notOnlyAttrChanged = !isAttributesType; - var contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget; - var isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector); - var baseAssertion = isNestedTarget - ? !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue) - : notOnlyAttrChanged || contentAttrChanged; - var contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options); - push(totalAddedNodes, addedNodes); - contentChanged = contentChanged || contentFinalChanged; - childListChanged = childListChanged || isChildListType; - } - - targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged); - }); - - if (childListChanged && !isEmptyArray(totalAddedNodes)) { - updateEventContentChangeElements(function (selector) { - return totalAddedNodes.reduce(function (arr, node) { - push(arr, find(selector, node)); - return is(node, selector) ? push(arr, node) : arr; - }, []); - }); - } - - if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) { - callback(targetChangedAttrs, targetStyleChanged, contentChanged); - } - }; - - var mutationObserver = new MutationObserverConstructor(observerCallback); - mutationObserver.observe(target, { - attributes: true, - attributeOldValue: true, - attributeFilter: observedAttributes, - subtree: _observeContent, - childList: _observeContent, - characterData: _observeContent, - }); - isConnected = true; - return { - _disconnect: function _disconnect() { - if (isConnected) { - destroyEventContentChange(); - mutationObserver.disconnect(); - isConnected = false; - } - }, - _updateEventContentChange: function _updateEventContentChange(newEventContentChange) { - updateEventContentChange(isConnected && _observeContent && newEventContentChange); - }, - _update: function _update() { - if (isConnected) { - observerCallback(mutationObserver.takeRecords()); - } - }, - }; - }; - var unwrap = function unwrap(elm) { appendChildren(parent(elm), contents(elm)); removeElements(elm); @@ -1691,6 +1018,21 @@ _host: _host, }); + var _getEnvironment = getEnvironment(), + _nativeScrollbarStyling = _getEnvironment._nativeScrollbarStyling, + _nativeScrollbarIsOverlaid = _getEnvironment._nativeScrollbarIsOverlaid; + + if (_nativeScrollbarStyling) { + push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling)); + } else if (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y) { + if (obj._content) { + var contentArrangeElm = createDiv(classNameContentArrange); + prependChildren(_viewport, contentArrangeElm); + push(destroyFns, removeElements.bind(0, contentArrangeElm)); + obj._contentArrange = contentArrangeElm; + } + } + return { _targetObj: obj, _targetCtx: ctx, @@ -1700,50 +1042,945 @@ }; }; - var OverlayScrollbars = function OverlayScrollbars(target, options, extensions) { - var structureSetup = createStructureSetup(target); - var lifecycles = []; + var getPropByPath = function getPropByPath(obj, path) { + return ( + obj && + path.split('.').reduce(function (o, prop) { + return o && hasOwnProperty$1(o, prop) ? o[prop] : undefined; + }, obj) + ); + }; + + var createLifecycleUpdateFunction = function createLifecycleUpdateFunction(lifecycleHub, updateFunction) { + return function (updateHints, changedOptions, force) { + var checkOption = function checkOption(path) { + return { + _value: getPropByPath(lifecycleHub._options, path), + _changed: force || getPropByPath(changedOptions, path) !== undefined, + }; + }; + + return updateFunction(!!force, updateHints, checkOption) || {}; + }; + }; + + var overlaidScrollbarsHideOffset = 42; + var overlaidScrollbarsHideBorderStyle = overlaidScrollbarsHideOffset + 'px solid transparent'; + var createOverflowLifecycle = function createOverflowLifecycle(lifecycleHub) { + var _lifecycleHub$_struct = lifecycleHub._structureSetup._targetObj, + _host = _lifecycleHub$_struct._host, + _padding = _lifecycleHub$_struct._padding, + _viewport = _lifecycleHub$_struct._viewport, + _content = _lifecycleHub$_struct._content, + _contentArrange = _lifecycleHub$_struct._contentArrange; + + var _createCache = createCache( + function () { + return scrollSize(_content || _viewport); + }, + { + _equal: equalWH, + } + ), + updateContentScrollSizeCache = _createCache._update, + getCurrentContentScrollSizeCache = _createCache._current; + + var _createCache2 = createCache( + function (ctx) { + return { + x: Math.max(0, Math.round((ctx._contentScrollSize.w - ctx._viewportSize.w) * 100) / 100), + y: Math.max(0, Math.round((ctx._contentScrollSize.h - ctx._viewportSize.h) * 100) / 100), + }; + }, + { + _equal: equalXY, + } + ), + updateOverflowAmountCache = _createCache2._update, + getCurrentOverflowAmountCache = _createCache2._current; + + var setViewportOverflowStyle = function setViewportOverflowStyle(horizontal, amount, behavior, styleObj) { + var overflowKey = horizontal ? 'overflowX' : 'overflowY'; + var behaviorIsScroll = behavior === 'scroll'; + var behaviorIsVisibleScroll = behavior === 'visible-scroll'; + var hideOverflow = behaviorIsScroll || behavior === 'hidden'; + var applyStyle = amount > 0 && hideOverflow; + + if (applyStyle) { + styleObj[overflowKey] = behavior; + } + + return { + _visible: !applyStyle, + _behavior: behaviorIsVisibleScroll ? 'scroll' : 'hidden', + }; + }; + + var hideNativeScrollbars = function hideNativeScrollbars( + contentScrollSize, + showNativeOverlaidScrollbars, + directionIsRTL, + viewportStyleObj, + contentStyleObj + ) { + var _getEnvironment = getEnvironment(), + _nativeScrollbarSize = _getEnvironment._nativeScrollbarSize, + _nativeScrollbarIsOverlaid = _getEnvironment._nativeScrollbarIsOverlaid, + _nativeScrollbarStyling = _getEnvironment._nativeScrollbarStyling; + + var overlaidX = _nativeScrollbarIsOverlaid.x, + overlaidY = _nativeScrollbarIsOverlaid.y; + var scrollX = viewportStyleObj.overflowX === 'scroll'; + var scrollY = viewportStyleObj.overflowY === 'scroll'; + var horizontalMarginKey = directionIsRTL ? 'marginLeft' : 'marginRight'; + var horizontalBorderKey = directionIsRTL ? 'borderLeft' : 'borderRight'; + var overlaidHideOffset = _content && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0; + var scrollbarsHideOffset = { + x: overlaidX ? overlaidHideOffset : _nativeScrollbarSize.x, + y: overlaidY ? overlaidHideOffset : _nativeScrollbarSize.y, + }; + + if (!_nativeScrollbarStyling) { + if (scrollX) { + viewportStyleObj.marginBottom = -scrollbarsHideOffset.x; + contentStyleObj.borderBottom = overlaidX && overlaidHideOffset ? overlaidScrollbarsHideBorderStyle : ''; + } + + if (scrollY) { + viewportStyleObj.maxWidth = 'calc(100% + ' + scrollbarsHideOffset.y + 'px)'; + viewportStyleObj[horizontalMarginKey] = -scrollbarsHideOffset.y; + contentStyleObj[horizontalBorderKey] = overlaidY && overlaidHideOffset ? overlaidScrollbarsHideBorderStyle : ''; + } + + if (_contentArrange) { + style(_contentArrange, { + width: scrollY && !showNativeOverlaidScrollbars ? overlaidHideOffset + contentScrollSize.w : '', + height: scrollX && !showNativeOverlaidScrollbars ? overlaidHideOffset + contentScrollSize.h : '', + }); + } + } + + return { + _scrollbarsHideOffset: scrollbarsHideOffset, + _scroll: { + x: scrollX, + y: scrollY, + }, + }; + }; + + var setFlexboxGlueStyle = function setFlexboxGlueStyle(heightIntrinsic, scrollX, scrollbarsHideOffsetX) { + var offsetLeft = scrollLeft(_viewport); + var offsetTop = scrollTop(_viewport); + style(_viewport, { + maxHeight: '', + }); + + if (heightIntrinsic) { + style(_viewport, { + maxHeight: _host.clientHeight + (scrollX ? scrollbarsHideOffsetX : 0), + }); + } + + scrollLeft(_viewport, offsetLeft); + scrollTop(_viewport, offsetTop); + }; + + return createLifecycleUpdateFunction(lifecycleHub, function (force, updateHints, checkOption) { + var _directionIsRTL = updateHints._directionIsRTL, + _heightIntrinsic = updateHints._heightIntrinsic, + _sizeChanged = updateHints._sizeChanged, + _hostMutation = updateHints._hostMutation, + _contentMutation = updateHints._contentMutation; + + var _getEnvironment2 = getEnvironment(), + _flexboxGlue = _getEnvironment2._flexboxGlue, + _nativeScrollbarStyling = _getEnvironment2._nativeScrollbarStyling, + _nativeScrollbarIsOverlaid = _getEnvironment2._nativeScrollbarIsOverlaid; + + var _checkOption = checkOption('nativeScrollbarsOverlaid.show'), + showNativeOverlaidScrollbarsOption = _checkOption._value, + showNativeOverlaidScrollbarsChanged = _checkOption._changed; + + var adjustFlexboxGlue = !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged); + var showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y; + var overflowAmuntCache = getCurrentOverflowAmountCache(); + var contentScrollSizeCache = getCurrentContentScrollSizeCache(); + + if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) { + if (showNativeOverlaidScrollbars) { + removeClass(_viewport, classNameViewportScrollbarStyling); + } else { + addClass(_viewport, classNameViewportScrollbarStyling); + } + } + + if (_sizeChanged || _contentMutation) { + var viewportOffsetSize = offsetSize(_padding); + var contentClientSize = offsetSize(_content || _viewport); + var contentArrangeOffsetSize = offsetSize(_contentArrange); + contentScrollSizeCache = updateContentScrollSizeCache(force); + var _contentScrollSizeCac = contentScrollSizeCache, + _contentScrollSize = _contentScrollSizeCac._value; + overflowAmuntCache = updateOverflowAmountCache(force, { + _contentScrollSize: { + w: Math.max(_contentScrollSize.w, contentArrangeOffsetSize.w), + h: Math.max(_contentScrollSize.h, contentArrangeOffsetSize.h), + }, + _viewportSize: { + w: viewportOffsetSize.w + Math.max(0, contentClientSize.w - _contentScrollSize.w), + h: viewportOffsetSize.h + Math.max(0, contentClientSize.h - _contentScrollSize.h), + }, + }); + } + + var directionIsRTL = _directionIsRTL._value, + directionChanged = _directionIsRTL._changed; + var _contentScrollSizeCac2 = contentScrollSizeCache, + contentScrollSize = _contentScrollSizeCac2._value, + contentScrollSizeChanged = _contentScrollSizeCac2._changed; + var _overflowAmuntCache = overflowAmuntCache, + overflowAmount = _overflowAmuntCache._value, + overflowAmountChanged = _overflowAmuntCache._changed; + + var _checkOption2 = checkOption('overflow'), + overflow = _checkOption2._value, + overflowChanged = _checkOption2._changed; + + var adjustDirection = directionChanged && !_nativeScrollbarStyling; + + if ( + contentScrollSizeChanged || + overflowAmountChanged || + overflowChanged || + showNativeOverlaidScrollbarsChanged || + adjustDirection || + adjustFlexboxGlue + ) { + var viewportStyle = { + overflowY: '', + overflowX: '', + marginTop: '', + marginRight: '', + marginBottom: '', + marginLeft: '', + maxWidth: '', + }; + var contentStyle = { + borderTop: '', + borderRight: '', + borderBottom: '', + borderLeft: '', + }; + + var _setViewportOverflowS = setViewportOverflowStyle(true, overflowAmount.x, overflow.x, viewportStyle), + xVisible = _setViewportOverflowS._visible, + xVisibleBehavior = _setViewportOverflowS._behavior; + + var _setViewportOverflowS2 = setViewportOverflowStyle(false, overflowAmount.y, overflow.y, viewportStyle), + yVisible = _setViewportOverflowS2._visible, + yVisibleBehavior = _setViewportOverflowS2._behavior; + + if (xVisible && !yVisible) { + viewportStyle.overflowX = xVisibleBehavior; + } + + if (yVisible && !xVisible) { + viewportStyle.overflowY = yVisibleBehavior; + } + + var _hideNativeScrollbars = hideNativeScrollbars( + contentScrollSize, + showNativeOverlaidScrollbars, + directionIsRTL, + viewportStyle, + contentStyle + ), + _scrollbarsHideOffset = _hideNativeScrollbars._scrollbarsHideOffset, + _scroll = _hideNativeScrollbars._scroll; + + if (adjustFlexboxGlue) { + setFlexboxGlueStyle(!!_heightIntrinsic._value, _scroll.x, _scrollbarsHideOffset.x); + } + + style(_viewport, viewportStyle); + style(_content, contentStyle); + } + }); + }; + + var animationStartEventName = 'animationstart'; + var scrollEventName = 'scroll'; + var scrollAmount = 3333333; + var directionIsRTLMap = { + direction: ['rtl'], + }; + + var directionIsRTL = function directionIsRTL(elm) { + var isRTL = false; + var styles = style(elm, ['direction']); + each(styles, function (value, key) { + isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1; + }); + return isRTL; + }; + + var domRectHasDimensions = function domRectHasDimensions(rect) { + return rect && (rect.height || rect.width); + }; + + var createSizeObserver = function createSizeObserver(target, onSizeChangedCallback, options) { + var _ref = options || {}, + _ref$_direction = _ref._direction, + observeDirectionChange = _ref$_direction === void 0 ? false : _ref$_direction, + _ref$_appear = _ref._appear, + observeAppearChange = _ref$_appear === void 0 ? false : _ref$_appear; + + var _getEnvironment = getEnvironment(), + rtlScrollBehavior = _getEnvironment._rtlScrollBehavior; + + var baseElements = createDOM('
'); + var sizeObserver = baseElements[0]; + var listenerElement = sizeObserver.firstChild; + + var _createCache = createCache(0, { + _alwaysUpdateValues: true, + _equal: function _equal(currVal, newVal) { + return !(!currVal || (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))); + }, + }), + updateResizeObserverContentRectCache = _createCache._update; + + var onSizeChangedCallbackProxy = function onSizeChangedCallbackProxy(sizeChangedContext) { + var hasDirectionCache = sizeChangedContext && isBoolean(sizeChangedContext._value); + var skip = false; + + if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) { + var _updateResizeObserver = updateResizeObserverContentRectCache(0, sizeChangedContext.pop().contentRect), + _previous = _updateResizeObserver._previous, + _value = _updateResizeObserver._value, + _changed = _updateResizeObserver._changed; + + skip = !_previous || !domRectHasDimensions(_value); + } else if (hasDirectionCache) { + sizeChangedContext._changed; + } + + if (observeDirectionChange) { + var rtl = hasDirectionCache ? sizeChangedContext._value : directionIsRTL(sizeObserver); + scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount); + scrollTop(sizeObserver, scrollAmount); + } + + if (!skip) { + onSizeChangedCallback(hasDirectionCache ? sizeChangedContext : undefined); + } + }; + + var offListeners = []; + var appearCallback = observeAppearChange ? onSizeChangedCallbackProxy : false; + var directionIsRTLCache; + + if (ResizeObserverConstructor) { + var resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy); + resizeObserverInstance.observe(listenerElement); + push(offListeners, function () { + return resizeObserverInstance.disconnect(); + }); + } else { + var observerElementChildren = createDOM( + '
' + ); + appendChildren(listenerElement, observerElementChildren); + addClass(listenerElement, classNameSizeObserverListenerScroll); + var observerElementChildrenRoot = observerElementChildren[0]; + var shrinkElement = observerElementChildrenRoot.lastChild; + var expandElement = observerElementChildrenRoot.firstChild; + var expandElementChild = expandElement == null ? void 0 : expandElement.firstChild; + var cacheSize = offsetSize(listenerElement); + var currSize = cacheSize; + var isDirty = false; + var rAFId; + + var reset = function reset() { + scrollLeft(expandElement, scrollAmount); + scrollTop(expandElement, scrollAmount); + scrollLeft(shrinkElement, scrollAmount); + scrollTop(shrinkElement, scrollAmount); + }; + + var onResized = function onResized() { + rAFId = 0; + + if (isDirty) { + cacheSize = currSize; + onSizeChangedCallbackProxy(); + } + }; + + var onScroll = function onScroll(scrollEvent) { + currSize = offsetSize(listenerElement); + isDirty = !scrollEvent || !equalWH(currSize, cacheSize); + + if (scrollEvent && isDirty && !rAFId) { + cAF(rAFId); + rAFId = rAF(onResized); + } else if (!scrollEvent) { + onResized(); + } + + reset(); + + if (scrollEvent) { + preventDefault(scrollEvent); + stopPropagation(scrollEvent); + } + + return false; + }; + + push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]); + style(expandElementChild, { + width: scrollAmount, + height: scrollAmount, + }); + reset(); + appearCallback = observeAppearChange + ? function () { + return onScroll(); + } + : reset; + } + + if (observeDirectionChange) { + directionIsRTLCache = createCache(function () { + return directionIsRTL(sizeObserver); + }); + var _directionIsRTLCache = directionIsRTLCache, + updateDirectionIsRTLCache = _directionIsRTLCache._update; + push( + offListeners, + on(sizeObserver, scrollEventName, function (event) { + var directionIsRTLCacheValues = updateDirectionIsRTLCache(); + var _value = directionIsRTLCacheValues._value, + _changed = directionIsRTLCacheValues._changed; + + if (_changed) { + if (_value) { + style(listenerElement, { + left: 'auto', + right: 0, + }); + } else { + style(listenerElement, { + left: 0, + right: 'auto', + }); + } + + onSizeChangedCallbackProxy(directionIsRTLCacheValues); + } + + preventDefault(event); + stopPropagation(event); + return false; + }) + ); + } + + if (appearCallback) { + addClass(sizeObserver, classNameSizeObserverAppear); + push( + offListeners, + on(sizeObserver, animationStartEventName, appearCallback, { + _once: !!ResizeObserverConstructor, + }) + ); + } + + prependChildren(target, sizeObserver); + return { + _destroy: function _destroy() { + runEach(offListeners); + removeElements(sizeObserver); + }, + _getCurrentCacheValues: function _getCurrentCacheValues(force) { + return { + _directionIsRTL: directionIsRTLCache + ? directionIsRTLCache._current(force) + : { + _value: false, + _previous: false, + _changed: false, + }, + }; + }, + }; + }; + + var createTrinsicObserver = function createTrinsicObserver(target, onTrinsicChangedCallback) { + var trinsicObserver = createDOM('
')[0]; + var offListeners = []; + + var _createCache = createCache( + function (ioEntryOrSize) { + return ioEntryOrSize.h === 0 || ioEntryOrSize.isIntersecting || ioEntryOrSize.intersectionRatio > 0; + }, + { + _initialValue: false, + } + ), + updateHeightIntrinsicCache = _createCache._update, + getCurrentHeightIntrinsicCache = _createCache._current; + + if (IntersectionObserverConstructor) { + var intersectionObserverInstance = new IntersectionObserverConstructor( + function (entries) { + if (entries && entries.length > 0) { + var last = entries.pop(); + + if (last) { + var heightIntrinsic = updateHeightIntrinsicCache(0, last); + + if (heightIntrinsic._changed) { + onTrinsicChangedCallback(heightIntrinsic); + } + } + } + }, + { + root: target, + } + ); + intersectionObserverInstance.observe(trinsicObserver); + push(offListeners, function () { + return intersectionObserverInstance.disconnect(); + }); + } else { + push( + offListeners, + createSizeObserver(trinsicObserver, function () { + var newSize = offsetSize(trinsicObserver); + var heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize); + + if (heightIntrinsicCache._changed) { + onTrinsicChangedCallback(heightIntrinsicCache); + } + })._destroy + ); + } + + prependChildren(target, trinsicObserver); + return { + _destroy: function _destroy() { + runEach(offListeners); + removeElements(trinsicObserver); + }, + _getCurrentCacheValues: function _getCurrentCacheValues(force) { + return { + _heightIntrinsic: getCurrentHeightIntrinsicCache(force), + }; + }, + }; + }; + + var createEventContentChange = function createEventContentChange(target, eventContentChange, map, callback) { + var eventContentChangeRef; + + var addEvent = function addEvent(elm, eventName) { + var entry = map.get(elm); + var newEntry = isUndefined(entry); + + var registerEvent = function registerEvent() { + map.set(elm, eventName); + on(elm, eventName, callback); + }; + + if (!newEntry && eventName !== entry) { + off(elm, entry, callback); + registerEvent(); + } else if (newEntry) { + registerEvent(); + } + }; + + var _destroy = function _destroy() { + map.forEach(function (eventName, elm) { + off(elm, eventName, callback); + }); + map.clear(); + }; + + var _updateElements = function _updateElements(getElements) { + if (eventContentChangeRef) { + var eventElmList = eventContentChangeRef.reduce(function (arr, item) { + if (item) { + var selector = item[0]; + var eventName = item[1]; + var elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target)); + + if (elements) { + push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName], true); + } + } + + return arr; + }, []); + each(eventElmList, function (item) { + var elements = item[0]; + var eventName = item[1]; + each(elements, function (elm) { + addEvent(elm, eventName); + }); + }); + } + }; + + var _update = function _update(newEventContentChange) { + eventContentChangeRef = newEventContentChange; + + _destroy(); + + _updateElements(); + }; + + if (eventContentChange) { + _update(eventContentChange); + } + + return { + _destroy: _destroy, + _updateElements: _updateElements, + _update: _update, + }; + }; + + var createDOMObserver = function createDOMObserver(target, callback, options) { + var isConnected = false; + + var _ref = options || {}, + _observeContent = _ref._observeContent, + _attributes = _ref._attributes, + _styleChangingAttributes = _ref._styleChangingAttributes, + _eventContentChange = _ref._eventContentChange, + _nestedTargetSelector = _ref._nestedTargetSelector, + _ignoreTargetChange = _ref._ignoreTargetAttrChange, + _ignoreContentChange = _ref._ignoreContentChange; + + var _createEventContentCh = createEventContentChange( + target, + _observeContent && _eventContentChange, + new Map(), + debounce(function () { + if (isConnected) { + callback([], false, true); + } + }, 84) + ), + updateEventContentChangeElements = _createEventContentCh._updateElements, + destroyEventContentChange = _createEventContentCh._destroy, + updateEventContentChange = _createEventContentCh._update; + + var finalAttributes = _attributes || []; + var finalStyleChangingAttributes = _styleChangingAttributes || []; + var observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); + + var observerCallback = function observerCallback(mutations) { + var ignoreTargetChange = _ignoreTargetChange || noop; + var ignoreContentChange = _ignoreContentChange || noop; + var targetChangedAttrs = []; + var totalAddedNodes = []; + var targetStyleChanged = false; + var contentChanged = false; + var childListChanged = false; + each(mutations, function (mutation) { + var attributeName = mutation.attributeName, + mutationTarget = mutation.target, + type = mutation.type, + oldValue = mutation.oldValue, + addedNodes = mutation.addedNodes; + var isAttributesType = type === 'attributes'; + var isChildListType = type === 'childList'; + var targetIsMutationTarget = target === mutationTarget; + var attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget, attributeName) : 0; + var attributeChanged = attributeValue !== 0 && oldValue !== attributeValue; + var targetAttrChanged = + attributeChanged && + targetIsMutationTarget && + !_observeContent && + !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue); + var styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged; + + if (targetAttrChanged) { + push(targetChangedAttrs, attributeName); + } + + if (_observeContent) { + var notOnlyAttrChanged = !isAttributesType; + var contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget; + var isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector); + var baseAssertion = isNestedTarget + ? !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue) + : notOnlyAttrChanged || contentAttrChanged; + var contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options); + push(totalAddedNodes, addedNodes); + contentChanged = contentChanged || contentFinalChanged; + childListChanged = childListChanged || isChildListType; + } + + targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged); + }); + + if (childListChanged && !isEmptyArray(totalAddedNodes)) { + updateEventContentChangeElements(function (selector) { + return totalAddedNodes.reduce(function (arr, node) { + push(arr, find(selector, node)); + return is(node, selector) ? push(arr, node) : arr; + }, []); + }); + } + + if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) { + callback(targetChangedAttrs, targetStyleChanged, contentChanged); + } + }; + + var mutationObserver = new MutationObserverConstructor(observerCallback); + mutationObserver.observe(target, { + attributes: true, + attributeOldValue: true, + attributeFilter: observedAttributes, + subtree: _observeContent, + childList: _observeContent, + characterData: _observeContent, + }); + isConnected = true; + return { + _disconnect: function _disconnect() { + if (isConnected) { + destroyEventContentChange(); + mutationObserver.disconnect(); + isConnected = false; + } + }, + _updateEventContentChange: function _updateEventContentChange(newEventContentChange) { + updateEventContentChange(isConnected && _observeContent && newEventContentChange); + }, + _update: function _update() { + if (isConnected) { + observerCallback(mutationObserver.takeRecords()); + } + }, + }; + }; + + var attrs = ['id', 'class', 'style', 'open']; + var directionIsRTLCacheValuesFallback = { + _value: false, + _previous: false, + _changed: false, + }; + var heightIntrinsicCacheValuesFallback = { + _value: false, + _previous: false, + _changed: false, + }; + var createLifecycleHub = function createLifecycleHub(options, structureSetup) { var _structureSetup$_targ = structureSetup._targetObj, _host = _structureSetup$_targ._host, _viewport = _structureSetup$_targ._viewport, _content = _structureSetup$_targ._content; - push(lifecycles, createStructureLifecycle(structureSetup._targetObj)); - var onSizeChanged = function onSizeChanged(directionCache) { - if (directionCache) { - each(lifecycles, function (lifecycle) { - lifecycle._onDirectionChanged && lifecycle._onDirectionChanged(directionCache); - }); - } else { - each(lifecycles, function (lifecycle) { - lifecycle._onSizeChanged && lifecycle._onSizeChanged(); - }); - } + var _getEnvironment = getEnvironment(), + _nativeScrollbarStyling = _getEnvironment._nativeScrollbarStyling, + _flexboxGlue = _getEnvironment._flexboxGlue, + addEnvironmentListener = _getEnvironment._addListener, + removeEnvironmentListener = _getEnvironment._removeListener; + + var lifecycles = []; + var instance = { + _options: options, + _structureSetup: structureSetup, }; + push(lifecycles, createOverflowLifecycle(instance)); - var onTrinsicChanged = function onTrinsicChanged(widthIntrinsic, heightIntrinsicCache) { + var runLifecycles = function runLifecycles(updateHints, changedOptions, force) { + var _ref = updateHints || {}, + _directionIsRTL = _ref._directionIsRTL, + _heightIntrinsic = _ref._heightIntrinsic, + _ref$_sizeChanged = _ref._sizeChanged, + _sizeChanged = _ref$_sizeChanged === void 0 ? force || false : _ref$_sizeChanged, + _ref$_hostMutation = _ref._hostMutation, + _hostMutation = _ref$_hostMutation === void 0 ? force || false : _ref$_hostMutation, + _ref$_contentMutation = _ref._contentMutation, + _contentMutation = _ref$_contentMutation === void 0 ? force || false : _ref$_contentMutation; + + var finalDirectionIsRTL = + _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback); + var finalHeightIntrinsic = + _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback); each(lifecycles, function (lifecycle) { - lifecycle._onTrinsicChanged && lifecycle._onTrinsicChanged(widthIntrinsic, heightIntrinsicCache); + var _lifecycle = lifecycle( + { + _directionIsRTL: finalDirectionIsRTL, + _heightIntrinsic: finalHeightIntrinsic, + _sizeChanged: _sizeChanged, + _hostMutation: _hostMutation, + _contentMutation: _contentMutation, + }, + changedOptions, + force + ), + adaptiveSizeChanged = _lifecycle._sizeChanged, + adaptiveHostMutation = _lifecycle._hostMutation, + adaptiveContentMutation = _lifecycle._contentMutation; + + _sizeChanged = adaptiveSizeChanged || _sizeChanged; + _hostMutation = adaptiveHostMutation || _hostMutation; + _contentMutation = adaptiveContentMutation || _contentMutation; }); }; - createSizeObserver(_host, onSizeChanged, { + var onSizeChanged = function onSizeChanged(directionIsRTL) { + var sizeChanged = !directionIsRTL; + runLifecycles({ + _directionIsRTL: directionIsRTL, + _sizeChanged: sizeChanged, + }); + }; + + var onTrinsicChanged = function onTrinsicChanged(heightIntrinsic) { + runLifecycles({ + _heightIntrinsic: heightIntrinsic, + }); + }; + + var onHostMutation = function onHostMutation() { + requestAnimationFrame(function () { + runLifecycles({ + _hostMutation: true, + }); + }); + }; + + var onContentMutation = function onContentMutation() { + requestAnimationFrame(function () { + runLifecycles({ + _contentMutation: true, + }); + }); + }; + + var sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, - _direction: true, + _direction: !_nativeScrollbarStyling, }); - createTrinsicObserver(_host, onTrinsicChanged); - createDOMObserver(_host, function () { - return null; + var trinsicObserver = createTrinsicObserver(_host, onTrinsicChanged); + var hostMutationObserver = createDOMObserver(_host, onHostMutation, { + _styleChangingAttributes: attrs, + _attributes: attrs, }); - createDOMObserver( - _content || _viewport, - function () { - return null; + var contentMutationObserver = createDOMObserver(_content || _viewport, onContentMutation, { + _observeContent: true, + _styleChangingAttributes: attrs, + _attributes: attrs, + _eventContentChange: options.updating.elementEvents, + }); + + var updateAll = function updateAll(changedOptions, force) { + runLifecycles(null, changedOptions, force); + }; + + var envUpdateListener = updateAll.bind(null, null, true); + addEnvironmentListener(envUpdateListener); + console.log('flexboxGlue', _flexboxGlue); + return { + _update: updateAll, + _destroy: function _destroy() { + removeEnvironmentListener(envUpdateListener); }, - { - _observeContent: true, - } - ); + }; + }; + + var numberAllowedValues = optionsTemplateTypes.number; + var stringArrayNullAllowedValues = [optionsTemplateTypes.string, optionsTemplateTypes.array, optionsTemplateTypes.null]; + var booleanTrueTemplate = [true, optionsTemplateTypes.boolean]; + var booleanFalseTemplate = [false, optionsTemplateTypes.boolean]; + var resizeAllowedValues = 'none both horizontal vertical'; + var overflowAllowedValues = 'visible-hidden visible-scroll scroll hidden'; + var scrollbarsVisibilityAllowedValues = 'visible hidden auto'; + var scrollbarsAutoHideAllowedValues = 'never scroll leavemove'; + var defaultOptionsWithTemplate = { + resize: ['none', resizeAllowedValues], + paddingAbsolute: booleanFalseTemplate, + updating: { + elementEvents: [[['img', 'load']], [optionsTemplateTypes.array, optionsTemplateTypes.null]], + contentMutationDebounce: [80, numberAllowedValues], + hostMutationDebounce: [0, numberAllowedValues], + resizeDebounce: [0, numberAllowedValues], + }, + overflow: { + x: ['scroll', overflowAllowedValues], + y: ['scroll', overflowAllowedValues], + }, + scrollbars: { + visibility: ['auto', scrollbarsVisibilityAllowedValues], + autoHide: ['never', scrollbarsAutoHideAllowedValues], + autoHideDelay: [800, numberAllowedValues], + dragScroll: booleanTrueTemplate, + clickScroll: booleanFalseTemplate, + touch: booleanTrueTemplate, + }, + textarea: { + dynWidth: booleanFalseTemplate, + dynHeight: booleanFalseTemplate, + inheritedAttrs: [['style', 'class'], stringArrayNullAllowedValues], + }, + nativeScrollbarsOverlaid: { + show: booleanFalseTemplate, + initialize: booleanFalseTemplate, + }, + }; + + var _transformOptions = transformOptions(defaultOptionsWithTemplate), + optionsTemplate = _transformOptions._template, + defaultOptions = _transformOptions._options; + + var OverlayScrollbars = function OverlayScrollbars(target, options, extensions) { + var currentOptions = assignDeep({}, defaultOptions, validateOptions(options || {}, optionsTemplate, null, true)._validated); + var structureSetup = createStructureSetup(target); + var lifecycleHub = createLifecycleHub(currentOptions, structureSetup); + var instance = { + options: function options(newOptions) { + if (newOptions) { + var _validateOptions = validateOptions(newOptions, optionsTemplate, currentOptions, true), + _changedOptions = _validateOptions._validated; + + if (!isEmptyObject(_changedOptions)) { + assignDeep(currentOptions, _changedOptions); + + lifecycleHub._update(_changedOptions); + } + } + + return currentOptions; + }, + update: function update(force) { + lifecycleHub._update(null, force); + }, + }; + instance.update(true); + return instance; }; var index = function () { diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index eee4d23..70c7a95 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js.map +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/utils/types.ts","../src/support/dom/attribute.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/class.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../src/support/cache/cache.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/environment/environment.ts","../src/lifecycles/lifecycleBase.ts","../src/lifecycles/structureLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup.ts","../src/overlayscrollbars/overlayscrollbars.ts","../src/index.ts"],"sourcesContent":["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 return 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\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: Array) => unknown {\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) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : 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 ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : 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 ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { 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 | null,\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 | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * 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 | null, 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 | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): 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 | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): 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 | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\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 | void\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 | void\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void\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 | void\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: Array, item: T, fromIndex?: number): number => 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: Array, items: T | ArrayLike, arrayIsSingleItem?: boolean): Array => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items as Array) : 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) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n\r\n each(arr, (elm) => {\r\n push(result, elm);\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: Array | null | undefined) => 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, p1?: unknown): void => {\r\n const runFn = (fn: RunEachItem) => fn && fn(p1);\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 => 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(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): 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 { 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 | null | undefined,\r\n className: string,\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 && 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 = (elm: Element | null | undefined, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\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 */\r\nexport const addClass = (elm: Element | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (classNameA: string | null | undefined, classNameB: string | null | undefined) => {\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 { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | 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 => (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 = (elm: InputElementType, highBoundarySelector: string, deepBoundarySelector: string): 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 | 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 = (parentElm: Node | null | undefined, preferredAnchor: Node | null | undefined, insertedElms: NodeCollection): 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 = (node: Node | null | undefined, insertedNodes: NodeCollection): 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","export interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean => !!(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 | 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 | 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 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 | null | undefined): boolean => (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 = (target: EventTarget, eventNames: string, listener: EventListener, capture?: boolean): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener, 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 = (target: EventTarget, eventNames: string, listener: EventListener, options?: OnOptions): (() => 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: Event) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener;\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) => 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) => evt.preventDefault();\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 = (a: T | undefined, b: T | undefined, props: Array): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n if (a[prop] !== b[prop]) {\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","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 = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\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, or undefined 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 | undefined => {\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 result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return 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 wuthout, or undefined 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 | undefined => {\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 cssCache[name] = result;\r\n return 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('IntersectionObserver');\r\nexport const ResizeObserverConstructor: any | undefined = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\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 timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray } from 'support/utils/types';\r\nimport { PlainObject } 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\ntype CssStyles = { [key: string]: string | number };\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 opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 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 => (!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 ? computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | null | undefined, prop: string, val: string | number): void => {\r\n try {\r\n if (elm && elm.style[prop] !== undefined) {\r\n elm.style[prop] = adaptCSSVal(prop, val);\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(elm: HTMLElement | null | undefined, styles: CssStyles): void;\r\nexport function style(elm: HTMLElement | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(elm: HTMLElement | null | undefined, styles: CssStyles | Array | string): { [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 | null): 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 | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | null | undefined, property?: string): TRBL => {\r\n const finalProp = property || '';\r\n const top = `${finalProp}-top`;\r\n const right = `${finalProp}-right`;\r\n const bottom = `${finalProp}-bottom`;\r\n const left = `${finalProp}-left`;\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 { 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","export interface Cache {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n readonly _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C ? (force?: boolean | 0, context?: C) => Cache : (force: boolean | 0, context: C) => Cache;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): CacheUpdate => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\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 {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return cacheUpdate;\r\n};\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, Func, OptionsValidationResult, OptionsValidated } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\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 options The options object which shall be validated.\r\n * @param template The template according to which the options object 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 options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = 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 validatedResult = validateRecursive(optionsValue, templateValue as PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._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 const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\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 }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\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 options The options object which shall be validated.\r\n * @param template The template according to which the options object 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 */\r\nconst validateOptions = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff?: T | null,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\r\n};\r\n\r\nexport { validateOptions, optionsTemplateTypes };\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","import { OptionsTemplate, OptionsWithOptionsTemplate, OptionsTemplateTypes } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\nimport { isArray } from 'support/utils/types';\r\nimport { each, keys } from 'support/utils';\r\n\r\nexport interface OptionsWithOptionsTemplateTransformation> {\r\n _template: OptionsTemplate;\r\n _options: T;\r\n}\r\n\r\n/**\r\n * Transforms the given OptionsWithOptionsTemplate object to its corresponding generic (T) Object or its corresponding Template object.\r\n * @param optionsWithOptionsTemplate The OptionsWithOptionsTemplate object which shall be converted.\r\n * @param toTemplate True if the given OptionsWithOptionsTemplate shall be converted to its corresponding Template object.\r\n */\r\nexport function transformOptions>(\r\n optionsWithOptionsTemplate: OptionsWithOptionsTemplate\r\n): OptionsWithOptionsTemplateTransformation {\r\n const result: any = {\r\n _template: {},\r\n _options: {},\r\n };\r\n\r\n each(keys(optionsWithOptionsTemplate), (key: Extract) => {\r\n const val: PlainObject | OptionsTemplateTypes | Array = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\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 classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\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","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\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 runEach,\r\n equalWH,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _autoUpdateLoop: boolean;\r\n _nativeScrollbarSize: XY;\r\n _nativeScrollbarIsOverlaid: XY;\r\n _nativeScrollbarStyling: boolean;\r\n _rtlScrollBehavior: { n: boolean; i: boolean };\r\n _flexboxGlue: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { 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 addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = offsetSize(parentElm);\r\n const minOffsetsize = offsetSize(childElm);\r\n const supportsMin = equalWH(minOffsetsize, minOffsetsizeParent);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = offsetSize(parentElm);\r\n const maxOffsetsize = offsetSize(childElm);\r\n const supportsMax = equalWH(maxOffsetsize, maxOffsetsizeParent);\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 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 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\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollBarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollBarSize.x === 0,\r\n y: nativeScrollBarSize.y === 0,\r\n };\r\n\r\n const env: Environment = {\r\n _autoUpdateLoop: false,\r\n _nativeScrollbarSize: nativeScrollBarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: getNativeScrollbarStyling(envElm),\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeAttr(envElm, 'class');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n let scrollbarSize = nativeScrollBarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\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 newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\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 Cache,\r\n OptionsValidated,\r\n OptionsWithOptionsTemplate,\r\n transformOptions,\r\n validateOptions,\r\n assignDeep,\r\n hasOwnProperty,\r\n isEmptyObject,\r\n} from 'support';\r\nimport { PlainObject } from 'typings';\r\n\r\ninterface LifecycleBaseUpdateHints {\r\n _force?: boolean;\r\n _changedOptions?: OptionsValidated;\r\n}\r\n\r\nexport interface LifecycleBase {\r\n _options(newOptions?: O): O;\r\n _update(force?: boolean): void;\r\n}\r\n\r\nexport interface Lifecycle extends LifecycleBase {\r\n _destruct(): void;\r\n _onSizeChanged?(): void;\r\n _onDirectionChanged?(directionCache: Cache): void;\r\n _onTrinsicChanged?(widthIntrinsic: boolean, heightIntrinsicCache: Cache): void;\r\n}\r\n\r\nexport interface LifecycleOptionInfo {\r\n _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\n/**\r\n * Creates a object which can be seen as the base of a lifecycle because it provides all the tools to manage a lifecycle and its options, cache and base functions.\r\n * @param defaultOptionsWithTemplate A object which describes the options and the default options of the lifecycle.\r\n * @param initialOptions The initialOptions for the lifecylce. (Can be undefined)\r\n * @param updateFunction The update function where cache and options updates are handled. Has two arguments which are the changedOptions and the changedCache objects.\r\n */\r\nexport const createLifecycleBase = (\r\n defaultOptionsWithTemplate: OptionsWithOptionsTemplate>,\r\n initialOptions: O | undefined,\r\n updateFunction: (force: boolean, checkOption: LifecycleCheckOption) => any\r\n): LifecycleBase => {\r\n const { _template: optionsTemplate, _options: defaultOptions } = transformOptions>(defaultOptionsWithTemplate);\r\n const options: Required = assignDeep(\r\n {},\r\n defaultOptions,\r\n validateOptions(initialOptions || ({} as O), optionsTemplate, null, true)._validated\r\n );\r\n\r\n const update = (hints: LifecycleBaseUpdateHints) => {\r\n const { _force, _changedOptions } = hints;\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: _force || getPropByPath(_changedOptions, path) !== undefined,\r\n });\r\n updateFunction(!!_force, checkOption);\r\n };\r\n\r\n update({ _force: true });\r\n\r\n return {\r\n _options(newOptions?: O) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, options, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(options, _changedOptions);\r\n update({ _changedOptions });\r\n }\r\n }\r\n return options;\r\n },\r\n _update: (_force?: boolean) => {\r\n update({ _force });\r\n },\r\n };\r\n};\r\n","import {\r\n Cache,\r\n cssProperty,\r\n runEach,\r\n createCache,\r\n topRightBottomLeft,\r\n TRBL,\r\n WH,\r\n XY,\r\n equalTRBL,\r\n equalXY,\r\n optionsTemplateTypes as oTypes,\r\n OptionsTemplateValue,\r\n style,\r\n OptionsWithOptionsTemplate,\r\n scrollSize,\r\n offsetSize,\r\n} from 'support';\r\nimport { PreparedOSTargetObject } from 'setups/structureSetup';\r\nimport { createLifecycleBase, Lifecycle } from 'lifecycles/lifecycleBase';\r\nimport { getEnvironment, Environment } from 'environment';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll';\r\nexport interface StructureLifecycleOptions {\r\n paddingAbsolute: boolean;\r\n overflowBehavior?: {\r\n x?: OverflowBehavior;\r\n y?: OverflowBehavior;\r\n };\r\n}\r\n\r\nconst overflowBehaviorAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate> = {\r\n paddingAbsolute: [false, oTypes.boolean],\r\n overflowBehavior: {\r\n x: ['scroll', overflowBehaviorAllowedValues],\r\n y: ['scroll', overflowBehaviorAllowedValues],\r\n },\r\n};\r\n\r\nconst cssMarginEnd = cssProperty('margin-inline-end');\r\nconst cssBorderEnd = cssProperty('border-inline-end');\r\n\r\nexport const createStructureLifecycle = (\r\n target: PreparedOSTargetObject,\r\n initialOptions?: StructureLifecycleOptions\r\n): Lifecycle => {\r\n const { _host, _padding, _viewport, _content } = target;\r\n const destructFns: (() => any)[] = [];\r\n const env: Environment = getEnvironment();\r\n const scrollbarsOverlaid = env._nativeScrollbarIsOverlaid;\r\n const supportsScrollbarStyling = env._nativeScrollbarStyling;\r\n const supportFlexboxGlue = env._flexboxGlue;\r\n // direction change is only needed to update scrollbar hiding, therefore its not needed if css can do it, scrollbars are invisible or overlaid on y axis\r\n const directionObserverObsolete = (cssMarginEnd && cssBorderEnd) || supportsScrollbarStyling || scrollbarsOverlaid.y;\r\n\r\n const updatePaddingCache = createCache(() => topRightBottomLeft(_host, 'padding'), { _equal: equalTRBL });\r\n const updateOverflowAmountCache = createCache, { _contentScrollSize: WH; _viewportSize: WH }>(\r\n (ctx) => ({\r\n x: Math.max(0, Math.round((ctx!._contentScrollSize.w - ctx!._viewportSize.w) * 100) / 100),\r\n y: Math.max(0, Math.round((ctx!._contentScrollSize.h - ctx!._viewportSize.h) * 100) / 100),\r\n }),\r\n { _equal: equalXY }\r\n );\r\n\r\n const { _options, _update } = createLifecycleBase(defaultOptionsWithTemplate, initialOptions, (force, checkOption) => {\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n const { _value: padding, _changed: paddingChanged } = updatePaddingCache(force);\r\n\r\n if (paddingAbsoluteChanged || paddingChanged) {\r\n const paddingStyle: TRBL = {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n };\r\n\r\n if (!paddingAbsolute) {\r\n paddingStyle.t = -padding!.t;\r\n paddingStyle.r = -(padding!.r + padding!.l);\r\n paddingStyle.b = -(padding!.b + padding!.t);\r\n paddingStyle.l = -padding!.l;\r\n }\r\n\r\n style(_padding, {\r\n top: paddingStyle.t,\r\n left: paddingStyle.l,\r\n 'margin-right': paddingStyle.r,\r\n 'margin-bottom': paddingStyle.b,\r\n 'max-width': `calc(100% + ${paddingStyle.r * -1}px)`,\r\n });\r\n }\r\n\r\n const viewportOffsetSize = offsetSize(_padding);\r\n const contentClientSize = offsetSize(_content);\r\n const contentScrollSize = scrollSize(_content);\r\n const overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: contentScrollSize,\r\n _viewportSize: {\r\n w: viewportOffsetSize.w + Math.max(0, contentClientSize.w - contentScrollSize.w),\r\n h: viewportOffsetSize.h + Math.max(0, contentClientSize.h - contentScrollSize.h),\r\n },\r\n });\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n console.log('overflowAmount', overflowAmount);\r\n console.log('overflowAmountChanged', overflowAmountChanged);\r\n\r\n /*\r\n var setOverflowVariables = function (horizontal) {\r\n var scrollbarVars = getScrollbarVars(horizontal);\r\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\r\n var xyI = scrollbarVarsInverted._x_y;\r\n var xy = scrollbarVars._x_y;\r\n var wh = scrollbarVars._w_h;\r\n var widthHeight = scrollbarVars._width_height;\r\n var scrollMax = _strScroll + scrollbarVars._Left_Top + 'Max';\r\n var fractionalOverflowAmount = viewportRect[widthHeight] ? MATH.abs(viewportRect[widthHeight] - _viewportSize[wh]) : 0;\r\n var checkFractionalOverflowAmount = previousOverflowAmount && previousOverflowAmount[xy] > 0 && _viewportElementNative[scrollMax] === 0;\r\n overflowBehaviorIsVS[xy] = overflowBehavior[xy] === 'v-s';\r\n overflowBehaviorIsVH[xy] = overflowBehavior[xy] === 'v-h';\r\n overflowBehaviorIsS[xy] = overflowBehavior[xy] === 's';\r\n overflowAmount[xy] = MATH.max(0, MATH.round((contentScrollSize[wh] - _viewportSize[wh]) * 100) / 100);\r\n overflowAmount[xy] *=\r\n hideOverflowForceTextarea || (checkFractionalOverflowAmount && fractionalOverflowAmount > 0 && fractionalOverflowAmount < 1) ? 0 : 1;\r\n hasOverflow[xy] = overflowAmount[xy] > 0;\r\n\r\n //hideOverflow:\r\n //x || y : true === overflow is hidden by \"overflow: scroll\" OR \"overflow: hidden\"\r\n //xs || ys : true === overflow is hidden by \"overflow: scroll\"\r\n hideOverflow[xy] =\r\n overflowBehaviorIsVS[xy] || overflowBehaviorIsVH[xy]\r\n ? hasOverflow[xyI] && !overflowBehaviorIsVS[xyI] && !overflowBehaviorIsVH[xyI]\r\n : hasOverflow[xy];\r\n hideOverflow[xy + 's'] = hideOverflow[xy] ? overflowBehaviorIsS[xy] || overflowBehaviorIsVS[xy] : false;\r\n\r\n canScroll[xy] = hasOverflow[xy] && hideOverflow[xy + 's'];\r\n };\r\n*/\r\n /*\r\n if (!supportsScrollbarStyling) {\r\n paddingStyle.r -= env._nativeScrollbarSize.y;\r\n paddingStyle.b -= env._nativeScrollbarSize.x;\r\n }\r\n */\r\n });\r\n\r\n const onSizeChanged = () => {\r\n _update();\r\n };\r\n const onTrinsicChanged = (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => {\r\n const { _changed, _value } = heightIntrinsicCache;\r\n if (_changed) {\r\n style(_content, { height: _value ? 'auto' : '100%' });\r\n }\r\n };\r\n\r\n return {\r\n _options,\r\n _update,\r\n _onSizeChanged: onSizeChanged,\r\n _onTrinsicChanged: onTrinsicChanged,\r\n _destruct() {\r\n runEach(destructFns);\r\n },\r\n };\r\n};\r\n","import {\r\n Cache,\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 preventDefault,\r\n stopPropagation,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n indexOf,\r\n each,\r\n isBoolean,\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\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTLMap = {\r\n direction: ['rtl'],\r\n // 'writing-mode': ['sideways-rl', 'tb', 'tb-rl', 'vertical-rl'],\r\n};\r\nconst directionIsRTL = (elm: HTMLElement): boolean => {\r\n let isRTL = false;\r\n const styles = style(elm, ['direction' /* , 'writing-mode' */]);\r\n each(styles, (value, key) => {\r\n isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1;\r\n });\r\n return isRTL;\r\n};\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\ninterface SizeObserverEntry {\r\n contentRect: DOMRectReadOnly;\r\n}\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionIsRTLCache?: Cache) => any,\r\n options?: SizeObserverOptions\r\n): (() => void) => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const rtlScrollBehavior = getEnvironment()._rtlScrollBehavior;\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const updateResizeObserverContentRectCache = createCache(0, {\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 = (sizeChangedContext?: Cache | SizeObserverEntry[] | Event) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as Cache)._value);\r\n\r\n let skip = 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 (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as Cache)._changed; // direction scroll when DirectionCache changed, false toherwise\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const rtl = hasDirectionCache ? (sizeChangedContext as Cache)._value : directionIsRTL(sizeObserver);\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(hasDirectionCache ? (sizeChangedContext as Cache) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : false;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\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(listenerElement);\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 = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n } else if (!scrollEvent) {\r\n onResized();\r\n }\r\n\r\n reset();\r\n\r\n if (scrollEvent) {\r\n preventDefault(scrollEvent);\r\n stopPropagation(scrollEvent);\r\n }\r\n return false;\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\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 reset();\r\n appearCallback = observeAppearChange ? () => onScroll() : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const updateDirectionIsRTLCache = createCache(() => directionIsRTL(sizeObserver));\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCache = updateDirectionIsRTLCache();\r\n const { _value, _changed } = directionIsRTLCache;\r\n if (_changed) {\r\n if (_value) {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCache);\r\n }\r\n\r\n preventDefault(event);\r\n stopPropagation(event);\r\n return false;\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 Cache,\r\n createDOM,\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 const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => any\r\n): (() => void) => {\r\n const trinsicObserver = createDOM(`
`)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n const updateHeightIntrinsicCache = createCache>(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\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 const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(false, heightIntrinsicCache);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n push(\r\n offListeners,\r\n createSizeObserver(trinsicObserver, () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(false, heightIntrinsicCache);\r\n }\r\n })\r\n );\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 off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined>\r\n | false\r\n | null\r\n | undefined;\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMObserverOptions | undefined\r\n) => boolean;\r\nexport type DOMObserverIgnoreTargetAttrChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\nexport interface DOMObserverOptions {\r\n _observeContent?: boolean; // do observe children and trigger content change\r\n _attributes?: string[]; // observed attributes\r\n _styleChangingAttributes?: string[]; // list of attributes that trigger a contentChange or a targetStyleChange if changed\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname]\r\n _nestedTargetSelector?: string;\r\n _ignoreTargetAttrChange?: DOMObserverIgnoreTargetAttrChange;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange;\r\n}\r\nexport interface DOMObserver {\r\n _disconnect: () => void;\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n _update: () => void;\r\n}\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\nconst createEventContentChange = (\r\n target: Element,\r\n eventContentChange: DOMObserverEventContentChange,\r\n map: Map,\r\n callback: (...args: any) => any\r\n) => {\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const addEvent = (elm: Node, eventName: string) => {\r\n const entry = map.get(elm);\r\n const newEntry = isUndefined(entry);\r\n const registerEvent = () => {\r\n map.set(elm, eventName);\r\n on(elm, eventName, callback);\r\n };\r\n\r\n if (!newEntry && eventName !== entry) {\r\n off(elm, entry!, callback);\r\n registerEvent();\r\n } else if (newEntry) {\r\n registerEvent();\r\n }\r\n };\r\n const _destroy = () => {\r\n map.forEach((eventName: string, elm: Node) => {\r\n off(elm, eventName, callback);\r\n });\r\n map.clear();\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventName = item[1];\r\n const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements) {\r\n push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName!], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) => {\r\n const elements = item[0];\r\n const eventName = item[1];\r\n\r\n each(elements, (elm) => {\r\n addEvent(elm, eventName);\r\n });\r\n });\r\n }\r\n };\r\n const _update = (newEventContentChange: DOMObserverEventContentChange) => {\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _update(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _update,\r\n };\r\n};\r\n\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n callback: (targetChangedAttrs: string[], targetStyleChanged: boolean, contentChanged: boolean) => any,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _observeContent,\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetAttrChange: _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = options || {};\r\n const {\r\n _updateElements: updateEventContentChangeElements,\r\n _destroy: destroyEventContentChange,\r\n _update: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n _observeContent && _eventContentChange,\r\n new Map(),\r\n debounce(() => {\r\n if (isConnected) {\r\n callback([], false, true);\r\n }\r\n }, 80)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); // TODO: observer textarea attrs if textarea\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 = isAttributesType && isString(attributeName) ? attr(mutationTarget as HTMLElement, attributeName!) : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const targetAttrChanged =\r\n attributeChanged &&\r\n targetIsMutationTarget &&\r\n !_observeContent &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null);\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n if (targetAttrChanged) {\r\n push(targetChangedAttrs, attributeName!);\r\n }\r\n if (_observeContent) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget;\r\n const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged = 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 targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged);\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\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 if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) {\r\n callback(targetChangedAttrs, targetStyleChanged, contentChanged);\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: _observeContent,\r\n childList: _observeContent,\r\n characterData: _observeContent,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _disconnect: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && _observeContent && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n };\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 isUndefined,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n} from 'support';\r\nimport { classNameHost, classNamePadding, classNameViewport, classNameContent } from 'classnames';\r\nimport { OSTarget, OSTargetObject, InternalVersionOf, OSTargetElement } from 'typings';\r\n\r\nexport interface OSTargetContext {\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: HTMLDocument;\r\n}\r\n\r\nexport interface PreparedOSTargetObject extends Required> {\r\n _host: HTMLElement;\r\n}\r\n\r\nexport interface StructureSetup {\r\n _targetObj: PreparedOSTargetObject;\r\n _targetCtx: OSTargetContext;\r\n _destroy: () => void;\r\n}\r\n\r\nconst unwrap = (elm: HTMLElement | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: InternalVersionOf = targetIsElm\r\n ? ({} as InternalVersionOf)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _padding: (target as OSTargetObject).padding,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _content: (target as OSTargetObject).content,\r\n };\r\n\r\n if (targetIsElm) {\r\n const padding = createDiv(classNamePadding);\r\n const viewport = createDiv(classNameViewport);\r\n const content = createDiv(classNameContent);\r\n\r\n appendChildren(padding, viewport);\r\n appendChildren(viewport, content);\r\n\r\n osTargetObj._target = target as OSTargetElement;\r\n osTargetObj._padding = padding;\r\n osTargetObj._viewport = viewport;\r\n osTargetObj._content = content;\r\n }\r\n\r\n let { _target, _padding, _viewport, _content } = osTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextarea = is(_target, 'textarea');\r\n const isBody = !isTextarea && is(_target, 'body');\r\n const _host = (isTextarea ? osTargetObj._host || createDiv() : _target) as HTMLElement;\r\n const getTargetContents = (contentSlot: HTMLElement) => (isTextarea ? (_target as HTMLTextAreaElement) : contents(contentSlot as HTMLElement));\r\n const isTextareaHostGenerated = isTextarea && _host !== osTargetObj._host;\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 if (targetIsElm) {\r\n appendChildren(_content!, getTargetContents(_target));\r\n appendChildren(_host, _padding);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(_content));\r\n removeElements(_padding);\r\n removeClass(_host, classNameHost);\r\n });\r\n } else {\r\n const contentContainingElm = _content || _viewport || _padding || _host;\r\n const createPadding = isUndefined(_padding);\r\n const createViewport = isUndefined(_viewport);\r\n const createContent = isUndefined(_content);\r\n const targetContents = getTargetContents(contentContainingElm);\r\n\r\n _padding = osTargetObj._padding = createPadding ? createDiv() : _padding;\r\n _viewport = osTargetObj._viewport = createViewport ? createDiv() : _viewport;\r\n _content = osTargetObj._content = createContent ? createDiv() : _content;\r\n\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, targetContents);\r\n\r\n push(destroyFns, () => {\r\n if (createContent) {\r\n unwrap(_content);\r\n }\r\n if (createViewport) {\r\n unwrap(_viewport);\r\n }\r\n if (createPadding) {\r\n unwrap(_padding);\r\n }\r\n removeClass(_host, classNameHost);\r\n removeClass(_padding, classNamePadding);\r\n removeClass(_viewport, classNameViewport);\r\n removeClass(_content, classNameContent);\r\n });\r\n }\r\n\r\n addClass(_host, classNameHost);\r\n addClass(_padding, classNamePadding);\r\n addClass(_viewport, classNameViewport);\r\n addClass(_content, classNameContent);\r\n\r\n const ownerDocument: HTMLDocument = _target.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const ctx: OSTargetContext = {\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 };\r\n // @ts-ignore\r\n const obj: PreparedOSTargetObject = {\r\n ...osTargetObj,\r\n _host,\r\n };\r\n\r\n return {\r\n _targetObj: obj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\nimport { createStructureLifecycle } from 'lifecycles/structureLifecycle';\r\nimport { Cache, each, push } from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { Lifecycle } from 'lifecycles/lifecycleBase';\r\n\r\nconst OverlayScrollbars = (target: OSTarget | OSTargetObject, options?: any, extensions?: any): void => {\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycles: Lifecycle[] = [];\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n\r\n push(lifecycles, createStructureLifecycle(structureSetup._targetObj));\r\n\r\n // eslint-disable-next-line\r\n const onSizeChanged = (directionCache?: Cache) => {\r\n if (directionCache) {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onDirectionChanged && lifecycle._onDirectionChanged(directionCache);\r\n });\r\n } else {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onSizeChanged && lifecycle._onSizeChanged();\r\n });\r\n }\r\n };\r\n const onTrinsicChanged = (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onTrinsicChanged && lifecycle._onTrinsicChanged(widthIntrinsic, heightIntrinsicCache);\r\n });\r\n };\r\n\r\n createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: true });\r\n createTrinsicObserver(_host, onTrinsicChanged);\r\n createDOMObserver(_host, () => {\r\n return null;\r\n });\r\n createDOMObserver(\r\n _content || _viewport,\r\n () => {\r\n return null;\r\n },\r\n { _observeContent: true }\r\n );\r\n};\r\n\r\nexport { OverlayScrollbars };\r\n","import { createDOM } from 'support/dom';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverlayScrollbars } from 'overlayscrollbars/overlayscrollbars';\r\n\r\nconst abc = {\r\n a: 1,\r\n b: 1,\r\n c: 1,\r\n};\r\n\r\nexport default () => {\r\n return [\r\n getEnvironment(),\r\n OverlayScrollbars(document.body),\r\n createDOM(\r\n '\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n fdfhdfgh\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
'\r\n ),\r\n ];\r\n};\r\n"],"names":["ElementNodeType","Node","ELEMENT_NODE","Object","prototype","toString","hasOwnProperty","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","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertAfter","insertedNodes","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","options","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","equalWH","equalXY","equalTRBL","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","style","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","property","finalProp","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","createCache","update","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","environmentInstance","abs","Math","round","getNativeScrollbarSize","body","measureElm","cSize","oSize","getNativeScrollbarStyling","testElm","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollBarSize","nativeScrollbarIsOverlaid","env","_autoUpdateLoop","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","getPropByPath","path","o","createLifecycleBase","defaultOptionsWithTemplate","initialOptions","updateFunction","optionsTemplate","defaultOptions","hints","_force","_changedOptions","checkOption","newOptions","_update","overflowBehaviorAllowedValues","paddingAbsolute","oTypes","boolean","overflowBehavior","cssMarginEnd","cssBorderEnd","createStructureLifecycle","_host","_padding","_viewport","_content","destructFns","scrollbarsOverlaid","supportsScrollbarStyling","supportFlexboxGlue","directionObserverObsolete","updatePaddingCache","updateOverflowAmountCache","ctx","max","_contentScrollSize","_viewportSize","paddingAbsoluteChanged","padding","paddingChanged","paddingStyle","viewportOffsetSize","contentClientSize","contentScrollSize","overflowAmuntCache","overflowAmount","overflowAmountChanged","log","onSizeChanged","onTrinsicChanged","widthIntrinsic","heightIntrinsicCache","height","_onSizeChanged","_onTrinsicChanged","_destruct","animationStartEventName","scrollEventName","scrollAmount","directionIsRTLMap","directionIsRTL","isRTL","domRectHasDimensions","width","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","pop","contentRect","doDirectionScroll","rtl","appearCallback","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCache","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","intersectionObserverInstance","entries","last","root","newSize","createEventContentChange","eventContentChange","map","eventContentChangeRef","addEvent","entry","newEntry","registerEvent","_destroy","clear","_updateElements","getElements","eventElmList","elements","newEventContentChange","createDOMObserver","isConnected","_observeContent","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreTargetAttrChange","_ignoreContentChange","Map","updateEventContentChangeElements","destroyEventContentChange","updateEventContentChange","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","targetAttrChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","_disconnect","_updateEventContentChange","takeRecords","unwrap","createStructureSetup","targetIsElm","osTargetObj","host","_target","viewport","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetObj","_targetCtx","OverlayScrollbars","extensions","structureSetup","lifecycles","directionCache","lifecycle","_onDirectionChanged"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/utils/types.ts","../src/support/dom/attribute.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/class.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../src/support/cache/cache.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/environment/environment.ts","../src/setups/structureSetup.ts","../src/lifecycles/lifecycleUpdateFunction.ts","../src/lifecycles/overflowLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHub.ts","../src/options/options.ts","../src/overlayscrollbars/overlayscrollbars.ts","../src/index.ts"],"sourcesContent":["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 return 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\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: Array) => unknown {\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) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : 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 ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : 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 ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { 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 | null,\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 | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * 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 | null, 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 | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): 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 | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): 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 | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\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 | void\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 | void\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void\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 | void\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: Array, item: T, fromIndex?: number): number => 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: Array, items: T | ArrayLike, arrayIsSingleItem?: boolean): Array => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items as Array) : 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) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n\r\n each(arr, (elm) => {\r\n push(result, elm);\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: Array | null | undefined) => 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, p1?: unknown): void => {\r\n const runFn = (fn: RunEachItem) => fn && fn(p1);\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 => 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(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): 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 { 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 | null | undefined,\r\n className: string,\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 && 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 = (elm: Element | null | undefined, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\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 */\r\nexport const addClass = (elm: Element | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (classNameA: string | null | undefined, classNameB: string | null | undefined) => {\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 { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | 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 => (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 = (elm: InputElementType, highBoundarySelector: string, deepBoundarySelector: string): 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 | 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 = (parentElm: Node | null | undefined, preferredAnchor: Node | null | undefined, insertedElms: NodeCollection): 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 = (node: Node | null | undefined, insertedNodes: NodeCollection): 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","export interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean => !!(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 | 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 | 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 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 | null | undefined): boolean => (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 = (target: EventTarget, eventNames: string, listener: (event: T) => any, capture?: boolean): 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) => 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) => evt.preventDefault();\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 = (a: T | undefined, b: T | undefined, props: Array): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n if (a[prop] !== b[prop]) {\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","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 = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\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, or undefined 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 | undefined => {\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 result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return 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 wuthout, or undefined 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 | undefined => {\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 cssCache[name] = result;\r\n return 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('IntersectionObserver');\r\nexport const ResizeObserverConstructor: any | undefined = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\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 timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray } from 'support/utils/types';\r\nimport { PlainObject } 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\ntype CssStyles = { [key: string]: string | number };\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 opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 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 => (!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 ? computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | null | undefined, prop: string, val: string | number): void => {\r\n try {\r\n if (elm && elm.style[prop] !== undefined) {\r\n elm.style[prop] = adaptCSSVal(prop, val);\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(elm: HTMLElement | null | undefined, styles: CssStyles): void;\r\nexport function style(elm: HTMLElement | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(elm: HTMLElement | null | undefined, styles: CssStyles | Array | string): { [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 | null): 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 | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | null | undefined, property?: string): TRBL => {\r\n const finalProp = property || '';\r\n const top = `${finalProp}-top`;\r\n const right = `${finalProp}-right`;\r\n const bottom = `${finalProp}-bottom`;\r\n const left = `${finalProp}-left`;\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 { 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","export interface CacheValues {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport interface Cache {\r\n _current: (force?: boolean) => CacheValues;\r\n _update: CacheUpdate;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C\r\n ? (force?: boolean | 0, context?: C) => CacheValues\r\n : (force: boolean | 0, context: C) => CacheValues;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): Cache => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\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 {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return {\r\n _update: cacheUpdate,\r\n _current: (force?: boolean) => ({\r\n _value,\r\n _previous,\r\n _changed: !!force,\r\n }),\r\n };\r\n};\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, Func, OptionsValidationResult, OptionsValidated } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\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 options The options object which shall be validated.\r\n * @param template The template according to which the options object 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 options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = 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 validatedResult = validateRecursive(optionsValue, templateValue as PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._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 const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\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 }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\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 options The options object which shall be validated.\r\n * @param template The template according to which the options object 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 */\r\nconst validateOptions = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff?: T | null,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\r\n};\r\n\r\nexport { validateOptions, optionsTemplateTypes };\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","import { OptionsTemplate, OptionsWithOptionsTemplate, OptionsTemplateTypes } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\nimport { isArray } from 'support/utils/types';\r\nimport { each, keys } from 'support/utils';\r\n\r\nexport interface OptionsWithOptionsTemplateTransformation> {\r\n _template: OptionsTemplate;\r\n _options: T;\r\n}\r\n\r\n/**\r\n * Transforms the given OptionsWithOptionsTemplate object to its corresponding generic (T) Object or its corresponding Template object.\r\n * @param optionsWithOptionsTemplate The OptionsWithOptionsTemplate object which shall be converted.\r\n * @param toTemplate True if the given OptionsWithOptionsTemplate shall be converted to its corresponding Template object.\r\n */\r\nexport function transformOptions>(\r\n optionsWithOptionsTemplate: OptionsWithOptionsTemplate\r\n): OptionsWithOptionsTemplateTransformation {\r\n const result: any = {\r\n _template: {},\r\n _options: {},\r\n };\r\n\r\n each(keys(optionsWithOptionsTemplate), (key: Extract) => {\r\n const val: PlainObject | OptionsTemplateTypes | Array = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\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 classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameContent = 'os-content';\r\nexport const classNameContentArrange = `${classNameContent}-arrange`;\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\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","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\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 runEach,\r\n equalWH,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _autoUpdateLoop: boolean;\r\n _nativeScrollbarSize: XY;\r\n _nativeScrollbarIsOverlaid: XY;\r\n _nativeScrollbarStyling: boolean;\r\n _rtlScrollBehavior: { n: boolean; i: boolean };\r\n _flexboxGlue: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { 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 addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = offsetSize(parentElm);\r\n const minOffsetsize = offsetSize(childElm);\r\n const supportsMin = equalWH(minOffsetsize, minOffsetsizeParent);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = offsetSize(parentElm);\r\n const maxOffsetsize = offsetSize(childElm);\r\n const supportsMax = equalWH(maxOffsetsize, maxOffsetsizeParent);\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 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 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\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = false; //getNativeScrollbarStyling(envElm); TODO: Re-enable\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n\r\n const env: Environment = {\r\n _autoUpdateLoop: false,\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\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 let scrollbarSize = nativeScrollbarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\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 newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\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 isUndefined,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n prependChildren,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameContent,\r\n classNameContentArrange,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, InternalVersionOf, OSTargetElement } from 'typings';\r\n\r\nexport interface OSTargetContext {\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: HTMLDocument;\r\n}\r\n\r\nexport interface PreparedOSTargetObject extends Required> {\r\n _host: HTMLElement;\r\n _contentArrange: HTMLElement | null;\r\n}\r\n\r\nexport interface StructureSetup {\r\n _targetObj: PreparedOSTargetObject;\r\n _targetCtx: OSTargetContext;\r\n _destroy: () => void;\r\n}\r\n\r\nconst unwrap = (elm: HTMLElement | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: InternalVersionOf = targetIsElm\r\n ? ({} as InternalVersionOf)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _padding: (target as OSTargetObject).padding,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _content: (target as OSTargetObject).content,\r\n };\r\n\r\n if (targetIsElm) {\r\n const padding = createDiv(classNamePadding);\r\n const viewport = createDiv(classNameViewport);\r\n const content = createDiv(classNameContent);\r\n\r\n appendChildren(padding, viewport);\r\n appendChildren(viewport, content);\r\n\r\n osTargetObj._target = target as OSTargetElement;\r\n osTargetObj._padding = padding;\r\n osTargetObj._viewport = viewport;\r\n osTargetObj._content = content;\r\n }\r\n\r\n let { _target, _padding, _viewport, _content } = osTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextarea = is(_target, 'textarea');\r\n const isBody = !isTextarea && is(_target, 'body');\r\n const _host = (isTextarea ? osTargetObj._host || createDiv() : _target) as HTMLElement;\r\n const getTargetContents = (contentSlot: HTMLElement) => (isTextarea ? (_target as HTMLTextAreaElement) : contents(contentSlot as HTMLElement));\r\n const isTextareaHostGenerated = isTextarea && _host !== osTargetObj._host;\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 if (targetIsElm) {\r\n appendChildren(_content!, getTargetContents(_target));\r\n appendChildren(_host, _padding);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(_content));\r\n removeElements(_padding);\r\n removeClass(_host, classNameHost);\r\n });\r\n } else {\r\n const contentContainingElm = _content || _viewport || _padding || _host;\r\n const createPadding = isUndefined(_padding);\r\n const createViewport = isUndefined(_viewport);\r\n const createContent = isUndefined(_content);\r\n const targetContents = getTargetContents(contentContainingElm);\r\n\r\n _padding = osTargetObj._padding = createPadding ? createDiv() : _padding;\r\n _viewport = osTargetObj._viewport = createViewport ? createDiv() : _viewport;\r\n _content = osTargetObj._content = createContent ? createDiv() : _content;\r\n\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, targetContents);\r\n\r\n push(destroyFns, () => {\r\n if (createContent) {\r\n unwrap(_content);\r\n }\r\n if (createViewport) {\r\n unwrap(_viewport);\r\n }\r\n if (createPadding) {\r\n unwrap(_padding);\r\n }\r\n removeClass(_host, classNameHost);\r\n removeClass(_padding, classNamePadding);\r\n removeClass(_viewport, classNameViewport);\r\n removeClass(_content, classNameContent);\r\n });\r\n }\r\n\r\n addClass(_host, classNameHost);\r\n addClass(_padding, classNamePadding);\r\n addClass(_viewport, classNameViewport);\r\n addClass(_content, classNameContent);\r\n\r\n const ownerDocument: HTMLDocument = _target.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const ctx: OSTargetContext = {\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 };\r\n // @ts-ignore\r\n const obj: PreparedOSTargetObject = {\r\n ...osTargetObj,\r\n _host,\r\n };\r\n\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y) {\r\n if (obj._content) {\r\n const contentArrangeElm = createDiv(classNameContentArrange);\r\n\r\n prependChildren(_viewport, contentArrangeElm);\r\n push(destroyFns, removeElements.bind(0, contentArrangeElm));\r\n\r\n obj._contentArrange = contentArrangeElm;\r\n }\r\n }\r\n\r\n return {\r\n _targetObj: obj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { CacheValues, OptionsValidated, hasOwnProperty } from 'support';\r\nimport { Options } from 'options';\r\nimport { LifecycleHub } from 'lifecycles/lifecycleHub';\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nexport interface LifecycleUpdateHints extends LifecycleAdaptiveUpdateHints {\r\n _directionIsRTL: CacheValues;\r\n _heightIntrinsic: CacheValues;\r\n}\r\n\r\nexport type LifecycleUpdateFunction = (\r\n updateHints: LifecycleUpdateHints,\r\n changedOptions?: OptionsValidated | null,\r\n force?: boolean\r\n) => Partial;\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\n/**\r\n * Creates a update function for a lifecycle.\r\n * @param lifecycleHub The LifecycleHub which is managing this lifecylce.\r\n * @param updateFunction The update function where cache and options updates are handled. Has two arguments which are the changedOptions and the changedCache objects.\r\n */\r\nexport const createLifecycleUpdateFunction = (\r\n lifecycleHub: LifecycleHub,\r\n updateFunction: (\r\n force: boolean,\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption\r\n ) => Partial | void\r\n): LifecycleUpdateFunction => {\r\n return (updateHints: LifecycleUpdateHints, changedOptions?: OptionsValidated | null, force?: boolean) => {\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(lifecycleHub._options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n return updateFunction(!!force, updateHints, checkOption) || {};\r\n };\r\n};\r\n","import {\r\n createCache,\r\n WH,\r\n XY,\r\n equalXY,\r\n style,\r\n scrollSize,\r\n offsetSize,\r\n CacheValues,\r\n equalWH,\r\n scrollLeft,\r\n scrollTop,\r\n addClass,\r\n removeClass,\r\n} from 'support';\r\nimport { createLifecycleUpdateFunction, LifecycleUpdateFunction } from 'lifecycles/lifecycleUpdateFunction';\r\nimport { LifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { PlainObject } from 'typings';\r\nimport { classNameViewportScrollbarStyling } from 'classnames';\r\n\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst overlaidScrollbarsHideBorderStyle = `${overlaidScrollbarsHideOffset}px solid transparent`;\r\ninterface OverflowAmountCacheContext {\r\n _contentScrollSize: WH;\r\n _viewportSize: WH;\r\n}\r\n\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): LifecycleUpdateFunction => {\r\n const { _host, _padding, _viewport, _content, _contentArrange } = lifecycleHub._structureSetup._targetObj;\r\n const { _update: updateContentScrollSizeCache, _current: getCurrentContentScrollSizeCache } = createCache>(\r\n () => scrollSize(_content || _viewport),\r\n { _equal: equalWH }\r\n );\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n (ctx) => ({\r\n x: Math.max(0, Math.round((ctx._contentScrollSize.w - ctx._viewportSize.w) * 100) / 100),\r\n y: Math.max(0, Math.round((ctx._contentScrollSize.h - ctx._viewportSize.h) * 100) / 100),\r\n }),\r\n { _equal: equalXY }\r\n );\r\n\r\n const setViewportOverflowStyle = (horizontal: boolean, amount: number, behavior: OverflowBehavior, styleObj: PlainObject) => {\r\n const overflowKey = horizontal ? 'overflowX' : 'overflowY';\r\n //const scrollMaxKey = horizontal ? 'scrollLeftMax' : 'scrollTopMax';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n const behaviorIsVisibleScroll = behavior === 'visible-scroll';\r\n const hideOverflow = behaviorIsScroll || behavior === 'hidden';\r\n //const scrollMax = _viewport[scrollMaxKey];\r\n //const scrollMaxOverflow = isNumber(scrollMax) ? scrollMax > 0 : true;\r\n const applyStyle = amount > 0 && hideOverflow;\r\n\r\n if (applyStyle) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: !applyStyle,\r\n _behavior: behaviorIsVisibleScroll ? 'scroll' : 'hidden',\r\n };\r\n };\r\n\r\n const hideNativeScrollbars = (\r\n contentScrollSize: WH,\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportStyleObj: PlainObject,\r\n contentStyleObj: PlainObject\r\n ) => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const scrollX = viewportStyleObj.overflowX === 'scroll';\r\n const scrollY = viewportStyleObj.overflowY === 'scroll';\r\n const horizontalMarginKey = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const horizontalBorderKey = directionIsRTL ? 'borderLeft' : 'borderRight';\r\n const overlaidHideOffset = _content && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const scrollbarsHideOffset = {\r\n x: overlaidX ? overlaidHideOffset : _nativeScrollbarSize.x,\r\n y: overlaidY ? overlaidHideOffset : _nativeScrollbarSize.y,\r\n };\r\n\r\n if (!_nativeScrollbarStyling) {\r\n if (scrollX) {\r\n viewportStyleObj.marginBottom = -scrollbarsHideOffset.x;\r\n\r\n contentStyleObj.borderBottom = overlaidX && overlaidHideOffset ? overlaidScrollbarsHideBorderStyle : '';\r\n }\r\n if (scrollY) {\r\n viewportStyleObj.maxWidth = `calc(100% + ${scrollbarsHideOffset.y}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -scrollbarsHideOffset.y;\r\n\r\n contentStyleObj[horizontalBorderKey] = overlaidY && overlaidHideOffset ? overlaidScrollbarsHideBorderStyle : '';\r\n }\r\n\r\n if (_contentArrange) {\r\n style(_contentArrange, {\r\n width: scrollY && !showNativeOverlaidScrollbars ? overlaidHideOffset + contentScrollSize.w : '',\r\n height: scrollX && !showNativeOverlaidScrollbars ? overlaidHideOffset + contentScrollSize.h : '',\r\n });\r\n }\r\n }\r\n\r\n return {\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n _scroll: {\r\n x: scrollX,\r\n y: scrollY,\r\n },\r\n };\r\n };\r\n\r\n const setFlexboxGlueStyle = (heightIntrinsic: boolean, scrollX: boolean, scrollbarsHideOffsetX: number) => {\r\n const offsetLeft = scrollLeft(_viewport);\r\n const offsetTop = scrollTop(_viewport);\r\n\r\n style(_viewport, {\r\n maxHeight: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n style(_viewport, {\r\n maxHeight: _host.clientHeight + (scrollX ? scrollbarsHideOffsetX : 0),\r\n });\r\n }\r\n\r\n scrollLeft(_viewport, offsetLeft);\r\n scrollTop(_viewport, offsetTop);\r\n };\r\n\r\n return createLifecycleUpdateFunction(lifecycleHub, (force, updateHints, checkOption) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const adjustFlexboxGlue = !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged);\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache();\r\n let contentScrollSizeCache: CacheValues> = getCurrentContentScrollSizeCache();\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n if (showNativeOverlaidScrollbars) {\r\n removeClass(_viewport, classNameViewportScrollbarStyling);\r\n } else {\r\n addClass(_viewport, classNameViewportScrollbarStyling);\r\n }\r\n }\r\n\r\n if (_sizeChanged || _contentMutation) {\r\n const viewportOffsetSize = offsetSize(_padding);\r\n const contentClientSize = offsetSize(_content || _viewport);\r\n const contentArrangeOffsetSize = offsetSize(_contentArrange);\r\n\r\n contentScrollSizeCache = updateContentScrollSizeCache(force);\r\n const { _value: contentScrollSize } = contentScrollSizeCache;\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: {\r\n w: Math.max(contentScrollSize!.w, contentArrangeOffsetSize.w),\r\n h: Math.max(contentScrollSize!.h, contentArrangeOffsetSize.h),\r\n },\r\n _viewportSize: {\r\n w: viewportOffsetSize.w + Math.max(0, contentClientSize.w - contentScrollSize!.w),\r\n h: viewportOffsetSize.h + Math.max(0, contentClientSize.h - contentScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = contentScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n const { _value: overflow, _changed: overflowChanged } = checkOption<{\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n }>('overflow');\r\n const adjustDirection = directionChanged && !_nativeScrollbarStyling;\r\n\r\n if (\r\n contentScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustDirection ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: PlainObject = {\r\n overflowY: '',\r\n overflowX: '',\r\n marginTop: '',\r\n marginRight: '',\r\n marginBottom: '',\r\n marginLeft: '',\r\n maxWidth: '',\r\n };\r\n const contentStyle: PlainObject = {\r\n borderTop: '',\r\n borderRight: '',\r\n borderBottom: '',\r\n borderLeft: '',\r\n };\r\n\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setViewportOverflowStyle(true, overflowAmount!.x, overflow.x, viewportStyle);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setViewportOverflowStyle(false, overflowAmount!.y, overflow.y, viewportStyle);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyle.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyle.overflowY = yVisibleBehavior;\r\n }\r\n\r\n const { _scrollbarsHideOffset, _scroll } = hideNativeScrollbars(\r\n contentScrollSize!,\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL!,\r\n viewportStyle,\r\n contentStyle\r\n );\r\n\r\n if (adjustFlexboxGlue) {\r\n setFlexboxGlueStyle(!!_heightIntrinsic._value, _scroll.x, _scrollbarsHideOffset.x);\r\n }\r\n\r\n // TODO: enlargen viewport if div too small for firefox scrollbar hiding behavior\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n // TODO: hide host || padding overflow if scroll x or y\r\n\r\n style(_viewport, viewportStyle);\r\n style(_content, contentStyle);\r\n }\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 preventDefault,\r\n stopPropagation,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n indexOf,\r\n each,\r\n isBoolean,\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\ninterface SizeObserverEntry {\r\n contentRect: DOMRectReadOnly;\r\n}\r\n\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\n\r\nexport interface SizeObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _directionIsRTL: CacheValues;\r\n };\r\n}\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTLMap = {\r\n direction: ['rtl'],\r\n // 'writing-mode': ['sideways-rl', 'tb', 'tb-rl', 'vertical-rl'],\r\n};\r\nconst directionIsRTL = (elm: HTMLElement): boolean => {\r\n let isRTL = false;\r\n const styles = style(elm, ['direction' /* , 'writing-mode' */]);\r\n each(styles, (value, key) => {\r\n isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1;\r\n });\r\n return isRTL;\r\n};\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionIsRTLCache?: CacheValues) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const { _update: updateResizeObserverContentRectCache } = createCache(0, {\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 = (sizeChangedContext?: CacheValues | SizeObserverEntry[] | Event) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as CacheValues)._value);\r\n\r\n let skip = 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 (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as CacheValues)._changed; // direction scroll when DirectionCache changed, false toherwise\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const rtl = hasDirectionCache ? (sizeChangedContext as CacheValues)._value : directionIsRTL(sizeObserver);\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : 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, () => resizeObserverInstance.disconnect());\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(listenerElement);\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 = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n } else if (!scrollEvent) {\r\n onResized();\r\n }\r\n\r\n reset();\r\n\r\n if (scrollEvent) {\r\n preventDefault(scrollEvent);\r\n stopPropagation(scrollEvent);\r\n }\r\n return false;\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\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 reset();\r\n appearCallback = observeAppearChange ? () => onScroll() : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(() => directionIsRTL(sizeObserver));\r\n const { _update: updateDirectionIsRTLCache } = directionIsRTLCache;\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n if (_value) {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n preventDefault(event);\r\n stopPropagation(event);\r\n return false;\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 _destroy() {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _directionIsRTL: directionIsRTLCache\r\n ? directionIsRTLCache._current(force)\r\n : {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n },\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDOM,\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 interface TrinsicObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _heightIntrinsic: CacheValues;\r\n };\r\n}\r\n\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDOM(`
`)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n const { _update: updateHeightIntrinsicCache, _current: getCurrentHeightIntrinsicCache } = createCache<\r\n boolean,\r\n IntersectionObserverEntry | WH\r\n >(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\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 const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsic._changed) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n push(\r\n offListeners,\r\n createSizeObserver(trinsicObserver, () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n })._destroy\r\n );\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _heightIntrinsic: getCurrentHeightIntrinsicCache(force),\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined>\r\n | false\r\n | null\r\n | undefined;\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMObserverOptions | undefined\r\n) => boolean;\r\nexport type DOMObserverIgnoreTargetAttrChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\nexport interface DOMObserverOptions {\r\n _observeContent?: boolean; // do observe children and trigger content change\r\n _attributes?: string[]; // observed attributes\r\n _styleChangingAttributes?: string[]; // list of attributes that trigger a contentChange or a targetStyleChange if changed\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname]\r\n _nestedTargetSelector?: string;\r\n _ignoreTargetAttrChange?: DOMObserverIgnoreTargetAttrChange;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange;\r\n}\r\nexport interface DOMObserver {\r\n _disconnect: () => void;\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n _update: () => void;\r\n}\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\nconst createEventContentChange = (\r\n target: Element,\r\n eventContentChange: DOMObserverEventContentChange,\r\n map: Map,\r\n callback: (...args: any) => any\r\n) => {\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const addEvent = (elm: Node, eventName: string) => {\r\n const entry = map.get(elm);\r\n const newEntry = isUndefined(entry);\r\n const registerEvent = () => {\r\n map.set(elm, eventName);\r\n on(elm, eventName, callback);\r\n };\r\n\r\n if (!newEntry && eventName !== entry) {\r\n off(elm, entry!, callback);\r\n registerEvent();\r\n } else if (newEntry) {\r\n registerEvent();\r\n }\r\n };\r\n const _destroy = () => {\r\n map.forEach((eventName: string, elm: Node) => {\r\n off(elm, eventName, callback);\r\n });\r\n map.clear();\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventName = item[1];\r\n const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements) {\r\n push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName!], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) => {\r\n const elements = item[0];\r\n const eventName = item[1];\r\n\r\n each(elements, (elm) => {\r\n addEvent(elm, eventName);\r\n });\r\n });\r\n }\r\n };\r\n const _update = (newEventContentChange: DOMObserverEventContentChange) => {\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _update(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _update,\r\n };\r\n};\r\n\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n callback: (targetChangedAttrs: string[], targetStyleChanged: boolean, contentChanged: boolean) => any,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _observeContent,\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetAttrChange: _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = options || {};\r\n const {\r\n _updateElements: updateEventContentChangeElements,\r\n _destroy: destroyEventContentChange,\r\n _update: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n _observeContent && _eventContentChange,\r\n new Map(),\r\n debounce(() => {\r\n if (isConnected) {\r\n callback([], false, true);\r\n }\r\n }, 84)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); // TODO: observer textarea attrs if textarea\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 = isAttributesType && isString(attributeName) ? attr(mutationTarget as HTMLElement, attributeName!) : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const targetAttrChanged =\r\n attributeChanged &&\r\n targetIsMutationTarget &&\r\n !_observeContent &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null);\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n if (targetAttrChanged) {\r\n push(targetChangedAttrs, attributeName!);\r\n }\r\n if (_observeContent) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget;\r\n const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged = 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 targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged);\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\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 if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) {\r\n callback(targetChangedAttrs, targetStyleChanged, contentChanged);\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: _observeContent,\r\n childList: _observeContent,\r\n characterData: _observeContent,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _disconnect: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && _observeContent && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n };\r\n};\r\n","import { CacheValues, each, push, validateOptions, assignDeep, isEmptyObject, OptionsValidated } from 'support';\r\nimport { Options } from 'options';\r\nimport { getEnvironment, Environment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { createStructureLifecycle } from 'lifecycles/structureLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { LifecycleUpdateFunction, LifecycleUpdateHints } from 'lifecycles/lifecycleUpdateFunction';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: OptionsValidated | null, force?: boolean): void;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: Options;\r\n _structureSetup: StructureSetup;\r\n}\r\n\r\nconst attrs = ['id', 'class', 'style', 'open'];\r\nconst directionIsRTLCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst heightIntrinsicCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\n\r\nexport const createLifecycleHub = (options: Options, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const lifecycles: LifecycleUpdateFunction[] = [];\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n };\r\n\r\n // push(lifecycles, createStructureLifecycle(instance));\r\n push(lifecycles, createOverflowLifecycle(instance));\r\n\r\n const runLifecycles = (updateHints?: Partial | null, changedOptions?: OptionsValidated | null, force?: boolean) => {\r\n let { _directionIsRTL, _heightIntrinsic, _sizeChanged = force || false, _hostMutation = force || false, _contentMutation = force || false } =\r\n updateHints || {};\r\n const finalDirectionIsRTL =\r\n _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback);\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const { _sizeChanged: adaptiveSizeChanged, _hostMutation: adaptiveHostMutation, _contentMutation: adaptiveContentMutation } = lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n },\r\n changedOptions,\r\n force\r\n );\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n });\r\n };\r\n\r\n const onSizeChanged = (directionIsRTL?: CacheValues) => {\r\n const sizeChanged = !directionIsRTL;\r\n runLifecycles({\r\n _directionIsRTL: directionIsRTL,\r\n _sizeChanged: sizeChanged,\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n runLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onHostMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n runLifecycles({\r\n _hostMutation: true,\r\n });\r\n });\r\n };\r\n const onContentMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n runLifecycles({\r\n _contentMutation: true,\r\n });\r\n });\r\n };\r\n\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const trinsicObserver = createTrinsicObserver(_host, onTrinsicChanged);\r\n const hostMutationObserver = createDOMObserver(_host, onHostMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n });\r\n const contentMutationObserver = createDOMObserver(_content || _viewport, onContentMutation, {\r\n _observeContent: true,\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _eventContentChange: options!.updating!.elementEvents as [string, string][],\r\n /*\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget ? false : attributeName ? liesBetween(target as Element, hostSelector, '.content') : false;\r\n },\r\n _ignoreTargetAttrChange: (target, attrName, oldValue, newValue) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n const ignore = diff.length === 1 && diff[0].startsWith(ignorePrefix);\r\n return ignore;\r\n }\r\n return false;\r\n },\r\n */\r\n });\r\n\r\n const updateAll = (changedOptions?: OptionsValidated | null, force?: boolean) => {\r\n runLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = updateAll.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n console.log('flexboxGlue', _flexboxGlue);\r\n\r\n return {\r\n _update: updateAll,\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import {\r\n optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n Func,\r\n} from 'support/options';\r\nimport { ResizeBehavior, OverflowBehavior, VisibilityBehavior, AutoHideBehavior, Options } from 'options';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst stringArrayNullAllowedValues: OptionsTemplateValue | null> = [oTypes.string, oTypes.array, oTypes.null];\r\nconst booleanTrueTemplate: OptionsWithOptionsTemplateValue = [true, oTypes.boolean];\r\nconst booleanFalseTemplate: OptionsWithOptionsTemplateValue = [false, oTypes.boolean];\r\n// const callbackTemplate: OptionsWithOptionsTemplateValue = [null, [oTypes.function, oTypes.null]];\r\nconst resizeAllowedValues: OptionsTemplateValue = 'none both horizontal vertical';\r\nconst overflowAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue = 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue = 'never scroll leavemove';\r\n\r\n/**\r\n * A object which serves as \"default options object\" and \"options template object\".\r\n * I combined these two into one object so that I don't have to define two separate big objects, instead I define one big object.\r\n *\r\n * The property value is a tuple:\r\n * the first value is the default value\r\n * the second value is the template value\r\n * Example:\r\n * {\r\n * a: ['default', [Type.string, Type.null]],\r\n * b: [250, Type.number]\r\n * }\r\n * Property \"a\" has a default value of 'default' and it can be a string or null\r\n * Property \"b\" has a default value of 250 and it can be number\r\n */\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate> = {\r\n resize: ['none', resizeAllowedValues], // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: booleanFalseTemplate, // true || false\r\n updating: {\r\n elementEvents: [[['img', 'load']], [oTypes.array, oTypes.null]], // array of tuples || null\r\n contentMutationDebounce: [80, numberAllowedValues], // number\r\n hostMutationDebounce: [0, numberAllowedValues], // number\r\n resizeDebounce: [0, numberAllowedValues], // number\r\n },\r\n overflow: {\r\n x: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n visibility: ['auto', scrollbarsVisibilityAllowedValues], // visible || hidden || auto || v || h || a\r\n autoHide: ['never', scrollbarsAutoHideAllowedValues], // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: [800, numberAllowedValues], // number\r\n dragScroll: booleanTrueTemplate, // true || false\r\n clickScroll: booleanFalseTemplate, // true || false\r\n touch: booleanTrueTemplate, // true || false\r\n },\r\n textarea: {\r\n dynWidth: booleanFalseTemplate, // true || false\r\n dynHeight: booleanFalseTemplate, // true || false\r\n inheritedAttrs: [['style', 'class'], stringArrayNullAllowedValues], // string || array || null\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: booleanFalseTemplate, // true || false\r\n initialize: booleanFalseTemplate, // true || false\r\n },\r\n /*\r\n callbacks: {\r\n onInitialized: callbackTemplate, // null || function\r\n onInitializationWithdrawn: callbackTemplate, // null || function\r\n onDestroyed: callbackTemplate, // null || function\r\n onScrollStart: callbackTemplate, // null || function\r\n onScroll: callbackTemplate, // null || function\r\n onScrollStop: callbackTemplate, // null || function\r\n onOverflowChanged: callbackTemplate, // null || function\r\n onOverflowAmountChanged: callbackTemplate, // null || function\r\n onDirectionChanged: callbackTemplate, // null || function\r\n onContentSizeChanged: callbackTemplate, // null || function\r\n onHostSizeChanged: callbackTemplate, // null || function\r\n onUpdated: callbackTemplate, // null || function\r\n },\r\n */\r\n};\r\n\r\nexport const { _template: optionsTemplate, _options: defaultOptions } = transformOptions(defaultOptionsWithTemplate);\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\n\r\nimport { validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { Options, defaultOptions, optionsTemplate } from 'options';\r\n\r\nconst OverlayScrollbars = (target: OSTarget | OSTargetObject, options?: Options, extensions?: any): any => {\r\n const currentOptions: Required = assignDeep(\r\n {},\r\n defaultOptions,\r\n validateOptions(options || ({} as Options), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance = {\r\n options(newOptions?: Options) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, currentOptions, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(currentOptions, _changedOptions);\r\n lifecycleHub._update(_changedOptions);\r\n }\r\n }\r\n return currentOptions;\r\n },\r\n update(force?: boolean) {\r\n lifecycleHub._update(null, force);\r\n },\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n\r\nexport { OverlayScrollbars };\r\n","import { createDOM } from 'support/dom';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverlayScrollbars } from 'overlayscrollbars/overlayscrollbars';\r\n\r\nconst abc = {\r\n a: 1,\r\n b: 1,\r\n c: 1,\r\n};\r\n\r\nexport default () => {\r\n return [\r\n getEnvironment(),\r\n OverlayScrollbars(document.body),\r\n createDOM(\r\n '\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n fdfhdfgh\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
'\r\n ),\r\n ];\r\n};\r\n"],"names":["ElementNodeType","Node","ELEMENT_NODE","Object","prototype","toString","hasOwnProperty","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","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertAfter","insertedNodes","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","options","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","equalWH","equalXY","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","prefix","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","x","y","absoluteCoordinates","rect","left","pageYOffset","top","pageXOffset","createCache","update","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameContent","classNameContentArrange","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","environmentInstance","abs","Math","round","getNativeScrollbarSize","body","measureElm","cSize","oSize","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarStyling","nativeScrollbarIsOverlaid","env","_autoUpdateLoop","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","createStructureSetup","targetIsElm","osTargetObj","_host","host","_target","_padding","padding","_viewport","viewport","_content","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","contentArrangeElm","_contentArrange","_targetObj","_targetCtx","_destroy","getPropByPath","path","o","createLifecycleUpdateFunction","lifecycleHub","updateFunction","updateHints","changedOptions","checkOption","overlaidScrollbarsHideOffset","overlaidScrollbarsHideBorderStyle","createOverflowLifecycle","_structureSetup","updateContentScrollSizeCache","getCurrentContentScrollSizeCache","max","_contentScrollSize","_viewportSize","updateOverflowAmountCache","getCurrentOverflowAmountCache","setViewportOverflowStyle","horizontal","amount","behavior","styleObj","overflowKey","behaviorIsScroll","behaviorIsVisibleScroll","hideOverflow","applyStyle","_visible","_behavior","hideNativeScrollbars","contentScrollSize","showNativeOverlaidScrollbars","directionIsRTL","viewportStyleObj","contentStyleObj","overlaidX","overlaidY","scrollX","scrollY","horizontalMarginKey","horizontalBorderKey","overlaidHideOffset","scrollbarsHideOffset","marginBottom","borderBottom","maxWidth","width","height","_scrollbarsHideOffset","_scroll","setFlexboxGlueStyle","heightIntrinsic","scrollbarsHideOffsetX","offsetLeft","offsetTop","maxHeight","_directionIsRTL","_heightIntrinsic","_sizeChanged","_hostMutation","_contentMutation","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","overflowAmuntCache","contentScrollSizeCache","viewportOffsetSize","contentClientSize","contentArrangeOffsetSize","directionChanged","contentScrollSizeChanged","overflowAmount","overflowAmountChanged","overflow","overflowChanged","adjustDirection","viewportStyle","marginTop","marginRight","marginLeft","contentStyle","borderTop","borderRight","borderLeft","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","animationStartEventName","scrollEventName","scrollAmount","directionIsRTLMap","isRTL","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","pop","contentRect","doDirectionScroll","rtl","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","right","_getCurrentCacheValues","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","ioEntryOrSize","isIntersecting","intersectionRatio","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","intersectionObserverInstance","entries","last","root","newSize","heightIntrinsicCache","createEventContentChange","eventContentChange","map","eventContentChangeRef","addEvent","entry","newEntry","registerEvent","clear","_updateElements","getElements","eventElmList","elements","newEventContentChange","createDOMObserver","isConnected","_observeContent","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreTargetAttrChange","_ignoreContentChange","Map","updateEventContentChangeElements","destroyEventContentChange","updateEventContentChange","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","targetAttrChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","_disconnect","_updateEventContentChange","takeRecords","attrs","directionIsRTLCacheValuesFallback","heightIntrinsicCacheValuesFallback","createLifecycleHub","structureSetup","addEnvironmentListener","removeEnvironmentListener","lifecycles","instance","runLifecycles","finalDirectionIsRTL","finalHeightIntrinsic","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","onSizeChanged","sizeChanged","onTrinsicChanged","onHostMutation","requestAnimationFrame","onContentMutation","hostMutationObserver","contentMutationObserver","updating","elementEvents","updateAll","envUpdateListener","log","numberAllowedValues","oTypes","number","stringArrayNullAllowedValues","null","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","contentMutationDebounce","hostMutationDebounce","resizeDebounce","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","optionsTemplate","defaultOptions","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions"],"mappings":";;;;;;;;;EAEA,IAAMA,eAAe,GAAGC,IAAI,CAACC,YAA7B;0BACqCC,MAAM,CAACC;IAApCC,6BAAAA;IAAUC,mCAAAA;WAEFC,YAAYC;EAC1B,SAAOA,GAAG,KAAKC,SAAf;EACD;WAEeC,OAAOF;EACrB,SAAOA,GAAG,KAAK,IAAf;EACD;EAEM,IAAMG,IAAI,GAAyB,SAA7BA,IAA6B,CAACH,GAAD;EACxC,SAAOD,WAAW,CAACC,GAAD,CAAX,IAAoBE,MAAM,CAACF,GAAD;AAA1B,aACAA;AADA,QAEHH;UAAQ,CACLO,IADH,CACQJ,GADR;WAEGK,OAFH,CAEW,mBAFX,EAEgC,IAFhC;WAGGC,WAHH,EAFJ;EAMD,CAPM;WASSC,SAASP;EACvB,SAAO,OAAOA,GAAP,KAAe,QAAtB;EACD;WAEeQ,SAASR;EACvB,SAAO,OAAOA,GAAP,KAAe,QAAtB;EACD;WAEeS,UAAUT;EACxB,SAAO,OAAOA,GAAP,KAAe,SAAtB;EACD;WAEeU,WAAWV;EACzB,SAAO,OAAOA,GAAP,KAAe,UAAtB;EACD;WAEeW,QAAQX;EACtB,SAAOY,KAAK,CAACD,OAAN,CAAcX,GAAd,CAAP;EACD;WAEea,SAASb;EACvB,SAAO,OAAOA,GAAP,KAAe,QAAf,IAA2B,CAACW,OAAO,CAACX,GAAD,CAAnC,IAA4C,CAACE,MAAM,CAACF,GAAD,CAA1D;EACD;WAMec,YAAyCd;EACvD,MAAMe,MAAM,GAAG,CAAC,CAACf,GAAF,IAASA,GAAG,CAACe,MAA5B;EACA,MAAMC,mBAAmB,GAAGT,QAAQ,CAACQ,MAAD,CAAR,IAAoBA,MAAM,GAAG,CAAC,CAA9B,IAAmCA,MAAM,GAAG,CAAT,IAAc,CAA7E;EAEA,SAAOJ,OAAO,CAACX,GAAD,CAAP,KAAiB,CAACU,UAAU,CAACV,GAAD,CAAX,IAAoBgB,oBAArC,IAA6DD,MAAM,GAAG,CAAT,IAAcF,QAAQ,CAACb,GAAD,CAAtB,GAA8Be,MAAM,GAAG,CAAT,IAAcf,GAA5C,GAAkD,KAA/G,GAAuH,KAA9H;EACD;WAMeiB,cAAuBjB;EACrC,MAAI,CAACA,GAAD,IAAQ,CAACa,QAAQ,CAACb,GAAD,CAAjB,IAA0BG,IAAI,CAACH,GAAD,CAAJ,KAAc,QAA5C,EAAsD,OAAO,KAAP;EAEtD,MAAIkB,GAAJ;EACA,MAAMC,IAAI,GAAG,aAAb;EACA,MAAMC,IAAI,GAAGpB,GAAG,CAACmB,IAAD,CAAhB;EACA,MAAME,SAAS,GAAGD,IAAI,IAAIA,IAAI,CAACxB,SAA/B;EACA,MAAM0B,iBAAiB,GAAGxB,cAAc,CAACM,IAAf,CAAoBJ,GAApB,EAAyBmB,IAAzB,CAA1B;EACA,MAAMI,gBAAgB,GAAGF,SAAS,IAAIvB,cAAc,CAACM,IAAf,CAAoBiB,SAApB,EAA+B,eAA/B,CAAtC;;EAEA,MAAID,IAAI,IAAI,CAACE,iBAAT,IAA8B,CAACC,gBAAnC,EAAqD;EACnD,WAAO,KAAP;EACD;;EAGD,OAAKL,GAAL,IAAYlB,GAAZ,EAAiB;;;EAKjB,SAAOD,WAAW,CAACmB,GAAD,CAAX,IAAoBpB,cAAc,CAACM,IAAf,CAAoBJ,GAApB,EAAyBkB,GAAzB,CAA3B;EACD;WAMeM,cAAcxB;EAC5B,MAAMyB,aAAa,GAAGC,MAAM,CAACC,WAA7B;EACA,SAAO3B,GAAG,IAAIyB,aAAa,GAAGzB,GAAG,YAAYyB,aAAlB,GAAkCzB,GAAG,CAAC4B,QAAJ,KAAiBpC,gBAApE,GAAuF,KAAjG;EACD;WAMeqC,UAAU7B;EACxB,MAAMyB,aAAa,GAAGC,MAAM,CAACI,OAA7B;EACA,SAAO9B,GAAG,IAAIyB,aAAa,GAAGzB,GAAG,YAAYyB,aAAlB,GAAkCzB,GAAG,CAAC4B,QAAJ,KAAiBpC,gBAApE,GAAuF,KAAjG;EACD;;EChGD,SAASuC,UAAT,CACEC,OADF,EAEEC,QAFF,EAGEC,GAHF,EAIEC,KAJF;EAME,MAAIpC,WAAW,CAACoC,KAAD,CAAf,EAAwB;EACtB,WAAOD,GAAG,GAAGA,GAAG,CAACF,OAAD,CAAN,GAAkBC,QAA5B;EACD;;EACDC,EAAAA,GAAG,KAAKA,GAAG,CAACF,OAAD,CAAH,GAAeG,KAApB,CAAH;EACD;;WAWeC,KAAKF,KAAyBG,UAAkBF;EAC9D,MAAIpC,WAAW,CAACoC,KAAD,CAAf,EAAwB;EACtB,WAAOD,GAAG,GAAGA,GAAG,CAACI,YAAJ,CAAiBD,QAAjB,CAAH,GAAgC,IAA1C;EACD;;EACDH,EAAAA,GAAG,IAAIA,GAAG,CAACK,YAAJ,CAAiBF,QAAjB,EAA2BF,KAA3B,CAAP;EACD;EAOM,IAAMK,UAAU,GAAG,SAAbA,UAAa,CAACN,GAAD,EAAsBG,QAAtB;EACxBH,EAAAA,GAAG,IAAIA,GAAG,CAACO,eAAJ,CAAoBJ,QAApB,CAAP;EACD,CAFM;WAWSK,WAAWR,KAAyBC;EAClD,SAAOJ,UAAU,CAAC,YAAD,EAAe,CAAf,EAAkBG,GAAlB,EAAuBC,KAAvB,CAAjB;EACD;WASeQ,UAAUT,KAAyBC;EACjD,SAAOJ,UAAU,CAAC,WAAD,EAAc,CAAd,EAAiBG,GAAjB,EAAsBC,KAAtB,CAAjB;EACD;;WC5BeS,KACdC,QACAC;EAEA,MAAIhC,WAAW,CAAC+B,MAAD,CAAf,EAAyB;EACvB,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,MAAM,CAAC9B,MAA3B,EAAmCgC,CAAC,EAApC,EAAwC;EACtC,UAAID,QAAQ,CAACD,MAAM,CAACE,CAAD,CAAP,EAAYA,CAAZ,EAAeF,MAAf,CAAR,KAAmC,KAAvC,EAA8C;EAC5C;EACD;EACF;EACF,GAND,MAMO,IAAIA,MAAJ,EAAY;EACjBD,IAAAA,IAAI,CAACjD,MAAM,CAACqD,IAAP,CAAYH,MAAZ,CAAD,EAAsB,UAAC3B,GAAD;EAAA,aAAS4B,QAAQ,CAACD,MAAM,CAAC3B,GAAD,CAAP,EAAcA,GAAd,EAAmB2B,MAAnB,CAAjB;EAAA,KAAtB,CAAJ;EACD;;EACD,SAAOA,MAAP;EACD;EAQM,IAAMI,OAAO,GAAG,SAAVA,OAAU,CAAUC,GAAV,EAAyBC,IAAzB,EAAkCC,SAAlC;EAAA,SAAiEF,GAAG,CAACD,OAAJ,CAAYE,IAAZ,EAAkBC,SAAlB,CAAjE;EAAA,CAAhB;EAOA,IAAMC,IAAI,GAAG,SAAPA,IAAO,CAAIC,KAAJ,EAAqBC,KAArB,EAA8CC,iBAA9C;EAClB,GAACA,iBAAD,IAAsB,CAAChD,QAAQ,CAAC+C,KAAD,CAA/B,IAA0CzC,WAAW,CAACyC,KAAD,CAArD,GAA+D3C,KAAK,CAAChB,SAAN,CAAgByD,IAAhB,CAAqBI,KAArB,CAA2BH,KAA3B,EAAkCC,KAAlC,CAA/D,GAAsHD,KAAK,CAACD,IAAN,CAAWE,KAAX,CAAtH;EACA,SAAOD,KAAP;EACD,CAHM;EASA,IAAMI,IAAI,GAAG,SAAPA,IAAO,CAAUR,GAAV;EAClB,MAAItC,KAAK,CAAC8C,IAAV,EAAgB;EACd,WAAO9C,KAAK,CAAC8C,IAAN,CAAWR,GAAX,CAAP;EACD;;EACD,MAAMS,MAAM,GAAa,EAAzB;EAEAf,EAAAA,IAAI,CAACM,GAAD,EAAM,UAAChB,GAAD;EACRmB,IAAAA,IAAI,CAACM,MAAD,EAASzB,GAAT,CAAJ;EACD,GAFG,CAAJ;EAIA,SAAOyB,MAAP;EACD,CAXM;EAiBA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAACN,KAAD;EAAA,SAA0CA,KAAK,IAAIA,KAAK,CAACvC,MAAN,KAAiB,CAApE;EAAA,CAArB;EAOA,IAAM8C,OAAO,GAAG,SAAVA,OAAU,CAACX,GAAD,EAAiDY,EAAjD;EACrB,MAAMC,KAAK,GAAG,SAARA,KAAQ,CAACC,EAAD;EAAA,WAAqBA,EAAE,IAAIA,EAAE,CAACF,EAAD,CAA7B;EAAA,GAAd;;EACA,MAAIZ,GAAG,YAAYe,GAAnB,EAAwB;EACtBf,IAAAA,GAAG,CAACgB,OAAJ,CAAYH,KAAZ;EACD,GAFD,MAEO;EACLnB,IAAAA,IAAI,CAACM,GAAD,EAAMa,KAAN,CAAJ;EACD;EACF,CAPM;;ECvFA,IAAMjE,gBAAc,GAAG,SAAjBA,cAAiB,CAACE,GAAD,EAAWmE,IAAX;EAAA,SAAuDxE,MAAM,CAACC,SAAP,CAAiBE,cAAjB,CAAgCM,IAAhC,CAAqCJ,GAArC,EAA0CmE,IAA1C,CAAvD;EAAA,CAAvB;EAMA,IAAMnB,IAAI,GAAG,SAAPA,IAAO,CAAChD,GAAD;EAAA,SAA8BA,GAAG,GAAGL,MAAM,CAACqD,IAAP,CAAYhD,GAAZ,CAAH,GAAsB,EAAvD;EAAA,CAAb;WAQSoE,WACdC,QACAC,SACAC,SACAC,SACAC,SACAC,SACAC;EAEA,MAAMC,OAAO,GAAe,CAACN,OAAD,EAAUC,OAAV,EAAmBC,OAAnB,EAA4BC,OAA5B,EAAqCC,OAArC,EAA8CC,OAA9C,CAA5B;;EAGA,MAAI,CAAC,OAAON,MAAP,KAAkB,QAAlB,IAA8BnE,MAAM,CAACmE,MAAD,CAArC,KAAkD,CAAC3D,UAAU,CAAC2D,MAAD,CAAjE,EAA2E;EACzEA,IAAAA,MAAM,GAAG,EAAT;EACD;;EAEDzB,EAAAA,IAAI,CAACgC,OAAD,EAAU,UAAC/B,MAAD;EAEZD,IAAAA,IAAI,CAACI,IAAI,CAACH,MAAD,CAAL,EAAe,UAAC3B,GAAD;EACjB,UAAM2D,IAAI,GAAQhC,MAAM,CAAC3B,GAAD,CAAxB;;EAIA,UAAImD,MAAM,KAAKQ,IAAf,EAAqB;EACnB,eAAO,IAAP;EACD;;EAED,UAAMC,WAAW,GAAGnE,OAAO,CAACkE,IAAD,CAA3B;;EAGA,UAAIA,IAAI,KAAK5D,aAAa,CAAC4D,IAAD,CAAb,IAAuBC,WAA5B,CAAR,EAAkD;EAChD,YAAMC,GAAG,GAAGV,MAAM,CAACnD,GAAD,CAAlB;EACA,YAAI8D,KAAK,GAAQD,GAAjB;;EAGA,YAAID,WAAW,IAAI,CAACnE,OAAO,CAACoE,GAAD,CAA3B,EAAkC;EAChCC,UAAAA,KAAK,GAAG,EAAR;EACD,SAFD,MAEO,IAAI,CAACF,WAAD,IAAgB,CAAC7D,aAAa,CAAC8D,GAAD,CAAlC,EAAyC;EAC9CC,UAAAA,KAAK,GAAG,EAAR;EACD;;EAGDX,QAAAA,MAAM,CAACnD,GAAD,CAAN,GAAckD,UAAU,CAACY,KAAD,EAAQH,IAAR,CAAxB;EACD,OAbD,MAaO;EACLR,QAAAA,MAAM,CAACnD,GAAD,CAAN,GAAc2D,IAAd;EACD;EACF,KA5BG,CAAJ;EA6BD,GA/BG,CAAJ;EAkCA,SAAOR,MAAP;EACD;WAMeY,cAAcjF;EAE5B,OAAK,IAAMkF,IAAX,IAAmBlF,GAAnB;EAAwB,WAAO,KAAP;EAAxB;;EACA,SAAO,IAAP;EAED;;EChFD,IAAMmF,aAAa,GAAG,mBAAtB;;EACA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CACtBlD,GADsB,EAEtBmD,SAFsB,EAGtBC,MAHsB;EAKtB,MAAIC,KAAJ;EACA,MAAIxC,CAAC,GAAG,CAAR;EACA,MAAIY,MAAM,GAAG,KAAb;;EAEA,MAAIzB,GAAG,IAAI1B,QAAQ,CAAC6E,SAAD,CAAnB,EAAgC;EAC9B,QAAMG,OAAO,GAAkBH,SAAS,CAACI,KAAV,CAAgBN,aAAhB,KAAkC,EAAjE;EACAxB,IAAAA,MAAM,GAAG6B,OAAO,CAACzE,MAAR,GAAiB,CAA1B;;EACA,YAAQwE,KAAK,GAAGC,OAAO,CAACzC,CAAC,EAAF,CAAvB,GAA+B;EAC7BY,MAAAA,MAAM,GAAG,CAAC,CAAC2B,MAAM,CAACpD,GAAG,CAACwD,SAAL,EAAgBH,KAAhB,CAAR,IAAkC5B,MAA3C;EACD;EACF;;EACD,SAAOA,MAAP;EACD,CAjBD;EAgCO,IAAMgC,QAAQ,GAAG,SAAXA,QAAW,CAACzD,GAAD,EAAkCmD,SAAlC;EACtBD,EAAAA,eAAe,CAAClD,GAAD,EAAMmD,SAAN,EAAiB,UAACK,SAAD,EAAYH,KAAZ;EAAA,WAAsBG,SAAS,CAACE,GAAV,CAAcL,KAAd,CAAtB;EAAA,GAAjB,CAAf;EACD,CAFM;EASA,IAAMM,WAAW,GAAG,SAAdA,WAAc,CAAC3D,GAAD,EAAkCmD,SAAlC;EACzBD,EAAAA,eAAe,CAAClD,GAAD,EAAMmD,SAAN,EAAiB,UAACK,SAAD,EAAYH,KAAZ;EAAA,WAAsBG,SAAS,CAACI,MAAV,CAAiBP,KAAjB,CAAtB;EAAA,GAAjB,CAAf;EACD,CAFM;;ECxCP,IAAMQ,YAAY,GAAGjE,OAAO,CAAClC,SAA7B;;EAOA,IAAMoG,IAAI,GAAG,SAAPA,IAAO,CAACC,QAAD,EAAmB/D,GAAnB;EACX,MAAMgB,GAAG,GAAmB,EAA5B;EACA,MAAMgD,OAAO,GAAGhE,GAAG,IAAIL,SAAS,CAACK,GAAD,CAAT,GAAiBA,GAAjB,GAAuB,KAA3B,GAAmCiE,QAAtD;EAEA,SAAOD,OAAO,GAAG7C,IAAI,CAACH,GAAD,EAAMgD,OAAO,CAACE,gBAAR,CAAyBH,QAAzB,CAAN,CAAP,GAAmD/C,GAAjE;EACD,CALD;;EAuBA,IAAMmD,EAAE,GAAG,SAALA,EAAK,CAACnE,GAAD,EAAwB+D,QAAxB;EACT,MAAIpE,SAAS,CAACK,GAAD,CAAb,EAAoB;EAIlB,QAAM8B,EAAE,GAA8B+B,YAAY,CAACO,OAAb,IAAwBP,YAAY,CAACQ,iBAA3E;EACA,WAAOvC,EAAE,CAAC5D,IAAH,CAAQ8B,GAAR,EAAa+D,QAAb,CAAP;EACD;;EACD,SAAO,KAAP;EACD,CATD;;EA+BA,IAAMO,QAAQ,GAAG,SAAXA,QAAW,CAACtE,GAAD;EAAA,SAAsDA,GAAG,GAAGwB,IAAI,CAACxB,GAAG,CAACuE,UAAL,CAAP,GAA0B,EAAnF;EAAA,CAAjB;;EAMA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAACxE,GAAD;EAAA,SAA+CA,GAAG,GAAGA,GAAG,CAACyE,aAAP,GAAuB,IAAzE;EAAA,CAAf;;EC7DA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAACC,SAAD,EAAqCC,eAArC,EAA+EC,YAA/E;EACb,MAAIA,YAAJ,EAAkB;EAChB,QAAIC,MAAM,GAA4BF,eAAtC;EACA,QAAIG,QAAJ;;EAGA,QAAIJ,SAAJ,EAAe;EACb,UAAI/F,WAAW,CAACiG,YAAD,CAAf,EAA+B;EAC7BE,QAAAA,QAAQ,GAAGd,QAAQ,CAACe,sBAAT,EAAX;EAGAtE,QAAAA,IAAI,CAACmE,YAAD,EAAe,UAACI,WAAD;EACjB,cAAIA,WAAW,KAAKH,MAApB,EAA4B;EAC1BA,YAAAA,MAAM,GAAGG,WAAW,CAACC,eAArB;EACD;;EACDH,UAAAA,QAAS,CAACI,WAAV,CAAsBF,WAAtB;EACD,SALG,CAAJ;EAMD,OAVD,MAUO;EACLF,QAAAA,QAAQ,GAAGF,YAAX;EACD;;EAGD,UAAID,eAAJ,EAAqB;EACnB,YAAI,CAACE,MAAL,EAAa;EACXA,UAAAA,MAAM,GAAGH,SAAS,CAACS,UAAnB;EACD,SAFD,MAEO,IAAIN,MAAM,KAAKF,eAAf,EAAgC;EACrCE,UAAAA,MAAM,GAAGA,MAAM,CAACO,WAAhB;EACD;EACF;;EAEDV,MAAAA,SAAS,CAACW,YAAV,CAAuBP,QAAvB,EAAiCD,MAAM,IAAI,IAA3C;EACD;EACF;EACF,CAjCD;;EAwCO,IAAMS,cAAc,GAAG,SAAjBA,cAAiB,CAACC,IAAD,EAAgCC,QAAhC;EAC5Bf,EAAAA,MAAM,CAACc,IAAD,EAAO,IAAP,EAAaC,QAAb,CAAN;EACD,CAFM;EASA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACF,IAAD,EAAgCC,QAAhC;EAC7Bf,EAAAA,MAAM,CAACc,IAAD,EAAOA,IAAI,IAAIA,IAAI,CAACJ,UAApB,EAAgCK,QAAhC,CAAN;EACD,CAFM;EAkBA,IAAME,WAAW,GAAG,SAAdA,WAAc,CAACH,IAAD,EAAgCI,aAAhC;EACzBlB,EAAAA,MAAM,CAACF,MAAM,CAACgB,IAAD,CAAP,EAAeA,IAAI,IAAIA,IAAI,CAACH,WAA5B,EAAyCO,aAAzC,CAAN;EACD,CAFM;EAQA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAACC,KAAD;EAC5B,MAAIlH,WAAW,CAACkH,KAAD,CAAf,EAAwB;EACtBpF,IAAAA,IAAI,CAACc,IAAI,CAACsE,KAAD,CAAL,EAAc,UAACC,CAAD;EAAA,aAAOF,cAAc,CAACE,CAAD,CAArB;EAAA,KAAd,CAAJ;EACD,GAFD,MAEO,IAAID,KAAJ,EAAW;EAChB,QAAMnB,SAAS,GAAGH,MAAM,CAACsB,KAAD,CAAxB;;EACA,QAAInB,SAAJ,EAAe;EACbA,MAAAA,SAAS,CAACqB,WAAV,CAAsBF,KAAtB;EACD;EACF;EACF,CATM;;EC/EA,IAAMG,SAAS,GAAG,SAAZA,SAAY,CAACC,UAAD;EACvB,MAAMC,GAAG,GAAGlC,QAAQ,CAACmC,aAAT,CAAuB,KAAvB,CAAZ;;EACA,MAAIF,UAAJ,EAAgB;EACdhG,IAAAA,IAAI,CAACiG,GAAD,EAAM,OAAN,EAAeD,UAAf,CAAJ;EACD;;EACD,SAAOC,GAAP;EACD,CANM;EAYA,IAAME,SAAS,GAAG,SAAZA,SAAY,CAACC,IAAD;EACvB,MAAMC,UAAU,GAAGN,SAAS,EAA5B;EACAM,EAAAA,UAAU,CAACC,SAAX,GAAuBF,IAAI,CAACG,IAAL,EAAvB;EAEA,SAAO/F,IAAI,CAAC4D,QAAQ,CAACiC,UAAD,CAAT,EAAuB,UAACvG,GAAD;EAAA,WAAS6F,cAAc,CAAC7F,GAAD,CAAvB;EAAA,GAAvB,CAAX;EACD,CALM;;ECdP,IAAM0G,OAAO,GAAO;EAClBC,EAAAA,CAAC,EAAE,CADe;EAElBC,EAAAA,CAAC,EAAE;EAFe,CAApB;EAQO,IAAMC,UAAU,GAAG,SAAbA,UAAa;EAAA,SAAW;EACnCF,IAAAA,CAAC,EAAEnH,MAAM,CAACsH,UADyB;EAEnCF,IAAAA,CAAC,EAAEpH,MAAM,CAACuH;EAFyB,GAAX;EAAA,CAAnB;EASA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAChH,GAAD;EAAA,SACxBA;AAAG,QACC;EACE2G,QAAAA,CAAC,EAAE3G,GAAG,CAACiH,WADT;EAEEL,QAAAA,CAAC,EAAE5G,GAAG,CAACkH;EAFT;AADD,QAKCR,OANoB;EAAA,CAAnB;EAYA,IAAMS,UAAU,GAAG,SAAbA,UAAa,CAACnH,GAAD;EAAA,SACxBA;AAAG,QACC;EACE2G,QAAAA,CAAC,EAAE3G,GAAG,CAACoH,WADT;EAEER,QAAAA,CAAC,EAAE5G,GAAG,CAACqH;EAFT;AADD,QAKCX,OANoB;EAAA,CAAnB;EAYA,IAAMY,UAAU,GAAG,SAAbA,UAAa,CAACtH,GAAD;EAAA,SACxBA;AAAG,QACC;EACE2G,QAAAA,CAAC,EAAE3G,GAAG,CAACuH,WADT;EAEEX,QAAAA,CAAC,EAAE5G,GAAG,CAACwH;EAFT;AADD,QAKCd,OANoB;EAAA,CAAnB;EAYA,IAAMe,qBAAqB,GAAG,SAAxBA,qBAAwB,CAACzH,GAAD;EAAA,SAA+BA,GAAG,CAACyH,qBAAJ,EAA/B;EAAA,CAA9B;;ECxDP,IAAIC,oBAAJ;;EACA,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB;EAC3B,MAAI9J,WAAW,CAAC6J,oBAAD,CAAf,EAAuC;EACrCA,IAAAA,oBAAoB,GAAG,KAAvB;;EACA,QAAI;EAGFlI,MAAAA,MAAM,CAACoI,gBAAP;UACE,MADF;UAEE,IAFF;UAGEnK,MAAM,CAACoK,cAAP,CAAsB,EAAtB,EAA0B,SAA1B,EAAqC;EACnCC,UAAAA,GAAG,EAAE;EACHJ,YAAAA,oBAAoB,GAAG,IAAvB;EACD;EAHkC,SAArC;QAHF;EAUD,KAbD,CAaE,OAAO3B,CAAP,EAAU;EACb;;EACD,SAAO2B,oBAAP;EACD,CAnBD;;EAoBA,IAAMK,eAAe,GAAG,SAAlBA,eAAkB,CAACC,UAAD;EAAA,SAAwBA,UAAU,CAACC,KAAX,CAAiB,GAAjB,CAAxB;EAAA,CAAxB;;EAeO,IAAMC,GAAG,GAAG,SAANA,GAAM,CAA0B/F,MAA1B,EAA+C6F,UAA/C,EAAmEG,QAAnE,EAAgGC,OAAhG;EACjB1H,EAAAA,IAAI,CAACqH,eAAe,CAACC,UAAD,CAAhB,EAA8B,UAACK,SAAD;EAChClG,IAAAA,MAAM,CAACmG,mBAAP,CAA2BD,SAA3B,EAAsCF,QAAtC,EAAiEC,OAAjE;EACD,GAFG,CAAJ;EAGD,CAJM;EAaA,IAAMG,EAAE,GAAG,SAALA,EAAK,CAChBpG,MADgB,EAEhB6F,UAFgB,EAGhBG,QAHgB,EAIhBK,OAJgB;EAMhB,MAAMC,sBAAsB,GAAGd,oBAAoB,EAAnD;EACA,MAAMe,OAAO,IAAID,sBAAsB,IAAID,OAA1B,IAAqCA,OAAO,CAACG,SAA9C,IAA2D,KAA3E;EACA,MAAMP,OAAO,IAAII,OAAO,IAAIA,OAAO,CAACI,SAApB,IAAiC,KAAjD;EACA,MAAMC,IAAI,IAAIL,OAAO,IAAIA,OAAO,CAACM,MAApB,IAA8B,KAA3C;EACA,MAAMC,YAAY,GAAmB,EAArC;EACA,MAAMC,aAAa,GAAsCP;AAAsB,QAC3E;EACEC,QAAAA,OAAO,EAAPA,OADF;EAEEN,QAAAA,OAAO,EAAPA;EAFF;AAD2E,QAK3EA,OALJ;EAOA1H,EAAAA,IAAI,CAACqH,eAAe,CAACC,UAAD,CAAhB,EAA8B,UAACK,SAAD;EAChC,QAAMY,aAAa,GAAIJ;AAAI,UACvB,UAACK,GAAD;EACE/G,UAAAA,MAAM,CAACmG,mBAAP,CAA2BD,SAA3B,EAAsCY,aAAtC,EAAqDb,OAArD;EACAD,UAAAA,QAAQ,IAAIA,QAAQ,CAACe,GAAD,CAApB;EACD;AAJsB,UAKvBf,QALJ;EAOAhH,IAAAA,IAAI,CAAC4H,YAAD,EAAeb,GAAG,CAACiB,IAAJ,CAAS,IAAT,EAAehH,MAAf,EAAuBkG,SAAvB,EAAkCY,aAAlC,EAAiDb,OAAjD,CAAf,CAAJ;EACAjG,IAAAA,MAAM,CAACyF,gBAAP,CAAwBS,SAAxB,EAAmCY,aAAnC,EAAkDD,aAAlD;EACD,GAVG,CAAJ;EAYA,SAAOrH,OAAO,CAACwH,IAAR,CAAa,CAAb,EAAgBJ,YAAhB,CAAP;EACD,CA/BM;EAqCA,IAAMK,eAAe,GAAG,SAAlBA,eAAkB,CAACF,GAAD;EAAA,SAAgBA,GAAG,CAACE,eAAJ,EAAhB;EAAA,CAAxB;EAMA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAACH,GAAD;EAAA,SAAgBA,GAAG,CAACG,cAAJ,EAAhB;EAAA,CAAvB;;ECrFA,IAAMC,KAAK,GAAG,SAARA,KAAQ,CAAwBC,CAAxB,EAA0CC,CAA1C,EAA4DC,KAA5D;EACnB,MAAIF,CAAC,IAAIC,CAAT,EAAY;EACV,QAAI/H,MAAM,GAAG,IAAb;EACAf,IAAAA,IAAI,CAAC+I,KAAD,EAAQ,UAACxH,IAAD;EACV,UAAIsH,CAAC,CAACtH,IAAD,CAAD,KAAYuH,CAAC,CAACvH,IAAD,CAAjB,EAAyB;EACvBR,QAAAA,MAAM,GAAG,KAAT;EACD;EACF,KAJG,CAAJ;EAKA,WAAOA,MAAP;EACD;;EACD,SAAO,KAAP;EACD,CAXM;EAmBA,IAAMiI,OAAO,GAAG,SAAVA,OAAU,CAACH,CAAD,EAASC,CAAT;EAAA,SAAoBF,KAAK,CAAKC,CAAL,EAAQC,CAAR,EAAW,CAAC,GAAD,EAAM,GAAN,CAAX,CAAzB;EAAA,CAAhB;EAQA,IAAMG,OAAO,GAAG,SAAVA,OAAU,CAACJ,CAAD,EAASC,CAAT;EAAA,SAAoBF,KAAK,CAAKC,CAAL,EAAQC,CAAR,EAAW,CAAC,GAAD,EAAM,GAAN,CAAX,CAAzB;EAAA,CAAhB;;ECjCP,IAAMI,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,GAAD;EAAA,SAAyBA,GAAG,CAACC,MAAJ,CAAW,CAAX,EAAcC,WAAd,KAA8BF,GAAG,CAACG,KAAJ,CAAU,CAAV,CAAvD;EAAA,CAA3B;EAMO,IAAMC,UAAU,GAA0B,CAAC,QAAD,EAAW,KAAX,EAAkB,GAAlB,EAAuB,IAAvB,EAA6B,QAA7B,EAAuC,KAAvC,EAA8C,GAA9C,EAAmD,IAAnD,CAA1C;EAEA,IAAMC,OAAO,GAA2B,EAAxC;EAwEA,IAAMC,KAAK,GAAG,SAARA,KAAQ,CAAUnH,IAAV;EACnB,MAAIvB,MAAM,GAAQyI,OAAO,CAAClH,IAAD,CAAP,IAAiBxD,MAAM,CAACwD,IAAD,CAAzC;;EAEA,MAAIpF,gBAAc,CAACsM,OAAD,EAAUlH,IAAV,CAAlB,EAAmC;EACjC,WAAOvB,MAAP;EACD;;EAEDf,EAAAA,IAAI,CAACuJ,UAAD,EAAa,UAACG,MAAD;EACf3I,IAAAA,MAAM,GAAGA,MAAM,IAAIjC,MAAM,CAAC4K,MAAM,GAAGR,kBAAkB,CAAC5G,IAAD,CAA5B,CAAzB;EACA,WAAO,CAACvB,MAAR;EACD,GAHG,CAAJ;EAKAyI,EAAAA,OAAO,CAAClH,IAAD,CAAP,GAAgBvB,MAAhB;EACA,SAAOA,MAAP;EACD,CAdM;;EClFA,IAAM4I,2BAA2B,GAAGF,KAAK,CAA0B,kBAA1B,CAAzC;EACA,IAAMG,+BAA+B,GAAGH,KAAK,CAA8B,sBAA9B,CAA7C;EACA,IAAMI,yBAAyB,GAAoBJ,KAAK,CAAC,gBAAD,CAAxD;EACA,IAAMK,GAAG,GAAGL,KAAK,CAA8B,sBAA9B,CAAjB;EACA,IAAMM,GAAG,GAAGN,KAAK,CAA+B,uBAA/B,CAAjB;;ECHA,IAAMO,IAAI,GAAG,SAAPA,IAAO,KAAb;EAQA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAACC,kBAAD,EAA4CC,OAA5C,EAA8DC,OAA9D;EACtB,MAAIC,SAAJ;EACA,MAAIC,YAAJ;EACA,MAAMC,UAAU,GAAG5M,QAAQ,CAACwM,OAAD,CAAR,IAAqBA,OAAO,GAAG,CAAlD;EACA,MAAMK,UAAU,GAAG7M,QAAQ,CAACyM,OAAD,CAAR,IAAqBA,OAAO,GAAG,CAAlD;EACA,MAAMK,MAAM,GAAGF,UAAU,GAAGzL,MAAM,CAAC4L,YAAV,GAAyBZ,GAAlD;EACA,MAAMa,GAAG,GAAGJ,UAAU,GAAGzL,MAAM,CAAC8L,UAAV,GAAuBb,GAA7C;;EACA,MAAMc,KAAK,GAAG,SAARA,KAAQ,CAAUC,IAAV;EACZR,IAAAA,YAAY,GAAGE,UAAU,GAAGO,WAAW,CAACC,GAAZ,EAAH,GAAuB,CAAhD;EACAX,IAAAA,SAAS,IAAII,MAAM,CAACJ,SAAD,CAAnB;EAGAH,IAAAA,kBAAkB,CAACrJ,KAAnB,CAAyB,IAAzB,EAA+BiK,IAA/B;EACD,GAND;;EAQA,SAAO;EAGL,QAAMG,UAAU,GAAGJ,KAAK,CAACpC,IAAN,CAAW,IAAX,EAAiByC,SAAjB,CAAnB;EACA,QAAMC,SAAS,GAAGX,UAAU,GAAGO,WAAW,CAACC,GAAZ,KAAoBV,YAApB,IAAoCF,OAAvC,GAAkD,KAA9E;EAEAC,IAAAA,SAAS,IAAII,MAAM,CAACJ,SAAD,CAAnB;EACAA,IAAAA,SAAS,GAAGc,SAAS,GAAGF,UAAU,EAAb,GAAmBN,GAAG,CAACM,UAAD,EAAad,OAAb,CAA3C;EACD,GARD;EASD,CAxBM;;ECCP,IAAMiB,SAAS,GAAG;EAChBC,EAAAA,uBAAuB,EAAE,CADT;EAEhBC,EAAAA,WAAW,EAAE,CAFG;EAGhBC,EAAAA,WAAW,EAAE,CAHG;EAIhBC,EAAAA,QAAQ,EAAE,CAJM;EAKhBC,EAAAA,UAAU,EAAE,CALI;EAMhBC,EAAAA,UAAU,EAAE,CANI;EAOhBC,EAAAA,UAAU,EAAE,CAPI;EAQhBC,EAAAA,OAAO,EAAE,CARO;EAShBC,EAAAA,KAAK,EAAE,CATS;EAUhBC,EAAAA,OAAO,EAAE,CAVO;EAWhBC,EAAAA,MAAM,EAAE,CAXQ;EAYhBC,EAAAA,MAAM,EAAE,CAZQ;EAahBC,EAAAA,IAAI,EAAE;EAbU,CAAlB;;EAsBA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAAC3K,IAAD,EAAe4K,GAAf;EAAA,SAA0D,CAACf,SAAS,CAAC7J,IAAI,CAAC7D,WAAL,EAAD,CAAV,IAAkCC,QAAQ,CAACwO,GAAD,CAA1C,GAAqDA,GAArD,UAA+DA,GAAzH;EAAA,CAApB;;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAC9M,GAAD,EAAmB+M,aAAnB,EAAuD9K,IAAvD;EAAA,SAEhB8K,aAAa,IAAI,IAAjB,GAAwBA,aAAa,CAACC,gBAAd,CAA+B/K,IAA/B,CAAxB,GAA+DjC,GAAG,CAACiN,KAAJ,CAAUhL,IAAV,CAF/C;EAAA,CAAlB;;EAGA,IAAMiL,SAAS,GAAG,SAAZA,SAAY,CAAClN,GAAD,EAAsCiC,IAAtC,EAAoD4K,GAApD;EAChB,MAAI;EACF,QAAI7M,GAAG,IAAIA,GAAG,CAACiN,KAAJ,CAAUhL,IAAV,MAAoBlE,SAA/B,EAA0C;EACxCiC,MAAAA,GAAG,CAACiN,KAAJ,CAAUhL,IAAV,IAAkB2K,WAAW,CAAC3K,IAAD,EAAO4K,GAAP,CAA7B;EACD;EACF,GAJD,CAIE,OAAO9G,CAAP,EAAU;EACb,CAND;;WAgBgBkH,MAAMjN,KAAqCmN;EACzD,MAAMC,cAAc,GAAG9O,QAAQ,CAAC6O,MAAD,CAA/B;EACA,MAAME,SAAS,GAAG5O,OAAO,CAAC0O,MAAD,CAAP,IAAmBC,cAArC;;EAEA,MAAIC,SAAJ,EAAe;EACb,QAAIC,eAAe,GAAyBF,cAAc,GAAG,EAAH,GAAQ,EAAlE;;EACA,QAAIpN,GAAJ,EAAS;EACP,UAAM+M,aAAa,GAAwBvN,MAAM,CAAC+N,gBAAP,CAAwBvN,GAAxB,EAA6B,IAA7B,CAA3C;EACAsN,MAAAA,eAAe,GAAGF;AAAc,YAC5BN,SAAS,CAAC9M,GAAD,EAAM+M,aAAN,EAAqBI,MAArB;AADmB,YAE3BA,MAAwB,CAACK,MAAzB,CAAgC,UAAC/L,MAAD,EAASzC,GAAT;EAC/ByC,YAAAA,MAAM,CAACzC,GAAD,CAAN,GAAc8N,SAAS,CAAC9M,GAAD,EAAM+M,aAAN,EAAqB/N,GAArB,CAAvB;EACA,mBAAOyC,MAAP;EACD,WAHA,EAGE6L,eAHF,CAFL;EAMD;;EACD,WAAOA,eAAP;EACD;;EACD5M,EAAAA,IAAI,CAACI,IAAI,CAACqM,MAAD,CAAL,EAAe,UAACnO,GAAD;EAAA,WAASkO,SAAS,CAAClN,GAAD,EAAMhB,GAAN,EAAWmO,MAAM,CAACnO,GAAD,CAAjB,CAAlB;EAAA,GAAf,CAAJ;EACD;;ECjED,IAAM0H,SAAO,GAAO;EAClB+G,EAAAA,CAAC,EAAE,CADe;EAElBC,EAAAA,CAAC,EAAE;EAFe,CAApB;EASO,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAAC3N,GAAD;EACjC,MAAM4N,IAAI,GAAG5N,GAAG,GAAGyH,qBAAqB,CAACzH,GAAD,CAAxB,GAAgC,CAAhD;EACA,SAAO4N;AAAI,QACP;EACEH,QAAAA,CAAC,EAAEG,IAAI,CAACC,IAAL,GAAYrO,MAAM,CAACsO,WADxB;EAEEJ,QAAAA,CAAC,EAAEE,IAAI,CAACG,GAAL,GAAWvO,MAAM,CAACwO;EAFvB;AADO,QAKPtH,SALJ;EAMD,CARM;;ECgBA,IAAMuH,WAAW,GAAG,SAAdA,WAAc,CAAmBC,MAAnB,EAA0D1F,OAA1D;eAC8BA,OAAO,IAAI;MAA1D2F,cAAAA;MAAQC,qBAAAA;MAAeC,2BAAAA;;EAC/B,MAAIC,MAAM,GAAkBF,aAA5B;;EACA,MAAIG,SAAJ;;EAEA,MAAMC,WAAW,GAAI,SAAfA,WAAe,CAACC,KAAD,EAAsBC,OAAtB;EACnB,QAAMC,IAAI,GAAGL,MAAb;EAIA,QAAMM,MAAM,GAAGV,MAAM,GAAGA,MAAM,CAACQ,OAAD,EAAUJ,MAAV,EAAkBC,SAAlB,CAAT,GAAyCG,OAA9D;EACA,QAAMG,OAAO,GAAGJ,KAAK,KAAKN,MAAM,GAAG,CAACA,MAAM,CAACQ,IAAD,EAAOC,MAAP,CAAV,GAA2BD,IAAI,KAAKC,MAA/C,CAArB;;EAEA,QAAIC,OAAO,IAAIR,mBAAf,EAAoC;EAClCC,MAAAA,MAAM,GAAGM,MAAT;EACAL,MAAAA,SAAS,GAAGI,IAAZ;EACD;;EAED,WAAO;EACLL,MAAAA,MAAM,EAANA,MADK;EAELC,MAAAA,SAAS,EAATA,SAFK;EAGLO,MAAAA,QAAQ,EAAED;EAHL,KAAP;EAKD,GAlBD;;EAoBA,SAAO;EACLE,IAAAA,OAAO,EAAEP,WADJ;EAELQ,IAAAA,QAAQ,EAAE,kBAACP,KAAD;EAAA,aAAsB;EAC9BH,QAAAA,MAAM,EAANA,MAD8B;EAE9BC,QAAAA,SAAS,EAATA,SAF8B;EAG9BO,QAAAA,QAAQ,EAAE,CAAC,CAACL;EAHkB,OAAtB;EAAA;EAFL,GAAP;EAQD,CAjCM;;;;;;;;EChCP,WAASQ,QAAT,GAAoB;EAClBC,IAAAA,cAAA,GAAiBD,QAAQ;QAAGxR,MAAM,CAAC0R,MAAP;QAAiB,UAAUhN,MAAV,EAAkB;EAC7D,aAAK,IAAItB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+K,SAAS,CAAC/M,MAA9B,EAAsCgC,CAAC,EAAvC,EAA2C;EACzC,cAAIF,MAAM,GAAGiL,SAAS,CAAC/K,CAAD,CAAtB;;EAEA,eAAK,IAAI7B,GAAT,IAAgB2B,MAAhB,EAAwB;EACtB,gBAAIlD,MAAM,CAACC,SAAP,CAAiBE,cAAjB,CAAgCM,IAAhC,CAAqCyC,MAArC,EAA6C3B,GAA7C,CAAJ,EAAuD;EACrDmD,cAAAA,MAAM,CAACnD,GAAD,CAAN,GAAc2B,MAAM,CAAC3B,GAAD,CAApB;EACD;EACF;EACF;;EAED,eAAOmD,MAAP;EACD,OAZD;;EAcA,WAAO8M,QAAQ,CAAC1N,KAAT,CAAe,IAAf,EAAqBqK,SAArB,CAAP;EACD;;EAEDsD,EAAAA,cAAA,GAAiBD,QAAjB;;;MCbQG,YAAcC,KAAdD;EAKR,IAAME,wBAAwB,GAA8B,CAAC,QAAD,EAAW,SAAX,CAA5D;EAMA,IAAMC,oBAAoB,GAAmC,CAAC,SAAD,EAAY,QAAZ,EAAsB,QAAtB,EAAgC,OAAhC,EAAyC,QAAzC,EAAmD,UAAnD,EAA+D,MAA/D,EAAuE/B,MAAvE,CAC3D,UAAC/L,MAAD,EAASR,IAAT;EACEQ,EAAAA,MAAM,CAACR,IAAD,CAAN,GAAeqO,wBAAwB,CAAC,CAAD,CAAxB,GAA8BrO,IAA9B,GAAqCqO,wBAAwB,CAAC,CAAD,CAA5E;EACA,SAAO7N,MAAP;EACD,CAJ0D,EAK3D,EAL2D,CAA7D;;EA0BA,IAAM+N,iBAAiB,GAAG,SAApBA,iBAAoB,CACxBhH,OADwB,EAExBiH,QAFwB,EAGxBC,WAHwB,EAIxBC,aAJwB,EAKxBC,QALwB;EAOxB,MAAMC,gBAAgB,GAAwB,EAA9C;;EACA,MAAMC,WAAW,kBAAWtH,OAAX,CAAjB;;EACA,MAAMiB,KAAK,GAAG3I,IAAI,CAAC2O,QAAD,CAAJ,CAAeM,MAAf,CAAsB,UAAC9N,IAAD;EAAA,WAAUrE,gBAAc,CAAC4K,OAAD,EAAUvG,IAAV,CAAxB;EAAA,GAAtB,CAAd;EAEAvB,EAAAA,IAAI,CAAC+I,KAAD,EAAQ,UAACxH,IAAD;EACV,QAAM+N,gBAAgB,GAAQnS,WAAW,CAAC6R,WAAW,CAACzN,IAAD,CAAZ,CAAX,GAAiC,EAAjC,GAAsCyN,WAAW,CAACzN,IAAD,CAA/E;EACA,QAAMgO,YAAY,GAAQzH,OAAO,CAACvG,IAAD,CAAjC;EACA,QAAMiO,aAAa,GAA8ET,QAAQ,CAACxN,IAAD,CAAzG;EACA,QAAMkO,iBAAiB,GAAGpR,aAAa,CAACmR,aAAD,CAAvC;EACA,QAAME,UAAU,GAAGR,QAAQ,GAAMA,QAAN,SAAoB,EAA/C;;EAGA,QAAIO,iBAAiB,IAAIpR,aAAa,CAACkR,YAAD,CAAtC,EAAsD;EACpD,UAAMI,eAAe,GAAGb,iBAAiB,CAACS,YAAD,EAAeC,aAAf,EAA6CF,gBAA7C,EAA+DL,aAA/D,EAA8ES,UAAU,GAAGnO,IAA3F,CAAzC;EACA4N,MAAAA,gBAAgB,CAAC5N,IAAD,CAAhB,GAAyBoO,eAAe,CAACC,UAAzC;EACAR,MAAAA,WAAW,CAAC7N,IAAD,CAAX,GAAoBoO,eAAe,CAACE,QAApC;EAEA7P,MAAAA,IAAI,CAAC,CAACoP,WAAD,EAAcD,gBAAd,CAAD,EAAkC,UAAC5P,KAAD;EACpC,YAAI8C,aAAa,CAAC9C,KAAK,CAACgC,IAAD,CAAN,CAAjB,EAAgC;EAC9B,iBAAOhC,KAAK,CAACgC,IAAD,CAAZ;EACD;EACF,OAJG,CAAJ;EAKD,KAVD,MAUO,IAAI,CAACkO,iBAAL,EAAwB;EAC7B,UAAIK,OAAO,GAAG,KAAd;EACA,UAAMC,gBAAgB,GAAkB,EAAxC;EACA,UAAMC,kBAAkB,GAAkB,EAA1C;EACA,UAAMC,gBAAgB,GAAG1S,IAAI,CAACgS,YAAD,CAA7B;EACA,UAAMW,gBAAgB,GAAyC,CAACnS,OAAO,CAACyR,aAAD,CAAR,GAC3D,CAACA,aAAD,CAD2D,GAE1DA,aAFL;EAIAxP,MAAAA,IAAI,CAACkQ,gBAAD,EAAmB,UAACC,gBAAD;EAErB,YAAIC,UAAJ;EACApQ,QAAAA,IAAI,CAAC6O,oBAAD,EAAuB,UAACtP,KAAD,EAAgBjB,GAAhB;EACzB,cAAIiB,KAAK,KAAK4Q,gBAAd,EAAgC;EAC9BC,YAAAA,UAAU,GAAG9R,GAAb;EACD;EACF,SAJG,CAAJ;EAKA,YAAM+R,YAAY,GAAGlT,WAAW,CAACiT,UAAD,CAAhC;;EACA,YAAIC,YAAY,IAAIzS,QAAQ,CAAC2R,YAAD,CAA5B,EAA4C;EAE1C,cAAMe,eAAe,GAAGH,gBAAgB,CAAC5I,KAAjB,CAAuB,GAAvB,CAAxB;EACAuI,UAAAA,OAAO,GAAG,CAAC,CAACQ,eAAe,CAAClN,IAAhB,CAAqB,UAACmN,WAAD;EAAA,mBAAiBA,WAAW,KAAKhB,YAAjC;EAAA,WAArB,CAAZ;EAGA9O,UAAAA,IAAI,CAACsP,gBAAD,EAAmBO,eAAnB,CAAJ;EACD,SAPD,MAOO;EACLR,UAAAA,OAAO,GAAGjB,oBAAoB,CAACoB,gBAAD,CAApB,KAA2CE,gBAArD;EACD;;EAGD1P,QAAAA,IAAI,CAACuP,kBAAD,EAAqBK,YAAY,GAAGxB,oBAAoB,CAAC2B,MAAxB,GAAiCJ,UAAlE,CAAJ;EAGA,eAAO,CAACN,OAAR;EACD,OAzBG,CAAJ;;EA2BA,UAAIA,OAAJ,EAAa;EACX,YAAMW,qBAAqB,GAAG1S,OAAO,CAACwR,YAAD,CAAP,IAAyBlR,aAAa,CAACkR,YAAD,CAApE;;EACA,YAAIkB,qBAAqB,GAAG/B,SAAS,CAACa,YAAD,CAAT,KAA4Bb,SAAS,CAACY,gBAAD,CAAxC,GAA6DC,YAAY,KAAKD,gBAAvG,EAAyH;EACvHH,UAAAA,gBAAgB,CAAC5N,IAAD,CAAhB,GAAyBgO,YAAzB;EACD;EACF,OALD,MAKO,IAAIN,aAAJ,EAAmB;EACxByB,QAAAA,OAAO,CAACC,IAAR;;;gBAEmBjB,UAAf;gBAA4BnO,IAA5B;;gBAAsF0O,gBAAgB,CAAC5G,WAAjB,EAAtF;;gBAA6IkG,YAA7I;;4CACyBS,kBAAkB,CAACY,IAAnB,CAAwB,IAAxB,EAA8BvH,WAA9B,EADzB,aAFJ;eAIK0G,gBAAgB,CAAC5R,MAAjB,GAA0B,CAA1B,iCAA0D4R,gBAAgB,CAACa,IAAjB,CAAsB,IAAtB,CAA1D,WAA6F,EAJlG;;EAMD;;EAED,aAAOxB,WAAW,CAAC7N,IAAD,CAAlB;EACD;EACF,GAtEG,CAAJ;EAwEA,SAAO;EACLsO,IAAAA,QAAQ,EAAET,WADL;EAELQ,IAAAA,UAAU,EAAET;EAFP,GAAP;EAID,CAvFD;;EA0GA,IAAM0B,eAAe,GAAG,SAAlBA,eAAkB,CACtB/I,OADsB,EAEtBiH,QAFsB,EAGtBC,WAHsB,EAItBC,aAJsB;EAetB,SAAOH,iBAAiB,CAAIhH,OAAJ,EAAaiH,QAAb,EAAuBC,WAAW,IAAK,EAAvC,EAAiDC,aAAa,IAAI,KAAlE,CAAxB;EACD,CAhBD;;WCrIgB6B,iBACdC;EAEA,MAAMhQ,MAAM,GAAQ;EAClBiQ,IAAAA,SAAS,EAAE,EADO;EAElBC,IAAAA,QAAQ,EAAE;EAFQ,GAApB;EAKAjR,EAAAA,IAAI,CAACI,IAAI,CAAC2Q,0BAAD,CAAL,EAAmC,UAACzS,GAAD;EACrC,QAAM6N,GAAG,GAAqE4E,0BAA0B,CAACzS,GAAD,CAAxG;;EAEA,QAAIP,OAAO,CAACoO,GAAD,CAAX,EAAkB;EAChBpL,MAAAA,MAAM,CAACiQ,SAAP,CAAiB1S,GAAjB,IAAwB6N,GAAG,CAAC,CAAD,CAA3B;EACApL,MAAAA,MAAM,CAACkQ,QAAP,CAAgB3S,GAAhB,IAAuB6N,GAAG,CAAC,CAAD,CAA1B;EACD,KAHD,MAGO;EAEL,UAAM+E,SAAS,GAAGJ,gBAAgB,CAAC3E,GAAD,CAAlC;EACApL,MAAAA,MAAM,CAACiQ,SAAP,CAAiB1S,GAAjB,IAAwB4S,SAAS,CAACF,SAAlC;EACAjQ,MAAAA,MAAM,CAACkQ,QAAP,CAAgB3S,GAAhB,IAAuB4S,SAAS,CAACD,QAAjC;EACD;EACF,GAZG,CAAJ;EAcA,SAAOlQ,MAAP;EACD;;ECtCM,IAAMoQ,oBAAoB,GAAG,gBAA7B;EACA,IAAMC,+BAA+B,GAAMD,oBAAN,kBAArC;EACA,IAAME,kCAAkC,GAAMD,+BAAN,SAAxC;EAEA,IAAME,aAAa,GAAG,SAAtB;EACA,IAAMC,gBAAgB,GAAG,YAAzB;EACA,IAAMC,iBAAiB,GAAG,aAA1B;EACA,IAAMC,gBAAgB,GAAG,YAAzB;EACA,IAAMC,uBAAuB,GAAMD,gBAAN,aAA7B;EACA,IAAME,iCAAiC,GAAMH,iBAAN,sBAAvC;EAEA,IAAMI,qBAAqB,GAAG,kBAA9B;EACA,IAAMC,2BAA2B,GAAMD,qBAAN,YAAjC;EACA,IAAME,6BAA6B,GAAMF,qBAAN,cAAnC;EACA,IAAMG,mCAAmC,GAAMD,6BAAN,YAAzC;EACA,IAAME,iCAAiC,GAAMF,6BAAN,UAAvC;EACA,IAAMG,sCAAsC,GAAMD,iCAAN,WAA5C;EAEA,IAAME,wBAAwB,GAAG,qBAAjC;;ECiBP,IAAIC,mBAAJ;MACQC,MAAeC,KAAfD;IAAKE,QAAUD,KAAVC;;EAEb,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACC,IAAD,EAAoBC,UAApB;EAC7B5N,EAAAA,cAAc,CAAC2N,IAAD,EAAOC,UAAP,CAAd;EACA,MAAMC,KAAK,GAAGjM,UAAU,CAACgM,UAAD,CAAxB;EACA,MAAME,KAAK,GAAGrM,UAAU,CAACmM,UAAD,CAAxB;EAEA,SAAO;EACL1F,IAAAA,CAAC,EAAE4F,KAAK,CAACzM,CAAN,GAAUwM,KAAK,CAACxM,CADd;EAEL8G,IAAAA,CAAC,EAAE2F,KAAK,CAAC1M,CAAN,GAAUyM,KAAK,CAACzM;EAFd,GAAP;EAID,CATD;;EAsBA,IAAM2M,oBAAoB,GAAG,SAAvBA,oBAAuB,CAAC3O,SAAD,EAAyB4O,QAAzB;EAC3B,MAAMC,SAAS,GAAG,QAAlB;EACAvG,EAAAA,KAAK,CAACtI,SAAD,EAAY;EAAE8O,IAAAA,SAAS,EAAED,SAAb;EAAwBE,IAAAA,SAAS,EAAEF,SAAnC;EAA8CG,IAAAA,SAAS,EAAE;EAAzD,GAAZ,CAAL;EACAnT,EAAAA,UAAU,CAACmE,SAAD,EAAY,CAAZ,CAAV;EAEA,MAAMiP,YAAY,GAAGjG,mBAAmB,CAAChJ,SAAD,CAAxC;EACA,MAAMkP,WAAW,GAAGlG,mBAAmB,CAAC4F,QAAD,CAAvC;EACA/S,EAAAA,UAAU,CAACmE,SAAD,EAAY,CAAC,GAAb,CAAV;EACA,MAAMmP,sBAAsB,GAAGnG,mBAAmB,CAAC4F,QAAD,CAAlD;EACA,SAAO;EAOL1S,IAAAA,CAAC,EAAE+S,YAAY,CAACnG,CAAb,KAAmBoG,WAAW,CAACpG,CAP7B;EAcLsG,IAAAA,CAAC,EAAEF,WAAW,CAACpG,CAAZ,KAAkBqG,sBAAsB,CAACrG;EAdvC,GAAP;EAgBD,CAzBD;;EA2BA,IAAMuG,cAAc,GAAG,SAAjBA,cAAiB,CAACrP,SAAD,EAAyB4O,QAAzB;EACrB9P,EAAAA,QAAQ,CAACkB,SAAD,EAAYmN,+BAAZ,CAAR;EACA,MAAMmC,mBAAmB,GAAGjN,UAAU,CAACrC,SAAD,CAAtC;EACA,MAAMuP,aAAa,GAAGlN,UAAU,CAACuM,QAAD,CAAhC;EACA,MAAMY,WAAW,GAAGzK,OAAO,CAACwK,aAAD,EAAgBD,mBAAhB,CAA3B;EAEAxQ,EAAAA,QAAQ,CAACkB,SAAD,EAAYoN,kCAAZ,CAAR;EACA,MAAMqC,mBAAmB,GAAGpN,UAAU,CAACrC,SAAD,CAAtC;EACA,MAAM0P,aAAa,GAAGrN,UAAU,CAACuM,QAAD,CAAhC;EACA,MAAMe,WAAW,GAAG5K,OAAO,CAAC2K,aAAD,EAAgBD,mBAAhB,CAA3B;EAEA,SAAOD,WAAW,IAAIG,WAAtB;EACD,CAZD;;EAcA,IAAMC,YAAY,GAAG,SAAfA,YAAe;EAGnB,MAAMC,IAAI,GAAGhV,MAAM,CAACiV,MAAP,CAAcC,UAAd,IAA4B,CAAzC;EAGA,MAAMC,IAAI,GAAGnV,MAAM,CAACiV,MAAP,CAAcG,WAAd,IAA6B,CAA1C;EACA,SAAOpV,MAAM,CAACqV,gBAAP,IAA2BL,IAAI,GAAGG,IAAzC;EACD,CARD;;EAUA,IAAMG,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,MAAD,EAAiBC,MAAjB;EACxB,MAAMC,SAAS,GAAGnC,GAAG,CAACiC,MAAD,CAArB;EACA,MAAMG,SAAS,GAAGpC,GAAG,CAACkC,MAAD,CAArB;EACA,SAAO,EAAEC,SAAS,KAAKC,SAAd,IAA2BD,SAAS,GAAG,CAAZ,KAAkBC,SAA7C,IAA0DD,SAAS,GAAG,CAAZ,KAAkBC,SAA9E,CAAP;EACD,CAJD;;EAMA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB;oBACPlR;MAATiP,iBAAAA;EACR,MAAMkC,MAAM,GAAG/O,SAAS,kBAAgBwL,oBAAhB,yBAAxB;EACA,MAAMwD,MAAM,GAAGD,MAAM,CAAC,CAAD,CAArB;EACA,MAAME,WAAW,GAAGD,MAAM,CAACjQ,UAA3B;EAEA,MAAMmQ,iBAAiB,GAA8B,IAAIxT,GAAJ,EAArD;EACA,MAAMyT,mBAAmB,GAAGvC,sBAAsB,CAACC,IAAD,EAAOmC,MAAP,CAAlD;EACA,MAAMI,sBAAsB,GAAG,KAA/B;EACA,MAAMC,yBAAyB,GAAG;EAChCjI,IAAAA,CAAC,EAAE+H,mBAAmB,CAAC/H,CAApB,KAA0B,CADG;EAEhCC,IAAAA,CAAC,EAAE8H,mBAAmB,CAAC9H,CAApB,KAA0B;EAFG,GAAlC;EAKA,MAAMiI,GAAG,GAAgB;EACvBC,IAAAA,eAAe,EAAE,KADM;EAEvBC,IAAAA,oBAAoB,EAAEL,mBAFC;EAGvBM,IAAAA,0BAA0B,EAAEJ,yBAHL;EAIvBK,IAAAA,uBAAuB,EAAEN,sBAJF;EAKvBO,IAAAA,kBAAkB,EAAE1C,oBAAoB,CAAC+B,MAAD,EAASC,WAAT,CALjB;EAMvBW,IAAAA,YAAY,EAAEjC,cAAc,CAACqB,MAAD,EAASC,WAAT,CANL;EAOvBY,IAAAA,YAPuB,wBAOV/N,QAPU;EAQrBoN,MAAAA,iBAAiB,CAAC7R,GAAlB,CAAsByE,QAAtB;EACD,KATsB;EAUvBgO,IAAAA,eAVuB,2BAUPhO,QAVO;EAWrBoN,MAAAA,iBAAiB,CAACa,MAAlB,CAAyBjO,QAAzB;EACD;EAZsB,GAAzB;EAeA7H,EAAAA,UAAU,CAAC+U,MAAD,EAAS,OAAT,CAAV;EACAxP,EAAAA,cAAc,CAACwP,MAAD,CAAd;;EAEA,MAAgC,CAACK,yBAAyB,CAACjI,CAA3B,IAAgC,CAACiI,yBAAyB,CAAChI,CAAvF,EAA2F;EAC7F,QAAI2I,IAAI,GAAGxP,UAAU,EAArB;EACA,QAAIyP,GAAG,GAAG/B,YAAY,EAAtB;EACA,QAAIgC,aAAa,GAAGf,mBAApB;EAEAhW,IAAAA,MAAM,CAACoI,gBAAP,CAAwB,QAAxB,EAAkC;EAChC,UAAI2N,iBAAiB,CAACc,IAAtB,EAA4B;EAC1B,YAAMG,OAAO,GAAG3P,UAAU,EAA1B;EACA,YAAM4P,SAAS,GAAG;EAChB9P,UAAAA,CAAC,EAAE6P,OAAO,CAAC7P,CAAR,GAAY0P,IAAI,CAAC1P,CADJ;EAEhBC,UAAAA,CAAC,EAAE4P,OAAO,CAAC5P,CAAR,GAAYyP,IAAI,CAACzP;EAFJ,SAAlB;EAKA,YAAI6P,SAAS,CAAC9P,CAAV,KAAgB,CAAhB,IAAqB8P,SAAS,CAAC7P,CAAV,KAAgB,CAAzC,EAA4C;EAE5C,YAAM8P,YAAY,GAAG;EACnB/P,UAAAA,CAAC,EAAEmM,GAAG,CAAC2D,SAAS,CAAC9P,CAAX,CADa;EAEnBC,UAAAA,CAAC,EAAEkM,GAAG,CAAC2D,SAAS,CAAC7P,CAAX;EAFa,SAArB;EAIA,YAAM+P,aAAa,GAAG;EACpBhQ,UAAAA,CAAC,EAAEmM,GAAG,CAACE,KAAK,CAACwD,OAAO,CAAC7P,CAAR,IAAa0P,IAAI,CAAC1P,CAAL,GAAS,KAAtB,CAAD,CAAN,CADc;EAEpBC,UAAAA,CAAC,EAAEkM,GAAG,CAACE,KAAK,CAACwD,OAAO,CAAC5P,CAAR,IAAayP,IAAI,CAACzP,CAAL,GAAS,KAAtB,CAAD,CAAN;EAFc,SAAtB;EAIA,YAAMgQ,MAAM,GAAGrC,YAAY,EAA3B;EACA,YAAMsC,aAAa,GAAGH,YAAY,CAAC/P,CAAb,GAAiB,CAAjB,IAAsB+P,YAAY,CAAC9P,CAAb,GAAiB,CAA7D;EACA,YAAMkQ,UAAU,GAAG,CAAChC,iBAAiB,CAAC6B,aAAa,CAAChQ,CAAf,EAAkBgQ,aAAa,CAAC/P,CAAhC,CAArC;EACA,YAAMmQ,UAAU,GAAGH,MAAM,KAAKN,GAAX,IAAkBA,GAAG,GAAG,CAA3C;EACA,YAAMU,MAAM,GAAGH,aAAa,IAAIC,UAAjB,IAA+BC,UAA9C;;EAEA,YAAIC,MAAJ,EAAY;EACV,cAAMC,gBAAgB,IAAIpE,mBAAmB,CAACgD,oBAApB,GAA2C5C,sBAAsB,CAACC,IAAD,EAAOmC,MAAP,EAA3F;EACAxP,UAAAA,cAAc,CAACwP,MAAD,CAAd;;EAEA,cAAIkB,aAAa,CAAC9I,CAAd,KAAoBwJ,gBAAgB,CAACxJ,CAArC,IAA0C8I,aAAa,CAAC7I,CAAd,KAAoBuJ,gBAAgB,CAACvJ,CAAnF,EAAsF;EACpF/L,YAAAA,OAAO,CAAC4T,iBAAD,CAAP;EACD;;EAEDgB,UAAAA,aAAa,GAAGU,gBAAhB;EACD;;EAEDZ,QAAAA,IAAI,GAAGG,OAAP;EACAF,QAAAA,GAAG,GAAGM,MAAN;EACD;EACF,KAtCD;EAuCD;;EAED,SAAOjB,GAAP;EACD,CA/ED;;EAiFO,IAAMuB,cAAc,GAAG,SAAjBA,cAAiB;EAC5B,MAAI,CAACrE,mBAAL,EAA0B;EACxBA,IAAAA,mBAAmB,GAAGsC,iBAAiB,EAAvC;EACD;;EACD,SAAOtC,mBAAP;EACD,CALM;;ECvJP,IAAMsE,MAAM,GAAG,SAATA,MAAS,CAACnX,GAAD;EACbuF,EAAAA,cAAc,CAACf,MAAM,CAACxE,GAAD,CAAP,EAAcsE,QAAQ,CAACtE,GAAD,CAAtB,CAAd;EACA6F,EAAAA,cAAc,CAAC7F,GAAD,CAAd;EACD,CAHD;;EAKO,IAAMoX,oBAAoB,GAAG,SAAvBA,oBAAuB,CAACjV,MAAD;EAClC,MAAMkV,WAAW,GAAG/X,aAAa,CAAC6C,MAAD,CAAjC;EACA,MAAMmV,WAAW,GAAsCD;AAAW,QAC7D;AAD6D,QAE9D;EACEE,QAAAA,KAAK,EAAGpV,MAAyB,CAACqV,IADpC;EAEEC,QAAAA,OAAO,EAAGtV,MAAyB,CAACA,MAFtC;EAGEuV,QAAAA,QAAQ,EAAGvV,MAAyB,CAACwV,OAHvC;EAIEC,QAAAA,SAAS,EAAGzV,MAAyB,CAAC0V,QAJxC;EAKEC,QAAAA,QAAQ,EAAG3V,MAAyB,CAAC4V;EALvC,OAFJ;;EAUA,MAAIV,WAAJ,EAAiB;EACf,QAAMM,OAAO,GAAG1R,SAAS,CAACgM,gBAAD,CAAzB;EACA,QAAM4F,QAAQ,GAAG5R,SAAS,CAACiM,iBAAD,CAA1B;EACA,QAAM6F,OAAO,GAAG9R,SAAS,CAACkM,gBAAD,CAAzB;EAEA5M,IAAAA,cAAc,CAACoS,OAAD,EAAUE,QAAV,CAAd;EACAtS,IAAAA,cAAc,CAACsS,QAAD,EAAWE,OAAX,CAAd;EAEAT,IAAAA,WAAW,CAACG,OAAZ,GAAsBtV,MAAtB;EACAmV,IAAAA,WAAW,CAACI,QAAZ,GAAuBC,OAAvB;EACAL,IAAAA,WAAW,CAACM,SAAZ,GAAwBC,QAAxB;EACAP,IAAAA,WAAW,CAACQ,QAAZ,GAAuBC,OAAvB;EACD;;QAEKN,UAA2CH,YAA3CG;MAASC,WAAkCJ,YAAlCI;MAAUE,YAAwBN,YAAxBM;MAAWE,WAAaR,YAAbQ;EACpC,MAAME,UAAU,GAAkB,EAAlC;EACA,MAAMC,UAAU,GAAG9T,EAAE,CAACsT,OAAD,EAAU,UAAV,CAArB;EACA,MAAMS,MAAM,GAAG,CAACD,UAAD,IAAe9T,EAAE,CAACsT,OAAD,EAAU,MAAV,CAAhC;;EACA,MAAMF,KAAK,GAAIU,UAAU,GAAGX,WAAW,CAACC,KAAZ,IAAqBtR,SAAS,EAAjC,GAAsCwR,OAA/D;;EACA,MAAMU,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,WAAD;EAAA,WAA+BH,UAAU,GAAIR,OAAJ,GAAsCnT,QAAQ,CAAC8T,WAAD,CAAvF;EAAA,GAA1B;;EACA,MAAMC,uBAAuB,GAAGJ,UAAU,IAAIV,KAAK,KAAKD,WAAW,CAACC,KAApE;;EAGA,MAAIc,uBAAJ,EAA6B;EAC3B1S,IAAAA,WAAW,CAAC8R,OAAD,EAAUF,KAAV,CAAX;EAEApW,IAAAA,IAAI,CAAC6W,UAAD,EAAa;EACfrS,MAAAA,WAAW,CAAC4R,KAAD,EAAQE,OAAR,CAAX;EACA5R,MAAAA,cAAc,CAAC0R,KAAD,CAAd;EACD,KAHG,CAAJ;EAID;;EAED,MAAIF,WAAJ,EAAiB;EACf9R,IAAAA,cAAc,CAACuS,QAAD,EAAYK,iBAAiB,CAACV,OAAD,CAA7B,CAAd;EACAlS,IAAAA,cAAc,CAACgS,KAAD,EAAQG,QAAR,CAAd;EAEAvW,IAAAA,IAAI,CAAC6W,UAAD,EAAa;EACfzS,MAAAA,cAAc,CAACgS,KAAD,EAAQjT,QAAQ,CAACwT,QAAD,CAAhB,CAAd;EACAjS,MAAAA,cAAc,CAAC6R,QAAD,CAAd;EACA/T,MAAAA,WAAW,CAAC4T,KAAD,EAAQvF,aAAR,CAAX;EACD,KAJG,CAAJ;EAKD,GATD,MASO;EACL,QAAMsG,oBAAoB,GAAGR,QAAQ,IAAIF,SAAZ,IAAyBF,QAAzB,IAAqCH,KAAlE;EACA,QAAMgB,aAAa,GAAG1a,WAAW,CAAC6Z,QAAD,CAAjC;EACA,QAAMc,cAAc,GAAG3a,WAAW,CAAC+Z,SAAD,CAAlC;EACA,QAAMa,aAAa,GAAG5a,WAAW,CAACia,QAAD,CAAjC;EACA,QAAMY,cAAc,GAAGP,iBAAiB,CAACG,oBAAD,CAAxC;EAEAZ,IAAAA,QAAQ,GAAGJ,WAAW,CAACI,QAAZ,GAAuBa,aAAa,GAAGtS,SAAS,EAAZ,GAAiByR,QAAhE;EACAE,IAAAA,SAAS,GAAGN,WAAW,CAACM,SAAZ,GAAwBY,cAAc,GAAGvS,SAAS,EAAZ,GAAiB2R,SAAnE;EACAE,IAAAA,QAAQ,GAAGR,WAAW,CAACQ,QAAZ,GAAuBW,aAAa,GAAGxS,SAAS,EAAZ,GAAiB6R,QAAhE;EAEAvS,IAAAA,cAAc,CAACgS,KAAD,EAAQG,QAAR,CAAd;EACAnS,IAAAA,cAAc,CAACmS,QAAQ,IAAIH,KAAb,EAAoBK,SAApB,CAAd;EACArS,IAAAA,cAAc,CAACqS,SAAD,EAAYE,QAAZ,CAAd;EAEA,QAAMM,WAAW,GAAGN,QAAQ,IAAIF,SAAhC;EACArS,IAAAA,cAAc,CAAC6S,WAAD,EAAcM,cAAd,CAAd;EAEAvX,IAAAA,IAAI,CAAC6W,UAAD,EAAa;EACf,UAAIS,aAAJ,EAAmB;EACjBtB,QAAAA,MAAM,CAACW,QAAD,CAAN;EACD;;EACD,UAAIU,cAAJ,EAAoB;EAClBrB,QAAAA,MAAM,CAACS,SAAD,CAAN;EACD;;EACD,UAAIW,aAAJ,EAAmB;EACjBpB,QAAAA,MAAM,CAACO,QAAD,CAAN;EACD;;EACD/T,MAAAA,WAAW,CAAC4T,KAAD,EAAQvF,aAAR,CAAX;EACArO,MAAAA,WAAW,CAAC+T,QAAD,EAAWzF,gBAAX,CAAX;EACAtO,MAAAA,WAAW,CAACiU,SAAD,EAAY1F,iBAAZ,CAAX;EACAvO,MAAAA,WAAW,CAACmU,QAAD,EAAW3F,gBAAX,CAAX;EACD,KAdG,CAAJ;EAeD;;EAED1O,EAAAA,QAAQ,CAAC8T,KAAD,EAAQvF,aAAR,CAAR;EACAvO,EAAAA,QAAQ,CAACiU,QAAD,EAAWzF,gBAAX,CAAR;EACAxO,EAAAA,QAAQ,CAACmU,SAAD,EAAY1F,iBAAZ,CAAR;EACAzO,EAAAA,QAAQ,CAACqU,QAAD,EAAW3F,gBAAX,CAAR;EAEA,MAAMwG,aAAa,GAAiBlB,OAAO,CAACkB,aAA5C;EACA,MAAMC,OAAO,GAAGD,aAAa,CAACzF,IAA9B;EACA,MAAM2F,GAAG,GAAGF,aAAa,CAACG,WAA1B;EACA,MAAMC,GAAG,GAAoB;EAC3BC,IAAAA,UAAU,EAAEH,GADe;EAE3BI,IAAAA,YAAY,EAAEN,aAFa;EAG3BO,IAAAA,QAAQ,EAAE1U,MAAM,CAACoU,OAAD,CAHW;EAI3BO,IAAAA,QAAQ,EAAEP,OAJiB;EAK3BQ,IAAAA,WAAW,EAAEnB,UALc;EAM3BoB,IAAAA,OAAO,EAAEnB;EANkB,GAA7B;;EASA,MAAMpa,GAAG,kBACJwZ,WADI;EAEPC,IAAAA,KAAK,EAALA;EAFO,IAAT;;0BAKgEL,cAAc;MAAtEnB,0CAAAA;MAAyBD,6CAAAA;;EACjC,MAAIC,uBAAJ,EAA6B;EAC3B5U,IAAAA,IAAI,CAAC6W,UAAD,EAAarU,WAAW,CAACwF,IAAZ,CAAiB,CAAjB,EAAoByO,SAApB,EAA+BvF,iCAA/B,CAAb,CAAJ;EACD,GAFD,MAEO,IAAIyD,0BAA0B,CAACrI,CAA3B,IAAgCqI,0BAA0B,CAACpI,CAA/D,EAAkE;EACvE,QAAI5P,GAAG,CAACga,QAAR,EAAkB;EAChB,UAAMwB,iBAAiB,GAAGrT,SAAS,CAACmM,uBAAD,CAAnC;EAEA1M,MAAAA,eAAe,CAACkS,SAAD,EAAY0B,iBAAZ,CAAf;EACAnY,MAAAA,IAAI,CAAC6W,UAAD,EAAanS,cAAc,CAACsD,IAAf,CAAoB,CAApB,EAAuBmQ,iBAAvB,CAAb,CAAJ;EAEAxb,MAAAA,GAAG,CAACyb,eAAJ,GAAsBD,iBAAtB;EACD;EACF;;EAED,SAAO;EACLE,IAAAA,UAAU,EAAE1b,GADP;EAEL2b,IAAAA,UAAU,EAAEV,GAFP;EAGLW,IAAAA,QAAQ,EAAE;EACR/X,MAAAA,OAAO,CAACqW,UAAD,CAAP;EACD;EALI,GAAP;EAOD,CAnIM;;ECxBP,IAAM2B,aAAa,GAAG,SAAhBA,aAAgB,CAAI7b,GAAJ,EAAc8b,IAAd;EAAA;MACpB9b,GAAG;MAAI8b,IAAI,CAAC3R,KAAL,CAAW,GAAX,EAAgBuF,MAAhB,CAAuB,UAACqM,CAAD,EAAI5X,IAAJ;EAAA,aAAc4X,CAAC,IAAIjc,gBAAc,CAACic,CAAD,EAAI5X,IAAJ,CAAnB,GAA+B4X,CAAC,CAAC5X,IAAD,CAAhC,GAAyClE,SAAvD;EAAA,KAAvB,EAA0FD,GAA1F;KADa;EAAA,CAAtB;;EAQO,IAAMgc,6BAA6B,GAAG,SAAhCA,6BAAgC,CAC3CC,YAD2C,EAE3CC,cAF2C;EAQ3C,SAAO,UAACC,WAAD,EAAoCC,cAApC,EAAuFzL,KAAvF;EACL,QAAM0L,WAAW,GAAyB,SAApCA,WAAoC,CAACP,IAAD;EAAA,aAAW;EACnDtL,QAAAA,MAAM,EAAEqL,aAAa,CAACI,YAAY,CAACpI,QAAd,EAAwBiI,IAAxB,CAD8B;EAEnD9K,QAAAA,QAAQ,EAAEL,KAAK,IAAIkL,aAAa,CAACO,cAAD,EAAiBN,IAAjB,CAAb,KAAwC7b;EAFR,OAAX;EAAA,KAA1C;;EAIA,WAAOic,cAAc,CAAC,CAAC,CAACvL,KAAH,EAAUwL,WAAV,EAAuBE,WAAvB,CAAd,IAAqD,EAA5D;EACD,GAND;EAOD,CAfM;;ECdP,IAAMC,4BAA4B,GAAG,EAArC;EACA,IAAMC,iCAAiC,GAAMD,4BAAN,yBAAvC;EAMO,IAAME,uBAAuB,GAAG,SAA1BA,uBAA0B,CAACP,YAAD;gCAC6BA,YAAY,CAACQ,eAAb,CAA6Bf;MAAvFjC,8BAAAA;MAAOG,iCAAAA;MAAUE,kCAAAA;MAAWE,iCAAAA;MAAUyB,wCAAAA;;uBACgDtL,WAAW;QACvG;EAAA,eAAM3G,UAAU,CAACwQ,QAAQ,IAAIF,SAAb,CAAhB;EAAA,OADuG;QAEvG;EAAEzJ,QAAAA,MAAM,EAAEzE;EAAV;MAFuG;MAAxF8Q,4CAATzL;MAAiD0L,gDAAVzL;;wBAIyCf,WAAW;QACjG,UAAC8K,GAAD;EAAA,eAAU;EACRtL,UAAAA,CAAC,EAAEsF,IAAI,CAAC2H,GAAL,CAAS,CAAT,EAAY3H,IAAI,CAACC,KAAL,CAAW,CAAC+F,GAAG,CAAC4B,kBAAJ,CAAuBhU,CAAvB,GAA2BoS,GAAG,CAAC6B,aAAJ,CAAkBjU,CAA9C,IAAmD,GAA9D,IAAqE,GAAjF,CADK;EAER+G,UAAAA,CAAC,EAAEqF,IAAI,CAAC2H,GAAL,CAAS,CAAT,EAAY3H,IAAI,CAACC,KAAL,CAAW,CAAC+F,GAAG,CAAC4B,kBAAJ,CAAuB/T,CAAvB,GAA2BmS,GAAG,CAAC6B,aAAJ,CAAkBhU,CAA9C,IAAmD,GAA9D,IAAqE,GAAjF;EAFK,SAAV;EAAA,OADiG;QAKjG;EAAEuH,QAAAA,MAAM,EAAExE;EAAV;MALiG;MAAlFkR,0CAAT9L;MAA8C+L,8CAAV9L;;EAQ5C,MAAM+L,wBAAwB,GAAG,SAA3BA,wBAA2B,CAACC,UAAD,EAAsBC,MAAtB,EAAsCC,QAAtC,EAAkEC,QAAlE;EAC/B,QAAMC,WAAW,GAAGJ,UAAU,GAAG,WAAH,GAAiB,WAA/C;EAEA,QAAMK,gBAAgB,GAAGH,QAAQ,KAAK,QAAtC;EACA,QAAMI,uBAAuB,GAAGJ,QAAQ,KAAK,gBAA7C;EACA,QAAMK,YAAY,GAAGF,gBAAgB,IAAIH,QAAQ,KAAK,QAAtD;EAGA,QAAMM,UAAU,GAAGP,MAAM,GAAG,CAAT,IAAcM,YAAjC;;EAEA,QAAIC,UAAJ,EAAgB;EACdL,MAAAA,QAAQ,CAACC,WAAD,CAAR,GAAwBF,QAAxB;EACD;;EAED,WAAO;EACLO,MAAAA,QAAQ,EAAE,CAACD,UADN;EAELE,MAAAA,SAAS,EAAEJ,uBAAuB,GAAG,QAAH,GAAc;EAF3C,KAAP;EAID,GAlBD;;EAoBA,MAAMK,oBAAoB,GAAG,SAAvBA,oBAAuB;MAC3BC,iBAD2B;MAE3BC,4BAF2B;MAG3BC,cAH2B;MAI3BC,gBAJ2B;MAK3BC;IAL2B;4BAO2D9E,cAAc;QAA5FrB,uCAAAA;QAAsBC,6CAAAA;QAA4BC,0CAAAA;;UAC/CkG,YAA4BnG,2BAA/BrI;QAAiByO,YAAcpG,2BAAjBpI;EACtB,QAAMyO,OAAO,GAAGJ,gBAAgB,CAACtI,SAAjB,KAA+B,QAA/C;EACA,QAAM2I,OAAO,GAAGL,gBAAgB,CAACrI,SAAjB,KAA+B,QAA/C;EACA,QAAM2I,mBAAmB,GAAGP,cAAc,GAAG,YAAH,GAAkB,aAA5D;EACA,QAAMQ,mBAAmB,GAAGR,cAAc,GAAG,YAAH,GAAkB,aAA5D;EACA,QAAMS,kBAAkB,GAAGzE,QAAQ,IAAI,CAAC+D,4BAAb,GAA4CzB,4BAA5C,GAA2E,CAAtG;EACA,QAAMoC,oBAAoB,GAAG;EAC3B/O,MAAAA,CAAC,EAAEwO,SAAS,GAAGM,kBAAH,GAAwB1G,oBAAoB,CAACpI,CAD9B;EAE3BC,MAAAA,CAAC,EAAEwO,SAAS,GAAGK,kBAAH,GAAwB1G,oBAAoB,CAACnI;EAF9B,KAA7B;;EAKA,QAAI,CAACqI,uBAAL,EAA8B;EAC5B,UAAIoG,OAAJ,EAAa;EACXJ,QAAAA,gBAAgB,CAACU,YAAjB,GAAgC,CAACD,oBAAoB,CAAC/O,CAAtD;EAEAuO,QAAAA,eAAe,CAACU,YAAhB,GAA+BT,SAAS,IAAIM,kBAAb,GAAkClC,iCAAlC,GAAsE,EAArG;EACD;;EACD,UAAI+B,OAAJ,EAAa;EACXL,QAAAA,gBAAgB,CAACY,QAAjB,oBAA2CH,oBAAoB,CAAC9O,CAAhE;EACAqO,QAAAA,gBAAgB,CAACM,mBAAD,CAAhB,GAAwC,CAACG,oBAAoB,CAAC9O,CAA9D;EAEAsO,QAAAA,eAAe,CAACM,mBAAD,CAAf,GAAuCJ,SAAS,IAAIK,kBAAb,GAAkClC,iCAAlC,GAAsE,EAA7G;EACD;;EAED,UAAId,eAAJ,EAAqB;EACnBtM,QAAAA,KAAK,CAACsM,eAAD,EAAkB;EACrBqD,UAAAA,KAAK,EAAER,OAAO,IAAI,CAACP,4BAAZ,GAA2CU,kBAAkB,GAAGX,iBAAiB,CAACjV,CAAlF,GAAsF,EADxE;EAErBkW,UAAAA,MAAM,EAAEV,OAAO,IAAI,CAACN,4BAAZ,GAA2CU,kBAAkB,GAAGX,iBAAiB,CAAChV,CAAlF,GAAsF;EAFzE,SAAlB,CAAL;EAID;EACF;;EAED,WAAO;EACLkW,MAAAA,qBAAqB,EAAEN,oBADlB;EAELO,MAAAA,OAAO,EAAE;EACPtP,QAAAA,CAAC,EAAE0O,OADI;EAEPzO,QAAAA,CAAC,EAAE0O;EAFI;EAFJ,KAAP;EAOD,GA/CD;;EAiDA,MAAMY,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,eAAD,EAA2Bd,OAA3B,EAA6Ce,qBAA7C;EAC1B,QAAMC,UAAU,GAAG3c,UAAU,CAACoX,SAAD,CAA7B;EACA,QAAMwF,SAAS,GAAG3c,SAAS,CAACmX,SAAD,CAA3B;EAEA3K,IAAAA,KAAK,CAAC2K,SAAD,EAAY;EACfyF,MAAAA,SAAS,EAAE;EADI,KAAZ,CAAL;;EAIA,QAAIJ,eAAJ,EAAqB;EACnBhQ,MAAAA,KAAK,CAAC2K,SAAD,EAAY;EACfyF,QAAAA,SAAS,EAAE9F,KAAK,CAAClQ,YAAN,IAAsB8U,OAAO,GAAGe,qBAAH,GAA2B,CAAxD;EADI,OAAZ,CAAL;EAGD;;EAED1c,IAAAA,UAAU,CAACoX,SAAD,EAAYuF,UAAZ,CAAV;EACA1c,IAAAA,SAAS,CAACmX,SAAD,EAAYwF,SAAZ,CAAT;EACD,GAhBD;;EAkBA,SAAOtD,6BAA6B,CAACC,YAAD,EAAe,UAACtL,KAAD,EAAQwL,WAAR,EAAqBE,WAArB;UACzCmD,kBAAqFrD,YAArFqD;QAAiBC,mBAAoEtD,YAApEsD;QAAkBC,eAAkDvD,YAAlDuD;QAAcC,gBAAoCxD,YAApCwD;QAAeC,mBAAqBzD,YAArByD;;6BACMxG,cAAc;QAApFjB,gCAAAA;QAAcF,2CAAAA;QAAyBD,8CAAAA;;yBACuDqE,WAAW,CAC/G,+BAD+G;QAAjGwD,kDAARrP;QAAsDsP,mDAAV9O;;EAGpD,QAAM+O,iBAAiB,GAAG,CAAC5H,YAAD,KAAkBuH,YAAY,IAAIE,gBAAhB,IAAoCD,aAApC,IAAqDG,mCAAvE,CAA1B;EACA,QAAM/B,4BAA4B,GAAG8B,kCAAkC,IAAI7H,0BAA0B,CAACrI,CAAjE,IAAsEqI,0BAA0B,CAACpI,CAAtI;EACA,QAAIoQ,kBAAkB,GAA4BhD,6BAA6B,EAA/E;EACA,QAAIiD,sBAAsB,GAA4BtD,gCAAgC,EAAtF;;EAEA,QAAImD,mCAAmC,IAAI7H,uBAA3C,EAAoE;EAClE,UAAI8F,4BAAJ,EAAkC;EAChClY,QAAAA,WAAW,CAACiU,SAAD,EAAYvF,iCAAZ,CAAX;EACD,OAFD,MAEO;EACL5O,QAAAA,QAAQ,CAACmU,SAAD,EAAYvF,iCAAZ,CAAR;EACD;EACF;;EAED,QAAImL,YAAY,IAAIE,gBAApB,EAAsC;EACpC,UAAMM,kBAAkB,GAAGhX,UAAU,CAAC0Q,QAAD,CAArC;EACA,UAAMuG,iBAAiB,GAAGjX,UAAU,CAAC8Q,QAAQ,IAAIF,SAAb,CAApC;EACA,UAAMsG,wBAAwB,GAAGlX,UAAU,CAACuS,eAAD,CAA3C;EAEAwE,MAAAA,sBAAsB,GAAGvD,4BAA4B,CAAC/L,KAAD,CAArD;EALoC,kCAMEsP,sBANF;EAAA,QAMpBnC,kBANoB,yBAM5BtN,MAN4B;EAOpCwP,MAAAA,kBAAkB,GAAGjD,yBAAyB,CAACpM,KAAD,EAAQ;EACpDkM,QAAAA,kBAAkB,EAAE;EAClBhU,UAAAA,CAAC,EAAEoM,IAAI,CAAC2H,GAAL,CAASkB,kBAAkB,CAACjV,CAA5B,EAA+BuX,wBAAwB,CAACvX,CAAxD,CADe;EAElBC,UAAAA,CAAC,EAAEmM,IAAI,CAAC2H,GAAL,CAASkB,kBAAkB,CAAChV,CAA5B,EAA+BsX,wBAAwB,CAACtX,CAAxD;EAFe,SADgC;EAKpDgU,QAAAA,aAAa,EAAE;EACbjU,UAAAA,CAAC,EAAEqX,kBAAkB,CAACrX,CAAnB,GAAuBoM,IAAI,CAAC2H,GAAL,CAAS,CAAT,EAAYuD,iBAAiB,CAACtX,CAAlB,GAAsBiV,kBAAkB,CAACjV,CAArD,CADb;EAEbC,UAAAA,CAAC,EAAEoX,kBAAkB,CAACpX,CAAnB,GAAuBmM,IAAI,CAAC2H,GAAL,CAAS,CAAT,EAAYuD,iBAAiB,CAACrX,CAAlB,GAAsBgV,kBAAkB,CAAChV,CAArD;EAFb;EALqC,OAAR,CAA9C;EAUD;;UAEekV,iBAA+CwB,gBAAvDhP;QAAkC6P,mBAAqBb,gBAA/BxO;mCAC0CiP;QAA1DnC,2CAARtN;QAAqC8P,kDAAVtP;gCACiCgP;QAApDO,qCAAR/P;QAAkCgQ,4CAAVxP;;0BACwBqL,WAAW,CAGhE,UAHgE;QAAnDoE,yBAARjQ;QAA4BkQ,gCAAV1P;;EAI1B,QAAM2P,eAAe,GAAGN,gBAAgB,IAAI,CAACpI,uBAA7C;;EAEA;QACEqI,wBAAwB;QACxBE,qBADA;QAEAE,eAFA;QAGAZ,mCAHA;QAIAa,eAJA;QAKAZ;MANF,EAOE;EACA,UAAMa,aAAa,GAAgB;EACjChL,QAAAA,SAAS,EAAE,EADsB;EAEjCD,QAAAA,SAAS,EAAE,EAFsB;EAGjCkL,QAAAA,SAAS,EAAE,EAHsB;EAIjCC,QAAAA,WAAW,EAAE,EAJoB;EAKjCnC,QAAAA,YAAY,EAAE,EALmB;EAMjCoC,QAAAA,UAAU,EAAE,EANqB;EAOjClC,QAAAA,QAAQ,EAAE;EAPuB,OAAnC;EASA,UAAMmC,YAAY,GAAgB;EAChCC,QAAAA,SAAS,EAAE,EADqB;EAEhCC,QAAAA,WAAW,EAAE,EAFmB;EAGhCtC,QAAAA,YAAY,EAAE,EAHkB;EAIhCuC,QAAAA,UAAU,EAAE;EAJoB,OAAlC;;EAVA,kCAiB4DlE,wBAAwB,CAAC,IAAD,EAAOsD,cAAe,CAAC5Q,CAAvB,EAA0B8Q,QAAQ,CAAC9Q,CAAnC,EAAsCiR,aAAtC,CAjBpF;EAAA,QAiBkBQ,QAjBlB,yBAiBQzD,QAjBR;EAAA,QAiBuC0D,gBAjBvC,yBAiB4BzD,SAjB5B;;EAAA,mCAkB4DX,wBAAwB,CAAC,KAAD,EAAQsD,cAAe,CAAC3Q,CAAxB,EAA2B6Q,QAAQ,CAAC7Q,CAApC,EAAuCgR,aAAvC,CAlBpF;EAAA,QAkBkBU,QAlBlB,0BAkBQ3D,QAlBR;EAAA,QAkBuC4D,gBAlBvC,0BAkB4B3D,SAlB5B;;EAoBA,UAAIwD,QAAQ,IAAI,CAACE,QAAjB,EAA2B;EACzBV,QAAAA,aAAa,CAACjL,SAAd,GAA0B0L,gBAA1B;EACD;;EACD,UAAIC,QAAQ,IAAI,CAACF,QAAjB,EAA2B;EACzBR,QAAAA,aAAa,CAAChL,SAAd,GAA0B2L,gBAA1B;EACD;;EAzBD,kCA2B2C1D,oBAAoB;YAC7DC,iBAD6D;YAE7DC,4BAF6D;YAG7DC,cAH6D;YAI7D4C,aAJ6D;YAK7DI;UAL6D,CA3B/D;EAAA,QA2BQhC,qBA3BR,yBA2BQA,qBA3BR;EAAA,QA2B+BC,OA3B/B,yBA2B+BA,OA3B/B;;EAmCA,UAAIc,iBAAJ,EAAuB;EACrBb,QAAAA,mBAAmB,CAAC,CAAC,CAACO,gBAAgB,CAACjP,MAApB,EAA4ByO,OAAO,CAACtP,CAApC,EAAuCqP,qBAAqB,CAACrP,CAA7D,CAAnB;EACD;;EAODR,MAAAA,KAAK,CAAC2K,SAAD,EAAY8G,aAAZ,CAAL;EACAzR,MAAAA,KAAK,CAAC6K,QAAD,EAAWgH,YAAX,CAAL;EACD;EACF,GArGmC,CAApC;EAsGD,CA3MM;;ECuBP,IAAMQ,uBAAuB,GAAG,gBAAhC;EACA,IAAMC,eAAe,GAAG,QAAxB;EACA,IAAMC,YAAY,GAAG,OAArB;EACA,IAAMC,iBAAiB,GAAG;EACxB9L,EAAAA,SAAS,EAAE,CAAC,KAAD;EADa,CAA1B;;EAIA,IAAMmI,cAAc,GAAG,SAAjBA,cAAiB,CAAC9b,GAAD;EACrB,MAAI0f,KAAK,GAAG,KAAZ;EACA,MAAMvS,MAAM,GAAGF,KAAK,CAACjN,GAAD,EAAM,CAAC,WAAD,CAAN,CAApB;EACAU,EAAAA,IAAI,CAACyM,MAAD,EAAS,UAAClN,KAAD,EAAQjB,GAAR;EACX0gB,IAAAA,KAAK,GAAGA,KAAK,IAAI3e,OAAO,CAAC0e,iBAAiB,CAACzgB,GAAD,CAAlB,EAAyBiB,KAAzB,CAAP,GAAyC,CAAC,CAA3D;EACD,GAFG,CAAJ;EAGA,SAAOyf,KAAP;EACD,CAPD;;EAQA,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,CAAC/R,IAAD;EAAA,SAA4BA,IAAI,KAAKA,IAAI,CAACiP,MAAL,IAAejP,IAAI,CAACgP,KAAzB,CAAhC;EAAA,CAA7B;;EAEO,IAAMgD,kBAAkB,GAAG,SAArBA,kBAAqB,CAChCzd,MADgC,EAEhC0d,qBAFgC,EAGhCrX,OAHgC;eAK6DA,OAAO,IAAI;6BAAhGsX;MAAYC,sDAAyB;0BAAOC;MAASC,gDAAsB;;0BACjC/I,cAAc;MAApCgJ,oCAApBlK;;EACR,MAAMmK,YAAY,GAAG9Z,SAAS,kBAAgBiM,qBAAhB,sBAAsDE,6BAAtD,oBAA9B;EACA,MAAM4N,YAAY,GAAGD,YAAY,CAAC,CAAD,CAAjC;EACA,MAAME,eAAe,GAAGD,YAAY,CAAChb,UAArC;;uBAC0D6I,WAAW,CAAmC,CAAnC,EAAsC;EACzGI,MAAAA,mBAAmB,EAAE,IADoF;EAEzGF,MAAAA,MAAM,EAAE,gBAACmS,OAAD,EAAU1R,MAAV;EAAA,eACN,EACE,CAAC0R,OAAD,KAEC,CAACX,oBAAoB,CAACW,OAAD,CAArB,IAAkCX,oBAAoB,CAAC/Q,MAAD,CAHzD,EADM;EAAA;EAFiG,KAAtC;MAApD2R,oDAATxR;;EASR,MAAMyR,0BAA0B,GAAG,SAA7BA,0BAA6B,CAACC,kBAAD;EACjC,QAAMC,iBAAiB,GAAGD,kBAAkB,IAAIliB,SAAS,CAAEkiB,kBAA2C,CAACnS,MAA9C,CAAzD;EAEA,QAAIqS,IAAI,GAAG,KAAX;;EAIA,QAAIliB,OAAO,CAACgiB,kBAAD,CAAP,IAA+BA,kBAAkB,CAAC5hB,MAAnB,GAA4B,CAA/D,EAAkE;EAAA,kCACxB0hB,oCAAoC,CAAC,CAAD,EAAIE,kBAAkB,CAACG,GAAnB,GAA0BC,WAA9B,CADZ;EAAA,QACxDtS,SADwD,yBACxDA,SADwD;EAAA,QAC7CD,MAD6C,yBAC7CA,MAD6C;EAAA,QACrCQ,QADqC,yBACrCA,QADqC;;EAEhE6R,MAAAA,IAAI,GAAG,CAACpS,SAAD,IAAc,CAACoR,oBAAoB,CAACrR,MAAD,CAA1C;EAED,KAJD,MAMK,IAAIoS,iBAAJ,EAAuB;EAC1BI,MAAqBL,kBAA2C,CAAC3R,QAAjE;EACD;;EAED,QAAIiR,sBAAJ,EAA4B;EAC1B,UAAMgB,GAAG,GAAGL,iBAAiB,GAAID,kBAA2C,CAACnS,MAAhD,GAAyDwN,cAAc,CAACsE,YAAD,CAApG;EACA5f,MAAAA,UAAU,CAAC4f,YAAD,EAAeW,GAAG,IAAIb,iBAAiB,CAACnM,CAAlB,GAAsB,CAACyL,YAAvB,GAAsCU,iBAAiB,CAACrf,CAAlB,GAAsB,CAAtB,GAA0B2e,aAApE,GAAoFA,YAAtG,CAAV;EACA/e,MAAAA,SAAS,CAAC2f,YAAD,EAAeZ,YAAf,CAAT;EACD;;EAED,QAAI,CAACmB,IAAL,EAAW;EACTd,MAAAA,qBAAqB,CAACa,iBAAiB,GAAID,kBAAJ,GAAkD1iB,SAApE,CAArB;EACD;EACF,GA1BD;;EA2BA,MAAMgL,YAAY,GAAmB,EAArC;EACA,MAAIiY,cAAc,GAAoCf,mBAAmB,GAAGO,0BAAH,GAAgC,KAAzG;EACA,MAAIS,mBAAJ;;EAEA,MAAI1W,yBAAJ,EAA+B;EAC7B,QAAM2W,sBAAsB,GAAG,IAAI3W,yBAAJ,CAA8BiW,0BAA9B,CAA/B;EACAU,IAAAA,sBAAsB,CAACC,OAAvB,CAA+Bd,eAA/B;EACAlf,IAAAA,IAAI,CAAC4H,YAAD,EAAe;EAAA,aAAMmY,sBAAsB,CAACE,UAAvB,EAAN;EAAA,KAAf,CAAJ;EACD,GAJD,MAIO;EACL,QAAMC,uBAAuB,GAAGhb,SAAS;;UACxBqM,iCADwB;;UACoCA,iCADpC;;UACsFC,sCADtF;;UACyJD,iCADzJ;;UAC2MC,sCAD3M;;OAAzC;EAGApN,IAAAA,cAAc,CAAC8a,eAAD,EAAkBgB,uBAAlB,CAAd;EACA5d,IAAAA,QAAQ,CAAC4c,eAAD,EAAkB5N,mCAAlB,CAAR;EACA,QAAM6O,2BAA2B,GAAGD,uBAAuB,CAAC,CAAD,CAA3D;EACA,QAAME,aAAa,GAAGD,2BAA2B,CAACE,SAAlD;EACA,QAAMC,aAAa,GAAGH,2BAA2B,CAAClc,UAAlD;EACA,QAAMsc,kBAAkB,GAAGD,aAAH,oBAAGA,aAAa,CAAErc,UAA1C;EAEA,QAAIuc,SAAS,GAAG3a,UAAU,CAACqZ,eAAD,CAA1B;EACA,QAAIuB,QAAQ,GAAGD,SAAf;EACA,QAAIE,OAAO,GAAG,KAAd;EACA,QAAIC,KAAJ;;EAEA,QAAMC,KAAK,GAAG,SAARA,KAAQ;EACZvhB,MAAAA,UAAU,CAACihB,aAAD,EAAgBjC,YAAhB,CAAV;EACA/e,MAAAA,SAAS,CAACghB,aAAD,EAAgBjC,YAAhB,CAAT;EACAhf,MAAAA,UAAU,CAAC+gB,aAAD,EAAgB/B,YAAhB,CAAV;EACA/e,MAAAA,SAAS,CAAC8gB,aAAD,EAAgB/B,YAAhB,CAAT;EACD,KALD;;EAMA,QAAMwC,SAAS,GAAG,SAAZA,SAAY;EAChBF,MAAAA,KAAK,GAAG,CAAR;;EACA,UAAID,OAAJ,EAAa;EACXF,QAAAA,SAAS,GAAGC,QAAZ;EACApB,QAAAA,0BAA0B;EAC3B;EACF,KAND;;EAOA,QAAMyB,QAAQ,GAAG,SAAXA,QAAW,CAACC,WAAD;EACfN,MAAAA,QAAQ,GAAG5a,UAAU,CAACqZ,eAAD,CAArB;EACAwB,MAAAA,OAAO,GAAG,CAACK,WAAD,IAAgB,CAACxY,OAAO,CAACkY,QAAD,EAAWD,SAAX,CAAlC;;EAEA,UAAIO,WAAW,IAAIL,OAAf,IAA0B,CAACC,KAA/B,EAAsC;EACpCtX,QAAAA,GAAI,CAACsX,KAAD,CAAJ;EACAA,QAAAA,KAAK,GAAGrX,GAAI,CAACuX,SAAD,CAAZ;EACD,OAHD,MAGO,IAAI,CAACE,WAAL,EAAkB;EACvBF,QAAAA,SAAS;EACV;;EAEDD,MAAAA,KAAK;;EAEL,UAAIG,WAAJ,EAAiB;EACf7Y,QAAAA,cAAc,CAAC6Y,WAAD,CAAd;EACA9Y,QAAAA,eAAe,CAAC8Y,WAAD,CAAf;EACD;;EACD,aAAO,KAAP;EACD,KAlBD;;EAoBA/gB,IAAAA,IAAI,CAAC4H,YAAD,EAAe,CAACR,EAAE,CAACkZ,aAAD,EAAgBlC,eAAhB,EAAiC0C,QAAjC,CAAH,EAA+C1Z,EAAE,CAACgZ,aAAD,EAAgBhC,eAAhB,EAAiC0C,QAAjC,CAAjD,CAAf,CAAJ;EAGAhV,IAAAA,KAAK,CAACyU,kBAAD,EAAqB;EACxB9E,MAAAA,KAAK,EAAE4C,YADiB;EAExB3C,MAAAA,MAAM,EAAE2C;EAFgB,KAArB,CAAL;EAIAuC,IAAAA,KAAK;EACLf,IAAAA,cAAc,GAAGf;AAAmB,UAAG;EAAA,iBAAMgC,QAAQ,EAAd;EAAA;AAAH,UAAsBF,KAA1D;EACD;;EAED,MAAIhC,sBAAJ,EAA4B;EAC1BkB,IAAAA,mBAAmB,GAAGhT,WAAW,CAAC;EAAA,aAAM6N,cAAc,CAACsE,YAAD,CAApB;EAAA,KAAD,CAAjC;EAD0B,+BAEqBa,mBAFrB;EAAA,MAETkB,yBAFS,wBAElBpT,OAFkB;EAG1B5N,IAAAA,IAAI;QACF4H,YADE;QAEFR,EAAE,CAAC6X,YAAD,EAAeb,eAAf,EAAgC,UAAC6C,KAAD;EAChC,YAAMC,yBAAyB,GAAGF,yBAAyB,EAA3D;cACQ7T,SAAqB+T,0BAArB/T;YAAQQ,WAAauT,0BAAbvT;;EAChB,YAAIA,QAAJ,EAAc;EACZ,cAAIR,MAAJ,EAAY;EACVrB,YAAAA,KAAK,CAACoT,eAAD,EAAkB;EAAExS,cAAAA,IAAI,EAAE,MAAR;EAAgByU,cAAAA,KAAK,EAAE;EAAvB,aAAlB,CAAL;EACD,WAFD,MAEO;EACLrV,YAAAA,KAAK,CAACoT,eAAD,EAAkB;EAAExS,cAAAA,IAAI,EAAE,CAAR;EAAWyU,cAAAA,KAAK,EAAE;EAAlB,aAAlB,CAAL;EACD;;EACD9B,UAAAA,0BAA0B,CAAC6B,yBAAD,CAA1B;EACD;;EAEDhZ,QAAAA,cAAc,CAAC+Y,KAAD,CAAd;EACAhZ,QAAAA,eAAe,CAACgZ,KAAD,CAAf;EACA,eAAO,KAAP;EACD,OAfC;MAFA,CAAJ;EAmBD;;EAGD,MAAIpB,cAAJ,EAAoB;EAClBvd,IAAAA,QAAQ,CAAC2c,YAAD,EAAe7N,2BAAf,CAAR;EACApR,IAAAA,IAAI;QACF4H,YADE;QAEFR,EAAE,CAAC6X,YAAD,EAAed,uBAAf,EAAwC0B,cAAxC,EAAwD;EAExDlY,QAAAA,KAAK,EAAE,CAAC,CAACyB;EAF+C,OAAxD;MAFA,CAAJ;EAOD;;EAED7E,EAAAA,eAAe,CAACvD,MAAD,EAASie,YAAT,CAAf;EAEA,SAAO;EACL1G,IAAAA,QADK;EAEH/X,MAAAA,OAAO,CAACoH,YAAD,CAAP;EACAlD,MAAAA,cAAc,CAACua,YAAD,CAAd;EACD,KAJI;EAKLmC,IAAAA,sBALK,kCAKkB9T,KALlB;EAMH,aAAO;EACL6O,QAAAA,eAAe,EAAE2D;AAAmB,cAChCA,mBAAmB,CAACjS,QAApB,CAA6BP,KAA7B;AADgC,cAEhC;EACEH,cAAAA,MAAM,EAAE,KADV;EAEEC,cAAAA,SAAS,EAAE,KAFb;EAGEO,cAAAA,QAAQ,EAAE;EAHZ;EAHC,OAAP;EASD;EAfI,GAAP;EAiBD,CAzKM;;EC7CA,IAAM0T,qBAAqB,GAAG,SAAxBA,qBAAwB,CACnCrgB,MADmC,EAEnCsgB,wBAFmC;EAInC,MAAMC,eAAe,GAAGrc,SAAS,kBAAgBuM,wBAAhB,cAAT,CAA6D,CAA7D,CAAxB;EACA,MAAM7J,YAAY,GAAmB,EAArC;;uBAC0FkF,WAAW;QAInG,UAAC0U,aAAD;EAAA,eACGA,aAA6B,CAAC/b,CAA9B,KAAoC,CAApC,IACA+b,aAA4C,CAACC,cAD7C,IAEAD,aAA4C,CAACE,iBAA7C,GAAiE,CAHpE;EAAA,OAJmG;QAQnG;EACEzU,QAAAA,aAAa,EAAE;EADjB;MARmG;MAApF0U,0CAAT/T;MAA+CgU,8CAAV/T;;EAa7C,MAAI1E,+BAAJ,EAAqC;EACnC,QAAM0Y,4BAA4B,GAAyB,IAAI1Y,+BAAJ;QACzD,UAAC2Y,OAAD;EACE,YAAIA,OAAO,IAAIA,OAAO,CAACpkB,MAAR,GAAiB,CAAhC,EAAmC;EACjC,cAAMqkB,IAAI,GAAGD,OAAO,CAACrC,GAAR,EAAb;;EACA,cAAIsC,IAAJ,EAAU;EACR,gBAAMjG,eAAe,GAAG6F,0BAA0B,CAAC,CAAD,EAAII,IAAJ,CAAlD;;EAEA,gBAAIjG,eAAe,CAACnO,QAApB,EAA8B;EAC5B2T,cAAAA,wBAAwB,CAACxF,eAAD,CAAxB;EACD;EACF;EACF;EACF,OAZwD;QAazD;EAAEkG,QAAAA,IAAI,EAAEhhB;EAAR;MAbyD,CAA3D;EAeA6gB,IAAAA,4BAA4B,CAAC7B,OAA7B,CAAqCuB,eAArC;EACAvhB,IAAAA,IAAI,CAAC4H,YAAD,EAAe;EAAA,aAAMia,4BAA4B,CAAC5B,UAA7B,EAAN;EAAA,KAAf,CAAJ;EACD,GAlBD,MAkBO;EACLjgB,IAAAA,IAAI;QACF4H,YADE;QAEF6W,kBAAkB,CAAC8C,eAAD,EAAkB;EAClC,YAAMU,OAAO,GAAGpc,UAAU,CAAC0b,eAAD,CAA1B;EACA,YAAMW,oBAAoB,GAAGP,0BAA0B,CAAC,CAAD,EAAIM,OAAJ,CAAvD;;EAEA,YAAIC,oBAAoB,CAACvU,QAAzB,EAAmC;EACjC2T,UAAAA,wBAAwB,CAACY,oBAAD,CAAxB;EACD;EACF,OAPiB,CAAlB,CAOG3J;MATD,CAAJ;EAWD;;EAEDhU,EAAAA,eAAe,CAACvD,MAAD,EAASugB,eAAT,CAAf;EAEA,SAAO;EACLhJ,IAAAA,QADK;EAEH/X,MAAAA,OAAO,CAACoH,YAAD,CAAP;EACAlD,MAAAA,cAAc,CAAC6c,eAAD,CAAd;EACD,KAJI;EAKLH,IAAAA,sBALK,kCAKkB9T,KALlB;EAMH,aAAO;EACL8O,QAAAA,gBAAgB,EAAEwF,8BAA8B,CAACtU,KAAD;EAD3C,OAAP;EAGD;EATI,GAAP;EAWD,CAhEM;;EC8BP,IAAM6U,wBAAwB,GAAG,SAA3BA,wBAA2B,CAC/BnhB,MAD+B,EAE/BohB,kBAF+B,EAG/BC,GAH+B,EAI/B5iB,QAJ+B;EAM/B,MAAI6iB,qBAAJ;;EACA,MAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAC1jB,GAAD,EAAYqI,SAAZ;EACf,QAAMsb,KAAK,GAAGH,GAAG,CAAC1b,GAAJ,CAAQ9H,GAAR,CAAd;EACA,QAAM4jB,QAAQ,GAAG/lB,WAAW,CAAC8lB,KAAD,CAA5B;;EACA,QAAME,aAAa,GAAG,SAAhBA,aAAgB;EACpBL,MAAAA,GAAG,CAACnY,GAAJ,CAAQrL,GAAR,EAAaqI,SAAb;EACAE,MAAAA,EAAE,CAACvI,GAAD,EAAMqI,SAAN,EAAiBzH,QAAjB,CAAF;EACD,KAHD;;EAKA,QAAI,CAACgjB,QAAD,IAAavb,SAAS,KAAKsb,KAA/B,EAAsC;EACpCzb,MAAAA,GAAG,CAAClI,GAAD,EAAM2jB,KAAN,EAAc/iB,QAAd,CAAH;EACAijB,MAAAA,aAAa;EACd,KAHD,MAGO,IAAID,QAAJ,EAAc;EACnBC,MAAAA,aAAa;EACd;EACF,GAdD;;EAeA,MAAMnK,QAAQ,GAAG,SAAXA,QAAW;EACf8J,IAAAA,GAAG,CAACxhB,OAAJ,CAAY,UAACqG,SAAD,EAAoBrI,GAApB;EACVkI,MAAAA,GAAG,CAAClI,GAAD,EAAMqI,SAAN,EAAiBzH,QAAjB,CAAH;EACD,KAFD;EAGA4iB,IAAAA,GAAG,CAACM,KAAJ;EACD,GALD;;EAMA,MAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACC,WAAD;EACtB,QAAIP,qBAAJ,EAA2B;EACzB,UAAMQ,YAAY,GAAGR,qBAAqB,CAACjW,MAAtB,CAAsD,UAACxM,GAAD,EAAMC,IAAN;EACzE,YAAIA,IAAJ,EAAU;EACR,cAAM8C,QAAQ,GAAG9C,IAAI,CAAC,CAAD,CAArB;EACA,cAAMoH,SAAS,GAAGpH,IAAI,CAAC,CAAD,CAAtB;EACA,cAAMijB,QAAQ,GAAG7b,SAAS,IAAItE,QAAb,KAA0BigB,WAAW,GAAGA,WAAW,CAACjgB,QAAD,CAAd,GAA2BD,IAAI,CAACC,QAAD,EAAW5B,MAAX,CAApE,CAAjB;;EAEA,cAAI+hB,QAAJ,EAAc;EACZ/iB,YAAAA,IAAI,CAACH,GAAD,EAAM,CAACkjB,QAAD,EAAW1lB,UAAU,CAAC6J,SAAD,CAAV,GAAwBA,SAAS,CAAC6b,QAAD,CAAjC,GAA8C7b,SAAzD,CAAN,EAA4E,IAA5E,CAAJ;EACD;EACF;;EACD,eAAOrH,GAAP;EACD,OAXoB,EAWlB,EAXkB,CAArB;EAaAN,MAAAA,IAAI,CAACujB,YAAD,EAAe,UAAChjB,IAAD;EACjB,YAAMijB,QAAQ,GAAGjjB,IAAI,CAAC,CAAD,CAArB;EACA,YAAMoH,SAAS,GAAGpH,IAAI,CAAC,CAAD,CAAtB;EAEAP,QAAAA,IAAI,CAACwjB,QAAD,EAAW,UAAClkB,GAAD;EACb0jB,UAAAA,QAAQ,CAAC1jB,GAAD,EAAMqI,SAAN,CAAR;EACD,SAFG,CAAJ;EAGD,OAPG,CAAJ;EAQD;EACF,GAxBD;;EAyBA,MAAM0G,OAAO,GAAG,SAAVA,OAAU,CAACoV,qBAAD;EACdV,IAAAA,qBAAqB,GAAGU,qBAAxB;;EACAzK,IAAAA,QAAQ;;EACRqK,IAAAA,eAAe;EAChB,GAJD;;EAMA,MAAIR,kBAAJ,EAAwB;EACtBxU,IAAAA,OAAO,CAACwU,kBAAD,CAAP;EACD;;EAED,SAAO;EACL7J,IAAAA,QAAQ,EAARA,QADK;EAELqK,IAAAA,eAAe,EAAfA,eAFK;EAGLhV,IAAAA,OAAO,EAAPA;EAHK,GAAP;EAKD,CApED;;EAsEO,IAAMqV,iBAAiB,GAAG,SAApBA,iBAAoB,CAC/BjiB,MAD+B,EAE/BvB,QAF+B,EAG/B4H,OAH+B;EAK/B,MAAI6b,WAAW,GAAG,KAAlB;;eASI7b,OAAO,IAAI;MAPb8b,uBAAAA;MACAC,mBAAAA;MACAC,gCAAAA;MACAC,2BAAAA;MACAC,6BAAAA;MACyBC,2BAAzBC;MACAC,4BAAAA;;gCAMEvB,wBAAwB;QAC1BnhB,MAD0B;QAE1BmiB,eAAe,IAAIG,mBAFO;QAG1B,IAAIK,GAAJ,EAH0B;QAI1Bna,QAAQ,CAAC;EACP,YAAI0Z,WAAJ,EAAiB;EACfzjB,UAAAA,QAAQ,CAAC,EAAD,EAAK,KAAL,EAAY,IAAZ,CAAR;EACD;EACF,OAJO,EAIL,EAJK;MAJkB;MAHTmkB,yDAAjBhB;MACUiB,kDAAVtL;MACSuL,iDAATlW;;EAaF,MAAMmW,eAAe,GAAGX,WAAW,IAAI,EAAvC;EACA,MAAMY,4BAA4B,GAAGX,wBAAwB,IAAI,EAAjE;EACA,MAAMY,kBAAkB,GAAGF,eAAe,CAACG,MAAhB,CAAuBF,4BAAvB,CAA3B;;EACA,MAAMG,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,SAAD;EACvB,QAAMC,kBAAkB,GAAGb,mBAAmB,IAAIja,IAAlD;EACA,QAAM+a,mBAAmB,GAAGZ,oBAAoB,IAAIna,IAApD;EACA,QAAMgb,kBAAkB,GAAa,EAArC;EACA,QAAMC,eAAe,GAAW,EAAhC;EACA,QAAIC,kBAAkB,GAAG,KAAzB;EACA,QAAIC,cAAc,GAAG,KAArB;EACA,QAAIC,gBAAgB,GAAG,KAAvB;EACAplB,IAAAA,IAAI,CAAC6kB,SAAD,EAAY,UAACQ,QAAD;YACNC,gBAAsED,SAAtEC;UAAuBC,iBAA+CF,SAAvD5jB;UAAwBlE,OAA+B8nB,SAA/B9nB;UAAMioB,WAAyBH,SAAzBG;UAAUC,aAAeJ,SAAfI;EAC/D,UAAMC,gBAAgB,GAAGnoB,IAAI,KAAK,YAAlC;EACA,UAAMooB,eAAe,GAAGpoB,IAAI,KAAK,WAAjC;EACA,UAAMqoB,sBAAsB,GAAGnkB,MAAM,KAAK8jB,cAA1C;EACA,UAAMM,cAAc,GAAGH,gBAAgB,IAAI9nB,QAAQ,CAAC0nB,aAAD,CAA5B,GAA8C9lB,IAAI,CAAC+lB,cAAD,EAAgCD,aAAhC,CAAlD,GAAoG,CAA3H;EACA,UAAMQ,gBAAgB,GAAGD,cAAc,KAAK,CAAnB,IAAwBL,QAAQ,KAAKK,cAA9D;EACA,UAAME,iBAAiB;UACrBD,gBAAgB;UAChBF,sBADA;UAEA,CAAChC,eAFD;UAGA,CAACkB,kBAAkB,CAACS,cAAD,EAAiBD,aAAjB,EAAiCE,QAAjC,EAA2CK,cAA3C,CAJrB;EAKA,UAAMG,wBAAwB,GAAG3lB,OAAO,CAACokB,4BAAD,EAA+Ba,aAA/B,CAAP,GAAuD,CAAC,CAAxD,IAA6DQ,gBAA9F;;EAEA,UAAIC,iBAAJ,EAAuB;EACrBtlB,QAAAA,IAAI,CAACukB,kBAAD,EAAqBM,aAArB,CAAJ;EACD;;EACD,UAAI1B,eAAJ,EAAqB;EACnB,YAAMqC,kBAAkB,GAAG,CAACP,gBAA5B;EACA,YAAMQ,kBAAkB,GAAGR,gBAAgB,IAAIM,wBAApB,IAAgD,CAACJ,sBAA5E;EACA,YAAMO,cAAc,GAAGD,kBAAkB,IAAIlC,qBAAtB,IAA+CvgB,EAAE,CAAC8hB,cAAD,EAAiBvB,qBAAjB,CAAxE;EACA,YAAMoC,aAAa,GAAGD;AAAc,cAChC,CAACrB,kBAAkB,CAACS,cAAD,EAAiBD,aAAjB,EAAiCE,QAAjC,EAA2CK,cAA3C;AADa,cAEhCI,kBAAkB,IAAIC,kBAF1B;EAGA,YAAMG,mBAAmB,GAAGD,aAAa,IAAI,CAACrB,mBAAmB,CAACM,QAAD,EAAW,CAAC,CAACc,cAAb,EAA6B1kB,MAA7B,EAAqCqG,OAArC,CAAjE;EAEArH,QAAAA,IAAI,CAACwkB,eAAD,EAAkBQ,UAAlB,CAAJ;EAEAN,QAAAA,cAAc,GAAGA,cAAc,IAAIkB,mBAAnC;EACAjB,QAAAA,gBAAgB,GAAGA,gBAAgB,IAAIO,eAAvC;EACD;;EACDT,MAAAA,kBAAkB,GAAGA,kBAAkB,KAAKa,iBAAiB,IAAIC,yBAAjE;EACD,KAhCG,CAAJ;;EAkCA,QAAIZ,gBAAgB,IAAI,CAACpkB,YAAY,CAACikB,eAAD,CAArC,EAAwD;EACtDZ,MAAAA,gCAAgC,CAAC,UAAChhB,QAAD;EAAA,eAC/B4hB,eAAe,CAACnY,MAAhB,CAA+B,UAACxM,GAAD,EAAMwE,IAAN;EAC7BrE,UAAAA,IAAI,CAACH,GAAD,EAAM8C,IAAI,CAACC,QAAD,EAAWyB,IAAX,CAAV,CAAJ;EACA,iBAAOrB,EAAE,CAACqB,IAAD,EAAOzB,QAAP,CAAF,GAAqB5C,IAAI,CAACH,GAAD,EAAMwE,IAAN,CAAzB,GAAuCxE,GAA9C;EACD,SAHD,EAGG,EAHH,CAD+B;EAAA,OAAD,CAAhC;EAMD;;EACD,QAAI,CAACU,YAAY,CAACgkB,kBAAD,CAAb,IAAqCE,kBAArC,IAA2DC,cAA/D,EAA+E;EAC7EjlB,MAAAA,QAAQ,CAAC8kB,kBAAD,EAAqBE,kBAArB,EAAyCC,cAAzC,CAAR;EACD;EACF,GArDD;;EAsDA,MAAMmB,gBAAgB,GAAqB,IAAI3c,2BAAJ,CAAiCib,gBAAjC,CAA3C;EAGA0B,EAAAA,gBAAgB,CAAC7F,OAAjB,CAAyBhf,MAAzB,EAAiC;EAC/B8kB,IAAAA,UAAU,EAAE,IADmB;EAE/BC,IAAAA,iBAAiB,EAAE,IAFY;EAG/BC,IAAAA,eAAe,EAAE/B,kBAHc;EAI/BgC,IAAAA,OAAO,EAAE9C,eAJsB;EAK/B+C,IAAAA,SAAS,EAAE/C,eALoB;EAM/BgD,IAAAA,aAAa,EAAEhD;EANgB,GAAjC;EAQAD,EAAAA,WAAW,GAAG,IAAd;EAEA,SAAO;EACLkD,IAAAA,WAAW,EAAE;EACX,UAAIlD,WAAJ,EAAiB;EACfW,QAAAA,yBAAyB;EACzBgC,QAAAA,gBAAgB,CAAC5F,UAAjB;EACAiD,QAAAA,WAAW,GAAG,KAAd;EACD;EACF,KAPI;EAQLmD,IAAAA,yBAAyB,EAAE,mCAACrD,qBAAD;EACzBc,MAAAA,wBAAwB,CAACZ,WAAW,IAAIC,eAAf,IAAkCH,qBAAnC,CAAxB;EACD,KAVI;EAWLpV,IAAAA,OAAO,EAAE;EACP,UAAIsV,WAAJ,EAAiB;EACfiB,QAAAA,gBAAgB,CAAC0B,gBAAgB,CAACS,WAAjB,EAAD,CAAhB;EACD;EACF;EAfI,GAAP;EAiBD,CAtHM;;ECvGP,IAAMC,KAAK,GAAG,CAAC,IAAD,EAAO,OAAP,EAAgB,OAAhB,EAAyB,MAAzB,CAAd;EACA,IAAMC,iCAAiC,GAAyB;EAC9DrZ,EAAAA,MAAM,EAAE,KADsD;EAE9DC,EAAAA,SAAS,EAAE,KAFmD;EAG9DO,EAAAA,QAAQ,EAAE;EAHoD,CAAhE;EAKA,IAAM8Y,kCAAkC,GAAyB;EAC/DtZ,EAAAA,MAAM,EAAE,KADuD;EAE/DC,EAAAA,SAAS,EAAE,KAFoD;EAG/DO,EAAAA,QAAQ,EAAE;EAHqD,CAAjE;EAMO,IAAM+Y,kBAAkB,GAAG,SAArBA,kBAAqB,CAACrf,OAAD,EAAmBsf,cAAnB;gCACOA,cAAc,CAACtO;MAA9CjC,8BAAAA;MAAOK,kCAAAA;MAAWE,iCAAAA;;0BAMtBZ,cAAc;MAJhBnB,0CAAAA;MACAE,+BAAAA;MACc8R,yCAAd7R;MACiB8R,4CAAjB7R;;EAEF,MAAM8R,UAAU,GAA8B,EAA9C;EACA,MAAMC,QAAQ,GAAiB;EAC7BvW,IAAAA,QAAQ,EAAEnJ,OADmB;EAE7B+R,IAAAA,eAAe,EAAEuN;EAFY,GAA/B;EAMA3mB,EAAAA,IAAI,CAAC8mB,UAAD,EAAa3N,uBAAuB,CAAC4N,QAAD,CAApC,CAAJ;;EAEA,MAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAAClO,WAAD,EAAqDC,cAArD,EAAwGzL,KAAxG;iBAElBwL,WAAW,IAAI;QADXqD,uBAAAA;QAAiBC,wBAAAA;iCAAkBC;QAAAA,8CAAe/O,KAAK,IAAI;kCAAOgP;QAAAA,gDAAgBhP,KAAK,IAAI;qCAAOiP;QAAAA,sDAAmBjP,KAAK,IAAI;;EAEpI,QAAM2Z,mBAAmB;QACvB9K,eAAe,KAAK8C,YAAY,GAAGA,YAAY,CAACmC,sBAAb,CAAoC9T,KAApC,EAA2C6O,eAA9C,GAAgEqK,iCAAjF,CADjB;EAEA,QAAMU,oBAAoB;QACxB9K,gBAAgB,KAAKmF,eAAe,GAAGA,eAAe,CAACH,sBAAhB,CAAuC9T,KAAvC,EAA8C8O,gBAAjD,GAAoEqK,kCAAxF,CADlB;EAGAlnB,IAAAA,IAAI,CAACunB,UAAD,EAAa,UAACK,SAAD;yBAC+GA,SAAS;YACrI;EACEhL,YAAAA,eAAe,EAAE8K,mBADnB;EAEE7K,YAAAA,gBAAgB,EAAE8K,oBAFpB;EAGE7K,YAAAA,YAAY,EAAZA,YAHF;EAIEC,YAAAA,aAAa,EAAbA,aAJF;EAKEC,YAAAA,gBAAgB,EAAhBA;EALF,WADqI;YAQrIxD,cARqI;YASrIzL;UATqI;UAAjH8Z,iCAAd/K;UAAkDgL,kCAAf/K;UAAuDgL,qCAAlB/K;;EAYhFF,MAAAA,YAAY,GAAG+K,mBAAmB,IAAI/K,YAAtC;EACAC,MAAAA,aAAa,GAAG+K,oBAAoB,IAAI/K,aAAxC;EACAC,MAAAA,gBAAgB,GAAG+K,uBAAuB,IAAI/K,gBAA9C;EACD,KAhBG,CAAJ;EAiBD,GAzBD;;EA2BA,MAAMgL,aAAa,GAAG,SAAhBA,aAAgB,CAAC5M,cAAD;EACpB,QAAM6M,WAAW,GAAG,CAAC7M,cAArB;EACAqM,IAAAA,aAAa,CAAC;EACZ7K,MAAAA,eAAe,EAAExB,cADL;EAEZ0B,MAAAA,YAAY,EAAEmL;EAFF,KAAD,CAAb;EAID,GAND;;EAOA,MAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,CAAC3L,eAAD;EACvBkL,IAAAA,aAAa,CAAC;EACZ5K,MAAAA,gBAAgB,EAAEN;EADN,KAAD,CAAb;EAGD,GAJD;;EAKA,MAAM4L,cAAc,GAAG,SAAjBA,cAAiB;EAErBC,IAAAA,qBAAqB,CAAC;EACpBX,MAAAA,aAAa,CAAC;EACZ1K,QAAAA,aAAa,EAAE;EADH,OAAD,CAAb;EAGD,KAJoB,CAArB;EAKD,GAPD;;EAQA,MAAMsL,iBAAiB,GAAG,SAApBA,iBAAoB;EAExBD,IAAAA,qBAAqB,CAAC;EACpBX,MAAAA,aAAa,CAAC;EACZzK,QAAAA,gBAAgB,EAAE;EADN,OAAD,CAAb;EAGD,KAJoB,CAArB;EAKD,GAPD;;EASA,MAAM0C,YAAY,GAAGR,kBAAkB,CAACrI,KAAD,EAAQmR,aAAR,EAAuB;EAAE1I,IAAAA,OAAO,EAAE,IAAX;EAAiBF,IAAAA,UAAU,EAAE,CAAC/J;EAA9B,GAAvB,CAAvC;EACA,MAAM2M,eAAe,GAAGF,qBAAqB,CAACjL,KAAD,EAAQqR,gBAAR,CAA7C;EACA,MAAMI,oBAAoB,GAAG5E,iBAAiB,CAAC7M,KAAD,EAAQsR,cAAR,EAAwB;EACpErE,IAAAA,wBAAwB,EAAEkD,KAD0C;EAEpEnD,IAAAA,WAAW,EAAEmD;EAFuD,GAAxB,CAA9C;EAIA,MAAMuB,uBAAuB,GAAG7E,iBAAiB,CAACtM,QAAQ,IAAIF,SAAb,EAAwBmR,iBAAxB,EAA2C;EAC1FzE,IAAAA,eAAe,EAAE,IADyE;EAE1FE,IAAAA,wBAAwB,EAAEkD,KAFgE;EAG1FnD,IAAAA,WAAW,EAAEmD,KAH6E;EAI1FjD,IAAAA,mBAAmB,EAAEjc,OAAQ,CAAC0gB,QAAT,CAAmBC;EAJkD,GAA3C,CAAjD;;EAsBA,MAAMC,SAAS,GAAG,SAAZA,SAAY,CAAClP,cAAD,EAAoDzL,KAApD;EAChB0Z,IAAAA,aAAa,CAAC,IAAD,EAAOjO,cAAP,EAAuBzL,KAAvB,CAAb;EACD,GAFD;;EAGA,MAAM4a,iBAAiB,GAAGD,SAAS,CAACjgB,IAAV,CAAe,IAAf,EAAqB,IAArB,EAA2B,IAA3B,CAA1B;EACA4e,EAAAA,sBAAsB,CAACsB,iBAAD,CAAtB;EAEAjY,EAAAA,OAAO,CAACkY,GAAR,CAAY,aAAZ,EAA2BrT,YAA3B;EAEA,SAAO;EACLlH,IAAAA,OAAO,EAAEqa,SADJ;EAEL1P,IAAAA,QAFK;EAGHsO,MAAAA,yBAAyB,CAACqB,iBAAD,CAAzB;EACD;EAJI,GAAP;EAMD,CAnHM;;ECvBP,IAAME,mBAAmB,GAAiCC,oBAAM,CAACC,MAAjE;EACA,IAAMC,4BAA4B,GAAgE,CAACF,oBAAM,CAACtY,MAAR,EAAgBsY,oBAAM,CAACpoB,KAAvB,EAA8BooB,oBAAM,CAACG,IAArC,CAAlG;EACA,IAAMC,mBAAmB,GAA6C,CAAC,IAAD,EAAOJ,oBAAM,CAACK,OAAd,CAAtE;EACA,IAAMC,oBAAoB,GAA6C,CAAC,KAAD,EAAQN,oBAAM,CAACK,OAAf,CAAvE;EAEA,IAAME,mBAAmB,GAAyC,+BAAlE;EACA,IAAMC,qBAAqB,GAA2C,6CAAtE;EACA,IAAMC,iCAAiC,GAA6C,qBAApF;EACA,IAAMC,+BAA+B,GAA2C,wBAAhF;EAiBA,IAAMC,0BAA0B,GAAkD;EAChFC,EAAAA,MAAM,EAAE,CAAC,MAAD,EAASL,mBAAT,CADwE;EAEhFM,EAAAA,eAAe,EAAEP,oBAF+D;EAGhFZ,EAAAA,QAAQ,EAAE;EACRC,IAAAA,aAAa,EAAE,CAAC,CAAC,CAAC,KAAD,EAAQ,MAAR,CAAD,CAAD,EAAoB,CAACK,oBAAM,CAACpoB,KAAR,EAAeooB,oBAAM,CAACG,IAAtB,CAApB,CADP;EAERW,IAAAA,uBAAuB,EAAE,CAAC,EAAD,EAAKf,mBAAL,CAFjB;EAGRgB,IAAAA,oBAAoB,EAAE,CAAC,CAAD,EAAIhB,mBAAJ,CAHd;EAIRiB,IAAAA,cAAc,EAAE,CAAC,CAAD,EAAIjB,mBAAJ;EAJR,GAHsE;EAShFhL,EAAAA,QAAQ,EAAE;EACR9Q,IAAAA,CAAC,EAAE,CAAC,QAAD,EAAWuc,qBAAX,CADK;EAERtc,IAAAA,CAAC,EAAE,CAAC,QAAD,EAAWsc,qBAAX;EAFK,GATsE;EAahFS,EAAAA,UAAU,EAAE;EACVC,IAAAA,UAAU,EAAE,CAAC,MAAD,EAAST,iCAAT,CADF;EAEVU,IAAAA,QAAQ,EAAE,CAAC,OAAD,EAAUT,+BAAV,CAFA;EAGVU,IAAAA,aAAa,EAAE,CAAC,GAAD,EAAMrB,mBAAN,CAHL;EAIVsB,IAAAA,UAAU,EAAEjB,mBAJF;EAKVkB,IAAAA,WAAW,EAAEhB,oBALH;EAMViB,IAAAA,KAAK,EAAEnB;EANG,GAboE;EAqBhFoB,EAAAA,QAAQ,EAAE;EACRC,IAAAA,QAAQ,EAAEnB,oBADF;EAERoB,IAAAA,SAAS,EAAEpB,oBAFH;EAGRqB,IAAAA,cAAc,EAAE,CAAC,CAAC,OAAD,EAAU,OAAV,CAAD,EAAqBzB,4BAArB;EAHR,GArBsE;EA0BhF0B,EAAAA,wBAAwB,EAAE;EACxBC,IAAAA,IAAI,EAAEvB,oBADkB;EAExBwB,IAAAA,UAAU,EAAExB;EAFY;EA1BsD,CAAlF;;0BAgDwEtY,gBAAgB,CAAC2Y,0BAAD;IAA9DoB,oCAAX7Z;IAAsC8Z,mCAAV7Z;;EC5E3C,IAAM8Z,iBAAiB,GAAG,SAApBA,iBAAoB,CAACtpB,MAAD,EAAoCqG,OAApC,EAAuDkjB,UAAvD;EACxB,MAAMC,cAAc,GAAsBzpB,UAAU,CAClD,EADkD,EAElDspB,cAFkD,EAGlDja,eAAe,CAAU/I,OAAO,IAAK,EAAtB,EAAsC+iB,eAAtC,EAAuD,IAAvD,EAA6D,IAA7D,CAAf,CAAkFjb,UAHhC,CAApD;EAKA,MAAMwX,cAAc,GAAmB1Q,oBAAoB,CAACjV,MAAD,CAA3D;EACA,MAAM4X,YAAY,GAAG8N,kBAAkB,CAAC8D,cAAD,EAAiB7D,cAAjB,CAAvC;EACA,MAAMI,QAAQ,GAAG;EACf1f,IAAAA,OADe,mBACPojB,UADO;EAEb,UAAIA,UAAJ,EAAgB;EAAA,+BAC0Bra,eAAe,CAACqa,UAAD,EAAaL,eAAb,EAA8BI,cAA9B,EAA8C,IAA9C,CADzC;EAAA,UACME,eADN,oBACNvb,UADM;;EAGd,YAAI,CAACvN,aAAa,CAAC8oB,eAAD,CAAlB,EAAqC;EACnC3pB,UAAAA,UAAU,CAACypB,cAAD,EAAiBE,eAAjB,CAAV;;EACA9R,UAAAA,YAAY,CAAChL,OAAb,CAAqB8c,eAArB;EACD;EACF;;EACD,aAAOF,cAAP;EACD,KAXc;EAYfzd,IAAAA,MAZe,kBAYRO,KAZQ;EAabsL,MAAAA,YAAY,CAAChL,OAAb,CAAqB,IAArB,EAA2BN,KAA3B;EACD;EAdc,GAAjB;EAiBAyZ,EAAAA,QAAQ,CAACha,MAAT,CAAgB,IAAhB;EAEA,SAAOga,QAAP;EACD,CA5BD;;ACGA,cAAe;EACb,SAAO;MACLhR,cAAc,EADT;MAELuU,iBAAiB,CAACxnB,QAAQ,CAACiP,IAAV,CAFZ;MAGL7M,SAAS;QACP;;;;;;;;;;;;;;;;;;;;;;MADO;IAHJ,CAAP;EA4BD;;;;"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.min.js index 3eb249f..ddda4f7 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";var n=Node.ELEMENT_NODE,t=Object.prototype,r=t.toString,i=t.hasOwnProperty;function o(n){return void 0===n}function e(n){return null===n}var u=function(n){return o(n)||e(n)?""+n:r.call(n).replace(/^\[object (.+)\]$/,"$1").toLowerCase()};function c(n){return"number"==typeof n}function a(n){return"string"==typeof n}function f(n){return"function"==typeof n}function s(n){return Array.isArray(n)}function l(n){return"object"==typeof n&&!s(n)&&!e(n)}function v(n){var t=!!n&&n.length,r=c(t)&&t>-1&&t%1==0;return!!(s(n)||!f(n)&&r)&&(!(t>0&&l(n))||t-1 in n)}function d(n){if(!n||!l(n)||"object"!==u(n))return!1;var t,r=n.constructor,e=r&&r.prototype,c=i.call(n,"constructor"),a=e&&i.call(e,"isPrototypeOf");if(r&&!c&&!a)return!1;for(t in n);return o(t)||i.call(n,t)}function h(t){var r=window.Element;return!!t&&(r?t instanceof r:t.nodeType===n)}function b(n,t,r,i){if(o(i))return r?r[n]:t;r&&(r[n]=i)}function w(n,t,r){if(o(r))return n?n.getAttribute(t):null;n&&n.setAttribute(t,r)}var p=function(n,t){n&&n.removeAttribute(t)};function _(n,t){return b("scrollLeft",0,n,t)}function m(n,t){return b("scrollTop",0,n,t)}function g(n,t){if(v(n))for(var r=0;r0;i=u[o++];)e=!!r(n.classList,i)&&e}return e},k=function(n,t){L(n,t,(function(n,t){return n.add(t)}))},q=function(n,t){L(n,t,(function(n,t){return n.remove(t)}))},F=Element.prototype,V=function(n,t){var r=[],i=t?h(t)?t:null:document;return i?x(r,i.querySelectorAll(n)):r},B=function(n,t){return!!h(n)&&(F.matches||F.msMatchesSelector).call(n,t)},I=function(n){return n?z(n.childNodes):[]},N=function(n){return n?n.parentElement:null},P=function(n,t,r){if(r){var i,o=t;n&&(v(r)?(i=document.createDocumentFragment(),g(r,(function(n){n===o&&(o=n.previousSibling),i.appendChild(n)}))):i=r,t&&(o?o!==t&&(o=o.nextSibling):o=n.firstChild),n.insertBefore(i,o||null))}},U=function(n,t){P(n,null,t)},Y=function(n,t){P(n,n&&n.firstChild,t)},$=function(n,t){P(N(n),n&&n.nextSibling,t)},D=function n(t){if(v(t))g(z(t),(function(t){return n(t)}));else if(t){var r=N(t);r&&r.removeChild(t)}},G=function(n){var t=document.createElement("div");return n&&w(t,"class",n),t},J=function(n){var t=G();return t.innerHTML=n.trim(),g(I(t),(function(n){return D(n)}))},K={w:0,h:0},R=function(){return{w:window.innerWidth,h:window.innerHeight}},W=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:K},X=function(n){return n.split(" ")},H=function(n,t,r,i){g(X(t),(function(t){n.removeEventListener(t,r,i)}))},Q=function(n,t,r,i){var e=function(){if(o(T)){T=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){T=!0}}))}catch(n){}}return T}(),u=e&&i&&i.o||!1,c=i&&i.u||!1,a=i&&i.s||!1,f=[],s=e?{passive:u,capture:c}:c;return g(X(t),(function(t){var i=a?function(o){n.removeEventListener(t,i,c),r&&r(o)}:r;x(f,H.bind(null,n,t,i,c)),n.addEventListener(t,i,s)})),j.bind(0,f)},Z=function(n){return n.stopPropagation()},nn=function(n){return n.preventDefault()},tn=function(n,t,r){if(n&&t){var i=!0;return g(r,(function(r){n[r]!==t[r]&&(i=!1)})),i}return!1},rn=function(n,t){return tn(n,t,["w","h"])},on=function(n,t){return tn(n,t,["x","y"])},en=function(n,t){return tn(n,t,["t","r","b","l"])},un=function(n){return n.charAt(0).toUpperCase()+n.slice(1)},cn=["-webkit-","-moz-","-o-","-ms-"],an=["WebKit","Moz","O","MS","webkit","moz","o","ms"],fn={},sn={},ln=function(n){var t=sn[n];if(S(sn,n))return t;var r=un(n),i=G().style;return g(cn,(function(o){var e=o.replace(/-/g,""),u=[n,o+n,e+r,un(e)+r];return!(t=u.find((function(n){return void 0!==i[n]})))})),sn[n]=t,t},vn=function(n){var t=fn[n]||window[n];return S(fn,n)||(g(an,(function(r){return!(t=t||window[r+un(n)])})),fn[n]=t),t},dn=vn("MutationObserver"),hn=vn("IntersectionObserver"),bn=vn("ResizeObserver"),wn=vn("cancelAnimationFrame"),pn=vn("requestAnimationFrame"),_n=function(){},mn={animationiterationcount:1,columncount:1,fillopacity:1,flexgrow:1,flexshrink:1,fontweight:1,lineheight:1,opacity:1,order:1,orphans:1,widows:1,zindex:1,zoom:1},gn=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return Number.isNaN(r)?0:r},yn=function(n,t,r){return null!=t?t.getPropertyValue(r):n.style[r]},xn=function(n,t,r){try{n&&void 0!==n.style[t]&&(n.style[t]=function(n,t){return!mn[n.toLowerCase()]&&c(t)?t+"px":t}(t,r))}catch(i){}};function zn(n,t){var r=a(t);if(s(t)||r){var i=r?"":{};if(n){var o=window.getComputedStyle(n,null);i=r?yn(n,o,t):t.reduce((function(t,r){return t[r]=yn(n,o,r),t}),i)}return i}g(M(t),(function(r){return xn(n,r,t[r])}))}var On={x:0,y:0},jn=function(n){var t=n?function(n){return n.getBoundingClientRect()}(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:On},Sn=function(n,t){var r,i=t||{},o=i.v,e=i.p,u=i._,c=e;return function(t,i){var e=c,a=n?n(i,c,r):i,f=t||(o?!o(e,a):e!==a);return(f||u)&&(c=a,r=e),{m:c,g:r,O:f}}};var Mn=function(n){var t={exports:{}};return n(t,t.exports),t.exports}((function(n){function t(){return n.exports=t=Object.assign||function(n){for(var t=1;t0?"\r\nValid strings are: [ "+z.join(", ")+" ].":""));delete l[v]}})),{S:l,j:f}}(n,t,r||{},i||!1)};var Ln,kn=Math.abs,qn=Math.round,Fn=function(n,t){U(n,t);var r,i=(r=t)?{w:r.clientWidth,h:r.clientHeight}:K,o=W(t);return{x:o.h-i.h,y:o.w-i.w}},Vn=function(n){var t=!1;k(n,"os-viewport-scrollbar-styled");try{t="none"===zn(n,"scrollbar-width")||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return t},Bn=function(n,t){zn(n,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),_(n,0);var r=jn(n),i=jn(t);_(n,-999);var o=jn(t);return{i:r.x===i.x,n:i.x!==o.x}},In=function(n,t){k(n,"os-environment-flexbox-glue");var r=W(n),i=W(t),o=rn(i,r);k(n,"os-environment-flexbox-glue-max");var e=W(n),u=W(t),c=rn(u,e);return o&&c},Nn=function(){var n=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/t},Pn=function(){var n=document.body,t=J('
')[0],r=t.firstChild,i=new Set,o=Fn(n,t),e={x:0===o.x,y:0===o.y},u={M:!1,A:o,T:e,C:Vn(t),L:Bn(t,r),k:In(t,r),q:function(n){i.add(n)},F:function(n){i.delete(n)}};if(p(t,"style"),p(t,"class"),D(t),!e.x||!e.y){var c=R(),a=Nn(),f=o;window.addEventListener("resize",(function(){if(i.size){var r=R(),o={w:r.w-c.w,h:r.h-c.h};if(0===o.w&&0===o.h)return;var e={w:kn(o.w),h:kn(o.h)},u={w:kn(qn(r.w/(c.w/100))),h:kn(qn(r.h/(c.h/100)))},s=Nn(),l=e.w>2&&e.h>2,v=(h=u.h,b=kn(u.w),w=kn(h),!(b!==w&&b+1!==w&&b-1!==w));if(l&&v&&(s!==a&&a>0)){var d=Ln.A=Fn(n,t);D(t),f.x===d.x&&f.y===d.y||j(i),f=d}c=r,a=s}var h,b,w}))}return u},Un=function(){return Ln||(Ln=Pn()),Ln},Yn=function(n,t){return n&&t.split(".").reduce((function(n,t){return n&&S(n,t)?n[t]:void 0}),n)},$n=function(n,t,r){var i=function n(t){var r={V:{},B:{}};return g(M(t),(function(i){var o=t[i];if(s(o))r.V[i]=o[1],r.B[i]=o[0];else{var e=n(o);r.V[i]=e.V,r.B[i]=e.B}})),r}(n),o=i.V,e=A({},i.B,Cn(t||{},o,null,!0).j),u=function(n){var t=n.I,i=n.N;r(!!t,(function(n){return{m:Yn(e,n),O:t||void 0!==Yn(i,n)}}))};return u({I:!0}),{B:function(n){if(n){var t=Cn(n,o,e,!0).j;E(t)||(A(e,t),u({N:t}))}return e},P:function(n){u({I:n})}}},Dn={paddingAbsolute:[!1,Tn.boolean],overflowBehavior:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]}},Gn=ln("margin-inline-end"),Jn=ln("border-inline-end"),Kn=function(n,t){var r=n.U,i=n.Y,o=(n.$,n.D),e=[],u=Un(),c=u.T,a=u.C,f=(u.k,Gn&&Jn||a||c.y,Sn((function(){return u=zn(r,[t=(n="padding"||"")+"-top",i=n+"-right",o=n+"-bottom",e=n+"-left"]),{t:gn(u[t]),r:gn(u[i]),b:gn(u[o]),l:gn(u[e])};var n,t,i,o,e,u}),{v:en})),s=Sn((function(n){return{x:Math.max(0,Math.round(100*(n.G.w-n.J.w))/100),y:Math.max(0,Math.round(100*(n.G.h-n.J.h))/100)}}),{v:on}),l=$n(Dn,t,(function(n,t){var r=t("paddingAbsolute"),e=r.m,u=r.O,c=f(n),a=c.m,l=c.O;if(u||l){var v={t:0,r:0,b:0,l:0};e||(v.t=-a.t,v.r=-(a.r+a.l),v.b=-(a.b+a.t),v.l=-a.l),zn(i,{top:v.t,left:v.l,"margin-right":v.r,"margin-bottom":v.b,"max-width":"calc(100% + "+-1*v.r+"px)"})}var d,h=W(i),b=W(o),w=(d=o)?{w:d.scrollWidth,h:d.scrollHeight}:K,p=s(n,{G:w,J:{w:h.w+Math.max(0,b.w-w.w),h:h.h+Math.max(0,b.h-w.h)}}),_=p.m,m=p.O;console.log("overflowAmount",_),console.log("overflowAmountChanged",m)})),v=l.B,d=l.P;return{B:v,P:d,K:function(){d()},R:function(n,t){var r=t.O,i=t.m;r&&zn(o,{height:i?"auto":"100%"})},W:function(){j(e)}}},Rn={direction:["rtl"]},Wn=function(n){var t=!1;return g(zn(n,["direction"]),(function(n,r){t=t||y(Rn[r],n)>-1})),t},Xn=function(n){return n&&(n.height||n.width)},Hn=function(n,t,r){var i=r||{},o=i.X,e=void 0!==o&&o,u=i.H,c=void 0!==u&&u,a=Un().L,f=J('
')[0],l=f.firstChild,v=Sn(0,{_:!0,v:function(n,t){return!(!n||!Xn(n)&&Xn(t))}}),d=function(n){var r=n&&"boolean"==typeof n.m,i=!1;if(s(n)&&n.length>0){var o=v(0,n.pop().contentRect),u=o.g,c=o.m;o.O;i=!u||!Xn(c)}else r&&n.O;if(e){var l=r?n.m:Wn(f);_(f,l?a.n?-3333333:a.i?0:3333333:3333333),m(f,3333333)}i||t(r?n:void 0)},h=[],b=!!c&&d;if(bn){var w=new bn(d);w.observe(l),x(h,(function(){return w.disconnect()}))}else{var p=J('
');U(l,p),k(l,"os-size-observer-listener-scroll");var g,y=p[0],z=y.lastChild,O=y.firstChild,S=null==O?void 0:O.firstChild,M=W(l),A=M,E=!1,T=function(){_(O,3333333),m(O,3333333),_(z,3333333),m(z,3333333)},C=function(){g=0,E&&(M=A,d())},L=function(n){return A=W(l),E=!n||!rn(A,M),n&&E&&!g?(wn(g),g=pn(C)):n||C(),T(),n&&(nn(n),Z(n)),!1};x(h,[Q(O,"scroll",L),Q(z,"scroll",L)]),zn(S,{width:3333333,height:3333333}),T(),b=c?function(){return L()}:T}if(e){var q=Sn((function(){return Wn(f)}));x(h,Q(f,"scroll",(function(n){var t=q(),r=t.m;return t.O&&(zn(l,r?{left:"auto",right:0}:{left:0,right:"auto"}),d(t)),nn(n),Z(n),!1})))}return b&&(k(f,"os-size-observer-appear"),x(h,Q(f,"animationstart",b,{s:!!bn}))),Y(n,f),function(){j(h),D(f)}},Qn=function(n,t,r,i){var e,u=function(){r.forEach((function(n,t){H(t,n,i)})),r.clear()},c=function(t){e&&g(e.reduce((function(r,i){if(i){var o=i[0],e=i[1],u=e&&o&&(t?t(o):V(o,n));u&&x(r,[u,f(e)?e(u):e],!0)}return r}),[]),(function(n){var t=n[0],e=n[1];g(t,(function(n){!function(n,t){var e=r.get(n),u=o(e),c=function(){r.set(n,t),Q(n,t,i)};u||t===e?u&&c():(H(n,e,i),c())}(n,e)}))}))},a=function(n){e=n,u(),c()};return t&&a(t),{Z:u,nn:c,P:a}},Zn=function(n,t,r){var i,o,e,u,f,s,l,v,d,h,b=!1,p=r||{},_=p.tn,m=p.rn,z=p.in,j=p.on,S=p.en,M=p.un,A=p.cn,E=Qn(n,_&&j,new Map,(i=function(){b&&t([],!1,!0)},s=c(o=80)&&o>0,l=c(e)&&e>0,v=s?window.clearTimeout:wn,d=s?window.setTimeout:pn,h=function(n){f=l?performance.now():0,u&&v(u),i.apply(this,n)},function(){var n=h.bind(this,arguments),t=!!l&&performance.now()-f>=e;u&&v(u),u=t?n():d(n,o)})),T=E.nn,C=E.Z,L=E.P,k=z||[],q=(m||[]).concat(k),F=function(i){var o=M||_n,e=A||_n,u=[],c=[],f=!1,s=!1,l=!1;g(i,(function(t){var i=t.attributeName,v=t.target,d=t.type,h=t.oldValue,b=t.addedNodes,p="attributes"===d,m="childList"===d,g=n===v,z=p&&a(i)?w(v,i):0,O=0!==z&&h!==z,j=O&&g&&!_&&!o(v,i,h,z),M=y(k,i)>-1&&O;if(j&&x(u,i),_){var A=!p,E=p&&M&&!g,T=E&&S&&B(v,S),C=(T?!o(v,i,h,z):A||E)&&!e(t,!!T,n,r);x(c,b),s=s||C,l=l||m}f=f||j&&M})),l&&!O(c)&&T((function(n){return c.reduce((function(t,r){return x(t,V(n,r)),B(r,n)?x(t,r):t}),[])})),(!O(u)||f||s)&&t(u,f,s)},I=new dn(F);return I.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:q,subtree:_,childList:_,characterData:_}),b=!0,{an:function(){b&&(C(),I.disconnect(),b=!1)},fn:function(n){L(b&&_&&n)},P:function(){b&&F(I.takeRecords())}}},nt=function(n){U(N(n),I(n)),D(n)},tt=function(t){var r=function(t){var r=window.HTMLElement;return!!t&&(r?t instanceof r:t.nodeType===n)}(t),i=r?{}:{U:t.host,sn:t.target,Y:t.padding,$:t.viewport,D:t.content};if(r){var e=G("os-padding"),u=G("os-viewport"),c=G("os-content");U(e,u),U(u,c),i.sn=t,i.Y=e,i.$=u,i.D=c}var a=i.sn,f=i.Y,s=i.$,l=i.D,v=[],d=B(a,"textarea"),h=!d&&B(a,"body"),b=d?i.U||G():a,w=function(n){return d?a:I(n)};if(d&&b!==i.U&&($(a,b),x(v,(function(){$(b,a),D(b)}))),r)U(l,w(a)),U(b,f),x(v,(function(){U(b,I(l)),D(f),q(b,"os-host")}));else{var p=l||s||f||b,_=o(f),m=o(s),g=o(l),y=w(p);f=i.Y=_?G():f,s=i.$=m?G():s,l=i.D=g?G():l,U(b,f),U(f||b,s),U(s,l),U(l||s,y),x(v,(function(){g&&nt(l),m&&nt(s),_&&nt(f),q(b,"os-host"),q(f,"os-padding"),q(s,"os-viewport"),q(l,"os-content")}))}k(b,"os-host"),k(f,"os-padding"),k(s,"os-viewport"),k(l,"os-content");var z=a.ownerDocument,O=z.body,S={ln:z.defaultView,vn:z,dn:N(O),hn:O,bn:d,wn:h};return{pn:Mn({},i,{U:b}),_n:S,Z:function(){j(v)}}},rt=function(n,t,r){var i=tt(n),o=[],e=i.pn,u=e.U,c=e.$,a=e.D;x(o,Kn(i.pn));Hn(u,(function(n){g(o,n?function(t){t.mn&&t.mn(n)}:function(n){n.K&&n.K()})}),{H:!0,X:!0}),function(n,t){var r=J('
')[0],i=[],o=Sn((function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}),{p:!1});if(hn){var e=new hn((function(n){if(n&&n.length>0){var r=n.pop();if(r){var i=o(0,r);i.O&&t(!1,i)}}}),{root:n});e.observe(r),x(i,(function(){return e.disconnect()}))}else x(i,Hn(r,(function(){var n=W(r),i=o(0,n);i.O&&t(!1,i)})));Y(n,r)}(u,(function(n,t){g(o,(function(r){r.R&&r.R(n,t)}))})),Zn(u,(function(){return null})),Zn(a||c,(function(){return null}),{tn:!0})};return function(){return[Un(),rt(document.body),J('
fdfhdfgh
')]}})); \ 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";var n=Node.ELEMENT_NODE,t=Object.prototype,r=t.toString,e=t.hasOwnProperty;function i(n){return void 0===n}function o(n){return null===n}var u=function(n){return i(n)||o(n)?""+n:r.call(n).replace(/^\[object (.+)\]$/,"$1").toLowerCase()};function c(n){return"number"==typeof n}function a(n){return"string"==typeof n}function s(n){return"function"==typeof n}function f(n){return Array.isArray(n)}function l(n){return"object"==typeof n&&!f(n)&&!o(n)}function v(n){var t=!!n&&n.length,r=c(t)&&t>-1&&t%1==0;return!!(f(n)||!s(n)&&r)&&(!(t>0&&l(n))||t-1 in n)}function d(n){if(!n||!l(n)||"object"!==u(n))return!1;var t,r=n.constructor,o=r&&r.prototype,c=e.call(n,"constructor"),a=o&&e.call(o,"isPrototypeOf");if(r&&!c&&!a)return!1;for(t in n);return i(t)||e.call(n,t)}function h(t){var r=window.Element;return!!t&&(r?t instanceof r:t.nodeType===n)}function _(n,t,r,e){if(i(e))return r?r[n]:t;r&&(r[n]=e)}function b(n,t,r){if(i(r))return n?n.getAttribute(t):null;n&&n.setAttribute(t,r)}function w(n,t){return _("scrollLeft",0,n,t)}function p(n,t){return _("scrollTop",0,n,t)}function g(n,t){if(v(n))for(var r=0;r0;e=u[i++];)o=!!r(n.classList,e)&&o}return o},E=function(n,t){T(n,t,(function(n,t){return n.add(t)}))},I=function(n,t){T(n,t,(function(n,t){return n.remove(t)}))},R=Element.prototype,q=function(n,t){var r=[],e=t?h(t)?t:null:document;return e?y(r,e.querySelectorAll(n)):r},H=function(n,t){return!!h(n)&&(R.matches||R.msMatchesSelector).call(n,t)},V=function(n){return n?x(n.childNodes):[]},k=function(n){return n?n.parentElement:null},D=function(n,t,r){if(r){var e,i=t;n&&(v(r)?(e=document.createDocumentFragment(),g(r,(function(n){n===i&&(i=n.previousSibling),e.appendChild(n)}))):e=r,t&&(i?i!==t&&(i=i.nextSibling):i=n.firstChild),n.insertBefore(e,i||null))}},F=function(n,t){D(n,null,t)},B=function(n,t){D(n,n&&n.firstChild,t)},P=function(n,t){D(k(n),n&&n.nextSibling,t)},W=function n(t){if(v(t))g(x(t),(function(t){return n(t)}));else if(t){var r=k(t);r&&r.removeChild(t)}},Y=function(n){var t=document.createElement("div");return n&&b(t,"class",n),t},G=function(n){var t=Y();return t.innerHTML=n.trim(),g(V(t),(function(n){return W(n)}))},N={w:0,h:0},U=function(){return{w:window.innerWidth,h:window.innerHeight}},X=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:N},$=function(n){return n.split(" ")},J=function(n,t,r,e){g($(t),(function(t){n.removeEventListener(t,r,e)}))},K=function(n,t,r,e){var o=function(){if(i(L)){L=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){L=!0}}))}catch(n){}}return L}(),u=o&&e&&e.t||!1,c=e&&e.o||!1,a=e&&e.u||!1,s=[],f=o?{passive:u,capture:c}:c;return g($(t),(function(t){var e=a?function(i){n.removeEventListener(t,e,c),r&&r(i)}:r;y(s,J.bind(null,n,t,e,c)),n.addEventListener(t,e,f)})),M.bind(0,s)},Q=function(n){return n.stopPropagation()},Z=function(n){return n.preventDefault()},nn=function(n,t,r){if(n&&t){var e=!0;return g(r,(function(r){n[r]!==t[r]&&(e=!1)})),e}return!1},tn=function(n,t){return nn(n,t,["w","h"])},rn=function(n,t){return nn(n,t,["x","y"])},en=["WebKit","Moz","O","MS","webkit","moz","o","ms"],on={},un=function(n){var t=on[n]||window[n];return O(on,n)||(g(en,(function(r){var e;return!(t=t||window[r+(e=n,e.charAt(0).toUpperCase()+e.slice(1))])})),on[n]=t),t},cn=un("MutationObserver"),an=un("IntersectionObserver"),sn=un("ResizeObserver"),fn=un("cancelAnimationFrame"),ln=un("requestAnimationFrame"),vn=function(){},dn={animationiterationcount:1,columncount:1,fillopacity:1,flexgrow:1,flexshrink:1,fontweight:1,lineheight:1,opacity:1,order:1,orphans:1,widows:1,zindex:1,zoom:1},hn=function(n,t,r){return null!=t?t.getPropertyValue(r):n.style[r]},_n=function(n,t,r){try{n&&void 0!==n.style[t]&&(n.style[t]=function(n,t){return!dn[n.toLowerCase()]&&c(t)?t+"px":t}(t,r))}catch(e){}};function bn(n,t){var r=a(t);if(f(t)||r){var e=r?"":{};if(n){var i=window.getComputedStyle(n,null);e=r?hn(n,i,t):t.reduce((function(t,r){return t[r]=hn(n,i,r),t}),e)}return e}g(S(t),(function(r){return _n(n,r,t[r])}))}var wn={x:0,y:0},pn=function(n){var t=n?function(n){return n.getBoundingClientRect()}(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:wn},gn=function(n,t){var r,e=t||{},i=e.s,o=e.l,u=e.v,c=o;return{_:function(t,e){var o=c,a=n?n(e,c,r):e,s=t||(i?!i(o,a):o!==a);return(s||u)&&(c=a,r=o),{p:c,g:r,m:s}},M:function(n){return{p:c,g:r,m:!!n}}}};var mn=function(n){var t={exports:{}};return n(t,t.exports),t.exports}((function(n){function t(){return n.exports=t=Object.assign||function(n){for(var t=1;t0?"\r\nValid strings are: [ "+z.join(", ")+" ].":""));delete l[v]}})),{S:l,O:s}}(n,t,r||{},e||!1)};var On,Sn=Math.abs,jn=Math.round,Cn=function(n,t){F(n,t);var r,e=(r=t)?{w:r.clientWidth,h:r.clientHeight}:N,i=X(t);return{x:i.h-e.h,y:i.w-e.w}},Ln=function(n,t){bn(n,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),w(n,0);var r=pn(n),e=pn(t);w(n,-999);var i=pn(t);return{i:r.x===e.x,n:e.x!==i.x}},An=function(n,t){E(n,"os-environment-flexbox-glue");var r=X(n),e=X(t),i=tn(e,r);E(n,"os-environment-flexbox-glue-max");var o=X(n),u=X(t),c=tn(u,o);return i&&c},Tn=function(){var n=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/t},En=function(){var n,t,r=document.body,e=G('
')[0],i=e.firstChild,o=new Set,u=Cn(r,e),c={x:0===u.x,y:0===u.y},a={j:!1,C:u,L:c,A:!1,T:Ln(e,i),I:An(e,i),R:function(n){o.add(n)},q:function(n){o.delete(n)}};if(t="style",(n=e)&&n.removeAttribute(t),W(e),!c.x||!c.y){var s=U(),f=Tn(),l=u;window.addEventListener("resize",(function(){if(o.size){var n=U(),t={w:n.w-s.w,h:n.h-s.h};if(0===t.w&&0===t.h)return;var i={w:Sn(t.w),h:Sn(t.h)},u={w:Sn(jn(n.w/(s.w/100))),h:Sn(jn(n.h/(s.h/100)))},c=Tn(),a=i.w>2&&i.h>2,v=(h=u.h,_=Sn(u.w),b=Sn(h),!(_!==b&&_+1!==b&&_-1!==b));if(a&&v&&(c!==f&&f>0)){var d=On.C=Cn(r,e);W(e),l.x===d.x&&l.y===d.y||M(o),l=d}s=n,f=c}var h,_,b}))}return a},In=function(){return On||(On=En()),On},Rn=function(n){F(k(n),V(n)),W(n)},qn=function(t){var r=function(t){var r=window.HTMLElement;return!!t&&(r?t instanceof r:t.nodeType===n)}(t),e=r?{}:{H:t.host,V:t.target,k:t.padding,D:t.viewport,F:t.content};if(r){var o=Y("os-padding"),u=Y("os-viewport"),c=Y("os-content");F(o,u),F(u,c),e.V=t,e.k=o,e.D=u,e.F=c}var a=e.V,s=e.k,f=e.D,l=e.F,v=[],d=H(a,"textarea"),h=!d&&H(a,"body"),_=d?e.H||Y():a,b=function(n){return d?a:V(n)};if(d&&_!==e.H&&(P(a,_),y(v,(function(){P(_,a),W(_)}))),r)F(l,b(a)),F(_,s),y(v,(function(){F(_,V(l)),W(s),I(_,"os-host")}));else{var w=l||f||s||_,p=i(s),g=i(f),m=i(l),x=b(w);s=e.k=p?Y():s,f=e.D=g?Y():f,l=e.F=m?Y():l,F(_,s),F(s||_,f),F(f,l),F(l||f,x),y(v,(function(){m&&Rn(l),g&&Rn(f),p&&Rn(s),I(_,"os-host"),I(s,"os-padding"),I(f,"os-viewport"),I(l,"os-content")}))}E(_,"os-host"),E(s,"os-padding"),E(f,"os-viewport"),E(l,"os-content");var z=a.ownerDocument,O=z.body,S={B:z.defaultView,P:z,W:k(O),Y:O,G:d,N:h},j=mn({},e,{H:_}),C=In(),L=C.A,A=C.L;if(L)y(v,I.bind(0,f,"os-viewport-scrollbar-styled"));else if((A.x||A.y)&&j.F){var T=Y("os-content-arrange");B(f,T),y(v,W.bind(0,T)),j.U=T}return{X:j,$:S,J:function(){M(v)}}},Hn=function(n,t){return n&&t.split(".").reduce((function(n,t){return n&&O(n,t)?n[t]:void 0}),n)},Vn=function(n){var t=n.K.X,r=t.H,e=t.k,i=t.D,o=t.F,u=t.U,c=gn((function(){return(n=o||i)?{w:n.scrollWidth,h:n.scrollHeight}:N;var n}),{s:tn}),a=c._,s=c.M,f=gn((function(n){return{x:Math.max(0,Math.round(100*(n.Z.w-n.nn.w))/100),y:Math.max(0,Math.round(100*(n.Z.h-n.nn.h))/100)}}),{s:rn}),l=f._,v=f.M,d=function(n,t,r,e){var i="visible-scroll"===r,o=t>0&&("scroll"===r||"hidden"===r);return o&&(e[n?"overflowX":"overflowY"]=r),{tn:!o,rn:i?"scroll":"hidden"}};return function(n,t){return function(r,e,i){return t(!!i,r,(function(t){return{p:Hn(n.en,t),m:i||void 0!==Hn(e,t)}}))||{}}}(n,(function(n,t,c){var f=t.in,h=t.on,_=t.un,b=t.cn,g=t.an,m=In(),y=m.I,x=m.A,z=m.L,M=c("nativeScrollbarsOverlaid.show"),O=M.p,S=M.m,j=!y&&(_||g||b||S),C=O&&z.x&&z.y,L=v(),A=s();if(S&&x&&(C?I(i,"os-viewport-scrollbar-styled"):E(i,"os-viewport-scrollbar-styled")),_||g){var T=X(e),R=X(o||i),q=X(u),H=(A=a(n)).p;L=l(n,{Z:{w:Math.max(H.w,q.w),h:Math.max(H.h,q.h)},nn:{w:T.w+Math.max(0,R.w-H.w),h:T.h+Math.max(0,R.h-H.h)}})}var V,k,D,F,B,P=f.p,W=f.m,Y=A,G=Y.p,N=Y.m,U=L,$=U.p,J=U.m,K=c("overflow"),Q=K.p,Z=K.m;if(N||J||Z||S||W&&!x||j){var nn={overflowY:"",overflowX:"",marginTop:"",marginRight:"",marginBottom:"",marginLeft:"",maxWidth:""},tn={borderTop:"",borderRight:"",borderBottom:"",borderLeft:""},rn=d(!0,$.x,Q.x,nn),en=rn.tn,on=rn.rn,un=d(!1,$.y,Q.y,nn),cn=un.tn,an=un.rn;en&&!cn&&(nn.overflowX=on),cn&&!en&&(nn.overflowY=an);var sn=function(n,t,r,e,i){var c=In(),a=c.C,s=c.L,f=c.A,l=s.x,v=s.y,d="scroll"===e.overflowX,h="scroll"===e.overflowY,_=r?"marginLeft":"marginRight",b=r?"borderLeft":"borderRight",w=o&&!t?42:0,p={x:l?w:a.x,y:v?w:a.y};return f||(d&&(e.marginBottom=-p.x,i.borderBottom=l&&w?"42px solid transparent":""),h&&(e.maxWidth="calc(100% + "+p.y+"px)",e[_]=-p.y,i[b]=v&&w?"42px solid transparent":""),u&&bn(u,{width:h&&!t?w+n.w:"",height:d&&!t?w+n.h:""})),{sn:p,fn:{x:d,y:h}}}(G,C,P,nn,tn),fn=sn.sn,ln=sn.fn;j&&(V=!!h.p,k=ln.x,D=fn.x,F=w(i),B=p(i),bn(i,{maxHeight:""}),V&&bn(i,{maxHeight:r.clientHeight+(k?D:0)}),w(i,F),p(i,B)),bn(i,nn),bn(o,tn)}}))},kn={direction:["rtl"]},Dn=function(n){var t=!1;return g(bn(n,["direction"]),(function(n,r){t=t||m(kn[r],n)>-1})),t},Fn=function(n){return n&&(n.height||n.width)},Bn=function(n,t,r){var e,i=r||{},o=i.ln,u=void 0!==o&&o,c=i.vn,a=void 0!==c&&c,s=In().T,l=G('
')[0],v=l.firstChild,d=gn(0,{v:!0,s:function(n,t){return!(!n||!Fn(n)&&Fn(t))}})._,h=function(n){var r=n&&"boolean"==typeof n.p,e=!1;if(f(n)&&n.length>0){var i=d(0,n.pop().contentRect),o=i.g,c=i.p;i.m;e=!o||!Fn(c)}else r&&n.m;if(u){var a=r?n.p:Dn(l);w(l,a?s.n?-3333333:s.i?0:3333333:3333333),p(l,3333333)}e||t(r?n:void 0)},_=[],b=!!a&&h;if(sn){var g=new sn(h);g.observe(v),y(_,(function(){return g.disconnect()}))}else{var m=G('
');F(v,m),E(v,"os-size-observer-listener-scroll");var x,z=m[0],O=z.lastChild,S=z.firstChild,j=null==S?void 0:S.firstChild,C=X(v),L=C,A=!1,T=function(){w(S,3333333),p(S,3333333),w(O,3333333),p(O,3333333)},I=function(){x=0,A&&(C=L,h())},R=function(n){return L=X(v),A=!n||!tn(L,C),n&&A&&!x?(fn(x),x=ln(I)):n||I(),T(),n&&(Z(n),Q(n)),!1};y(_,[K(S,"scroll",R),K(O,"scroll",R)]),bn(j,{width:3333333,height:3333333}),T(),b=a?function(){return R()}:T}if(u){var q=(e=gn((function(){return Dn(l)})))._;y(_,K(l,"scroll",(function(n){var t=q(),r=t.p;return t.m&&(bn(v,r?{left:"auto",right:0}:{left:0,right:"auto"}),h(t)),Z(n),Q(n),!1})))}return b&&(E(l,"os-size-observer-appear"),y(_,K(l,"animationstart",b,{u:!!sn}))),B(n,l),{J:function(){M(_),W(l)},dn:function(n){return{in:e?e.M(n):{p:!1,g:!1,m:!1}}}}},Pn=function(n,t,r,e){var o,u=function(){r.forEach((function(n,t){J(t,n,e)})),r.clear()},c=function(t){o&&g(o.reduce((function(r,e){if(e){var i=e[0],o=e[1],u=o&&i&&(t?t(i):q(i,n));u&&y(r,[u,s(o)?o(u):o],!0)}return r}),[]),(function(n){var t=n[0],o=n[1];g(t,(function(n){!function(n,t){var o=r.get(n),u=i(o),c=function(){r.set(n,t),K(n,t,e)};u||t===o?u&&c():(J(n,o,e),c())}(n,o)}))}))},a=function(n){o=n,u(),c()};return t&&a(t),{J:u,hn:c,_:a}},Wn=function(n,t,r){var e,i,o,u,s,f,l,v,d,h,_=!1,w=r||{},p=w._n,x=w.bn,M=w.wn,O=w.pn,S=w.gn,j=w.mn,C=w.yn,L=Pn(n,p&&O,new Map,(e=function(){_&&t([],!1,!0)},f=c(i=84)&&i>0,l=c(o)&&o>0,v=f?window.clearTimeout:fn,d=f?window.setTimeout:ln,h=function(n){s=l?performance.now():0,u&&v(u),e.apply(this,n)},function(){var n=h.bind(this,arguments),t=!!l&&performance.now()-s>=o;u&&v(u),u=t?n():d(n,i)})),A=L.hn,T=L.J,E=L._,I=M||[],R=(x||[]).concat(I),V=function(e){var i=j||vn,o=C||vn,u=[],c=[],s=!1,f=!1,l=!1;g(e,(function(t){var e=t.attributeName,v=t.target,d=t.type,h=t.oldValue,_=t.addedNodes,w="attributes"===d,g="childList"===d,x=n===v,z=w&&a(e)?b(v,e):0,M=0!==z&&h!==z,O=M&&x&&!p&&!i(v,e,h,z),j=m(I,e)>-1&&M;if(O&&y(u,e),p){var C=!w,L=w&&j&&!x,A=L&&S&&H(v,S),T=(A?!i(v,e,h,z):C||L)&&!o(t,!!A,n,r);y(c,_),f=f||T,l=l||g}s=s||O&&j})),l&&!z(c)&&A((function(n){return c.reduce((function(t,r){return y(t,q(n,r)),H(r,n)?y(t,r):t}),[])})),(!z(u)||s||f)&&t(u,s,f)},k=new cn(V);return k.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:R,subtree:p,childList:p,characterData:p}),_=!0,{xn:function(){_&&(T(),k.disconnect(),_=!1)},zn:function(n){E(_&&p&&n)},_:function(){_&&V(k.takeRecords())}}},Yn=["id","class","style","open"],Gn={p:!1,g:!1,m:!1},Nn={p:!1,g:!1,m:!1},Un=function(n,t){var r=t.X,e=r.H,i=r.D,o=r.F,u=In(),c=u.A,a=u.I,s=u.R,f=u.q,l=[];y(l,Vn({en:n,K:t}));var v=function(n,t,r){var e=n||{},i=e.in,o=e.on,u=e.un,c=void 0===u?r||!1:u,a=e.cn,s=void 0===a?r||!1:a,f=e.an,v=void 0===f?r||!1:f,_=i||(d?d.dn(r).in:Gn),b=o||(h?h.dn(r).on:Nn);g(l,(function(n){var e=n({in:_,on:b,un:c,cn:s,an:v},t,r),i=e.un,o=e.cn,u=e.an;c=i||c,s=o||s,v=u||v}))},d=Bn(e,(function(n){v({in:n,un:!n})}),{vn:!0,ln:!c}),h=function(n,t){var r=G('
')[0],e=[],i=gn((function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}),{l:!1}),o=i._,u=i.M;if(an){var c=new an((function(n){if(n&&n.length>0){var r=n.pop();if(r){var e=o(0,r);e.m&&t(e)}}}),{root:n});c.observe(r),y(e,(function(){return c.disconnect()}))}else y(e,Bn(r,(function(){var n=X(r),e=o(0,n);e.m&&t(e)})).J);return B(n,r),{J:function(){M(e),W(r)},dn:function(n){return{on:u(n)}}}}(e,(function(n){v({on:n})})),_=(Wn(e,(function(){requestAnimationFrame((function(){v({cn:!0})}))}),{wn:Yn,bn:Yn}),Wn(o||i,(function(){requestAnimationFrame((function(){v({an:!0})}))}),{_n:!0,wn:Yn,bn:Yn,pn:n.updating.elementEvents}),function(n,t){v(null,n,t)}),b=_.bind(null,null,!0);return s(b),console.log("flexboxGlue",a),{_,J:function(){f(b)}}},Xn=zn.number,$n=[zn.string,zn.array,zn.null],Jn=[!0,zn.boolean],Kn=[!1,zn.boolean],Qn=function n(t){var r={Mn:{},en:{}};return g(S(t),(function(e){var i=t[e];if(f(i))r.Mn[e]=i[1],r.en[e]=i[0];else{var o=n(i);r.Mn[e]=o.Mn,r.en[e]=o.en}})),r}({resize:["none","none both horizontal vertical"],paddingAbsolute:Kn,updating:{elementEvents:[[["img","load"]],[zn.array,zn.null]],contentMutationDebounce:[80,Xn],hostMutationDebounce:[0,Xn],resizeDebounce:[0,Xn]},overflow:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,Xn],dragScroll:Jn,clickScroll:Kn,touch:Jn},textarea:{dynWidth:Kn,dynHeight:Kn,inheritedAttrs:[["style","class"],$n]},nativeScrollbarsOverlaid:{show:Kn,initialize:Kn}}),Zn=Qn.Mn,nt=Qn.en;return function(){return[In(),(n=document.body,r=j({},nt,Mn(t||{},Zn,null,!0).O),e=qn(n),i=Un(r,e),o={options:function(n){if(n){var t=Mn(n,Zn,r,!0).O;C(t)||(j(r,t),i._(t))}return r},update:function(n){i._(null,n)}},o.update(!0),o),G('
fdfhdfgh
')];var n,t,r,e,i,o}})); \ No newline at end of file diff --git a/packages/overlayscrollbars/src/lifecycles/overflowLifecycle.ts b/packages/overlayscrollbars/src/lifecycles/overflowLifecycle.ts index ec4a370..5f8fb1e 100644 --- a/packages/overlayscrollbars/src/lifecycles/overflowLifecycle.ts +++ b/packages/overlayscrollbars/src/lifecycles/overflowLifecycle.ts @@ -82,21 +82,21 @@ export const createOverflowLifecycle = (lifecycleHub: LifecycleHub): LifecycleUp if (!_nativeScrollbarStyling) { if (scrollX) { - viewportStyleObj.marginBottom = `-${scrollbarsHideOffset.x}px`; + viewportStyleObj.marginBottom = -scrollbarsHideOffset.x; contentStyleObj.borderBottom = overlaidX && overlaidHideOffset ? overlaidScrollbarsHideBorderStyle : ''; } if (scrollY) { viewportStyleObj.maxWidth = `calc(100% + ${scrollbarsHideOffset.y}px)`; - viewportStyleObj[horizontalMarginKey] = `-${scrollbarsHideOffset.y}px`; + viewportStyleObj[horizontalMarginKey] = -scrollbarsHideOffset.y; contentStyleObj[horizontalBorderKey] = overlaidY && overlaidHideOffset ? overlaidScrollbarsHideBorderStyle : ''; } if (_contentArrange) { style(_contentArrange, { - width: scrollY && !showNativeOverlaidScrollbars ? `${overlaidHideOffset + contentScrollSize.w}px` : '', - height: scrollX && !showNativeOverlaidScrollbars ? `${overlaidHideOffset + contentScrollSize.h}px` : '', + width: scrollY && !showNativeOverlaidScrollbars ? overlaidHideOffset + contentScrollSize.w : '', + height: scrollX && !showNativeOverlaidScrollbars ? overlaidHideOffset + contentScrollSize.h : '', }); } } @@ -120,7 +120,7 @@ export const createOverflowLifecycle = (lifecycleHub: LifecycleHub): LifecycleUp if (heightIntrinsic) { style(_viewport, { - maxHeight: `${_host.clientHeight + (scrollX ? scrollbarsHideOffsetX : 0)}px`, + maxHeight: _host.clientHeight + (scrollX ? scrollbarsHideOffsetX : 0), }); } diff --git a/packages/overlayscrollbars/types/classnames.d.ts b/packages/overlayscrollbars/types/classnames.d.ts index 36c297d..b46ba2d 100644 --- a/packages/overlayscrollbars/types/classnames.d.ts +++ b/packages/overlayscrollbars/types/classnames.d.ts @@ -5,6 +5,7 @@ export declare const classNameHost = "os-host"; export declare const classNamePadding = "os-padding"; export declare const classNameViewport = "os-viewport"; export declare const classNameContent = "os-content"; +export declare const classNameContentArrange: string; export declare const classNameViewportScrollbarStyling: string; export declare const classNameSizeObserver = "os-size-observer"; export declare const classNameSizeObserverAppear: string; diff --git a/packages/overlayscrollbars/types/index.d.ts b/packages/overlayscrollbars/types/index.d.ts index 67820ae..1a06809 100644 --- a/packages/overlayscrollbars/types/index.d.ts +++ b/packages/overlayscrollbars/types/index.d.ts @@ -1,2 +1,2 @@ -declare const _default: () => (void | import("./environment").Environment | readonly Node[])[]; +declare const _default: () => any[]; export default _default; diff --git a/packages/overlayscrollbars/types/lifecycles/lifecycleBase.d.ts b/packages/overlayscrollbars/types/lifecycles/lifecycleBase.d.ts deleted file mode 100644 index c18475c..0000000 --- a/packages/overlayscrollbars/types/lifecycles/lifecycleBase.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Cache, OptionsWithOptionsTemplate } from 'support'; -import { PlainObject } from 'typings'; -export interface LifecycleBase { - _options(newOptions?: O): O; - _update(force?: boolean): void; -} -export interface Lifecycle extends LifecycleBase { - _destruct(): void; - _onSizeChanged?(): void; - _onDirectionChanged?(directionCache: Cache): void; - _onTrinsicChanged?(widthIntrinsic: boolean, heightIntrinsicCache: Cache): void; -} -export interface LifecycleOptionInfo { - _value: T; - _changed: boolean; -} -export declare type LifecycleCheckOption = (path: string) => LifecycleOptionInfo; -/** - * Creates a object which can be seen as the base of a lifecycle because it provides all the tools to manage a lifecycle and its options, cache and base functions. - * @param defaultOptionsWithTemplate A object which describes the options and the default options of the lifecycle. - * @param initialOptions The initialOptions for the lifecylce. (Can be undefined) - * @param updateFunction The update function where cache and options updates are handled. Has two arguments which are the changedOptions and the changedCache objects. - */ -export declare const createLifecycleBase: (defaultOptionsWithTemplate: OptionsWithOptionsTemplate>, initialOptions: O | undefined, updateFunction: (force: boolean, checkOption: LifecycleCheckOption) => any) => LifecycleBase; diff --git a/packages/overlayscrollbars/types/lifecycles/lifecycleHub.d.ts b/packages/overlayscrollbars/types/lifecycles/lifecycleHub.d.ts new file mode 100644 index 0000000..d6f9601 --- /dev/null +++ b/packages/overlayscrollbars/types/lifecycles/lifecycleHub.d.ts @@ -0,0 +1,12 @@ +import { OptionsValidated } from 'support'; +import { Options } from 'options'; +import { StructureSetup } from 'setups/structureSetup'; +export interface LifecycleHubInstance { + _update(changedOptions?: OptionsValidated | null, force?: boolean): void; + _destroy(): void; +} +export interface LifecycleHub { + _options: Options; + _structureSetup: StructureSetup; +} +export declare const createLifecycleHub: (options: Options, structureSetup: StructureSetup) => LifecycleHubInstance; diff --git a/packages/overlayscrollbars/types/lifecycles/lifecycleUpdateFunction.d.ts b/packages/overlayscrollbars/types/lifecycles/lifecycleUpdateFunction.d.ts new file mode 100644 index 0000000..1254672 --- /dev/null +++ b/packages/overlayscrollbars/types/lifecycles/lifecycleUpdateFunction.d.ts @@ -0,0 +1,24 @@ +import { CacheValues, OptionsValidated } from 'support'; +import { Options } from 'options'; +import { LifecycleHub } from 'lifecycles/lifecycleHub'; +export interface LifecycleAdaptiveUpdateHints { + _sizeChanged: boolean; + _hostMutation: boolean; + _contentMutation: boolean; +} +export interface LifecycleUpdateHints extends LifecycleAdaptiveUpdateHints { + _directionIsRTL: CacheValues; + _heightIntrinsic: CacheValues; +} +export declare type LifecycleUpdateFunction = (updateHints: LifecycleUpdateHints, changedOptions?: OptionsValidated | null, force?: boolean) => Partial; +export interface LifecycleOptionInfo { + readonly _value: T; + _changed: boolean; +} +export declare type LifecycleCheckOption = (path: string) => LifecycleOptionInfo; +/** + * Creates a update function for a lifecycle. + * @param lifecycleHub The LifecycleHub which is managing this lifecylce. + * @param updateFunction The update function where cache and options updates are handled. Has two arguments which are the changedOptions and the changedCache objects. + */ +export declare const createLifecycleUpdateFunction: (lifecycleHub: LifecycleHub, updateFunction: (force: boolean, updateHints: LifecycleUpdateHints, checkOption: LifecycleCheckOption) => Partial | void) => LifecycleUpdateFunction; diff --git a/packages/overlayscrollbars/types/lifecycles/overflowLifecycle.d.ts b/packages/overlayscrollbars/types/lifecycles/overflowLifecycle.d.ts new file mode 100644 index 0000000..73998ee --- /dev/null +++ b/packages/overlayscrollbars/types/lifecycles/overflowLifecycle.d.ts @@ -0,0 +1,3 @@ +import { LifecycleUpdateFunction } from 'lifecycles/lifecycleUpdateFunction'; +import { LifecycleHub } from 'lifecycles/lifecycleHub'; +export declare const createOverflowLifecycle: (lifecycleHub: LifecycleHub) => LifecycleUpdateFunction; diff --git a/packages/overlayscrollbars/types/lifecycles/structureLifecycle.d.ts b/packages/overlayscrollbars/types/lifecycles/structureLifecycle.d.ts index d73af09..5f0a5e4 100644 --- a/packages/overlayscrollbars/types/lifecycles/structureLifecycle.d.ts +++ b/packages/overlayscrollbars/types/lifecycles/structureLifecycle.d.ts @@ -1,11 +1,2 @@ -import { PreparedOSTargetObject } from 'setups/structureSetup'; -import { Lifecycle } from 'lifecycles/lifecycleBase'; -export declare type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll'; -export interface StructureLifecycleOptions { - paddingAbsolute: boolean; - overflowBehavior?: { - x?: OverflowBehavior; - y?: OverflowBehavior; - }; -} -export declare const createStructureLifecycle: (target: PreparedOSTargetObject, initialOptions?: StructureLifecycleOptions | undefined) => Lifecycle; +import { LifecycleHub } from 'lifecycles/lifecycleHub'; +export declare const createStructureLifecycle: (lifecycleHub: LifecycleHub) => any; diff --git a/packages/overlayscrollbars/types/observers/sizeObserver.d.ts b/packages/overlayscrollbars/types/observers/sizeObserver.d.ts index 14d4e67..d05dd7e 100644 --- a/packages/overlayscrollbars/types/observers/sizeObserver.d.ts +++ b/packages/overlayscrollbars/types/observers/sizeObserver.d.ts @@ -1,6 +1,12 @@ -import { Cache } from 'support'; +import { CacheValues } from 'support'; export declare type SizeObserverOptions = { _direction?: boolean; _appear?: boolean; }; -export declare const createSizeObserver: (target: HTMLElement, onSizeChangedCallback: (directionIsRTLCache?: Cache | undefined) => any, options?: SizeObserverOptions | undefined) => (() => void); +export interface SizeObserver { + _destroy(): void; + _getCurrentCacheValues(force?: boolean): { + _directionIsRTL: CacheValues; + }; +} +export declare const createSizeObserver: (target: HTMLElement, onSizeChangedCallback: (directionIsRTLCache?: CacheValues | undefined) => any, options?: SizeObserverOptions | undefined) => SizeObserver; diff --git a/packages/overlayscrollbars/types/observers/trinsicObserver.d.ts b/packages/overlayscrollbars/types/observers/trinsicObserver.d.ts index 66bf3e2..3de80e0 100644 --- a/packages/overlayscrollbars/types/observers/trinsicObserver.d.ts +++ b/packages/overlayscrollbars/types/observers/trinsicObserver.d.ts @@ -1,2 +1,8 @@ -import { Cache } from 'support'; -export declare const createTrinsicObserver: (target: HTMLElement, onTrinsicChangedCallback: (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => any) => (() => void); +import { CacheValues } from 'support'; +export interface TrinsicObserver { + _destroy(): void; + _getCurrentCacheValues(force?: boolean): { + _heightIntrinsic: CacheValues; + }; +} +export declare const createTrinsicObserver: (target: HTMLElement, onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any) => TrinsicObserver; diff --git a/packages/overlayscrollbars/types/options/index.d.ts b/packages/overlayscrollbars/types/options/index.d.ts index 7f329bf..bb2a9cd 100644 --- a/packages/overlayscrollbars/types/options/index.d.ts +++ b/packages/overlayscrollbars/types/options/index.d.ts @@ -12,20 +12,15 @@ export declare type DirectionChangedCallback = (this: any, args?: DirectionChang export declare type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void; export declare type UpdatedCallback = (this: any, args?: UpdatedArgs) => void; export interface Options { - className?: string | null; resize?: ResizeBehavior; - sizeAutoCapable?: boolean; - clipAlways?: boolean; - normalizeRTL?: boolean; paddingAbsolute?: boolean; - autoUpdate?: boolean | null; - autoUpdateInterval?: number; - updateOnLoad?: string | ReadonlyArray | null; - nativeScrollbarsOverlaid?: { - showNativeScrollbars?: boolean; - initialize?: boolean; + updating?: { + elementEvents?: ReadonlyArray<[string, string]> | null; + contentMutationDebounce?: number; + hostMutationDebounce?: number; + resizeDebounce?: number; }; - overflowBehavior?: { + overflow?: { x?: OverflowBehavior; y?: OverflowBehavior; }; @@ -33,29 +28,18 @@ export interface Options { visibility?: VisibilityBehavior; autoHide?: AutoHideBehavior; autoHideDelay?: number; - dragScrolling?: boolean; - clickScrolling?: boolean; - touchSupport?: boolean; - snapHandle?: boolean; + dragScroll?: boolean; + clickScroll?: boolean; + touch?: boolean; }; textarea?: { dynWidth?: boolean; dynHeight?: boolean; inheritedAttrs?: string | ReadonlyArray | null; }; - callbacks?: { - onInitialized?: BasicEventCallback | null; - onInitializationWithdrawn?: BasicEventCallback | null; - onDestroyed?: BasicEventCallback | null; - onScrollStart?: ScrollEventCallback | null; - onScroll?: ScrollEventCallback | null; - onScrollStop?: ScrollEventCallback | null; - onOverflowChanged?: OverflowChangedCallback | null; - onOverflowAmountChanged?: OverflowAmountChangedCallback | null; - onDirectionChanged?: DirectionChangedCallback | null; - onContentSizeChanged?: SizeChangedCallback | null; - onHostSizeChanged?: SizeChangedCallback | null; - onUpdated?: UpdatedCallback | null; + nativeScrollbarsOverlaid?: { + show?: boolean; + initialize?: boolean; }; } export interface OverflowChangedArgs { diff --git a/packages/overlayscrollbars/types/overlayscrollbars/OverlayScrollbars.d.ts b/packages/overlayscrollbars/types/overlayscrollbars/OverlayScrollbars.d.ts index a5911d2..f318e69 100644 --- a/packages/overlayscrollbars/types/overlayscrollbars/OverlayScrollbars.d.ts +++ b/packages/overlayscrollbars/types/overlayscrollbars/OverlayScrollbars.d.ts @@ -1,3 +1,4 @@ import { OSTarget, OSTargetObject } from 'typings'; -declare const OverlayScrollbars: (target: OSTarget | OSTargetObject, options?: any, extensions?: any) => void; +import { Options } from 'options'; +declare const OverlayScrollbars: (target: OSTarget | OSTargetObject, options?: Options | undefined, extensions?: any) => any; export { OverlayScrollbars }; diff --git a/packages/overlayscrollbars/types/setups/structureSetup.d.ts b/packages/overlayscrollbars/types/setups/structureSetup.d.ts index 749d624..44b167c 100644 --- a/packages/overlayscrollbars/types/setups/structureSetup.d.ts +++ b/packages/overlayscrollbars/types/setups/structureSetup.d.ts @@ -9,6 +9,7 @@ export interface OSTargetContext { } export interface PreparedOSTargetObject extends Required> { _host: HTMLElement; + _contentArrange: HTMLElement | null; } export interface StructureSetup { _targetObj: PreparedOSTargetObject; diff --git a/packages/overlayscrollbars/types/support/cache/cache.d.ts b/packages/overlayscrollbars/types/support/cache/cache.d.ts index 50640a8..fce8fe8 100644 --- a/packages/overlayscrollbars/types/support/cache/cache.d.ts +++ b/packages/overlayscrollbars/types/support/cache/cache.d.ts @@ -1,14 +1,18 @@ -export interface Cache { +export interface CacheValues { readonly _value?: T; readonly _previous?: T; - readonly _changed: boolean; + _changed: boolean; } export interface CacheOptions { _equal?: EqualCachePropFunction; _initialValue?: T; _alwaysUpdateValues?: boolean; } -export declare type CacheUpdate = undefined extends C ? (force?: boolean | 0, context?: C) => Cache : (force: boolean | 0, context: C) => Cache; +export interface Cache { + _current: (force?: boolean) => CacheValues; + _update: CacheUpdate; +} +export declare type CacheUpdate = undefined extends C ? (force?: boolean | 0, context?: C) => CacheValues : (force: boolean | 0, context: C) => CacheValues; export declare type UpdateCachePropFunction = undefined extends C ? (context?: C, current?: T, previous?: T) => T : C extends T ? ((context: C, current?: T, previous?: T) => T) | 0 : (context: C, current?: T, previous?: T) => T; export declare type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean; -export declare const createCache: (update: UpdateCachePropFunction, options?: CacheOptions | undefined) => CacheUpdate; +export declare const createCache: (update: UpdateCachePropFunction, options?: CacheOptions | undefined) => Cache; diff --git a/packages/overlayscrollbars/types/support/dom/events.d.ts b/packages/overlayscrollbars/types/support/dom/events.d.ts index 204fad4..be8a612 100644 --- a/packages/overlayscrollbars/types/support/dom/events.d.ts +++ b/packages/overlayscrollbars/types/support/dom/events.d.ts @@ -10,7 +10,7 @@ export interface OnOptions { * @param listener The listener which shall be removed. * @param capture The options of the removed listener. */ -export declare const off: (target: EventTarget, eventNames: string, listener: EventListener, capture?: boolean | undefined) => void; +export declare const off: (target: EventTarget, eventNames: string, listener: (event: T) => any, capture?: boolean | undefined) => void; /** * Adds the passed event listener for the passed eventnames with the passed options. * @param target The element to which the listener shall be added. @@ -18,7 +18,7 @@ export declare const off: (target: EventTarget, eventNames: string, listener: Ev * @param listener The listener which is called on the eventnames. * @param options The options of the added listener. */ -export declare const on: (target: EventTarget, eventNames: string, listener: EventListener, options?: OnOptions | undefined) => (() => void); +export declare const on: (target: EventTarget, eventNames: string, listener: (event: T) => any, options?: OnOptions | undefined) => (() => void); /** * Shorthand for the stopPropagation event Method. * @param evt The event of which the stopPropagation method shall be called. diff --git a/packages/overlayscrollbars/types/support/options/index.d.ts b/packages/overlayscrollbars/types/support/options/index.d.ts index f2cfa63..00abccb 100644 --- a/packages/overlayscrollbars/types/support/options/index.d.ts +++ b/packages/overlayscrollbars/types/support/options/index.d.ts @@ -24,7 +24,7 @@ declare type OptionsTemplateTypeMap = { __TPL_boolean_TYPE__: boolean; __TPL_number_TYPE__: number; __TPL_string_TYPE__: string; - __TPL_array_TYPE__: Array; + __TPL_array_TYPE__: Array | ReadonlyArray; __TPL_function_TYPE__: Func; __TPL_null_TYPE__: null; __TPL_object_TYPE__: Record;