From 0a18f934412540726a28ef0a60861e064838cce5 Mon Sep 17 00:00:00 2001 From: Rene Date: Thu, 13 May 2021 23:06:51 +0200 Subject: [PATCH 1/3] add debounce and updating options --- .../src/lifecycles/lifecycleHub.ts | 109 ++-------- .../src/lifecycles/lifecycleHubObservers.ts | 141 +++++++++++++ .../src/observers/domObserver.ts | 75 +++---- .../src/observers/sizeObserver.ts | 44 +++- packages/overlayscrollbars/src/options.ts | 16 +- .../src/support/utils/function.ts | 109 ++++++++-- .../observers/domObserver/index.browser.ts | 195 +++++++++--------- .../observers/sizeObserver/index.browser.ts | 10 +- rollup.config.base.js | 2 +- 9 files changed, 420 insertions(+), 281 deletions(-) create mode 100644 packages/overlayscrollbars/src/lifecycles/lifecycleHubObservers.ts diff --git a/packages/overlayscrollbars/src/lifecycles/lifecycleHub.ts b/packages/overlayscrollbars/src/lifecycles/lifecycleHub.ts index b1432d3..0b25eb8 100644 --- a/packages/overlayscrollbars/src/lifecycles/lifecycleHub.ts +++ b/packages/overlayscrollbars/src/lifecycles/lifecycleHub.ts @@ -1,28 +1,11 @@ -import { - XY, - WH, - TRBL, - CacheValues, - PartialOptions, - each, - hasOwnProperty, - isNumber, - scrollLeft, - scrollTop, - assignDeep, - liesBetween, - diffClass, -} from 'support'; +import { XY, WH, TRBL, CacheValues, PartialOptions, each, hasOwnProperty, isNumber, scrollLeft, scrollTop, assignDeep } from 'support'; import { OSOptions } from 'options'; -import { classNameHost, classNameViewport, classNameContent } from 'classnames'; import { getEnvironment } from 'environment'; import { StructureSetup } from 'setups/structureSetup'; +import { lifecycleHubOservers } from 'lifecycles/lifecycleHubObservers'; import { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle'; import { createPaddingLifecycle } from 'lifecycles/paddingLifecycle'; import { createOverflowLifecycle } from 'lifecycles/overflowLifecycle'; -import { createSizeObserver } from 'observers/sizeObserver'; -import { createTrinsicObserver } from 'observers/trinsicObserver'; -import { createDOMObserver } from 'observers/domObserver'; import { StyleObject } from 'typings'; export type LifecycleCheckOption = (path: string) => LifecycleOptionInfo; @@ -82,28 +65,7 @@ export interface LifecycleHub { const getPropByPath = (obj: any, path: string): T => obj ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj) : undefined; -// TODO: observer textarea attrs if textarea -// TODO: tabindex, open etc. -// TODO: test _ignoreContentChange & _ignoreNestedTargetChange for content dom observer -// TODO: test _ignoreTargetChange for target dom observer -const ignorePrefix = 'os-'; -const hostSelector = `.${classNameHost}`; -const viewportSelector = `.${classNameViewport}`; -const contentSelector = `.${classNameContent}`; -const attrs = ['id', 'class', 'style', 'open']; -const ignoreTargetChange = (target: Node, attrName: string, oldValue: string | null, newValue: string | null) => { - if (attrName === 'class' && oldValue && newValue) { - const diff = diffClass(oldValue, newValue); - return !!diff.find((addedOrRemovedClass) => addedOrRemovedClass.indexOf(ignorePrefix) !== 0); - } - return false; -}; -const directionIsRTLCacheValuesFallback: CacheValues = { - _value: false, - _previous: false, - _changed: false, -}; -const heightIntrinsicCacheValuesFallback: CacheValues = { +const booleanCacheValuesFallback: CacheValues = { _value: false, _previous: false, _changed: false, @@ -139,7 +101,7 @@ const lifecycleCommunicationFallback: LifecycleCommunication = { export const createLifecycleHub = (options: OSOptions, structureSetup: StructureSetup): LifecycleHubInstance => { let lifecycleCommunication = lifecycleCommunicationFallback; - const { _host, _viewport, _content } = structureSetup._targetObj; + const { _viewport } = structureSetup._targetObj; const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, @@ -168,10 +130,11 @@ export const createLifecycleHub = (options: OSOptions, structureSetup: Structure _contentMutation = force || false, _paddingStyleChanged = force || false, } = updateHints || {}; + const finalDirectionIsRTL = - _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback); + _directionIsRTL || (_sizeObserver ? _sizeObserver._getCurrentCacheValues(force)._directionIsRTL : booleanCacheValuesFallback); const finalHeightIntrinsic = - _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback); + _heightIntrinsic || (_trinsicObserver ? _trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : booleanCacheValuesFallback); const checkOption: LifecycleCheckOption = (path) => ({ _value: getPropByPath(options, path), _changed: force || getPropByPath(changedOptions, path) !== undefined, @@ -180,6 +143,11 @@ export const createLifecycleHub = (options: OSOptions, structureSetup: Structure const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport); const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport); + // place before updating lifecycles because of possible flushing of debounce + if (_updateObserverOptions) { + _updateObserverOptions(checkOption); + } + each(lifecycles, (lifecycle) => { const { _sizeChanged: adaptiveSizeChanged, @@ -217,58 +185,7 @@ export const createLifecycleHub = (options: OSOptions, structureSetup: Structure options.callbacks.onUpdated(); } }; - - const onSizeChanged = (directionIsRTL?: CacheValues) => { - const sizeChanged = !directionIsRTL; - updateLifecycles({ - _directionIsRTL: directionIsRTL, - _sizeChanged: sizeChanged, - }); - }; - const onTrinsicChanged = (heightIntrinsic: CacheValues) => { - updateLifecycles({ - _heightIntrinsic: heightIntrinsic, - }); - }; - const onHostMutation = () => { - // TODO: rAF only here because IE - requestAnimationFrame(() => { - updateLifecycles({ - _hostMutation: true, - }); - }); - }; - const onContentMutation = () => { - // TODO: rAF only here because IE - requestAnimationFrame(() => { - updateLifecycles({ - _contentMutation: true, - }); - }); - }; - - const trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged); - const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling }); - const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, { - _styleChangingAttributes: attrs, - _attributes: attrs, - _ignoreTargetChange: ignoreTargetChange, - }); - const contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, { - _styleChangingAttributes: attrs, - _attributes: attrs, - _eventContentChange: options!.updating!.elementEvents, - _nestedTargetSelector: hostSelector, - _ignoreContentChange: (mutation, isNestedTarget) => { - const { target, attributeName } = mutation; - return isNestedTarget - ? false - : attributeName - ? liesBetween(target as Element, hostSelector, viewportSelector) || liesBetween(target as Element, hostSelector, contentSelector) - : false; - }, - _ignoreNestedTargetChange: ignoreTargetChange, - }); + const { _sizeObserver, _trinsicObserver, _updateObserverOptions } = lifecycleHubOservers(instance, updateLifecycles); const update = (changedOptions?: Partial | null, force?: boolean) => { updateLifecycles(null, changedOptions, force); diff --git a/packages/overlayscrollbars/src/lifecycles/lifecycleHubObservers.ts b/packages/overlayscrollbars/src/lifecycles/lifecycleHubObservers.ts new file mode 100644 index 0000000..9b13dd0 --- /dev/null +++ b/packages/overlayscrollbars/src/lifecycles/lifecycleHubObservers.ts @@ -0,0 +1,141 @@ +import { CacheValues, diffClass, debounce, isArray, isNumber } from 'support'; +import { getEnvironment } from 'environment'; +import { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver'; +import { createTrinsicObserver } from 'observers/trinsicObserver'; +import { createDOMObserver, DOMObserver } from 'observers/domObserver'; +import { LifecycleHub, LifecycleCheckOption, LifecycleUpdateHints } from 'lifecycles/lifecycleHub'; + +//const hostSelector = `.${classNameHost}`; + +// TODO: observer textarea attrs if textarea +// TODO: tabindex, etc. attributes for viewport +// TODO: test _ignoreContentChange & _ignoreNestedTargetChange for content dom observer +// TODO: test _ignoreTargetChange for target dom observer + +//const viewportSelector = `.${classNameViewport}`; +//const contentSelector = `.${classNameContent}`; +const ignorePrefix = 'os-'; +const viewportAttrsFromTarget = ['tabindex']; +const baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows']; +const baseStyleChangingAttrs = ['id', 'class', 'style', 'open']; + +const ignoreTargetChange = (target: Node, attrName: string, oldValue: string | null, newValue: string | null) => { + if (attrName === 'class' && oldValue && newValue) { + const diff = diffClass(oldValue, newValue); + return !!diff.find((addedOrRemovedClass) => addedOrRemovedClass.indexOf(ignorePrefix) !== 0); + } + return false; +}; + +export const lifecycleHubOservers = (instance: LifecycleHub, updateLifecycles: (updateHints?: Partial | null) => unknown) => { + let debounceTimeout: number | false | undefined; + let debounceMaxDelay: number | false | undefined; + const { _structureSetup } = instance; + const { _targetObj, _targetCtx } = _structureSetup; + const { _host, _viewport, _content } = _targetObj; + const { _isTextarea } = _targetCtx; + const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment(); + const contentMutationObserverAttr = _isTextarea ? baseStyleChangingAttrsTextarea : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea); + const updateLifecyclesWithDebouncedAdaptiveUpdateHints = debounce(updateLifecycles as (updateHints: Partial) => any, { + _timeout: () => debounceTimeout, + _maxDelay: () => debounceMaxDelay, + _mergeParams(prev, curr) { + const { _sizeChanged: prevSizeChanged, _hostMutation: prevHostMutation, _contentMutation: prevContentMutation } = prev[0]; + const { _sizeChanged: currSizeChanged, _hostMutation: currvHostMutation, _contentMutation: currContentMutation } = curr[0]; + const merged: [Partial] = [ + { + _sizeChanged: prevSizeChanged || currSizeChanged, + _hostMutation: prevHostMutation || currvHostMutation, + _contentMutation: prevContentMutation || currContentMutation, + }, + ]; + + return merged; + }, + }); + + const onTrinsicChanged = (heightIntrinsic: CacheValues) => { + updateLifecycles({ + _heightIntrinsic: heightIntrinsic, + }); + }; + const onSizeChanged = ({ _sizeChanged, _directionIsRTLCache, _appear }: SizeObserverCallbackParams) => { + const updateFn = !_sizeChanged || _appear ? updateLifecycles : updateLifecyclesWithDebouncedAdaptiveUpdateHints; + updateFn({ + _sizeChanged, + _directionIsRTL: _directionIsRTLCache, + }); + }; + const onContentMutation = (contentChangedTroughEvent: boolean) => { + // if contentChangedTroughEvent is true its already debounced + const updateFn = contentChangedTroughEvent ? updateLifecycles : updateLifecyclesWithDebouncedAdaptiveUpdateHints; + updateFn({ + _contentMutation: true, + }); + }; + const onHostMutation = updateLifecyclesWithDebouncedAdaptiveUpdateHints.bind(0, { + _hostMutation: true, + }) as () => any; + + const trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged); + const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling }); + const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, { + _styleChangingAttributes: baseStyleChangingAttrs, + _attributes: baseStyleChangingAttrs, + _ignoreTargetChange: ignoreTargetChange, + }); + let contentMutationObserver: DOMObserver | undefined; + + const updateOptions = (checkOption: LifecycleCheckOption) => { + const { _value: elementEvents, _changed: elementEventsChanged } = checkOption | null>('updating.elementEvents'); + const { _value: attributes, _changed: attributesChanged } = checkOption('updating.attributes'); + const { _value: debounce, _changed: debounceChanged } = checkOption | number | null>('updating.debounce'); + const updateContentMutationObserver = elementEventsChanged || attributesChanged; + + if (updateContentMutationObserver) { + if (contentMutationObserver) { + contentMutationObserver._update(); + contentMutationObserver._destroy(); + } + contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, { + _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []), + _attributes: contentMutationObserverAttr.concat(attributes || []), + _eventContentChange: elementEvents, + _ignoreNestedTargetChange: ignoreTargetChange, + //_nestedTargetSelector: hostSelector, + /* + _ignoreContentChange: (mutation, isNestedTarget) => { + const { target, attributeName } = mutation; + return isNestedTarget + ? false + : attributeName + ? liesBetween(target as Element, hostSelector, viewportSelector) || liesBetween(target as Element, hostSelector, contentSelector) + : false; + }, + */ + }); + } + + if (debounceChanged) { + updateLifecyclesWithDebouncedAdaptiveUpdateHints._flush(); + if (isArray(debounce)) { + const timeout = debounce[0]; + const maxWait = debounce[1]; + debounceTimeout = isNumber(timeout) ? timeout : false; + debounceMaxDelay = isNumber(maxWait) ? maxWait : false; + } else if (isNumber(debounce)) { + debounceTimeout = debounce; + debounceMaxDelay = false; + } else { + debounceTimeout = false; + debounceMaxDelay = false; + } + } + }; + + return { + _trinsicObserver: trinsicObserver, + _sizeObserver: sizeObserver, + _updateObserverOptions: updateOptions, + }; +}; diff --git a/packages/overlayscrollbars/src/observers/domObserver.ts b/packages/overlayscrollbars/src/observers/domObserver.ts index 6674f4a..fc826a3 100644 --- a/packages/overlayscrollbars/src/observers/domObserver.ts +++ b/packages/overlayscrollbars/src/observers/domObserver.ts @@ -13,12 +13,11 @@ import { find, push, isUndefined, - isFunction, } from 'support'; type StringNullUndefined = string | null | undefined; -type DOMContentObserverCallback = (contentChanged: boolean) => any; +type DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any; type DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any; @@ -38,18 +37,7 @@ interface DOMTargetObserverOptions extends DOMObserverOptionsBase { _ignoreTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed if it returns true } -interface DOMObserverBase { - _destroy: () => void; - _update: () => void; -} - -interface DOMContentObserver extends DOMObserverBase { - _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void; -} - -interface DOMTargetObserver extends DOMObserverBase {} - -type ContentChangeArrayItem = [StringNullUndefined, ((elms: Node[]) => StringNullUndefined) | StringNullUndefined] | null | undefined; +type ContentChangeArrayItem = [StringNullUndefined, StringNullUndefined] | null | undefined; export type DOMObserverEventContentChange = Array | false | null | undefined; @@ -57,7 +45,7 @@ export type DOMObserverIgnoreContentChange = ( mutation: MutationRecord, isNestedTarget: boolean, domObserverTarget: HTMLElement, - domObserverOptions: DOMContentObserverOptions | undefined + domObserverOptions?: DOMContentObserverOptions ) => boolean; export type DOMObserverIgnoreTargetChange = ( @@ -73,10 +61,10 @@ export type DOMObserverCallback = ContentObserv export type DOMObserverOptions = ContentObserver extends true ? DOMContentObserverOptions : DOMTargetObserverOptions; -export type DOMObserver = ContentObserver extends true ? DOMContentObserver : DOMTargetObserver; - -// const styleChangingAttributes = ['id', 'class', 'style', 'open']; -// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows']; +export interface DOMObserver { + _destroy: () => void; + _update: () => void; +} /** * Creates a set of helper functions to observe events of elements inside the target element. @@ -87,7 +75,6 @@ export type DOMObserver = ContentObserver exten */ const createEventContentChange = (target: Element, eventContentChange: DOMObserverEventContentChange, callback: (...args: any) => any) => { let map: Map | undefined; - let eventContentChangeRef: DOMObserverEventContentChange; const _destroy = () => { if (map) { map.forEach((eventName: string, elm: Node) => off(elm, eventName, callback)); @@ -95,16 +82,15 @@ const createEventContentChange = (target: Element, eventContentChange: DOMObserv } }; const _updateElements = (getElements?: (selector: string) => Node[]) => { - if (map && eventContentChangeRef) { - const eventElmList = eventContentChangeRef.reduce>((arr, item) => { + if (map && eventContentChange) { + const eventElmList = eventContentChange.reduce>((arr, item) => { if (item) { const selector = item[0]; const eventNames = item[1]; const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target)); - const parsedEventNames = isFunction(eventNames) ? eventNames(elements) : eventNames; - if (elements && elements.length && parsedEventNames && isString(parsedEventNames)) { - push(arr, [elements, parsedEventNames.trim()], true); + if (elements && elements.length && eventNames && isString(eventNames)) { + push(arr, [elements, eventNames.trim()], true); } } return arr; @@ -128,21 +114,16 @@ const createEventContentChange = (target: Element, eventContentChange: DOMObserv ); } }; - const _updateEventContentChange = (newEventContentChange: DOMObserverEventContentChange) => { - map = map || new Map(); - eventContentChangeRef = newEventContentChange; - _destroy(); - _updateElements(); - }; if (eventContentChange) { - _updateEventContentChange(eventContentChange); + map = map || new Map(); + _destroy(); + _updateElements(); } return { _destroy, _updateElements, - _updateEventContentChange, }; }; @@ -159,7 +140,7 @@ export const createDOMObserver = ( isContentObserver: ContentObserver, callback: DOMObserverCallback, options?: DOMObserverOptions -): DOMObserver => { +): DOMObserver => { let isConnected = false; const { _attributes, @@ -170,18 +151,17 @@ export const createDOMObserver = ( _ignoreNestedTargetChange, _ignoreContentChange, } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {}; - const { - _destroy: destroyEventContentChange, - _updateElements: updateEventContentChangeElements, - _updateEventContentChange: updateEventContentChange, - } = createEventContentChange( + const { _destroy: destroyEventContentChange, _updateElements: updateEventContentChangeElements } = createEventContentChange( target, isContentObserver && _eventContentChange, - debounce(() => { - if (isConnected) { - (callback as DOMContentObserverCallback)(true); - } - }, 84) + debounce( + () => { + if (isConnected) { + (callback as DOMContentObserverCallback)(true); + } + }, + { _timeout: 33, _maxDelay: 99 } + ) ); // MutationObserver @@ -243,7 +223,7 @@ export const createDOMObserver = ( } if (isContentObserver) { - contentChanged && (callback as DOMContentObserverCallback)(contentChanged); + contentChanged && (callback as DOMContentObserverCallback)(false); } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) { (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged); } @@ -269,13 +249,10 @@ export const createDOMObserver = ( isConnected = false; } }, - _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => { - updateEventContentChange(isConnected && isContentObserver && newEventContentChange); - }, _update: () => { if (isConnected) { observerCallback(mutationObserver.takeRecords()); } }, - } as DOMObserver; + }; }; diff --git a/packages/overlayscrollbars/src/observers/sizeObserver.ts b/packages/overlayscrollbars/src/observers/sizeObserver.ts index 882fa9c..b8d7dd4 100644 --- a/packages/overlayscrollbars/src/observers/sizeObserver.ts +++ b/packages/overlayscrollbars/src/observers/sizeObserver.ts @@ -33,7 +33,16 @@ import { classNameSizeObserverListenerItemFinal, } from 'classnames'; -export type SizeObserverOptions = { _direction?: boolean; _appear?: boolean }; +export interface SizeObserverOptions { + _direction?: boolean; + _appear?: boolean; +} + +export interface SizeObserverCallbackParams { + _sizeChanged: boolean; + _directionIsRTLCache?: CacheValues; + _appear?: boolean; +} export interface SizeObserver { _destroy(): void; @@ -73,7 +82,7 @@ const domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || */ export const createSizeObserver = ( target: HTMLElement, - onSizeChangedCallback: (directionIsRTLCache?: CacheValues) => any, + onSizeChangedCallback: (params: SizeObserverCallbackParams) => any, options?: SizeObserverOptions ): SizeObserver => { const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {}; @@ -90,31 +99,44 @@ export const createSizeObserver = ( (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal)) ), }); - const onSizeChangedCallbackProxy = (sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event) => { + const onSizeChangedCallbackProxy = (sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean) => { const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as CacheValues)._value); let skip = false; + let appear: boolean | number | undefined = false; let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill) // if triggered from RO. if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) { - const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect); - skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none - doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise + const { _previous, _value } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect); + const hasDimensions = domRectHasDimensions(_value); + const hadDimensions = domRectHasDimensions(_previous); + skip = !_previous || !hasDimensions; // skip on initial RO. call or if display is none + appear = !hadDimensions && hasDimensions; + + doDirectionScroll = !skip; // direction scroll when not skipping } // else if its triggered with DirectionCache else if (hasDirectionCache) { doDirectionScroll = (sizeChangedContext as CacheValues)._changed; // direction scroll when DirectionCache changed, false otherwise } + // else if it triggered with appear from polyfill + else { + appear = sizeChangedContext === true; + } - if (observeDirectionChange) { + if (observeDirectionChange && doDirectionScroll) { const rtl = hasDirectionCache ? (sizeChangedContext as CacheValues)._value : directionIsRTL(sizeObserver); scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount); scrollTop(sizeObserver, scrollAmount); } if (!skip) { - onSizeChangedCallback(hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined); + onSizeChangedCallback({ + _sizeChanged: !hasDirectionCache, + _directionIsRTLCache: hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined, + _appear: !!appear, + }); } }; const offListeners: (() => void)[] = []; @@ -147,11 +169,11 @@ export const createSizeObserver = ( scrollLeft(shrinkElement, scrollAmount); scrollTop(shrinkElement, scrollAmount); }; - const onResized = () => { + const onResized = (appear?: unknown) => { rAFId = 0; if (isDirty) { cacheSize = currSize; - onSizeChangedCallbackProxy(); + onSizeChangedCallbackProxy(appear === true); } }; const onScroll = (scrollEvent?: Event | false) => { @@ -166,7 +188,7 @@ export const createSizeObserver = ( rAFId = rAF!(onResized); } } else { - onResized(); + onResized(scrollEvent === false); } reset(); diff --git a/packages/overlayscrollbars/src/options.ts b/packages/overlayscrollbars/src/options.ts index 0ca69f7..5c77b14 100644 --- a/packages/overlayscrollbars/src/options.ts +++ b/packages/overlayscrollbars/src/options.ts @@ -35,9 +35,8 @@ export interface OSOptions { paddingAbsolute: boolean; updating: { elementEvents: Array<[string, string]> | null; - contentMutationDebounce: number; - hostMutationDebounce: number; - resizeDebounce: number; + attributes: string[] | null; + debounce: number | [number, number] | null; }; overflow: { x: OverflowBehavior; @@ -109,6 +108,7 @@ export interface UpdatedArgs { } const numberAllowedValues: OptionsTemplateValue = oTypes.number; +const arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null]; const stringArrayNullAllowedValues: OptionsTemplateValue | null> = [oTypes.string, oTypes.array, oTypes.null]; const booleanTrueTemplate: OptionsWithOptionsTemplateValue = [true, oTypes.boolean]; const booleanFalseTemplate: OptionsWithOptionsTemplateValue = [false, oTypes.boolean]; @@ -137,10 +137,12 @@ const defaultOptionsWithTemplate: OptionsWithOptionsTemplate = { resize: ['none', resizeAllowedValues], // none || both || horizontal || vertical || n || b || h || v paddingAbsolute: booleanFalseTemplate, // true || false updating: { - elementEvents: [[['img', 'load']], [oTypes.array, oTypes.null]], // array of tuples || null - contentMutationDebounce: [80, numberAllowedValues], // number - hostMutationDebounce: [0, numberAllowedValues], // number - resizeDebounce: [0, numberAllowedValues], // number + elementEvents: [[['img', 'load']], arrayNullValues], // array of tuples || null + attributes: [null, arrayNullValues], + debounce: [ + [0, 33], + [oTypes.number, oTypes.array, oTypes.null], + ], // number || number array || null }, overflow: { x: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s diff --git a/packages/overlayscrollbars/src/support/utils/function.ts b/packages/overlayscrollbars/src/support/utils/function.ts index c5d7f8f..d0925ad 100644 --- a/packages/overlayscrollbars/src/support/utils/function.ts +++ b/packages/overlayscrollbars/src/support/utils/function.ts @@ -1,36 +1,103 @@ -import { isNumber } from 'support/utils/types'; -import { cAF, rAF } from 'support/compatibility/apis'; +import { isNumber, isFunction } from 'support/utils/types'; +import { rAF, cAF } from 'support/compatibility/apis'; + +const setT = window.setTimeout; +const clearTimeouts = (id: number | undefined) => { + id && window.clearTimeout(id); + id && cAF!(id); +}; + +type DebounceTiming = number | false | null | undefined; + +export interface DebounceOptions any> { + /** + * The timeout for debouncing. If null, no debounce is applied. + */ + _timeout?: DebounceTiming | (() => DebounceTiming); + /** + * A maximum amount of ms. before the function will be called even with debounce. + */ + _maxDelay?: DebounceTiming | (() => DebounceTiming); + /** + * Function which merges parameters for each canceled debounce. + * If parameters can't be merged the function will return null, otherwise it returns the merged parameters. + */ + _mergeParams?: ( + prev: Parameters, + curr: Parameters + ) => Parameters | false | null | undefined; +} + +export interface Debounced any> { + (...args: Parameters): ReturnType; + _flush(): void; +} export const noop = () => {}; // eslint-disable-line /** * Debounces the given function either with a timeout or a animation frame. * @param functionToDebounce The function which shall be debounced. - * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise. - * @param maxWait A maximum amount of ms. before the function will be called even with debounce. + * @param options Options for debouncing. */ -export const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => { - let timeoutId: number | void; - let lastCallTime: number; - const hasTimeout = isNumber(timeout) && timeout > 0; - const hasMaxWait = isNumber(maxWait) && maxWait > 0; - const cancel = hasTimeout ? window.clearTimeout : cAF!; - const set = hasTimeout ? window.setTimeout : rAF!; - const setFn = function (args: IArguments) { - lastCallTime = hasMaxWait ? performance.now() : 0; - timeoutId && cancel(timeoutId); +export const debounce = any>( + functionToDebounce: FunctionToDebounce, + options: DebounceOptions +): Debounced => { + let timeoutId: number | undefined; + let maxTimeoutId: number | undefined; + let prevArguments: Parameters | null | undefined; + let latestArguments: Parameters | null | undefined; + const { _timeout, _maxDelay, _mergeParams } = options; + + const invokeFunctionToDebounce = function (args: IArguments) { + clearTimeouts(timeoutId); + clearTimeouts(maxTimeoutId); + maxTimeoutId = timeoutId = prevArguments = undefined; // eslint-disable-next-line // @ts-ignore functionToDebounce.apply(this, args); }; - return function () { - // eslint-disable-next-line - // @ts-ignore - const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line - const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false; + const mergeParms = (curr: Parameters): Parameters | false | null | undefined => + _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr; - timeoutId && cancel(timeoutId); - timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number); + const flush = () => { + if (timeoutId) { + invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!); + } }; + + const debouncedFn = function () { + const args: Parameters = arguments as Parameters; + const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout; + const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0; + + if (hasTimeout) { + const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay; + const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0; + const setTimeoutFn = finalTimeout! > 0 ? setT : rAF!; + const mergeParamsResult = mergeParms(args); + const invokedArgs = mergeParamsResult || args; + const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs); + + if (!mergeParamsResult) { + invokeFunctionToDebounce(prevArguments || args); + } + + clearTimeouts(timeoutId); + timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number; + + if (hasMaxWait && !maxTimeoutId) { + maxTimeoutId = setT(flush, finalMaxWait as number); + } + + prevArguments = latestArguments = invokedArgs; + } else { + invokeFunctionToDebounce(args); + } + }; + debouncedFn._flush = flush; + + return debouncedFn as Debounced; }; diff --git a/packages/overlayscrollbars/tests/browser/observers/domObserver/index.browser.ts b/packages/overlayscrollbars/tests/browser/observers/domObserver/index.browser.ts index 44ef84c..a9b31b1 100644 --- a/packages/overlayscrollbars/tests/browser/observers/domObserver/index.browser.ts +++ b/packages/overlayscrollbars/tests/browser/observers/domObserver/index.browser.ts @@ -4,24 +4,14 @@ import should from 'should'; import { generateSelectCallback, iterateSelect } from '@/testing-browser/Select'; import { timeout } from '@/testing-browser/timeout'; import { setTestResult, waitForOrFailTest } from '@/testing-browser/TestResult'; -import { - appendChildren, - createDiv, - removeElements, - children, - isArray, - isNumber, - liesBetween, - hasClass, - addClass, - removeClass, - diffClass, - on, -} from 'support'; +import { appendChildren, createDiv, removeElements, children, isArray, isNumber, liesBetween, addClass, removeClass, diffClass, on } from 'support'; import { createDOMObserver } from 'observers/domObserver'; -type DOMContentObserverResult = boolean; +type DOMContentObserverResult = { + contentChange: boolean; + troughEvent: boolean; +}; type DOMTargetObserverResult = { changedTargetAttrs: string[]; styleChanged: boolean; @@ -34,6 +24,7 @@ interface SeparateChangeThrough { const targetChangesCountSlot: HTMLElement | null = document.querySelector('#targetChanges'); const contentChangesCountSlot: HTMLElement | null = document.querySelector('#contentChanges'); const targetElm: HTMLElement | null = document.querySelector('#target'); +const trargetContentElm: HTMLElement | null = document.querySelector('#target .content'); const targetElmContentElm: HTMLElement | null = document.querySelector('#content-host'); const contentElmAttrChange: HTMLElement | null = document.querySelector('#target .content-nest'); const contentBetweenElmAttrChange: HTMLElement | null = document.querySelector('#content-host .padding-nest-item'); @@ -67,7 +58,7 @@ const startBtn: HTMLButtonElement | null = document.querySelector('#start'); const hostSelector = '.host'; const ignorePrefix = 'ignore'; const attrs = ['id', 'class', 'style', 'open']; -const contentChangeArr: Array<[string, string | ((elms: Node[]) => string)]> = [['img', 'load']]; +const contentChangeArr: Array<[string, string]> = [['img', 'load']]; const domTargetObserverObservations: DOMTargetObserverResult[] = []; const domContentObserverObservations: DOMContentObserverResult[] = []; @@ -115,44 +106,48 @@ const targetDomObserver = createDOMObserver( } ); -const contentDomObserver = createDOMObserver( - document.querySelector('#target .content')!, - true, - (contentChanged: boolean) => { - should.equal(typeof contentChanged, 'boolean', 'The contentChanged parameter in a content dom observer must be a boolean.'); +const createContentDomOserver = (eventContentChange: Array<[string | null | undefined, string | null | undefined] | null | undefined>) => { + return createDOMObserver( + trargetContentElm!, + true, + (contentChangedTroughEvent: boolean) => { + should.equal(typeof contentChangedTroughEvent, 'boolean', 'The contentChanged parameter in a content dom observer must be a boolean.'); - domContentObserverObservations.push(contentChanged); - requestAnimationFrame(() => { - if (contentChangesCountSlot) { - contentChangesCountSlot.textContent = `${domContentObserverObservations.length}`; - } - }); - }, - { - _styleChangingAttributes: attrs, - _attributes: attrs, - _eventContentChange: contentChangeArr, - _nestedTargetSelector: hostSelector, - _ignoreContentChange: (mutation, isNestedTarget) => { - const { target, attributeName } = mutation; - return isNestedTarget ? false : attributeName ? liesBetween(target as Element, hostSelector, '.content') : false; + domContentObserverObservations.push({ contentChange: true, troughEvent: contentChangedTroughEvent }); + requestAnimationFrame(() => { + if (contentChangesCountSlot) { + contentChangesCountSlot.textContent = `${domContentObserverObservations.length}`; + } + }); }, - _ignoreNestedTargetChange: (target, attrName, oldValue, newValue) => { - if (attrName === 'class' && oldValue && newValue) { - const diff = diffClass(oldValue, newValue); - const ignore = diff.length === 1 && diff[0].startsWith(ignorePrefix); - return ignore; - } - return false; - }, - // @ts-ignore - _ignoreTargetChange: () => { - // if param: isContentObserver = true, this function should never be called. - should.ok(false, 'A content dom observer must not call the _ignoreTargetChange method.'); - return true; - }, - } -); + { + _styleChangingAttributes: attrs, + _attributes: attrs, + _eventContentChange: eventContentChange, + _nestedTargetSelector: hostSelector, + _ignoreContentChange: (mutation, isNestedTarget) => { + const { target, attributeName } = mutation; + return isNestedTarget ? false : attributeName ? liesBetween(target as Element, hostSelector, '.content') : false; + }, + _ignoreNestedTargetChange: (target, attrName, oldValue, newValue) => { + if (attrName === 'class' && oldValue && newValue) { + const diff = diffClass(oldValue, newValue); + const ignore = diff.length === 1 && diff[0].startsWith(ignorePrefix); + return ignore; + } + return false; + }, + // @ts-ignore + _ignoreTargetChange: () => { + // if param: isContentObserver = true, this function should never be called. + should.ok(false, 'A content dom observer must not call the _ignoreTargetChange method.'); + return true; + }, + } + ); +}; + +let contentDomObserver = createContentDomOserver(contentChangeArr); const getTotalObservations = () => domTargetObserverObservations.length + domContentObserverObservations.length; const getLast = (arr: T[], indexFromLast = 0): T => arr[arr.length - 1 - indexFromLast] || ({} as T); @@ -277,7 +272,7 @@ const addRemoveElementsTest = async (slot: Element | null, changeThrough?: DOMCo if (addChangeThrough) { const contentChanged = getLast(addChangeThrough); await waitForOrFailTest(() => { - should.equal(contentChanged, true, 'Adding an content element must result in a content change.'); + should.deepEqual(contentChanged, { contentChange: true, troughEvent: false }, 'Adding an content element must result in a content change.'); }); } }; @@ -297,7 +292,11 @@ const addRemoveElementsTest = async (slot: Element | null, changeThrough?: DOMCo if (removeChangeThrough) { const contentChanged = getLast(removeChangeThrough); - should.equal(contentChanged, true, 'Removing an content element must result in a content change.'); + should.deepEqual( + contentChanged, + { contentChange: true, troughEvent: false }, + 'Removing an content element must result in a content change.' + ); } }); } @@ -361,10 +360,14 @@ const addRemoveImgElmsFn = async () => { compare(2); const previousContentChanged = getLast(domContentObserverObservations, 1); - should.equal(previousContentChanged, true, 'Adding an content image must result in a content change.'); + should.deepEqual( + previousContentChanged, + { contentChange: true, troughEvent: false }, + 'Adding an content image must result in a content change.' + ); const lastContentChanged = getLast(domContentObserverObservations); - should.equal(lastContentChanged, true, 'The images load event must result in a content change.'); + should.deepEqual(lastContentChanged, { contentChange: true, troughEvent: true }, 'The images load event must result in a content change.'); }); }; @@ -375,21 +378,20 @@ const addRemoveImgElmsFn = async () => { // test event content change debounce const addMultiple = async () => { const { before, after, compare } = changedThrough(domContentObserverObservations); - const addMultipleItem = () => { + const genImage = () => { const img = new Image(1, 1); img.src = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='; const imgHolder = createDiv('img'); appendChildren(imgHolder, img); - appendChildren(imgElmsSlot, imgHolder); + return imgHolder; }; - before(); + await timeout(250); - addMultipleItem(); - addMultipleItem(); - addMultipleItem(); + before(); + appendChildren(imgElmsSlot, [genImage(), genImage(), genImage()]); await timeout(250); @@ -398,20 +400,27 @@ const addRemoveImgElmsFn = async () => { compare(2); const previousContentChanged = getLast(domContentObserverObservations, 1); - should.equal(previousContentChanged, true, 'Adding mutliple content images must result in a single content change. (debounced)'); + should.deepEqual( + previousContentChanged, + { contentChange: true, troughEvent: false }, + 'Adding mutliple content images must result in a single content change. (debounced)' + ); const lastContentChanged = getLast(domContentObserverObservations); - should.equal(lastContentChanged, true, 'Multiple images load events must result in a single cintent change. (debounced)'); + should.deepEqual( + lastContentChanged, + { contentChange: true, troughEvent: true }, + 'Multiple images load events must result in a single cintent change. (debounced)' + ); }); }; await addMultiple(); // remove load event from image test - const addChanged = async ( - newEventContentChange: Array<[string | null | undefined, (() => string | null | undefined) | string | null | undefined] | null | undefined> - ) => { - contentDomObserver._updateEventContentChange(newEventContentChange); + const addChanged = async (newEventContentChange: Array<[string | null | undefined, string | null | undefined] | null | undefined>) => { + contentDomObserver._destroy(); + contentDomObserver = createContentDomOserver(newEventContentChange); const img = new Image(1, 1); img.src = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='; @@ -430,7 +439,8 @@ const addRemoveImgElmsFn = async () => { compare(1); }); - contentDomObserver._updateEventContentChange(contentChangeArr); + contentDomObserver._destroy(); + contentDomObserver = createContentDomOserver(contentChangeArr); }; await addChanged([ @@ -440,9 +450,6 @@ const addRemoveImgElmsFn = async () => { ['img', undefined], [null, null], [undefined, undefined], - ['img', () => 'hi'], - ['img', () => null], - ['img', () => undefined], null, undefined, ]); @@ -471,7 +478,11 @@ const addRemoveTransitionElmsFn = async () => { compareTransition(expectTransitionEndContentChange ? 2 : 1); // 2 because 1: added class mutation and 2: transition end event const contentChanged = getLast(domContentObserverObservations); - should.equal(contentChanged, true, 'The transitionend event must trigger a event content change.'); + should.deepEqual( + contentChanged, + { contentChange: true, troughEvent: expectTransitionEndContentChange }, + 'The transitionend event must trigger a event content change.' + ); resolve(1); }); }, @@ -495,11 +506,16 @@ const addRemoveTransitionElmsFn = async () => { compare(1); const contentChanged = getLast(domContentObserverObservations); - should.equal(contentChanged, true, 'Adding an content element (transition) must result in a content change.'); + should.deepEqual( + contentChanged, + { contentChange: true, troughEvent: false }, + 'Adding an content element (transition) must result in a content change.' + ); }); await startTransition(elm, expectTransitionEndContentChange && true); - contentDomObserver._updateEventContentChange(contentChangeArr); + contentDomObserver._destroy(); + contentDomObserver = createContentDomOserver(contentChangeArr); await startTransition(elm, expectTransitionEndContentChange && false); removeElements(elm); @@ -509,19 +525,8 @@ const addRemoveTransitionElmsFn = async () => { await add(false); - contentDomObserver._updateEventContentChange( - contentChangeArr.concat([ - [ - '.transition', - (elms) => { - elms.forEach((elm) => { - should.equal(hasClass(elm as Element, 'transition'), true, 'Every checked element must match the correpsonding selector.'); // in this case "".transition" - }); - return 'transitionend'; - }, - ], - ]) - ); + contentDomObserver._destroy(); + contentDomObserver = createContentDomOserver(contentChangeArr.concat([['.transition', 'transitionend']])); await add(true); }; @@ -562,7 +567,11 @@ const iterateTargetAttrChange = async () => { const iterateContentAttrChange = async () => { await iterateAttrChange(setContentAttr, domContentObserverObservations, (observation) => { const contentChanged = observation; - should.equal(contentChanged, true, 'A attribute change inside the content must trigger a content change for a DOMContentObserver.'); + should.deepEqual( + contentChanged, + { contentChange: true, troughEvent: false }, + 'A attribute change inside the content must trigger a content change for a DOMContentObserver.' + ); }); await iterateAttrChange(setFilteredContentAttr); }; @@ -573,7 +582,11 @@ const iterateContentBetweenAttrChange = async () => { const iterateContentHostElmAttrChange = async () => { await iterateAttrChange(setContentHostElmAttr, domContentObserverObservations, (observation) => { const contentChanged = observation; - should.equal(contentChanged, true, 'A attribute change for a nested target must trigger a content change for a DOMContentObserver.'); + should.deepEqual( + contentChanged, + { contentChange: true, troughEvent: false }, + 'A attribute change for a nested target must trigger a content change for a DOMContentObserver.' + ); }); await iterateAttrChange(setFilteredContentHostElmAttr); }; @@ -626,11 +639,9 @@ const start = async () => { targetDomObserver._destroy(); targetDomObserver._update(); - contentDomObserver._updateEventContentChange([]); contentDomObserver._update(); contentDomObserver._destroy(); contentDomObserver._destroy(); - contentDomObserver._updateEventContentChange([]); contentDomObserver._update(); }; diff --git a/packages/overlayscrollbars/tests/browser/observers/sizeObserver/index.browser.ts b/packages/overlayscrollbars/tests/browser/observers/sizeObserver/index.browser.ts index b9e0415..74b33c5 100644 --- a/packages/overlayscrollbars/tests/browser/observers/sizeObserver/index.browser.ts +++ b/packages/overlayscrollbars/tests/browser/observers/sizeObserver/index.browser.ts @@ -37,12 +37,14 @@ const preInitChildren = targetElm?.children.length; const sizeObserver = createSizeObserver( targetElm as HTMLElement, - (directionIsRTLCache?: any) => { - if (directionIsRTLCache) { - directionIterations += 1; - } else { + ({ _directionIsRTLCache, _sizeChanged, _appear }) => { + if (_sizeChanged) { sizeIterations += 1; } + + if (_directionIsRTLCache) { + directionIterations += 1; + } requestAnimationFrame(() => { if (resizesSlot) { resizesSlot.textContent = (directionIterations + sizeIterations).toString(); diff --git a/rollup.config.base.js b/rollup.config.base.js index d9e7af3..c8a8e44 100644 --- a/rollup.config.base.js +++ b/rollup.config.base.js @@ -268,7 +268,7 @@ const rollupConfig = (config = {}, { project = process.cwd(), overwrite = {}, si plugins: [ ...(output.plugins || []), rollupTerser({ - ecma: 8, + ecma: esm ? 2015 : 5, safari10: true, mangle: { safari10: true, From e96c5d96ae886e1b840965c5086ed5fe9eb5739a Mon Sep 17 00:00:00 2001 From: Rene Date: Thu, 13 May 2021 23:09:01 +0200 Subject: [PATCH 2/3] build --- .../dist/overlayscrollbars.esm.js | 1141 ++++++++------- .../dist/overlayscrollbars.esm.js.map | 2 +- .../dist/overlayscrollbars.esm.min.js | 2 +- .../dist/overlayscrollbars.js | 1276 +++++++++-------- .../dist/overlayscrollbars.js.map | 2 +- .../dist/overlayscrollbars.min.js | 2 +- .../lifecycles/lifecycleHubObservers.d.ts | 6 + .../types/observers/domObserver.d.ts | 22 +- .../types/observers/sizeObserver.d.ts | 11 +- packages/overlayscrollbars/types/options.d.ts | 5 +- .../types/support/utils/function.d.ts | 26 +- 11 files changed, 1341 insertions(+), 1154 deletions(-) create mode 100644 packages/overlayscrollbars/types/lifecycles/lifecycleHubObservers.d.ts diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index d34a3b5..fa65461 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -213,11 +213,6 @@ const find = (selector, elm) => { return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr; }; -const findFirst = (selector, elm) => { - const rootElm = elm ? (isElement(elm) ? elm : null) : document; - return rootElm ? rootElm.querySelector(selector) : null; -}; - const is = (elm, selector) => { if (isElement(elm)) { const fn = elmPrototype.matches || elmPrototype.msMatchesSelector; @@ -231,36 +226,6 @@ const contents = (elm) => (elm ? from(elm.childNodes) : []); const parent = (elm) => (elm ? elm.parentElement : null); -const closest = (elm, selector) => { - if (isElement(elm)) { - const closestFn = elmPrototype.closest; - - if (closestFn) { - return closestFn.call(elm, selector); - } - - do { - if (is(elm, selector)) { - return elm; - } - - elm = parent(elm); - } while (elm); - } - - return null; -}; - -const liesBetween = (elm, highBoundarySelector, deepBoundarySelector) => { - const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector); - const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm); - return closestHighBoundaryElm && closestDeepBoundaryElm - ? closestHighBoundaryElm === elm || - closestDeepBoundaryElm === elm || - closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm - : false; -}; - const before = (parentElm, preferredAnchor, insertedElms) => { if (insertedElms) { let anchor = preferredAnchor; @@ -526,27 +491,68 @@ const equalWH = (a, b) => equal(a, b, ['w', 'h']); const equalTRBL = (a, b) => equal(a, b, ['t', 'r', 'b', 'l']); const equalBCRWH = (a, b, round) => equal(a, b, ['width', 'height'], round && ((value) => Math.round(value))); -const noop = () => {}; -const debounce = (functionToDebounce, timeout, maxWait) => { - let timeoutId; - let lastCallTime; - const hasTimeout = isNumber(timeout) && timeout > 0; - const hasMaxWait = isNumber(maxWait) && maxWait > 0; - const cancel = hasTimeout ? window.clearTimeout : cAF; - const set = hasTimeout ? window.setTimeout : rAF; +const setT = window.setTimeout; - const setFn = function setFn(args) { - lastCallTime = hasMaxWait ? performance.now() : 0; - timeoutId && cancel(timeoutId); +const clearTimeouts = (id) => { + id && window.clearTimeout(id); + id && cAF(id); +}; + +const noop = () => {}; +const debounce = (functionToDebounce, options) => { + let timeoutId; + let maxTimeoutId; + let prevArguments; + let latestArguments; + const { _timeout, _maxDelay, _mergeParams } = options; + + const invokeFunctionToDebounce = function invokeFunctionToDebounce(args) { + clearTimeouts(timeoutId); + clearTimeouts(maxTimeoutId); + maxTimeoutId = timeoutId = prevArguments = undefined; functionToDebounce.apply(this, args); }; - return function () { - const boundSetFn = setFn.bind(this, arguments); - const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait : false; - timeoutId && cancel(timeoutId); - timeoutId = forceCall ? boundSetFn() : set(boundSetFn, timeout); + const mergeParms = (curr) => (_mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr); + + const flush = () => { + if (timeoutId) { + invokeFunctionToDebounce(mergeParms(latestArguments) || latestArguments); + } }; + + const debouncedFn = function debouncedFn() { + const args = arguments; + const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout; + const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0; + + if (hasTimeout) { + const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay; + const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0; + const setTimeoutFn = finalTimeout > 0 ? setT : rAF; + const mergeParamsResult = mergeParms(args); + const invokedArgs = mergeParamsResult || args; + const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs); + + if (!mergeParamsResult) { + invokeFunctionToDebounce(prevArguments || args); + } + + clearTimeouts(timeoutId); + timeoutId = setTimeoutFn(boundInvoke, finalTimeout); + + if (hasMaxWait && !maxTimeoutId) { + maxTimeoutId = setT(flush, finalMaxWait); + } + + prevArguments = latestArguments = invokedArgs; + } else { + invokeFunctionToDebounce(args); + } + }; + + debouncedFn._flush = flush; + return debouncedFn; }; const cssNumber = { @@ -781,6 +787,7 @@ const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerI const classNameTrinsicObserver = 'os-trinsic-observer'; const numberAllowedValues = optionsTemplateTypes.number; +const arrayNullValues = [optionsTemplateTypes.array, optionsTemplateTypes.null]; const stringArrayNullAllowedValues = [optionsTemplateTypes.string, optionsTemplateTypes.array, optionsTemplateTypes.null]; const booleanTrueTemplate = [true, optionsTemplateTypes.boolean]; const booleanFalseTemplate = [false, optionsTemplateTypes.boolean]; @@ -792,10 +799,12 @@ const defaultOptionsWithTemplate = { resize: ['none', resizeAllowedValues], paddingAbsolute: booleanFalseTemplate, updating: { - elementEvents: [[['img', 'load']], [optionsTemplateTypes.array, optionsTemplateTypes.null]], - contentMutationDebounce: [80, numberAllowedValues], - hostMutationDebounce: [0, numberAllowedValues], - resizeDebounce: [0, numberAllowedValues], + elementEvents: [[['img', 'load']], arrayNullValues], + attributes: [null, arrayNullValues], + debounce: [ + [0, 33], + [optionsTemplateTypes.number, optionsTemplateTypes.array, optionsTemplateTypes.null], + ], }, overflow: { x: ['scroll', overflowAllowedValues], @@ -1152,6 +1161,535 @@ const createStructureSetup = (target) => { }; }; +const animationStartEventName = 'animationstart'; +const scrollEventName = 'scroll'; +const scrollAmount = 3333333; + +const directionIsRTL = (elm) => style(elm, 'direction') === 'rtl'; + +const domRectHasDimensions = (rect) => rect && (rect.height || rect.width); + +const createSizeObserver = (target, onSizeChangedCallback, options) => { + const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {}; + const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment(); + const baseElements = createDOM(`
`); + const sizeObserver = baseElements[0]; + const listenerElement = sizeObserver.firstChild; + const { _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; + let appear = false; + let doDirectionScroll = true; + + if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) { + const { _previous, _value } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop().contentRect); + const hasDimensions = domRectHasDimensions(_value); + const hadDimensions = domRectHasDimensions(_previous); + skip = !_previous || !hasDimensions; + appear = !hadDimensions && hasDimensions; + doDirectionScroll = !skip; + } else if (hasDirectionCache) { + doDirectionScroll = sizeChangedContext._changed; + } else { + appear = sizeChangedContext === true; + } + + if (observeDirectionChange && doDirectionScroll) { + const rtl = hasDirectionCache ? sizeChangedContext._value : directionIsRTL(sizeObserver); + scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount); + scrollTop(sizeObserver, scrollAmount); + } + + if (!skip) { + onSizeChangedCallback({ + _sizeChanged: !hasDirectionCache, + _directionIsRTLCache: hasDirectionCache ? sizeChangedContext : undefined, + _appear: !!appear, + }); + } + }; + + const offListeners = []; + let appearCallback = observeAppearChange ? onSizeChangedCallbackProxy : false; + let directionIsRTLCache; + + if (ResizeObserverConstructor) { + const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy); + resizeObserverInstance.observe(listenerElement); + push(offListeners, () => resizeObserverInstance.disconnect()); + } else { + const observerElementChildren = createDOM( + `
` + ); + appendChildren(listenerElement, observerElementChildren); + addClass(listenerElement, classNameSizeObserverListenerScroll); + const observerElementChildrenRoot = observerElementChildren[0]; + const shrinkElement = observerElementChildrenRoot.lastChild; + const expandElement = observerElementChildrenRoot.firstChild; + const expandElementChild = expandElement == null ? void 0 : expandElement.firstChild; + let cacheSize = offsetSize(observerElementChildrenRoot); + let currSize = cacheSize; + let isDirty = false; + let rAFId; + + const reset = () => { + scrollLeft(expandElement, scrollAmount); + scrollTop(expandElement, scrollAmount); + scrollLeft(shrinkElement, scrollAmount); + scrollTop(shrinkElement, scrollAmount); + }; + + const onResized = (appear) => { + rAFId = 0; + + if (isDirty) { + cacheSize = currSize; + onSizeChangedCallbackProxy(appear === true); + } + }; + + const onScroll = (scrollEvent) => { + currSize = offsetSize(observerElementChildrenRoot); + isDirty = !scrollEvent || !equalWH(currSize, cacheSize); + + if (scrollEvent) { + stopAndPrevent(scrollEvent); + + if (isDirty && !rAFId) { + cAF(rAFId); + rAFId = rAF(onResized); + } + } else { + onResized(scrollEvent === false); + } + + reset(); + }; + + push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]); + style(expandElementChild, { + width: scrollAmount, + height: scrollAmount, + }); + reset(); + appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset; + } + + if (observeDirectionChange) { + directionIsRTLCache = createCache(directionIsRTL.bind(0, sizeObserver)); + const { _update: updateDirectionIsRTLCache } = directionIsRTLCache; + push( + offListeners, + on(sizeObserver, scrollEventName, (event) => { + const directionIsRTLCacheValues = updateDirectionIsRTLCache(); + const { _value, _changed } = directionIsRTLCacheValues; + + if (_changed) { + removeClass(listenerElement, 'ltr rtl'); + + if (_value) { + addClass(listenerElement, 'rtl'); + } else { + addClass(listenerElement, 'ltr'); + } + + onSizeChangedCallbackProxy(directionIsRTLCacheValues); + } + + stopAndPrevent(event); + }) + ); + } + + 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 = createDiv(classNameTrinsicObserver); + 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 { + const onSizeChanged = () => { + const newSize = offsetSize(trinsicObserver); + const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize); + + if (heightIntrinsicCache._changed) { + onTrinsicChangedCallback(heightIntrinsicCache); + } + }; + + push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy); + onSizeChanged(); + } + + prependChildren(target, trinsicObserver); + return { + _destroy() { + runEach(offListeners); + removeElements(trinsicObserver); + }, + + _getCurrentCacheValues(force) { + return { + _heightIntrinsic: getCurrentHeightIntrinsicCache(force), + }; + }, + }; +}; + +const createEventContentChange = (target, eventContentChange, callback) => { + let map; + + const _destroy = () => { + if (map) { + map.forEach((eventName, elm) => off(elm, eventName, callback)); + map.clear(); + } + }; + + const _updateElements = (getElements) => { + if (map && eventContentChange) { + const eventElmList = eventContentChange.reduce((arr, item) => { + if (item) { + const selector = item[0]; + const eventNames = item[1]; + const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target)); + + if (elements && elements.length && eventNames && isString(eventNames)) { + push(arr, [elements, eventNames.trim()], true); + } + } + + return arr; + }, []); + each(eventElmList, (item) => + each(item[0], (elm) => { + const eventNames = item[1]; + const registredEventNames = map.get(elm); + const newEntry = isUndefined(registredEventNames); + const changingExistingEntry = !newEntry && eventNames !== registredEventNames; + const finalEventNames = changingExistingEntry ? `${registredEventNames} ${eventNames}` : eventNames; + + if (changingExistingEntry) { + off(elm, registredEventNames, callback); + } + + map.set(elm, finalEventNames); + on(elm, finalEventNames, callback); + }) + ); + } + }; + + if (eventContentChange) { + map = map || new Map(); + + _destroy(); + + _updateElements(); + } + + return { + _destroy, + _updateElements, + }; +}; + +const createDOMObserver = (target, isContentObserver, callback, options) => { + let isConnected = false; + const { + _attributes, + _styleChangingAttributes, + _eventContentChange, + _nestedTargetSelector, + _ignoreTargetChange, + _ignoreNestedTargetChange, + _ignoreContentChange, + } = options || {}; + const { _destroy: destroyEventContentChange, _updateElements: updateEventContentChangeElements } = createEventContentChange( + target, + isContentObserver && _eventContentChange, + debounce( + () => { + if (isConnected) { + callback(true); + } + }, + { + _timeout: 33, + _maxDelay: 99, + } + ) + ); + const finalAttributes = _attributes || []; + const finalStyleChangingAttributes = _styleChangingAttributes || []; + const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); + + const observerCallback = (mutations) => { + const ignoreTargetChange = (isContentObserver ? _ignoreNestedTargetChange : _ignoreTargetChange) || noop; + const ignoreContentChange = _ignoreContentChange || noop; + const targetChangedAttrs = []; + const totalAddedNodes = []; + let targetStyleChanged = false; + let contentChanged = false; + let childListChanged = false; + each(mutations, (mutation) => { + const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation; + const isAttributesType = type === 'attributes'; + const isChildListType = type === 'childList'; + const targetIsMutationTarget = target === mutationTarget; + const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget, attributeName) : 0; + const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue; + const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged; + + if (isContentObserver && !targetIsMutationTarget) { + const notOnlyAttrChanged = !isAttributesType; + const contentAttrChanged = isAttributesType && styleChangingAttrChanged; + const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector); + const baseAssertion = isNestedTarget + ? !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue) + : notOnlyAttrChanged || contentAttrChanged; + const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options); + push(totalAddedNodes, addedNodes); + contentChanged = contentChanged || contentFinalChanged; + childListChanged = childListChanged || isChildListType; + } + + if ( + !isContentObserver && + targetIsMutationTarget && + attributeChanged && + !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue) + ) { + push(targetChangedAttrs, attributeName); + targetStyleChanged = targetStyleChanged || styleChangingAttrChanged; + } + }); + + if (childListChanged && !isEmptyArray(totalAddedNodes)) { + updateEventContentChangeElements((selector) => + totalAddedNodes.reduce((arr, node) => { + push(arr, find(selector, node)); + return is(node, selector) ? push(arr, node) : arr; + }, []) + ); + } + + if (isContentObserver) { + contentChanged && callback(false); + } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) { + callback(targetChangedAttrs, targetStyleChanged); + } + }; + + const mutationObserver = new MutationObserverConstructor(observerCallback); + mutationObserver.observe(target, { + attributes: true, + attributeOldValue: true, + attributeFilter: observedAttributes, + subtree: isContentObserver, + childList: isContentObserver, + characterData: isContentObserver, + }); + isConnected = true; + return { + _destroy: () => { + if (isConnected) { + destroyEventContentChange(); + mutationObserver.disconnect(); + isConnected = false; + } + }, + _update: () => { + if (isConnected) { + observerCallback(mutationObserver.takeRecords()); + } + }, + }; +}; + +const ignorePrefix = 'os-'; +const baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows']; +const baseStyleChangingAttrs = ['id', 'class', 'style', 'open']; + +const ignoreTargetChange = (target, attrName, oldValue, newValue) => { + if (attrName === 'class' && oldValue && newValue) { + const diff = diffClass(oldValue, newValue); + return !!diff.find((addedOrRemovedClass) => addedOrRemovedClass.indexOf(ignorePrefix) !== 0); + } + + return false; +}; + +const lifecycleHubOservers = (instance, updateLifecycles) => { + let debounceTimeout; + let debounceMaxDelay; + const { _structureSetup } = instance; + const { _targetObj, _targetCtx } = _structureSetup; + const { _host, _viewport, _content } = _targetObj; + const { _isTextarea } = _targetCtx; + const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment(); + const contentMutationObserverAttr = _isTextarea ? baseStyleChangingAttrsTextarea : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea); + const updateLifecyclesWithDebouncedAdaptiveUpdateHints = debounce(updateLifecycles, { + _timeout: () => debounceTimeout, + _maxDelay: () => debounceMaxDelay, + + _mergeParams(prev, curr) { + const { _sizeChanged: prevSizeChanged, _hostMutation: prevHostMutation, _contentMutation: prevContentMutation } = prev[0]; + const { _sizeChanged: currSizeChanged, _hostMutation: currvHostMutation, _contentMutation: currContentMutation } = curr[0]; + const merged = [ + { + _sizeChanged: prevSizeChanged || currSizeChanged, + _hostMutation: prevHostMutation || currvHostMutation, + _contentMutation: prevContentMutation || currContentMutation, + }, + ]; + return merged; + }, + }); + + const onTrinsicChanged = (heightIntrinsic) => { + updateLifecycles({ + _heightIntrinsic: heightIntrinsic, + }); + }; + + const onSizeChanged = ({ _sizeChanged, _directionIsRTLCache, _appear }) => { + const updateFn = !_sizeChanged || _appear ? updateLifecycles : updateLifecyclesWithDebouncedAdaptiveUpdateHints; + updateFn({ + _sizeChanged, + _directionIsRTL: _directionIsRTLCache, + }); + }; + + const onContentMutation = (contentChangedTroughEvent) => { + const updateFn = contentChangedTroughEvent ? updateLifecycles : updateLifecyclesWithDebouncedAdaptiveUpdateHints; + updateFn({ + _contentMutation: true, + }); + }; + + const onHostMutation = updateLifecyclesWithDebouncedAdaptiveUpdateHints.bind(0, { + _hostMutation: true, + }); + const trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged); + const sizeObserver = createSizeObserver(_host, onSizeChanged, { + _appear: true, + _direction: !_nativeScrollbarStyling, + }); + const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, { + _styleChangingAttributes: baseStyleChangingAttrs, + _attributes: baseStyleChangingAttrs, + _ignoreTargetChange: ignoreTargetChange, + }); + let contentMutationObserver; + + const updateOptions = (checkOption) => { + const { _value: elementEvents, _changed: elementEventsChanged } = checkOption('updating.elementEvents'); + const { _value: attributes, _changed: attributesChanged } = checkOption('updating.attributes'); + const { _value: debounce, _changed: debounceChanged } = checkOption('updating.debounce'); + const updateContentMutationObserver = elementEventsChanged || attributesChanged; + + if (updateContentMutationObserver) { + if (contentMutationObserver) { + contentMutationObserver._update(); + + contentMutationObserver._destroy(); + } + + contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, { + _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []), + _attributes: contentMutationObserverAttr.concat(attributes || []), + _eventContentChange: elementEvents, + _ignoreNestedTargetChange: ignoreTargetChange, + }); + } + + if (debounceChanged) { + updateLifecyclesWithDebouncedAdaptiveUpdateHints._flush(); + + if (isArray(debounce)) { + const timeout = debounce[0]; + const maxWait = debounce[1]; + debounceTimeout = isNumber(timeout) ? timeout : false; + debounceMaxDelay = isNumber(maxWait) ? maxWait : false; + } else if (isNumber(debounce)) { + debounceTimeout = debounce; + debounceMaxDelay = false; + } else { + debounceTimeout = false; + debounceMaxDelay = false; + } + } + }; + + return { + _trinsicObserver: trinsicObserver, + _sizeObserver: sizeObserver, + _updateObserverOptions: updateOptions, + }; +}; + const createTrinsicLifecycle = (lifecycleHub) => { const { _structureSetup } = lifecycleHub; const { _content } = _structureSetup._targetObj; @@ -1571,434 +2109,10 @@ const createOverflowLifecycle = (lifecycleHub) => { }; }; -const animationStartEventName = 'animationstart'; -const scrollEventName = 'scroll'; -const scrollAmount = 3333333; - -const directionIsRTL = (elm) => style(elm, 'direction') === 'rtl'; - -const domRectHasDimensions = (rect) => rect && (rect.height || rect.width); - -const createSizeObserver = (target, onSizeChangedCallback, options) => { - const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {}; - const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment(); - const baseElements = createDOM(`
`); - const sizeObserver = baseElements[0]; - const listenerElement = sizeObserver.firstChild; - const { _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(observerElementChildrenRoot); - let currSize = cacheSize; - let isDirty = false; - let rAFId; - - const reset = () => { - scrollLeft(expandElement, scrollAmount); - scrollTop(expandElement, scrollAmount); - scrollLeft(shrinkElement, scrollAmount); - scrollTop(shrinkElement, scrollAmount); - }; - - const onResized = () => { - rAFId = 0; - - if (isDirty) { - cacheSize = currSize; - onSizeChangedCallbackProxy(); - } - }; - - const onScroll = (scrollEvent) => { - currSize = offsetSize(observerElementChildrenRoot); - isDirty = !scrollEvent || !equalWH(currSize, cacheSize); - - if (scrollEvent) { - stopAndPrevent(scrollEvent); - - if (isDirty && !rAFId) { - cAF(rAFId); - rAFId = rAF(onResized); - } - } else { - onResized(); - } - - reset(); - }; - - push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]); - style(expandElementChild, { - width: scrollAmount, - height: scrollAmount, - }); - reset(); - appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset; - } - - if (observeDirectionChange) { - directionIsRTLCache = createCache(directionIsRTL.bind(0, sizeObserver)); - const { _update: updateDirectionIsRTLCache } = directionIsRTLCache; - push( - offListeners, - on(sizeObserver, scrollEventName, (event) => { - const directionIsRTLCacheValues = updateDirectionIsRTLCache(); - const { _value, _changed } = directionIsRTLCacheValues; - - if (_changed) { - removeClass(listenerElement, 'ltr rtl'); - - if (_value) { - addClass(listenerElement, 'rtl'); - } else { - addClass(listenerElement, 'ltr'); - } - - onSizeChangedCallbackProxy(directionIsRTLCacheValues); - } - - stopAndPrevent(event); - }) - ); - } - - 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 = createDiv(classNameTrinsicObserver); - 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 { - const onSizeChanged = () => { - const newSize = offsetSize(trinsicObserver); - const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize); - - if (heightIntrinsicCache._changed) { - onTrinsicChangedCallback(heightIntrinsicCache); - } - }; - - push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy); - onSizeChanged(); - } - - prependChildren(target, trinsicObserver); - return { - _destroy() { - runEach(offListeners); - removeElements(trinsicObserver); - }, - - _getCurrentCacheValues(force) { - return { - _heightIntrinsic: getCurrentHeightIntrinsicCache(force), - }; - }, - }; -}; - -const createEventContentChange = (target, eventContentChange, callback) => { - let map; - let eventContentChangeRef; - - const _destroy = () => { - if (map) { - map.forEach((eventName, elm) => off(elm, eventName, callback)); - map.clear(); - } - }; - - const _updateElements = (getElements) => { - if (map && eventContentChangeRef) { - const eventElmList = eventContentChangeRef.reduce((arr, item) => { - if (item) { - const selector = item[0]; - const eventNames = item[1]; - const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target)); - const parsedEventNames = isFunction(eventNames) ? eventNames(elements) : eventNames; - - if (elements && elements.length && parsedEventNames && isString(parsedEventNames)) { - push(arr, [elements, parsedEventNames.trim()], true); - } - } - - return arr; - }, []); - each(eventElmList, (item) => - each(item[0], (elm) => { - const eventNames = item[1]; - const registredEventNames = map.get(elm); - const newEntry = isUndefined(registredEventNames); - const changingExistingEntry = !newEntry && eventNames !== registredEventNames; - const finalEventNames = changingExistingEntry ? `${registredEventNames} ${eventNames}` : eventNames; - - if (changingExistingEntry) { - off(elm, registredEventNames, callback); - } - - map.set(elm, finalEventNames); - on(elm, finalEventNames, callback); - }) - ); - } - }; - - const _updateEventContentChange = (newEventContentChange) => { - map = map || new Map(); - eventContentChangeRef = newEventContentChange; - - _destroy(); - - _updateElements(); - }; - - if (eventContentChange) { - _updateEventContentChange(eventContentChange); - } - - return { - _destroy, - _updateElements, - _updateEventContentChange, - }; -}; - -const createDOMObserver = (target, isContentObserver, callback, options) => { - let isConnected = false; - const { - _attributes, - _styleChangingAttributes, - _eventContentChange, - _nestedTargetSelector, - _ignoreTargetChange, - _ignoreNestedTargetChange, - _ignoreContentChange, - } = options || {}; - const { - _destroy: destroyEventContentChange, - _updateElements: updateEventContentChangeElements, - _updateEventContentChange: updateEventContentChange, - } = createEventContentChange( - target, - isContentObserver && _eventContentChange, - debounce(() => { - if (isConnected) { - callback(true); - } - }, 84) - ); - const finalAttributes = _attributes || []; - const finalStyleChangingAttributes = _styleChangingAttributes || []; - const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); - - const observerCallback = (mutations) => { - const ignoreTargetChange = (isContentObserver ? _ignoreNestedTargetChange : _ignoreTargetChange) || noop; - const ignoreContentChange = _ignoreContentChange || noop; - const targetChangedAttrs = []; - const totalAddedNodes = []; - let targetStyleChanged = false; - let contentChanged = false; - let childListChanged = false; - each(mutations, (mutation) => { - const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation; - const isAttributesType = type === 'attributes'; - const isChildListType = type === 'childList'; - const targetIsMutationTarget = target === mutationTarget; - const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget, attributeName) : 0; - const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue; - const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged; - - if (isContentObserver && !targetIsMutationTarget) { - const notOnlyAttrChanged = !isAttributesType; - const contentAttrChanged = isAttributesType && styleChangingAttrChanged; - const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector); - const baseAssertion = isNestedTarget - ? !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue) - : notOnlyAttrChanged || contentAttrChanged; - const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options); - push(totalAddedNodes, addedNodes); - contentChanged = contentChanged || contentFinalChanged; - childListChanged = childListChanged || isChildListType; - } - - if ( - !isContentObserver && - targetIsMutationTarget && - attributeChanged && - !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue) - ) { - push(targetChangedAttrs, attributeName); - targetStyleChanged = targetStyleChanged || styleChangingAttrChanged; - } - }); - - if (childListChanged && !isEmptyArray(totalAddedNodes)) { - updateEventContentChangeElements((selector) => - totalAddedNodes.reduce((arr, node) => { - push(arr, find(selector, node)); - return is(node, selector) ? push(arr, node) : arr; - }, []) - ); - } - - if (isContentObserver) { - contentChanged && callback(contentChanged); - } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) { - callback(targetChangedAttrs, targetStyleChanged); - } - }; - - const mutationObserver = new MutationObserverConstructor(observerCallback); - mutationObserver.observe(target, { - attributes: true, - attributeOldValue: true, - attributeFilter: observedAttributes, - subtree: isContentObserver, - childList: isContentObserver, - characterData: isContentObserver, - }); - isConnected = true; - return { - _destroy: () => { - if (isConnected) { - destroyEventContentChange(); - mutationObserver.disconnect(); - isConnected = false; - } - }, - _updateEventContentChange: (newEventContentChange) => { - updateEventContentChange(isConnected && isContentObserver && newEventContentChange); - }, - _update: () => { - if (isConnected) { - observerCallback(mutationObserver.takeRecords()); - } - }, - }; -}; - const getPropByPath = (obj, path) => obj ? path.split('.').reduce((o, prop) => (o && hasOwnProperty$1(o, prop) ? o[prop] : undefined), obj) : undefined; -const ignorePrefix = 'os-'; -const hostSelector = `.${classNameHost}`; -const viewportSelector = `.${classNameViewport}`; -const contentSelector = `.${classNameContent}`; -const attrs = ['id', 'class', 'style', 'open']; - -const ignoreTargetChange = (target, attrName, oldValue, newValue) => { - if (attrName === 'class' && oldValue && newValue) { - const diff = diffClass(oldValue, newValue); - return !!diff.find((addedOrRemovedClass) => addedOrRemovedClass.indexOf(ignorePrefix) !== 0); - } - - return false; -}; - -const directionIsRTLCacheValuesFallback = { - _value: false, - _previous: false, - _changed: false, -}; -const heightIntrinsicCacheValuesFallback = { +const booleanCacheValuesFallback = { _value: false, _previous: false, _changed: false, @@ -2033,7 +2147,7 @@ const lifecycleCommunicationFallback = { }; const createLifecycleHub = (options, structureSetup) => { let lifecycleCommunication = lifecycleCommunicationFallback; - const { _host, _viewport, _content } = structureSetup._targetObj; + const { _viewport } = structureSetup._targetObj; const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, @@ -2064,9 +2178,9 @@ const createLifecycleHub = (options, structureSetup) => { _paddingStyleChanged = force || false, } = updateHints || {}; const finalDirectionIsRTL = - _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback); + _directionIsRTL || (_sizeObserver ? _sizeObserver._getCurrentCacheValues(force)._directionIsRTL : booleanCacheValuesFallback); const finalHeightIntrinsic = - _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback); + _heightIntrinsic || (_trinsicObserver ? _trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : booleanCacheValuesFallback); const checkOption = (path) => ({ _value: getPropByPath(options, path), @@ -2076,6 +2190,11 @@ const createLifecycleHub = (options, structureSetup) => { const adjustScrollOffset = doViewportArrange || !_flexboxGlue; const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport); const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport); + + if (_updateObserverOptions) { + _updateObserverOptions(checkOption); + } + each(lifecycles, (lifecycle) => { const { _sizeChanged: adaptiveSizeChanged, @@ -2114,61 +2233,7 @@ const createLifecycleHub = (options, structureSetup) => { } }; - const onSizeChanged = (directionIsRTL) => { - const sizeChanged = !directionIsRTL; - updateLifecycles({ - _directionIsRTL: directionIsRTL, - _sizeChanged: sizeChanged, - }); - }; - - const onTrinsicChanged = (heightIntrinsic) => { - updateLifecycles({ - _heightIntrinsic: heightIntrinsic, - }); - }; - - const onHostMutation = () => { - requestAnimationFrame(() => { - updateLifecycles({ - _hostMutation: true, - }); - }); - }; - - const onContentMutation = () => { - requestAnimationFrame(() => { - updateLifecycles({ - _contentMutation: true, - }); - }); - }; - - const trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged); - const sizeObserver = createSizeObserver(_host, onSizeChanged, { - _appear: true, - _direction: !_nativeScrollbarStyling, - }); - const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, { - _styleChangingAttributes: attrs, - _attributes: attrs, - _ignoreTargetChange: ignoreTargetChange, - }); - const contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, { - _styleChangingAttributes: attrs, - _attributes: attrs, - _eventContentChange: options.updating.elementEvents, - _nestedTargetSelector: hostSelector, - _ignoreContentChange: (mutation, isNestedTarget) => { - const { target, attributeName } = mutation; - return isNestedTarget - ? false - : attributeName - ? liesBetween(target, hostSelector, viewportSelector) || liesBetween(target, hostSelector, contentSelector) - : false; - }, - _ignoreNestedTargetChange: ignoreTargetChange, - }); + const { _sizeObserver, _trinsicObserver, _updateObserverOptions } = lifecycleHubOservers(instance, updateLifecycles); const update = (changedOptions, force) => { updateLifecycles(null, changedOptions, force); diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index 517afbe..532ab26 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/cache/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/setups/structureSetup.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHub.ts","../src/overlayscrollbars.ts"],"sourcesContent":["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","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 { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: 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 { 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 { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray => (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 | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | false | 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","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 it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n return !(result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined));\r\n });\r\n\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string,\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 | false | 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 | false | 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 | false | 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","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): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void => (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber } 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, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n //animationiterationcount: 1,\r\n //columncount: 1,\r\n //fillopacity: 1,\r\n //flexgrow: 1,\r\n //flexshrink: 1,\r\n //fontweight: 1,\r\n //lineheight: 1,\r\n 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[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | false | null | undefined, prop: string, val: string | number): void => {\r\n try {\r\n if (elm) {\r\n const { style } = elm;\r\n if (!isUndefined(style[prop])) {\r\n style[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n style.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: StyleObject): void;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (elm?: HTMLElement | false | null | undefined, propertyPrefix?: string, propertySuffix?: string): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { 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","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 { PlainObject } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: unknown, ...args: unknown[]) => unknown;\r\nexport type OptionsTemplateType = ExtractPropsKey;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = {\r\n readonly _foreign: Record;\r\n readonly _validated: PartialOptions;\r\n};\r\n\r\nexport type PartialOptions = {\r\n [P in keyof T]?: T[P] extends OptionsObjectType ? PartialOptions : T[P];\r\n};\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst { 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/**\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: PartialOptions,\r\n template: OptionsTemplate,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const 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 T, 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: PartialOptions,\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","import {\r\n OptionsTemplate,\r\n OptionsObjectType,\r\n OptionsTemplateNativeTypes,\r\n OptionsTemplateTypes,\r\n OptionsTemplateValue,\r\n} from 'support/options/validation';\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\nexport type OptionsWithOptionsTemplateValue = [T, OptionsTemplateValue];\r\n\r\nexport type OptionsWithOptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsWithOptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsWithOptionsTemplateValue\r\n : never;\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 const transformOptions = (optionsWithOptionsTemplate: OptionsWithOptionsTemplate): 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 classNameViewportArrange = `${classNameViewport}-arrange`;\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 optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n} from 'support/options';\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible' | 'visible-hidden';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface OSOptions {\r\n resize: ResizeBehavior;\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[string, string]> | null;\r\n contentMutationDebounce: number;\r\n hostMutationDebounce: number;\r\n resizeDebounce: number;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n textarea: {\r\n dynWidth: boolean;\r\n dynHeight: boolean;\r\n inheritedAttrs: string | Array | null;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n callbacks: {\r\n onUpdated: (() => any) | null;\r\n };\r\n /*\r\n callbacks?: {\r\n onInitialized?: BasicEventCallback | null;\r\n onInitializationWithdrawn?: BasicEventCallback | null;\r\n onDestroyed?: BasicEventCallback | null;\r\n onScrollStart?: ScrollEventCallback | null;\r\n onScroll?: ScrollEventCallback | null;\r\n onScrollStop?: ScrollEventCallback | null;\r\n onOverflowChanged?: OverflowChangedCallback | null;\r\n onOverflowAmountChanged?: OverflowAmountChangedCallback | null;\r\n onDirectionChanged?: DirectionChangedCallback | null;\r\n onContentSizeChanged?: SizeChangedCallback | null;\r\n onHostSizeChanged?: SizeChangedCallback | null;\r\n onUpdated?: UpdatedCallback | null;\r\n };\r\n */\r\n}\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\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 = 'hidden scroll visible visible-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 callbacks: {\r\n onUpdated: [null, [oTypes.function, oTypes.null]],\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 {\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 equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n PartialOptions,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { OSOptions, defaultOptions } from 'options';\r\n\r\nexport interface InitializationStrategy {\r\n _padding: boolean;\r\n _content: boolean;\r\n}\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\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 _cssCustomProperties: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): OSOptions;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n _defaultInitializationStrategy: InitializationStrategy;\r\n _defaultDefaultOptions: OSOptions;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (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, cssProperty('scrollbar-width')) === 'none' ||\r\n 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 = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst getDefaultInitializationStrategy = (nativeScrollbarStyling: boolean): InitializationStrategy => ({\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n});\r\n\r\nconst createEnvironment = (): Environment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = getNativeScrollbarStyling(envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const defaultInitializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling);\r\n let initializationStrategy = defaultInitializationStrategy;\r\n let defaultDefaultOptions = defaultOptions;\r\n\r\n const env: Environment = {\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n _getInitializationStrategy: () => ({ ...initializationStrategy }),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n initializationStrategy = assignDeep({}, initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: () => ({ ...defaultDefaultOptions }),\r\n _setDefaultOptions(newDefaultOptions) {\r\n defaultDefaultOptions = assignDeep({}, defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: defaultInitializationStrategy,\r\n _defaultDefaultOptions: defaultDefaultOptions,\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n 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 insertBefore,\r\n attr,\r\n isBoolean,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, 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 {\r\n _target: OSTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false | null;\r\n _content: HTMLElement | false | null;\r\n _viewportArrange: HTMLStyleElement | false | 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 | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement => {\r\n const elm = document.createElement('style');\r\n\r\n attr(elm, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n\r\n return elm;\r\n};\r\nconst evaluateCreationFromStrategy = (initializationValue: HTMLElement | boolean | undefined, strategy: boolean): HTMLElement | false | undefined => {\r\n const isBooleanValue = isBoolean(initializationValue);\r\n if (isBooleanValue || isUndefined(initializationValue)) {\r\n return (isBooleanValue ? initializationValue : strategy) && undefined;\r\n }\r\n return initializationValue as HTMLElement;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n const { _padding: paddingNeeded, _content: contentNeeded } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: Partial = targetIsElm\r\n ? ({} as Partial)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _padding: evaluateCreationFromStrategy((target as OSTargetObject).padding, paddingNeeded),\r\n _content: evaluateCreationFromStrategy((target as OSTargetObject).content, contentNeeded),\r\n };\r\n\r\n if (targetIsElm) {\r\n const viewport = createDiv(classNameViewport);\r\n const padding = paddingNeeded && createDiv(classNamePadding);\r\n const content = contentNeeded && createDiv(classNameContent);\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 const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, getTargetContents(_target!));\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(contentSlot));\r\n removeElements(_padding || _viewport);\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 if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (!_cssCustomProperties && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y)) {\r\n const viewportArrangeElm = createUniqueViewportArrangeElement();\r\n\r\n insertBefore(_viewport, viewportArrangeElm);\r\n push(destroyFns, removeElements.bind(0, viewportArrangeElm));\r\n\r\n obj._viewportArrange = viewportArrangeElm;\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 { style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createTrinsicLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup } = lifecycleHub;\r\n const { _content } = _structureSetup._targetObj;\r\n\r\n return (updateHints) => {\r\n const { _heightIntrinsic } = updateHints;\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: heightIntrinsic ? '' : '100%',\r\n display: heightIntrinsic ? '' : 'inline',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, TRBL } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _setLifecycleCommunication } = lifecycleHub;\r\n const { _host, _padding, _viewport } = _structureSetup._targetObj;\r\n const { _update: updatePaddingCache, _current: currentPaddingCache } = createCache(topRightBottomLeft.bind(0, _host, 'padding'), {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n });\r\n\r\n return (updateHints, checkOption, force) => {\r\n let { _value: padding, _changed: paddingChanged } = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL, _contentMutation } = updateHints;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n ({ _value: padding, _changed: paddingChanged } = updatePaddingCache(force));\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding!.r + padding!.l;\r\n const paddingVertical = padding!.t + padding!.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: paddingRelative ? (directionIsRTL ? -padding!.r : 'auto') : 0,\r\n left: paddingRelative ? (directionIsRTL ? 'auto' : -padding!.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding!.t : 0,\r\n paddingRight: paddingRelative ? padding!.r : 0,\r\n paddingBottom: paddingRelative ? padding!.b : 0,\r\n paddingLeft: paddingRelative ? padding!.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n _setLifecycleCommunication({\r\n _paddingInfo: {\r\n _absolute: !paddingRelative,\r\n _padding: padding!,\r\n },\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : {\r\n ...paddingStyle,\r\n ...viewportStyle,\r\n },\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n CacheValues,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n offsetSize,\r\n getBoundingClientRect,\r\n noop,\r\n each,\r\n} from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { StyleObject } from 'typings';\r\nimport { classNameViewportArrange, classNameViewportScrollbarStyling } from 'classnames';\r\n\r\ninterface OverflowAmountCacheContext {\r\n _viewportScrollSize: WH;\r\n _viewportClientSize: WH;\r\n _viewportSizeFraction: WH;\r\n}\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n}\r\n\r\ninterface UndoViewportArrangeResult {\r\n _redoViewportArrange: () => void;\r\n _viewportOverflowState?: ViewportOverflowState;\r\n}\r\n\r\ninterface OverflowOption {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n}\r\n\r\nconst { max, abs, round } = Math;\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst sizeFraction = (elm: HTMLElement): WH => {\r\n const viewportOffsetSize = offsetSize(elm);\r\n const viewportRect = getBoundingClientRect(elm);\r\n return {\r\n w: viewportRect.width - viewportOffsetSize.w,\r\n h: viewportRect.height - viewportOffsetSize.h,\r\n };\r\n};\r\nconst setAxisOverflowStyle = (horizontal: boolean, overflowAmount: number, behavior: OverflowBehavior, styleObj: StyleObject) => {\r\n const overflowKey: keyof StyleObject = horizontal ? 'overflowX' : 'overflowY';\r\n const behaviorIsVisible = behavior.indexOf('visible') === 0;\r\n const behaviorIsVisibleHidden = behavior === 'visible-hidden';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n const hasOverflow = overflowAmount > 0;\r\n\r\n if (behaviorIsVisible) {\r\n styleObj[overflowKey] = 'visible';\r\n }\r\n if (behaviorIsScroll && hasOverflow) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: behaviorIsVisible,\r\n _behavior: behaviorIsVisibleHidden ? 'hidden' : 'scroll',\r\n };\r\n};\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _doViewportArrange, _getLifecycleCommunication, _setLifecycleCommunication } = lifecycleHub;\r\n const { _host, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n const { _update: updateViewportSizeFraction, _current: getCurrentViewportSizeFraction } = createCache>(\r\n sizeFraction.bind(0, _viewport),\r\n whCacheOptions\r\n );\r\n const { _update: updateViewportScrollSizeCache, _current: getCurrentViewportScrollSizeCache } = createCache>(\r\n scrollSize.bind(0, _viewport),\r\n whCacheOptions\r\n );\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n ({ _viewportScrollSize, _viewportClientSize, _viewportSizeFraction }) => ({\r\n w: round(max(0, _viewportScrollSize.w - _viewportClientSize.w) - max(0, _viewportSizeFraction.w)),\r\n h: round(max(0, _viewportScrollSize.h - _viewportClientSize.h) - max(0, _viewportSizeFraction.h)),\r\n }),\r\n whCacheOptions\r\n );\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (viewportOverflowState: ViewportOverflowState, heightIntrinsic: boolean) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _absolute: paddingAbsolute, _padding: padding } = _getLifecycleCommunication()._paddingInfo;\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostSizeFraction = sizeFraction(_host);\r\n const hostClientSize = clientSize(_host);\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const paddingVertical = paddingAbsolute || style(_viewport, 'boxSizing') === 'content-box' ? padding.b + padding.t : 0;\r\n const fractionalClientHeight = hostClientSize.h + (abs(hostSizeFraction.h) < 1 ? hostSizeFraction.h : 0);\r\n\r\n style(_viewport, {\r\n height: fractionalClientHeight + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (showNativeOverlaidScrollbars: boolean, viewportStyleObj?: StyleObject): ViewportOverflowState => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow ? style(_viewport, ['overflowX', 'overflowY']) : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj!.overflowX === 'scroll',\r\n y: styleObj!.overflowY === 'scroll',\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? (overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x) : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? (overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y) : 0,\r\n };\r\n\r\n return {\r\n _overflowScroll: scroll,\r\n _scrollbarsHideOffsetArrange: {\r\n x: overlaidX && !!arrangeHideOffset,\r\n y: overlaidY && !!arrangeHideOffset,\r\n },\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n overflowAmount: WH,\r\n overflow: OverflowOption,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setAxisOverflowStyle(true, overflowAmount!.w, overflow.x, viewportStyleObj);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setAxisOverflowStyle(false, overflowAmount!.h, overflow.y, viewportStyleObj);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyleObj.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyleObj.overflowY = yVisibleBehavior;\r\n }\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n viewportSizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\r\n if (_doViewportArrange) {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingRight' : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + (abs(viewportSizeFraction.w) < 1 ? viewportSizeFraction.w : 0);\r\n const fractionalContenHeight = viewportScrollSize.h + (abs(viewportSizeFraction.h) < 1 ? viewportSizeFraction.h : 0);\r\n const arrangeSize = {\r\n w: hideOffsetY && arrangeY ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px` : '',\r\n h: hideOffsetX && arrangeX ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px` : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(`#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, 0);\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return _doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingLeft' : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n ): UndoViewportArrangeResult => {\r\n if (_doViewportArrange) {\r\n const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n removeClass(_viewport, classNameViewportArrange);\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return {\r\n _redoViewportArrange: () => {\r\n hideNativeScrollbars(finalViewportOverflowState, directionIsRTL, _doViewportArrange, prevStyle);\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n _viewportOverflowState: finalViewportOverflowState,\r\n };\r\n }\r\n return {\r\n _redoViewportArrange: noop,\r\n };\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation, _paddingStyleChanged } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || heightIntrinsicChanged);\r\n let viewportSizeFractionCache: CacheValues> = getCurrentViewportSizeFraction(force);\r\n let viewportScrollSizeCache: CacheValues> = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(force);\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\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 (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) {\r\n const { _redoViewportArrange, _viewportOverflowState: undoViewportArrangeOverflowState } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL!,\r\n preMeasureViewportOverflowState\r\n );\r\n const { _value: viewportSizeFraction, _changed: viewportSizeFractionCahnged } = (viewportSizeFractionCache = updateViewportSizeFraction(force));\r\n const { _value: viewportScrollSize, _changed: viewportScrollSizeChanged } = (viewportScrollSizeCache = updateViewportScrollSizeCache(force));\r\n const viewportContentSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize!;\r\n let arrangedViewportClientSize = viewportContentSize;\r\n\r\n _redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || viewportSizeFractionCahnged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(undoViewportArrangeOverflowState, viewportScrollSize!, viewportSizeFraction!, directionIsRTL!)\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _viewportSizeFraction: viewportSizeFraction!,\r\n _viewportScrollSize: {\r\n w: max(viewportScrollSize!.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize!.h, arrangedViewportScrollSize.h),\r\n },\r\n _viewportClientSize: {\r\n w: arrangedViewportClientSize.w + max(0, viewportContentSize.w - viewportScrollSize!.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportContentSize.h - viewportScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: viewportSizeFraction, _changed: viewportSizeFractionChanged } = viewportSizeFractionCache;\r\n const { _value: viewportScrollSize, _changed: viewportScrollSizeChanged } = viewportScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n const { _value: overflow, _changed: overflowChanged } = checkOption('overflow');\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n viewportSizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, overflowAmount!, overflow, viewportStyle);\r\n const viewportArranged = arrangeViewport(viewportOverflowState, viewportScrollSize!, viewportSizeFraction!, directionIsRTL!);\r\n hideNativeScrollbars(viewportOverflowState, directionIsRTL!, viewportArranged, viewportStyle);\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n // TODO: hide host overflow if scroll x or y and no padding element there\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n // TODO: overflow: visible on padding / host if overflow visible on both axis\r\n\r\n style(_viewport, viewportStyle);\r\n\r\n _setLifecycleCommunication({\r\n _viewportOverflowScroll: viewportOverflowState._overflowScroll,\r\n _viewportOverflowAmount: overflowAmount,\r\n });\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 stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport 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\n/*\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\n*/\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (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 | ResizeObserverEntry[] | 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 otherwise\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(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\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 | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized();\r\n }\r\n\r\n reset();\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\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(directionIsRTL.bind(0, 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 console.log;\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (_value) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return {\r\n _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 createDiv,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport 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\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\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 const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy);\r\n onSizeChanged();\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\n\r\ntype DOMContentObserverCallback = (contentChanged: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n _ignoreNestedTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed on nested targets if it returns true\r\n}\r\n\r\ninterface DOMTargetObserverOptions extends DOMObserverOptionsBase {\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed if it returns true\r\n}\r\n\r\ninterface DOMObserverBase {\r\n _destroy: () => void;\r\n _update: () => void;\r\n}\r\n\r\ninterface DOMContentObserver extends DOMObserverBase {\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n}\r\n\r\ninterface DOMTargetObserver extends DOMObserverBase {}\r\n\r\ntype ContentChangeArrayItem = [StringNullUndefined, ((elms: Node[]) => StringNullUndefined) | StringNullUndefined] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange = Array | false | null | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMContentObserverOptions | undefined\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true ? DOMContentObserverOptions : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = ContentObserver extends true ? DOMContentObserver : DOMTargetObserver;\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (target: Element, eventContentChange: DOMObserverEventContentChange, callback: (...args: any) => any) => {\r\n let map: Map | undefined;\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const _destroy = () => {\r\n if (map) {\r\n map.forEach((eventName: string, elm: Node) => off(elm, eventName, callback));\r\n map.clear();\r\n }\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (map && eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target));\r\n const parsedEventNames = isFunction(eventNames) ? eventNames(elements) : eventNames;\r\n\r\n if (elements && elements.length && parsedEventNames && isString(parsedEventNames)) {\r\n push(arr, [elements, parsedEventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const registredEventNames = map!.get(elm);\r\n const newEntry = isUndefined(registredEventNames);\r\n const changingExistingEntry = !newEntry && eventNames !== registredEventNames;\r\n const finalEventNames = changingExistingEntry ? `${registredEventNames} ${eventNames}` : eventNames;\r\n\r\n if (changingExistingEntry) {\r\n off(elm, registredEventNames!, callback);\r\n }\r\n\r\n map!.set(elm, finalEventNames);\r\n on(elm, finalEventNames, callback);\r\n })\r\n );\r\n }\r\n };\r\n const _updateEventContentChange = (newEventContentChange: DOMObserverEventContentChange) => {\r\n map = map || new Map();\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _updateEventContentChange(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _updateEventContentChange,\r\n };\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreNestedTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const {\r\n _destroy: destroyEventContentChange,\r\n _updateElements: updateEventContentChangeElements,\r\n _updateEventContentChange: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n isContentObserver && _eventContentChange,\r\n debounce(() => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(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);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = (isContentObserver ? _ignoreNestedTargetChange : _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 styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget = 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 // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(contentChanged);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _destroy: () => {\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 && isContentObserver && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n } as DOMObserver;\r\n};\r\n","import {\r\n XY,\r\n WH,\r\n TRBL,\r\n CacheValues,\r\n PartialOptions,\r\n each,\r\n hasOwnProperty,\r\n isNumber,\r\n scrollLeft,\r\n scrollTop,\r\n assignDeep,\r\n liesBetween,\r\n diffClass,\r\n} from 'support';\r\nimport { OSOptions } from 'options';\r\nimport { classNameHost, classNameViewport, classNameContent } from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface LifecycleCommunication {\r\n _paddingInfo: {\r\n _absolute: boolean;\r\n _padding: TRBL;\r\n };\r\n _viewportPaddingStyle: StyleObject;\r\n _viewportOverflowScroll: XY;\r\n _viewportOverflowAmount: WH;\r\n}\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n _paddingStyleChanged: 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 Lifecycle = (\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport interface LifecycleHubState {\r\n _overflowAmount: WH;\r\n}\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: PartialOptions | null, force?: boolean): void;\r\n _state(): LifecycleHubState;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: OSOptions;\r\n _structureSetup: StructureSetup;\r\n // whether the \"viewport arrange\" strategy must be used (true if no native scrollbar hiding and scrollbars are overlaid)\r\n _doViewportArrange: boolean;\r\n _getLifecycleCommunication(): LifecycleCommunication;\r\n _setLifecycleCommunication(newLifecycleCommunication?: Partial): void;\r\n}\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) : undefined;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n// TODO: tabindex, open etc.\r\n// TODO: test _ignoreContentChange & _ignoreNestedTargetChange for content dom observer\r\n// TODO: test _ignoreTargetChange for target dom observer\r\nconst ignorePrefix = 'os-';\r\nconst hostSelector = `.${classNameHost}`;\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst contentSelector = `.${classNameContent}`;\r\nconst attrs = ['id', 'class', 'style', 'open'];\r\nconst ignoreTargetChange = (target: Node, attrName: string, oldValue: string | null, newValue: string | null) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n return !!diff.find((addedOrRemovedClass) => addedOrRemovedClass.indexOf(ignorePrefix) !== 0);\r\n }\r\n return false;\r\n};\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\nconst lifecycleCommunicationFallback: LifecycleCommunication = {\r\n _paddingInfo: {\r\n _absolute: false,\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n },\r\n _viewportOverflowScroll: {\r\n x: false,\r\n y: false,\r\n },\r\n _viewportOverflowAmount: {\r\n w: 0,\r\n h: 0,\r\n },\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n};\r\n\r\nexport const createLifecycleHub = (options: OSOptions, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n let lifecycleCommunication = lifecycleCommunicationFallback;\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n _doViewportArrange: doViewportArrange,\r\n _getLifecycleCommunication: () => lifecycleCommunication,\r\n _setLifecycleCommunication(newLifecycleCommunication) {\r\n lifecycleCommunication = assignDeep({}, lifecycleCommunication, newLifecycleCommunication);\r\n },\r\n };\r\n const lifecycles: Lifecycle[] = [createTrinsicLifecycle(instance), createPaddingLifecycle(instance), createOverflowLifecycle(instance)];\r\n\r\n const updateLifecycles = (updateHints?: Partial | null, changedOptions?: Partial | null, force?: boolean) => {\r\n let {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged = force || false,\r\n _hostMutation = force || false,\r\n _contentMutation = force || false,\r\n _paddingStyleChanged = 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 const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const {\r\n _sizeChanged: adaptiveSizeChanged,\r\n _hostMutation: adaptiveHostMutation,\r\n _contentMutation: adaptiveContentMutation,\r\n _paddingStyleChanged: adaptivePaddingStyleChanged,\r\n } =\r\n lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n },\r\n checkOption,\r\n !!force\r\n ) || {};\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n _paddingStyleChanged = adaptivePaddingStyleChanged || _paddingStyleChanged;\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n if (options.callbacks.onUpdated) {\r\n options.callbacks.onUpdated();\r\n }\r\n };\r\n\r\n const onSizeChanged = (directionIsRTL?: CacheValues) => {\r\n const sizeChanged = !directionIsRTL;\r\n updateLifecycles({\r\n _directionIsRTL: directionIsRTL,\r\n _sizeChanged: sizeChanged,\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\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 updateLifecycles({\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 updateLifecycles({\r\n _contentMutation: true,\r\n });\r\n });\r\n };\r\n\r\n const trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _ignoreTargetChange: ignoreTargetChange,\r\n });\r\n const contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _eventContentChange: options!.updating!.elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget\r\n ? false\r\n : attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector) || liesBetween(target as Element, hostSelector, contentSelector)\r\n : false;\r\n },\r\n _ignoreNestedTargetChange: ignoreTargetChange,\r\n });\r\n\r\n const update = (changedOptions?: Partial | null, force?: boolean) => {\r\n updateLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = update.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n console.log(getEnvironment());\r\n\r\n return {\r\n _update: update,\r\n _state: () => ({\r\n _overflowAmount: lifecycleCommunication._viewportOverflowAmount,\r\n }),\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\nimport { PartialOptions, validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { OSOptions, optionsTemplate } from 'options';\r\nimport { getEnvironment } from 'environment';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (target: OSTarget | OSTargetObject, options?: PartialOptions, extensions?: any): OverlayScrollbars;\r\n}\r\n\r\nexport interface OverlayScrollbars {\r\n options(): OSOptions;\r\n options(newOptions?: PartialOptions): OSOptions;\r\n\r\n update(force?: boolean): void;\r\n\r\n state(): any;\r\n}\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: OSTarget | OSTargetObject,\r\n options?: PartialOptions,\r\n extensions?: any\r\n): OverlayScrollbars => {\r\n const { _getDefaultOptions } = getEnvironment();\r\n const currentOptions: OSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options || ({} as PartialOptions), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\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 state: () => lifecycleHub._state(),\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"],"names":["createCache","update","options","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","Object","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","elm","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","style","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","diffClass","classNameA","classNameB","classNameASplit","split","classNameBSplit","tempObj","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","stopAndPrevent","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","setCSSVal","setProperty","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","_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","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","numberAllowedValues","oTypes","number","stringArrayNullAllowedValues","null","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","updating","elementEvents","contentMutationDebounce","hostMutationDebounce","resizeDebounce","overflow","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","callbacks","onUpdated","function","optionsTemplate","defaultOptions","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","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","getDefaultInitializationStrategy","nativeScrollbarStyling","_padding","_content","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarIsOverlaid","defaultInitializationStrategy","initializationStrategy","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","contentArrangeCounter","createUniqueViewportArrangeElement","evaluateCreationFromStrategy","initializationValue","strategy","isBooleanValue","createStructureSetup","paddingNeeded","contentNeeded","targetIsElm","osTargetObj","_host","host","_target","_viewport","viewport","padding","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","viewportArrangeElm","_viewportArrange","_targetObj","_targetCtx","_destroy","createTrinsicLifecycle","lifecycleHub","_structureSetup","updateHints","_heightIntrinsic","heightIntrinsic","heightIntrinsicChanged","height","display","_sizeChanged","_contentMutation","createPaddingLifecycle","_setLifecycleCommunication","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_directionIsRTL","directionIsRTL","directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","width","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingInfo","_absolute","_viewportPaddingStyle","_paddingStyleChanged","max","overlaidScrollbarsHideOffset","whCacheOptions","sizeFraction","viewportOffsetSize","viewportRect","setAxisOverflowStyle","horizontal","overflowAmount","behavior","styleObj","overflowKey","behaviorIsVisible","behaviorIsVisibleHidden","behaviorIsScroll","hasOverflow","_visible","_behavior","createOverflowLifecycle","_doViewportArrange","_getLifecycleCommunication","updateViewportSizeFraction","getCurrentViewportSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","_viewportScrollSize","_viewportClientSize","_viewportSizeFraction","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostSizeFraction","hostClientSize","fractionalClientHeight","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","scroll","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","viewportScrollSize","viewportSizeFraction","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","_hostMutation","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","viewportSizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","viewportSizeFractionCahnged","viewportScrollSizeChanged","viewportContentSize","arrangedViewportScrollSize","arrangedViewportClientSize","viewportSizeFractionChanged","overflowAmountChanged","overflowChanged","viewportArranged","_viewportOverflowScroll","_viewportOverflowAmount","animationStartEventName","scrollEventName","scrollAmount","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","_getCurrentCacheValues","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","intersectionObserverInstance","entries","last","root","onSizeChanged","newSize","heightIntrinsicCache","createEventContentChange","eventContentChange","map","eventContentChangeRef","clear","_updateElements","getElements","eventElmList","elements","parsedEventNames","registredEventNames","newEntry","changingExistingEntry","finalEventNames","_updateEventContentChange","newEventContentChange","Map","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreNestedTargetChange","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","updateEventContentChange","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","getPropByPath","path","o","ignorePrefix","hostSelector","viewportSelector","contentSelector","attrs","newValue","diff","addedOrRemovedClass","directionIsRTLCacheValuesFallback","heightIntrinsicCacheValuesFallback","lifecycleCommunicationFallback","createLifecycleHub","structureSetup","lifecycleCommunication","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","instance","newLifecycleCommunication","lifecycles","updateLifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","sizeChanged","onTrinsicChanged","onHostMutation","requestAnimationFrame","onContentMutation","hostMutationObserver","contentMutationObserver","envUpdateListener","log","_state","_overflowAmount","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions","state"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/cache/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/setups/structureSetup.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHubObservers.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/lifecycles/lifecycleHub.ts","../src/overlayscrollbars.ts"],"sourcesContent":["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","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 { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: 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 { 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 { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray => (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 | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | false | 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","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 it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n return !(result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined));\r\n });\r\n\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string,\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 | false | 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 | false | 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 | false | 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","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): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void => (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst setT = window.setTimeout;\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (curr: Parameters): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n const args: Parameters = arguments as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout! > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n if (!mergeParamsResult) {\r\n invokeFunctionToDebounce(prevArguments || args);\r\n }\r\n\r\n clearTimeouts(timeoutId);\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n //animationiterationcount: 1,\r\n //columncount: 1,\r\n //fillopacity: 1,\r\n //flexgrow: 1,\r\n //flexshrink: 1,\r\n //fontweight: 1,\r\n //lineheight: 1,\r\n 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[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | false | null | undefined, prop: string, val: string | number): void => {\r\n try {\r\n if (elm) {\r\n const { style } = elm;\r\n if (!isUndefined(style[prop])) {\r\n style[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n style.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: StyleObject): void;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (elm?: HTMLElement | false | null | undefined, propertyPrefix?: string, propertySuffix?: string): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { 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","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 { PlainObject } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: unknown, ...args: unknown[]) => unknown;\r\nexport type OptionsTemplateType = ExtractPropsKey;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = {\r\n readonly _foreign: Record;\r\n readonly _validated: PartialOptions;\r\n};\r\n\r\nexport type PartialOptions = {\r\n [P in keyof T]?: T[P] extends OptionsObjectType ? PartialOptions : T[P];\r\n};\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst { 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/**\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: PartialOptions,\r\n template: OptionsTemplate,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const 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 T, 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: PartialOptions,\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","import {\r\n OptionsTemplate,\r\n OptionsObjectType,\r\n OptionsTemplateNativeTypes,\r\n OptionsTemplateTypes,\r\n OptionsTemplateValue,\r\n} from 'support/options/validation';\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\nexport type OptionsWithOptionsTemplateValue = [T, OptionsTemplateValue];\r\n\r\nexport type OptionsWithOptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsWithOptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsWithOptionsTemplateValue\r\n : never;\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 const transformOptions = (optionsWithOptionsTemplate: OptionsWithOptionsTemplate): 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 classNameViewportArrange = `${classNameViewport}-arrange`;\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 optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n} from 'support/options';\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible' | 'visible-hidden';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface OSOptions {\r\n resize: ResizeBehavior;\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[string, string]> | null;\r\n attributes: string[] | null;\r\n debounce: number | [number, number] | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n textarea: {\r\n dynWidth: boolean;\r\n dynHeight: boolean;\r\n inheritedAttrs: string | Array | null;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n callbacks: {\r\n onUpdated: (() => any) | null;\r\n };\r\n /*\r\n callbacks?: {\r\n onInitialized?: BasicEventCallback | null;\r\n onInitializationWithdrawn?: BasicEventCallback | null;\r\n onDestroyed?: BasicEventCallback | null;\r\n onScrollStart?: ScrollEventCallback | null;\r\n onScroll?: ScrollEventCallback | null;\r\n onScrollStop?: ScrollEventCallback | null;\r\n onOverflowChanged?: OverflowChangedCallback | null;\r\n onOverflowAmountChanged?: OverflowAmountChangedCallback | null;\r\n onDirectionChanged?: DirectionChangedCallback | null;\r\n onContentSizeChanged?: SizeChangedCallback | null;\r\n onHostSizeChanged?: SizeChangedCallback | null;\r\n onUpdated?: UpdatedCallback | null;\r\n };\r\n */\r\n}\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\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 = 'hidden scroll visible visible-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']], arrayNullValues], // array of tuples || null\r\n attributes: [null, arrayNullValues],\r\n debounce: [\r\n [0, 33],\r\n [oTypes.number, oTypes.array, oTypes.null],\r\n ], // number || number array || null\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 callbacks: {\r\n onUpdated: [null, [oTypes.function, oTypes.null]],\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 {\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 equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n PartialOptions,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { OSOptions, defaultOptions } from 'options';\r\n\r\nexport interface InitializationStrategy {\r\n _padding: boolean;\r\n _content: boolean;\r\n}\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\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 _cssCustomProperties: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): OSOptions;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n _defaultInitializationStrategy: InitializationStrategy;\r\n _defaultDefaultOptions: OSOptions;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (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, cssProperty('scrollbar-width')) === 'none' ||\r\n 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 = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst getDefaultInitializationStrategy = (nativeScrollbarStyling: boolean): InitializationStrategy => ({\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n});\r\n\r\nconst createEnvironment = (): Environment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = getNativeScrollbarStyling(envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const defaultInitializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling);\r\n let initializationStrategy = defaultInitializationStrategy;\r\n let defaultDefaultOptions = defaultOptions;\r\n\r\n const env: Environment = {\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n _getInitializationStrategy: () => ({ ...initializationStrategy }),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n initializationStrategy = assignDeep({}, initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: () => ({ ...defaultDefaultOptions }),\r\n _setDefaultOptions(newDefaultOptions) {\r\n defaultDefaultOptions = assignDeep({}, defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: defaultInitializationStrategy,\r\n _defaultDefaultOptions: defaultDefaultOptions,\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n 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 insertBefore,\r\n attr,\r\n isBoolean,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, 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 {\r\n _target: OSTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false | null;\r\n _content: HTMLElement | false | null;\r\n _viewportArrange: HTMLStyleElement | false | 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 | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement => {\r\n const elm = document.createElement('style');\r\n\r\n attr(elm, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n\r\n return elm;\r\n};\r\nconst evaluateCreationFromStrategy = (initializationValue: HTMLElement | boolean | undefined, strategy: boolean): HTMLElement | false | undefined => {\r\n const isBooleanValue = isBoolean(initializationValue);\r\n if (isBooleanValue || isUndefined(initializationValue)) {\r\n return (isBooleanValue ? initializationValue : strategy) && undefined;\r\n }\r\n return initializationValue as HTMLElement;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n const { _padding: paddingNeeded, _content: contentNeeded } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: Partial = targetIsElm\r\n ? ({} as Partial)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _padding: evaluateCreationFromStrategy((target as OSTargetObject).padding, paddingNeeded),\r\n _content: evaluateCreationFromStrategy((target as OSTargetObject).content, contentNeeded),\r\n };\r\n\r\n if (targetIsElm) {\r\n const viewport = createDiv(classNameViewport);\r\n const padding = paddingNeeded && createDiv(classNamePadding);\r\n const content = contentNeeded && createDiv(classNameContent);\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 const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, getTargetContents(_target!));\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(contentSlot));\r\n removeElements(_padding || _viewport);\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 if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (!_cssCustomProperties && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y)) {\r\n const viewportArrangeElm = createUniqueViewportArrangeElement();\r\n\r\n insertBefore(_viewport, viewportArrangeElm);\r\n push(destroyFns, removeElements.bind(0, viewportArrangeElm));\r\n\r\n obj._viewportArrange = viewportArrangeElm;\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 {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport 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\n/*\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\n*/\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): 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 | ResizeObserverEntry[] | Event | boolean) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as CacheValues)._value);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n const hasDimensions = domRectHasDimensions(_value);\r\n const hadDimensions = domRectHasDimensions(_previous);\r\n skip = !_previous || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as CacheValues)._changed; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache ? (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({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? 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(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [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\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(directionIsRTL.bind(0, 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 console.log;\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (_value) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return {\r\n _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 createDiv,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport 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\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\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 const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy);\r\n onSizeChanged();\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} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n _ignoreNestedTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed on nested targets if it returns true\r\n}\r\n\r\ninterface DOMTargetObserverOptions extends DOMObserverOptionsBase {\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed if it returns true\r\n}\r\n\r\ntype ContentChangeArrayItem = [StringNullUndefined, StringNullUndefined] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange = Array | false | null | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true ? DOMContentObserverOptions : DOMTargetObserverOptions;\r\n\r\nexport interface DOMObserver {\r\n _destroy: () => void;\r\n _update: () => void;\r\n}\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (target: Element, eventContentChange: DOMObserverEventContentChange, callback: (...args: any) => any) => {\r\n let map: Map | undefined;\r\n const _destroy = () => {\r\n if (map) {\r\n map.forEach((eventName: string, elm: Node) => off(elm, eventName, callback));\r\n map.clear();\r\n }\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (map && eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const registredEventNames = map!.get(elm);\r\n const newEntry = isUndefined(registredEventNames);\r\n const changingExistingEntry = !newEntry && eventNames !== registredEventNames;\r\n const finalEventNames = changingExistingEntry ? `${registredEventNames} ${eventNames}` : eventNames;\r\n\r\n if (changingExistingEntry) {\r\n off(elm, registredEventNames!, callback);\r\n }\r\n\r\n map!.set(elm, finalEventNames);\r\n on(elm, finalEventNames, callback);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = map || new Map();\r\n _destroy();\r\n _updateElements();\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n };\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreNestedTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const { _destroy: destroyEventContentChange, _updateElements: updateEventContentChangeElements } = createEventContentChange(\r\n target,\r\n isContentObserver && _eventContentChange,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n )\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = (isContentObserver ? _ignoreNestedTargetChange : _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 styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget = 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 // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _destroy: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\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, diffClass, debounce, isArray, isNumber } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport { LifecycleHub, LifecycleCheckOption, LifecycleUpdateHints } from 'lifecycles/lifecycleHub';\r\n\r\n//const hostSelector = `.${classNameHost}`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n// TODO: tabindex, etc. attributes for viewport\r\n// TODO: test _ignoreContentChange & _ignoreNestedTargetChange for content dom observer\r\n// TODO: test _ignoreTargetChange for target dom observer\r\n\r\n//const viewportSelector = `.${classNameViewport}`;\r\n//const contentSelector = `.${classNameContent}`;\r\nconst ignorePrefix = 'os-';\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nconst ignoreTargetChange = (target: Node, attrName: string, oldValue: string | null, newValue: string | null) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n return !!diff.find((addedOrRemovedClass) => addedOrRemovedClass.indexOf(ignorePrefix) !== 0);\r\n }\r\n return false;\r\n};\r\n\r\nexport const lifecycleHubOservers = (instance: LifecycleHub, updateLifecycles: (updateHints?: Partial | null) => unknown) => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n const { _structureSetup } = instance;\r\n const { _targetObj, _targetCtx } = _structureSetup;\r\n const { _host, _viewport, _content } = _targetObj;\r\n const { _isTextarea } = _targetCtx;\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const contentMutationObserverAttr = _isTextarea ? baseStyleChangingAttrsTextarea : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const updateLifecyclesWithDebouncedAdaptiveUpdateHints = debounce(updateLifecycles as (updateHints: Partial) => any, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const { _sizeChanged: prevSizeChanged, _hostMutation: prevHostMutation, _contentMutation: prevContentMutation } = prev[0];\r\n const { _sizeChanged: currSizeChanged, _hostMutation: currvHostMutation, _contentMutation: currContentMutation } = curr[0];\r\n const merged: [Partial] = [\r\n {\r\n _sizeChanged: prevSizeChanged || currSizeChanged,\r\n _hostMutation: prevHostMutation || currvHostMutation,\r\n _contentMutation: prevContentMutation || currContentMutation,\r\n },\r\n ];\r\n\r\n return merged;\r\n },\r\n });\r\n\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onSizeChanged = ({ _sizeChanged, _directionIsRTLCache, _appear }: SizeObserverCallbackParams) => {\r\n const updateFn = !_sizeChanged || _appear ? updateLifecycles : updateLifecyclesWithDebouncedAdaptiveUpdateHints;\r\n updateFn({\r\n _sizeChanged,\r\n _directionIsRTL: _directionIsRTLCache,\r\n });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent ? updateLifecycles : updateLifecyclesWithDebouncedAdaptiveUpdateHints;\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n };\r\n const onHostMutation = updateLifecyclesWithDebouncedAdaptiveUpdateHints.bind(0, {\r\n _hostMutation: true,\r\n }) as () => any;\r\n\r\n const trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs,\r\n _ignoreTargetChange: ignoreTargetChange,\r\n });\r\n let contentMutationObserver: DOMObserver | undefined;\r\n\r\n const updateOptions = (checkOption: LifecycleCheckOption) => {\r\n const { _value: elementEvents, _changed: elementEventsChanged } = checkOption | null>('updating.elementEvents');\r\n const { _value: attributes, _changed: attributesChanged } = checkOption('updating.attributes');\r\n const { _value: debounce, _changed: debounceChanged } = checkOption | number | null>('updating.debounce');\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver._update();\r\n contentMutationObserver._destroy();\r\n }\r\n contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _ignoreNestedTargetChange: ignoreTargetChange,\r\n //_nestedTargetSelector: hostSelector,\r\n /*\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget\r\n ? false\r\n : attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector) || liesBetween(target as Element, hostSelector, contentSelector)\r\n : false;\r\n },\r\n */\r\n });\r\n }\r\n\r\n if (debounceChanged) {\r\n updateLifecyclesWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounce)) {\r\n const timeout = debounce[0];\r\n const maxWait = debounce[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounce)) {\r\n debounceTimeout = debounce;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n };\r\n\r\n return {\r\n _trinsicObserver: trinsicObserver,\r\n _sizeObserver: sizeObserver,\r\n _updateObserverOptions: updateOptions,\r\n };\r\n};\r\n","import { style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createTrinsicLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup } = lifecycleHub;\r\n const { _content } = _structureSetup._targetObj;\r\n\r\n return (updateHints) => {\r\n const { _heightIntrinsic } = updateHints;\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: heightIntrinsic ? '' : '100%',\r\n display: heightIntrinsic ? '' : 'inline',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, TRBL } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _setLifecycleCommunication } = lifecycleHub;\r\n const { _host, _padding, _viewport } = _structureSetup._targetObj;\r\n const { _update: updatePaddingCache, _current: currentPaddingCache } = createCache(topRightBottomLeft.bind(0, _host, 'padding'), {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n });\r\n\r\n return (updateHints, checkOption, force) => {\r\n let { _value: padding, _changed: paddingChanged } = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL, _contentMutation } = updateHints;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n ({ _value: padding, _changed: paddingChanged } = updatePaddingCache(force));\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding!.r + padding!.l;\r\n const paddingVertical = padding!.t + padding!.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: paddingRelative ? (directionIsRTL ? -padding!.r : 'auto') : 0,\r\n left: paddingRelative ? (directionIsRTL ? 'auto' : -padding!.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding!.t : 0,\r\n paddingRight: paddingRelative ? padding!.r : 0,\r\n paddingBottom: paddingRelative ? padding!.b : 0,\r\n paddingLeft: paddingRelative ? padding!.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n _setLifecycleCommunication({\r\n _paddingInfo: {\r\n _absolute: !paddingRelative,\r\n _padding: padding!,\r\n },\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : {\r\n ...paddingStyle,\r\n ...viewportStyle,\r\n },\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n CacheValues,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n offsetSize,\r\n getBoundingClientRect,\r\n noop,\r\n each,\r\n} from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { StyleObject } from 'typings';\r\nimport { classNameViewportArrange, classNameViewportScrollbarStyling } from 'classnames';\r\n\r\ninterface OverflowAmountCacheContext {\r\n _viewportScrollSize: WH;\r\n _viewportClientSize: WH;\r\n _viewportSizeFraction: WH;\r\n}\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n}\r\n\r\ninterface UndoViewportArrangeResult {\r\n _redoViewportArrange: () => void;\r\n _viewportOverflowState?: ViewportOverflowState;\r\n}\r\n\r\ninterface OverflowOption {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n}\r\n\r\nconst { max, abs, round } = Math;\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst sizeFraction = (elm: HTMLElement): WH => {\r\n const viewportOffsetSize = offsetSize(elm);\r\n const viewportRect = getBoundingClientRect(elm);\r\n return {\r\n w: viewportRect.width - viewportOffsetSize.w,\r\n h: viewportRect.height - viewportOffsetSize.h,\r\n };\r\n};\r\nconst setAxisOverflowStyle = (horizontal: boolean, overflowAmount: number, behavior: OverflowBehavior, styleObj: StyleObject) => {\r\n const overflowKey: keyof StyleObject = horizontal ? 'overflowX' : 'overflowY';\r\n const behaviorIsVisible = behavior.indexOf('visible') === 0;\r\n const behaviorIsVisibleHidden = behavior === 'visible-hidden';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n const hasOverflow = overflowAmount > 0;\r\n\r\n if (behaviorIsVisible) {\r\n styleObj[overflowKey] = 'visible';\r\n }\r\n if (behaviorIsScroll && hasOverflow) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: behaviorIsVisible,\r\n _behavior: behaviorIsVisibleHidden ? 'hidden' : 'scroll',\r\n };\r\n};\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _doViewportArrange, _getLifecycleCommunication, _setLifecycleCommunication } = lifecycleHub;\r\n const { _host, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n const { _update: updateViewportSizeFraction, _current: getCurrentViewportSizeFraction } = createCache>(\r\n sizeFraction.bind(0, _viewport),\r\n whCacheOptions\r\n );\r\n const { _update: updateViewportScrollSizeCache, _current: getCurrentViewportScrollSizeCache } = createCache>(\r\n scrollSize.bind(0, _viewport),\r\n whCacheOptions\r\n );\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n ({ _viewportScrollSize, _viewportClientSize, _viewportSizeFraction }) => ({\r\n w: round(max(0, _viewportScrollSize.w - _viewportClientSize.w) - max(0, _viewportSizeFraction.w)),\r\n h: round(max(0, _viewportScrollSize.h - _viewportClientSize.h) - max(0, _viewportSizeFraction.h)),\r\n }),\r\n whCacheOptions\r\n );\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (viewportOverflowState: ViewportOverflowState, heightIntrinsic: boolean) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _absolute: paddingAbsolute, _padding: padding } = _getLifecycleCommunication()._paddingInfo;\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostSizeFraction = sizeFraction(_host);\r\n const hostClientSize = clientSize(_host);\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const paddingVertical = paddingAbsolute || style(_viewport, 'boxSizing') === 'content-box' ? padding.b + padding.t : 0;\r\n const fractionalClientHeight = hostClientSize.h + (abs(hostSizeFraction.h) < 1 ? hostSizeFraction.h : 0);\r\n\r\n style(_viewport, {\r\n height: fractionalClientHeight + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (showNativeOverlaidScrollbars: boolean, viewportStyleObj?: StyleObject): ViewportOverflowState => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow ? style(_viewport, ['overflowX', 'overflowY']) : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj!.overflowX === 'scroll',\r\n y: styleObj!.overflowY === 'scroll',\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? (overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x) : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? (overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y) : 0,\r\n };\r\n\r\n return {\r\n _overflowScroll: scroll,\r\n _scrollbarsHideOffsetArrange: {\r\n x: overlaidX && !!arrangeHideOffset,\r\n y: overlaidY && !!arrangeHideOffset,\r\n },\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n overflowAmount: WH,\r\n overflow: OverflowOption,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setAxisOverflowStyle(true, overflowAmount!.w, overflow.x, viewportStyleObj);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setAxisOverflowStyle(false, overflowAmount!.h, overflow.y, viewportStyleObj);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyleObj.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyleObj.overflowY = yVisibleBehavior;\r\n }\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n viewportSizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\r\n if (_doViewportArrange) {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingRight' : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + (abs(viewportSizeFraction.w) < 1 ? viewportSizeFraction.w : 0);\r\n const fractionalContenHeight = viewportScrollSize.h + (abs(viewportSizeFraction.h) < 1 ? viewportSizeFraction.h : 0);\r\n const arrangeSize = {\r\n w: hideOffsetY && arrangeY ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px` : '',\r\n h: hideOffsetX && arrangeX ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px` : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(`#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, 0);\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return _doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingLeft' : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n ): UndoViewportArrangeResult => {\r\n if (_doViewportArrange) {\r\n const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n removeClass(_viewport, classNameViewportArrange);\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return {\r\n _redoViewportArrange: () => {\r\n hideNativeScrollbars(finalViewportOverflowState, directionIsRTL, _doViewportArrange, prevStyle);\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n _viewportOverflowState: finalViewportOverflowState,\r\n };\r\n }\r\n return {\r\n _redoViewportArrange: noop,\r\n };\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation, _paddingStyleChanged } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || heightIntrinsicChanged);\r\n let viewportSizeFractionCache: CacheValues> = getCurrentViewportSizeFraction(force);\r\n let viewportScrollSizeCache: CacheValues> = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(force);\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\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 (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) {\r\n const { _redoViewportArrange, _viewportOverflowState: undoViewportArrangeOverflowState } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL!,\r\n preMeasureViewportOverflowState\r\n );\r\n const { _value: viewportSizeFraction, _changed: viewportSizeFractionCahnged } = (viewportSizeFractionCache = updateViewportSizeFraction(force));\r\n const { _value: viewportScrollSize, _changed: viewportScrollSizeChanged } = (viewportScrollSizeCache = updateViewportScrollSizeCache(force));\r\n const viewportContentSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize!;\r\n let arrangedViewportClientSize = viewportContentSize;\r\n\r\n _redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || viewportSizeFractionCahnged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(undoViewportArrangeOverflowState, viewportScrollSize!, viewportSizeFraction!, directionIsRTL!)\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _viewportSizeFraction: viewportSizeFraction!,\r\n _viewportScrollSize: {\r\n w: max(viewportScrollSize!.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize!.h, arrangedViewportScrollSize.h),\r\n },\r\n _viewportClientSize: {\r\n w: arrangedViewportClientSize.w + max(0, viewportContentSize.w - viewportScrollSize!.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportContentSize.h - viewportScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: viewportSizeFraction, _changed: viewportSizeFractionChanged } = viewportSizeFractionCache;\r\n const { _value: viewportScrollSize, _changed: viewportScrollSizeChanged } = viewportScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n const { _value: overflow, _changed: overflowChanged } = checkOption('overflow');\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n viewportSizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, overflowAmount!, overflow, viewportStyle);\r\n const viewportArranged = arrangeViewport(viewportOverflowState, viewportScrollSize!, viewportSizeFraction!, directionIsRTL!);\r\n hideNativeScrollbars(viewportOverflowState, directionIsRTL!, viewportArranged, viewportStyle);\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n // TODO: hide host overflow if scroll x or y and no padding element there\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n // TODO: overflow: visible on padding / host if overflow visible on both axis\r\n\r\n style(_viewport, viewportStyle);\r\n\r\n _setLifecycleCommunication({\r\n _viewportOverflowScroll: viewportOverflowState._overflowScroll,\r\n _viewportOverflowAmount: overflowAmount,\r\n });\r\n }\r\n };\r\n};\r\n","import { XY, WH, TRBL, CacheValues, PartialOptions, each, hasOwnProperty, isNumber, scrollLeft, scrollTop, assignDeep } from 'support';\r\nimport { OSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { lifecycleHubOservers } from 'lifecycles/lifecycleHubObservers';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface LifecycleCommunication {\r\n _paddingInfo: {\r\n _absolute: boolean;\r\n _padding: TRBL;\r\n };\r\n _viewportPaddingStyle: StyleObject;\r\n _viewportOverflowScroll: XY;\r\n _viewportOverflowAmount: WH;\r\n}\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n _paddingStyleChanged: 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 Lifecycle = (\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport interface LifecycleHubState {\r\n _overflowAmount: WH;\r\n}\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: PartialOptions | null, force?: boolean): void;\r\n _state(): LifecycleHubState;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: OSOptions;\r\n _structureSetup: StructureSetup;\r\n // whether the \"viewport arrange\" strategy must be used (true if no native scrollbar hiding and scrollbars are overlaid)\r\n _doViewportArrange: boolean;\r\n _getLifecycleCommunication(): LifecycleCommunication;\r\n _setLifecycleCommunication(newLifecycleCommunication?: Partial): void;\r\n}\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) : undefined;\r\n\r\nconst booleanCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst lifecycleCommunicationFallback: LifecycleCommunication = {\r\n _paddingInfo: {\r\n _absolute: false,\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n },\r\n _viewportOverflowScroll: {\r\n x: false,\r\n y: false,\r\n },\r\n _viewportOverflowAmount: {\r\n w: 0,\r\n h: 0,\r\n },\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n};\r\n\r\nexport const createLifecycleHub = (options: OSOptions, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n let lifecycleCommunication = lifecycleCommunicationFallback;\r\n const { _viewport } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n _doViewportArrange: doViewportArrange,\r\n _getLifecycleCommunication: () => lifecycleCommunication,\r\n _setLifecycleCommunication(newLifecycleCommunication) {\r\n lifecycleCommunication = assignDeep({}, lifecycleCommunication, newLifecycleCommunication);\r\n },\r\n };\r\n const lifecycles: Lifecycle[] = [createTrinsicLifecycle(instance), createPaddingLifecycle(instance), createOverflowLifecycle(instance)];\r\n\r\n const updateLifecycles = (updateHints?: Partial | null, changedOptions?: Partial | null, force?: boolean) => {\r\n let {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged = force || false,\r\n _hostMutation = force || false,\r\n _contentMutation = force || false,\r\n _paddingStyleChanged = force || false,\r\n } = updateHints || {};\r\n\r\n const finalDirectionIsRTL =\r\n _directionIsRTL || (_sizeObserver ? _sizeObserver._getCurrentCacheValues(force)._directionIsRTL : booleanCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic || (_trinsicObserver ? _trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : booleanCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n // place before updating lifecycles because of possible flushing of debounce\r\n if (_updateObserverOptions) {\r\n _updateObserverOptions(checkOption);\r\n }\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const {\r\n _sizeChanged: adaptiveSizeChanged,\r\n _hostMutation: adaptiveHostMutation,\r\n _contentMutation: adaptiveContentMutation,\r\n _paddingStyleChanged: adaptivePaddingStyleChanged,\r\n } =\r\n lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n },\r\n checkOption,\r\n !!force\r\n ) || {};\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n _paddingStyleChanged = adaptivePaddingStyleChanged || _paddingStyleChanged;\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n if (options.callbacks.onUpdated) {\r\n options.callbacks.onUpdated();\r\n }\r\n };\r\n const { _sizeObserver, _trinsicObserver, _updateObserverOptions } = lifecycleHubOservers(instance, updateLifecycles);\r\n\r\n const update = (changedOptions?: Partial | null, force?: boolean) => {\r\n updateLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = update.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n console.log(getEnvironment());\r\n\r\n return {\r\n _update: update,\r\n _state: () => ({\r\n _overflowAmount: lifecycleCommunication._viewportOverflowAmount,\r\n }),\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\nimport { PartialOptions, validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { OSOptions, optionsTemplate } from 'options';\r\nimport { getEnvironment } from 'environment';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (target: OSTarget | OSTargetObject, options?: PartialOptions, extensions?: any): OverlayScrollbars;\r\n}\r\n\r\nexport interface OverlayScrollbars {\r\n options(): OSOptions;\r\n options(newOptions?: PartialOptions): OSOptions;\r\n\r\n update(force?: boolean): void;\r\n\r\n state(): any;\r\n}\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: OSTarget | OSTargetObject,\r\n options?: PartialOptions,\r\n extensions?: any\r\n): OverlayScrollbars => {\r\n const { _getDefaultOptions } = getEnvironment();\r\n const currentOptions: OSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options || ({} as PartialOptions), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\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 state: () => lifecycleHub._state(),\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"],"names":["createCache","update","options","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","Object","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","elm","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","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","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","style","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","diffClass","classNameA","classNameB","classNameASplit","split","classNameBSplit","tempObj","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","stopAndPrevent","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalTRBL","equalBCRWH","round","Math","setT","setTimeout","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","_timeout","_maxDelay","_mergeParams","invokeFunctionToDebounce","args","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","setCSSVal","setProperty","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","_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","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","numberAllowedValues","oTypes","number","arrayNullValues","null","stringArrayNullAllowedValues","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","updating","elementEvents","attributes","overflow","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","callbacks","onUpdated","function","optionsTemplate","defaultOptions","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","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","getDefaultInitializationStrategy","nativeScrollbarStyling","_padding","_content","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarIsOverlaid","defaultInitializationStrategy","initializationStrategy","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","contentArrangeCounter","createUniqueViewportArrangeElement","evaluateCreationFromStrategy","initializationValue","strategy","isBooleanValue","createStructureSetup","paddingNeeded","contentNeeded","targetIsElm","osTargetObj","_host","host","_target","_viewport","viewport","padding","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","viewportArrangeElm","_viewportArrange","_targetObj","_targetCtx","_destroy","animationStartEventName","scrollEventName","scrollAmount","directionIsRTL","domRectHasDimensions","height","width","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","appear","doDirectionScroll","pop","contentRect","hasDimensions","hadDimensions","rtl","_sizeChanged","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","_getCurrentCacheValues","_directionIsRTL","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","intersectionObserverInstance","entries","last","heightIntrinsic","root","onSizeChanged","newSize","heightIntrinsicCache","_heightIntrinsic","createEventContentChange","eventContentChange","map","clear","_updateElements","getElements","eventElmList","elements","registredEventNames","newEntry","changingExistingEntry","finalEventNames","set","Map","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreNestedTargetChange","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","ignorePrefix","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","newValue","diff","addedOrRemovedClass","lifecycleHubOservers","instance","updateLifecycles","debounceTimeout","debounceMaxDelay","_structureSetup","contentMutationObserverAttr","updateLifecyclesWithDebouncedAdaptiveUpdateHints","prev","prevSizeChanged","_hostMutation","prevHostMutation","_contentMutation","prevContentMutation","currSizeChanged","currvHostMutation","currContentMutation","merged","onTrinsicChanged","updateFn","onContentMutation","contentChangedTroughEvent","onHostMutation","hostMutationObserver","contentMutationObserver","updateOptions","checkOption","elementEventsChanged","attributesChanged","debounceChanged","updateContentMutationObserver","timeout","maxWait","_trinsicObserver","_sizeObserver","_updateObserverOptions","createTrinsicLifecycle","lifecycleHub","updateHints","heightIntrinsicChanged","display","createPaddingLifecycle","_setLifecycleCommunication","updatePaddingCache","currentPaddingCache","paddingChanged","directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingInfo","_absolute","_viewportPaddingStyle","_paddingStyleChanged","max","overlaidScrollbarsHideOffset","whCacheOptions","sizeFraction","viewportOffsetSize","viewportRect","setAxisOverflowStyle","horizontal","overflowAmount","behavior","styleObj","overflowKey","behaviorIsVisible","behaviorIsVisibleHidden","behaviorIsScroll","hasOverflow","_visible","_behavior","createOverflowLifecycle","_doViewportArrange","_getLifecycleCommunication","updateViewportSizeFraction","getCurrentViewportSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","_viewportScrollSize","_viewportClientSize","_viewportSizeFraction","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostSizeFraction","hostClientSize","fractionalClientHeight","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","scroll","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","viewportScrollSize","viewportSizeFraction","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","viewportSizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","viewportSizeFractionCahnged","viewportScrollSizeChanged","viewportContentSize","arrangedViewportScrollSize","arrangedViewportClientSize","viewportSizeFractionChanged","overflowAmountChanged","overflowChanged","viewportArranged","_viewportOverflowScroll","_viewportOverflowAmount","getPropByPath","path","o","booleanCacheValuesFallback","lifecycleCommunicationFallback","createLifecycleHub","structureSetup","lifecycleCommunication","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","newLifecycleCommunication","lifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","envUpdateListener","log","_state","_overflowAmount","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions","state"],"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 1821851..960419e 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js @@ -1 +1 @@ -const t=(t,e)=>{const{o:n,s:r,u:o}=e||{};let i,a=r;return{_:(e,r)=>{const s=a,l=t?t(r,a,i):r,c=e||(n?!n(s,l):s!==l);return(c||o)&&(a=l,i=s),{g:a,v:i,p:c}},m:t=>({g:a,v:i,p:!!t})}},e=Node.ELEMENT_NODE,{toString:n,hasOwnProperty:r}=Object.prototype;function o(t){return void 0===t}function i(t){return null===t}const a=t=>o(t)||i(t)?`${t}`:n.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase();function s(t){return"number"==typeof t}function l(t){return"string"==typeof t}function c(t){return"boolean"==typeof t}function u(t){return"function"==typeof t}function d(t){return Array.isArray(t)}function _(t){return"object"==typeof t&&!d(t)&&!i(t)}function g(t){const e=!!t&&t.length,n=s(e)&&e>-1&&e%1==0;return!!(d(t)||!u(t)&&n)&&(!(e>0&&_(t))||e-1 in t)}function f(t){if(!t||!_(t)||"object"!==a(t))return!1;let e;const n="constructor",i=t[n],s=i&&i.prototype,l=r.call(t,n),c=s&&r.call(s,"isPrototypeOf");if(i&&!l&&!c)return!1;for(e in t);return o(e)||r.call(t,e)}function v(t){const n=window.Element;return!!t&&(n?t instanceof n:t.nodeType===e)}function h(t,e){if(g(t))for(let n=0;ne(t[n],n,t));return t}const p=(t,e,n)=>(n||l(e)||!g(e)?t.push(e):Array.prototype.push.apply(t,e),t),w=t=>{if(Array.from)return Array.from(t);const e=[];return h(t,t=>{p(e,t)}),e},b=t=>t&&0===t.length,y=(t,e)=>{const n=t=>t&&t(e);t instanceof Set?t.forEach(n):h(t,n)},m=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),S=t=>t?Object.keys(t):[];function $(t,e,n,r,o,a,s){const l=[e,n,r,o,a,s];return"object"==typeof t&&!i(t)||u(t)||(t={}),h(l,e=>{h(S(e),n=>{const r=e[n];if(t===r)return!0;const o=d(r);if(r&&(f(r)||o)){const e=t[n];let i=e;o&&!d(e)?i=[]:o||f(e)||(i={}),t[n]=$(i,r)}else t[n]=r})}),t}function C(t){for(const e in t)return!1;return!0}function x(t,e,n,r){if(o(r))return n?n[t]:e;n&&(n[t]=r)}function O(t,e,n){if(o(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)}function z(t,e){return x("scrollLeft",0,t,e)}function A(t,e){return x("scrollTop",0,t,e)}const L=Element.prototype,I=(t,e)=>{const n=[],r=e?v(e)?e:null:document;return r?p(n,r.querySelectorAll(t)):n},M=(t,e)=>{if(v(t)){return(L.matches||L.msMatchesSelector).call(t,e)}return!1},T=t=>t?w(t.childNodes):[],R=t=>t?t.parentElement:null,V=(t,e)=>{if(v(t)){const n=L.closest;if(n)return n.call(t,e);do{if(M(t,e))return t;t=R(t)}while(t)}return null},j=(t,e,n)=>{const r=t&&V(t,e),o=t&&((t,e)=>{const n=e?v(e)?e:null:document;return n?n.querySelector(t):null})(n,r);return!(!r||!o)&&(r===t||o===t||V(V(t,n),e)!==r)},E=(t,e,n)=>{if(n){let r,o=e;t&&(g(n)?(r=document.createDocumentFragment(),h(n,t=>{t===o&&(o=t.previousSibling),r.appendChild(t)})):r=n,e&&(o?o!==e&&(o=o.nextSibling):o=t.firstChild),t.insertBefore(r,o||null))}},H=(t,e)=>{E(t,null,e)},P=(t,e)=>{E(t,t&&t.firstChild,e)},B=(t,e)=>{E(R(t),t&&t.nextSibling,e)},D=t=>{if(g(t))h(w(t),t=>D(t));else if(t){const e=R(t);e&&e.removeChild(t)}},F=t=>{const e=document.createElement("div");return t&&O(e,"class",t),e},N=t=>{const e=F();return e.innerHTML=t.trim(),h(T(e),t=>D(t))},q=t=>t.charAt(0).toUpperCase()+t.slice(1),k=["-webkit-","-moz-","-o-","-ms-"],G=["WebKit","Moz","O","MS","webkit","moz","o","ms"],Y={},X={},U=t=>{let e=X[t];if(m(X,t))return e;const n=q(t),r=F().style;return h(k,o=>{const i=o.replace(/-/g,""),a=[t,o+t,i+n,q(i)+n];return!(e=a.find(t=>void 0!==r[t]))}),X[t]=e||""},W=t=>{let e=Y[t]||window[t];return m(Y,t)||(h(G,n=>(e=e||window[n+q(t)],!e)),Y[t]=e),e},J=W("MutationObserver"),K=W("IntersectionObserver"),Q=W("ResizeObserver"),Z=W("cancelAnimationFrame"),tt=W("requestAnimationFrame"),et=/[^\x20\t\r\n\f]+/g,nt=(t,e,n)=>{let r,o=0,i=!1;if(t&&l(e)){const a=e.match(et)||[];for(i=a.length>0;r=a[o++];)i=!!n(t.classList,r)&&i}return i},rt=(t,e)=>{nt(t,e,(t,e)=>t.add(e))},ot=(t,e)=>{nt(t,e,(t,e)=>t.remove(e))},it={w:0,h:0},at=()=>({w:window.innerWidth,h:window.innerHeight}),st=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:it,lt=t=>t?{w:t.clientWidth,h:t.clientHeight}:it,ct=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:it,ut=t=>t.getBoundingClientRect();let dt;const _t=t=>t.split(" "),gt=(t,e,n,r)=>{h(_t(e),e=>{t.removeEventListener(e,n,r)})},ft=(t,e,n,r)=>{const i=(()=>{if(o(dt)){dt=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){dt=!0}}))}catch(t){}}return dt})(),a=i&&r&&r.S||!1,s=r&&r.$||!1,l=r&&r.C||!1,c=[],u=i?{passive:a,capture:s}:s;return h(_t(e),e=>{const r=l?o=>{t.removeEventListener(e,r,s),n&&n(o)}:n;p(c,gt.bind(null,t,e,r,s)),t.addEventListener(e,r,u)}),y.bind(0,c)},vt=t=>(t=>t.stopPropagation())(t)||(t=>t.preventDefault())(t),ht=(t,e,n,r)=>{if(t&&e){let o=!0;return h(n,n=>{(r?r(t[n]):t[n])!==(r?r(e[n]):e[n])&&(o=!1)}),o}return!1},pt=(t,e)=>ht(t,e,["w","h"]),wt=(t,e)=>ht(t,e,["t","r","b","l"]),bt=(t,e,n)=>ht(t,e,["width","height"],n&&(t=>Math.round(t))),yt=()=>{},mt=(t,e,n)=>{let r,o;const i=s(e)&&e>0,a=s(n)&&n>0,l=i?window.clearTimeout:Z,c=i?window.setTimeout:tt,u=function(e){o=a?performance.now():0,r&&l(r),t.apply(this,e)};return function(){const t=u.bind(this,arguments),i=!!a&&performance.now()-o>=n;r&&l(r),r=i?t():c(t,e)}},St={opacity:1,zindex:1},$t=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},Ct=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],xt=(t,e,n)=>{try{if(t){const{style:r}=t;o(r[e])?r.setProperty(e,n):r[e]=((t,e)=>!St[t.toLowerCase()]&&s(e)?`${e}px`:e)(e,n)}}catch(r){}};function Ot(t,e){const n=l(e);if(d(e)||n){let r=n?"":{};if(t){const o=window.getComputedStyle(t,null);r=n?Ct(t,o,e):e.reduce((e,n)=>(e[n]=Ct(t,o,n),e),r)}return r}h(S(e),n=>xt(t,n,e[n]))}const zt=(t,e,n)=>{const r=e?`${e}-`:"",o=n?`-${n}`:"",i=`${r}top${o}`,a=`${r}right${o}`,s=`${r}bottom${o}`,l=`${r}left${o}`,c=Ot(t,[i,a,s,l]);return{t:$t(c[i]),r:$t(c[a]),b:$t(c[s]),l:$t(c[l])}},At={x:0,y:0},Lt=t=>{const e=t?ut(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:At};var It=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]=Tt[0]+e+Tt[1],t),{}),Vt=(t,e,n,r,i)=>{const s={},c=It({},t);return h(S(e).filter(e=>m(t,e)),u=>{const _=o(n[u])?{}:n[u],g=t[u],v=e[u],w=f(v),b=i?`${i}.`:"";if(w&&f(g)){const t=Vt(g,v,_,r,b+u);s[u]=t.O,c[u]=t.A,h([c,s],t=>{C(t[u])&&delete t[u]})}else if(!w){let t=!1;const e=[],n=[],i=a(g);if(h(d(v)?v:[v],r=>{let a;h(Rt,(t,e)=>{t===r&&(a=e)});const s=o(a);if(s&&l(g)){const n=r.split(" ");t=!!n.find(t=>t===g),p(e,n)}else t=Rt[i]===r;return p(n,s?Rt.string:a),!t}),t){(d(g)||f(g)?Mt(g)!==Mt(_):g!==_)&&(s[u]=g)}else r&&console.warn(`${`The option "${b}${u}" wasn't set, because it doesn't accept the type [ ${i.toUpperCase()} ] with the value of "${g}".\r\n`+`Accepted types are: [ ${n.join(", ").toUpperCase()} ].\r\n`}${e.length>0?`\r\nValid strings are: [ ${e.join(", ")} ].`:""}`);delete c[u]}}),{A:c,O:s}},jt=(t,e,n,r)=>Vt(t,e,n||{},r||!1),Et=t=>{const e={L:{},I:{}};return h(S(t),n=>{const r=t[n];if(d(r))e.L[n]=r[1],e.I[n]=r[0];else{const t=Et(r);e.L[n]=t.L,e.I[n]=t.I}}),e},Ht="os-environment",Pt=`${Ht}-flexbox-glue`,Bt=`${Pt}-max`,Dt="os-host",Ft="os-padding",Nt="os-viewport",qt=`${Nt}-arrange`,kt="os-content",Gt=`${Nt}-scrollbar-styled`,Yt="os-size-observer",Xt=`${Yt}-appear`,Ut=`${Yt}-listener`,Wt=`${Ut}-scroll`,Jt=`${Ut}-item`,Kt=`${Jt}-final`,Qt="os-trinsic-observer",Zt=Rt.number,te=[Rt.string,Rt.array,Rt.null],ee=[!0,Rt.boolean],ne=[!1,Rt.boolean],re="hidden scroll visible visible-hidden",oe={resize:["none","none both horizontal vertical"],paddingAbsolute:ne,updating:{elementEvents:[[["img","load"]],[Rt.array,Rt.null]],contentMutationDebounce:[80,Zt],hostMutationDebounce:[0,Zt],resizeDebounce:[0,Zt]},overflow:{x:["scroll",re],y:["scroll",re]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,Zt],dragScroll:ee,clickScroll:ne,touch:ee},textarea:{dynWidth:ne,dynHeight:ne,inheritedAttrs:[["style","class"],te]},nativeScrollbarsOverlaid:{show:ne,initialize:ne},callbacks:{onUpdated:[null,[Rt.function,Rt.null]]}},{L:ie,I:ae}=Et(oe);let se;const{abs:le,round:ce}=Math,ue=(t,e)=>{H(t,e);const n=lt(e),r=st(e);return{x:r.h-n.h,y:r.w-n.w}},de=(t,e)=>{const n="hidden";Ot(t,{overflowX:n,overflowY:n,direction:"rtl"}),z(t,0);const r=Lt(t),o=Lt(e);z(t,-999);const i=Lt(e);return{i:r.x===o.x,n:o.x!==i.x}},_e=(t,e)=>{rt(t,Pt);const n=ut(t),r=ut(e),o=bt(r,n,!0);rt(t,Bt);const i=ut(t),a=ut(e),s=bt(a,i,!0);return o&&s},ge=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},fe=()=>{const{body:t}=document,e=N(`
`)[0],n=e.firstChild,r=new Set,o=ue(t,e),i=(t=>{let e=!1;rt(t,Gt);try{e="none"===Ot(t,U("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(n){}return e})(e),a={x:0===o.x,y:0===o.y},s=(t=>({M:!t,T:!1}))(i);let l=s,c=ae;const u={R:o,V:a,j:i,H:"-1"===Ot(e,"zIndex"),P:de(e,n),B:_e(e,n),D(t){r.add(t)},F(t){r.delete(t)},N:()=>It({},l),q(t){l=$({},l,t)},k:()=>It({},c),G(t){c=$({},c,t)},Y:s,X:c};var d,_;if(_="style",(d=e)&&d.removeAttribute(_),D(e),!(i||a.x&&a.y)){let n=at(),i=ge(),a=o;window.addEventListener("resize",()=>{if(r.size){const o=at(),s={w:o.w-n.w,h:o.h-n.h};if(0===s.w&&0===s.h)return;const l={w:le(s.w),h:le(s.h)},c={w:le(ce(o.w/(n.w/100))),h:le(ce(o.h/(n.h/100)))},u=ge(),d=l.w>2&&l.h>2,_=!((t,e)=>{const n=le(t),r=le(e);return!(n===r||n+1===r||n-1===r)})(c.w,c.h),g=u!==i&&i>0;if(d&&_&&g){const n=se.R=ue(t,e);D(e),a.x===n.x&&a.y===n.y||y(r),a=n}n=o,i=u}})}return u},ve=()=>(se||(se=fe()),se),he=t=>{H(R(t),T(t)),D(t)};let pe=0;const we=(t,e)=>{const n=c(t);return n||o(t)?(n?t:e)&&void 0:t},be=t=>{const{N:n,j:r,V:i,H:a}=ve(),{M:s,T:l}=n(),c=function(t){const n=window.HTMLElement;return!!t&&(n?t instanceof n:t.nodeType===e)}(t),u=c?{}:{U:t.host,W:t.target,J:t.viewport,M:we(t.padding,s),T:we(t.content,l)};if(c){const e=F(Nt),n=s&&F(Ft),r=l&&F(kt);u.W=t,u.M=n,u.J=e,u.T=r}let{W:d,M:_,J:g,T:f}=u;const v=[],h=M(d,"textarea"),w=!h&&M(d,"body"),b=h?u.U||F():d,m=t=>h?d:T(t);if(h&&b!==u.U&&(B(d,b),p(v,()=>{B(b,d),D(b)})),c){const t=f||g;H(t,m(d)),H(b,_),H(_||b,g),H(g,f),p(v,()=>{H(b,T(t)),D(_||g),ot(b,Dt)})}else{const t=f||g||_||b,e=o(_),n=o(g),r=o(f),i=m(t);_=u.M=e?F():_,g=u.J=n?F():g,f=u.T=r?F():f,H(b,_),H(_||b,g),H(g,f);H(f||g,i),p(v,()=>{r&&he(f),n&&he(g),e&&he(_),ot(b,Dt),ot(_,Ft),ot(g,Nt),ot(f,kt)})}rt(b,Dt),rt(_,Ft),rt(g,Nt),rt(f,kt);const S=d.ownerDocument,$=S.body,C={K:S.defaultView,Z:S,tt:R($),et:$,nt:h,rt:w},x=It({},u,{U:b});if(r)p(v,ot.bind(0,g,Gt));else if(!a&&(i.x||i.y)){const t=(()=>{const t=document.createElement("style");return O(t,"id",`${qt}-${pe}`),pe++,t})();A=t,E(R(z=g),z,A),p(v,D.bind(0,t)),x.ot=t}var z,A;return{it:x,at:C,st:()=>{y(v)}}},ye=t=>{const{lt:e}=t,{T:n}=e.it;return t=>{const{ct:e}=t,{g:r,p:o}=e;return o&&Ot(n,{height:r?"":"100%",display:r?"":"inline"}),{ut:o,dt:o}}},me=e=>{const{lt:n,_t:r}=e,{U:o,M:i,J:a}=n.it,{_:s,m:l}=t(zt.bind(0,o,"padding"),{o:wt,s:zt()});return(t,e,n)=>{let{g:o,p:c}=l(n);const{j:u,B:d}=ve(),{ut:_,gt:g,dt:f}=t,{g:v,p:h}=g,{g:p,p:w}=e("paddingAbsolute");(_||c||!d&&f)&&({g:o,p:c}=s(n));const b=w||h||c;if(b){const t=!p||!i&&!u,e=o.r+o.l,n=o.t+o.b,s={marginRight:t&&!v?-e:0,marginBottom:t?-n:0,marginLeft:t&&v?-e:0,top:t?-o.t:0,right:t?v?-o.r:"auto":0,left:t?v?"auto":-o.l:0,width:t?`calc(100% + ${e}px)`:""},l={paddingTop:t?o.t:0,paddingRight:t?o.r:0,paddingBottom:t?o.b:0,paddingLeft:t?o.l:0};Ot(i||a,s),Ot(a,l),r({ft:{vt:!t,M:o},ht:i?l:It({},s,l)})}return{pt:b}}},{max:Se,abs:$e,round:Ce}=Math,xe=42,Oe={o:pt,s:{w:0,h:0}},ze=t=>{const e=st(t),n=ut(t);return{w:n.width-e.w,h:n.height-e.h}},Ae=(t,e,n,r)=>{const o=t?"overflowX":"overflowY",i=0===n.indexOf("visible"),a="visible-hidden"===n,s="scroll"===n,l=e>0;return i&&(r[o]="visible"),s&&l&&(r[o]=n),{wt:i,bt:a?"hidden":"scroll"}},Le=e=>{const{lt:n,yt:r,St:o,_t:i}=e,{U:a,J:s,ot:l}=n.it,{_:c,m:u}=t(ze.bind(0,s),Oe),{_:d,m:_}=t(ct.bind(0,s),Oe),{_:g,m:f}=t(({$t:t,Ct:e,xt:n})=>({w:Ce(Se(0,t.w-e.w)-Se(0,n.w)),h:Ce(Se(0,t.h-e.h)-Se(0,n.h))}),Oe),v=(t,e)=>{if(Ot(s,{height:""}),e){const{vt:e,M:n}=o().ft,{Ot:r,zt:i}=t,l=ze(a),c=lt(a),u=e||"content-box"===Ot(s,"boxSizing")?n.b+n.t:0,d=c.h+($e(l.h)<1?l.h:0);Ot(s,{height:d+(r.x?i.x:0)-u})}},p=(t,e)=>{const{R:n,V:r,j:o}=ve(),{x:i,y:a}=r,l=o||t?0:xe,c=!e?Ot(s,["overflowX","overflowY"]):e,u={x:"scroll"===c.overflowX,y:"scroll"===c.overflowY};return{Ot:u,At:{x:i&&!!l,y:a&&!!l},zt:{x:u.x&&!o?i?l:n.x:0,y:u.y&&!o?a?l:n.y:0}}},w=(t,e,n,i)=>{if(r){const{zt:r,At:a}=t,{x:c,y:u}=a,{x:d,y:_}=r,{ht:g}=o(),f=g[i?"paddingRight":"paddingLeft"],v=g.paddingTop,h=e.w+($e(n.w)<1?n.w:0),p=e.h+($e(n.h)<1?n.h:0),w={w:_&&u?`${_+h-f}px`:"",h:d&&c?`${d+p-v}px`:""};if(l){const{sheet:t}=l;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${O(l,"id")} + .${qt}::before {}`,0);const n=e[0].style;n.width=w.w,n.height=w.h}}}else Ot(s,{"--os-vaw":w.w,"--os-vah":w.h})}return r},b=(t,e,n,r)=>{const{zt:i,At:a}=t,{x:s,y:l}=a,{x:c,y:u}=i,{ht:d}=o(),_=e?"marginLeft":"marginRight",g=e?"paddingLeft":"paddingRight",f=d[_],v=d.marginBottom,h=d[g],p=d.paddingBottom;r.width=`calc(100% + ${u+-1*f}px)`,r[_]=-u+f,r.marginBottom=-c+v,n&&(r[g]=h+(l?u:0),r.paddingBottom=p+(s?c:0))};return(t,e,n)=>{const{gt:a,ct:l,ut:y,Lt:m,dt:$,pt:C}=t,{B:x,j:O,V:z}=ve(),{g:A,p:L}=l,{g:I,p:M}=a,{g:T,p:R}=e("nativeScrollbarsOverlaid.show"),V=T&&z.x&&z.y,j=!x&&(y||$||m||R||L);let E,H=u(n),P=_(n),B=f(n);if(R&&O&&(V?ot(s,Gt):rt(s,Gt)),j&&(E=p(V),v(E,!!A)),y||C||$||R||M){const{It:t,Mt:e}=((t,e,n)=>{if(r){const i=n||p(t),{ht:a}=o(),{B:l}=ve(),{At:c}=i,{x:u,y:d}=c,_={},g=t=>h(t.split(" "),t=>{_[t]=a[t]});l||(_.height=""),u&&g("marginBottom paddingTop paddingBottom"),d&&g("marginLeft marginRight paddingLeft paddingRight");const f=Ot(s,S(_));return ot(s,qt),Ot(s,_),{It:()=>{b(i,e,r,f),Ot(s,f),rt(s,qt)},Mt:i}}return{It:yt}})(V,I,E),{g:i,p:a}=H=c(n),{g:l,p:u}=P=d(n),_=lt(s);let f=l,v=_;t(),(u||a||R)&&e&&!V&&w(e,l,i,I)&&(v=lt(s),f=ct(s)),B=g(n,{xt:i,$t:{w:Se(l.w,f.w),h:Se(l.h,f.h)},Ct:{w:v.w+Se(0,_.w-l.w),h:v.h+Se(0,_.h-l.h)}})}const{g:D,p:F}=H,{g:N,p:q}=P,{g:k,p:G}=B,{g:Y,p:X}=e("overflow");if(C||F||q||G||X||R||M||j){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},e=((t,e,n,r)=>{const{wt:o,bt:i}=Ae(!0,e.w,n.x,r),{wt:a,bt:s}=Ae(!1,e.h,n.y,r);return o&&!a&&(r.overflowX=i),a&&!o&&(r.overflowY=s),p(t,r)})(V,k,Y,t),n=w(e,N,D,I);b(e,I,n,t),j&&v(e,!!A),Ot(s,t),i({Tt:e.Ot,Rt:k})}}},Ie="animationstart",Me="scroll",Te=3333333,Re=t=>"rtl"===Ot(t,"direction"),Ve=t=>t&&(t.height||t.width),je=(e,n,r)=>{const{Vt:o=!1,jt:i=!1}=r||{},{P:a}=ve(),s=N(`
`)[0],l=s.firstChild,{_:u}=t(0,{u:!0,o:(t,e)=>!(!t||!Ve(t)&&Ve(e))}),_=t=>{const e=t&&c(t.g);let r=!1;if(d(t)&&t.length>0){const{v:e,g:n,p:o}=u(0,t.pop().contentRect);r=!e||!Ve(n)}else e&&t.p;if(o){const n=e?t.g:Re(s);z(s,n?a.n?-Te:a.i?0:Te:Te),A(s,Te)}r||n(e?t:void 0)},g=[];let f,v=!!i&&_;if(Q){const t=new Q(_);t.observe(l),p(g,()=>t.disconnect())}else{const t=N(`
`);H(l,t),rt(l,Wt);const e=t[0],n=e.lastChild,r=e.firstChild,o=null==r?void 0:r.firstChild;let a,s=st(e),c=s,u=!1;const d=()=>{z(r,Te),A(r,Te),z(n,Te),A(n,Te)},f=()=>{a=0,u&&(s=c,_())},h=t=>{c=st(e),u=!t||!pt(c,s),t?(vt(t),u&&!a&&(Z(a),a=tt(f))):f(),d()};p(g,[ft(r,Me,h),ft(n,Me,h)]),Ot(o,{width:Te,height:Te}),d(),v=i?h.bind(0,!1):d}if(o){f=t(Re.bind(0,s));const{_:e}=f;p(g,ft(s,Me,t=>{const n=e(),{g:r,p:o}=n;o&&(ot(l,"ltr rtl"),rt(l,r?"rtl":"ltr"),_(n)),vt(t)}))}return v&&(rt(s,Xt),p(g,ft(s,Ie,v,{C:!!Q}))),P(e,s),{st(){y(g),D(s)},Et:t=>({gt:f?f.m(t):{g:!1,v:!1,p:!1}})}},Ee=(t,e,n,r)=>{let i=!1;const{Ht:a,Pt:s,Bt:c,Dt:d,Ft:_,Nt:g,qt:f}=r||{},{st:v,kt:w,Gt:y}=((t,e,n)=>{let r,i;const a=()=>{r&&(r.forEach((t,e)=>gt(e,t,n)),r.clear())},s=e=>{if(r&&i){h(i.reduce((n,r)=>{if(r){const o=r[0],i=r[1],a=i&&o&&(e?e(o):I(o,t)),s=u(i)?i(a):i;a&&a.length&&s&&l(s)&&p(n,[a,s.trim()],!0)}return n},[]),t=>h(t[0],e=>{const i=t[1],a=r.get(e),s=!o(a)&&i!==a,l=s?`${a} ${i}`:i;s&>(e,a,n),r.set(e,l),ft(e,l,n)}))}},c=t=>{r=r||new Map,i=t,a(),s()};return e&&c(e),{st:a,kt:s,Gt:c}})(t,e&&c,mt(()=>{i&&n(!0)},84)),m=s||[],S=(a||[]).concat(m),$=o=>{const i=(e?g:_)||yt,a=f||yt,s=[],c=[];let u=!1,v=!1,y=!1;h(o,n=>{const{attributeName:o,target:_,type:g,oldValue:f,addedNodes:h}=n,w="attributes"===g,b="childList"===g,S=t===_,$=w&&l(o)?O(_,o):0,C=0!==$&&f!==$,x=(z=o,m.indexOf(z,A)>-1&&C);var z,A;if(e&&!S){const e=!w,s=w&&x,l=s&&d&&M(_,d),u=(l?!i(_,o,f,$):e||s)&&!a(n,!!l,t,r);p(c,h),v=v||u,y=y||b}!e&&S&&C&&!i(_,o,f,$)&&(p(s,o),u=u||x)}),y&&!b(c)&&w(t=>c.reduce((e,n)=>(p(e,I(t,n)),M(n,t)?p(e,n):e),[])),e?v&&n(v):b(s)&&!u||n(s,u)},C=new J($);return C.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:S,subtree:e,childList:e,characterData:e}),i=!0,{st:()=>{i&&(v(),C.disconnect(),i=!1)},Gt:t=>{y(i&&e&&t)},_:()=>{i&&$(C.takeRecords())}}},He=(t,e)=>t?e.split(".").reduce((t,e)=>t&&m(t,e)?t[e]:void 0,t):void 0,Pe="os-",Be=`.${Dt}`,De=`.${Nt}`,Fe=`.${kt}`,Ne=["id","class","style","open"],qe=(t,e,n,r)=>{if("class"===e&&n&&r){return!!((t,e)=>{const n=t&&t.split(" "),r=e&&e.split(" "),o={};return h(n,t=>{o[t]=1}),h(r,t=>{o[t]?delete o[t]:o[t]=1}),S(o)})(n,r).find(t=>0!==t.indexOf(Pe))}return!1},ke={g:!1,v:!1,p:!1},Ge={g:!1,v:!1,p:!1},Ye={ft:{vt:!1,M:{t:0,r:0,b:0,l:0}},Tt:{x:!1,y:!1},Rt:{w:0,h:0},ht:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0}},Xe=(e,n)=>{let r=Ye;const{U:o,J:i,T:a}=n.it,{j:l,V:c,B:u,D:d,F:_}=ve(),g=!l&&(c.x||c.y),f={I:e,lt:n,yt:g,St:()=>r,_t(t){r=$({},r,t)}},v=[ye(f),me(f),Le(f)],w=(t,n,r)=>{let{gt:o,ct:a,ut:l=r||!1,Lt:c=r||!1,dt:d=r||!1,pt:_=r||!1}=t||{};const f=o||(m?m.Et(r).gt:ke),p=a||(b?b.Et(r).ct:Ge),w=t=>({g:He(e,t),p:r||void 0!==He(n,t)}),y=g||!u,S=y&&z(i),$=y&&A(i);h(v,t=>{const{ut:e,Lt:n,dt:o,pt:i}=t({gt:f,ct:p,ut:l,Lt:c,dt:d,pt:_},w,!!r)||{};l=e||l,c=n||c,d=o||d,_=i||_}),s(S)&&z(i,S),s($)&&A(i,$),e.callbacks.onUpdated&&e.callbacks.onUpdated()},b=(a||!u)&&((e,n)=>{const r=F(Qt),o=[],{_:i,m:a}=t(t=>0===t.h||t.isIntersecting||t.intersectionRatio>0,{s:!1});if(K){const t=new K(t=>{if(t&&t.length>0){const e=t.pop();if(e){const t=i(0,e);t.p&&n(t)}}},{root:e});t.observe(r),p(o,()=>t.disconnect())}else{const t=()=>{const t=st(r),e=i(0,t);e.p&&n(e)};p(o,je(r,t).st),t()}return P(e,r),{st(){y(o),D(r)},Et:t=>({ct:a(t)})}})(o,t=>{w({ct:t})}),m=je(o,t=>{w({gt:t,ut:!t})},{jt:!0,Vt:!l}),S=(Ee(o,!1,()=>{requestAnimationFrame(()=>{w({Lt:!0})})},{Pt:Ne,Ht:Ne,Ft:qe}),Ee(a||i,!0,()=>{requestAnimationFrame(()=>{w({dt:!0})})},{Pt:Ne,Ht:Ne,Bt:e.updating.elementEvents,Dt:Be,qt:(t,e)=>{const{target:n,attributeName:r}=t;return!e&&(!!r&&(j(n,Be,De)||j(n,Be,Fe)))},Nt:qe}),(t,e)=>{w(null,t,e)}),C=S.bind(null,null,!0);return d(C),console.log(ve()),{_:S,Yt:()=>({Xt:r.Rt}),st(){_(C)}}};export default(t,e,n)=>{const{k:r}=ve(),o=$({},r(),jt(e||{},ie,null,!0).O),i=be(t),a=Xe(o,i),s={options(t){if(t){const{O:e}=jt(t,ie,o,!0);C(e)||($(o,e),a._(e))}return o},state:()=>a.Yt(),update(t){a._(null,t)}};return s.update(!0),s}; \ No newline at end of file +const t=(t,e)=>{const{o:n,s:r,_:o}=e||{};let i,a=r;return{u:(e,r)=>{const s=a,l=t?t(r,a,i):r,c=e||(n?!n(s,l):s!==l);return(c||o)&&(a=l,i=s),{g:a,v:i,p:c}},m:t=>({g:a,v:i,p:!!t})}},e=Node.ELEMENT_NODE,{toString:n,hasOwnProperty:r}=Object.prototype;function o(t){return void 0===t}function i(t){return null===t}const a=t=>o(t)||i(t)?`${t}`:n.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase();function s(t){return"number"==typeof t}function l(t){return"string"==typeof t}function c(t){return"boolean"==typeof t}function _(t){return"function"==typeof t}function u(t){return Array.isArray(t)}function d(t){return"object"==typeof t&&!u(t)&&!i(t)}function g(t){const e=!!t&&t.length,n=s(e)&&e>-1&&e%1==0;return!!(u(t)||!_(t)&&n)&&(!(e>0&&d(t))||e-1 in t)}function v(t){if(!t||!d(t)||"object"!==a(t))return!1;let e;const n="constructor",i=t[n],s=i&&i.prototype,l=r.call(t,n),c=s&&r.call(s,"isPrototypeOf");if(i&&!l&&!c)return!1;for(e in t);return o(e)||r.call(t,e)}function f(t){const n=window.Element;return!!t&&(n?t instanceof n:t.nodeType===e)}function h(t,e){if(g(t))for(let n=0;ne(t[n],n,t));return t}const p=(t,e,n)=>(n||l(e)||!g(e)?t.push(e):Array.prototype.push.apply(t,e),t),w=t=>{if(Array.from)return Array.from(t);const e=[];return h(t,t=>{p(e,t)}),e},b=t=>t&&0===t.length,y=(t,e)=>{const n=t=>t&&t(e);t instanceof Set?t.forEach(n):h(t,n)},m=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),S=t=>t?Object.keys(t):[];function x(t,e,n,r,o,a,s){const l=[e,n,r,o,a,s];return"object"==typeof t&&!i(t)||_(t)||(t={}),h(l,e=>{h(S(e),n=>{const r=e[n];if(t===r)return!0;const o=u(r);if(r&&(v(r)||o)){const e=t[n];let i=e;o&&!u(e)?i=[]:o||v(e)||(i={}),t[n]=x(i,r)}else t[n]=r})}),t}function O(t){for(const e in t)return!1;return!0}function $(t,e,n,r){if(o(r))return n?n[t]:e;n&&(n[t]=r)}function C(t,e,n){if(o(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)}function z(t,e){return $("scrollLeft",0,t,e)}function L(t,e){return $("scrollTop",0,t,e)}const I=Element.prototype,A=(t,e)=>{const n=[],r=e?f(e)?e:null:document;return r?p(n,r.querySelectorAll(t)):n},M=(t,e)=>{if(f(t)){return(I.matches||I.msMatchesSelector).call(t,e)}return!1},T=t=>t?w(t.childNodes):[],R=t=>t?t.parentElement:null,V=(t,e,n)=>{if(n){let r,o=e;t&&(g(n)?(r=document.createDocumentFragment(),h(n,t=>{t===o&&(o=t.previousSibling),r.appendChild(t)})):r=n,e&&(o?o!==e&&(o=o.nextSibling):o=t.firstChild),t.insertBefore(r,o||null))}},j=(t,e)=>{V(t,null,e)},P=(t,e)=>{V(t,t&&t.firstChild,e)},H=(t,e)=>{V(R(t),t&&t.nextSibling,e)},B=t=>{if(g(t))h(w(t),t=>B(t));else if(t){const e=R(t);e&&e.removeChild(t)}},E=t=>{const e=document.createElement("div");return t&&C(e,"class",t),e},D=t=>{const e=E();return e.innerHTML=t.trim(),h(T(e),t=>B(t))},N=t=>t.charAt(0).toUpperCase()+t.slice(1),F=["-webkit-","-moz-","-o-","-ms-"],G=["WebKit","Moz","O","MS","webkit","moz","o","ms"],k={},q={},Y=t=>{let e=q[t];if(m(q,t))return e;const n=N(t),r=E().style;return h(F,o=>{const i=o.replace(/-/g,""),a=[t,o+t,i+n,N(i)+n];return!(e=a.find(t=>void 0!==r[t]))}),q[t]=e||""},X=t=>{let e=k[t]||window[t];return m(k,t)||(h(G,n=>(e=e||window[n+N(t)],!e)),k[t]=e),e},U=X("MutationObserver"),W=X("IntersectionObserver"),J=X("ResizeObserver"),K=X("cancelAnimationFrame"),Q=X("requestAnimationFrame"),Z=/[^\x20\t\r\n\f]+/g,tt=(t,e,n)=>{let r,o=0,i=!1;if(t&&l(e)){const a=e.match(Z)||[];for(i=a.length>0;r=a[o++];)i=!!n(t.classList,r)&&i}return i},et=(t,e)=>{tt(t,e,(t,e)=>t.add(e))},nt=(t,e)=>{tt(t,e,(t,e)=>t.remove(e))},rt={w:0,h:0},ot=()=>({w:window.innerWidth,h:window.innerHeight}),it=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:rt,at=t=>t?{w:t.clientWidth,h:t.clientHeight}:rt,st=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:rt,lt=t=>t.getBoundingClientRect();let ct;const _t=t=>t.split(" "),ut=(t,e,n,r)=>{h(_t(e),e=>{t.removeEventListener(e,n,r)})},dt=(t,e,n,r)=>{const i=(()=>{if(o(ct)){ct=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){ct=!0}}))}catch(t){}}return ct})(),a=i&&r&&r.S||!1,s=r&&r.O||!1,l=r&&r.$||!1,c=[],_=i?{passive:a,capture:s}:s;return h(_t(e),e=>{const r=l?o=>{t.removeEventListener(e,r,s),n&&n(o)}:n;p(c,ut.bind(null,t,e,r,s)),t.addEventListener(e,r,_)}),y.bind(0,c)},gt=t=>(t=>t.stopPropagation())(t)||(t=>t.preventDefault())(t),vt=(t,e,n,r)=>{if(t&&e){let o=!0;return h(n,n=>{(r?r(t[n]):t[n])!==(r?r(e[n]):e[n])&&(o=!1)}),o}return!1},ft=(t,e)=>vt(t,e,["w","h"]),ht=(t,e)=>vt(t,e,["t","r","b","l"]),pt=(t,e,n)=>vt(t,e,["width","height"],n&&(t=>Math.round(t))),wt=window.setTimeout,bt=t=>{t&&window.clearTimeout(t),t&&K(t)},yt=()=>{},mt=(t,e)=>{let n,r,o,i;const{C:a,L:l,I:c}=e,u=function(e){bt(n),bt(r),r=n=o=void 0,t.apply(this,e)},d=t=>c&&o?c(o,t):t,g=()=>{n&&u(d(i)||i)},v=function(){const t=arguments,e=_(a)?a():a,c=s(e)&&e>=0;if(c){const a=_(l)?l():l,c=s(a)&&a>=0,v=e>0?wt:Q,f=d(t),h=f||t,p=u.bind(0,h);f||u(o||t),bt(n),n=v(p,e),c&&!r&&(r=wt(g,a)),o=i=h}else u(t)};return v.A=g,v},St={opacity:1,zindex:1},xt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},Ot=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],$t=(t,e,n)=>{try{if(t){const{style:r}=t;o(r[e])?r.setProperty(e,n):r[e]=((t,e)=>!St[t.toLowerCase()]&&s(e)?`${e}px`:e)(e,n)}}catch(r){}};function Ct(t,e){const n=l(e);if(u(e)||n){let r=n?"":{};if(t){const o=window.getComputedStyle(t,null);r=n?Ot(t,o,e):e.reduce((e,n)=>(e[n]=Ot(t,o,n),e),r)}return r}h(S(e),n=>$t(t,n,e[n]))}const zt=(t,e,n)=>{const r=e?`${e}-`:"",o=n?`-${n}`:"",i=`${r}top${o}`,a=`${r}right${o}`,s=`${r}bottom${o}`,l=`${r}left${o}`,c=Ct(t,[i,a,s,l]);return{t:xt(c[i]),r:xt(c[a]),b:xt(c[s]),l:xt(c[l])}},Lt={x:0,y:0},It=t=>{const e=t?lt(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:Lt};var At=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]=Tt[0]+e+Tt[1],t),{}),Vt=(t,e,n,r,i)=>{const s={},c=At({},t);return h(S(e).filter(e=>m(t,e)),_=>{const d=o(n[_])?{}:n[_],g=t[_],f=e[_],w=v(f),b=i?`${i}.`:"";if(w&&v(g)){const t=Vt(g,f,d,r,b+_);s[_]=t.M,c[_]=t.T,h([c,s],t=>{O(t[_])&&delete t[_]})}else if(!w){let t=!1;const e=[],n=[],i=a(g);if(h(u(f)?f:[f],r=>{let a;h(Rt,(t,e)=>{t===r&&(a=e)});const s=o(a);if(s&&l(g)){const n=r.split(" ");t=!!n.find(t=>t===g),p(e,n)}else t=Rt[i]===r;return p(n,s?Rt.string:a),!t}),t){(u(g)||v(g)?Mt(g)!==Mt(d):g!==d)&&(s[_]=g)}else r&&console.warn(`${`The option "${b}${_}" wasn't set, because it doesn't accept the type [ ${i.toUpperCase()} ] with the value of "${g}".\r\n`+`Accepted types are: [ ${n.join(", ").toUpperCase()} ].\r\n`}${e.length>0?`\r\nValid strings are: [ ${e.join(", ")} ].`:""}`);delete c[_]}}),{T:c,M:s}},jt=(t,e,n,r)=>Vt(t,e,n||{},r||!1),Pt=t=>{const e={R:{},V:{}};return h(S(t),n=>{const r=t[n];if(u(r))e.R[n]=r[1],e.V[n]=r[0];else{const t=Pt(r);e.R[n]=t.R,e.V[n]=t.V}}),e},Ht="os-environment",Bt=`${Ht}-flexbox-glue`,Et=`${Bt}-max`,Dt="os-host",Nt="os-padding",Ft="os-viewport",Gt=`${Ft}-arrange`,kt="os-content",qt=`${Ft}-scrollbar-styled`,Yt="os-size-observer",Xt=`${Yt}-appear`,Ut=`${Yt}-listener`,Wt=`${Ut}-scroll`,Jt=`${Ut}-item`,Kt=`${Jt}-final`,Qt="os-trinsic-observer",Zt=Rt.number,te=[Rt.array,Rt.null],ee=[Rt.string,Rt.array,Rt.null],ne=[!0,Rt.boolean],re=[!1,Rt.boolean],oe="hidden scroll visible visible-hidden",ie={resize:["none","none both horizontal vertical"],paddingAbsolute:re,updating:{elementEvents:[[["img","load"]],te],attributes:[null,te],debounce:[[0,33],[Rt.number,Rt.array,Rt.null]]},overflow:{x:["scroll",oe],y:["scroll",oe]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,Zt],dragScroll:ne,clickScroll:re,touch:ne},textarea:{dynWidth:re,dynHeight:re,inheritedAttrs:[["style","class"],ee]},nativeScrollbarsOverlaid:{show:re,initialize:re},callbacks:{onUpdated:[null,[Rt.function,Rt.null]]}},{R:ae,V:se}=Pt(ie);let le;const{abs:ce,round:_e}=Math,ue=(t,e)=>{j(t,e);const n=at(e),r=it(e);return{x:r.h-n.h,y:r.w-n.w}},de=(t,e)=>{const n="hidden";Ct(t,{overflowX:n,overflowY:n,direction:"rtl"}),z(t,0);const r=It(t),o=It(e);z(t,-999);const i=It(e);return{i:r.x===o.x,n:o.x!==i.x}},ge=(t,e)=>{et(t,Bt);const n=lt(t),r=lt(e),o=pt(r,n,!0);et(t,Et);const i=lt(t),a=lt(e),s=pt(a,i,!0);return o&&s},ve=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},fe=()=>{const{body:t}=document,e=D(`
`)[0],n=e.firstChild,r=new Set,o=ue(t,e),i=(t=>{let e=!1;et(t,qt);try{e="none"===Ct(t,Y("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(n){}return e})(e),a={x:0===o.x,y:0===o.y},s=(t=>({j:!t,P:!1}))(i);let l=s,c=se;const _={H:o,B:a,D:i,N:"-1"===Ct(e,"zIndex"),F:de(e,n),G:ge(e,n),k(t){r.add(t)},q(t){r.delete(t)},Y:()=>At({},l),X(t){l=x({},l,t)},U:()=>At({},c),W(t){c=x({},c,t)},J:s,K:c};var u,d;if(d="style",(u=e)&&u.removeAttribute(d),B(e),!(i||a.x&&a.y)){let n=ot(),i=ve(),a=o;window.addEventListener("resize",()=>{if(r.size){const o=ot(),s={w:o.w-n.w,h:o.h-n.h};if(0===s.w&&0===s.h)return;const l={w:ce(s.w),h:ce(s.h)},c={w:ce(_e(o.w/(n.w/100))),h:ce(_e(o.h/(n.h/100)))},_=ve(),u=l.w>2&&l.h>2,d=!((t,e)=>{const n=ce(t),r=ce(e);return!(n===r||n+1===r||n-1===r)})(c.w,c.h),g=_!==i&&i>0;if(u&&d&&g){const n=le.H=ue(t,e);B(e),a.x===n.x&&a.y===n.y||y(r),a=n}n=o,i=_}})}return _},he=()=>(le||(le=fe()),le),pe=t=>{j(R(t),T(t)),B(t)};let we=0;const be=(t,e)=>{const n=c(t);return n||o(t)?(n?t:e)&&void 0:t},ye=t=>{const{Y:n,D:r,B:i,N:a}=he(),{j:s,P:l}=n(),c=function(t){const n=window.HTMLElement;return!!t&&(n?t instanceof n:t.nodeType===e)}(t),_=c?{}:{Z:t.host,tt:t.target,et:t.viewport,j:be(t.padding,s),P:be(t.content,l)};if(c){const e=E(Ft),n=s&&E(Nt),r=l&&E(kt);_.tt=t,_.j=n,_.et=e,_.P=r}let{tt:u,j:d,et:g,P:v}=_;const f=[],h=M(u,"textarea"),w=!h&&M(u,"body"),b=h?_.Z||E():u,m=t=>h?u:T(t);if(h&&b!==_.Z&&(H(u,b),p(f,()=>{H(b,u),B(b)})),c){const t=v||g;j(t,m(u)),j(b,d),j(d||b,g),j(g,v),p(f,()=>{j(b,T(t)),B(d||g),nt(b,Dt)})}else{const t=v||g||d||b,e=o(d),n=o(g),r=o(v),i=m(t);d=_.j=e?E():d,g=_.et=n?E():g,v=_.P=r?E():v,j(b,d),j(d||b,g),j(g,v);j(v||g,i),p(f,()=>{r&&pe(v),n&&pe(g),e&&pe(d),nt(b,Dt),nt(d,Nt),nt(g,Ft),nt(v,kt)})}et(b,Dt),et(d,Nt),et(g,Ft),et(v,kt);const S=u.ownerDocument,x=S.body,O={nt:S.defaultView,rt:S,ot:R(x),it:x,at:h,st:w},$=At({},_,{Z:b});if(r)p(f,nt.bind(0,g,qt));else if(!a&&(i.x||i.y)){const t=(()=>{const t=document.createElement("style");return C(t,"id",`${Gt}-${we}`),we++,t})();L=t,V(R(z=g),z,L),p(f,B.bind(0,t)),$.lt=t}var z,L;return{ct:$,_t:O,ut:()=>{y(f)}}},me="animationstart",Se="scroll",xe=3333333,Oe=t=>"rtl"===Ct(t,"direction"),$e=t=>t&&(t.height||t.width),Ce=(e,n,r)=>{const{dt:o=!1,gt:i=!1}=r||{},{F:a}=he(),s=D(`
`)[0],l=s.firstChild,{u:_}=t(0,{_:!0,o:(t,e)=>!(!t||!$e(t)&&$e(e))}),d=t=>{const e=t&&c(t.g);let r=!1,i=!1,l=!0;if(u(t)&&t.length>0){const{v:e,g:n}=_(0,t.pop().contentRect),o=$e(n),a=$e(e);r=!e||!o,i=!a&&o,l=!r}else e?l=t.p:i=!0===t;if(o&&l){const n=e?t.g:Oe(s);z(s,n?a.n?-xe:a.i?0:xe:xe),L(s,xe)}r||n({vt:!e,ft:e?t:void 0,gt:!!i})},g=[];let v,f=!!i&&d;if(J){const t=new J(d);t.observe(l),p(g,()=>t.disconnect())}else{const t=D(`
`);j(l,t),et(l,Wt);const e=t[0],n=e.lastChild,r=e.firstChild,o=null==r?void 0:r.firstChild;let a,s=it(e),c=s,_=!1;const u=()=>{z(r,xe),L(r,xe),z(n,xe),L(n,xe)},v=t=>{a=0,_&&(s=c,d(!0===t))},h=t=>{c=it(e),_=!t||!ft(c,s),t?(gt(t),_&&!a&&(K(a),a=Q(v))):v(!1===t),u()};p(g,[dt(r,Se,h),dt(n,Se,h)]),Ct(o,{width:xe,height:xe}),u(),f=i?h.bind(0,!1):u}if(o){v=t(Oe.bind(0,s));const{u:e}=v;p(g,dt(s,Se,t=>{const n=e(),{g:r,p:o}=n;o&&(nt(l,"ltr rtl"),et(l,r?"rtl":"ltr"),d(n)),gt(t)}))}return f&&(et(s,Xt),p(g,dt(s,me,f,{$:!!J}))),P(e,s),{ut(){y(g),B(s)},ht:t=>({pt:v?v.m(t):{g:!1,v:!1,p:!1}})}},ze=(t,e,n,r)=>{let i=!1;const{wt:a,bt:s,yt:c,St:_,xt:u,Ot:d,$t:g}=r||{},{ut:v,Ct:f}=((t,e,n)=>{let r;const i=()=>{r&&(r.forEach((t,e)=>ut(e,t,n)),r.clear())},a=i=>{if(r&&e){h(e.reduce((e,n)=>{if(n){const r=n[0],o=n[1],a=o&&r&&(i?i(r):A(r,t));a&&a.length&&o&&l(o)&&p(e,[a,o.trim()],!0)}return e},[]),t=>h(t[0],e=>{const i=t[1],a=r.get(e),s=!o(a)&&i!==a,l=s?`${a} ${i}`:i;s&&ut(e,a,n),r.set(e,l),dt(e,l,n)}))}};return e&&(r=r||new Map,i(),a()),{ut:i,Ct:a}})(t,e&&c,mt(()=>{i&&n(!0)},{C:33,L:99})),w=s||[],y=(a||[]).concat(w),m=o=>{const i=(e?d:u)||yt,a=g||yt,s=[],c=[];let v=!1,y=!1,m=!1;h(o,n=>{const{attributeName:o,target:u,type:d,oldValue:g,addedNodes:f}=n,h="attributes"===d,b="childList"===d,S=t===u,x=h&&l(o)?C(u,o):0,O=0!==x&&g!==x,$=(z=o,w.indexOf(z,L)>-1&&O);var z,L;if(e&&!S){const e=!h,s=h&&$,l=s&&_&&M(u,_),d=(l?!i(u,o,g,x):e||s)&&!a(n,!!l,t,r);p(c,f),y=y||d,m=m||b}!e&&S&&O&&!i(u,o,g,x)&&(p(s,o),v=v||$)}),m&&!b(c)&&f(t=>c.reduce((e,n)=>(p(e,A(t,n)),M(n,t)?p(e,n):e),[])),e?y&&n(!1):b(s)&&!v||n(s,v)},S=new U(m);return S.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:e,childList:e,characterData:e}),i=!0,{ut:()=>{i&&(v(),S.disconnect(),i=!1)},u:()=>{i&&m(S.takeRecords())}}},Le="os-",Ie=["wrap","cols","rows"],Ae=["id","class","style","open"],Me=(t,e,n,r)=>{if("class"===e&&n&&r){return!!((t,e)=>{const n=t&&t.split(" "),r=e&&e.split(" "),o={};return h(n,t=>{o[t]=1}),h(r,t=>{o[t]?delete o[t]:o[t]=1}),S(o)})(n,r).find(t=>0!==t.indexOf(Le))}return!1},Te=(e,n)=>{let r,o;const{zt:i}=e,{ct:a,_t:l}=i,{Z:c,et:_,P:d}=a,{at:g}=l,{D:v,G:f}=he(),h=g?Ie:Ae.concat(Ie),w=mt(n,{C:()=>r,L:()=>o,I(t,e){const{vt:n,Lt:r,It:o}=t[0],{vt:i,Lt:a,It:s}=e[0];return[{vt:n||i,Lt:r||a,It:o||s}]}}),b=t=>{(t?n:w)({It:!0})},m=w.bind(0,{Lt:!0}),S=(d||!f)&&((e,n)=>{const r=E(Qt),o=[],{u:i,m:a}=t(t=>0===t.h||t.isIntersecting||t.intersectionRatio>0,{s:!1});if(W){const t=new W(t=>{if(t&&t.length>0){const e=t.pop();if(e){const t=i(0,e);t.p&&n(t)}}},{root:e});t.observe(r),p(o,()=>t.disconnect())}else{const t=()=>{const t=it(r),e=i(0,t);e.p&&n(e)};p(o,Ce(r,t).ut),t()}return P(e,r),{ut(){y(o),B(r)},ht:t=>({At:a(t)})}})(c,t=>{n({At:t})}),x=Ce(c,({vt:t,ft:e,gt:r})=>{(!t||r?n:w)({vt:t,pt:e})},{gt:!0,dt:!v});ze(c,!1,m,{bt:Ae,wt:Ae,xt:Me});let O;return{Mt:S,Tt:x,Rt:t=>{const{g:e,p:n}=t("updating.elementEvents"),{g:i,p:a}=t("updating.attributes"),{g:l,p:c}=t("updating.debounce");if((n||a)&&(O&&(O.u(),O.ut()),O=ze(d||_,!0,b,{bt:h.concat(i||[]),wt:h.concat(i||[]),yt:e,Ot:Me})),c)if(w.A(),u(l)){const t=l[0],e=l[1];r=!!s(t)&&t,o=!!s(e)&&e}else s(l)?(r=l,o=!1):(r=!1,o=!1)}}},Re=t=>{const{zt:e}=t,{P:n}=e.ct;return t=>{const{At:e}=t,{g:r,p:o}=e;return o&&Ct(n,{height:r?"":"100%",display:r?"":"inline"}),{vt:o,It:o}}},Ve=e=>{const{zt:n,Vt:r}=e,{Z:o,j:i,et:a}=n.ct,{u:s,m:l}=t(zt.bind(0,o,"padding"),{o:ht,s:zt()});return(t,e,n)=>{let{g:o,p:c}=l(n);const{D:_,G:u}=he(),{vt:d,pt:g,It:v}=t,{g:f,p:h}=g,{g:p,p:w}=e("paddingAbsolute");(d||c||!u&&v)&&({g:o,p:c}=s(n));const b=w||h||c;if(b){const t=!p||!i&&!_,e=o.r+o.l,n=o.t+o.b,s={marginRight:t&&!f?-e:0,marginBottom:t?-n:0,marginLeft:t&&f?-e:0,top:t?-o.t:0,right:t?f?-o.r:"auto":0,left:t?f?"auto":-o.l:0,width:t?`calc(100% + ${e}px)`:""},l={paddingTop:t?o.t:0,paddingRight:t?o.r:0,paddingBottom:t?o.b:0,paddingLeft:t?o.l:0};Ct(i||a,s),Ct(a,l),r({jt:{Pt:!t,j:o},Ht:i?l:At({},s,l)})}return{Bt:b}}},{max:je,abs:Pe,round:He}=Math,Be=42,Ee={o:ft,s:{w:0,h:0}},De=t=>{const e=it(t),n=lt(t);return{w:n.width-e.w,h:n.height-e.h}},Ne=(t,e,n,r)=>{const o=t?"overflowX":"overflowY",i=0===n.indexOf("visible"),a="visible-hidden"===n,s="scroll"===n,l=e>0;return i&&(r[o]="visible"),s&&l&&(r[o]=n),{Et:i,Dt:a?"hidden":"scroll"}},Fe=e=>{const{zt:n,Nt:r,Ft:o,Vt:i}=e,{Z:a,et:s,lt:l}=n.ct,{u:c,m:_}=t(De.bind(0,s),Ee),{u,m:d}=t(st.bind(0,s),Ee),{u:g,m:v}=t(({Gt:t,kt:e,qt:n})=>({w:He(je(0,t.w-e.w)-je(0,n.w)),h:He(je(0,t.h-e.h)-je(0,n.h))}),Ee),f=(t,e)=>{if(Ct(s,{height:""}),e){const{Pt:e,j:n}=o().jt,{Yt:r,Xt:i}=t,l=De(a),c=at(a),_=e||"content-box"===Ct(s,"boxSizing")?n.b+n.t:0,u=c.h+(Pe(l.h)<1?l.h:0);Ct(s,{height:u+(r.x?i.x:0)-_})}},p=(t,e)=>{const{H:n,B:r,D:o}=he(),{x:i,y:a}=r,l=o||t?0:Be,c=!e?Ct(s,["overflowX","overflowY"]):e,_={x:"scroll"===c.overflowX,y:"scroll"===c.overflowY};return{Yt:_,Ut:{x:i&&!!l,y:a&&!!l},Xt:{x:_.x&&!o?i?l:n.x:0,y:_.y&&!o?a?l:n.y:0}}},w=(t,e,n,i)=>{if(r){const{Xt:r,Ut:a}=t,{x:c,y:_}=a,{x:u,y:d}=r,{Ht:g}=o(),v=g[i?"paddingRight":"paddingLeft"],f=g.paddingTop,h=e.w+(Pe(n.w)<1?n.w:0),p=e.h+(Pe(n.h)<1?n.h:0),w={w:d&&_?`${d+h-v}px`:"",h:u&&c?`${u+p-f}px`:""};if(l){const{sheet:t}=l;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${C(l,"id")} + .${Gt}::before {}`,0);const n=e[0].style;n.width=w.w,n.height=w.h}}}else Ct(s,{"--os-vaw":w.w,"--os-vah":w.h})}return r},b=(t,e,n,r)=>{const{Xt:i,Ut:a}=t,{x:s,y:l}=a,{x:c,y:_}=i,{Ht:u}=o(),d=e?"marginLeft":"marginRight",g=e?"paddingLeft":"paddingRight",v=u[d],f=u.marginBottom,h=u[g],p=u.paddingBottom;r.width=`calc(100% + ${_+-1*v}px)`,r[d]=-_+v,r.marginBottom=-c+f,n&&(r[g]=h+(l?_:0),r.paddingBottom=p+(s?c:0))};return(t,e,n)=>{const{pt:a,At:l,vt:y,Lt:m,It:x,Bt:O}=t,{G:$,D:C,B:z}=he(),{g:L,p:I}=l,{g:A,p:M}=a,{g:T,p:R}=e("nativeScrollbarsOverlaid.show"),V=T&&z.x&&z.y,j=!$&&(y||x||m||R||I);let P,H=_(n),B=d(n),E=v(n);if(R&&C&&(V?nt(s,qt):et(s,qt)),j&&(P=p(V),f(P,!!L)),y||O||x||R||M){const{Wt:t,Jt:e}=((t,e,n)=>{if(r){const i=n||p(t),{Ht:a}=o(),{G:l}=he(),{Ut:c}=i,{x:_,y:u}=c,d={},g=t=>h(t.split(" "),t=>{d[t]=a[t]});l||(d.height=""),_&&g("marginBottom paddingTop paddingBottom"),u&&g("marginLeft marginRight paddingLeft paddingRight");const v=Ct(s,S(d));return nt(s,Gt),Ct(s,d),{Wt:()=>{b(i,e,r,v),Ct(s,v),et(s,Gt)},Jt:i}}return{Wt:yt}})(V,A,P),{g:i,p:a}=H=c(n),{g:l,p:_}=B=u(n),d=at(s);let v=l,f=d;t(),(_||a||R)&&e&&!V&&w(e,l,i,A)&&(f=at(s),v=st(s)),E=g(n,{qt:i,Gt:{w:je(l.w,v.w),h:je(l.h,v.h)},kt:{w:f.w+je(0,d.w-l.w),h:f.h+je(0,d.h-l.h)}})}const{g:D,p:N}=H,{g:F,p:G}=B,{g:k,p:q}=E,{g:Y,p:X}=e("overflow");if(O||N||G||q||X||R||M||j){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},e=((t,e,n,r)=>{const{Et:o,Dt:i}=Ne(!0,e.w,n.x,r),{Et:a,Dt:s}=Ne(!1,e.h,n.y,r);return o&&!a&&(r.overflowX=i),a&&!o&&(r.overflowY=s),p(t,r)})(V,k,Y,t),n=w(e,F,D,A);b(e,A,n,t),j&&f(e,!!L),Ct(s,t),i({Kt:e.Yt,Qt:k})}}},Ge=(t,e)=>t?e.split(".").reduce((t,e)=>t&&m(t,e)?t[e]:void 0,t):void 0,ke={g:!1,v:!1,p:!1},qe={jt:{Pt:!1,j:{t:0,r:0,b:0,l:0}},Kt:{x:!1,y:!1},Qt:{w:0,h:0},Ht:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0}};export default(t,e,n)=>{const{U:r}=he(),o=x({},r(),jt(e||{},ae,null,!0).M),i=ye(t),a=((t,e)=>{let n=qe;const{et:r}=e.ct,{D:o,B:i,G:a,k:l,q:c}=he(),_=!o&&(i.x||i.y),u={V:t,zt:e,Nt:_,Ft:()=>n,Vt(t){n=x({},n,t)}},d=[Re(u),Ve(u),Fe(u)],g=(e,n,o)=>{let{pt:i,At:l,vt:c=o||!1,Lt:u=o||!1,It:g=o||!1,Bt:w=o||!1}=e||{};const b=i||(v?v.ht(o).pt:ke),y=l||(f?f.ht(o).At:ke),m=e=>({g:Ge(t,e),p:o||void 0!==Ge(n,e)}),S=_||!a,x=S&&z(r),O=S&&L(r);p&&p(m),h(d,t=>{const{vt:e,Lt:n,It:r,Bt:i}=t({pt:b,At:y,vt:c,Lt:u,It:g,Bt:w},m,!!o)||{};c=e||c,u=n||u,g=r||g,w=i||w}),s(x)&&z(r,x),s(O)&&L(r,O),t.callbacks.onUpdated&&t.callbacks.onUpdated()},{Tt:v,Mt:f,Rt:p}=Te(u,g),w=(t,e)=>{g(null,t,e)},b=w.bind(null,null,!0);return l(b),console.log(he()),{u:w,Zt:()=>({te:n.Qt}),ut(){c(b)}}})(o,i),l={options(t){if(t){const{M:e}=jt(t,ae,o,!0);O(e)||(x(o,e),a.u(e))}return o},state:()=>a.Zt(),update(t){a.u(null,t)}};return l.update(!0),l}; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index 88fc69c..cbde05e 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -244,11 +244,6 @@ return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr; }; - var findFirst = function findFirst(selector, elm) { - var rootElm = elm ? (isElement(elm) ? elm : null) : document; - return rootElm ? rootElm.querySelector(selector) : null; - }; - var is = function is(elm, selector) { if (isElement(elm)) { var fn = elmPrototype.matches || elmPrototype.msMatchesSelector; @@ -266,36 +261,6 @@ return elm ? elm.parentElement : null; }; - var closest = function closest(elm, selector) { - if (isElement(elm)) { - var closestFn = elmPrototype.closest; - - if (closestFn) { - return closestFn.call(elm, selector); - } - - do { - if (is(elm, selector)) { - return elm; - } - - elm = parent(elm); - } while (elm); - } - - return null; - }; - - var liesBetween = function liesBetween(elm, highBoundarySelector, deepBoundarySelector) { - var closestHighBoundaryElm = elm && closest(elm, highBoundarySelector); - var closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm); - return closestHighBoundaryElm && closestDeepBoundaryElm - ? closestHighBoundaryElm === elm || - closestDeepBoundaryElm === elm || - closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm - : false; - }; - var before = function before(parentElm, preferredAnchor, insertedElms) { if (insertedElms) { var anchor = preferredAnchor; @@ -604,27 +569,72 @@ ); }; - var noop = function noop() {}; - var debounce = function debounce(functionToDebounce, timeout, maxWait) { - var timeoutId; - var lastCallTime; - var hasTimeout = isNumber(timeout) && timeout > 0; - var hasMaxWait = isNumber(maxWait) && maxWait > 0; - var cancel = hasTimeout ? window.clearTimeout : cAF; - var set = hasTimeout ? window.setTimeout : rAF; + var setT = window.setTimeout; - var setFn = function setFn(args) { - lastCallTime = hasMaxWait ? performance.now() : 0; - timeoutId && cancel(timeoutId); + var clearTimeouts = function clearTimeouts(id) { + id && window.clearTimeout(id); + id && cAF(id); + }; + + var noop = function noop() {}; + var debounce = function debounce(functionToDebounce, options) { + var timeoutId; + var maxTimeoutId; + var prevArguments; + var latestArguments; + var _timeout = options._timeout, + _maxDelay = options._maxDelay, + _mergeParams = options._mergeParams; + + var invokeFunctionToDebounce = function invokeFunctionToDebounce(args) { + clearTimeouts(timeoutId); + clearTimeouts(maxTimeoutId); + maxTimeoutId = timeoutId = prevArguments = undefined; functionToDebounce.apply(this, args); }; - return function () { - var boundSetFn = setFn.bind(this, arguments); - var forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait : false; - timeoutId && cancel(timeoutId); - timeoutId = forceCall ? boundSetFn() : set(boundSetFn, timeout); + var mergeParms = function mergeParms(curr) { + return _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr; }; + + var flush = function flush() { + if (timeoutId) { + invokeFunctionToDebounce(mergeParms(latestArguments) || latestArguments); + } + }; + + var debouncedFn = function debouncedFn() { + var args = arguments; + var finalTimeout = isFunction(_timeout) ? _timeout() : _timeout; + var hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0; + + if (hasTimeout) { + var finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay; + var hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0; + var setTimeoutFn = finalTimeout > 0 ? setT : rAF; + var mergeParamsResult = mergeParms(args); + var invokedArgs = mergeParamsResult || args; + var boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs); + + if (!mergeParamsResult) { + invokeFunctionToDebounce(prevArguments || args); + } + + clearTimeouts(timeoutId); + timeoutId = setTimeoutFn(boundInvoke, finalTimeout); + + if (hasMaxWait && !maxTimeoutId) { + maxTimeoutId = setT(flush, finalMaxWait); + } + + prevArguments = latestArguments = invokedArgs; + } else { + invokeFunctionToDebounce(args); + } + }; + + debouncedFn._flush = flush; + return debouncedFn; }; var cssNumber = { @@ -875,6 +885,7 @@ var classNameTrinsicObserver = 'os-trinsic-observer'; var numberAllowedValues = optionsTemplateTypes.number; + var arrayNullValues = [optionsTemplateTypes.array, optionsTemplateTypes.null]; var stringArrayNullAllowedValues = [optionsTemplateTypes.string, optionsTemplateTypes.array, optionsTemplateTypes.null]; var booleanTrueTemplate = [true, optionsTemplateTypes.boolean]; var booleanFalseTemplate = [false, optionsTemplateTypes.boolean]; @@ -886,10 +897,12 @@ resize: ['none', resizeAllowedValues], paddingAbsolute: booleanFalseTemplate, updating: { - elementEvents: [[['img', 'load']], [optionsTemplateTypes.array, optionsTemplateTypes.null]], - contentMutationDebounce: [80, numberAllowedValues], - hostMutationDebounce: [0, numberAllowedValues], - resizeDebounce: [0, numberAllowedValues], + elementEvents: [[['img', 'load']], arrayNullValues], + attributes: [null, arrayNullValues], + debounce: [ + [0, 33], + [optionsTemplateTypes.number, optionsTemplateTypes.array, optionsTemplateTypes.null], + ], }, overflow: { x: ['scroll', overflowAllowedValues], @@ -1263,6 +1276,612 @@ }; }; + var animationStartEventName = 'animationstart'; + var scrollEventName = 'scroll'; + var scrollAmount = 3333333; + + var directionIsRTL = function directionIsRTL(elm) { + return style(elm, 'direction') === 'rtl'; + }; + + 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; + var appear = false; + var doDirectionScroll = true; + + if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) { + var _updateResizeObserver = updateResizeObserverContentRectCache(0, sizeChangedContext.pop().contentRect), + _previous = _updateResizeObserver._previous, + _value = _updateResizeObserver._value; + + var hasDimensions = domRectHasDimensions(_value); + var hadDimensions = domRectHasDimensions(_previous); + skip = !_previous || !hasDimensions; + appear = !hadDimensions && hasDimensions; + doDirectionScroll = !skip; + } else if (hasDirectionCache) { + doDirectionScroll = sizeChangedContext._changed; + } else { + appear = sizeChangedContext === true; + } + + if (observeDirectionChange && doDirectionScroll) { + var rtl = hasDirectionCache ? sizeChangedContext._value : directionIsRTL(sizeObserver); + scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount); + scrollTop(sizeObserver, scrollAmount); + } + + if (!skip) { + onSizeChangedCallback({ + _sizeChanged: !hasDirectionCache, + _directionIsRTLCache: hasDirectionCache ? sizeChangedContext : undefined, + _appear: !!appear, + }); + } + }; + + 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(observerElementChildrenRoot); + 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(appear) { + rAFId = 0; + + if (isDirty) { + cacheSize = currSize; + onSizeChangedCallbackProxy(appear === true); + } + }; + + var onScroll = function onScroll(scrollEvent) { + currSize = offsetSize(observerElementChildrenRoot); + isDirty = !scrollEvent || !equalWH(currSize, cacheSize); + + if (scrollEvent) { + stopAndPrevent(scrollEvent); + + if (isDirty && !rAFId) { + cAF(rAFId); + rAFId = rAF(onResized); + } + } else { + onResized(scrollEvent === false); + } + + reset(); + }; + + push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]); + style(expandElementChild, { + width: scrollAmount, + height: scrollAmount, + }); + reset(); + appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset; + } + + if (observeDirectionChange) { + directionIsRTLCache = createCache(directionIsRTL.bind(0, 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) { + removeClass(listenerElement, 'ltr rtl'); + + if (_value) { + addClass(listenerElement, 'rtl'); + } else { + addClass(listenerElement, 'ltr'); + } + + onSizeChangedCallbackProxy(directionIsRTLCacheValues); + } + + stopAndPrevent(event); + }) + ); + } + + 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 = createDiv(classNameTrinsicObserver); + 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 { + var onSizeChanged = function onSizeChanged() { + var newSize = offsetSize(trinsicObserver); + var heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize); + + if (heightIntrinsicCache._changed) { + onTrinsicChangedCallback(heightIntrinsicCache); + } + }; + + push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy); + onSizeChanged(); + } + + 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, callback) { + var map; + + var _destroy = function _destroy() { + if (map) { + map.forEach(function (eventName, elm) { + return off(elm, eventName, callback); + }); + map.clear(); + } + }; + + var _updateElements = function _updateElements(getElements) { + if (map && eventContentChange) { + var eventElmList = eventContentChange.reduce(function (arr, item) { + if (item) { + var selector = item[0]; + var eventNames = item[1]; + var elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target)); + + if (elements && elements.length && eventNames && isString(eventNames)) { + push(arr, [elements, eventNames.trim()], true); + } + } + + return arr; + }, []); + each(eventElmList, function (item) { + return each(item[0], function (elm) { + var eventNames = item[1]; + var registredEventNames = map.get(elm); + var newEntry = isUndefined(registredEventNames); + var changingExistingEntry = !newEntry && eventNames !== registredEventNames; + var finalEventNames = changingExistingEntry ? registredEventNames + ' ' + eventNames : eventNames; + + if (changingExistingEntry) { + off(elm, registredEventNames, callback); + } + + map.set(elm, finalEventNames); + on(elm, finalEventNames, callback); + }); + }); + } + }; + + if (eventContentChange) { + map = map || new Map(); + + _destroy(); + + _updateElements(); + } + + return { + _destroy: _destroy, + _updateElements: _updateElements, + }; + }; + + var createDOMObserver = function createDOMObserver(target, isContentObserver, callback, options) { + var isConnected = false; + + var _ref = options || {}, + _attributes = _ref._attributes, + _styleChangingAttributes = _ref._styleChangingAttributes, + _eventContentChange = _ref._eventContentChange, + _nestedTargetSelector = _ref._nestedTargetSelector, + _ignoreTargetChange = _ref._ignoreTargetChange, + _ignoreNestedTargetChange = _ref._ignoreNestedTargetChange, + _ignoreContentChange = _ref._ignoreContentChange; + + var _createEventContentCh = createEventContentChange( + target, + isContentObserver && _eventContentChange, + debounce( + function () { + if (isConnected) { + callback(true); + } + }, + { + _timeout: 33, + _maxDelay: 99, + } + ) + ), + destroyEventContentChange = _createEventContentCh._destroy, + updateEventContentChangeElements = _createEventContentCh._updateElements; + + var finalAttributes = _attributes || []; + var finalStyleChangingAttributes = _styleChangingAttributes || []; + var observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); + + var observerCallback = function observerCallback(mutations) { + var ignoreTargetChange = (isContentObserver ? _ignoreNestedTargetChange : _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 styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged; + + if (isContentObserver && !targetIsMutationTarget) { + var notOnlyAttrChanged = !isAttributesType; + var contentAttrChanged = isAttributesType && styleChangingAttrChanged; + 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; + } + + if ( + !isContentObserver && + targetIsMutationTarget && + attributeChanged && + !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue) + ) { + push(targetChangedAttrs, attributeName); + targetStyleChanged = targetStyleChanged || 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 (isContentObserver) { + contentChanged && callback(false); + } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) { + callback(targetChangedAttrs, targetStyleChanged); + } + }; + + var mutationObserver = new MutationObserverConstructor(observerCallback); + mutationObserver.observe(target, { + attributes: true, + attributeOldValue: true, + attributeFilter: observedAttributes, + subtree: isContentObserver, + childList: isContentObserver, + characterData: isContentObserver, + }); + isConnected = true; + return { + _destroy: function _destroy() { + if (isConnected) { + destroyEventContentChange(); + mutationObserver.disconnect(); + isConnected = false; + } + }, + _update: function _update() { + if (isConnected) { + observerCallback(mutationObserver.takeRecords()); + } + }, + }; + }; + + var ignorePrefix = 'os-'; + var baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows']; + var baseStyleChangingAttrs = ['id', 'class', 'style', 'open']; + + var ignoreTargetChange = function ignoreTargetChange(target, attrName, oldValue, newValue) { + if (attrName === 'class' && oldValue && newValue) { + var diff = diffClass(oldValue, newValue); + return !!diff.find(function (addedOrRemovedClass) { + return addedOrRemovedClass.indexOf(ignorePrefix) !== 0; + }); + } + + return false; + }; + + var lifecycleHubOservers = function lifecycleHubOservers(instance, updateLifecycles) { + var debounceTimeout; + var debounceMaxDelay; + var _structureSetup = instance._structureSetup; + var _targetObj = _structureSetup._targetObj, + _targetCtx = _structureSetup._targetCtx; + var _host = _targetObj._host, + _viewport = _targetObj._viewport, + _content = _targetObj._content; + var _isTextarea = _targetCtx._isTextarea; + + var _getEnvironment = getEnvironment(), + _nativeScrollbarStyling = _getEnvironment._nativeScrollbarStyling, + _flexboxGlue = _getEnvironment._flexboxGlue; + + var contentMutationObserverAttr = _isTextarea ? baseStyleChangingAttrsTextarea : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea); + var updateLifecyclesWithDebouncedAdaptiveUpdateHints = debounce(updateLifecycles, { + _timeout: function _timeout() { + return debounceTimeout; + }, + _maxDelay: function _maxDelay() { + return debounceMaxDelay; + }, + _mergeParams: function _mergeParams(prev, curr) { + var _prev$ = prev[0], + prevSizeChanged = _prev$._sizeChanged, + prevHostMutation = _prev$._hostMutation, + prevContentMutation = _prev$._contentMutation; + var _curr$ = curr[0], + currSizeChanged = _curr$._sizeChanged, + currvHostMutation = _curr$._hostMutation, + currContentMutation = _curr$._contentMutation; + var merged = [ + { + _sizeChanged: prevSizeChanged || currSizeChanged, + _hostMutation: prevHostMutation || currvHostMutation, + _contentMutation: prevContentMutation || currContentMutation, + }, + ]; + return merged; + }, + }); + + var onTrinsicChanged = function onTrinsicChanged(heightIntrinsic) { + updateLifecycles({ + _heightIntrinsic: heightIntrinsic, + }); + }; + + var onSizeChanged = function onSizeChanged(_ref) { + var _sizeChanged = _ref._sizeChanged, + _directionIsRTLCache = _ref._directionIsRTLCache, + _appear = _ref._appear; + var updateFn = !_sizeChanged || _appear ? updateLifecycles : updateLifecyclesWithDebouncedAdaptiveUpdateHints; + updateFn({ + _sizeChanged: _sizeChanged, + _directionIsRTL: _directionIsRTLCache, + }); + }; + + var onContentMutation = function onContentMutation(contentChangedTroughEvent) { + var updateFn = contentChangedTroughEvent ? updateLifecycles : updateLifecyclesWithDebouncedAdaptiveUpdateHints; + updateFn({ + _contentMutation: true, + }); + }; + + var onHostMutation = updateLifecyclesWithDebouncedAdaptiveUpdateHints.bind(0, { + _hostMutation: true, + }); + var trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged); + var sizeObserver = createSizeObserver(_host, onSizeChanged, { + _appear: true, + _direction: !_nativeScrollbarStyling, + }); + var hostMutationObserver = createDOMObserver(_host, false, onHostMutation, { + _styleChangingAttributes: baseStyleChangingAttrs, + _attributes: baseStyleChangingAttrs, + _ignoreTargetChange: ignoreTargetChange, + }); + var contentMutationObserver; + + var updateOptions = function updateOptions(checkOption) { + var _checkOption = checkOption('updating.elementEvents'), + elementEvents = _checkOption._value, + elementEventsChanged = _checkOption._changed; + + var _checkOption2 = checkOption('updating.attributes'), + attributes = _checkOption2._value, + attributesChanged = _checkOption2._changed; + + var _checkOption3 = checkOption('updating.debounce'), + debounce = _checkOption3._value, + debounceChanged = _checkOption3._changed; + + var updateContentMutationObserver = elementEventsChanged || attributesChanged; + + if (updateContentMutationObserver) { + if (contentMutationObserver) { + contentMutationObserver._update(); + + contentMutationObserver._destroy(); + } + + contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, { + _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []), + _attributes: contentMutationObserverAttr.concat(attributes || []), + _eventContentChange: elementEvents, + _ignoreNestedTargetChange: ignoreTargetChange, + }); + } + + if (debounceChanged) { + updateLifecyclesWithDebouncedAdaptiveUpdateHints._flush(); + + if (isArray(debounce)) { + var timeout = debounce[0]; + var maxWait = debounce[1]; + debounceTimeout = isNumber(timeout) ? timeout : false; + debounceMaxDelay = isNumber(maxWait) ? maxWait : false; + } else if (isNumber(debounce)) { + debounceTimeout = debounce; + debounceMaxDelay = false; + } else { + debounceTimeout = false; + debounceMaxDelay = false; + } + } + }; + + return { + _trinsicObserver: trinsicObserver, + _sizeObserver: sizeObserver, + _updateObserverOptions: updateOptions, + }; + }; + var createTrinsicLifecycle = function createTrinsicLifecycle(lifecycleHub) { var _structureSetup = lifecycleHub._structureSetup; var _content = _structureSetup._targetObj._content; @@ -1772,455 +2391,6 @@ }; }; - var animationStartEventName = 'animationstart'; - var scrollEventName = 'scroll'; - var scrollAmount = 3333333; - - var directionIsRTL = function directionIsRTL(elm) { - return style(elm, 'direction') === 'rtl'; - }; - - 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(observerElementChildrenRoot); - 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(observerElementChildrenRoot); - isDirty = !scrollEvent || !equalWH(currSize, cacheSize); - - if (scrollEvent) { - stopAndPrevent(scrollEvent); - - if (isDirty && !rAFId) { - cAF(rAFId); - rAFId = rAF(onResized); - } - } else { - onResized(); - } - - reset(); - }; - - push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]); - style(expandElementChild, { - width: scrollAmount, - height: scrollAmount, - }); - reset(); - appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset; - } - - if (observeDirectionChange) { - directionIsRTLCache = createCache(directionIsRTL.bind(0, 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) { - removeClass(listenerElement, 'ltr rtl'); - - if (_value) { - addClass(listenerElement, 'rtl'); - } else { - addClass(listenerElement, 'ltr'); - } - - onSizeChangedCallbackProxy(directionIsRTLCacheValues); - } - - stopAndPrevent(event); - }) - ); - } - - 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 = createDiv(classNameTrinsicObserver); - 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 { - var onSizeChanged = function onSizeChanged() { - var newSize = offsetSize(trinsicObserver); - var heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize); - - if (heightIntrinsicCache._changed) { - onTrinsicChangedCallback(heightIntrinsicCache); - } - }; - - push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy); - onSizeChanged(); - } - - 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, callback) { - var map; - var eventContentChangeRef; - - var _destroy = function _destroy() { - if (map) { - map.forEach(function (eventName, elm) { - return off(elm, eventName, callback); - }); - map.clear(); - } - }; - - var _updateElements = function _updateElements(getElements) { - if (map && eventContentChangeRef) { - var eventElmList = eventContentChangeRef.reduce(function (arr, item) { - if (item) { - var selector = item[0]; - var eventNames = item[1]; - var elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target)); - var parsedEventNames = isFunction(eventNames) ? eventNames(elements) : eventNames; - - if (elements && elements.length && parsedEventNames && isString(parsedEventNames)) { - push(arr, [elements, parsedEventNames.trim()], true); - } - } - - return arr; - }, []); - each(eventElmList, function (item) { - return each(item[0], function (elm) { - var eventNames = item[1]; - var registredEventNames = map.get(elm); - var newEntry = isUndefined(registredEventNames); - var changingExistingEntry = !newEntry && eventNames !== registredEventNames; - var finalEventNames = changingExistingEntry ? registredEventNames + ' ' + eventNames : eventNames; - - if (changingExistingEntry) { - off(elm, registredEventNames, callback); - } - - map.set(elm, finalEventNames); - on(elm, finalEventNames, callback); - }); - }); - } - }; - - var _updateEventContentChange = function _updateEventContentChange(newEventContentChange) { - map = map || new Map(); - eventContentChangeRef = newEventContentChange; - - _destroy(); - - _updateElements(); - }; - - if (eventContentChange) { - _updateEventContentChange(eventContentChange); - } - - return { - _destroy: _destroy, - _updateElements: _updateElements, - _updateEventContentChange: _updateEventContentChange, - }; - }; - - var createDOMObserver = function createDOMObserver(target, isContentObserver, callback, options) { - var isConnected = false; - - var _ref = options || {}, - _attributes = _ref._attributes, - _styleChangingAttributes = _ref._styleChangingAttributes, - _eventContentChange = _ref._eventContentChange, - _nestedTargetSelector = _ref._nestedTargetSelector, - _ignoreTargetChange = _ref._ignoreTargetChange, - _ignoreNestedTargetChange = _ref._ignoreNestedTargetChange, - _ignoreContentChange = _ref._ignoreContentChange; - - var _createEventContentCh = createEventContentChange( - target, - isContentObserver && _eventContentChange, - debounce(function () { - if (isConnected) { - callback(true); - } - }, 84) - ), - destroyEventContentChange = _createEventContentCh._destroy, - updateEventContentChangeElements = _createEventContentCh._updateElements, - updateEventContentChange = _createEventContentCh._updateEventContentChange; - - var finalAttributes = _attributes || []; - var finalStyleChangingAttributes = _styleChangingAttributes || []; - var observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); - - var observerCallback = function observerCallback(mutations) { - var ignoreTargetChange = (isContentObserver ? _ignoreNestedTargetChange : _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 styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged; - - if (isContentObserver && !targetIsMutationTarget) { - var notOnlyAttrChanged = !isAttributesType; - var contentAttrChanged = isAttributesType && styleChangingAttrChanged; - 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; - } - - if ( - !isContentObserver && - targetIsMutationTarget && - attributeChanged && - !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue) - ) { - push(targetChangedAttrs, attributeName); - targetStyleChanged = targetStyleChanged || 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 (isContentObserver) { - contentChanged && callback(contentChanged); - } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) { - callback(targetChangedAttrs, targetStyleChanged); - } - }; - - var mutationObserver = new MutationObserverConstructor(observerCallback); - mutationObserver.observe(target, { - attributes: true, - attributeOldValue: true, - attributeFilter: observedAttributes, - subtree: isContentObserver, - childList: isContentObserver, - characterData: isContentObserver, - }); - isConnected = true; - return { - _destroy: function _destroy() { - if (isConnected) { - destroyEventContentChange(); - mutationObserver.disconnect(); - isConnected = false; - } - }, - _updateEventContentChange: function _updateEventContentChange(newEventContentChange) { - updateEventContentChange(isConnected && isContentObserver && newEventContentChange); - }, - _update: function _update() { - if (isConnected) { - observerCallback(mutationObserver.takeRecords()); - } - }, - }; - }; - var getPropByPath = function getPropByPath(obj, path) { return obj ? path.split('.').reduce(function (o, prop) { @@ -2229,29 +2399,7 @@ : undefined; }; - var ignorePrefix = 'os-'; - var hostSelector = '.' + classNameHost; - var viewportSelector = '.' + classNameViewport; - var contentSelector = '.' + classNameContent; - var attrs = ['id', 'class', 'style', 'open']; - - var ignoreTargetChange = function ignoreTargetChange(target, attrName, oldValue, newValue) { - if (attrName === 'class' && oldValue && newValue) { - var diff = diffClass(oldValue, newValue); - return !!diff.find(function (addedOrRemovedClass) { - return addedOrRemovedClass.indexOf(ignorePrefix) !== 0; - }); - } - - return false; - }; - - var directionIsRTLCacheValuesFallback = { - _value: false, - _previous: false, - _changed: false, - }; - var heightIntrinsicCacheValuesFallback = { + var booleanCacheValuesFallback = { _value: false, _previous: false, _changed: false, @@ -2286,10 +2434,7 @@ }; var createLifecycleHub = function createLifecycleHub(options, structureSetup) { var lifecycleCommunication = lifecycleCommunicationFallback; - var _structureSetup$_targ = structureSetup._targetObj, - _host = _structureSetup$_targ._host, - _viewport = _structureSetup$_targ._viewport, - _content = _structureSetup$_targ._content; + var _viewport = structureSetup._targetObj._viewport; var _getEnvironment = getEnvironment(), _nativeScrollbarStyling = _getEnvironment._nativeScrollbarStyling, @@ -2326,9 +2471,9 @@ _paddingStyleChanged = _ref$_paddingStyleCha === void 0 ? force || false : _ref$_paddingStyleCha; var finalDirectionIsRTL = - _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback); + _directionIsRTL || (_sizeObserver ? _sizeObserver._getCurrentCacheValues(force)._directionIsRTL : booleanCacheValuesFallback); var finalHeightIntrinsic = - _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback); + _heightIntrinsic || (_trinsicObserver ? _trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : booleanCacheValuesFallback); var checkOption = function checkOption(path) { return { @@ -2340,6 +2485,11 @@ var adjustScrollOffset = doViewportArrange || !_flexboxGlue; var scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport); var scrollOffsetY = adjustScrollOffset && scrollTop(_viewport); + + if (_updateObserverOptions) { + _updateObserverOptions(checkOption); + } + each(lifecycles, function (lifecycle) { var _ref2 = lifecycle( @@ -2378,62 +2528,10 @@ } }; - var onSizeChanged = function onSizeChanged(directionIsRTL) { - var sizeChanged = !directionIsRTL; - updateLifecycles({ - _directionIsRTL: directionIsRTL, - _sizeChanged: sizeChanged, - }); - }; - - var onTrinsicChanged = function onTrinsicChanged(heightIntrinsic) { - updateLifecycles({ - _heightIntrinsic: heightIntrinsic, - }); - }; - - var onHostMutation = function onHostMutation() { - requestAnimationFrame(function () { - updateLifecycles({ - _hostMutation: true, - }); - }); - }; - - var onContentMutation = function onContentMutation() { - requestAnimationFrame(function () { - updateLifecycles({ - _contentMutation: true, - }); - }); - }; - - var trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged); - var sizeObserver = createSizeObserver(_host, onSizeChanged, { - _appear: true, - _direction: !_nativeScrollbarStyling, - }); - var hostMutationObserver = createDOMObserver(_host, false, onHostMutation, { - _styleChangingAttributes: attrs, - _attributes: attrs, - _ignoreTargetChange: ignoreTargetChange, - }); - var contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, { - _styleChangingAttributes: attrs, - _attributes: attrs, - _eventContentChange: options.updating.elementEvents, - _nestedTargetSelector: hostSelector, - _ignoreContentChange: function _ignoreContentChange(mutation, isNestedTarget) { - var target = mutation.target, - attributeName = mutation.attributeName; - return isNestedTarget - ? false - : attributeName - ? liesBetween(target, hostSelector, viewportSelector) || liesBetween(target, hostSelector, contentSelector) - : false; - }, - _ignoreNestedTargetChange: ignoreTargetChange, - }); + var _lifecycleHubOservers = lifecycleHubOservers(instance, updateLifecycles), + _sizeObserver = _lifecycleHubOservers._sizeObserver, + _trinsicObserver = _lifecycleHubOservers._trinsicObserver, + _updateObserverOptions = _lifecycleHubOservers._updateObserverOptions; var update = function update(changedOptions, force) { updateLifecycles(null, changedOptions, force); diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index 155b553..f15c4fc 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js.map +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/cache/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/setups/structureSetup.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHub.ts","../src/overlayscrollbars.ts"],"sourcesContent":["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","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 { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: 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 { 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 { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray => (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 | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | false | 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","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 it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n return !(result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined));\r\n });\r\n\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string,\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 | false | 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 | false | 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 | false | 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","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): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void => (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber } 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, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n //animationiterationcount: 1,\r\n //columncount: 1,\r\n //fillopacity: 1,\r\n //flexgrow: 1,\r\n //flexshrink: 1,\r\n //fontweight: 1,\r\n //lineheight: 1,\r\n 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[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | false | null | undefined, prop: string, val: string | number): void => {\r\n try {\r\n if (elm) {\r\n const { style } = elm;\r\n if (!isUndefined(style[prop])) {\r\n style[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n style.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: StyleObject): void;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (elm?: HTMLElement | false | null | undefined, propertyPrefix?: string, propertySuffix?: string): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { 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","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 { PlainObject } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: unknown, ...args: unknown[]) => unknown;\r\nexport type OptionsTemplateType = ExtractPropsKey;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = {\r\n readonly _foreign: Record;\r\n readonly _validated: PartialOptions;\r\n};\r\n\r\nexport type PartialOptions = {\r\n [P in keyof T]?: T[P] extends OptionsObjectType ? PartialOptions : T[P];\r\n};\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst { 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/**\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: PartialOptions,\r\n template: OptionsTemplate,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const 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 T, 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: PartialOptions,\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","import {\r\n OptionsTemplate,\r\n OptionsObjectType,\r\n OptionsTemplateNativeTypes,\r\n OptionsTemplateTypes,\r\n OptionsTemplateValue,\r\n} from 'support/options/validation';\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\nexport type OptionsWithOptionsTemplateValue = [T, OptionsTemplateValue];\r\n\r\nexport type OptionsWithOptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsWithOptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsWithOptionsTemplateValue\r\n : never;\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 const transformOptions = (optionsWithOptionsTemplate: OptionsWithOptionsTemplate): 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 classNameViewportArrange = `${classNameViewport}-arrange`;\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 optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n} from 'support/options';\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible' | 'visible-hidden';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface OSOptions {\r\n resize: ResizeBehavior;\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[string, string]> | null;\r\n contentMutationDebounce: number;\r\n hostMutationDebounce: number;\r\n resizeDebounce: number;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n textarea: {\r\n dynWidth: boolean;\r\n dynHeight: boolean;\r\n inheritedAttrs: string | Array | null;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n callbacks: {\r\n onUpdated: (() => any) | null;\r\n };\r\n /*\r\n callbacks?: {\r\n onInitialized?: BasicEventCallback | null;\r\n onInitializationWithdrawn?: BasicEventCallback | null;\r\n onDestroyed?: BasicEventCallback | null;\r\n onScrollStart?: ScrollEventCallback | null;\r\n onScroll?: ScrollEventCallback | null;\r\n onScrollStop?: ScrollEventCallback | null;\r\n onOverflowChanged?: OverflowChangedCallback | null;\r\n onOverflowAmountChanged?: OverflowAmountChangedCallback | null;\r\n onDirectionChanged?: DirectionChangedCallback | null;\r\n onContentSizeChanged?: SizeChangedCallback | null;\r\n onHostSizeChanged?: SizeChangedCallback | null;\r\n onUpdated?: UpdatedCallback | null;\r\n };\r\n */\r\n}\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\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 = 'hidden scroll visible visible-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 callbacks: {\r\n onUpdated: [null, [oTypes.function, oTypes.null]],\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 {\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 equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n PartialOptions,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { OSOptions, defaultOptions } from 'options';\r\n\r\nexport interface InitializationStrategy {\r\n _padding: boolean;\r\n _content: boolean;\r\n}\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\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 _cssCustomProperties: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): OSOptions;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n _defaultInitializationStrategy: InitializationStrategy;\r\n _defaultDefaultOptions: OSOptions;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (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, cssProperty('scrollbar-width')) === 'none' ||\r\n 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 = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst getDefaultInitializationStrategy = (nativeScrollbarStyling: boolean): InitializationStrategy => ({\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n});\r\n\r\nconst createEnvironment = (): Environment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = getNativeScrollbarStyling(envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const defaultInitializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling);\r\n let initializationStrategy = defaultInitializationStrategy;\r\n let defaultDefaultOptions = defaultOptions;\r\n\r\n const env: Environment = {\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n _getInitializationStrategy: () => ({ ...initializationStrategy }),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n initializationStrategy = assignDeep({}, initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: () => ({ ...defaultDefaultOptions }),\r\n _setDefaultOptions(newDefaultOptions) {\r\n defaultDefaultOptions = assignDeep({}, defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: defaultInitializationStrategy,\r\n _defaultDefaultOptions: defaultDefaultOptions,\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n 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 insertBefore,\r\n attr,\r\n isBoolean,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, 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 {\r\n _target: OSTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false | null;\r\n _content: HTMLElement | false | null;\r\n _viewportArrange: HTMLStyleElement | false | 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 | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement => {\r\n const elm = document.createElement('style');\r\n\r\n attr(elm, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n\r\n return elm;\r\n};\r\nconst evaluateCreationFromStrategy = (initializationValue: HTMLElement | boolean | undefined, strategy: boolean): HTMLElement | false | undefined => {\r\n const isBooleanValue = isBoolean(initializationValue);\r\n if (isBooleanValue || isUndefined(initializationValue)) {\r\n return (isBooleanValue ? initializationValue : strategy) && undefined;\r\n }\r\n return initializationValue as HTMLElement;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n const { _padding: paddingNeeded, _content: contentNeeded } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: Partial = targetIsElm\r\n ? ({} as Partial)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _padding: evaluateCreationFromStrategy((target as OSTargetObject).padding, paddingNeeded),\r\n _content: evaluateCreationFromStrategy((target as OSTargetObject).content, contentNeeded),\r\n };\r\n\r\n if (targetIsElm) {\r\n const viewport = createDiv(classNameViewport);\r\n const padding = paddingNeeded && createDiv(classNamePadding);\r\n const content = contentNeeded && createDiv(classNameContent);\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 const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, getTargetContents(_target!));\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(contentSlot));\r\n removeElements(_padding || _viewport);\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 if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (!_cssCustomProperties && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y)) {\r\n const viewportArrangeElm = createUniqueViewportArrangeElement();\r\n\r\n insertBefore(_viewport, viewportArrangeElm);\r\n push(destroyFns, removeElements.bind(0, viewportArrangeElm));\r\n\r\n obj._viewportArrange = viewportArrangeElm;\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 { style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createTrinsicLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup } = lifecycleHub;\r\n const { _content } = _structureSetup._targetObj;\r\n\r\n return (updateHints) => {\r\n const { _heightIntrinsic } = updateHints;\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: heightIntrinsic ? '' : '100%',\r\n display: heightIntrinsic ? '' : 'inline',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, TRBL } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _setLifecycleCommunication } = lifecycleHub;\r\n const { _host, _padding, _viewport } = _structureSetup._targetObj;\r\n const { _update: updatePaddingCache, _current: currentPaddingCache } = createCache(topRightBottomLeft.bind(0, _host, 'padding'), {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n });\r\n\r\n return (updateHints, checkOption, force) => {\r\n let { _value: padding, _changed: paddingChanged } = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL, _contentMutation } = updateHints;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n ({ _value: padding, _changed: paddingChanged } = updatePaddingCache(force));\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding!.r + padding!.l;\r\n const paddingVertical = padding!.t + padding!.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: paddingRelative ? (directionIsRTL ? -padding!.r : 'auto') : 0,\r\n left: paddingRelative ? (directionIsRTL ? 'auto' : -padding!.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding!.t : 0,\r\n paddingRight: paddingRelative ? padding!.r : 0,\r\n paddingBottom: paddingRelative ? padding!.b : 0,\r\n paddingLeft: paddingRelative ? padding!.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n _setLifecycleCommunication({\r\n _paddingInfo: {\r\n _absolute: !paddingRelative,\r\n _padding: padding!,\r\n },\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : {\r\n ...paddingStyle,\r\n ...viewportStyle,\r\n },\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n CacheValues,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n offsetSize,\r\n getBoundingClientRect,\r\n noop,\r\n each,\r\n} from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { StyleObject } from 'typings';\r\nimport { classNameViewportArrange, classNameViewportScrollbarStyling } from 'classnames';\r\n\r\ninterface OverflowAmountCacheContext {\r\n _viewportScrollSize: WH;\r\n _viewportClientSize: WH;\r\n _viewportSizeFraction: WH;\r\n}\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n}\r\n\r\ninterface UndoViewportArrangeResult {\r\n _redoViewportArrange: () => void;\r\n _viewportOverflowState?: ViewportOverflowState;\r\n}\r\n\r\ninterface OverflowOption {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n}\r\n\r\nconst { max, abs, round } = Math;\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst sizeFraction = (elm: HTMLElement): WH => {\r\n const viewportOffsetSize = offsetSize(elm);\r\n const viewportRect = getBoundingClientRect(elm);\r\n return {\r\n w: viewportRect.width - viewportOffsetSize.w,\r\n h: viewportRect.height - viewportOffsetSize.h,\r\n };\r\n};\r\nconst setAxisOverflowStyle = (horizontal: boolean, overflowAmount: number, behavior: OverflowBehavior, styleObj: StyleObject) => {\r\n const overflowKey: keyof StyleObject = horizontal ? 'overflowX' : 'overflowY';\r\n const behaviorIsVisible = behavior.indexOf('visible') === 0;\r\n const behaviorIsVisibleHidden = behavior === 'visible-hidden';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n const hasOverflow = overflowAmount > 0;\r\n\r\n if (behaviorIsVisible) {\r\n styleObj[overflowKey] = 'visible';\r\n }\r\n if (behaviorIsScroll && hasOverflow) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: behaviorIsVisible,\r\n _behavior: behaviorIsVisibleHidden ? 'hidden' : 'scroll',\r\n };\r\n};\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _doViewportArrange, _getLifecycleCommunication, _setLifecycleCommunication } = lifecycleHub;\r\n const { _host, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n const { _update: updateViewportSizeFraction, _current: getCurrentViewportSizeFraction } = createCache>(\r\n sizeFraction.bind(0, _viewport),\r\n whCacheOptions\r\n );\r\n const { _update: updateViewportScrollSizeCache, _current: getCurrentViewportScrollSizeCache } = createCache>(\r\n scrollSize.bind(0, _viewport),\r\n whCacheOptions\r\n );\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n ({ _viewportScrollSize, _viewportClientSize, _viewportSizeFraction }) => ({\r\n w: round(max(0, _viewportScrollSize.w - _viewportClientSize.w) - max(0, _viewportSizeFraction.w)),\r\n h: round(max(0, _viewportScrollSize.h - _viewportClientSize.h) - max(0, _viewportSizeFraction.h)),\r\n }),\r\n whCacheOptions\r\n );\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (viewportOverflowState: ViewportOverflowState, heightIntrinsic: boolean) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _absolute: paddingAbsolute, _padding: padding } = _getLifecycleCommunication()._paddingInfo;\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostSizeFraction = sizeFraction(_host);\r\n const hostClientSize = clientSize(_host);\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const paddingVertical = paddingAbsolute || style(_viewport, 'boxSizing') === 'content-box' ? padding.b + padding.t : 0;\r\n const fractionalClientHeight = hostClientSize.h + (abs(hostSizeFraction.h) < 1 ? hostSizeFraction.h : 0);\r\n\r\n style(_viewport, {\r\n height: fractionalClientHeight + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (showNativeOverlaidScrollbars: boolean, viewportStyleObj?: StyleObject): ViewportOverflowState => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow ? style(_viewport, ['overflowX', 'overflowY']) : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj!.overflowX === 'scroll',\r\n y: styleObj!.overflowY === 'scroll',\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? (overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x) : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? (overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y) : 0,\r\n };\r\n\r\n return {\r\n _overflowScroll: scroll,\r\n _scrollbarsHideOffsetArrange: {\r\n x: overlaidX && !!arrangeHideOffset,\r\n y: overlaidY && !!arrangeHideOffset,\r\n },\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n overflowAmount: WH,\r\n overflow: OverflowOption,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setAxisOverflowStyle(true, overflowAmount!.w, overflow.x, viewportStyleObj);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setAxisOverflowStyle(false, overflowAmount!.h, overflow.y, viewportStyleObj);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyleObj.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyleObj.overflowY = yVisibleBehavior;\r\n }\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n viewportSizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\r\n if (_doViewportArrange) {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingRight' : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + (abs(viewportSizeFraction.w) < 1 ? viewportSizeFraction.w : 0);\r\n const fractionalContenHeight = viewportScrollSize.h + (abs(viewportSizeFraction.h) < 1 ? viewportSizeFraction.h : 0);\r\n const arrangeSize = {\r\n w: hideOffsetY && arrangeY ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px` : '',\r\n h: hideOffsetX && arrangeX ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px` : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(`#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, 0);\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return _doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingLeft' : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n ): UndoViewportArrangeResult => {\r\n if (_doViewportArrange) {\r\n const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n removeClass(_viewport, classNameViewportArrange);\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return {\r\n _redoViewportArrange: () => {\r\n hideNativeScrollbars(finalViewportOverflowState, directionIsRTL, _doViewportArrange, prevStyle);\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n _viewportOverflowState: finalViewportOverflowState,\r\n };\r\n }\r\n return {\r\n _redoViewportArrange: noop,\r\n };\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation, _paddingStyleChanged } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || heightIntrinsicChanged);\r\n let viewportSizeFractionCache: CacheValues> = getCurrentViewportSizeFraction(force);\r\n let viewportScrollSizeCache: CacheValues> = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(force);\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\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 (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) {\r\n const { _redoViewportArrange, _viewportOverflowState: undoViewportArrangeOverflowState } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL!,\r\n preMeasureViewportOverflowState\r\n );\r\n const { _value: viewportSizeFraction, _changed: viewportSizeFractionCahnged } = (viewportSizeFractionCache = updateViewportSizeFraction(force));\r\n const { _value: viewportScrollSize, _changed: viewportScrollSizeChanged } = (viewportScrollSizeCache = updateViewportScrollSizeCache(force));\r\n const viewportContentSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize!;\r\n let arrangedViewportClientSize = viewportContentSize;\r\n\r\n _redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || viewportSizeFractionCahnged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(undoViewportArrangeOverflowState, viewportScrollSize!, viewportSizeFraction!, directionIsRTL!)\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _viewportSizeFraction: viewportSizeFraction!,\r\n _viewportScrollSize: {\r\n w: max(viewportScrollSize!.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize!.h, arrangedViewportScrollSize.h),\r\n },\r\n _viewportClientSize: {\r\n w: arrangedViewportClientSize.w + max(0, viewportContentSize.w - viewportScrollSize!.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportContentSize.h - viewportScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: viewportSizeFraction, _changed: viewportSizeFractionChanged } = viewportSizeFractionCache;\r\n const { _value: viewportScrollSize, _changed: viewportScrollSizeChanged } = viewportScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n const { _value: overflow, _changed: overflowChanged } = checkOption('overflow');\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n viewportSizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, overflowAmount!, overflow, viewportStyle);\r\n const viewportArranged = arrangeViewport(viewportOverflowState, viewportScrollSize!, viewportSizeFraction!, directionIsRTL!);\r\n hideNativeScrollbars(viewportOverflowState, directionIsRTL!, viewportArranged, viewportStyle);\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n // TODO: hide host overflow if scroll x or y and no padding element there\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n // TODO: overflow: visible on padding / host if overflow visible on both axis\r\n\r\n style(_viewport, viewportStyle);\r\n\r\n _setLifecycleCommunication({\r\n _viewportOverflowScroll: viewportOverflowState._overflowScroll,\r\n _viewportOverflowAmount: overflowAmount,\r\n });\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 stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport 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\n/*\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\n*/\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (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 | ResizeObserverEntry[] | 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 otherwise\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(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\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 | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized();\r\n }\r\n\r\n reset();\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\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(directionIsRTL.bind(0, 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 console.log;\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (_value) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return {\r\n _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 createDiv,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport 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\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\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 const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy);\r\n onSizeChanged();\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\n\r\ntype DOMContentObserverCallback = (contentChanged: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n _ignoreNestedTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed on nested targets if it returns true\r\n}\r\n\r\ninterface DOMTargetObserverOptions extends DOMObserverOptionsBase {\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed if it returns true\r\n}\r\n\r\ninterface DOMObserverBase {\r\n _destroy: () => void;\r\n _update: () => void;\r\n}\r\n\r\ninterface DOMContentObserver extends DOMObserverBase {\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n}\r\n\r\ninterface DOMTargetObserver extends DOMObserverBase {}\r\n\r\ntype ContentChangeArrayItem = [StringNullUndefined, ((elms: Node[]) => StringNullUndefined) | StringNullUndefined] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange = Array | false | null | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMContentObserverOptions | undefined\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true ? DOMContentObserverOptions : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = ContentObserver extends true ? DOMContentObserver : DOMTargetObserver;\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (target: Element, eventContentChange: DOMObserverEventContentChange, callback: (...args: any) => any) => {\r\n let map: Map | undefined;\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const _destroy = () => {\r\n if (map) {\r\n map.forEach((eventName: string, elm: Node) => off(elm, eventName, callback));\r\n map.clear();\r\n }\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (map && eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target));\r\n const parsedEventNames = isFunction(eventNames) ? eventNames(elements) : eventNames;\r\n\r\n if (elements && elements.length && parsedEventNames && isString(parsedEventNames)) {\r\n push(arr, [elements, parsedEventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const registredEventNames = map!.get(elm);\r\n const newEntry = isUndefined(registredEventNames);\r\n const changingExistingEntry = !newEntry && eventNames !== registredEventNames;\r\n const finalEventNames = changingExistingEntry ? `${registredEventNames} ${eventNames}` : eventNames;\r\n\r\n if (changingExistingEntry) {\r\n off(elm, registredEventNames!, callback);\r\n }\r\n\r\n map!.set(elm, finalEventNames);\r\n on(elm, finalEventNames, callback);\r\n })\r\n );\r\n }\r\n };\r\n const _updateEventContentChange = (newEventContentChange: DOMObserverEventContentChange) => {\r\n map = map || new Map();\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _updateEventContentChange(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _updateEventContentChange,\r\n };\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreNestedTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const {\r\n _destroy: destroyEventContentChange,\r\n _updateElements: updateEventContentChangeElements,\r\n _updateEventContentChange: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n isContentObserver && _eventContentChange,\r\n debounce(() => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(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);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = (isContentObserver ? _ignoreNestedTargetChange : _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 styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget = 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 // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(contentChanged);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _destroy: () => {\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 && isContentObserver && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n } as DOMObserver;\r\n};\r\n","import {\r\n XY,\r\n WH,\r\n TRBL,\r\n CacheValues,\r\n PartialOptions,\r\n each,\r\n hasOwnProperty,\r\n isNumber,\r\n scrollLeft,\r\n scrollTop,\r\n assignDeep,\r\n liesBetween,\r\n diffClass,\r\n} from 'support';\r\nimport { OSOptions } from 'options';\r\nimport { classNameHost, classNameViewport, classNameContent } from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface LifecycleCommunication {\r\n _paddingInfo: {\r\n _absolute: boolean;\r\n _padding: TRBL;\r\n };\r\n _viewportPaddingStyle: StyleObject;\r\n _viewportOverflowScroll: XY;\r\n _viewportOverflowAmount: WH;\r\n}\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n _paddingStyleChanged: 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 Lifecycle = (\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport interface LifecycleHubState {\r\n _overflowAmount: WH;\r\n}\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: PartialOptions | null, force?: boolean): void;\r\n _state(): LifecycleHubState;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: OSOptions;\r\n _structureSetup: StructureSetup;\r\n // whether the \"viewport arrange\" strategy must be used (true if no native scrollbar hiding and scrollbars are overlaid)\r\n _doViewportArrange: boolean;\r\n _getLifecycleCommunication(): LifecycleCommunication;\r\n _setLifecycleCommunication(newLifecycleCommunication?: Partial): void;\r\n}\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) : undefined;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n// TODO: tabindex, open etc.\r\n// TODO: test _ignoreContentChange & _ignoreNestedTargetChange for content dom observer\r\n// TODO: test _ignoreTargetChange for target dom observer\r\nconst ignorePrefix = 'os-';\r\nconst hostSelector = `.${classNameHost}`;\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst contentSelector = `.${classNameContent}`;\r\nconst attrs = ['id', 'class', 'style', 'open'];\r\nconst ignoreTargetChange = (target: Node, attrName: string, oldValue: string | null, newValue: string | null) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n return !!diff.find((addedOrRemovedClass) => addedOrRemovedClass.indexOf(ignorePrefix) !== 0);\r\n }\r\n return false;\r\n};\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\nconst lifecycleCommunicationFallback: LifecycleCommunication = {\r\n _paddingInfo: {\r\n _absolute: false,\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n },\r\n _viewportOverflowScroll: {\r\n x: false,\r\n y: false,\r\n },\r\n _viewportOverflowAmount: {\r\n w: 0,\r\n h: 0,\r\n },\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n};\r\n\r\nexport const createLifecycleHub = (options: OSOptions, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n let lifecycleCommunication = lifecycleCommunicationFallback;\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n _doViewportArrange: doViewportArrange,\r\n _getLifecycleCommunication: () => lifecycleCommunication,\r\n _setLifecycleCommunication(newLifecycleCommunication) {\r\n lifecycleCommunication = assignDeep({}, lifecycleCommunication, newLifecycleCommunication);\r\n },\r\n };\r\n const lifecycles: Lifecycle[] = [createTrinsicLifecycle(instance), createPaddingLifecycle(instance), createOverflowLifecycle(instance)];\r\n\r\n const updateLifecycles = (updateHints?: Partial | null, changedOptions?: Partial | null, force?: boolean) => {\r\n let {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged = force || false,\r\n _hostMutation = force || false,\r\n _contentMutation = force || false,\r\n _paddingStyleChanged = 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 const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const {\r\n _sizeChanged: adaptiveSizeChanged,\r\n _hostMutation: adaptiveHostMutation,\r\n _contentMutation: adaptiveContentMutation,\r\n _paddingStyleChanged: adaptivePaddingStyleChanged,\r\n } =\r\n lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n },\r\n checkOption,\r\n !!force\r\n ) || {};\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n _paddingStyleChanged = adaptivePaddingStyleChanged || _paddingStyleChanged;\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n if (options.callbacks.onUpdated) {\r\n options.callbacks.onUpdated();\r\n }\r\n };\r\n\r\n const onSizeChanged = (directionIsRTL?: CacheValues) => {\r\n const sizeChanged = !directionIsRTL;\r\n updateLifecycles({\r\n _directionIsRTL: directionIsRTL,\r\n _sizeChanged: sizeChanged,\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\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 updateLifecycles({\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 updateLifecycles({\r\n _contentMutation: true,\r\n });\r\n });\r\n };\r\n\r\n const trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _ignoreTargetChange: ignoreTargetChange,\r\n });\r\n const contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _eventContentChange: options!.updating!.elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget\r\n ? false\r\n : attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector) || liesBetween(target as Element, hostSelector, contentSelector)\r\n : false;\r\n },\r\n _ignoreNestedTargetChange: ignoreTargetChange,\r\n });\r\n\r\n const update = (changedOptions?: Partial | null, force?: boolean) => {\r\n updateLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = update.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n console.log(getEnvironment());\r\n\r\n return {\r\n _update: update,\r\n _state: () => ({\r\n _overflowAmount: lifecycleCommunication._viewportOverflowAmount,\r\n }),\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\nimport { PartialOptions, validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { OSOptions, optionsTemplate } from 'options';\r\nimport { getEnvironment } from 'environment';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (target: OSTarget | OSTargetObject, options?: PartialOptions, extensions?: any): OverlayScrollbars;\r\n}\r\n\r\nexport interface OverlayScrollbars {\r\n options(): OSOptions;\r\n options(newOptions?: PartialOptions): OSOptions;\r\n\r\n update(force?: boolean): void;\r\n\r\n state(): any;\r\n}\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: OSTarget | OSTargetObject,\r\n options?: PartialOptions,\r\n extensions?: any\r\n): OverlayScrollbars => {\r\n const { _getDefaultOptions } = getEnvironment();\r\n const currentOptions: OSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options || ({} as PartialOptions), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\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 state: () => lifecycleHub._state(),\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"],"names":["createCache","update","options","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","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","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","elm","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","style","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","diffClass","classNameA","classNameB","classNameASplit","split","classNameBSplit","tempObj","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","stopAndPrevent","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","setCSSVal","setProperty","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","_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","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","numberAllowedValues","oTypes","number","stringArrayNullAllowedValues","null","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","updating","elementEvents","contentMutationDebounce","hostMutationDebounce","resizeDebounce","overflow","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","callbacks","onUpdated","function","optionsTemplate","defaultOptions","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","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","getDefaultInitializationStrategy","nativeScrollbarStyling","_padding","_content","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarIsOverlaid","defaultInitializationStrategy","initializationStrategy","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","contentArrangeCounter","createUniqueViewportArrangeElement","evaluateCreationFromStrategy","initializationValue","strategy","isBooleanValue","createStructureSetup","paddingNeeded","contentNeeded","targetIsElm","osTargetObj","_host","host","_target","_viewport","viewport","padding","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","viewportArrangeElm","_viewportArrange","_targetObj","_targetCtx","_destroy","createTrinsicLifecycle","lifecycleHub","_structureSetup","updateHints","_heightIntrinsic","heightIntrinsic","heightIntrinsicChanged","height","display","_sizeChanged","_contentMutation","createPaddingLifecycle","_setLifecycleCommunication","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_directionIsRTL","directionIsRTL","directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","width","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingInfo","_absolute","_viewportPaddingStyle","_paddingStyleChanged","max","overlaidScrollbarsHideOffset","whCacheOptions","sizeFraction","viewportOffsetSize","viewportRect","setAxisOverflowStyle","horizontal","overflowAmount","behavior","styleObj","overflowKey","behaviorIsVisible","behaviorIsVisibleHidden","behaviorIsScroll","hasOverflow","_visible","_behavior","createOverflowLifecycle","_doViewportArrange","_getLifecycleCommunication","updateViewportSizeFraction","getCurrentViewportSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","_viewportScrollSize","_viewportClientSize","_viewportSizeFraction","updateOverflowAmountCache","getCurrentOverflowAmountCache","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostSizeFraction","hostClientSize","fractionalClientHeight","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","scroll","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","viewportScrollSize","viewportSizeFraction","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","_hostMutation","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","viewportSizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","viewportSizeFractionCahnged","viewportScrollSizeChanged","viewportContentSize","arrangedViewportScrollSize","arrangedViewportClientSize","viewportSizeFractionChanged","overflowAmountChanged","overflowChanged","viewportArranged","_viewportOverflowScroll","_viewportOverflowAmount","animationStartEventName","scrollEventName","scrollAmount","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","_getCurrentCacheValues","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","ioEntryOrSize","isIntersecting","intersectionRatio","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","intersectionObserverInstance","entries","last","root","onSizeChanged","newSize","heightIntrinsicCache","createEventContentChange","eventContentChange","map","eventContentChangeRef","clear","_updateElements","getElements","eventElmList","elements","parsedEventNames","registredEventNames","newEntry","changingExistingEntry","finalEventNames","_updateEventContentChange","newEventContentChange","Map","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreNestedTargetChange","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","updateEventContentChange","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","getPropByPath","path","o","ignorePrefix","hostSelector","viewportSelector","contentSelector","attrs","newValue","diff","addedOrRemovedClass","directionIsRTLCacheValuesFallback","heightIntrinsicCacheValuesFallback","lifecycleCommunicationFallback","createLifecycleHub","structureSetup","lifecycleCommunication","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","instance","newLifecycleCommunication","lifecycles","updateLifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","sizeChanged","onTrinsicChanged","onHostMutation","requestAnimationFrame","onContentMutation","hostMutationObserver","contentMutationObserver","envUpdateListener","log","_state","_overflowAmount","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions","state"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/cache/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/setups/structureSetup.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHubObservers.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/lifecycles/lifecycleHub.ts","../src/overlayscrollbars.ts"],"sourcesContent":["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","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 { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: 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 { 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 { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray => (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 | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | false | 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","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 it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n return !(result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined));\r\n });\r\n\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string,\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 | false | 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 | false | 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 | false | 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","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): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void => (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst setT = window.setTimeout;\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (curr: Parameters): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n const args: Parameters = arguments as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout! > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n if (!mergeParamsResult) {\r\n invokeFunctionToDebounce(prevArguments || args);\r\n }\r\n\r\n clearTimeouts(timeoutId);\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n //animationiterationcount: 1,\r\n //columncount: 1,\r\n //fillopacity: 1,\r\n //flexgrow: 1,\r\n //flexshrink: 1,\r\n //fontweight: 1,\r\n //lineheight: 1,\r\n 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[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | false | null | undefined, prop: string, val: string | number): void => {\r\n try {\r\n if (elm) {\r\n const { style } = elm;\r\n if (!isUndefined(style[prop])) {\r\n style[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n style.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: StyleObject): void;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (elm?: HTMLElement | false | null | undefined, propertyPrefix?: string, propertySuffix?: string): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { 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","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 { PlainObject } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: unknown, ...args: unknown[]) => unknown;\r\nexport type OptionsTemplateType = ExtractPropsKey;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = {\r\n readonly _foreign: Record;\r\n readonly _validated: PartialOptions;\r\n};\r\n\r\nexport type PartialOptions = {\r\n [P in keyof T]?: T[P] extends OptionsObjectType ? PartialOptions : T[P];\r\n};\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst { 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/**\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: PartialOptions,\r\n template: OptionsTemplate,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const 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 T, 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: PartialOptions,\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","import {\r\n OptionsTemplate,\r\n OptionsObjectType,\r\n OptionsTemplateNativeTypes,\r\n OptionsTemplateTypes,\r\n OptionsTemplateValue,\r\n} from 'support/options/validation';\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\nexport type OptionsWithOptionsTemplateValue = [T, OptionsTemplateValue];\r\n\r\nexport type OptionsWithOptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsWithOptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsWithOptionsTemplateValue\r\n : never;\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 const transformOptions = (optionsWithOptionsTemplate: OptionsWithOptionsTemplate): 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 classNameViewportArrange = `${classNameViewport}-arrange`;\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 optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n} from 'support/options';\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible' | 'visible-hidden';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface OSOptions {\r\n resize: ResizeBehavior;\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[string, string]> | null;\r\n attributes: string[] | null;\r\n debounce: number | [number, number] | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n textarea: {\r\n dynWidth: boolean;\r\n dynHeight: boolean;\r\n inheritedAttrs: string | Array | null;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n callbacks: {\r\n onUpdated: (() => any) | null;\r\n };\r\n /*\r\n callbacks?: {\r\n onInitialized?: BasicEventCallback | null;\r\n onInitializationWithdrawn?: BasicEventCallback | null;\r\n onDestroyed?: BasicEventCallback | null;\r\n onScrollStart?: ScrollEventCallback | null;\r\n onScroll?: ScrollEventCallback | null;\r\n onScrollStop?: ScrollEventCallback | null;\r\n onOverflowChanged?: OverflowChangedCallback | null;\r\n onOverflowAmountChanged?: OverflowAmountChangedCallback | null;\r\n onDirectionChanged?: DirectionChangedCallback | null;\r\n onContentSizeChanged?: SizeChangedCallback | null;\r\n onHostSizeChanged?: SizeChangedCallback | null;\r\n onUpdated?: UpdatedCallback | null;\r\n };\r\n */\r\n}\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\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 = 'hidden scroll visible visible-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']], arrayNullValues], // array of tuples || null\r\n attributes: [null, arrayNullValues],\r\n debounce: [\r\n [0, 33],\r\n [oTypes.number, oTypes.array, oTypes.null],\r\n ], // number || number array || null\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 callbacks: {\r\n onUpdated: [null, [oTypes.function, oTypes.null]],\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 {\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 equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n PartialOptions,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { OSOptions, defaultOptions } from 'options';\r\n\r\nexport interface InitializationStrategy {\r\n _padding: boolean;\r\n _content: boolean;\r\n}\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\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 _cssCustomProperties: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): OSOptions;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n _defaultInitializationStrategy: InitializationStrategy;\r\n _defaultDefaultOptions: OSOptions;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (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, cssProperty('scrollbar-width')) === 'none' ||\r\n 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 = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst getDefaultInitializationStrategy = (nativeScrollbarStyling: boolean): InitializationStrategy => ({\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n});\r\n\r\nconst createEnvironment = (): Environment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = getNativeScrollbarStyling(envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const defaultInitializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling);\r\n let initializationStrategy = defaultInitializationStrategy;\r\n let defaultDefaultOptions = defaultOptions;\r\n\r\n const env: Environment = {\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n _getInitializationStrategy: () => ({ ...initializationStrategy }),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n initializationStrategy = assignDeep({}, initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: () => ({ ...defaultDefaultOptions }),\r\n _setDefaultOptions(newDefaultOptions) {\r\n defaultDefaultOptions = assignDeep({}, defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: defaultInitializationStrategy,\r\n _defaultDefaultOptions: defaultDefaultOptions,\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n 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 insertBefore,\r\n attr,\r\n isBoolean,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, 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 {\r\n _target: OSTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false | null;\r\n _content: HTMLElement | false | null;\r\n _viewportArrange: HTMLStyleElement | false | 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 | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement => {\r\n const elm = document.createElement('style');\r\n\r\n attr(elm, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n\r\n return elm;\r\n};\r\nconst evaluateCreationFromStrategy = (initializationValue: HTMLElement | boolean | undefined, strategy: boolean): HTMLElement | false | undefined => {\r\n const isBooleanValue = isBoolean(initializationValue);\r\n if (isBooleanValue || isUndefined(initializationValue)) {\r\n return (isBooleanValue ? initializationValue : strategy) && undefined;\r\n }\r\n return initializationValue as HTMLElement;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n const { _padding: paddingNeeded, _content: contentNeeded } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: Partial = targetIsElm\r\n ? ({} as Partial)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _padding: evaluateCreationFromStrategy((target as OSTargetObject).padding, paddingNeeded),\r\n _content: evaluateCreationFromStrategy((target as OSTargetObject).content, contentNeeded),\r\n };\r\n\r\n if (targetIsElm) {\r\n const viewport = createDiv(classNameViewport);\r\n const padding = paddingNeeded && createDiv(classNamePadding);\r\n const content = contentNeeded && createDiv(classNameContent);\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 const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, getTargetContents(_target!));\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(contentSlot));\r\n removeElements(_padding || _viewport);\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 if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (!_cssCustomProperties && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y)) {\r\n const viewportArrangeElm = createUniqueViewportArrangeElement();\r\n\r\n insertBefore(_viewport, viewportArrangeElm);\r\n push(destroyFns, removeElements.bind(0, viewportArrangeElm));\r\n\r\n obj._viewportArrange = viewportArrangeElm;\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 {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport 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\n/*\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\n*/\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): 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 | ResizeObserverEntry[] | Event | boolean) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as CacheValues)._value);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n const hasDimensions = domRectHasDimensions(_value);\r\n const hadDimensions = domRectHasDimensions(_previous);\r\n skip = !_previous || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as CacheValues)._changed; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache ? (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({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? 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(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [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\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(directionIsRTL.bind(0, 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 console.log;\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (_value) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return {\r\n _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 createDiv,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport 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\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\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 const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy);\r\n onSizeChanged();\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} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n _ignoreNestedTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed on nested targets if it returns true\r\n}\r\n\r\ninterface DOMTargetObserverOptions extends DOMObserverOptionsBase {\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed if it returns true\r\n}\r\n\r\ntype ContentChangeArrayItem = [StringNullUndefined, StringNullUndefined] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange = Array | false | null | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true ? DOMContentObserverOptions : DOMTargetObserverOptions;\r\n\r\nexport interface DOMObserver {\r\n _destroy: () => void;\r\n _update: () => void;\r\n}\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (target: Element, eventContentChange: DOMObserverEventContentChange, callback: (...args: any) => any) => {\r\n let map: Map | undefined;\r\n const _destroy = () => {\r\n if (map) {\r\n map.forEach((eventName: string, elm: Node) => off(elm, eventName, callback));\r\n map.clear();\r\n }\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (map && eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const registredEventNames = map!.get(elm);\r\n const newEntry = isUndefined(registredEventNames);\r\n const changingExistingEntry = !newEntry && eventNames !== registredEventNames;\r\n const finalEventNames = changingExistingEntry ? `${registredEventNames} ${eventNames}` : eventNames;\r\n\r\n if (changingExistingEntry) {\r\n off(elm, registredEventNames!, callback);\r\n }\r\n\r\n map!.set(elm, finalEventNames);\r\n on(elm, finalEventNames, callback);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = map || new Map();\r\n _destroy();\r\n _updateElements();\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n };\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreNestedTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const { _destroy: destroyEventContentChange, _updateElements: updateEventContentChangeElements } = createEventContentChange(\r\n target,\r\n isContentObserver && _eventContentChange,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n )\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = (isContentObserver ? _ignoreNestedTargetChange : _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 styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget = 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 // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _destroy: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\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, diffClass, debounce, isArray, isNumber } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport { LifecycleHub, LifecycleCheckOption, LifecycleUpdateHints } from 'lifecycles/lifecycleHub';\r\n\r\n//const hostSelector = `.${classNameHost}`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n// TODO: tabindex, etc. attributes for viewport\r\n// TODO: test _ignoreContentChange & _ignoreNestedTargetChange for content dom observer\r\n// TODO: test _ignoreTargetChange for target dom observer\r\n\r\n//const viewportSelector = `.${classNameViewport}`;\r\n//const contentSelector = `.${classNameContent}`;\r\nconst ignorePrefix = 'os-';\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nconst ignoreTargetChange = (target: Node, attrName: string, oldValue: string | null, newValue: string | null) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n return !!diff.find((addedOrRemovedClass) => addedOrRemovedClass.indexOf(ignorePrefix) !== 0);\r\n }\r\n return false;\r\n};\r\n\r\nexport const lifecycleHubOservers = (instance: LifecycleHub, updateLifecycles: (updateHints?: Partial | null) => unknown) => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n const { _structureSetup } = instance;\r\n const { _targetObj, _targetCtx } = _structureSetup;\r\n const { _host, _viewport, _content } = _targetObj;\r\n const { _isTextarea } = _targetCtx;\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const contentMutationObserverAttr = _isTextarea ? baseStyleChangingAttrsTextarea : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const updateLifecyclesWithDebouncedAdaptiveUpdateHints = debounce(updateLifecycles as (updateHints: Partial) => any, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const { _sizeChanged: prevSizeChanged, _hostMutation: prevHostMutation, _contentMutation: prevContentMutation } = prev[0];\r\n const { _sizeChanged: currSizeChanged, _hostMutation: currvHostMutation, _contentMutation: currContentMutation } = curr[0];\r\n const merged: [Partial] = [\r\n {\r\n _sizeChanged: prevSizeChanged || currSizeChanged,\r\n _hostMutation: prevHostMutation || currvHostMutation,\r\n _contentMutation: prevContentMutation || currContentMutation,\r\n },\r\n ];\r\n\r\n return merged;\r\n },\r\n });\r\n\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onSizeChanged = ({ _sizeChanged, _directionIsRTLCache, _appear }: SizeObserverCallbackParams) => {\r\n const updateFn = !_sizeChanged || _appear ? updateLifecycles : updateLifecyclesWithDebouncedAdaptiveUpdateHints;\r\n updateFn({\r\n _sizeChanged,\r\n _directionIsRTL: _directionIsRTLCache,\r\n });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent ? updateLifecycles : updateLifecyclesWithDebouncedAdaptiveUpdateHints;\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n };\r\n const onHostMutation = updateLifecyclesWithDebouncedAdaptiveUpdateHints.bind(0, {\r\n _hostMutation: true,\r\n }) as () => any;\r\n\r\n const trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs,\r\n _ignoreTargetChange: ignoreTargetChange,\r\n });\r\n let contentMutationObserver: DOMObserver | undefined;\r\n\r\n const updateOptions = (checkOption: LifecycleCheckOption) => {\r\n const { _value: elementEvents, _changed: elementEventsChanged } = checkOption | null>('updating.elementEvents');\r\n const { _value: attributes, _changed: attributesChanged } = checkOption('updating.attributes');\r\n const { _value: debounce, _changed: debounceChanged } = checkOption | number | null>('updating.debounce');\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver._update();\r\n contentMutationObserver._destroy();\r\n }\r\n contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _ignoreNestedTargetChange: ignoreTargetChange,\r\n //_nestedTargetSelector: hostSelector,\r\n /*\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget\r\n ? false\r\n : attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector) || liesBetween(target as Element, hostSelector, contentSelector)\r\n : false;\r\n },\r\n */\r\n });\r\n }\r\n\r\n if (debounceChanged) {\r\n updateLifecyclesWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounce)) {\r\n const timeout = debounce[0];\r\n const maxWait = debounce[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounce)) {\r\n debounceTimeout = debounce;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n };\r\n\r\n return {\r\n _trinsicObserver: trinsicObserver,\r\n _sizeObserver: sizeObserver,\r\n _updateObserverOptions: updateOptions,\r\n };\r\n};\r\n","import { style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createTrinsicLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup } = lifecycleHub;\r\n const { _content } = _structureSetup._targetObj;\r\n\r\n return (updateHints) => {\r\n const { _heightIntrinsic } = updateHints;\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: heightIntrinsic ? '' : '100%',\r\n display: heightIntrinsic ? '' : 'inline',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, TRBL } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _setLifecycleCommunication } = lifecycleHub;\r\n const { _host, _padding, _viewport } = _structureSetup._targetObj;\r\n const { _update: updatePaddingCache, _current: currentPaddingCache } = createCache(topRightBottomLeft.bind(0, _host, 'padding'), {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n });\r\n\r\n return (updateHints, checkOption, force) => {\r\n let { _value: padding, _changed: paddingChanged } = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL, _contentMutation } = updateHints;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n ({ _value: padding, _changed: paddingChanged } = updatePaddingCache(force));\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding!.r + padding!.l;\r\n const paddingVertical = padding!.t + padding!.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: paddingRelative ? (directionIsRTL ? -padding!.r : 'auto') : 0,\r\n left: paddingRelative ? (directionIsRTL ? 'auto' : -padding!.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding!.t : 0,\r\n paddingRight: paddingRelative ? padding!.r : 0,\r\n paddingBottom: paddingRelative ? padding!.b : 0,\r\n paddingLeft: paddingRelative ? padding!.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n _setLifecycleCommunication({\r\n _paddingInfo: {\r\n _absolute: !paddingRelative,\r\n _padding: padding!,\r\n },\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : {\r\n ...paddingStyle,\r\n ...viewportStyle,\r\n },\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n CacheValues,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n offsetSize,\r\n getBoundingClientRect,\r\n noop,\r\n each,\r\n} from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { StyleObject } from 'typings';\r\nimport { classNameViewportArrange, classNameViewportScrollbarStyling } from 'classnames';\r\n\r\ninterface OverflowAmountCacheContext {\r\n _viewportScrollSize: WH;\r\n _viewportClientSize: WH;\r\n _viewportSizeFraction: WH;\r\n}\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n}\r\n\r\ninterface UndoViewportArrangeResult {\r\n _redoViewportArrange: () => void;\r\n _viewportOverflowState?: ViewportOverflowState;\r\n}\r\n\r\ninterface OverflowOption {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n}\r\n\r\nconst { max, abs, round } = Math;\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst sizeFraction = (elm: HTMLElement): WH => {\r\n const viewportOffsetSize = offsetSize(elm);\r\n const viewportRect = getBoundingClientRect(elm);\r\n return {\r\n w: viewportRect.width - viewportOffsetSize.w,\r\n h: viewportRect.height - viewportOffsetSize.h,\r\n };\r\n};\r\nconst setAxisOverflowStyle = (horizontal: boolean, overflowAmount: number, behavior: OverflowBehavior, styleObj: StyleObject) => {\r\n const overflowKey: keyof StyleObject = horizontal ? 'overflowX' : 'overflowY';\r\n const behaviorIsVisible = behavior.indexOf('visible') === 0;\r\n const behaviorIsVisibleHidden = behavior === 'visible-hidden';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n const hasOverflow = overflowAmount > 0;\r\n\r\n if (behaviorIsVisible) {\r\n styleObj[overflowKey] = 'visible';\r\n }\r\n if (behaviorIsScroll && hasOverflow) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: behaviorIsVisible,\r\n _behavior: behaviorIsVisibleHidden ? 'hidden' : 'scroll',\r\n };\r\n};\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _doViewportArrange, _getLifecycleCommunication, _setLifecycleCommunication } = lifecycleHub;\r\n const { _host, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n const { _update: updateViewportSizeFraction, _current: getCurrentViewportSizeFraction } = createCache>(\r\n sizeFraction.bind(0, _viewport),\r\n whCacheOptions\r\n );\r\n const { _update: updateViewportScrollSizeCache, _current: getCurrentViewportScrollSizeCache } = createCache>(\r\n scrollSize.bind(0, _viewport),\r\n whCacheOptions\r\n );\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n ({ _viewportScrollSize, _viewportClientSize, _viewportSizeFraction }) => ({\r\n w: round(max(0, _viewportScrollSize.w - _viewportClientSize.w) - max(0, _viewportSizeFraction.w)),\r\n h: round(max(0, _viewportScrollSize.h - _viewportClientSize.h) - max(0, _viewportSizeFraction.h)),\r\n }),\r\n whCacheOptions\r\n );\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (viewportOverflowState: ViewportOverflowState, heightIntrinsic: boolean) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _absolute: paddingAbsolute, _padding: padding } = _getLifecycleCommunication()._paddingInfo;\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostSizeFraction = sizeFraction(_host);\r\n const hostClientSize = clientSize(_host);\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const paddingVertical = paddingAbsolute || style(_viewport, 'boxSizing') === 'content-box' ? padding.b + padding.t : 0;\r\n const fractionalClientHeight = hostClientSize.h + (abs(hostSizeFraction.h) < 1 ? hostSizeFraction.h : 0);\r\n\r\n style(_viewport, {\r\n height: fractionalClientHeight + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (showNativeOverlaidScrollbars: boolean, viewportStyleObj?: StyleObject): ViewportOverflowState => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow ? style(_viewport, ['overflowX', 'overflowY']) : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj!.overflowX === 'scroll',\r\n y: styleObj!.overflowY === 'scroll',\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? (overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x) : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? (overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y) : 0,\r\n };\r\n\r\n return {\r\n _overflowScroll: scroll,\r\n _scrollbarsHideOffsetArrange: {\r\n x: overlaidX && !!arrangeHideOffset,\r\n y: overlaidY && !!arrangeHideOffset,\r\n },\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n overflowAmount: WH,\r\n overflow: OverflowOption,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setAxisOverflowStyle(true, overflowAmount!.w, overflow.x, viewportStyleObj);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setAxisOverflowStyle(false, overflowAmount!.h, overflow.y, viewportStyleObj);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyleObj.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyleObj.overflowY = yVisibleBehavior;\r\n }\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n viewportSizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\r\n if (_doViewportArrange) {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingRight' : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + (abs(viewportSizeFraction.w) < 1 ? viewportSizeFraction.w : 0);\r\n const fractionalContenHeight = viewportScrollSize.h + (abs(viewportSizeFraction.h) < 1 ? viewportSizeFraction.h : 0);\r\n const arrangeSize = {\r\n w: hideOffsetY && arrangeY ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px` : '',\r\n h: hideOffsetX && arrangeX ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px` : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(`#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, 0);\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return _doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingLeft' : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n ): UndoViewportArrangeResult => {\r\n if (_doViewportArrange) {\r\n const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n removeClass(_viewport, classNameViewportArrange);\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return {\r\n _redoViewportArrange: () => {\r\n hideNativeScrollbars(finalViewportOverflowState, directionIsRTL, _doViewportArrange, prevStyle);\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n _viewportOverflowState: finalViewportOverflowState,\r\n };\r\n }\r\n return {\r\n _redoViewportArrange: noop,\r\n };\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation, _paddingStyleChanged } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || heightIntrinsicChanged);\r\n let viewportSizeFractionCache: CacheValues> = getCurrentViewportSizeFraction(force);\r\n let viewportScrollSizeCache: CacheValues> = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(force);\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\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 (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) {\r\n const { _redoViewportArrange, _viewportOverflowState: undoViewportArrangeOverflowState } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL!,\r\n preMeasureViewportOverflowState\r\n );\r\n const { _value: viewportSizeFraction, _changed: viewportSizeFractionCahnged } = (viewportSizeFractionCache = updateViewportSizeFraction(force));\r\n const { _value: viewportScrollSize, _changed: viewportScrollSizeChanged } = (viewportScrollSizeCache = updateViewportScrollSizeCache(force));\r\n const viewportContentSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize!;\r\n let arrangedViewportClientSize = viewportContentSize;\r\n\r\n _redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || viewportSizeFractionCahnged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(undoViewportArrangeOverflowState, viewportScrollSize!, viewportSizeFraction!, directionIsRTL!)\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _viewportSizeFraction: viewportSizeFraction!,\r\n _viewportScrollSize: {\r\n w: max(viewportScrollSize!.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize!.h, arrangedViewportScrollSize.h),\r\n },\r\n _viewportClientSize: {\r\n w: arrangedViewportClientSize.w + max(0, viewportContentSize.w - viewportScrollSize!.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportContentSize.h - viewportScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: viewportSizeFraction, _changed: viewportSizeFractionChanged } = viewportSizeFractionCache;\r\n const { _value: viewportScrollSize, _changed: viewportScrollSizeChanged } = viewportScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n const { _value: overflow, _changed: overflowChanged } = checkOption('overflow');\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n viewportSizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, overflowAmount!, overflow, viewportStyle);\r\n const viewportArranged = arrangeViewport(viewportOverflowState, viewportScrollSize!, viewportSizeFraction!, directionIsRTL!);\r\n hideNativeScrollbars(viewportOverflowState, directionIsRTL!, viewportArranged, viewportStyle);\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n // TODO: hide host overflow if scroll x or y and no padding element there\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n // TODO: overflow: visible on padding / host if overflow visible on both axis\r\n\r\n style(_viewport, viewportStyle);\r\n\r\n _setLifecycleCommunication({\r\n _viewportOverflowScroll: viewportOverflowState._overflowScroll,\r\n _viewportOverflowAmount: overflowAmount,\r\n });\r\n }\r\n };\r\n};\r\n","import { XY, WH, TRBL, CacheValues, PartialOptions, each, hasOwnProperty, isNumber, scrollLeft, scrollTop, assignDeep } from 'support';\r\nimport { OSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { lifecycleHubOservers } from 'lifecycles/lifecycleHubObservers';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface LifecycleCommunication {\r\n _paddingInfo: {\r\n _absolute: boolean;\r\n _padding: TRBL;\r\n };\r\n _viewportPaddingStyle: StyleObject;\r\n _viewportOverflowScroll: XY;\r\n _viewportOverflowAmount: WH;\r\n}\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n _paddingStyleChanged: 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 Lifecycle = (\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport interface LifecycleHubState {\r\n _overflowAmount: WH;\r\n}\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: PartialOptions | null, force?: boolean): void;\r\n _state(): LifecycleHubState;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: OSOptions;\r\n _structureSetup: StructureSetup;\r\n // whether the \"viewport arrange\" strategy must be used (true if no native scrollbar hiding and scrollbars are overlaid)\r\n _doViewportArrange: boolean;\r\n _getLifecycleCommunication(): LifecycleCommunication;\r\n _setLifecycleCommunication(newLifecycleCommunication?: Partial): void;\r\n}\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) : undefined;\r\n\r\nconst booleanCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst lifecycleCommunicationFallback: LifecycleCommunication = {\r\n _paddingInfo: {\r\n _absolute: false,\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n },\r\n _viewportOverflowScroll: {\r\n x: false,\r\n y: false,\r\n },\r\n _viewportOverflowAmount: {\r\n w: 0,\r\n h: 0,\r\n },\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n};\r\n\r\nexport const createLifecycleHub = (options: OSOptions, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n let lifecycleCommunication = lifecycleCommunicationFallback;\r\n const { _viewport } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n _doViewportArrange: doViewportArrange,\r\n _getLifecycleCommunication: () => lifecycleCommunication,\r\n _setLifecycleCommunication(newLifecycleCommunication) {\r\n lifecycleCommunication = assignDeep({}, lifecycleCommunication, newLifecycleCommunication);\r\n },\r\n };\r\n const lifecycles: Lifecycle[] = [createTrinsicLifecycle(instance), createPaddingLifecycle(instance), createOverflowLifecycle(instance)];\r\n\r\n const updateLifecycles = (updateHints?: Partial | null, changedOptions?: Partial | null, force?: boolean) => {\r\n let {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged = force || false,\r\n _hostMutation = force || false,\r\n _contentMutation = force || false,\r\n _paddingStyleChanged = force || false,\r\n } = updateHints || {};\r\n\r\n const finalDirectionIsRTL =\r\n _directionIsRTL || (_sizeObserver ? _sizeObserver._getCurrentCacheValues(force)._directionIsRTL : booleanCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic || (_trinsicObserver ? _trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : booleanCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n // place before updating lifecycles because of possible flushing of debounce\r\n if (_updateObserverOptions) {\r\n _updateObserverOptions(checkOption);\r\n }\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const {\r\n _sizeChanged: adaptiveSizeChanged,\r\n _hostMutation: adaptiveHostMutation,\r\n _contentMutation: adaptiveContentMutation,\r\n _paddingStyleChanged: adaptivePaddingStyleChanged,\r\n } =\r\n lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n },\r\n checkOption,\r\n !!force\r\n ) || {};\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n _paddingStyleChanged = adaptivePaddingStyleChanged || _paddingStyleChanged;\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n if (options.callbacks.onUpdated) {\r\n options.callbacks.onUpdated();\r\n }\r\n };\r\n const { _sizeObserver, _trinsicObserver, _updateObserverOptions } = lifecycleHubOservers(instance, updateLifecycles);\r\n\r\n const update = (changedOptions?: Partial | null, force?: boolean) => {\r\n updateLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = update.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n console.log(getEnvironment());\r\n\r\n return {\r\n _update: update,\r\n _state: () => ({\r\n _overflowAmount: lifecycleCommunication._viewportOverflowAmount,\r\n }),\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\nimport { PartialOptions, validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { OSOptions, optionsTemplate } from 'options';\r\nimport { getEnvironment } from 'environment';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (target: OSTarget | OSTargetObject, options?: PartialOptions, extensions?: any): OverlayScrollbars;\r\n}\r\n\r\nexport interface OverlayScrollbars {\r\n options(): OSOptions;\r\n options(newOptions?: PartialOptions): OSOptions;\r\n\r\n update(force?: boolean): void;\r\n\r\n state(): any;\r\n}\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: OSTarget | OSTargetObject,\r\n options?: PartialOptions,\r\n extensions?: any\r\n): OverlayScrollbars => {\r\n const { _getDefaultOptions } = getEnvironment();\r\n const currentOptions: OSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options || ({} as PartialOptions), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\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 state: () => lifecycleHub._state(),\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"],"names":["createCache","update","options","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","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","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","elm","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","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","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","style","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","diffClass","classNameA","classNameB","classNameASplit","split","classNameBSplit","tempObj","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","stopAndPrevent","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalTRBL","equalBCRWH","round","Math","setT","setTimeout","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","_timeout","_maxDelay","_mergeParams","invokeFunctionToDebounce","args","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","setCSSVal","setProperty","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","_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","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","numberAllowedValues","oTypes","number","arrayNullValues","null","stringArrayNullAllowedValues","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","updating","elementEvents","attributes","overflow","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","callbacks","onUpdated","function","optionsTemplate","defaultOptions","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","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","getDefaultInitializationStrategy","nativeScrollbarStyling","_padding","_content","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarIsOverlaid","defaultInitializationStrategy","initializationStrategy","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","contentArrangeCounter","createUniqueViewportArrangeElement","evaluateCreationFromStrategy","initializationValue","strategy","isBooleanValue","createStructureSetup","paddingNeeded","contentNeeded","targetIsElm","osTargetObj","_host","host","_target","_viewport","viewport","padding","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","viewportArrangeElm","_viewportArrange","_targetObj","_targetCtx","_destroy","animationStartEventName","scrollEventName","scrollAmount","directionIsRTL","domRectHasDimensions","height","width","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","appear","doDirectionScroll","pop","contentRect","hasDimensions","hadDimensions","rtl","_sizeChanged","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","_getCurrentCacheValues","_directionIsRTL","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","ioEntryOrSize","isIntersecting","intersectionRatio","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","intersectionObserverInstance","entries","last","heightIntrinsic","root","onSizeChanged","newSize","heightIntrinsicCache","_heightIntrinsic","createEventContentChange","eventContentChange","map","clear","_updateElements","getElements","eventElmList","elements","registredEventNames","newEntry","changingExistingEntry","finalEventNames","set","Map","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreNestedTargetChange","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","ignorePrefix","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","newValue","diff","addedOrRemovedClass","lifecycleHubOservers","instance","updateLifecycles","debounceTimeout","debounceMaxDelay","_structureSetup","contentMutationObserverAttr","updateLifecyclesWithDebouncedAdaptiveUpdateHints","prev","prevSizeChanged","prevHostMutation","_hostMutation","prevContentMutation","_contentMutation","currSizeChanged","currvHostMutation","currContentMutation","merged","onTrinsicChanged","updateFn","onContentMutation","contentChangedTroughEvent","onHostMutation","hostMutationObserver","contentMutationObserver","updateOptions","checkOption","elementEventsChanged","attributesChanged","debounceChanged","updateContentMutationObserver","timeout","maxWait","_trinsicObserver","_sizeObserver","_updateObserverOptions","createTrinsicLifecycle","lifecycleHub","updateHints","heightIntrinsicChanged","display","createPaddingLifecycle","_setLifecycleCommunication","updatePaddingCache","currentPaddingCache","paddingChanged","directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingInfo","_absolute","_viewportPaddingStyle","_paddingStyleChanged","max","overlaidScrollbarsHideOffset","whCacheOptions","sizeFraction","viewportOffsetSize","viewportRect","setAxisOverflowStyle","horizontal","overflowAmount","behavior","styleObj","overflowKey","behaviorIsVisible","behaviorIsVisibleHidden","behaviorIsScroll","hasOverflow","_visible","_behavior","createOverflowLifecycle","_doViewportArrange","_getLifecycleCommunication","updateViewportSizeFraction","getCurrentViewportSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","_viewportScrollSize","_viewportClientSize","_viewportSizeFraction","updateOverflowAmountCache","getCurrentOverflowAmountCache","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostSizeFraction","hostClientSize","fractionalClientHeight","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","scroll","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","viewportScrollSize","viewportSizeFraction","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","viewportSizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","viewportSizeFractionCahnged","viewportScrollSizeChanged","viewportContentSize","arrangedViewportScrollSize","arrangedViewportClientSize","viewportSizeFractionChanged","overflowAmountChanged","overflowChanged","viewportArranged","_viewportOverflowScroll","_viewportOverflowAmount","getPropByPath","path","o","booleanCacheValuesFallback","lifecycleCommunicationFallback","createLifecycleHub","structureSetup","lifecycleCommunication","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","newLifecycleCommunication","lifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","envUpdateListener","log","_state","_overflowAmount","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions","state"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.min.js index 68d15a1..4f4c5ef 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=function(n,t){var r,e=t||{},i=e.o,o=e.u,u=e.v,a=o;return{s:function(t,e){var o=a,c=n?n(e,a,r):e,f=t||(i?!i(o,c):o!==c);return(f||u)&&(a=c,r=o),{_:a,g:r,p:f}},m:function(n){return{_:a,g:r,p:!!n}}}},t=Node.ELEMENT_NODE,r=Object.prototype,e=r.toString,i=r.hasOwnProperty;function o(n){return void 0===n}function u(n){return null===n}var a=function(n){return o(n)||u(n)?""+n:e.call(n).replace(/^\[object (.+)\]$/,"$1").toLowerCase()};function c(n){return"number"==typeof n}function f(n){return"string"==typeof n}function l(n){return"boolean"==typeof n}function v(n){return"function"==typeof n}function d(n){return Array.isArray(n)}function s(n){return"object"==typeof n&&!d(n)&&!u(n)}function _(n){var t=!!n&&n.length,r=c(t)&&t>-1&&t%1==0;return!!(d(n)||!v(n)&&r)&&(!(t>0&&s(n))||t-1 in n)}function g(n){if(!n||!s(n)||"object"!==a(n))return!1;var t,r="constructor",e=n[r],u=e&&e.prototype,c=i.call(n,r),f=u&&i.call(u,"isPrototypeOf");if(e&&!c&&!f)return!1;for(t in n);return o(t)||i.call(n,t)}function h(n){var r=window.Element;return!!n&&(r?n instanceof r:n.nodeType===t)}function p(n,t){if(_(n))for(var r=0;r0;e=u[i++];)o=!!r(n.classList,e)&&o}return o},un=function(n,t){on(n,t,(function(n,t){return n.add(t)}))},an=function(n,t){on(n,t,(function(n,t){return n.remove(t)}))},cn={w:0,h:0},fn=function(){return{w:window.innerWidth,h:window.innerHeight}},ln=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:cn},vn=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:cn},dn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:cn},sn=function(n){return n.getBoundingClientRect()},_n=function(n){return n.split(" ")},gn=function(n,t,r,e){p(_n(t),(function(t){n.removeEventListener(t,r,e)}))},hn=function(n,t,r,e){var i=function(){if(o(T)){T=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){T=!0}}))}catch(n){}}return T}(),u=i&&e&&e.S||!1,a=e&&e.O||!1,c=e&&e.C||!1,f=[],l=i?{passive:u,capture:a}:a;return p(_n(t),(function(t){var e=c?function(i){n.removeEventListener(t,e,a),r&&r(i)}:r;w(f,gn.bind(null,n,t,e,a)),n.addEventListener(t,e,l)})),y.bind(0,f)},pn=function(n){return function(n){return n.stopPropagation()}(n)||function(n){return n.preventDefault()}(n)},wn=function(n,t,r,e){if(n&&t){var i=!0;return p(r,(function(r){(e?e(n[r]):n[r])!==(e?e(t[r]):t[r])&&(i=!1)})),i}return!1},bn=function(n,t){return wn(n,t,["w","h"])},mn=function(n,t){return wn(n,t,["t","r","b","l"])},yn=function(n,t,r){return wn(n,t,["width","height"],r&&function(n){return Math.round(n)})},Sn=function(){},xn={opacity:1,zindex:1},On=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return Number.isNaN(r)?0:r},Cn=function(n,t,r){return null!=t?t[r]||t.getPropertyValue(r):n.style[r]},zn=function(n,t,r){try{if(n){var e=n.style;o(e[t])?e.setProperty(t,r):e[t]=function(n,t){return!xn[n.toLowerCase()]&&c(t)?t+"px":t}(t,r)}}catch(i){}};function An(n,t){var r=f(t);if(d(t)||r){var e=r?"":{};if(n){var i=window.getComputedStyle(n,null);e=r?Cn(n,i,t):t.reduce((function(t,r){return t[r]=Cn(n,i,r),t}),e)}return e}p(x(t),(function(r){return zn(n,r,t[r])}))}var Ln=function(n,t,r){var e=t?t+"-":"",i=r?"-"+r:"",o=e+"top"+i,u=e+"right"+i,a=e+"bottom"+i,c=e+"left"+i,f=An(n,[o,u,a,c]);return{t:On(f[o]),r:On(f[u]),b:On(f[a]),l:On(f[c])}},Mn={x:0,y:0},Tn=function(n){var t=n?sn(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:Mn};var In,jn=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: [ "+x.join(", ")+" ].":""));delete l[v]}})),{L:l,A:c}}(n,t,r||{},e||!1)},Dn="os-environment",Fn=Dn+"-flexbox-glue",qn=Fn+"-max",Pn="os-host",kn="os-padding",Hn="os-viewport",Yn=Hn+"-arrange",Nn="os-content",Xn=Hn+"-scrollbar-styled",Un="os-size-observer",Wn=Un+"-appear",$n=Un+"-listener",Gn=$n+"-scroll",Jn=$n+"-item",Kn=Jn+"-final",Qn="os-trinsic-observer",Zn=En.number,nt=[En.string,En.array,En.null],tt=[!0,En.boolean],rt=[!1,En.boolean],et="hidden scroll visible visible-hidden",it=function n(t){var r={M:{},T:{}};return p(x(t),(function(e){var i=t[e];if(d(i))r.M[e]=i[1],r.T[e]=i[0];else{var o=n(i);r.M[e]=o.M,r.T[e]=o.T}})),r}({resize:["none","none both horizontal vertical"],paddingAbsolute:rt,updating:{elementEvents:[[["img","load"]],[En.array,En.null]],contentMutationDebounce:[80,Zn],hostMutationDebounce:[0,Zn],resizeDebounce:[0,Zn]},overflow:{x:["scroll",et],y:["scroll",et]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,Zn],dragScroll:tt,clickScroll:rt,touch:tt},textarea:{dynWidth:rt,dynHeight:rt,inheritedAttrs:[["style","class"],nt]},nativeScrollbarsOverlaid:{show:rt,initialize:rt},callbacks:{onUpdated:[null,[En.function,En.null]]}}),ot=it.M,ut=it.T,at=Math.abs,ct=Math.round,ft=function(n,t){q(n,t);var r=vn(t),e=ln(t);return{x:e.h-r.h,y:e.w-r.w}},lt=function(n,t){var r="hidden";An(n,{overflowX:r,overflowY:r,direction:"rtl"}),L(n,0);var e=Tn(n),i=Tn(t);L(n,-999);var o=Tn(t);return{i:e.x===i.x,n:i.x!==o.x}},vt=function(n,t){un(n,Fn);var r=sn(n),e=sn(t),i=yn(e,r,!0);un(n,qn);var o=sn(n),u=sn(t),a=yn(u,o,!0);return i&&a},dt=function(){var n=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/t},st=function(){var n,t,r=document.body,e=N('
')[0],i=e.firstChild,o=new Set,u=ft(r,e),a=function(n){var t=!1;un(n,Xn);try{t="none"===An(n,J("scrollbar-width"))||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return t}(e),c={x:0===u.x,y:0===u.y},f=function(n){return{I:!n,j:!1}}(a),l=f,v=ut,d={R:u,V:c,B:a,D:"-1"===An(e,"zIndex"),F:lt(e,i),q:vt(e,i),P:function(n){o.add(n)},k:function(n){o.delete(n)},H:function(){return jn({},l)},Y:function(n){l=O({},l,n)},N:function(){return jn({},v)},X:function(n){v=O({},v,n)},U:f,W:v};if(t="style",(n=e)&&n.removeAttribute(t),H(e),!(a||c.x&&c.y)){var s=fn(),_=dt(),g=u;window.addEventListener("resize",(function(){if(o.size){var n=fn(),t={w:n.w-s.w,h:n.h-s.h};if(0===t.w&&0===t.h)return;var i={w:at(t.w),h:at(t.h)},u={w:at(ct(n.w/(s.w/100))),h:at(ct(n.h/(s.h/100)))},a=dt(),c=i.w>2&&i.h>2,f=(v=u.h,d=at(u.w),h=at(v),!(d!==h&&d+1!==h&&d-1!==h));if(c&&f&&(a!==_&&_>0)){var l=In.R=ft(r,e);H(e),g.x===l.x&&g.y===l.y||y(o),g=l}s=n,_=a}var v,d,h}))}return d},_t=function(){return In||(In=st()),In},gt=function(n){q(E(n),V(n)),H(n)},ht=0,pt=function(n,t){var r=l(n);return r||o(n)?(r?n:t)&&void 0:n},wt=function(n){var r=_t(),e=r.H,i=r.B,u=r.V,a=r.D,c=e(),f=c.I,l=c.j,v=function(n){var r=window.HTMLElement;return!!n&&(r?n instanceof r:n.nodeType===t)}(n),d=v?{}:{$:n.host,G:n.target,J:n.viewport,I:pt(n.padding,f),j:pt(n.content,l)};if(v){var s=Y(Hn),_=f&&Y(kn),g=l&&Y(Nn);d.G=n,d.I=_,d.J=s,d.j=g}var h=d.G,p=d.I,b=d.J,m=d.j,S=[],x=R(h,"textarea"),O=!x&&R(h,"body"),C=x?d.$||Y():h,z=function(n){return x?h:V(n)};if(x&&C!==d.$&&(k(h,C),w(S,(function(){k(C,h),H(C)}))),v){var L=m||b;q(L,z(h)),q(C,p),q(p||C,b),q(b,m),w(S,(function(){q(C,V(L)),H(p||b),an(C,Pn)}))}else{var M=m||b||p||C,T=o(p),I=o(b),j=o(m),B=z(M);p=d.I=T?Y():p,b=d.J=I?Y():b,m=d.j=j?Y():m,q(C,p),q(p||C,b),q(b,m),q(m||b,B),w(S,(function(){j&>(m),I&>(b),T&>(p),an(C,Pn),an(p,kn),an(b,Hn),an(m,Nn)}))}un(C,Pn),un(p,kn),un(b,Hn),un(m,Nn);var D,P,N,X=h.ownerDocument,U=X.body,W={K:X.defaultView,Z:X,nn:E(U),tn:U,rn:x,en:O},$=jn({},d,{$:C});if(i)w(S,an.bind(0,b,Xn));else if(!a&&(u.x||u.y)){var G=(A(N=document.createElement("style"),"id",Yn+"-"+ht),ht++,N);P=G,F(E(D=b),D,P),w(S,H.bind(0,G)),$.in=G}return{on:$,un:W,an:function(){y(S)}}},bt=function(n){var t=n.cn.on.j;return function(n){var r=n.fn,e=r._,i=r.p;return i&&An(t,{height:e?"":"100%",display:e?"":"inline"}),{ln:i,vn:i}}},mt=function(t){var r=t.cn,e=t.dn,i=r.on,o=i.$,u=i.I,a=i.J,c=n(Ln.bind(0,o,"padding"),{o:mn,u:Ln()}),f=c.s,l=c.m;return function(n,t,r){var i=l(r),o=i._,c=i.p,v=_t(),d=v.B,s=v.q,_=n.ln,g=n.sn,h=n.vn,p=g._,w=g.p,b=t("paddingAbsolute"),m=b._,y=b.p;if(_||c||!s&&h){var S=f(r);o=S._,c=S.p}var x=y||w||c;if(x){var O=!m||!u&&!d,C=o.r+o.l,z=o.t+o.b,A={marginRight:O&&!p?-C:0,marginBottom:O?-z:0,marginLeft:O&&p?-C:0,top:O?-o.t:0,right:O?p?-o.r:"auto":0,left:O?p?"auto":-o.l:0,width:O?"calc(100% + "+C+"px)":""},L={paddingTop:O?o.t:0,paddingRight:O?o.r:0,paddingBottom:O?o.b:0,paddingLeft:O?o.l:0};An(u||a,A),An(a,L),e({_n:{gn:!O,I:o},hn:u?L:jn({},A,L)})}return{pn:x}}},yt=Math.max,St=Math.abs,xt=Math.round,Ot=42,Ct={o:bn,u:{w:0,h:0}},zt=function(n){var t=ln(n),r=sn(n);return{w:r.width-t.w,h:r.height-t.h}},At=function(n,t,r,e){var i=n?"overflowX":"overflowY",o=0===r.indexOf("visible"),u="visible-hidden"===r,a="scroll"===r,c=t>0;return o&&(e[i]="visible"),a&&c&&(e[i]=r),{wn:o,bn:u?"hidden":"scroll"}},Lt=function(t){var r=t.cn,e=t.mn,i=t.yn,o=t.dn,u=r.on,a=u.$,c=u.J,f=u.in,l=n(zt.bind(0,c),Ct),v=l.s,d=l.m,s=n(dn.bind(0,c),Ct),_=s.s,g=s.m,h=n((function(n){var t=n.Sn,r=n.xn,e=n.On;return{w:xt(yt(0,t.w-r.w)-yt(0,e.w)),h:xt(yt(0,t.h-r.h)-yt(0,e.h))}}),Ct),w=h.s,b=h.m,m=function(n,t){if(An(c,{height:""}),t){var r=i()._n,e=r.gn,o=r.I,u=n.Cn,f=n.zn,l=zt(a),v=vn(a),d=e||"content-box"===An(c,"boxSizing")?o.b+o.t:0,s=v.h+(St(l.h)<1?l.h:0);An(c,{height:s+(u.x?f.x:0)-d})}},y=function(n,t){var r=_t(),e=r.R,i=r.V,o=r.B,u=i.x,a=i.y,f=o||n?0:Ot,l=!t?An(c,["overflowX","overflowY"]):t,v={x:"scroll"===l.overflowX,y:"scroll"===l.overflowY};return{Cn:v,An:{x:u&&!!f,y:a&&!!f},zn:{x:v.x&&!o?u?f:e.x:0,y:v.y&&!o?a?f:e.y:0}}},S=function(n,t,r,o){if(e){var u=n.zn,a=n.An,l=a.x,v=a.y,d=u.x,s=u.y,_=i().hn,g=_[o?"paddingRight":"paddingLeft"],h=_.paddingTop,p=t.w+(St(r.w)<1?r.w:0),w=t.h+(St(r.h)<1?r.h:0),b={w:s&&v?s+p-g+"px":"",h:d&&l?d+w-h+"px":""};if(f){var m=f.sheet;if(m){var y=m.cssRules;if(y){y.length||m.insertRule("#"+A(f,"id")+" + ."+Yn+"::before {}",0);var S=y[0].style;S.width=b.w,S.height=b.h}}}else An(c,{"--os-vaw":b.w,"--os-vah":b.h})}return e},O=function(n,t,r,e){var o=n.zn,u=n.An,a=u.x,c=u.y,f=o.x,l=o.y,v=i().hn,d=t?"marginLeft":"marginRight",s=t?"paddingLeft":"paddingRight",_=v[d],g=v.marginBottom,h=v[s],p=v.paddingBottom;e.width="calc(100% + "+(l+-1*_)+"px)",e[d]=-l+_,e.marginBottom=-f+g,r&&(e[s]=h+(c?l:0),e.paddingBottom=p+(a?f:0))};return function(n,t,r){var u,a=n.sn,f=n.fn,l=n.ln,s=n.Ln,h=n.vn,C=n.pn,z=_t(),A=z.q,L=z.B,M=z.V,T=f._,I=f.p,j=a._,R=a.p,V=t("nativeScrollbarsOverlaid.show"),E=V._,B=V.p,D=E&&M.x&&M.y,F=!A&&(l||h||s||B||I),q=d(r),P=g(r),k=b(r);if(B&&L&&(D?an(c,Xn):un(c,Xn)),F&&(u=y(D),m(u,!!T)),l||C||h||B||R){var H=function(n,t,r){if(e){var o=r||y(n),u=i().hn,a=_t().q,f=o.An,l=f.x,v=f.y,d={},s=function(n){return p(n.split(" "),(function(n){d[n]=u[n]}))};a||(d.height=""),l&&s("marginBottom paddingTop paddingBottom"),v&&s("marginLeft marginRight paddingLeft paddingRight");var _=An(c,x(d));return an(c,Yn),An(c,d),{Mn:function(){O(o,t,e,_),An(c,_),un(c,Yn)},Tn:o}}return{Mn:Sn}}(D,j,u),Y=H.Mn,N=H.Tn,X=q=v(r),U=X._,W=X.p,$=P=_(r),G=$._,J=$.p,K=vn(c),Q=G,Z=K;Y(),(J||W||B)&&N&&!D&&S(N,G,U,j)&&(Z=vn(c),Q=dn(c)),k=w(r,{On:U,Sn:{w:yt(G.w,Q.w),h:yt(G.h,Q.h)},xn:{w:Z.w+yt(0,K.w-G.w),h:Z.h+yt(0,K.h-G.h)}})}var nn=q,tn=nn._,rn=nn.p,en=P,on=en._,cn=en.p,fn=k,ln=fn._,sn=fn.p,_n=t("overflow"),gn=_n._,hn=_n.p;if(C||rn||cn||sn||hn||B||R||F){var pn={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},wn=function(n,t,r,e){var i=At(!0,t.w,r.x,e),o=i.wn,u=i.bn,a=At(!1,t.h,r.y,e),c=a.wn,f=a.bn;return o&&!c&&(e.overflowX=u),c&&!o&&(e.overflowY=f),y(n,e)}(D,ln,gn,pn),bn=S(wn,on,tn,j);O(wn,j,bn,pn),F&&m(wn,!!T),An(c,pn),o({In:wn.Cn,jn:ln})}}},Mt="animationstart",Tt="scroll",It=3333333,jt=function(n){return"rtl"===An(n,"direction")},Rt=function(n){return n&&(n.height||n.width)},Vt=function(t,r,e){var i,o=e||{},u=o.Rn,a=void 0!==u&&u,c=o.Vn,f=void 0!==c&&c,v=_t().F,s=N('
')[0],_=s.firstChild,g=n(0,{v:!0,o:function(n,t){return!(!n||!Rt(n)&&Rt(t))}}).s,h=function(n){var t=n&&l(n._),e=!1;if(d(n)&&n.length>0){var i=g(0,n.pop().contentRect),o=i.g,u=i._;i.p;e=!o||!Rt(u)}else t&&n.p;if(a){var c=t?n._:jt(s);L(s,c?v.n?-It:v.i?0:It:It),M(s,It)}e||r(t?n:void 0)},p=[],b=!!f&&h;if(nn){var m=new nn(h);m.observe(_),w(p,(function(){return m.disconnect()}))}else{var S=N('
');q(_,S),un(_,Gn);var x,O=S[0],C=O.lastChild,z=O.firstChild,A=null==z?void 0:z.firstChild,T=ln(O),I=T,j=!1,R=function(){L(z,It),M(z,It),L(C,It),M(C,It)},V=function(){x=0,j&&(T=I,h())},E=function(n){I=ln(O),j=!n||!bn(I,T),n?(pn(n),j&&!x&&(tn(x),x=rn(V))):V(),R()};w(p,[hn(z,Tt,E),hn(C,Tt,E)]),An(A,{width:It,height:It}),R(),b=f?E.bind(0,!1):R}if(a){var B=(i=n(jt.bind(0,s))).s;w(p,hn(s,Tt,(function(n){var t=B(),r=t._;t.p&&(an(_,"ltr rtl"),un(_,r?"rtl":"ltr"),h(t)),pn(n)})))}return b&&(un(s,Wn),w(p,hn(s,Mt,b,{C:!!nn}))),P(t,s),{an:function(){y(p),H(s)},En:function(n){return{sn:i?i.m(n):{_:!1,g:!1,p:!1}}}}},Et=function(n,t,r,e){var i,u,a,l,d,s,_,g,h,b,y=!1,S=e||{},x=S.Bn,O=S.Dn,C=S.Fn,z=S.qn,L=S.Pn,M=S.kn,T=S.Hn,I=function(n,t,r){var e,i,u=function(){e&&(e.forEach((function(n,t){return gn(t,n,r)})),e.clear())},a=function(t){e&&i&&p(i.reduce((function(r,e){if(e){var i=e[0],o=e[1],u=o&&i&&(t?t(i):j(i,n)),a=v(o)?o(u):o;u&&u.length&&a&&f(a)&&w(r,[u,a.trim()],!0)}return r}),[]),(function(n){return p(n[0],(function(t){var i=n[1],u=e.get(t),a=!o(u)&&i!==u,c=a?u+" "+i:i;a&&gn(t,u,r),e.set(t,c),hn(t,c,r)}))}))},c=function(n){e=e||new Map,i=n,u(),a()};return t&&c(t),{an:u,Yn:a,Nn:c}}(n,t&&C,(i=function(){y&&r(!0)},s=c(u=84)&&u>0,_=c(a)&&a>0,g=s?window.clearTimeout:tn,h=s?window.setTimeout:rn,b=function(n){d=_?performance.now():0,l&&g(l),i.apply(this,n)},function(){var n=b.bind(this,arguments),t=!!_&&performance.now()-d>=a;l&&g(l),l=t?n():h(n,u)})),V=I.an,E=I.Yn,B=I.Nn,D=O||[],F=(x||[]).concat(D),q=function(i){var o=(t?M:L)||Sn,u=T||Sn,a=[],c=[],l=!1,v=!1,d=!1;p(i,(function(r){var i,s,_=r.attributeName,g=r.target,h=r.type,p=r.oldValue,b=r.addedNodes,m="attributes"===h,y="childList"===h,S=n===g,x=m&&f(_)?A(g,_):0,O=0!==x&&p!==x,C=(i=_,D.indexOf(i,s)>-1&&O);if(t&&!S){var L=!m,M=m&&C,T=M&&z&&R(g,z),I=(T?!o(g,_,p,x):L||M)&&!u(r,!!T,n,e);w(c,b),v=v||I,d=d||y}!t&&S&&O&&!o(g,_,p,x)&&(w(a,_),l=l||C)})),d&&!m(c)&&E((function(n){return c.reduce((function(t,r){return w(t,j(n,r)),R(r,n)?w(t,r):t}),[])})),t?v&&r(v):m(a)&&!l||r(a,l)},P=new Q(q);return P.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:F,subtree:t,childList:t,characterData:t}),y=!0,{an:function(){y&&(V(),P.disconnect(),y=!1)},Nn:function(n){B(y&&t&&n)},s:function(){y&&q(P.takeRecords())}}},Bt=function(n,t){return n?t.split(".").reduce((function(n,t){return n&&S(n,t)?n[t]:void 0}),n):void 0},Dt="os-",Ft="."+Pn,qt="."+Hn,Pt="."+Nn,kt=["id","class","style","open"],Ht=function(n,t,r,e){var i,o,u,a,c;return!("class"!==t||!r||!e)&&!!(o=e,u=(i=r)&&i.split(" "),a=o&&o.split(" "),c={},p(u,(function(n){c[n]=1})),p(a,(function(n){c[n]?delete c[n]:c[n]=1})),x(c)).find((function(n){return 0!==n.indexOf(Dt)}))},Yt={_:!1,g:!1,p:!1},Nt={_:!1,g:!1,p:!1},Xt={_n:{gn:!1,I:{t:0,r:0,b:0,l:0}},In:{x:!1,y:!1},jn:{w:0,h:0},hn:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0}},Ut=function(t,r){var e=Xt,i=r.on,o=i.$,u=i.J,a=i.j,f=_t(),l=f.B,v=f.V,d=f.q,s=f.P,_=f.k,g=!l&&(v.x||v.y),h={T:t,cn:r,mn:g,yn:function(){return e},dn:function(n){e=O({},e,n)}},b=[bt(h),mt(h),Lt(h)],m=function(n,r,e){var i=n||{},o=i.sn,a=i.fn,f=i.ln,l=void 0===f?e||!1:f,v=i.Ln,s=void 0===v?e||!1:v,_=i.vn,h=void 0===_?e||!1:_,w=i.pn,m=void 0===w?e||!1:w,y=o||(x?x.En(e).sn:Yt),O=a||(S?S.En(e).fn:Nt),C=function(n){return{_:Bt(t,n),p:e||void 0!==Bt(r,n)}},z=g||!d,A=z&&L(u),T=z&&M(u);p(b,(function(n){var t=n({sn:y,fn:O,ln:l,Ln:s,vn:h,pn:m},C,!!e)||{},r=t.ln,i=t.Ln,o=t.vn,u=t.pn;l=r||l,s=i||s,h=o||h,m=u||m})),c(A)&&L(u,A),c(T)&&M(u,T),t.callbacks.onUpdated&&t.callbacks.onUpdated()},S=(a||!d)&&function(t,r){var e=Y(Qn),i=[],o=n((function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}),{u:!1}),u=o.s,a=o.m;if(Z){var c=new Z((function(n){if(n&&n.length>0){var t=n.pop();if(t){var e=u(0,t);e.p&&r(e)}}}),{root:t});c.observe(e),w(i,(function(){return c.disconnect()}))}else{var f=function(){var n=ln(e),t=u(0,n);t.p&&r(t)};w(i,Vt(e,f).an),f()}return P(t,e),{an:function(){y(i),H(e)},En:function(n){return{fn:a(n)}}}}(o,(function(n){m({fn:n})})),x=Vt(o,(function(n){m({sn:n,ln:!n})}),{Vn:!0,Rn:!l}),C=(Et(o,!1,(function(){requestAnimationFrame((function(){m({Ln:!0})}))}),{Dn:kt,Bn:kt,Pn:Ht}),Et(a||u,!0,(function(){requestAnimationFrame((function(){m({vn:!0})}))}),{Dn:kt,Bn:kt,Fn:t.updating.elementEvents,qn:Ft,Hn:function(n,t){var r=n.target,e=n.attributeName;return!t&&(!!e&&(D(r,Ft,qt)||D(r,Ft,Pt)))},kn:Ht}),function(n,t){m(null,n,t)}),z=C.bind(null,null,!0);return s(z),console.log(_t()),{s:C,Xn:function(){return{Un:e.jn}},an:function(){_(z)}}};return function(n,t,r){var e=O({},(0,_t().N)(),Bn(t||{},ot,null,!0).A),i=wt(n),o=Ut(e,i),u={options:function(n){if(n){var t=Bn(n,ot,e,!0).A;C(t)||(O(e,t),o.s(t))}return e},state:function(){return o.Xn()},update:function(n){o.s(null,n)}};return u.update(!0),u}})); \ 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=function(n,t){var r,i=t||{},e=i.o,o=i.u,u=i.v,a=o;return{s:function(t,i){var o=a,c=n?n(i,a,r):i,f=t||(e?!e(o,c):o!==c);return(f||u)&&(a=c,r=o),{_:a,g:r,p:f}},m:function(n){return{_:a,g:r,p:!!n}}}},t=Node.ELEMENT_NODE,r=Object.prototype,i=r.toString,e=r.hasOwnProperty;function o(n){return void 0===n}function u(n){return null===n}var a=function(n){return o(n)||u(n)?""+n:i.call(n).replace(/^\[object (.+)\]$/,"$1").toLowerCase()};function c(n){return"number"==typeof n}function f(n){return"string"==typeof n}function l(n){return"boolean"==typeof n}function v(n){return"function"==typeof n}function d(n){return Array.isArray(n)}function s(n){return"object"==typeof n&&!d(n)&&!u(n)}function _(n){var t=!!n&&n.length,r=c(t)&&t>-1&&t%1==0;return!!(d(n)||!v(n)&&r)&&(!(t>0&&s(n))||t-1 in n)}function g(n){if(!n||!s(n)||"object"!==a(n))return!1;var t,r="constructor",i=n[r],u=i&&i.prototype,c=e.call(n,r),f=u&&e.call(u,"isPrototypeOf");if(i&&!c&&!f)return!1;for(t in n);return o(t)||e.call(n,t)}function h(n){var r=window.Element;return!!n&&(r?n instanceof r:n.nodeType===t)}function p(n,t){if(_(n))for(var r=0;r0;i=u[e++];)o=!!r(n.classList,i)&&o}return o},en=function(n,t){rn(n,t,(function(n,t){return n.add(t)}))},on=function(n,t){rn(n,t,(function(n,t){return n.remove(t)}))},un={w:0,h:0},an=function(){return{w:window.innerWidth,h:window.innerHeight}},cn=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:un},fn=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:un},ln=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:un},vn=function(n){return n.getBoundingClientRect()},dn=function(n){return n.split(" ")},sn=function(n,t,r,i){p(dn(t),(function(t){n.removeEventListener(t,r,i)}))},_n=function(n,t,r,i){var e=function(){if(o(I)){I=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){I=!0}}))}catch(n){}}return I}(),u=e&&i&&i.O||!1,a=i&&i.S||!1,c=i&&i.C||!1,f=[],l=e?{passive:u,capture:a}:a;return p(dn(t),(function(t){var i=c?function(e){n.removeEventListener(t,i,a),r&&r(e)}:r;w(f,sn.bind(null,n,t,i,a)),n.addEventListener(t,i,l)})),y.bind(0,f)},gn=function(n){return function(n){return n.stopPropagation()}(n)||function(n){return n.preventDefault()}(n)},hn=function(n,t,r,i){if(n&&t){var e=!0;return p(r,(function(r){(i?i(n[r]):n[r])!==(i?i(t[r]):t[r])&&(e=!1)})),e}return!1},pn=function(n,t){return hn(n,t,["w","h"])},wn=function(n,t){return hn(n,t,["t","r","b","l"])},bn=function(n,t,r){return hn(n,t,["width","height"],r&&function(n){return Math.round(n)})},mn=window.setTimeout,yn=function(n){n&&window.clearTimeout(n),n&&Z(n)},xn=function(){},On=function(n,t){var r,i,e,o,u=t.L,a=t.A,f=t.M,l=function(t){yn(r),yn(i),i=r=e=void 0,n.apply(this,t)},d=function(n){return f&&e?f(e,n):n},s=function(){r&&l(d(o)||o)},_=function(){var n=arguments,t=v(u)?u():u,f=c(t)&&t>=0;if(f){var _=v(a)?a():a,g=c(_)&&_>=0,h=t>0?mn:nn,p=d(n),w=p||n,b=l.bind(0,w);p||l(e||n),yn(r),r=h(b,t),g&&!i&&(i=mn(s,_)),e=o=w}else l(n)};return _.I=s,_},Sn={opacity:1,zindex:1},zn=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return Number.isNaN(r)?0:r},Cn=function(n,t,r){return null!=t?t[r]||t.getPropertyValue(r):n.style[r]},Ln=function(n,t,r){try{if(n){var i=n.style;o(i[t])?i.setProperty(t,r):i[t]=function(n,t){return!Sn[n.toLowerCase()]&&c(t)?t+"px":t}(t,r)}}catch(e){}};function An(n,t){var r=f(t);if(d(t)||r){var i=r?"":{};if(n){var e=window.getComputedStyle(n,null);i=r?Cn(n,e,t):t.reduce((function(t,r){return t[r]=Cn(n,e,r),t}),i)}return i}p(O(t),(function(r){return Ln(n,r,t[r])}))}var Mn=function(n,t,r){var i=t?t+"-":"",e=r?"-"+r:"",o=i+"top"+e,u=i+"right"+e,a=i+"bottom"+e,c=i+"left"+e,f=An(n,[o,u,a,c]);return{t:zn(f[o]),r:zn(f[u]),b:zn(f[a]),l:zn(f[c])}},In={x:0,y:0},Tn=function(n){var t=n?vn(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:In};var jn,Rn=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: [ "+O.join(", ")+" ].":""));delete l[v]}})),{j:l,T:c}}(n,t,r||{},i||!1)},Pn="os-environment",kn=Pn+"-flexbox-glue",Fn=kn+"-max",Hn="os-host",Yn="os-padding",qn="os-viewport",Nn=qn+"-arrange",Xn="os-content",Un=qn+"-scrollbar-styled",Wn="os-size-observer",$n=Wn+"-appear",Gn=Wn+"-listener",Jn=Gn+"-scroll",Kn=Gn+"-item",Qn=Kn+"-final",Zn="os-trinsic-observer",nt=En.number,tt=[En.array,En.null],rt=[En.string,En.array,En.null],it=[!0,En.boolean],et=[!1,En.boolean],ot="hidden scroll visible visible-hidden",ut=function n(t){var r={R:{},V:{}};return p(O(t),(function(i){var e=t[i];if(d(e))r.R[i]=e[1],r.V[i]=e[0];else{var o=n(e);r.R[i]=o.R,r.V[i]=o.V}})),r}({resize:["none","none both horizontal vertical"],paddingAbsolute:et,updating:{elementEvents:[[["img","load"]],tt],attributes:[null,tt],debounce:[[0,33],[En.number,En.array,En.null]]},overflow:{x:["scroll",ot],y:["scroll",ot]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,nt],dragScroll:it,clickScroll:et,touch:it},textarea:{dynWidth:et,dynHeight:et,inheritedAttrs:[["style","class"],rt]},nativeScrollbarsOverlaid:{show:et,initialize:et},callbacks:{onUpdated:[null,[En.function,En.null]]}}),at=ut.R,ct=ut.V,ft=Math.abs,lt=Math.round,vt=function(n,t){D(n,t);var r=fn(t),i=cn(t);return{x:i.h-r.h,y:i.w-r.w}},dt=function(n,t){var r="hidden";An(n,{overflowX:r,overflowY:r,direction:"rtl"}),A(n,0);var i=Tn(n),e=Tn(t);A(n,-999);var o=Tn(t);return{i:i.x===e.x,n:e.x!==o.x}},st=function(n,t){en(n,kn);var r=vn(n),i=vn(t),e=bn(i,r,!0);en(n,Fn);var o=vn(n),u=vn(t),a=bn(u,o,!0);return e&&a},_t=function(){var n=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/t},gt=function(){var n,t,r=document.body,i=Y('
')[0],e=i.firstChild,o=new Set,u=vt(r,i),a=function(n){var t=!1;en(n,Un);try{t="none"===An(n,$("scrollbar-width"))||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return t}(i),c={x:0===u.x,y:0===u.y},f=function(n){return{B:!n,D:!1}}(a),l=f,v=ct,d={P:u,k:c,F:a,H:"-1"===An(i,"zIndex"),Y:dt(i,e),q:st(i,e),N:function(n){o.add(n)},X:function(n){o.delete(n)},U:function(){return Rn({},l)},W:function(n){l=S({},l,n)},$:function(){return Rn({},v)},G:function(n){v=S({},v,n)},J:f,K:v};if(t="style",(n=i)&&n.removeAttribute(t),F(i),!(a||c.x&&c.y)){var s=an(),_=_t(),g=u;window.addEventListener("resize",(function(){if(o.size){var n=an(),t={w:n.w-s.w,h:n.h-s.h};if(0===t.w&&0===t.h)return;var e={w:ft(t.w),h:ft(t.h)},u={w:ft(lt(n.w/(s.w/100))),h:ft(lt(n.h/(s.h/100)))},a=_t(),c=e.w>2&&e.h>2,f=(v=u.h,d=ft(u.w),h=ft(v),!(d!==h&&d+1!==h&&d-1!==h));if(c&&f&&(a!==_&&_>0)){var l=jn.P=vt(r,i);F(i),g.x===l.x&&g.y===l.y||y(o),g=l}s=n,_=a}var v,d,h}))}return d},ht=function(){return jn||(jn=gt()),jn},pt=function(n){D(B(n),V(n)),F(n)},wt=0,bt=function(n,t){var r=l(n);return r||o(n)?(r?n:t)&&void 0:n},mt=function(n){var r=ht(),i=r.U,e=r.F,u=r.k,a=r.H,c=i(),f=c.B,l=c.D,v=function(n){var r=window.HTMLElement;return!!n&&(r?n instanceof r:n.nodeType===t)}(n),d=v?{}:{Z:n.host,nn:n.target,tn:n.viewport,B:bt(n.padding,f),D:bt(n.content,l)};if(v){var s=H(qn),_=f&&H(Yn),g=l&&H(Xn);d.nn=n,d.B=_,d.tn=s,d.D=g}var h=d.nn,p=d.B,b=d.tn,m=d.D,x=[],O=R(h,"textarea"),S=!O&&R(h,"body"),z=O?d.Z||H():h,C=function(n){return O?h:V(n)};if(O&&z!==d.Z&&(k(h,z),w(x,(function(){k(z,h),F(z)}))),v){var A=m||b;D(A,C(h)),D(z,p),D(p||z,b),D(b,m),w(x,(function(){D(z,V(A)),F(p||b),on(z,Hn)}))}else{var M=m||b||p||z,I=o(p),T=o(b),j=o(m),P=C(M);p=d.B=I?H():p,b=d.tn=T?H():b,m=d.D=j?H():m,D(z,p),D(p||z,b),D(b,m),D(m||b,P),w(x,(function(){j&&pt(m),T&&pt(b),I&&pt(p),on(z,Hn),on(p,Yn),on(b,qn),on(m,Xn)}))}en(z,Hn),en(p,Yn),en(b,qn),en(m,Xn);var Y,q,N,X=h.ownerDocument,U=X.body,W={rn:X.defaultView,in:X,en:B(U),on:U,un:O,an:S},$=Rn({},d,{Z:z});if(e)w(x,on.bind(0,b,Un));else if(!a&&(u.x||u.y)){var G=(L(N=document.createElement("style"),"id",Nn+"-"+wt),wt++,N);q=G,E(B(Y=b),Y,q),w(x,F.bind(0,G)),$.cn=G}return{fn:$,ln:W,vn:function(){y(x)}}},yt="animationstart",xt="scroll",Ot=3333333,St=function(n){return"rtl"===An(n,"direction")},zt=function(n){return n&&(n.height||n.width)},Ct=function(t,r,i){var e,o=i||{},u=o.dn,a=void 0!==u&&u,c=o.sn,f=void 0!==c&&c,v=ht().Y,s=Y('
')[0],_=s.firstChild,g=n(0,{v:!0,o:function(n,t){return!(!n||!zt(n)&&zt(t))}}).s,h=function(n){var t=n&&l(n._),i=!1,e=!1,o=!0;if(d(n)&&n.length>0){var u=g(0,n.pop().contentRect),c=u.g,f=u._,_=zt(f);e=!zt(c)&&_,o=!(i=!c||!_)}else t?o=n.p:e=!0===n;if(a&&o){var h=t?n._:St(s);A(s,h?v.n?-Ot:v.i?0:Ot:Ot),M(s,Ot)}i||r({_n:!t,gn:t?n:void 0,sn:!!e})},p=[],b=!!f&&h;if(Q){var m=new Q(h);m.observe(_),w(p,(function(){return m.disconnect()}))}else{var x=Y('
');D(_,x),en(_,Jn);var O,S=x[0],z=S.lastChild,C=S.firstChild,L=null==C?void 0:C.firstChild,I=cn(S),T=I,j=!1,R=function(){A(C,Ot),M(C,Ot),A(z,Ot),M(z,Ot)},V=function(n){O=0,j&&(I=T,h(!0===n))},B=function(n){T=cn(S),j=!n||!pn(T,I),n?(gn(n),j&&!O&&(Z(O),O=nn(V))):V(!1===n),R()};w(p,[_n(C,xt,B),_n(z,xt,B)]),An(L,{width:Ot,height:Ot}),R(),b=f?B.bind(0,!1):R}if(a){var E=(e=n(St.bind(0,s))).s;w(p,_n(s,xt,(function(n){var t=E(),r=t._;t.p&&(on(_,"ltr rtl"),en(_,r?"rtl":"ltr"),h(t)),gn(n)})))}return b&&(en(s,$n),w(p,_n(s,yt,b,{C:!!Q}))),P(t,s),{vn:function(){y(p),F(s)},hn:function(n){return{pn:e?e.m(n):{_:!1,g:!1,p:!1}}}}},Lt=function(n,t,r,i){var e=!1,u=i||{},a=u.wn,c=u.bn,l=u.mn,v=u.yn,d=u.xn,s=u.On,_=u.Sn,g=function(n,t,r){var i,e=function(){i&&(i.forEach((function(n,t){return sn(t,n,r)})),i.clear())},u=function(e){i&&t&&p(t.reduce((function(t,r){if(r){var i=r[0],o=r[1],u=o&&i&&(e?e(i):j(i,n));u&&u.length&&o&&f(o)&&w(t,[u,o.trim()],!0)}return t}),[]),(function(n){return p(n[0],(function(t){var e=n[1],u=i.get(t),a=!o(u)&&e!==u,c=a?u+" "+e:e;a&&sn(t,u,r),i.set(t,c),_n(t,c,r)}))}))};return t&&(i=i||new Map,e(),u()),{vn:e,zn:u}}(n,t&&l,On((function(){e&&r(!0)}),{L:33,A:99})),h=g.vn,b=g.zn,y=c||[],x=(a||[]).concat(y),O=function(e){var o=(t?s:d)||xn,u=_||xn,a=[],c=[],l=!1,g=!1,h=!1;p(e,(function(r){var e,d,s=r.attributeName,_=r.target,p=r.type,b=r.oldValue,m=r.addedNodes,x="attributes"===p,O="childList"===p,S=n===_,z=x&&f(s)?L(_,s):0,C=0!==z&&b!==z,A=(e=s,y.indexOf(e,d)>-1&&C);if(t&&!S){var M=!x,I=x&&A,T=I&&v&&R(_,v),j=(T?!o(_,s,b,z):M||I)&&!u(r,!!T,n,i);w(c,m),g=g||j,h=h||O}!t&&S&&C&&!o(_,s,b,z)&&(w(a,s),l=l||A)})),h&&!m(c)&&b((function(n){return c.reduce((function(t,r){return w(t,j(n,r)),R(r,n)?w(t,r):t}),[])})),t?g&&r(!1):m(a)&&!l||r(a,l)},S=new J(O);return S.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:x,subtree:t,childList:t,characterData:t}),e=!0,{vn:function(){e&&(h(),S.disconnect(),e=!1)},s:function(){e&&O(S.takeRecords())}}},At="os-",Mt=["wrap","cols","rows"],It=["id","class","style","open"],Tt=function(n,t,r,i){var e,o,u,a,c;return!("class"!==t||!r||!i)&&!!(o=i,u=(e=r)&&e.split(" "),a=o&&o.split(" "),c={},p(u,(function(n){c[n]=1})),p(a,(function(n){c[n]?delete c[n]:c[n]=1})),O(c)).find((function(n){return 0!==n.indexOf(At)}))},jt=function(t,r){var i,e,o,u=t.Cn,a=u.fn,f=u.ln,l=a.Z,v=a.tn,s=a.D,_=f.un,g=ht(),h=g.F,p=g.q,b=_?Mt:It.concat(Mt),m=On(r,{L:function(){return i},A:function(){return e},M:function(n,t){var r=n[0],i=r._n,e=r.Ln,o=r.An,u=t[0],a=u._n,c=u.Ln,f=u.An;return[{_n:i||a,Ln:e||c,An:o||f}]}}),x=function(n){(n?r:m)({An:!0})},O=m.bind(0,{Ln:!0}),S=(s||!p)&&function(t,r){var i=H(Zn),e=[],o=n((function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}),{u:!1}),u=o.s,a=o.m;if(K){var c=new K((function(n){if(n&&n.length>0){var t=n.pop();if(t){var i=u(0,t);i.p&&r(i)}}}),{root:t});c.observe(i),w(e,(function(){return c.disconnect()}))}else{var f=function(){var n=cn(i),t=u(0,n);t.p&&r(t)};w(e,Ct(i,f).vn),f()}return P(t,i),{vn:function(){y(e),F(i)},hn:function(n){return{Mn:a(n)}}}}(l,(function(n){r({Mn:n})})),z=Ct(l,(function(n){var t=n._n,i=n.gn,e=n.sn;(!t||e?r:m)({_n:t,pn:i})}),{sn:!0,dn:!h});Lt(l,!1,O,{bn:It,wn:It,xn:Tt});return{In:S,Tn:z,jn:function(n){var t=n("updating.elementEvents"),r=t._,u=t.p,a=n("updating.attributes"),f=a._,l=a.p,_=n("updating.debounce"),g=_._,h=_.p;if((u||l)&&(o&&(o.s(),o.vn()),o=Lt(s||v,!0,x,{bn:b.concat(f||[]),wn:b.concat(f||[]),mn:r,On:Tt})),h)if(m.I(),d(g)){var p=g[0],w=g[1];i=!!c(p)&&p,e=!!c(w)&&w}else c(g)?(i=g,e=!1):(i=!1,e=!1)}}},Rt=function(t){var r=t.Cn,i=t.Rn,e=r.fn,o=e.Z,u=e.B,a=e.tn,c=n(Mn.bind(0,o,"padding"),{o:wn,u:Mn()}),f=c.s,l=c.m;return function(n,t,r){var e=l(r),o=e._,c=e.p,v=ht(),d=v.F,s=v.q,_=n._n,g=n.pn,h=n.An,p=g._,w=g.p,b=t("paddingAbsolute"),m=b._,y=b.p;if(_||c||!s&&h){var x=f(r);o=x._,c=x.p}var O=y||w||c;if(O){var S=!m||!u&&!d,z=o.r+o.l,C=o.t+o.b,L={marginRight:S&&!p?-z:0,marginBottom:S?-C:0,marginLeft:S&&p?-z:0,top:S?-o.t:0,right:S?p?-o.r:"auto":0,left:S?p?"auto":-o.l:0,width:S?"calc(100% + "+z+"px)":""},A={paddingTop:S?o.t:0,paddingRight:S?o.r:0,paddingBottom:S?o.b:0,paddingLeft:S?o.l:0};An(u||a,L),An(a,A),i({Vn:{Bn:!S,B:o},En:u?A:Rn({},L,A)})}return{Dn:O}}},Vt=Math.max,Bt=Math.abs,Et=Math.round,Dt=42,Pt={o:pn,u:{w:0,h:0}},kt=function(n){var t=cn(n),r=vn(n);return{w:r.width-t.w,h:r.height-t.h}},Ft=function(n,t,r,i){var e=n?"overflowX":"overflowY",o=0===r.indexOf("visible"),u="visible-hidden"===r,a="scroll"===r,c=t>0;return o&&(i[e]="visible"),a&&c&&(i[e]=r),{Pn:o,kn:u?"hidden":"scroll"}},Ht=function(t){var r=t.Cn,i=t.Fn,e=t.Hn,o=t.Rn,u=r.fn,a=u.Z,c=u.tn,f=u.cn,l=n(kt.bind(0,c),Pt),v=l.s,d=l.m,s=n(ln.bind(0,c),Pt),_=s.s,g=s.m,h=n((function(n){var t=n.Yn,r=n.qn,i=n.Nn;return{w:Et(Vt(0,t.w-r.w)-Vt(0,i.w)),h:Et(Vt(0,t.h-r.h)-Vt(0,i.h))}}),Pt),w=h.s,b=h.m,m=function(n,t){if(An(c,{height:""}),t){var r=e().Vn,i=r.Bn,o=r.B,u=n.Xn,f=n.Un,l=kt(a),v=fn(a),d=i||"content-box"===An(c,"boxSizing")?o.b+o.t:0,s=v.h+(Bt(l.h)<1?l.h:0);An(c,{height:s+(u.x?f.x:0)-d})}},y=function(n,t){var r=ht(),i=r.P,e=r.k,o=r.F,u=e.x,a=e.y,f=o||n?0:Dt,l=!t?An(c,["overflowX","overflowY"]):t,v={x:"scroll"===l.overflowX,y:"scroll"===l.overflowY};return{Xn:v,Wn:{x:u&&!!f,y:a&&!!f},Un:{x:v.x&&!o?u?f:i.x:0,y:v.y&&!o?a?f:i.y:0}}},x=function(n,t,r,o){if(i){var u=n.Un,a=n.Wn,l=a.x,v=a.y,d=u.x,s=u.y,_=e().En,g=_[o?"paddingRight":"paddingLeft"],h=_.paddingTop,p=t.w+(Bt(r.w)<1?r.w:0),w=t.h+(Bt(r.h)<1?r.h:0),b={w:s&&v?s+p-g+"px":"",h:d&&l?d+w-h+"px":""};if(f){var m=f.sheet;if(m){var y=m.cssRules;if(y){y.length||m.insertRule("#"+L(f,"id")+" + ."+Nn+"::before {}",0);var x=y[0].style;x.width=b.w,x.height=b.h}}}else An(c,{"--os-vaw":b.w,"--os-vah":b.h})}return i},S=function(n,t,r,i){var o=n.Un,u=n.Wn,a=u.x,c=u.y,f=o.x,l=o.y,v=e().En,d=t?"marginLeft":"marginRight",s=t?"paddingLeft":"paddingRight",_=v[d],g=v.marginBottom,h=v[s],p=v.paddingBottom;i.width="calc(100% + "+(l+-1*_)+"px)",i[d]=-l+_,i.marginBottom=-f+g,r&&(i[s]=h+(c?l:0),i.paddingBottom=p+(a?f:0))};return function(n,t,r){var u,a=n.pn,f=n.Mn,l=n._n,s=n.Ln,h=n.An,z=n.Dn,C=ht(),L=C.q,A=C.F,M=C.k,I=f._,T=f.p,j=a._,R=a.p,V=t("nativeScrollbarsOverlaid.show"),B=V._,E=V.p,D=B&&M.x&&M.y,P=!L&&(l||h||s||E||T),k=d(r),F=g(r),H=b(r);if(E&&A&&(D?on(c,Un):en(c,Un)),P&&(u=y(D),m(u,!!I)),l||z||h||E||R){var Y=function(n,t,r){if(i){var o=r||y(n),u=e().En,a=ht().q,f=o.Wn,l=f.x,v=f.y,d={},s=function(n){return p(n.split(" "),(function(n){d[n]=u[n]}))};a||(d.height=""),l&&s("marginBottom paddingTop paddingBottom"),v&&s("marginLeft marginRight paddingLeft paddingRight");var _=An(c,O(d));return on(c,Nn),An(c,d),{$n:function(){S(o,t,i,_),An(c,_),en(c,Nn)},Gn:o}}return{$n:xn}}(D,j,u),q=Y.$n,N=Y.Gn,X=k=v(r),U=X._,W=X.p,$=F=_(r),G=$._,J=$.p,K=fn(c),Q=G,Z=K;q(),(J||W||E)&&N&&!D&&x(N,G,U,j)&&(Z=fn(c),Q=ln(c)),H=w(r,{Nn:U,Yn:{w:Vt(G.w,Q.w),h:Vt(G.h,Q.h)},qn:{w:Z.w+Vt(0,K.w-G.w),h:Z.h+Vt(0,K.h-G.h)}})}var nn=k,tn=nn._,rn=nn.p,un=F,an=un._,cn=un.p,vn=H,dn=vn._,sn=vn.p,_n=t("overflow"),gn=_n._,hn=_n.p;if(z||rn||cn||sn||hn||E||R||P){var pn={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},wn=function(n,t,r,i){var e=Ft(!0,t.w,r.x,i),o=e.Pn,u=e.kn,a=Ft(!1,t.h,r.y,i),c=a.Pn,f=a.kn;return o&&!c&&(i.overflowX=u),c&&!o&&(i.overflowY=f),y(n,i)}(D,dn,gn,pn),bn=x(wn,an,tn,j);S(wn,j,bn,pn),P&&m(wn,!!I),An(c,pn),o({Jn:wn.Xn,Kn:dn})}}},Yt=function(n,t){return n?t.split(".").reduce((function(n,t){return n&&x(n,t)?n[t]:void 0}),n):void 0},qt={_:!1,g:!1,p:!1},Nt={Vn:{Bn:!1,B:{t:0,r:0,b:0,l:0}},Jn:{x:!1,y:!1},Kn:{w:0,h:0},En:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0}};return function(n,t,r){var i=S({},(0,ht().$)(),Dn(t||{},at,null,!0).T),e=mt(n),o=function(n,t){var r,i,e=Nt,o=t.fn.tn,u=ht(),a=u.F,f=u.k,l=u.q,v=u.N,d=u.X,s=!a&&(f.x||f.y),_={V:n,Cn:t,Fn:s,Hn:function(){return e},Rn:function(n){e=S({},e,n)}},g=[(r=_,i=r.Cn.fn.D,function(n){var t=n.Mn,r=t._,e=t.p;return e&&An(i,{height:r?"":"100%",display:r?"":"inline"}),{_n:e,An:e}}),Rt(_),Ht(_)],h=function(t,r,i){var e=t||{},u=e.pn,a=e.Mn,f=e._n,v=void 0===f?i||!1:f,d=e.Ln,_=void 0===d?i||!1:d,h=e.An,w=void 0===h?i||!1:h,x=e.Dn,O=void 0===x?i||!1:x,S=u||(b?b.hn(i).pn:qt),z=a||(m?m.hn(i).Mn:qt),C=function(t){return{_:Yt(n,t),p:i||void 0!==Yt(r,t)}},L=s||!l,I=L&&A(o),T=L&&M(o);y&&y(C),p(g,(function(n){var t=n({pn:S,Mn:z,_n:v,Ln:_,An:w,Dn:O},C,!!i)||{},r=t._n,e=t.Ln,o=t.An,u=t.Dn;v=r||v,_=e||_,w=o||w,O=u||O})),c(I)&&A(o,I),c(T)&&M(o,T),n.callbacks.onUpdated&&n.callbacks.onUpdated()},w=jt(_,h),b=w.Tn,m=w.In,y=w.jn,x=function(n,t){h(null,n,t)},O=x.bind(null,null,!0);return v(O),console.log(ht()),{s:x,Qn:function(){return{Zn:e.Kn}},vn:function(){d(O)}}}(i,e),u={options:function(n){if(n){var t=Dn(n,at,i,!0).T;z(t)||(S(i,t),o.s(t))}return i},state:function(){return o.Qn()},update:function(n){o.s(null,n)}};return u.update(!0),u}})); \ No newline at end of file diff --git a/packages/overlayscrollbars/types/lifecycles/lifecycleHubObservers.d.ts b/packages/overlayscrollbars/types/lifecycles/lifecycleHubObservers.d.ts new file mode 100644 index 0000000..dc17b94 --- /dev/null +++ b/packages/overlayscrollbars/types/lifecycles/lifecycleHubObservers.d.ts @@ -0,0 +1,6 @@ +import { LifecycleHub, LifecycleCheckOption, LifecycleUpdateHints } from 'lifecycles/lifecycleHub'; +export declare const lifecycleHubOservers: (instance: LifecycleHub, updateLifecycles: (updateHints?: Partial | null | undefined) => unknown) => { + _trinsicObserver: false | import("observers/trinsicObserver").TrinsicObserver; + _sizeObserver: import("observers/sizeObserver").SizeObserver; + _updateObserverOptions: (checkOption: LifecycleCheckOption) => void; +}; diff --git a/packages/overlayscrollbars/types/observers/domObserver.d.ts b/packages/overlayscrollbars/types/observers/domObserver.d.ts index 2bdb0b3..bad6557 100644 --- a/packages/overlayscrollbars/types/observers/domObserver.d.ts +++ b/packages/overlayscrollbars/types/observers/domObserver.d.ts @@ -1,5 +1,5 @@ declare type StringNullUndefined = string | null | undefined; -declare type DOMContentObserverCallback = (contentChanged: boolean) => any; +declare type DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any; declare type DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any; interface DOMObserverOptionsBase { _attributes?: string[]; @@ -14,22 +14,16 @@ interface DOMContentObserverOptions extends DOMObserverOptionsBase { interface DOMTargetObserverOptions extends DOMObserverOptionsBase { _ignoreTargetChange?: DOMObserverIgnoreTargetChange; } -interface DOMObserverBase { - _destroy: () => void; - _update: () => void; -} -interface DOMContentObserver extends DOMObserverBase { - _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void; -} -interface DOMTargetObserver extends DOMObserverBase { -} -declare type ContentChangeArrayItem = [StringNullUndefined, ((elms: Node[]) => StringNullUndefined) | StringNullUndefined] | null | undefined; +declare type ContentChangeArrayItem = [StringNullUndefined, StringNullUndefined] | null | undefined; export declare type DOMObserverEventContentChange = Array | false | null | undefined; -export declare type DOMObserverIgnoreContentChange = (mutation: MutationRecord, isNestedTarget: boolean, domObserverTarget: HTMLElement, domObserverOptions: DOMContentObserverOptions | undefined) => boolean; +export declare type DOMObserverIgnoreContentChange = (mutation: MutationRecord, isNestedTarget: boolean, domObserverTarget: HTMLElement, domObserverOptions?: DOMContentObserverOptions) => boolean; export declare type DOMObserverIgnoreTargetChange = (target: Node, attributeName: string, oldAttributeValue: string | null, newAttributeValue: string | null) => boolean; export declare type DOMObserverCallback = ContentObserver extends true ? DOMContentObserverCallback : DOMTargetObserverCallback; export declare type DOMObserverOptions = ContentObserver extends true ? DOMContentObserverOptions : DOMTargetObserverOptions; -export declare type DOMObserver = ContentObserver extends true ? DOMContentObserver : DOMTargetObserver; +export interface DOMObserver { + _destroy: () => void; + _update: () => void; +} /** * Creates a DOM observer which observes DOM changes to either the target element or its children. * @param target The element which shall be observed. @@ -38,5 +32,5 @@ export declare type DOMObserver = ContentObserv * @param options The options for DOM change detection. * @returns A object which represents the instance of the DOM observer. */ -export declare const createDOMObserver: (target: HTMLElement, isContentObserver: ContentObserver, callback: DOMObserverCallback, options?: DOMObserverOptions | undefined) => DOMObserver; +export declare const createDOMObserver: (target: HTMLElement, isContentObserver: ContentObserver, callback: DOMObserverCallback, options?: DOMObserverOptions | undefined) => DOMObserver; export {}; diff --git a/packages/overlayscrollbars/types/observers/sizeObserver.d.ts b/packages/overlayscrollbars/types/observers/sizeObserver.d.ts index 3b818e7..4ea3163 100644 --- a/packages/overlayscrollbars/types/observers/sizeObserver.d.ts +++ b/packages/overlayscrollbars/types/observers/sizeObserver.d.ts @@ -1,8 +1,13 @@ import { CacheValues } from 'support'; -export declare type SizeObserverOptions = { +export interface SizeObserverOptions { _direction?: boolean; _appear?: boolean; -}; +} +export interface SizeObserverCallbackParams { + _sizeChanged: boolean; + _directionIsRTLCache?: CacheValues; + _appear?: boolean; +} export interface SizeObserver { _destroy(): void; _getCurrentCacheValues(force?: boolean): { @@ -16,4 +21,4 @@ export interface SizeObserver { * @param options The options for size detection, whether to observe also direction and appear. * @returns A object which represents the instance of the size observer. */ -export declare const createSizeObserver: (target: HTMLElement, onSizeChangedCallback: (directionIsRTLCache?: CacheValues | undefined) => any, options?: SizeObserverOptions | undefined) => SizeObserver; +export declare const createSizeObserver: (target: HTMLElement, onSizeChangedCallback: (params: SizeObserverCallbackParams) => any, options?: SizeObserverOptions | undefined) => SizeObserver; diff --git a/packages/overlayscrollbars/types/options.d.ts b/packages/overlayscrollbars/types/options.d.ts index 563128d..bd1aea9 100644 --- a/packages/overlayscrollbars/types/options.d.ts +++ b/packages/overlayscrollbars/types/options.d.ts @@ -15,9 +15,8 @@ export interface OSOptions { paddingAbsolute: boolean; updating: { elementEvents: Array<[string, string]> | null; - contentMutationDebounce: number; - hostMutationDebounce: number; - resizeDebounce: number; + attributes: string[] | null; + debounce: number | [number, number] | null; }; overflow: { x: OverflowBehavior; diff --git a/packages/overlayscrollbars/types/support/utils/function.d.ts b/packages/overlayscrollbars/types/support/utils/function.d.ts index 14250a2..7881d1b 100644 --- a/packages/overlayscrollbars/types/support/utils/function.d.ts +++ b/packages/overlayscrollbars/types/support/utils/function.d.ts @@ -1,8 +1,28 @@ +declare type DebounceTiming = number | false | null | undefined; +export interface DebounceOptions any> { + /** + * The timeout for debouncing. If null, no debounce is applied. + */ + _timeout?: DebounceTiming | (() => DebounceTiming); + /** + * A maximum amount of ms. before the function will be called even with debounce. + */ + _maxDelay?: DebounceTiming | (() => DebounceTiming); + /** + * Function which merges parameters for each canceled debounce. + * If parameters can't be merged the function will return null, otherwise it returns the merged parameters. + */ + _mergeParams?: (prev: Parameters, curr: Parameters) => Parameters | false | null | undefined; +} +export interface Debounced any> { + (...args: Parameters): ReturnType; + _flush(): void; +} export declare const noop: () => void; /** * Debounces the given function either with a timeout or a animation frame. * @param functionToDebounce The function which shall be debounced. - * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise. - * @param maxWait A maximum amount of ms. before the function will be called even with debounce. + * @param options Options for debouncing. */ -export declare const debounce: (functionToDebounce: (...args: any) => any, timeout?: number | undefined, maxWait?: number | undefined) => () => void; +export declare const debounce: any>(functionToDebounce: FunctionToDebounce, options: DebounceOptions) => Debounced; +export {}; From 95d3ccc0cfb0cd3f3a866400effca7568d374531 Mon Sep 17 00:00:00 2001 From: Rene Date: Thu, 13 May 2021 23:34:17 +0200 Subject: [PATCH 3/3] add browser quick test command --- package.json | 1 + packages/overlayscrollbars/package.json | 1 + 2 files changed, 2 insertions(+) diff --git a/package.json b/package.json index a02617c..b271fc8 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,7 @@ "test": "yarn workspaces run test", "test:jsdom": "yarn workspaces run test:jsdom", "test:browser": "yarn workspaces run test:browser", + "test:browser:quick": "yarn workspaces run test:browser:quick", "test:browser-dev": "yarn workspaces run test:browser-dev", "build": "yarn workspaces run build", "lint": "npx eslint --fix ." diff --git a/packages/overlayscrollbars/package.json b/packages/overlayscrollbars/package.json index ac83aad..36dea9c 100644 --- a/packages/overlayscrollbars/package.json +++ b/packages/overlayscrollbars/package.json @@ -7,6 +7,7 @@ "test": "jest --coverage --runInBand --detectOpenHandles", "test:jsdom": "jest --coverage --runInBand --detectOpenHandles --selectProjects jsdom --testPathPattern", "test:browser": "jest --runInBand --detectOpenHandles --selectProjects browser --testPathPattern", + "test:browser:quick": "jest --runInBand --detectOpenHandles --selectProjects browser --testPathIgnorePatterns=\"/node_modules/|/structureLifecycle/\"", "test:browser-dev": "jest --runInBand --detectOpenHandles --selectProjects browser-dev --testPathPattern", "build": "rollup -c" }