{"version":3,"file":"overlayscrollbars.browser.es5.js","sources":["../../src/support/cache.ts","../../src/support/compatibility/isBrowser.ts","../../src/support/utils/alias.ts","../../src/support/compatibility/apis.ts","../../src/support/utils/types.ts","../../src/support/utils/animation.ts","../../src/support/utils/array.ts","../../src/support/utils/strings.ts","../../src/support/utils/equal.ts","../../src/support/utils/function.ts","../../src/support/utils/object.ts","../../src/support/utils/noop.ts","../../src/support/utils/math.ts","../../src/support/dom/attribute.ts","../../src/support/dom/class.ts","../../src/support/dom/traversal.ts","../../src/support/dom/manipulation.ts","../../src/trustedTypePolicy.ts","../../src/support/dom/create.ts","../../src/support/dom/style.ts","../../src/support/dom/dimensions.ts","../../src/support/dom/events.ts","../../src/support/dom/scroll.ts","../../src/support/dom/focus.ts","../../src/support/eventListeners.ts","../../src/plugins/plugins.ts","../../../../node_modules/@babel/runtime/helpers/extends.js","../../src/plugins/optionsValidationPlugin/validation.ts","../../src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts","../../src/classnames.ts","../../src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts","../../src/setups/structureSetup/structureSetup.utils.ts","../../src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.ts","../../src/plugins/clickScrollPlugin/clickScrollPlugin.ts","../../src/options.ts","../../src/nonce.ts","../../src/environment.ts","../../src/observers/domObserver.ts","../../src/observers/sizeObserver.ts","../../src/observers/trinsicObserver.ts","../../src/setups/observersSetup/observersSetup.ts","../../src/initialization.ts","../../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../../src/setups/scrollbarsSetup/scrollbarsSetup.events.ts","../../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../../src/setups/structureSetup/structureSetup.elements.ts","../../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../../src/setups/structureSetup/structureSetup.ts","../../src/setups/setups.ts","../../src/instances.ts","../../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheOptions<Value> {\r\n  // initial value of _value.\r\n  _initialValue: Value;\r\n  // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n  _equal?: EqualCachePropFunction<Value>;\r\n  // If true always updates _value and _previous, otherwise they update only when they changed.\r\n  _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues<T> = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction<Value> = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater<Value> = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual<Value> = (newValue: Value, force?: boolean) => CacheValues<Value>;\r\n\r\nexport type UpdateCache<Value> = (force?: boolean) => CacheValues<Value>;\r\n\r\nexport type GetCurrentCache<Value> = (force?: boolean) => CacheValues<Value>;\r\n\r\nexport type Cache<Value> = [UpdateCache<Value>, GetCurrentCache<Value>];\r\n\r\nexport type CacheContextual<Value> = [UpdateCacheContextual<Value>, GetCurrentCache<Value>];\r\n\r\ntype CreateCache = {\r\n  <Value>(options: CacheOptions<Value>): CacheContextual<Value>;\r\n  <Value>(options: CacheOptions<Value>, update: CacheUpdater<Value>): Cache<Value>;\r\n  <Value>(\r\n    options: CacheOptions<Value>,\r\n    update?: CacheUpdater<Value>\r\n  ): CacheContextual<Value> | Cache<Value>;\r\n};\r\n\r\nexport const createCache: CreateCache = <Value>(\r\n  options: CacheOptions<Value>,\r\n  update?: CacheUpdater<Value>\r\n): CacheContextual<Value> | Cache<Value> => {\r\n  const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n  let _value: Value = _initialValue;\r\n  let _previous: Value | undefined;\r\n\r\n  const cacheUpdateContextual: UpdateCacheContextual<Value> = (newValue, force?) => {\r\n    const curr = _value;\r\n\r\n    const newVal = newValue;\r\n    const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n    if (changed || _alwaysUpdateValues) {\r\n      _value = newVal;\r\n      _previous = curr;\r\n    }\r\n\r\n    return [_value, changed, _previous];\r\n  };\r\n  const cacheUpdateIsolated: UpdateCache<Value> = (force?) =>\r\n    cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n  const getCurrentCache: GetCurrentCache<Value> = (force?: boolean) => [\r\n    _value,\r\n    !!force, // changed\r\n    _previous,\r\n  ];\r\n\r\n  return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n    | CacheContextual<Value>\r\n    | Cache<Value>;\r\n};\r\n","export const isBrowser =\r\n  // deno has the global `window` defined\r\n  typeof window !== 'undefined' &&\r\n  // make sure HTML element is available\r\n  typeof HTMLElement !== 'undefined' &&\r\n  // make sure document is defined\r\n  !!window.document;\r\n","import { isBrowser } from '../compatibility/isBrowser';\r\n\r\nexport const wnd = (isBrowser ? window : {}) as typeof window;\r\nexport const mathMax = Math.max;\r\nexport const mathMin = Math.min;\r\nexport const mathRound = Math.round;\r\nexport const mathFloor = Math.floor;\r\nexport const mathCeil = Math.ceil;\r\nexport const mathAbs = Math.abs;\r\nexport const mathSign = Math.sign;\r\nexport const cAF = wnd.cancelAnimationFrame;\r\nexport const rAF = wnd.requestAnimationFrame;\r\nexport const setT = wnd.setTimeout;\r\nexport const clearT = wnd.clearTimeout;\r\n","import { wnd } from '../utils/alias';\r\n\r\nconst getApi = <T>(name: string) =>\r\n  (typeof wnd[name as keyof typeof wnd] !== 'undefined'\r\n    ? wnd[name as keyof typeof wnd]\r\n    : undefined) as T;\r\n\r\nexport const MutationObserverConstructor = getApi<typeof MutationObserver>('MutationObserver');\r\nexport const IntersectionObserverConstructor =\r\n  getApi<typeof IntersectionObserver>('IntersectionObserver');\r\nexport const ResizeObserverConstructor = getApi<typeof ResizeObserver>('ResizeObserver');\r\nexport const scrollT = getApi<new (constructor: unknown) => AnimationTimeline>('ScrollTimeline');\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport type { PlainObject } from '../../typings';\r\n\r\nexport const isUndefined = (obj: any): obj is undefined => obj === undefined;\r\n\r\nexport const isNull = (obj: any): obj is null => obj === null;\r\n\r\nexport const type = (obj: any): string =>\r\n  isUndefined(obj) || isNull(obj)\r\n    ? `${obj}`\r\n    : Object.prototype.toString\r\n        .call(obj)\r\n        .replace(/^\\[object (.+)\\]$/, '$1')\r\n        .toLowerCase();\r\n\r\nexport const isNumber = (obj: any): obj is number => typeof obj === 'number';\r\n\r\nexport const isString = (obj: any): obj is string => typeof obj === 'string';\r\n\r\nexport const isBoolean = (obj: any): obj is boolean => typeof obj === 'boolean';\r\n\r\nexport const isFunction = (obj: any): obj is (...args: any[]) => any => typeof obj === 'function';\r\n\r\nexport const isArray = <T = any>(obj: any): obj is Array<T> => Array.isArray(obj);\r\n\r\nexport const isObject = (obj: any): obj is object =>\r\n  typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport const isArrayLike = <T extends PlainObject = any>(obj: any): obj is ArrayLike<T> => {\r\n  const length = !!obj && obj.length;\r\n  const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0;\r\n\r\n  return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat)\r\n    ? length > 0 && isObject(obj)\r\n      ? length - 1 in obj\r\n      : true\r\n    : false;\r\n};\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport const isPlainObject = <T = any>(obj: any): obj is PlainObject<T> =>\r\n  !!obj && obj.constructor === Object;\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isHTMLElement = (obj: any): obj is HTMLElement => obj instanceof HTMLElement;\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isElement = (obj: any): obj is Element => obj instanceof Element;\r\n","import { mathMax, rAF, cAF } from './alias';\r\nimport { isFunction } from './types';\r\n\r\n/**\r\n * percent: current percent (0 - 1),\r\n * time: current time (duration * percent),\r\n * min: start value\r\n * max: end value\r\n * duration: duration in ms\r\n */\r\nexport type EasingFn = (\r\n  percent: number,\r\n  time: number,\r\n  min: number,\r\n  max: number,\r\n  duration: number\r\n) => number;\r\n\r\nconst animationCurrentTime = () => performance.now();\r\n\r\nexport const animateNumber = (\r\n  from: number,\r\n  to: number,\r\n  duration: number,\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  onFrame: (progress: number, percent: number, completed: boolean) => any,\r\n  easing?: EasingFn | false\r\n): ((complete?: boolean) => void) => {\r\n  let animationFrameId = 0;\r\n  const timeStart = animationCurrentTime();\r\n  const finalDuration = mathMax(0, duration);\r\n  const frame = (complete?: boolean) => {\r\n    const timeNow = animationCurrentTime();\r\n    const timeElapsed = timeNow - timeStart;\r\n    const stopAnimation = timeElapsed >= finalDuration;\r\n    const percent = complete\r\n      ? 1\r\n      : 1 - (mathMax(0, timeStart + finalDuration - timeNow) / finalDuration || 0);\r\n    const progress =\r\n      (to - from) *\r\n        (isFunction(easing)\r\n          ? easing(percent, percent * finalDuration, 0, 1, finalDuration)\r\n          : percent) +\r\n      from;\r\n    const animationCompleted = stopAnimation || percent === 1;\r\n\r\n    onFrame(progress, percent, animationCompleted);\r\n\r\n    animationFrameId = animationCompleted ? 0 : rAF!(() => frame());\r\n  };\r\n  frame();\r\n  return (complete) => {\r\n    cAF!(animationFrameId);\r\n    if (complete) {\r\n      frame(complete);\r\n    }\r\n  };\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport type { PlainObject } from '../../typings';\r\nimport { isArray, isArrayLike, isString } from './types';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | false | null | undefined;\r\n\r\nexport function each<T extends Array<unknown> | ReadonlyArray<unknown>>(\r\n  array: T,\r\n  callback: (\r\n    value: T extends Array<infer V> | ReadonlyArray<infer V> ? V : never,\r\n    index: number,\r\n    source: T\r\n  ) => boolean | unknown\r\n): T;\r\nexport function each<T extends ArrayLike<unknown>>(\r\n  arrayLikeObject: T,\r\n  callback: (\r\n    value: T extends ArrayLike<infer V> ? V : never,\r\n    index: number,\r\n    source: T\r\n  ) => boolean | unknown\r\n): T;\r\nexport function each<T extends PlainObject>(\r\n  obj: T,\r\n  callback: (value: any, key: string, source: T) => boolean | unknown\r\n): T;\r\nexport function each(\r\n  source: Array<unknown> | ArrayLike<unknown> | ReadonlyArray<unknown> | PlainObject,\r\n  callback: (value: any, indexOrKey: any, source: any) => boolean | unknown\r\n): Array<unknown> | ArrayLike<unknown> | ReadonlyArray<unknown> | Set<unknown> | PlainObject {\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    // cant use support func keys here due to circular dep\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 true when the passed item is in the passed array and false otherwise.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @returns Whether the item is in the array.\r\n */\r\nexport const inArray = <T = any>(arr: T[] | readonly T[], item: T): boolean =>\r\n  arr.indexOf(item) >= 0;\r\n\r\n/**\r\n * Concats two arrays and returns an new array without modifying any of the passed arrays.\r\n * @param a Array A.\r\n * @param b Array B.\r\n * @returns A new array which has the entries of both arrays.\r\n */\r\nexport const concat = <T>(a: T[] | ReadonlyArray<T>, b: T[] | ReadonlyArray<T>): T[] => a.concat(b);\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 = <T>(array: T[], items: T | ArrayLike<T>, arrayIsSingleItem?: boolean): T[] => {\r\n  if (!arrayIsSingleItem && !isString(items) && isArrayLike(items)) {\r\n    Array.prototype.push.apply(array, items as T[]);\r\n  } else {\r\n    array.push(items as T);\r\n  }\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 = <T = any>(arr?: ArrayLike<T> | Set<T>) => Array.from(arr || []);\r\n\r\n/**\r\n * Creates an array if the passed value is not an array, or returns the value if it is.\r\n * If the passed value is an array like structure and not a string it will be converted into an array.\r\n * @param value The value.\r\n * @returns An array which represents the passed value(s).\r\n */\r\nexport const createOrKeepArray = <T>(value: T | T[] | ArrayLike<T>): T[] => {\r\n  if (isArray(value)) {\r\n    return value;\r\n  }\r\n  return !isString(value) && isArrayLike(value) ? from(value) : [value];\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean => !!array && !array.length;\r\n\r\n/**\r\n * Deduplicates all items of the array.\r\n * @param array The array to be deduplicated.\r\n * @returns The deduplicated array.\r\n */\r\nexport const deduplicateArray = <T extends any[] | readonly any[]>(array: T): T =>\r\n  from(new Set(array)) as T;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param args The args with which each function is called.\r\n * @param keep True when the Set / array should not be cleared afterwards, false otherwise.\r\n */\r\nexport const runEachAndClear = (arr: RunEachItem[], args?: any[], keep?: boolean): void => {\r\n  // eslint-disable-next-line prefer-spread\r\n  const runFn = (fn: RunEachItem) => (fn ? fn.apply(undefined, args || []) : true); // return true when fn is falsy to not break the loop\r\n  each(arr, runFn);\r\n  if (!keep) {\r\n    (arr as any[]).length = 0;\r\n  }\r\n};\r\n","export const strPaddingTop = 'paddingTop';\r\nexport const strPaddingRight = 'paddingRight';\r\nexport const strPaddingLeft = 'paddingLeft';\r\nexport const strPaddingBottom = 'paddingBottom';\r\nexport const strMarginLeft = 'marginLeft';\r\nexport const strMarginRight = 'marginRight';\r\nexport const strMarginBottom = 'marginBottom';\r\nexport const strOverflowX = 'overflowX';\r\nexport const strOverflowY = 'overflowY';\r\nexport const strWidth = 'width';\r\nexport const strHeight = 'height';\r\nexport const strVisible = 'visible';\r\nexport const strHidden = 'hidden';\r\nexport const strScroll = 'scroll';\r\n\r\nexport const capitalizeFirstLetter = (str: string | number | false | null | undefined): string => {\r\n  const finalStr = String(str || '');\r\n  return finalStr ? finalStr[0].toUpperCase() + finalStr.slice(1) : '';\r\n};\r\n","import type { WH } from '../dom/dimensions';\r\nimport type { XY } from '../dom/offset';\r\nimport type { TRBL } from '../dom/style';\r\nimport type { PlainObject } from '../../typings';\r\nimport { each } from './array';\r\nimport { mathRound } from './alias';\r\nimport { strHeight, strWidth } from './strings';\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 = <T extends PlainObject>(\r\n  a: T | undefined,\r\n  b: T | undefined,\r\n  props: Array<keyof T> | ReadonlyArray<keyof T>,\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\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 = <T>(a?: Partial<WH<T>>, b?: Partial<WH<T>>) =>\r\n  equal<Partial<WH<T>>>(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 = <T>(a?: Partial<XY<T>>, b?: Partial<XY<T>>) =>\r\n  equal<Partial<XY<T>>>(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<TRBL>(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<DOMRect>(a, b, [strWidth, strHeight], round && ((value) => mathRound(value)));\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { isNumber, isFunction } from './types';\r\nimport { from } from './array';\r\nimport { rAF, cAF, setT, clearT } from './alias';\r\n\r\ntype DebouncerFn = (task: () => void) => () => void;\r\n\r\nexport type DebounceTiming = { _debouncer: DebouncerFn } | number | false | null | undefined;\r\nexport type DebounceLeading = boolean | null | undefined;\r\n\r\nexport interface DebounceOptions<FunctionToDebounce extends (...args: any) => any> {\r\n  /**\r\n   * The timing for debouncing. If false, null or undefined, no debounce is applied.\r\n   */\r\n  _debounceTiming?: DebounceTiming | (() => DebounceTiming);\r\n  /**\r\n   * The timing which determines when the debounced will be called even when the debounce timing did not call it yet.\r\n   */\r\n  _maxDebounceTiming?: DebounceTiming | (() => DebounceTiming);\r\n  /**\r\n   * Defines the calling on the leading edge of the timeout.\r\n   */\r\n  _leading?: DebounceLeading | (() => DebounceLeading);\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<FunctionToDebounce>,\r\n    curr: Parameters<FunctionToDebounce>\r\n  ) => Parameters<FunctionToDebounce> | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced<FunctionToDebounce extends (...args: any) => any> {\r\n  (...args: Parameters<FunctionToDebounce>): ReturnType<FunctionToDebounce>;\r\n  _flush(): void;\r\n}\r\n\r\nexport const bind = <A extends any[], B extends any[], R>(\r\n  fn: (...args: [...A, ...B]) => R,\r\n  ...args: A\r\n): ((...args: B) => R) => fn.bind(0, ...args);\r\n\r\n/**\r\n * Creates a timeout and cleartimeout tuple. The timeout function always clears the previously created timeout before it runs.\r\n * @param timeout The timeout in ms. If no timeout (or 0) is passed requestAnimationFrame is used instead of setTimeout.\r\n * @returns A tuple with the timeout function as the first value and the clearTimeout function as the second value.\r\n */\r\nexport const selfClearTimeout = (timeout?: number | (() => number)) => {\r\n  let id: number;\r\n  const setTFn = timeout ? setT : rAF!;\r\n  const clearTFn = timeout ? clearT : cAF!;\r\n  return [\r\n    (callback: () => any) => {\r\n      clearTFn(id);\r\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n      // @ts-ignore\r\n      id = setTFn(() => callback(), isFunction(timeout) ? timeout() : timeout);\r\n    },\r\n    () => clearTFn(id),\r\n  ] as [timeout: (callback: () => any) => void, clear: () => void];\r\n};\r\n\r\nconst getDebouncer = (\r\n  debounceTiming: DebounceTiming | (() => DebounceTiming)\r\n): DebouncerFn | false | null | undefined | void => {\r\n  const debounceTimingResult = isFunction(debounceTiming) ? debounceTiming() : debounceTiming;\r\n  if (isNumber(debounceTimingResult)) {\r\n    const schedule = debounceTimingResult ? setT! : rAF!;\r\n    const clear = debounceTimingResult ? clearT : cAF;\r\n    return (task) => {\r\n      const timeoutId = schedule!(\r\n        () => task(),\r\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n        // @ts-ignore\r\n        debounceTimingResult\r\n      );\r\n      return () => {\r\n        clear!(timeoutId);\r\n      };\r\n    };\r\n  }\r\n\r\n  return debounceTimingResult && debounceTimingResult._debouncer;\r\n};\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 = <FunctionToDebounce extends (...args: any) => any>(\r\n  functionToDebounce: FunctionToDebounce,\r\n  options?: DebounceOptions<FunctionToDebounce>\r\n): Debounced<FunctionToDebounce> => {\r\n  const {\r\n    _debounceTiming: _timeout,\r\n    _maxDebounceTiming: _maxDelay,\r\n    _leading,\r\n    _mergeParams,\r\n  } = options || {};\r\n  let cancelMaxTimeoutDebouncer: (() => void) | undefined;\r\n  let cancelTimeoutDebounder: (() => void) | undefined;\r\n  let prevArguments: Parameters<FunctionToDebounce> | null | undefined;\r\n  let leadingInvoked: boolean | undefined;\r\n\r\n  const invokeFunctionToDebounce = function (args: Parameters<FunctionToDebounce>) {\r\n    if (cancelTimeoutDebounder) {\r\n      cancelTimeoutDebounder();\r\n    }\r\n    if (cancelMaxTimeoutDebouncer) {\r\n      cancelMaxTimeoutDebouncer();\r\n    }\r\n\r\n    leadingInvoked = cancelTimeoutDebounder = cancelMaxTimeoutDebouncer = prevArguments = undefined;\r\n    // eslint-disable-next-line\r\n    // @ts-ignore\r\n    functionToDebounce.apply(this, args);\r\n  };\r\n\r\n  const mergeParms = (\r\n    curr: Parameters<FunctionToDebounce>\r\n  ): Parameters<FunctionToDebounce> | false | null | undefined =>\r\n    _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n  const flush = () => {\r\n    /* istanbul ignore next */\r\n    if (cancelTimeoutDebounder && prevArguments) {\r\n      invokeFunctionToDebounce(mergeParms(prevArguments) || prevArguments);\r\n    }\r\n  };\r\n\r\n  const debouncedFn = function () {\r\n    // eslint-disable-next-line prefer-rest-params\r\n    const args: Parameters<FunctionToDebounce> = from(arguments) as Parameters<FunctionToDebounce>;\r\n    const timeoutDebouncer = getDebouncer(_timeout);\r\n\r\n    if (timeoutDebouncer) {\r\n      const leading = typeof _leading === 'function' ? _leading() : _leading;\r\n      const maxDelayDebouncer = getDebouncer(_maxDelay);\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 (cancelTimeoutDebounder) {\r\n        cancelTimeoutDebounder();\r\n      }\r\n\r\n      if (leading && !leadingInvoked) {\r\n        boundInvoke();\r\n        leadingInvoked = true;\r\n        cancelTimeoutDebounder = timeoutDebouncer(() => (leadingInvoked = undefined));\r\n      } else {\r\n        cancelTimeoutDebounder = timeoutDebouncer(boundInvoke);\r\n\r\n        if (maxDelayDebouncer && !cancelMaxTimeoutDebouncer) {\r\n          cancelMaxTimeoutDebouncer = maxDelayDebouncer(flush);\r\n        }\r\n      }\r\n\r\n      prevArguments = 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<FunctionToDebounce>;\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport type { PlainObject } from '../../typings';\r\nimport { isArray, isFunction, isPlainObject, isNull } from './types';\r\nimport { each } from './array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n  Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array<string> => (obj ? Object.keys(obj) : []);\r\n\r\ntype AssignDeep = {\r\n  <T, U>(target: T, object1: U): T & U;\r\n  <T, U, V>(target: T, object1: U, object2: V): T & U & V;\r\n  <T, U, V, W>(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\n  <T, U, V, W, X>(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\n  <T, U, V, W, X, Y>(\r\n    target: T,\r\n    object1: U,\r\n    object2: V,\r\n    object3: W,\r\n    object4: X,\r\n    object5: Y\r\n  ): T & U & V & W & X & Y;\r\n  <T, U, V, W, X, Y, Z>(\r\n    target: T,\r\n    object1?: U,\r\n    object2?: V,\r\n    object3?: W,\r\n    object4?: X,\r\n    object5?: Y,\r\n    object6?: Z\r\n  ): T & U & V & W & X & Y & Z;\r\n};\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport const assignDeep: AssignDeep = <T, U, V, W, X, Y, Z>(\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<any> = [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(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)) {\r\n        const src = target[key as keyof T];\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 as keyof T] = assignDeep(clone, copy) as any;\r\n      } else {\r\n        target[key as keyof T] = copyIsArray ? copy.slice() : 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\nexport const removeUndefinedProperties = <T extends PlainObject>(target: T, deep?: boolean): T =>\r\n  each(assignDeep({}, target), (value, key, copy) => {\r\n    if (value === undefined) {\r\n      delete copy[key];\r\n    } else if (deep && value && isPlainObject(value)) {\r\n      copy[key as keyof typeof copy] = removeUndefinedProperties(value, deep) as any;\r\n    }\r\n  });\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport const isEmptyObject = (obj: any): boolean => !keys(obj).length;\r\n","export const noop = () => {};\r\n","import { mathMax, mathMin } from './alias';\r\n\r\n/**\r\n * Caps the passed number between the `min` and `max` bounds.\r\n * @param min The min bound.\r\n * @param max The max bound.\r\n * @param number The number to be capped.\r\n * @returns The capped number between min and max.\r\n */\r\nexport const capNumber = (min: number, max: number, number: number) =>\r\n  mathMax(min, mathMin(max, number));\r\n","import type { HTMLElementTarget } from './types';\r\nimport { bind, deduplicateArray, each, from, isArray } from '../utils';\r\n\r\nexport type AttributeElementTarget = HTMLElementTarget | Element;\r\n\r\nexport type DomTokens = string | string[] | false | null | undefined | void;\r\n\r\nexport const getDomTokensArray = (tokens: DomTokens) =>\r\n  deduplicateArray((isArray(tokens) ? tokens : (tokens || '').split(' ')).filter((token) => token));\r\n\r\n/**\r\n * Gets a attribute with the given attribute of the given element.\r\n * @param elm The element of which the attribute shall be get.\r\n * @param attrName The attribute name which shall be get.\r\n * @returns The attribute value or `null` when the attribute is not set or `false` if the element is undefined.\r\n */\r\nexport const getAttr = (elm: AttributeElementTarget, attrName: string) =>\r\n  elm && elm.getAttribute(attrName);\r\n\r\n/**\r\n * Returns whether the given attribute exists on the given element.\r\n * @param elm The element.\r\n * @param attrName The attribute.\r\n * @returns A Truthy value indicates a present attrubte.\r\n */\r\nexport const hasAttr = (elm: AttributeElementTarget, attrName: string) =>\r\n  elm && elm.hasAttribute(attrName);\r\n\r\n/**\r\n * Sets the given attributes to the given element.\r\n * @param elm The element of which the attributes shall be removed.\r\n * @param attrName The attribute names separated by a space.\r\n */\r\nexport const setAttrs = (\r\n  elm: AttributeElementTarget,\r\n  attrNames: string | string[],\r\n  value: string | number | false | null | undefined\r\n) => {\r\n  each(getDomTokensArray(attrNames), (attrName) => {\r\n    if (elm) {\r\n      elm.setAttribute(attrName, String(value || ''));\r\n    }\r\n  });\r\n};\r\n\r\n/**\r\n * Removes the given attributes from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute names separated by a space.\r\n */\r\nexport const removeAttrs = (elm: AttributeElementTarget, attrNames: string | string[]): void => {\r\n  each(getDomTokensArray(attrNames), (attrName) => elm && elm.removeAttribute(attrName));\r\n};\r\n\r\nexport const domTokenListAttr = (elm: AttributeElementTarget, attrName: string) => {\r\n  const initialArr = getDomTokensArray(getAttr(elm, attrName));\r\n  const setElmAttr = bind(setAttrs, elm, attrName);\r\n  const domTokenListOperation = (operationTokens: DomTokens, operation: 'add' | 'delete') => {\r\n    const initialArrSet = new Set(initialArr);\r\n    each(getDomTokensArray(operationTokens), (token) => {\r\n      initialArrSet[operation](token);\r\n    });\r\n    return from(initialArrSet).join(' ');\r\n  };\r\n\r\n  return {\r\n    _remove: (removeTokens: DomTokens) => setElmAttr(domTokenListOperation(removeTokens, 'delete')),\r\n    _add: (addTokens: DomTokens) => setElmAttr(domTokenListOperation(addTokens, 'add')),\r\n    _has: (hasTokens: DomTokens) => {\r\n      const tokenSet = getDomTokensArray(hasTokens);\r\n      return tokenSet.reduce(\r\n        (boolean, token) => boolean && initialArr.includes(token),\r\n        tokenSet.length > 0\r\n      );\r\n    },\r\n  };\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and removes the given value from it.\r\n * @param elm The element.\r\n * @param attrName The attributeName to which the value shall be removed.\r\n * @param value The value which shall be removed.\r\n */\r\nexport const removeAttrClass = (\r\n  elm: AttributeElementTarget,\r\n  attrName: string,\r\n  value: DomTokens\r\n): (() => void) => {\r\n  domTokenListAttr(elm, attrName)._remove(value);\r\n  return bind(addAttrClass, elm, attrName, value);\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and adds value to it.\r\n * @param elm The element.\r\n * @param attrName The attributeName to which the value shall be added.\r\n * @param value The value which shall be added.\r\n */\r\nexport const addAttrClass = (\r\n  elm: AttributeElementTarget,\r\n  attrName: string,\r\n  value: DomTokens\r\n): (() => void) => {\r\n  domTokenListAttr(elm, attrName)._add(value);\r\n  return bind(removeAttrClass, elm, attrName, value);\r\n};\r\n\r\nexport const addRemoveAttrClass = (\r\n  elm: AttributeElementTarget,\r\n  attrName: string,\r\n  value: DomTokens,\r\n  add?: boolean\r\n) => (add ? addAttrClass : removeAttrClass)(elm, attrName, value);\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and checks if the given value is in it.\r\n * @param elm The element.\r\n * @param attrName The attributeName from which the content shall be checked.\r\n * @param value The value.\r\n * @returns True if the given attribute has the value in it, false otherwise.\r\n */\r\nexport const hasAttrClass = (\r\n  elm: AttributeElementTarget,\r\n  attrName: string,\r\n  value: DomTokens\r\n): boolean => domTokenListAttr(elm, attrName)._has(value);\r\n","import type { AttributeElementTarget, DomTokens } from './attribute';\r\nimport { each, from } from '../utils/array';\r\nimport { bind } from '../utils/function';\r\nimport { domTokenListAttr } from './attribute';\r\n\r\nconst createDomTokenListClass = (elm: AttributeElementTarget) => domTokenListAttr(elm, 'class');\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: AttributeElementTarget, className: DomTokens): boolean =>\r\n  createDomTokenListClass(elm)._has(className);\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: AttributeElementTarget, className: DomTokens): void => {\r\n  createDomTokenListClass(elm)._remove(className);\r\n};\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (elm: AttributeElementTarget, className: DomTokens): (() => void) => {\r\n  createDomTokenListClass(elm)._add(className);\r\n  return bind(removeClass, elm, className);\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (\r\n  classNameA: string | false | null | undefined,\r\n  classNameB: string | false | null | undefined\r\n) => {\r\n  const set = new Set<string>(classNameA ? classNameA.split(' ') : []);\r\n\r\n  each(classNameB ? classNameB.split(' ') : [], (className) => {\r\n    set[set.has(className) ? 'delete' : 'add'](className);\r\n  });\r\n\r\n  return from(set);\r\n};\r\n","import type { NodeElementTarget } from './types';\r\nimport { isElement } from '../utils/types';\r\nimport { push, from } from '../utils/array';\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\nexport const find = (selector: string, elm?: NodeElementTarget): Element[] => {\r\n  const rootElm = elm ? isElement(elm) && elm : document;\r\n  return rootElm ? from(rootElm.querySelectorAll(selector)) : [];\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\nexport const findFirst = (selector: string, elm?: NodeElementTarget): NodeElementTarget => {\r\n  const rootElm = elm ? isElement(elm) && elm : document;\r\n  return rootElm && rootElm.querySelector(selector);\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\nexport const is = (elm: NodeElementTarget, selector: string): boolean =>\r\n  isElement(elm) && elm.matches(selector);\r\n\r\nexport const isBodyElement = (elm: NodeElementTarget) => is(elm, 'body'); // don't do targetElement === ownerDocument.body in case initialization happens in memory\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\nexport const children = (elm: NodeElementTarget, selector?: string): ReadonlyArray<Element> => {\r\n  const childs: Array<Element> = [];\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\nexport const contents = (elm: NodeElementTarget): ReadonlyArray<ChildNode> =>\r\n  elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nexport const parent = (elm: NodeElementTarget): NodeElementTarget => elm && elm.parentElement;\r\n\r\n/**\r\n * Returns the closest element to the passed element which matches the given selector.\r\n * @param elm The element.\r\n * @param selector The selector.\r\n * @returns The closest element to the passed element which matches the given selector.\r\n */\r\nexport const closest = (elm: NodeElementTarget, selector: string): NodeElementTarget =>\r\n  isElement(elm) && elm.closest(selector);\r\n\r\n/**\r\n * Gets the focused element of the passed or default document.\r\n * @returns The focused element of the passed document.\r\n */\r\nexport const getFocusedElement = (doc?: Document) => (doc || document).activeElement;\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\nexport const liesBetween = (\r\n  elm: NodeElementTarget,\r\n  highBoundarySelector: string,\r\n  deepBoundarySelector: string\r\n): boolean => {\r\n  const closestHighBoundaryElm = closest(elm, highBoundarySelector);\r\n  const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n  const deepBoundaryIsValid =\r\n    closest(closestDeepBoundaryElm, highBoundarySelector) === closestHighBoundaryElm;\r\n\r\n  return closestHighBoundaryElm && closestDeepBoundaryElm\r\n    ? closestHighBoundaryElm === elm ||\r\n        closestDeepBoundaryElm === elm ||\r\n        (deepBoundaryIsValid &&\r\n          closest(closest(elm, deepBoundarySelector), highBoundarySelector) !==\r\n            closestHighBoundaryElm)\r\n    : false;\r\n};\r\n","import type { NodeElementTarget, NodeElementTargetCollection } from './types';\r\nimport { createOrKeepArray, each } from '../utils/array';\r\nimport { parent } from './traversal';\r\nimport { bind } from '../utils';\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: NodeElementTargetCollection): void => {\r\n  each(createOrKeepArray(nodes), (node) => {\r\n    const parentElm = parent(node);\r\n    if (node && parentElm) {\r\n      parentElm.removeChild(node);\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 * @returns A function which removes the inserted nodes.\r\n */\r\nexport const appendChildren = (node: NodeElementTarget, children: NodeElementTargetCollection) =>\r\n  bind(\r\n    removeElements,\r\n    node &&\r\n      children &&\r\n      each(createOrKeepArray(children), (child) => {\r\n        if (child) {\r\n          node.appendChild(child);\r\n        }\r\n      })\r\n  );\r\n","// at the time of implementation TypeScript doesn't offer any TrustedTypes typescript definitions\r\n// https://github.com/microsoft/TypeScript/issues/30024\r\nlet trustedTypePolicy: unknown | undefined;\r\n\r\nexport const getTrustedTypePolicy = () => trustedTypePolicy;\r\nexport const setTrustedTypePolicy = (newTrustedTypePolicy: unknown | undefined) => {\r\n  trustedTypePolicy = newTrustedTypePolicy;\r\n};\r\n","import { each } from '../utils/array';\r\nimport { setAttrs } from './attribute';\r\nimport { contents } from './traversal';\r\nimport { removeElements } from './manipulation';\r\nimport { getTrustedTypePolicy } from '../../trustedTypePolicy';\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  setAttrs(div, 'class', classNames);\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<Node> => {\r\n  const createdDiv = createDiv();\r\n  const trustedTypesPolicy = getTrustedTypePolicy();\r\n  const trimmedHtml = html.trim();\r\n  createdDiv.innerHTML = trustedTypesPolicy\r\n    ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n      (trustedTypesPolicy as any).createHTML(trimmedHtml)\r\n    : trimmedHtml;\r\n\r\n  return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import type { PlainObject, StyleObject, StyleObjectKey, StyleObjectValue } from '../../typings';\r\nimport type { XY } from './offset';\r\nimport type { HTMLElementTarget } from './types';\r\nimport { wnd } from '../utils/alias';\r\nimport { each, from } from '../utils/array';\r\nimport { isString, isNumber, isObject, isNull, isBoolean } from '../utils/types';\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 getCSSVal = (computedStyle: CSSStyleDeclaration, prop: StyleObjectKey): string =>\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  computedStyle.getPropertyValue(prop) || computedStyle[prop as any] || '';\r\n\r\nconst validFiniteNumber = (number: number) => {\r\n  const notNaN = number || 0;\r\n  return isFinite(notNaN) ? notNaN : 0;\r\n};\r\n\r\nconst parseToZeroOrNumber = (value?: string): number => validFiniteNumber(parseFloat(value || ''));\r\n\r\nexport const roundCssNumber = (value: number) => Math.round(value * 10000) / 10000;\r\n\r\nexport const ratioToCssPercent = (ratio: number) =>\r\n  `${roundCssNumber(validFiniteNumber(ratio) * 100)}%`;\r\n\r\nexport const numberToCssPx = (number: number) => `${roundCssNumber(validFiniteNumber(number))}px`;\r\n\r\nexport function setStyles(\r\n  elm: HTMLElementTarget,\r\n  styles: StyleObject | false | null | undefined\r\n): void {\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n  elm &&\r\n    styles &&\r\n    each(styles, (rawValue: StyleObjectValue, name) => {\r\n      try {\r\n        const elmStyle = elm.style;\r\n        const value =\r\n          isNull(rawValue) || isBoolean(rawValue)\r\n            ? ''\r\n            : isNumber(rawValue)\r\n              ? numberToCssPx(rawValue)\r\n              : rawValue;\r\n\r\n        if (name.indexOf('--') === 0) {\r\n          elmStyle.setProperty(name, value);\r\n        } else {\r\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n          elmStyle[name as any] = value;\r\n        }\r\n        // eslint-disable-next-line no-empty\r\n      } catch {}\r\n    });\r\n}\r\n\r\nexport function getStyles(\r\n  elm: HTMLElementTarget,\r\n  styles: Array<StyleObjectKey> | ReadonlyArray<StyleObjectKey>,\r\n  pseudoElm?: string | null | undefined\r\n): Partial<Record<StyleObjectKey, string>>;\r\nexport function getStyles(\r\n  elm: HTMLElementTarget,\r\n  styles: StyleObjectKey,\r\n  pseudoElm?: string | null | undefined\r\n): string;\r\nexport function getStyles(\r\n  elm: HTMLElementTarget,\r\n  styles: Array<StyleObjectKey> | ReadonlyArray<StyleObjectKey> | StyleObjectKey,\r\n  pseudoElm?: string | null | undefined\r\n): Partial<Record<StyleObjectKey, string>> | string {\r\n  const getSingleStyle = isString(styles);\r\n  let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n\r\n  if (elm) {\r\n    const computedStyle = wnd.getComputedStyle(elm, pseudoElm) || elm.style;\r\n    getStylesResult = getSingleStyle\r\n      ? getCSSVal(computedStyle, styles)\r\n      : from(styles).reduce((result, key) => {\r\n          result[key] = getCSSVal(computedStyle, key);\r\n          return result;\r\n        }, getStylesResult as PlainObject);\r\n  }\r\n  return getStylesResult;\r\n}\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n  elm?: HTMLElementTarget,\r\n  propertyPrefix?: string,\r\n  propertySuffix?: string\r\n): TRBL => {\r\n  const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n  const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n  const top = `${finalPrefix}top${finalSuffix}` as StyleObjectKey;\r\n  const right = `${finalPrefix}right${finalSuffix}` as StyleObjectKey;\r\n  const bottom = `${finalPrefix}bottom${finalSuffix}` as StyleObjectKey;\r\n  const left = `${finalPrefix}left${finalSuffix}` as StyleObjectKey;\r\n  const result = getStyles(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\r\nexport const getTrasformTranslateValue = (\r\n  value: string | number | XY<string | number>,\r\n  isHorizontal?: boolean\r\n) =>\r\n  `translate${\r\n    isObject(value) ? `(${value.x},${value.y})` : `${isHorizontal ? 'X' : 'Y'}(${value})`\r\n  }`;\r\n","import type { HTMLElementTarget } from './types';\r\nimport { getStyles } from './style';\r\nimport { mathRound, wnd } from '../utils/alias';\r\nimport { bind } from '../utils/function';\r\nimport { strHeight, strWidth } from '../utils/strings';\r\n\r\nexport interface WH<T = number> {\r\n  w: T;\r\n  h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n  !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n  w: 0,\r\n  h: 0,\r\n};\r\n\r\nconst getElmWidthHeightProperty = <E extends HTMLElement | Window>(\r\n  property: E extends HTMLElement ? 'client' | 'offset' | 'scroll' : 'inner',\r\n  elm: E | false | null | undefined\r\n): Readonly<WH> =>\r\n  elm\r\n    ? {\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        w: (elm as any)[`${property}Width`],\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        h: (elm as any)[`${property}Height`],\r\n      }\r\n    : zeroObj;\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const getWindowSize = (customWnd?: Window): Readonly<WH> =>\r\n  getElmWidthHeightProperty('inner', customWnd || wnd);\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 getOffsetSize = bind(getElmWidthHeightProperty<HTMLElement>, 'offset') satisfies (\r\n  elm: HTMLElementTarget\r\n) => Readonly<WH>;\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 getClientSize = bind(getElmWidthHeightProperty<HTMLElement>, 'client') satisfies (\r\n  elm: HTMLElementTarget\r\n) => Readonly<WH>;\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 getScrollSize = bind(getElmWidthHeightProperty<HTMLElement>, 'scroll') satisfies (\r\n  elm: HTMLElementTarget\r\n) => Readonly<WH>;\r\n\r\n/**\r\n * Returns the fractional- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the fractional- width and height shall be returned.\r\n */\r\nexport const getFractionalSize = (elm: HTMLElementTarget): Readonly<WH> => {\r\n  const cssWidth = parseFloat(getStyles(elm, strWidth)) || 0;\r\n  const cssHeight = parseFloat(getStyles(elm, strHeight)) || 0;\r\n  return {\r\n    w: cssWidth - mathRound(cssWidth),\r\n    h: cssHeight - mathRound(cssHeight),\r\n  };\r\n};\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElementTarget): boolean =>\r\n  !!elm && elementHasDimensions(elm);\r\n\r\n/**\r\n * Determines whether the passed DOM Rect has any dimensions.\r\n */\r\nexport const domRectHasDimensions = (rect?: DOMRectReadOnly | false | null) =>\r\n  !!(rect && (rect[strHeight] || rect[strWidth]));\r\n\r\n/**\r\n * Determines whether current DOM Rect has appeared according the the previous dom rect..\r\n * @param currContentRect The current DOM Rect.\r\n * @param prevContentRect The previous DOM Rect.\r\n * @returns Whether the dom rect appeared.\r\n */\r\nexport const domRectAppeared = (\r\n  currContentRect: DOMRectReadOnly | false | null | undefined,\r\n  prevContentRect: DOMRectReadOnly | false | null | undefined\r\n) => {\r\n  const rectHasDimensions = domRectHasDimensions(currContentRect);\r\n  const rectHadDimensions = domRectHasDimensions(prevContentRect);\r\n  return !rectHadDimensions && rectHasDimensions;\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport type { DomTokens } from './attribute';\r\nimport { each, runEachAndClear } from '../utils/array';\r\nimport { bind } from '../utils/function';\r\nimport { keys } from '../utils';\r\nimport { getDomTokensArray } from './attribute';\r\n\r\nexport interface EventListenerOptions {\r\n  _capture?: boolean;\r\n  _passive?: boolean;\r\n  _once?: boolean;\r\n}\r\n\r\nexport type EventListenerTarget = EventTarget | false | null | undefined;\r\n\r\nexport type EventListenerMap = {\r\n  [eventNames: string]: ((event: any) => any) | false | null | undefined;\r\n};\r\n\r\n/**\r\n * Removes the passed event listener for the passed event names 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 removeEventListener = <T extends Event = Event>(\r\n  target: EventListenerTarget,\r\n  eventNames: DomTokens,\r\n  listener: (event: T) => any,\r\n  capture?: boolean\r\n): void => {\r\n  each(getDomTokensArray(eventNames), (eventName) => {\r\n    if (target) {\r\n      target.removeEventListener(eventName, listener as EventListener, capture);\r\n    }\r\n  });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed event names 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 addEventListener = <T extends Event = Event>(\r\n  target: EventListenerTarget,\r\n  eventNames: DomTokens,\r\n  listener: ((event: T) => any) | false | null | undefined,\r\n  options?: EventListenerOptions\r\n): (() => void) => {\r\n  const passive = (options && options._passive) ?? true;\r\n  const capture = (options && options._capture) || false;\r\n  const once = (options && options._once) || false;\r\n  const nativeOptions: AddEventListenerOptions = {\r\n    passive,\r\n    capture,\r\n  };\r\n\r\n  return bind(\r\n    runEachAndClear,\r\n    getDomTokensArray(eventNames).map((eventName) => {\r\n      const finalListener = (\r\n        once\r\n          ? (evt: T) => {\r\n              removeEventListener(target, eventName, finalListener, capture);\r\n              if (listener) {\r\n                listener(evt);\r\n              }\r\n            }\r\n          : listener\r\n      ) as EventListener;\r\n\r\n      if (target) {\r\n        target.addEventListener(eventName, finalListener, nativeOptions);\r\n      }\r\n\r\n      return bind(removeEventListener, target, eventName, finalListener, capture);\r\n    })\r\n  );\r\n};\r\n\r\n/**\r\n * Adds the passed event listeners for the passed event names with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventListenerMap A map which descirbes the event names and event listeners to be added.\r\n * @param options The options of the added listeners.\r\n */\r\nexport const addEventListeners = (\r\n  target: EventListenerTarget,\r\n  eventListenerMap: EventListenerMap,\r\n  options?: EventListenerOptions\r\n): (() => void) =>\r\n  bind(\r\n    runEachAndClear,\r\n    keys(eventListenerMap).map((eventNames) =>\r\n      addEventListener(target, eventNames, eventListenerMap[eventNames], options)\r\n    )\r\n  );\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n  (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import type { XY } from './offset';\r\nimport type { WH } from './dimensions';\r\nimport { capNumber, isNumber, mathAbs, mathSign } from '../utils';\r\n\r\nexport interface ScrollCoordinates {\r\n  /** The start (origin) scroll coordinates for each axis. */\r\n  _start: XY<number>;\r\n  /** The end scroll coordinates for each axis. */\r\n  _end: XY<number>;\r\n}\r\n\r\n/**\r\n * Scroll the passed element to the passed position.\r\n * @param elm The element to be scrolled.\r\n * @param position The scroll position.\r\n */\r\nexport const scrollElementTo = (\r\n  elm: HTMLElement,\r\n  position: Partial<XY<number | false | null | undefined>> | number | false | null | undefined\r\n): void => {\r\n  const { x, y } = isNumber(position) ? { x: position, y: position } : position || {};\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n  isNumber(x) && (elm.scrollLeft = x);\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n  isNumber(y) && (elm.scrollTop = y);\r\n};\r\n\r\n/**\r\n * Get the scroll position of the passed element.\r\n * @param elm The element whose scroll position is to be obtained.\r\n */\r\nexport const getElementScroll = (elm: HTMLElement): Readonly<XY> => ({\r\n  x: elm.scrollLeft,\r\n  y: elm.scrollTop,\r\n});\r\n\r\n/**\r\n * Scroll Coordinates which are 0.\r\n */\r\nexport const getZeroScrollCoordinates = (): ScrollCoordinates => ({\r\n  _start: { x: 0, y: 0 },\r\n  _end: { x: 0, y: 0 },\r\n});\r\n\r\n/**\r\n * Sanatizes raw scroll coordinates.\r\n * The passed `overflowAmount` is used as the \"max\" value for each axis if the sign of the raw max value is not `0`.\r\n * Makes sure that each axis has `0` either in the start or end coordinates.\r\n * @param rawScrollCoordinates The raw scroll coordinates.\r\n * @param overflowAmount The overflow amount.\r\n * @returns\r\n */\r\nexport const sanitizeScrollCoordinates = (\r\n  rawScrollCoordinates: ScrollCoordinates,\r\n  overflowAmount: WH<number>\r\n) => {\r\n  const { _start, _end } = rawScrollCoordinates;\r\n  const { w, h } = overflowAmount;\r\n  const sanitizeAxis = (start: number, end: number, amount: number) => {\r\n    let newStart = mathSign(start) * amount;\r\n    let newEnd = mathSign(end) * amount;\r\n\r\n    if (newStart === newEnd) {\r\n      const startAbs = mathAbs(start);\r\n      const endAbs = mathAbs(end);\r\n\r\n      newEnd = startAbs > endAbs ? 0 : newEnd;\r\n      newStart = startAbs < endAbs ? 0 : newStart;\r\n    }\r\n\r\n    // in doubt set start to 0\r\n    newStart = newStart === newEnd ? 0 : newStart;\r\n\r\n    return [newStart + 0, newEnd + 0] as const; // \"+ 0\" prevents \"-0\" to be in the result\r\n  };\r\n\r\n  const [startX, endX] = sanitizeAxis(_start.x, _end.x, w);\r\n  const [startY, endY] = sanitizeAxis(_start.y, _end.y, h);\r\n\r\n  return {\r\n    _start: {\r\n      x: startX,\r\n      y: startY,\r\n    },\r\n    _end: {\r\n      x: endX,\r\n      y: endY,\r\n    },\r\n  };\r\n};\r\n\r\n/**\r\n * Returns whether the passed scroll coordinates represent the browsers default scroll direction.\r\n * For the default scroll direction the following must be true:\r\n * 1. Start value is `0`.\r\n * 2. End value <= Start value.\r\n * @param scrollCoordinates The scroll coordinates.\r\n */\r\nexport const isDefaultDirectionScrollCoordinates = ({\r\n  _start,\r\n  _end,\r\n}: ScrollCoordinates): XY<boolean> => {\r\n  const getAxis = (start: number, end: number) => start === 0 && start <= end;\r\n\r\n  return {\r\n    x: getAxis(_start.x, _end.x),\r\n    y: getAxis(_start.y, _end.y),\r\n  };\r\n};\r\n\r\n/**\r\n * Gets the current scroll percent between 0..1 for each axis.\r\n * @param scrollCoordinates The scroll coordinates.\r\n * @param currentScroll The current scroll position of the element.\r\n */\r\nexport const getScrollCoordinatesPercent = (\r\n  { _start, _end }: ScrollCoordinates,\r\n  currentScroll: XY<number>\r\n) => {\r\n  const getAxis = (start: number, end: number, current: number) =>\r\n    capNumber(0, 1, (start - current) / (start - end) || 0);\r\n\r\n  return {\r\n    x: getAxis(_start.x, _end.x, currentScroll.x),\r\n    y: getAxis(_start.y, _end.y, currentScroll.y),\r\n  };\r\n};\r\n\r\n/**\r\n * Gets the scroll position of the given percent.\r\n * @param scrollCoordinates The scroll coordinates.\r\n * @param percent The percentage of the scroll.\r\n */\r\nexport const getScrollCoordinatesPosition = (\r\n  { _start, _end }: ScrollCoordinates,\r\n  percent: XY<number>\r\n) => {\r\n  const getAxis = (start: number, end: number, p: number) => start + (end - start) * p;\r\n\r\n  return {\r\n    x: getAxis(_start.x, _end.x, percent.x),\r\n    y: getAxis(_start.y, _end.y, percent.y),\r\n  };\r\n};\r\n","import type { NodeElementTarget } from './types';\r\n// import { getAttr, removeAttrs, setAttrs } from './attribute';\r\n\r\nexport const focusElement = (element: NodeElementTarget /*, forceTabIndex?: boolean*/) => {\r\n  if (element && (element as HTMLElement).focus) {\r\n    // const tabIndexStr = 'tabindex';\r\n    // const originalTabIndex = getAttr(element as HTMLElement, tabIndexStr);\r\n    // if (forceTabIndex) {\r\n    //   setAttrs(element as HTMLElement, tabIndexStr, '-1');\r\n    // }\r\n\r\n    (element as HTMLElement).focus({\r\n      preventScroll: true,\r\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n      // @ts-ignore\r\n      focusVisible: false,\r\n    });\r\n\r\n    // if (forceTabIndex) {\r\n    //   if (originalTabIndex) {\r\n    //     setAttrs(element as HTMLElement, tabIndexStr, originalTabIndex);\r\n    //   } else {\r\n    //     removeAttrs(element as HTMLElement, tabIndexStr);\r\n    //   }\r\n    // }\r\n  }\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { isBoolean, isFunction, isString } from './utils/types';\r\nimport { keys } from './utils/object';\r\nimport { each, push, from, isEmptyArray, runEachAndClear, createOrKeepArray } from './utils/array';\r\nimport { bind } from './utils/function';\r\n\r\nexport type EventListener<EventArgs extends Record<string, any[]>, N extends keyof EventArgs> = (\r\n  ...args: EventArgs[N]\r\n) => void;\r\n\r\nexport type EventListeners<EventArgs extends Record<string, any[]>> = {\r\n  [K in keyof EventArgs]?: EventListener<EventArgs, K> | EventListener<EventArgs, K>[] | null;\r\n};\r\n\r\nexport type RemoveEvent<EventArgs extends Record<string, any[]>> = {\r\n  <N extends keyof EventArgs>(name?: N, listener?: EventListener<EventArgs, N>): void;\r\n  <N extends keyof EventArgs>(name?: N, listener?: EventListener<EventArgs, N>[]): void;\r\n  <N extends keyof EventArgs>(\r\n    name?: N,\r\n    listener?: EventListener<EventArgs, N> | EventListener<EventArgs, N>[]\r\n  ): void;\r\n};\r\n\r\nexport type AddEvent<EventArgs extends Record<string, any[]>> = {\r\n  (eventListeners: EventListeners<EventArgs>, pure?: boolean): () => void;\r\n  <N extends keyof EventArgs>(name: N, listener: EventListener<EventArgs, N>): () => void;\r\n  <N extends keyof EventArgs>(name: N, listener: EventListener<EventArgs, N>[]): () => void;\r\n  <N extends keyof EventArgs>(\r\n    nameOrEventListeners: N | EventListeners<EventArgs>,\r\n    listener?: EventListener<EventArgs, N> | EventListener<EventArgs, N>[] | boolean\r\n  ): () => void;\r\n};\r\n\r\nexport type TriggerEvent<EventArgs extends Record<string, any[]>> = {\r\n  <N extends keyof EventArgs>(name: N, args: EventArgs[N]): void;\r\n};\r\n\r\nexport type EventListenerHub<EventArgs extends Record<string, any[]>> = [\r\n  AddEvent<EventArgs>,\r\n  RemoveEvent<EventArgs>,\r\n  TriggerEvent<EventArgs>,\r\n];\r\n\r\nconst manageListener = <EventArgs extends Record<string, any[]>, N extends keyof EventArgs>(\r\n  callback: (listener?: EventListener<EventArgs, N>) => void,\r\n  listener?: EventListener<EventArgs, N> | EventListener<EventArgs, N>[]\r\n) => {\r\n  each(createOrKeepArray(listener), callback);\r\n};\r\n\r\nexport const createEventListenerHub = <EventArgs extends Record<string, any[]>>(\r\n  initialEventListeners?: EventListeners<EventArgs>\r\n): EventListenerHub<EventArgs> => {\r\n  const events = new Map<keyof EventArgs, Set<EventListener<EventArgs, keyof EventArgs>>>();\r\n\r\n  const removeEvent: RemoveEvent<EventArgs> = (name, listener) => {\r\n    if (name) {\r\n      const eventSet = events.get(name);\r\n      manageListener((currListener) => {\r\n        if (eventSet) {\r\n          eventSet[currListener ? 'delete' : 'clear'](currListener! as any);\r\n        }\r\n      }, listener);\r\n    } else {\r\n      events.forEach((eventSet) => {\r\n        eventSet.clear();\r\n      });\r\n      events.clear();\r\n    }\r\n  };\r\n\r\n  const addEvent: AddEvent<EventArgs> = (\r\n    nameOrEventListeners: keyof EventArgs | EventListeners<EventArgs>,\r\n    listenerOrPure?:\r\n      | EventListener<EventArgs, keyof EventArgs>\r\n      | EventListener<EventArgs, keyof EventArgs>[]\r\n      | boolean\r\n  ) => {\r\n    if (isString(nameOrEventListeners)) {\r\n      const eventSet = events.get(nameOrEventListeners) || new Set();\r\n      events.set(nameOrEventListeners, eventSet);\r\n\r\n      manageListener(\r\n        (currListener) => {\r\n          if (isFunction(currListener)) {\r\n            eventSet.add(currListener);\r\n          }\r\n        },\r\n        listenerOrPure as Exclude<typeof listenerOrPure, boolean>\r\n      );\r\n\r\n      return bind(\r\n        removeEvent,\r\n        nameOrEventListeners,\r\n        listenerOrPure as Exclude<typeof listenerOrPure, boolean>\r\n      );\r\n    }\r\n    if (isBoolean(listenerOrPure) && listenerOrPure) {\r\n      removeEvent();\r\n    }\r\n\r\n    const eventListenerKeys = keys(nameOrEventListeners) as (keyof EventListeners<EventArgs>)[];\r\n    const offFns: (() => void)[] = [];\r\n    each(eventListenerKeys, (key) => {\r\n      const eventListener = (nameOrEventListeners as EventListeners<EventArgs>)[key];\r\n      if (eventListener) {\r\n        push(offFns, addEvent(key, eventListener));\r\n      }\r\n    });\r\n\r\n    return bind(runEachAndClear, offFns);\r\n  };\r\n\r\n  const triggerEvent: TriggerEvent<EventArgs> = (name, args) => {\r\n    each(from(events.get(name)), (event) => {\r\n      if (args && !isEmptyArray(args)) {\r\n        (event as (...eventArgs: EventArgs[keyof EventArgs]) => void).apply(0, args);\r\n      } else {\r\n        (event as () => void)();\r\n      }\r\n    });\r\n  };\r\n\r\n  addEvent(initialEventListeners || {});\r\n\r\n  return [addEvent, removeEvent, triggerEvent];\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport type { OverlayScrollbars, OverlayScrollbarsStatic } from '../overlayscrollbars';\r\nimport type { EventListener, EventListenerArgs, EventListeners } from '../eventListeners';\r\nimport { each, keys } from '../support';\r\n\r\nexport type PluginModuleInstance = Record<string | number | symbol, any>;\r\n\r\nexport type InstancePluginEvent = {\r\n  /**\r\n   * Adds event listeners to the instance.\r\n   * @param eventListeners An object which contains the added listeners.\r\n   * @returns Returns a function which removes the added listeners.\r\n   */\r\n  (eventListeners: EventListeners): () => void;\r\n  /**\r\n   * Adds a single event listener to the instance.\r\n   * @param name The name of the event.\r\n   * @param listener The listener which is invoked on that event.\r\n   * @returns Returns a function which removes the added listeners.\r\n   */\r\n  <N extends keyof EventListenerArgs>(name: N, listener: EventListener<N>): () => void;\r\n  /**\r\n   * Adds multiple event listeners to the instance.\r\n   * @param name The name of the event.\r\n   * @param listener The listeners which are invoked on that event.\r\n   * @returns Returns a function which removes the added listeners.\r\n   */\r\n  <N extends keyof EventListenerArgs>(name: N, listener: EventListener<N>[]): () => void;\r\n};\r\n\r\n/**\r\n * Describes a OverlayScrollbars plugin module.\r\n * Plugin modules must be side-effect free and deterministic. (same input produces same output)\r\n */\r\nexport type PluginModule<\r\n  S extends PluginModuleInstance | void = PluginModuleInstance | void,\r\n  I extends PluginModuleInstance | void = PluginModuleInstance | void,\r\n> = (S extends PluginModuleInstance\r\n  ? {\r\n      /**\r\n       * Creates a plugin which is bound to the static object.\r\n       * The function will be called once with the static object as soon as the plugin is registered.\r\n       * The plugin can add new methods or fields to the passed static object.\r\n       * @param osStatic The static object the plugin is bound to.\r\n       * @returns The plugins instance object or a falsy value if the plugin doesn't need any instance object.\r\n       */\r\n      static: (osStatic: OverlayScrollbarsStatic) => S | void;\r\n    }\r\n  : object) &\r\n  (I extends PluginModuleInstance\r\n    ? {\r\n        /**\r\n         * Creates a A plugin which is bound to an instance.\r\n         * The function will be called each time a new instance is created.\r\n         * The plugin can add new methods or fields to the passed instance object.\r\n         * @param osInstance The instance object the plugin is bound to.\r\n         * @param event A function which adds events to the instance which can't be removed from outside the plugin. (instance events added with the `on` function can be removed with the optional `pure` parameter)\r\n         * @param osStatic The static object the plugin is bound to.\r\n         * @returns The plugins instance object or a falsy value if the plugin doesn't need any instance object.\r\n         */\r\n        instance: (\r\n          osInstance: OverlayScrollbars,\r\n          event: InstancePluginEvent,\r\n          osStatic: OverlayScrollbarsStatic\r\n        ) => I | void;\r\n      }\r\n    : object);\r\n\r\n/**\r\n * Describes a OverlayScrollbar plugin.\r\n */\r\nexport type Plugin<\r\n  Name extends string = string,\r\n  S extends PluginModuleInstance | void = PluginModuleInstance | void,\r\n  I extends PluginModuleInstance | void = PluginModuleInstance | void,\r\n> = {\r\n  /** The field is the plugins name. Plugin names must be globally unique, please choose wisely. */\r\n  [pluginName in Name]: PluginModule<S, I>;\r\n};\r\n\r\n/**\r\n * Describes a OverlayScrollbar plugin which has only a static module.\r\n */\r\nexport type StaticPlugin<\r\n  Name extends string = string,\r\n  T extends PluginModuleInstance = PluginModuleInstance,\r\n> = Plugin<Name, T, void>;\r\n\r\n/**\r\n * Describes a OverlayScrollbar plugin which has only a instance module.\r\n */\r\nexport type InstancePlugin<\r\n  Name extends string = string,\r\n  T extends PluginModuleInstance = PluginModuleInstance,\r\n> = Plugin<Name, void, T>;\r\n\r\n/**\r\n * Infers the type of the static modules instance of the passed plugin.\r\n */\r\nexport type InferStaticPluginModuleInstance<T extends StaticPlugin> =\r\n  T extends StaticPlugin<infer Name>\r\n    ? T[Name]['static'] extends (...args: any[]) => any\r\n      ? ReturnType<T[Name]['static']>\r\n      : void\r\n    : void;\r\n\r\n/**\r\n * Infers the type of the instance modules instance of the passed plugin.\r\n */\r\nexport type InferInstancePluginModuleInstance<T extends InstancePlugin> =\r\n  T extends InstancePlugin<infer Name>\r\n    ? T[Name]['instance'] extends (...args: any[]) => any\r\n      ? ReturnType<T[Name]['instance']>\r\n      : void\r\n    : void;\r\n\r\n/** All registered plugin modules. */\r\nexport const pluginModules: Record<string, PluginModule> = {};\r\n\r\n/** All static plugin module instances. */\r\nexport const staticPluginModuleInstances: Record<string, PluginModuleInstance | void> = {};\r\n\r\n/**\r\n * Adds plugins.\r\n * @param addedPlugin The plugin(s) to add.\r\n * @returns The added plugin modules of the registered plugins.\r\n */\r\nexport const addPlugins = (addedPlugin: Plugin[]) => {\r\n  each(addedPlugin, (plugin) =>\r\n    each(plugin, (_, key) => {\r\n      pluginModules[key] = plugin[key];\r\n    })\r\n  );\r\n};\r\n\r\nexport const registerPluginModuleInstances = (\r\n  plugin: Plugin,\r\n  staticObj: OverlayScrollbarsStatic,\r\n  instanceInfo?: [\r\n    instanceObj: OverlayScrollbars,\r\n    event: InstancePluginEvent,\r\n    instancePluginMap?: Record<string, PluginModuleInstance>,\r\n  ]\r\n): Array<PluginModuleInstance | void> =>\r\n  keys(plugin).map((name) => {\r\n    const { static: osStatic, instance: osInstance } = (\r\n      plugin as Plugin<string, PluginModuleInstance, PluginModuleInstance>\r\n    )[name];\r\n    const [instanceObj, event, instancePluginMap] = instanceInfo || [];\r\n    const ctor = instanceInfo ? osInstance : osStatic;\r\n    if (ctor) {\r\n      const instance = instanceInfo\r\n        ? (\r\n            ctor as Extract<\r\n              typeof ctor,\r\n              (\r\n                osInstance: OverlayScrollbars,\r\n                event: InstancePluginEvent,\r\n                osStatic: OverlayScrollbarsStatic\r\n              ) => PluginModuleInstance | void\r\n            >\r\n          )(instanceObj!, event!, staticObj)\r\n        : (\r\n            ctor as Extract<\r\n              typeof ctor,\r\n              (osStatic: OverlayScrollbarsStatic) => PluginModuleInstance | void\r\n            >\r\n          )(staticObj);\r\n      return ((instancePluginMap || staticPluginModuleInstances)[name] = instance);\r\n    }\r\n  });\r\n\r\nexport type GetInstancePluginModuleInstanceFn = <T extends InstancePlugin>(\r\n  pluginModuleName: T extends InstancePlugin<infer N> ? N : never\r\n) => InferInstancePluginModuleInstance<T> | undefined;\r\n\r\nexport const getInstancePluginModuleInstance = <T extends InstancePlugin>(\r\n  instancePluginModuleInstances: Record<string, PluginModuleInstance | void>,\r\n  pluginModuleName: T extends InstancePlugin<infer N> ? N : never\r\n): InferInstancePluginModuleInstance<T> | undefined =>\r\n  instancePluginModuleInstances[pluginModuleName] as\r\n    | InferInstancePluginModuleInstance<T>\r\n    | undefined;\r\n\r\nexport const getStaticPluginModuleInstance = <T extends StaticPlugin>(\r\n  pluginModuleName: T extends StaticPlugin<infer N> ? N : never\r\n): InferStaticPluginModuleInstance<T> | undefined =>\r\n  getInstancePluginModuleInstance(staticPluginModuleInstances, pluginModuleName) as\r\n    | InferStaticPluginModuleInstance<T>\r\n    | undefined;\r\n","function _extends() {\n  return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport type { PlainObject, DeepPartial } from '../../typings';\r\nimport type { OptionsObject } from '../../options';\r\nimport {\r\n  each,\r\n  hasOwnProperty,\r\n  keys,\r\n  push,\r\n  isEmptyObject,\r\n  type,\r\n  isUndefined,\r\n  isPlainObject,\r\n  isString,\r\n  createOrKeepArray,\r\n} from '../../support';\r\n\r\nexport type OptionsFunctionType = (this: any, ...args: any[]) => any;\r\nexport type OptionsTemplateType<T extends OptionsTemplateNativeTypes> = ExtractPropsKey<\r\n  OptionsTemplateTypeMap,\r\n  T\r\n>;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue<T extends OptionsTemplateNativeTypes = string> = T extends string\r\n  ? string extends T\r\n    ? OptionsTemplateValueNonEnum<T>\r\n    : string\r\n  : OptionsTemplateValueNonEnum<T>;\r\n\r\nexport type OptionsTemplate<T> = {\r\n  [P in keyof T]: T[P] extends OptionsObject\r\n    ? OptionsTemplate<T[P]>\r\n    : T[P] extends OptionsTemplateNativeTypes\r\n      ? OptionsTemplateValue<T[P]>\r\n      : never;\r\n};\r\n\r\nexport type OptionsValidationResult<T> = [\r\n  validated: DeepPartial<T>,\r\n  foreign: Record<string, unknown>,\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<any> | ReadonlyArray<any>;\r\n  __TPL_function_TYPE__: OptionsFunctionType;\r\n  __TPL_null_TYPE__: null;\r\n  __TPL_object_TYPE__: OptionsObject;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum<T extends OptionsTemplateNativeTypes> =\r\n  | OptionsTemplateType<T>\r\n  | [OptionsTemplateType<T>, ...Array<OptionsTemplateTypes>];\r\n\r\ntype ExtractPropsKey<T, TProps extends T[keyof T]> = {\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<boolean>;\r\n  readonly number: OptionsTemplateType<number>;\r\n  readonly string: OptionsTemplateType<string>;\r\n  readonly array: OptionsTemplateType<Array<any>>;\r\n  readonly object: OptionsTemplateType<OptionsObject>;\r\n  readonly function: OptionsTemplateType<OptionsFunctionType>;\r\n  readonly null: OptionsTemplateType<null>;\r\n};\r\n\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = {\r\n  boolean: '__TPL_boolean_TYPE__',\r\n  number: '__TPL_number_TYPE__',\r\n  string: '__TPL_string_TYPE__',\r\n  array: '__TPL_array_TYPE__',\r\n  object: '__TPL_object_TYPE__',\r\n  function: '__TPL_function_TYPE__',\r\n  null: '__TPL_null_TYPE__',\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n *  foreign   : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n *  validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object            : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object        : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = <T extends PlainObject>(\r\n  template: OptionsTemplate<T>,\r\n  options: DeepPartial<T>,\r\n  doWriteErrors?: boolean,\r\n  propPath?: string\r\n): OptionsValidationResult<T> => {\r\n  const validatedOptions: DeepPartial<T> = {};\r\n  const optionsCopy: DeepPartial<T> = { ...options };\r\n  const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n  each(props, (prop: Extract<keyof T, string>) => {\r\n    const optionsValue: any = options[prop];\r\n    const templateValue: PlainObject | string | OptionsTemplateTypes | Array<OptionsTemplateTypes> =\r\n      template[prop];\r\n    const templateIsComplex = isPlainObject(templateValue);\r\n    const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n    // if the template has a object as value, it means that the options are complex (nested)\r\n    if (templateIsComplex && isPlainObject(optionsValue)) {\r\n      const [validated, foreign] = validateRecursive(\r\n        templateValue as T,\r\n        optionsValue,\r\n        doWriteErrors,\r\n        propPrefix + prop\r\n      );\r\n      validatedOptions[prop] = validated as any;\r\n      optionsCopy[prop] = foreign as any;\r\n\r\n      each([optionsCopy, validatedOptions], (value) => {\r\n        if (isEmptyObject(value[prop])) {\r\n          delete value[prop];\r\n        }\r\n      });\r\n    } else if (!templateIsComplex) {\r\n      let isValid = false;\r\n      const errorEnumStrings: Array<string> = [];\r\n      const errorPossibleTypes: Array<string> = [];\r\n      const optionsValueType = type(optionsValue) as keyof typeof optionsTemplateTypes;\r\n      const templateValueArr: Array<string | OptionsTemplateTypes> =\r\n        createOrKeepArray(templateValue);\r\n\r\n      each(templateValueArr, (currTemplateType) => {\r\n        // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n        let typeString: string | undefined;\r\n        each(optionsTemplateTypes, (value: string, key: string) => {\r\n          if (value === currTemplateType) {\r\n            typeString = key;\r\n          }\r\n        });\r\n        const isEnumString = isUndefined(typeString);\r\n        if (isEnumString && isString(optionsValue)) {\r\n          // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n          const enumStringSplit = currTemplateType.split(' ');\r\n          isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n          // build error message\r\n          push(errorEnumStrings, enumStringSplit);\r\n        } else {\r\n          isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n        }\r\n\r\n        // build error message\r\n        push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n        // continue if invalid, break if valid\r\n        return !isValid;\r\n      });\r\n\r\n      if (isValid) {\r\n        validatedOptions[prop] = optionsValue;\r\n      } else if (doWriteErrors) {\r\n        console.warn(\r\n          `${\r\n            `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n            `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n          }${\r\n            errorEnumStrings.length > 0\r\n              ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n              : ''\r\n          }`\r\n        );\r\n      }\r\n\r\n      delete optionsCopy[prop];\r\n    }\r\n  });\r\n\r\n  return [validatedOptions, optionsCopy]; // optionsCopy equals now to foreign options\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a tuple which looks like:\r\n * [\r\n *  validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n *  foreign   : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * ]\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = <T extends PlainObject>(\r\n  template: OptionsTemplate<T>,\r\n  options: DeepPartial<T>,\r\n  doWriteErrors?: boolean\r\n): OptionsValidationResult<T> => validateRecursive<T>(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import type {\r\n  Options,\r\n  PartialOptions,\r\n  OverflowBehavior,\r\n  ScrollbarsVisibilityBehavior,\r\n  ScrollbarsAutoHideBehavior,\r\n  ScrollbarsClickScrollBehavior,\r\n} from '../../options';\r\nimport type { OptionsTemplate, OptionsTemplateValue } from './validation';\r\nimport type { StaticPlugin } from '../plugins';\r\nimport { validateOptions, optionsTemplateTypes as oTypes } from './validation';\r\n\r\nexport const optionsValidationPluginModuleName = '__osOptionsValidationPlugin';\r\n\r\nexport const OptionsValidationPlugin = /* @__PURE__ */ (() => ({\r\n  [optionsValidationPluginModuleName]: {\r\n    static: () => {\r\n      const numberAllowedValues: OptionsTemplateValue<number> = oTypes.number;\r\n      const booleanAllowedValues: OptionsTemplateValue<boolean> = oTypes.boolean;\r\n      const arrayNullValues: OptionsTemplateValue<Array<unknown> | null> = [\r\n        oTypes.array,\r\n        oTypes.null,\r\n      ];\r\n      const overflowAllowedValues: OptionsTemplateValue<OverflowBehavior> =\r\n        'hidden scroll visible visible-hidden';\r\n      const scrollbarsVisibilityAllowedValues: OptionsTemplateValue<ScrollbarsVisibilityBehavior> =\r\n        'visible hidden auto';\r\n      const scrollbarsAutoHideAllowedValues: OptionsTemplateValue<ScrollbarsAutoHideBehavior> =\r\n        'never scroll leavemove';\r\n      const scrollbarsClickScrollAllowedValues: OptionsTemplateValue<ScrollbarsClickScrollBehavior> =\r\n        [booleanAllowedValues, oTypes.string, oTypes.function];\r\n\r\n      const optionsTemplate: OptionsTemplate<Options> = {\r\n        paddingAbsolute: booleanAllowedValues, // true || false\r\n        showNativeOverlaidScrollbars: booleanAllowedValues, // true || false\r\n        update: {\r\n          elementEvents: arrayNullValues, // array of tuples || null\r\n          attributes: arrayNullValues,\r\n          debounce: [oTypes.number, oTypes.array, oTypes.object, oTypes.null], // number || number array || object || null\r\n          ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n          flowDirectionStyles: [oTypes.function, oTypes.null], // function || null\r\n        },\r\n        overflow: {\r\n          x: overflowAllowedValues, // visible-hidden  || visible-scroll || hidden || scroll\r\n          y: overflowAllowedValues, // visible-hidden  || visible-scroll || hidden || scroll\r\n        },\r\n        scrollbars: {\r\n          theme: [oTypes.string, oTypes.null], // string || null\r\n          visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto\r\n          autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n          autoHideDelay: numberAllowedValues, // number\r\n          autoHideSuspend: booleanAllowedValues, // true || false\r\n          dragScroll: booleanAllowedValues, // true || false\r\n          clickScroll: scrollbarsClickScrollAllowedValues, // true || false || instant\r\n          pointers: [oTypes.array, oTypes.null], // string array\r\n        },\r\n        /*\r\n        textarea: {\r\n          dynWidth: booleanAllowedValues, // true || false\r\n          dynHeight: booleanAllowedValues, // true || false\r\n          inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n        },\r\n        */\r\n      };\r\n      return (options: PartialOptions, doWriteErrors?: boolean): PartialOptions => {\r\n        const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n        return { ...foreign, ...validated };\r\n      };\r\n    },\r\n  },\r\n}))() satisfies StaticPlugin<typeof optionsValidationPluginModuleName>;\r\n","import { strOverflowX, strOverflowY } from './support';\r\n\r\nconst dataAttributePrefix = `data-overlayscrollbars`;\r\n\r\n// environment\r\nexport const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentScrollbarHidden = `${classNameEnvironment}-scrollbar-hidden`;\r\n\r\n// initialize\r\nexport const dataAttributeInitialize = `${dataAttributePrefix}-initialize`;\r\n\r\n// shared\r\nexport const dataValueNoClipping = 'noClipping';\r\n\r\n// body\r\nexport const dataAttributeHtmlBody = `${dataAttributePrefix}-body`;\r\n\r\n// host\r\nexport const dataAttributeHost = dataAttributePrefix;\r\nexport const dataValueHostIsHost = 'host';\r\n\r\n// viewport\r\nexport const dataAttributeViewport = `${dataAttributePrefix}-viewport`;\r\nexport const dataValueViewportOverflowXPrefix = strOverflowX;\r\nexport const dataValueViewportOverflowYPrefix = strOverflowY;\r\nexport const dataValueViewportArrange = 'arrange';\r\nexport const dataValueViewportMeasuring = 'measuring';\r\nexport const dataValueViewportScrolling = 'scrolling';\r\nexport const dataValueViewportScrollbarHidden = 'scrollbarHidden';\r\nexport const dataValueViewportNoContent = 'noContent';\r\n\r\n// padding\r\nexport const dataAttributePadding = `${dataAttributePrefix}-padding`;\r\n\r\n// content\r\nexport const dataAttributeContent = `${dataAttributePrefix}-content`;\r\n\r\n// size observer\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\n// trinsic observer\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\n// scrollbars\r\nexport const classNameScrollbarThemeNone = 'os-theme-none';\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarRtl = `${classNameScrollbar}-rtl`;\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = `${classNameScrollbar}-track`;\r\nexport const classNameScrollbarHandle = `${classNameScrollbar}-handle`;\r\nexport const classNameScrollbarVisible = `${classNameScrollbar}-visible`;\r\nexport const classNameScrollbarCornerless = `${classNameScrollbar}-cornerless`;\r\nexport const classNameScrollbarTransitionless = `${classNameScrollbar}-transitionless`;\r\nexport const classNameScrollbarInteraction = `${classNameScrollbar}-interaction`;\r\nexport const classNameScrollbarUnusable = `${classNameScrollbar}-unusable`;\r\nexport const classNameScrollbarAutoHide = `${classNameScrollbar}-auto-hide`;\r\nexport const classNameScrollbarAutoHideHidden = `${classNameScrollbarAutoHide}-hidden`;\r\nexport const classNameScrollbarWheel = `${classNameScrollbar}-wheel`;\r\nexport const classNameScrollbarTrackInteractive = `${classNameScrollbarTrack}-interactive`;\r\nexport const classNameScrollbarHandleInteractive = `${classNameScrollbarHandle}-interactive`;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport type { StaticPlugin } from '../plugins';\r\nimport {\r\n  createDOM,\r\n  appendChildren,\r\n  getOffsetSize,\r\n  addEventListener,\r\n  addClass,\r\n  equalWH,\r\n  cAF,\r\n  rAF,\r\n  stopPropagation,\r\n  bind,\r\n  scrollElementTo,\r\n  strWidth,\r\n  strHeight,\r\n  setStyles,\r\n} from '../../support';\r\nimport {\r\n  classNameSizeObserverListenerScroll,\r\n  classNameSizeObserverListenerItem,\r\n  classNameSizeObserverListenerItemFinal,\r\n} from '../../classnames';\r\n\r\nexport const sizeObserverPluginName = '__osSizeObserverPlugin';\r\n\r\nexport const SizeObserverPlugin = /* @__PURE__ */ (() => ({\r\n  [sizeObserverPluginName]: {\r\n    static:\r\n      () =>\r\n      (\r\n        listenerElement: HTMLElement,\r\n        onSizeChangedCallback: (appear: boolean) => any,\r\n        observeAppearChange: boolean | null | undefined\r\n      ): [appearCallback: () => void, offFns: (() => any)[]] => {\r\n        const scrollAmount = 3333333;\r\n        const scrollEventName = 'scroll';\r\n        const observerElementChildren = createDOM(\r\n          `<div class=\"${classNameSizeObserverListenerItem}\" dir=\"ltr\"><div class=\"${classNameSizeObserverListenerItem}\"><div class=\"${classNameSizeObserverListenerItemFinal}\"></div></div><div class=\"${classNameSizeObserverListenerItem}\"><div class=\"${classNameSizeObserverListenerItemFinal}\" style=\"width: 200%; height: 200%\"></div></div></div>`\r\n        );\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 = getOffsetSize(observerElementChildrenRoot);\r\n        let currSize = cacheSize;\r\n        let isDirty = false;\r\n        let rAFId: number;\r\n\r\n        const reset = () => {\r\n          scrollElementTo(expandElement, scrollAmount);\r\n          scrollElementTo(shrinkElement, scrollAmount);\r\n        };\r\n        const onResized = (appear?: unknown) => {\r\n          rAFId = 0;\r\n          if (isDirty) {\r\n            cacheSize = currSize;\r\n            onSizeChangedCallback(appear === true);\r\n          }\r\n        };\r\n        const onScroll = (scrollEvent?: Event | false) => {\r\n          currSize = getOffsetSize(observerElementChildrenRoot);\r\n          isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n          if (scrollEvent) {\r\n            stopPropagation(scrollEvent);\r\n\r\n            if (isDirty && !rAFId) {\r\n              cAF!(rAFId);\r\n              rAFId = rAF!(onResized);\r\n            }\r\n          } else {\r\n            onResized(scrollEvent === false);\r\n          }\r\n\r\n          reset();\r\n        };\r\n        const destroyFns = [\r\n          appendChildren(listenerElement, observerElementChildren),\r\n          addEventListener(expandElement, scrollEventName, onScroll),\r\n          addEventListener(shrinkElement, scrollEventName, onScroll),\r\n        ];\r\n\r\n        addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n\r\n        // lets assume that the divs will never be that large and a constant value is enough\r\n        setStyles(expandElementChild, {\r\n          [strWidth]: scrollAmount,\r\n          [strHeight]: scrollAmount,\r\n        });\r\n\r\n        rAF!(reset);\r\n\r\n        return [observeAppearChange ? bind(onScroll, false) : reset, destroyFns];\r\n      },\r\n  },\r\n}))() satisfies StaticPlugin<typeof sizeObserverPluginName>;\r\n","import type { Env } from '../../environment';\r\nimport type { Options, OptionsCheckFn, OverflowBehavior } from '../../options';\r\nimport type { OverflowStyle } from '../../typings';\r\nimport {\r\n  getStyles,\r\n  strHidden,\r\n  strOverflowX,\r\n  strOverflowY,\r\n  strScroll,\r\n  strVisible,\r\n  XY,\r\n} from '../../support';\r\n\r\nexport const getShowNativeOverlaidScrollbars = (checkOption: OptionsCheckFn<Options>, env: Env) => {\r\n  const { _nativeScrollbarsOverlaid } = env;\r\n  const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] = checkOption(\r\n    'showNativeOverlaidScrollbars'\r\n  );\r\n\r\n  return [\r\n    showNativeOverlaidScrollbarsOption &&\r\n      _nativeScrollbarsOverlaid.x &&\r\n      _nativeScrollbarsOverlaid.y,\r\n    showNativeOverlaidScrollbarsChanged,\r\n  ] as const;\r\n};\r\n\r\nexport const overflowIsVisible = (overflow: string) => overflow.indexOf(strVisible) === 0;\r\n\r\nexport const overflowBehaviorToOverflowStyle = (\r\n  overflowBehavior: OverflowBehavior\r\n): OverflowStyle => overflowBehavior.replace(`${strVisible}-`, '') as OverflowStyle;\r\n\r\nexport const overflowCssValueToOverflowStyle = (\r\n  cssValue: string | undefined,\r\n  hasOverflow?: boolean\r\n): OverflowStyle => {\r\n  if (cssValue === 'auto') {\r\n    return hasOverflow ? strScroll : strHidden;\r\n  }\r\n\r\n  const finalCssValue = cssValue || strHidden;\r\n  return [strHidden, strScroll, strVisible].includes(finalCssValue)\r\n    ? (finalCssValue as OverflowStyle)\r\n    : strHidden;\r\n};\r\n\r\nexport const getElementOverflowStyle = (\r\n  element: HTMLElement,\r\n  hasOverflow: Partial<XY<boolean>>\r\n): XY<OverflowStyle> => {\r\n  const { overflowX, overflowY } = getStyles(element, [strOverflowX, strOverflowY]);\r\n\r\n  return {\r\n    x: overflowCssValueToOverflowStyle(overflowX, hasOverflow.x),\r\n    y: overflowCssValueToOverflowStyle(overflowY, hasOverflow.y),\r\n  };\r\n};\r\n","import type { ObserversSetupState } from '../../setups';\r\nimport type { Options, OptionsCheckFn } from '../../options';\r\nimport type { StructureSetupElementsObj } from '../../setups/structureSetup/structureSetup.elements';\r\nimport type { Env } from '../../environment';\r\nimport type { WH, XY } from '../../support';\r\nimport type { DeepReadonly, OverflowStyle, StyleObject, StyleObjectKey } from '../../typings';\r\nimport type { StructureSetupState } from '../../setups/structureSetup';\r\nimport type { StaticPlugin } from '../plugins';\r\nimport {\r\n  getShowNativeOverlaidScrollbars,\r\n  getElementOverflowStyle,\r\n} from '../../setups/structureSetup/structureSetup.utils';\r\nimport { dataValueViewportArrange, dataAttributeViewport } from '../../classnames';\r\nimport {\r\n  keys,\r\n  noop,\r\n  each,\r\n  assignDeep,\r\n  strMarginBottom,\r\n  strMarginLeft,\r\n  strMarginRight,\r\n  strPaddingBottom,\r\n  strPaddingLeft,\r\n  strPaddingRight,\r\n  strPaddingTop,\r\n  getStyles,\r\n  setStyles,\r\n  removeAttrClass,\r\n  strWidth,\r\n  strScroll,\r\n} from '../../support';\r\n\r\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const ScrollbarsHidingPlugin = /* @__PURE__ */ (() => ({\r\n  [scrollbarsHidingPluginName]: {\r\n    static: () => ({\r\n      _viewportArrangement: (\r\n        structureSetupElements: DeepReadonly<StructureSetupElementsObj>,\r\n        structureSetupState: DeepReadonly<StructureSetupState>,\r\n        observersSetupState: DeepReadonly<ObserversSetupState>,\r\n        env: Env,\r\n        checkOptions: OptionsCheckFn<Options>\r\n      ) => {\r\n        const { _viewportIsTarget, _viewport } = structureSetupElements;\r\n        const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _nativeScrollbarsSize } = env;\r\n        const doViewportArrange =\r\n          !_viewportIsTarget &&\r\n          !_nativeScrollbarsHiding &&\r\n          (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n        const [showNativeOverlaidScrollbars] = getShowNativeOverlaidScrollbars(checkOptions, env);\r\n\r\n        /**\r\n         * Gets the hide offset matching the passed overflow state.\r\n         * @param viewportOverflowState The overflow state of the viewport\r\n         */\r\n        const _getViewportOverflowHideOffset = (viewportOverflowStyle: XY<OverflowStyle>) => {\r\n          const arrangeHideOffset =\r\n            _nativeScrollbarsHiding || showNativeOverlaidScrollbars ? 0 : 42;\r\n\r\n          const getHideOffsetPerAxis = (\r\n            isOverlaid: boolean,\r\n            overflowScroll: boolean,\r\n            nativeScrollbarSize: number\r\n          ) => {\r\n            const nonScrollbarStylingHideOffset = isOverlaid\r\n              ? arrangeHideOffset\r\n              : nativeScrollbarSize;\r\n            const scrollbarsHideOffset =\r\n              overflowScroll && !_nativeScrollbarsHiding ? nonScrollbarStylingHideOffset : 0;\r\n            const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset;\r\n\r\n            return [scrollbarsHideOffset, scrollbarsHideOffsetArrange] as const;\r\n          };\r\n\r\n          const [xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] = getHideOffsetPerAxis(\r\n            _nativeScrollbarsOverlaid.x,\r\n            viewportOverflowStyle.x === strScroll,\r\n            _nativeScrollbarsSize.x\r\n          );\r\n          const [yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] = getHideOffsetPerAxis(\r\n            _nativeScrollbarsOverlaid.y,\r\n            viewportOverflowStyle.y === strScroll,\r\n            _nativeScrollbarsSize.y\r\n          );\r\n\r\n          return {\r\n            _scrollbarsHideOffset: {\r\n              x: xScrollbarsHideOffset,\r\n              y: yScrollbarsHideOffset,\r\n            },\r\n            _scrollbarsHideOffsetArrange: {\r\n              x: xScrollbarsHideOffsetArrange,\r\n              y: yScrollbarsHideOffsetArrange,\r\n            },\r\n          };\r\n        };\r\n\r\n        /**\r\n         * Hides the native scrollbars according to the passed parameters.\r\n         * @param viewportOverflowStyle The viewport overflow style.\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          viewportOverflowStyle: XY<OverflowStyle>\r\n        ): StyleObject | undefined => {\r\n          if (!_viewportIsTarget) {\r\n            const { _directionIsRTL } = observersSetupState;\r\n            const viewportStyleObj: StyleObject = assignDeep(\r\n              {},\r\n              {\r\n                [strMarginRight]: 0,\r\n                [strMarginBottom]: 0,\r\n                [strMarginLeft]: 0,\r\n              }\r\n            );\r\n            const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } =\r\n              _getViewportOverflowHideOffset(viewportOverflowStyle);\r\n            const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n            const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n            const { _viewportPaddingStyle } = structureSetupState;\r\n            const horizontalMarginKey: keyof StyleObject = _directionIsRTL\r\n              ? strMarginLeft\r\n              : strMarginRight;\r\n            const viewportHorizontalPaddingKey: keyof StyleObject = _directionIsRTL\r\n              ? strPaddingLeft\r\n              : strPaddingRight;\r\n            const horizontalMarginValue = _viewportPaddingStyle[horizontalMarginKey] as number;\r\n            const verticalMarginValue = _viewportPaddingStyle[strMarginBottom] as number;\r\n            const horizontalPaddingValue = _viewportPaddingStyle[\r\n              viewportHorizontalPaddingKey\r\n            ] as number;\r\n            const verticalPaddingValue = _viewportPaddingStyle[strPaddingBottom] as number;\r\n\r\n            // horizontal\r\n            viewportStyleObj[strWidth] = `calc(100% + ${\r\n              hideOffsetY + horizontalMarginValue * -1\r\n            }px)`;\r\n            viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n            // vertical\r\n            viewportStyleObj[strMarginBottom] = -hideOffsetX + verticalMarginValue;\r\n\r\n            // viewport arrange additional styles\r\n            if (doViewportArrange) {\r\n              viewportStyleObj[viewportHorizontalPaddingKey] =\r\n                horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n              viewportStyleObj[strPaddingBottom] =\r\n                verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n            }\r\n\r\n            return viewportStyleObj;\r\n          }\r\n        };\r\n\r\n        /**\r\n         * Sets the styles of the viewport arrange element.\r\n         * @param viewportOverflowStyle The viewport overflow style 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          viewportOverflowStyle: XY<OverflowStyle>,\r\n          viewportScrollSize: WH<number>,\r\n          sizeFraction: WH<number>\r\n        ) => {\r\n          if (doViewportArrange) {\r\n            const { _viewportPaddingStyle } = structureSetupState;\r\n            const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } =\r\n              _getViewportOverflowHideOffset(viewportOverflowStyle);\r\n            const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n            const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n            const { _directionIsRTL } = observersSetupState;\r\n            const viewportArrangeHorizontalPaddingKey: keyof StyleObject = _directionIsRTL\r\n              ? strPaddingRight\r\n              : strPaddingLeft;\r\n            const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[\r\n              viewportArrangeHorizontalPaddingKey\r\n            ] as number;\r\n            const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;\r\n            const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;\r\n            const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;\r\n            const arrangeSize = {\r\n              w:\r\n                hideOffsetY && arrangeY\r\n                  ? `${\r\n                      hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue\r\n                    }px`\r\n                  : '',\r\n              h:\r\n                hideOffsetX && arrangeX\r\n                  ? `${\r\n                      hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue\r\n                    }px`\r\n                  : '',\r\n            };\r\n\r\n            setStyles(_viewport, {\r\n              '--os-vaw': arrangeSize.w,\r\n              '--os-vah': arrangeSize.h,\r\n            });\r\n          }\r\n\r\n          return doViewportArrange;\r\n        };\r\n\r\n        /**\r\n         * Removes all styles applied because of the viewport arrange strategy.\r\n         */\r\n        const _undoViewportArrange = () => {\r\n          if (doViewportArrange) {\r\n            const { _hasOverflow, _viewportPaddingStyle: viewportPaddingStyle } =\r\n              structureSetupState;\r\n            const viewportOverflowStyle = getElementOverflowStyle(_viewport, _hasOverflow);\r\n            const { _scrollbarsHideOffsetArrange } =\r\n              _getViewportOverflowHideOffset(viewportOverflowStyle);\r\n            const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n            const finalPaddingStyle: StyleObject = {};\r\n            const assignProps = (props: string[]) =>\r\n              each(props, (prop) => {\r\n                finalPaddingStyle[prop as StyleObjectKey] =\r\n                  viewportPaddingStyle[prop as StyleObjectKey];\r\n              });\r\n\r\n            if (arrangeX) {\r\n              assignProps([strMarginBottom, strPaddingTop, strPaddingBottom]);\r\n            }\r\n\r\n            if (arrangeY) {\r\n              assignProps([strMarginLeft, strMarginRight, strPaddingLeft, strPaddingRight]);\r\n            }\r\n\r\n            const prevStyle = getStyles(_viewport, keys(finalPaddingStyle) as StyleObjectKey[]);\r\n            const addArrange = removeAttrClass(\r\n              _viewport,\r\n              dataAttributeViewport,\r\n              dataValueViewportArrange\r\n            );\r\n\r\n            setStyles(_viewport, finalPaddingStyle);\r\n\r\n            return () => {\r\n              setStyles(\r\n                _viewport,\r\n                assignDeep({}, prevStyle, _hideNativeScrollbars(viewportOverflowStyle))\r\n              );\r\n              addArrange();\r\n            };\r\n          }\r\n          return noop;\r\n        };\r\n\r\n        return {\r\n          _arrangeViewport,\r\n          _undoViewportArrange,\r\n          _hideNativeScrollbars,\r\n        };\r\n      },\r\n    }),\r\n  },\r\n}))() satisfies StaticPlugin<typeof scrollbarsHidingPluginName>;\r\n","import type { StaticPlugin } from '../plugins';\r\nimport { animateNumber, assignDeep, isFunction, noop, selfClearTimeout } from '../../support';\r\nimport { ScrollbarsClickScrollBehavior, ScrollbarsClickScrollBehaviorOptions } from '../../options';\r\n\r\nexport const clickScrollPluginModuleName = '__osClickScrollPlugin';\r\n\r\nexport const ClickScrollPlugin = /* @__PURE__ */ (() => ({\r\n  [clickScrollPluginModuleName]: {\r\n    static:\r\n      () =>\r\n      (\r\n        scrollRelative: (deltaScroll: number) => void,\r\n        moveHandleRelative: (deltaMovement: number) => void,\r\n        getHandleOffset: () => number,\r\n        targetDeltaMovement: number,\r\n        viewportSize: number,\r\n        clickScrollOption: ScrollbarsClickScrollBehavior,\r\n        isHorizontal: boolean,\r\n        onClickScrollCompleted: (stopped: boolean) => void\r\n      ) => {\r\n        // click scroll animation has 2 main parts:\r\n        // 1. the \"click\"\r\n        // 2. the \"press\" which scrolls to the point where the cursor is located\r\n        // The \"click\" should not be canceled by a \"pointerup\" event because very fast clicks or taps would cancel it too fast\r\n        // The \"click\" should only be canceled by a subsequent \"pointerdown\" event because otherwise 2 animations would run\r\n        // The \"press\" should be canceld by the next \"pointerup\" event\r\n\r\n        // the animation flow:\r\n        // 1. The \"click\" which scroll distance x in a certain amount of time\r\n        // 2. Short delay after the click animation until the press animation starts\r\n        // 3. The press animation determines how many viewportSize distances it needs to reach the end point\r\n        // 4. The press animation wants to always finish the last viewportSize distance with a \"ease out\" animation\r\n        //    If the press animation needs to travel <=2.2 viewportSize distances to the target its a single \"ease in out\" animation\r\n        //    Otherwise the press animation does a linear scroll animation to (targetPoistion - clickDistance)\r\n        //    And the last viewportSize distance is then a \"ease out\" animation\r\n\r\n        let stopped = false;\r\n        let stopPressAnimation = noop;\r\n        const defaultClickScrollOptions: ScrollbarsClickScrollBehaviorOptions = {\r\n          clickScrollDistance: viewportSize,\r\n          clickScrollDuration: 200,\r\n          clickPressDelay: 150,\r\n          pressDistanceDuration: 90,\r\n        };\r\n        const easeOutQuad = (x: number) => 1 - (1 - x) * (1 - x);\r\n        const easeInOutQuad = (x: number) =>\r\n          x < 0.5 ? 2 * x * x : 1 - Math.pow(-2 * x + 2, 2) / 2;\r\n        const { clickScrollDistance, clickScrollDuration, clickPressDelay, pressDistanceDuration } =\r\n          assignDeep(\r\n            {},\r\n            defaultClickScrollOptions,\r\n            isFunction(clickScrollOption)\r\n              ? clickScrollOption(isHorizontal)\r\n              : defaultClickScrollOptions\r\n          );\r\n        const clickScrollDistanceIsTargetDeltaMovement = clickScrollDistance === 0;\r\n        const pressInOutMs = pressDistanceDuration * 2.3;\r\n        const pressOutMs = pressDistanceDuration * 2.5;\r\n        const viewportSizeScalingFactor = clickScrollDistance\r\n          ? viewportSize / clickScrollDistance\r\n          : 0;\r\n        const [setPressAnimationTimeout, clearPressAnimationTimeout] = selfClearTimeout(\r\n          // use a at least a very small delay here so `afterClickHandleOffset` is not the same as `beforeClickHandleOffset` because scroll didn't happen yet\r\n          Math.max(22, clickPressDelay)\r\n        );\r\n        const beforeClickHandleOffset = getHandleOffset();\r\n        const targetDeltaMovementSign = Math.sign(targetDeltaMovement);\r\n\r\n        const stopClickAnimation = animateNumber(\r\n          0,\r\n          clickScrollDistanceIsTargetDeltaMovement\r\n            ? targetDeltaMovement\r\n            : clickScrollDistance * targetDeltaMovementSign,\r\n          clickScrollDuration,\r\n          (clickAnimationProgress, _, clickAnimationCompleted) => {\r\n            if (clickScrollDistanceIsTargetDeltaMovement) {\r\n              moveHandleRelative(clickAnimationProgress);\r\n            } else {\r\n              scrollRelative(clickAnimationProgress);\r\n            }\r\n\r\n            if (clickAnimationCompleted) {\r\n              onClickScrollCompleted(stopped);\r\n\r\n              setPressAnimationTimeout(() => {\r\n                if (stopped || clickScrollDistanceIsTargetDeltaMovement || !pressDistanceDuration) {\r\n                  return;\r\n                }\r\n\r\n                const afterClickHandleOffset = getHandleOffset();\r\n                const clickScrollHandleDeltaMovement =\r\n                  afterClickHandleOffset - beforeClickHandleOffset;\r\n                const clickScrollHandleDeltaMovementViewportSize =\r\n                  clickScrollHandleDeltaMovement * viewportSizeScalingFactor;\r\n                const remainingTargetOffsetDistance =\r\n                  targetDeltaMovement - clickScrollHandleDeltaMovement;\r\n                const remainingClickScrollHandleDeltaMovements =\r\n                  clickScrollHandleDeltaMovementViewportSize\r\n                    ? remainingTargetOffsetDistance / clickScrollHandleDeltaMovementViewportSize\r\n                    : 0;\r\n                const isInOutAnimation = remainingClickScrollHandleDeltaMovements <= 2.2;\r\n                const durationScalingFactor = Math.max(\r\n                  1,\r\n                  remainingClickScrollHandleDeltaMovements || 0\r\n                );\r\n                const continueWithPress =\r\n                  (!remainingClickScrollHandleDeltaMovements ||\r\n                    remainingClickScrollHandleDeltaMovements > 0.5) &&\r\n                  Math.sign(remainingTargetOffsetDistance) === targetDeltaMovementSign;\r\n\r\n                if (continueWithPress) {\r\n                  stopPressAnimation = animateNumber(\r\n                    clickScrollHandleDeltaMovement,\r\n                    isInOutAnimation\r\n                      ? targetDeltaMovement\r\n                      : targetDeltaMovement - clickScrollHandleDeltaMovementViewportSize,\r\n                    isInOutAnimation\r\n                      ? pressInOutMs * durationScalingFactor\r\n                      : pressDistanceDuration * durationScalingFactor,\r\n                    (progress, _, completed) => {\r\n                      moveHandleRelative(progress);\r\n\r\n                      if (completed && !isInOutAnimation) {\r\n                        stopPressAnimation = animateNumber(\r\n                          progress,\r\n                          targetDeltaMovement,\r\n                          pressOutMs,\r\n                          moveHandleRelative,\r\n                          easeOutQuad\r\n                        );\r\n                      }\r\n                    },\r\n                    isInOutAnimation && easeInOutQuad\r\n                  );\r\n                }\r\n              });\r\n            }\r\n          },\r\n          easeInOutQuad\r\n        );\r\n\r\n        return (stopClick?: boolean) => {\r\n          stopped = true;\r\n\r\n          if (stopClick) {\r\n            stopClickAnimation();\r\n          }\r\n\r\n          clearPressAnimationTimeout();\r\n          stopPressAnimation();\r\n        };\r\n      },\r\n  },\r\n}))() satisfies StaticPlugin<typeof clickScrollPluginModuleName>;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport type { DeepPartial, DeepReadonly } from './typings';\r\nimport {\r\n  assignDeep,\r\n  each,\r\n  isObject,\r\n  keys,\r\n  isArray,\r\n  hasOwnProperty,\r\n  isFunction,\r\n  isEmptyObject,\r\n  concat,\r\n} from './support';\r\n\r\nexport type OptionsField = string;\r\n\r\nexport type OptionsPrimitiveValue =\r\n  | boolean\r\n  | number\r\n  | string\r\n  | Array<any>\r\n  | ReadonlyArray<any>\r\n  | [any]\r\n  | [any, ...any[]]\r\n  | ((this: any, ...args: any[]) => any)\r\n  | null;\r\n\r\nexport type OptionsObject = {\r\n  [field: OptionsField]: OptionsPrimitiveValue | OptionsObject;\r\n};\r\n\r\ntype OptionsObjectFieldNameTuples<T> = T extends OptionsPrimitiveValue\r\n  ? []\r\n  : {\r\n      [K in Extract<keyof T, OptionsField>]: [K, ...OptionsObjectFieldNameTuples<T[K]>];\r\n    }[Extract<keyof T, OptionsField>];\r\n\r\ntype JoinOptionsObjectFieldTuples<\r\n  T extends OptionsField[],\r\n  IncompletePath extends boolean = false,\r\n> = T extends [infer F]\r\n  ? F\r\n  : T extends [infer F, ...infer R]\r\n    ? F extends OptionsField\r\n      ?\r\n          | (IncompletePath extends true ? F : never)\r\n          | `${F}.${JoinOptionsObjectFieldTuples<Extract<R, OptionsField[]>>}`\r\n      : never\r\n    : OptionsField;\r\n\r\ntype SplitJoinedOptionsObjectFieldTuples<S extends string> = string extends S\r\n  ? OptionsField[]\r\n  : S extends ''\r\n    ? []\r\n    : S extends `${infer T}.${infer U}`\r\n      ? [T, ...SplitJoinedOptionsObjectFieldTuples<U>]\r\n      : [S];\r\n\r\ntype OptionsObjectFieldTuplesType<O, T extends OptionsField[]> = T extends [infer F]\r\n  ? F extends keyof O\r\n    ? O[F]\r\n    : never\r\n  : T extends [infer F, ...infer R]\r\n    ? F extends keyof O\r\n      ? O[F] extends OptionsPrimitiveValue\r\n        ? O[F]\r\n        : OptionsObjectFieldTuplesType<O[F], Extract<R, OptionsField[]>>\r\n      : never\r\n    : never;\r\n\r\ntype OptionsObjectFieldPath<O extends OptionsObject> = JoinOptionsObjectFieldTuples<\r\n  OptionsObjectFieldNameTuples<O>,\r\n  true\r\n>;\r\n\r\ntype OptionsObjectFieldPathType<\r\n  O extends OptionsObject,\r\n  P extends string,\r\n> = OptionsObjectFieldTuplesType<O, SplitJoinedOptionsObjectFieldTuples<P>>;\r\n\r\nconst opsStringify = (value: any) =>\r\n  JSON.stringify(value, (_, val) => {\r\n    if (isFunction(val)) {\r\n      throw 0;\r\n    }\r\n    return val;\r\n  });\r\n\r\nconst getPropByPath = <T>(obj: any, path: string): T =>\r\n  obj\r\n    ? `${path}`\r\n        .split('.')\r\n        .reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n    : (undefined as T);\r\n\r\n/**\r\n * The overflow behavior of an axis.\r\n */\r\nexport type OverflowBehavior =\r\n  /** No scrolling is possible and the content is clipped. */\r\n  | 'hidden'\r\n  /** No scrolling is possible and the content isn't clipped. */\r\n  | 'visible'\r\n  /** Scrolling is possible if there is an overflow. */\r\n  | 'scroll'\r\n  /**\r\n   * If the other axis has no overflow the behavior is similar to `visible`.\r\n   * If the other axis has overflow the behavior is similar to `hidden`.\r\n   */\r\n  | 'visible-hidden'\r\n  /**\r\n   * If the other axis has no overflow the behavior is similar to `visible`.\r\n   * If the other axis has overflow the behavior is similar to `scroll`.\r\n   */\r\n  | 'visible-scroll';\r\n\r\n/**\r\n * The scrollbars visibility behavior.\r\n */\r\nexport type ScrollbarsVisibilityBehavior =\r\n  /** The scrollbars are always visible. */\r\n  | 'visible'\r\n  /** The scrollbars are always hidden. */\r\n  | 'hidden'\r\n  /** The scrollbars are only visibile if there is overflow. */\r\n  | 'auto';\r\n\r\n/**\r\n * The scrollbars auto hide behavior\r\n */\r\nexport type ScrollbarsAutoHideBehavior =\r\n  /** The scrollbars are never hidden automatically. */\r\n  | 'never'\r\n  /** The scrollbars are hidden unless the user scrolls. */\r\n  | 'scroll'\r\n  /** The scrollbars are hidden unless the pointer moves in the host element or the user scrolls. */\r\n  | 'move'\r\n  /** The scrollbars are hidden if the pointer leaves the host element or unless the user scrolls. */\r\n  | 'leave';\r\n\r\nexport interface ScrollbarsClickScrollBehaviorOptions {\r\n  /** The scroll distance of the click scroll. If `0` the `clickScrollDistance` is the destination distance. Default: `one viewport unit`. */\r\n  clickScrollDistance: number;\r\n  /** The duration in milliseconds it takes to scroll the `clickScrollDistance`. Default `200`. */\r\n  clickScrollDuration: number;\r\n  /** The delay in milliseconds between click and press scroll. Default: `150`. */\r\n  clickPressDelay: number;\r\n  /** The duration in milliseconds it takes to travel one viewport unit during press scroll. Default: `90`. */\r\n  pressDistanceDuration: number;\r\n}\r\n\r\n/**\r\n * The scrollbar click scroll behavior.\r\n */\r\nexport type ScrollbarsClickScrollBehavior =\r\n  | boolean\r\n  | 'instant'\r\n  | ((\r\n      isHorizontal: boolean\r\n    ) => Partial<ScrollbarsClickScrollBehaviorOptions> | false | null | undefined | void);\r\n\r\n/**\r\n * If a tuple is provided you can customize the `timeout` and the `maxWait` in milliseconds. The third value `leading` indicates whether the debounce is also executed on the leading edge.\r\n * A single number customizes the `timeout` in milliseconds.\r\n * If the `timeout` is `0`, a debounce still exists. (its executed via `requestAnimationFrame`).\r\n */\r\nexport type OptionsDebounceValue =\r\n  | [\r\n      timeout?: number | false | null | undefined,\r\n      maxWait?: number | false | null | undefined,\r\n      leading?: boolean | null | undefined,\r\n    ]\r\n  | number\r\n  | false\r\n  | null;\r\n\r\n/**\r\n * @deprecated Use the debounce object instead.\r\n */\r\nexport type OptionsDebounceLegacy = OptionsDebounceValue;\r\n\r\n/**\r\n * The options of a OverlayScrollbars instance.\r\n */\r\nexport type Options = {\r\n  /** Whether the padding shall be absolute. */\r\n  paddingAbsolute: boolean;\r\n  /** Whether to show the native scrollbars. Has only an effect it the native scrollbars are overlaid. */\r\n  showNativeOverlaidScrollbars: boolean;\r\n  /** Customizes the automatic update behavior. */\r\n  update: {\r\n    /**\r\n     * The given Event(s) from the elements with the given selector(s) will trigger an update.\r\n     * Useful for everything the MutationObserver and ResizeObserver can't detect\r\n     * e.g.: and Images `load` event or the `transitionend` / `animationend` events.\r\n     */\r\n    elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n    /**\r\n     * Options to debounce updates to fine-tune performance.\r\n     * It is possible to debounce updates caused by mutations, resizes, events and environmental changes.\r\n     */\r\n    debounce:\r\n      | {\r\n          /** Debounce updates which were triggered by a MutationObserver. */\r\n          mutation: OptionsDebounceValue;\r\n          /** Debounce updates which were triggered by a ResizeObserver. */\r\n          resize: OptionsDebounceValue;\r\n          /** Debounce updates which were triggered by a Event. */\r\n          event: OptionsDebounceValue;\r\n          /** Debounce updates which were triggered by environmental changes. (e.g. zooming & window resize) */\r\n          env: OptionsDebounceValue;\r\n        }\r\n      | OptionsDebounceLegacy;\r\n    /**\r\n     * HTML attributes which will trigger an update if they're changed.\r\n     * Basic attributes like `id`, `class`, `style` etc. are always observed and doesn't have to be added explicitly.\r\n     */\r\n    attributes: string[] | null;\r\n    /**\r\n     * A function which makes it possible to ignore a content mutation or `null` if nothing shall be ignored.\r\n     * @param mutation The MutationRecord from the MutationObserver.\r\n     * @returns A Truthy value if the mutation shall be ignored, a falsy value otherwise.\r\n     */\r\n    ignoreMutation: ((mutation: MutationRecord) => boolean | null | undefined | void) | null;\r\n    /**\r\n     * A function which returns a map of styles which influence the viewports flow direction or `null` if the default behavior shall be used.\r\n     * The default behavior reads the computed `display`, `flexDirection`, `direction` and `writingMode` styles of the viewport element.\r\n     *\r\n     * This function can be used to skip or customize the expensive \"non default flow direction\" check:\r\n     * Use an empty style object to skip the check.\r\n     * Non-empty style objects will lead to a check when they change compared to the previously returned value.\r\n     *\r\n     * Examples of styles which influence the flow direction:\r\n     * - `direction: rtl`\r\n     * - `flexDirection: column-reverse`\r\n     * - `writingMode: vertical-rl`\r\n     * @param viewport The viewport element.\r\n     * @returns A map of styles which influence the viewports flow direction.\r\n     */\r\n    flowDirectionStyles:\r\n      | ((viewport: HTMLElement) => Record<string, unknown> | false | null | undefined | void)\r\n      | null;\r\n  };\r\n  /** Customizes the overflow behavior per axis. */\r\n  overflow: {\r\n    /** The overflow behavior of the horizontal (x) axis. */\r\n    x: OverflowBehavior;\r\n    /** The overflow behavior of the vertical (y) axis. */\r\n    y: OverflowBehavior;\r\n  };\r\n  /** Customizes appearance of the scrollbars. */\r\n  scrollbars: {\r\n    /**\r\n     * The scrollbars theme.\r\n     * The theme value will be added as `class` to all `scrollbar` elements of the instance.\r\n     */\r\n    theme: string | null;\r\n    /** The scrollbars visibility behavior. */\r\n    visibility: ScrollbarsVisibilityBehavior;\r\n    /** The scrollbars auto hide behavior. */\r\n    autoHide: ScrollbarsAutoHideBehavior;\r\n    /** The scrollbars auto hide delay in milliseconds. */\r\n    autoHideDelay: number;\r\n    /** Whether the scrollbars auto hide behavior is suspended until a scroll happened. */\r\n    autoHideSuspend: boolean;\r\n    /** Whether it is possible to drag the handle of a scrollbar to scroll the viewport. */\r\n    dragScroll: boolean;\r\n    /** Whether it is possible to click the track of a scrollbar to scroll the viewport. */\r\n    clickScroll: ScrollbarsClickScrollBehavior;\r\n    /**\r\n     * An array of pointer types which shall be supported.\r\n     * Common pointer types are: `mouse`, `pen` and `touch`.\r\n     * https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType\r\n     */\r\n    pointers: string[] | null;\r\n  };\r\n};\r\n\r\nexport type ReadonlyOptions = DeepReadonly<Options>;\r\n\r\nexport type PartialOptions = DeepPartial<Options>;\r\n\r\nexport type OptionsCheckFn<O extends OptionsObject> = <P extends OptionsObjectFieldPath<O>>(\r\n  path: P\r\n) => [value: OptionsObjectFieldPathType<O, P>, changed: boolean];\r\n\r\nexport const defaultOptionsUpdateDebounceMutation = [0, 33] satisfies OptionsDebounceValue;\r\nexport const defaultOptionsUpdateDebounceEvent = [33, 99] satisfies OptionsDebounceValue;\r\nexport const defaultOptionsUpdateDebounceEnv = [222, 666, true] satisfies OptionsDebounceValue;\r\nexport const defaultOptions: ReadonlyOptions = {\r\n  paddingAbsolute: false,\r\n  showNativeOverlaidScrollbars: false,\r\n  update: {\r\n    elementEvents: [['img', 'load']],\r\n    debounce: {\r\n      mutation: defaultOptionsUpdateDebounceMutation,\r\n      resize: null,\r\n      event: defaultOptionsUpdateDebounceEvent,\r\n      env: defaultOptionsUpdateDebounceEnv,\r\n    },\r\n    attributes: null,\r\n    ignoreMutation: null,\r\n    flowDirectionStyles: null,\r\n  },\r\n  overflow: {\r\n    x: 'scroll',\r\n    y: 'scroll',\r\n  },\r\n  scrollbars: {\r\n    theme: 'os-theme-dark',\r\n    visibility: 'auto',\r\n    autoHide: 'never',\r\n    autoHideDelay: 1300,\r\n    autoHideSuspend: false,\r\n    dragScroll: true,\r\n    clickScroll: false,\r\n    pointers: ['mouse', 'touch', 'pen'],\r\n  },\r\n} satisfies OptionsObject & Options;\r\n\r\nexport const getOptionsDiff = <T>(currOptions: T, newOptions: DeepPartial<T>): DeepPartial<T> => {\r\n  const diff: DeepPartial<T> = {};\r\n  const optionsKeys = concat(keys(newOptions), keys(currOptions)) as Array<\r\n    keyof T & keyof DeepPartial<T>\r\n  >;\r\n\r\n  each(optionsKeys, (optionKey) => {\r\n    const currOptionValue = currOptions[optionKey];\r\n    const newOptionValue = newOptions[optionKey];\r\n\r\n    if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n      assignDeep((diff[optionKey] = {} as any), getOptionsDiff(currOptionValue, newOptionValue));\r\n      // delete empty nested objects\r\n      if (isEmptyObject(diff[optionKey])) {\r\n        delete diff[optionKey];\r\n      }\r\n    } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n      let isDiff = true;\r\n\r\n      if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n        try {\r\n          if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n            isDiff = false;\r\n          }\r\n          // eslint-disable-next-line no-empty\r\n        } catch {}\r\n      }\r\n\r\n      if (isDiff) {\r\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n        // @ts-ignore\r\n        diff[optionKey] = newOptionValue;\r\n      }\r\n    }\r\n  });\r\n\r\n  return diff;\r\n};\r\n\r\nexport const createOptionCheck =\r\n  <T extends OptionsObject>(\r\n    options: T,\r\n    changedOptions: DeepPartial<T>,\r\n    force?: boolean\r\n  ): OptionsCheckFn<T> =>\r\n  (path) => [\r\n    getPropByPath(options, path),\r\n    force || getPropByPath(changedOptions, path) !== undefined,\r\n  ];\r\n","let nonce: string | undefined;\r\n\r\nexport const getNonce = () => nonce;\r\nexport const setNonce = (newNonce: string | undefined) => {\r\n  nonce = newNonce;\r\n};\r\n","import type { XY, EventListener } from './support';\r\nimport type { Options, PartialOptions } from './options';\r\nimport type { Initialization, PartialInitialization } from './initialization';\r\nimport type { StyleObjectKey } from './typings';\r\nimport { defaultOptions } from './options';\r\nimport { classNameEnvironment, classNameEnvironmentScrollbarHidden } from './classnames';\r\nimport {\r\n  createDOM,\r\n  addClass,\r\n  appendChildren,\r\n  getFractionalSize,\r\n  getClientSize,\r\n  getOffsetSize,\r\n  removeAttrs,\r\n  removeElements,\r\n  assignDeep,\r\n  createCache,\r\n  equalXY,\r\n  createEventListenerHub,\r\n  scrollT,\r\n  bind,\r\n  wnd,\r\n  getStyles,\r\n  isBodyElement,\r\n  isFunction,\r\n  addEventListener,\r\n} from './support';\r\nimport { getNonce } from './nonce';\r\n\r\ntype EnvironmentEventArgs = {\r\n  r: [scrollbarSizeChanged?: boolean];\r\n};\r\n\r\nexport interface Env {\r\n  readonly _nativeScrollbarsSize: XY;\r\n  readonly _nativeScrollbarsOverlaid: XY<boolean>;\r\n  readonly _nativeScrollbarsHiding: boolean;\r\n  readonly _scrollTimeline: boolean;\r\n  readonly _staticDefaultInitialization: Initialization;\r\n  readonly _staticDefaultOptions: Options;\r\n  _addResizeListener(listener: EventListener<EnvironmentEventArgs, 'r'>): () => void;\r\n  _getDefaultInitialization(): Initialization;\r\n  _setDefaultInitialization(newInitialization: PartialInitialization): Initialization;\r\n  _getDefaultOptions(): Options;\r\n  _setDefaultOptions(newDefaultOptions: PartialOptions): Options;\r\n}\r\n\r\nlet environmentInstance: Env;\r\n\r\nconst createEnvironment = (): Env => {\r\n  const getNativeScrollbarSize = (\r\n    measureElm: HTMLElement,\r\n    measureElmChild: HTMLElement,\r\n    clear?: boolean\r\n  ): XY => {\r\n    // fix weird safari issue where getComputedStyle returns all empty styles by appending twice\r\n    appendChildren(document.body, measureElm);\r\n    appendChildren(document.body, measureElm);\r\n\r\n    const cSize = getClientSize(measureElm);\r\n    const oSize = getOffsetSize(measureElm);\r\n    const fSize = getFractionalSize(measureElmChild);\r\n\r\n    if (clear) {\r\n      removeElements(measureElm);\r\n    }\r\n\r\n    return {\r\n      x: oSize.h - cSize.h + fSize.h,\r\n      y: oSize.w - cSize.w + fSize.w,\r\n    };\r\n  };\r\n\r\n  const getNativeScrollbarsHiding = (testElm: HTMLElement): boolean => {\r\n    let result = false;\r\n    const revertClass = addClass(testElm, classNameEnvironmentScrollbarHidden);\r\n    try {\r\n      result =\r\n        getStyles(testElm, 'scrollbar-width' as StyleObjectKey) === 'none' ||\r\n        getStyles(testElm, 'display', '::-webkit-scrollbar') === 'none';\r\n      // eslint-disable-next-line no-empty\r\n    } catch {}\r\n    revertClass();\r\n    return result;\r\n  };\r\n\r\n  // changes to this styles need to be reflected in the \"hide native scrollbars\" section of the structure styles\r\n  const envStyle = `.${classNameEnvironment}{scroll-behavior:auto!important;position:fixed;opacity:0;visibility:hidden;overflow:scroll;height:200px;width:200px;z-index:-1}.${classNameEnvironment} div{width:200%;height:200%;margin:10px 0}.${classNameEnvironmentScrollbarHidden}{scrollbar-width:none!important}.${classNameEnvironmentScrollbarHidden}::-webkit-scrollbar,.${classNameEnvironmentScrollbarHidden}::-webkit-scrollbar-corner{appearance:none!important;display:none!important;width:0!important;height:0!important}`;\r\n  const envDOM = createDOM(\r\n    `<div class=\"${classNameEnvironment}\"><div></div><style>${envStyle}</style></div>`\r\n  );\r\n  const envElm = envDOM[0] as HTMLElement;\r\n  const envChildElm = envElm.firstChild as HTMLElement;\r\n  const styleElm = envElm.lastChild as HTMLStyleElement;\r\n  const nonce = getNonce();\r\n\r\n  if (nonce) {\r\n    styleElm.nonce = nonce;\r\n  }\r\n\r\n  const [addEvent, , triggerEvent] = createEventListenerHub<EnvironmentEventArgs>();\r\n  const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache(\r\n    {\r\n      _initialValue: getNativeScrollbarSize(envElm, envChildElm),\r\n      _equal: equalXY,\r\n    },\r\n    bind(getNativeScrollbarSize, envElm, envChildElm, true)\r\n  );\r\n  const [nativeScrollbarsSize] = getNativeScrollbarSizeCache();\r\n  const nativeScrollbarsHiding = getNativeScrollbarsHiding(envElm);\r\n  const nativeScrollbarsOverlaid = {\r\n    x: nativeScrollbarsSize.x === 0,\r\n    y: nativeScrollbarsSize.y === 0,\r\n  };\r\n  const staticDefaultInitialization: Initialization = {\r\n    elements: {\r\n      host: null,\r\n      padding: !nativeScrollbarsHiding,\r\n      viewport: (target) => nativeScrollbarsHiding && isBodyElement(target) && target,\r\n      content: false,\r\n    },\r\n    scrollbars: {\r\n      slot: true,\r\n    },\r\n    cancel: {\r\n      nativeScrollbarsOverlaid: false,\r\n      body: null,\r\n    },\r\n  };\r\n  const staticDefaultOptions = assignDeep({}, defaultOptions);\r\n  const getDefaultOptions = bind(\r\n    assignDeep as typeof assignDeep<Options, Options>,\r\n    {} as Options,\r\n    staticDefaultOptions\r\n  );\r\n  const getDefaultInitialization = bind(\r\n    assignDeep as typeof assignDeep<Initialization, Initialization>,\r\n    {} as Initialization,\r\n    staticDefaultInitialization\r\n  );\r\n\r\n  const env: Env = {\r\n    _nativeScrollbarsSize: nativeScrollbarsSize,\r\n    _nativeScrollbarsOverlaid: nativeScrollbarsOverlaid,\r\n    _nativeScrollbarsHiding: nativeScrollbarsHiding,\r\n    _scrollTimeline: !!scrollT,\r\n    _addResizeListener: bind(addEvent, 'r'),\r\n    _getDefaultInitialization: getDefaultInitialization,\r\n    _setDefaultInitialization: (newInitializationStrategy) =>\r\n      assignDeep(staticDefaultInitialization, newInitializationStrategy) &&\r\n      getDefaultInitialization(),\r\n    _getDefaultOptions: getDefaultOptions,\r\n    _setDefaultOptions: (newDefaultOptions) =>\r\n      assignDeep(staticDefaultOptions, newDefaultOptions) && getDefaultOptions(),\r\n    _staticDefaultInitialization: assignDeep({}, staticDefaultInitialization),\r\n    _staticDefaultOptions: assignDeep({}, staticDefaultOptions),\r\n  };\r\n\r\n  removeAttrs(envElm, 'style');\r\n  removeElements(envElm);\r\n\r\n  // needed in case content has css viewport units\r\n  addEventListener(wnd, 'resize', () => {\r\n    triggerEvent('r', []);\r\n  });\r\n\r\n  if (\r\n    isFunction(wnd.matchMedia) &&\r\n    !nativeScrollbarsHiding &&\r\n    (!nativeScrollbarsOverlaid.x || !nativeScrollbarsOverlaid.y)\r\n  ) {\r\n    const addZoomListener = (onZoom: () => void) => {\r\n      const media = wnd.matchMedia(`(resolution: ${wnd.devicePixelRatio}dppx)`);\r\n      addEventListener(\r\n        media,\r\n        'change',\r\n        () => {\r\n          onZoom();\r\n          addZoomListener(onZoom);\r\n        },\r\n        {\r\n          _once: true,\r\n        }\r\n      );\r\n    };\r\n    addZoomListener(() => {\r\n      const [updatedNativeScrollbarSize, nativeScrollbarSizeChanged] =\r\n        updateNativeScrollbarSizeCache();\r\n\r\n      assignDeep(env._nativeScrollbarsSize, updatedNativeScrollbarSize); // keep the object and just re-assign!\r\n      triggerEvent('r', [nativeScrollbarSizeChanged]);\r\n    });\r\n  }\r\n\r\n  return env;\r\n};\r\n\r\nexport const getEnvironment = (): Env => {\r\n  if (!environmentInstance) {\r\n    environmentInstance = createEnvironment();\r\n  }\r\n  return environmentInstance;\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport {\r\n  each,\r\n  noop,\r\n  MutationObserverConstructor,\r\n  addEventListener,\r\n  is,\r\n  find,\r\n  push,\r\n  runEachAndClear,\r\n  bind,\r\n  isEmptyArray,\r\n  deduplicateArray,\r\n  inArray,\r\n  concat,\r\n  getAttr,\r\n  isString,\r\n} from '../support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedThroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n  _attributes?: string[];\r\n  /**\r\n   * A function which can ignore a changed attribute if it returns true.\r\n   * for DOMTargetObserver this applies to the changes to the observed target\r\n   * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n   */\r\n  _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n  _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n  _nestedTargetSelector?: string;\r\n  _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ninterface DOMTargetObserverOptions extends DOMObserverOptionsBase {\r\n  /**\r\n   * Marks certain attributes as style changing, should be a subset of the _attributes prop.\r\n   * Used to set the \"targetStyleChanged\" param in the DOMTargetObserverCallback.\r\n   */\r\n  _styleChangingAttributes?: string[] | readonly string[];\r\n}\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n  | Array<ContentChangeArrayItem>\r\n  | false\r\n  | null\r\n  | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n  mutation: MutationRecord,\r\n  isNestedTarget: boolean,\r\n  domObserverTarget: HTMLElement,\r\n  domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n  target: Node,\r\n  attributeName: string,\r\n  oldAttributeValue: string | null,\r\n  newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback<ContentObserver extends boolean> = ContentObserver extends true\r\n  ? DOMContentObserverCallback\r\n  : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions<ContentObserver extends boolean> = ContentObserver extends true\r\n  ? DOMContentObserverOptions\r\n  : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver<ContentObserver extends boolean> = [\r\n  construct: () => () => void,\r\n  update: () => void | false | Parameters<DOMObserverCallback<ContentObserver>>,\r\n];\r\n\r\ntype EventContentChangeUpdateElement = (\r\n  getElements?: (selector: string) => Node[],\r\n  removed?: boolean\r\n) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n  target: HTMLElement,\r\n  callback: (...args: any) => any,\r\n  eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n  let destroyed = false;\r\n  const map = eventContentChange ? new WeakMap<Node, (() => any)[]>() : false; // weak map to prevent memory leak for detached elements\r\n  const destroy = () => {\r\n    destroyed = true;\r\n  };\r\n  const updateElements: EventContentChangeUpdateElement = (getElements) => {\r\n    if (map && eventContentChange) {\r\n      const eventElmList = eventContentChange.map((item) => {\r\n        const [selector, eventNames] = item || [];\r\n        const elements = eventNames && selector ? (getElements || find)(selector, target) : [];\r\n        return [elements, eventNames] as const;\r\n      });\r\n\r\n      each(eventElmList, (item) =>\r\n        each(item[0], (elm) => {\r\n          const eventNames = item[1];\r\n          const entries = map.get(elm) || [];\r\n          const isTargetChild = target.contains(elm);\r\n\r\n          if (isTargetChild && eventNames) {\r\n            const removeListener = addEventListener(elm, eventNames, (event: Event) => {\r\n              if (destroyed) {\r\n                removeListener();\r\n                map.delete(elm);\r\n              } else {\r\n                callback(event);\r\n              }\r\n            });\r\n            map.set(elm, push(entries, removeListener));\r\n          } else {\r\n            runEachAndClear(entries);\r\n            map.delete(elm);\r\n          }\r\n        })\r\n      );\r\n    }\r\n  };\r\n\r\n  updateElements();\r\n\r\n  return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = <ContentObserver extends boolean>(\r\n  target: HTMLElement,\r\n  isContentObserver: ContentObserver,\r\n  callback: DOMObserverCallback<ContentObserver>,\r\n  options?: DOMObserverOptions<ContentObserver>\r\n): DOMObserver<ContentObserver> => {\r\n  let isConnected = false;\r\n  const {\r\n    _attributes,\r\n    _styleChangingAttributes,\r\n    _eventContentChange,\r\n    _nestedTargetSelector,\r\n    _ignoreTargetChange,\r\n    _ignoreContentChange,\r\n  } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n  const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n    target,\r\n    () => isConnected && (callback as DOMContentObserverCallback)(true),\r\n    _eventContentChange\r\n  );\r\n\r\n  // MutationObserver\r\n  const finalAttributes = _attributes || [];\r\n  const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n  const observedAttributes = concat(finalAttributes, finalStyleChangingAttributes);\r\n  const observerCallback = (\r\n    fromRecords: boolean,\r\n    mutations: MutationRecord[]\r\n  ): void | Parameters<DOMObserverCallback<ContentObserver>> => {\r\n    if (!isEmptyArray(mutations)) {\r\n      const ignoreTargetChange = _ignoreTargetChange || noop;\r\n      const ignoreContentChange = _ignoreContentChange || noop;\r\n      const totalChangedNodes: Node[] = [];\r\n      const targetChangedAttrs: string[] = [];\r\n      let targetStyleChanged: boolean | '' | null | undefined = false;\r\n      let contentChanged: boolean | '' | null | undefined = false;\r\n      let childListChanged: boolean | '' | null | undefined = false;\r\n\r\n      each(mutations, (mutation) => {\r\n        const {\r\n          attributeName,\r\n          target: mutationTarget,\r\n          type,\r\n          oldValue,\r\n          addedNodes,\r\n          removedNodes,\r\n        } = mutation;\r\n        const isAttributesType = type === 'attributes';\r\n        const isChildListType = type === 'childList';\r\n        const targetIsMutationTarget = target === mutationTarget;\r\n        const isAttrChange = isAttributesType && attributeName;\r\n        const newValue =\r\n          isAttrChange && getAttr(mutationTarget as HTMLElement, attributeName || '');\r\n        // narrow down attributeValue type to `string` or `null` but don't overwrite `<empty string>` with `null`\r\n        const attributeValue = isString(newValue) ? newValue : null;\r\n        const attributeChanged = isAttrChange && oldValue !== attributeValue;\r\n        const styleChangingAttrChanged =\r\n          inArray(finalStyleChangingAttributes, attributeName) && attributeChanged;\r\n\r\n        // if is content observer and something changed in children\r\n        if (isContentObserver && (isChildListType || !targetIsMutationTarget)) {\r\n          const contentAttrChanged = isAttributesType && attributeChanged;\r\n          const isNestedTarget =\r\n            contentAttrChanged &&\r\n            _nestedTargetSelector &&\r\n            is(mutationTarget, _nestedTargetSelector);\r\n          const baseAssertion = isNestedTarget\r\n            ? !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue)\r\n            : !isAttributesType || contentAttrChanged;\r\n          const contentFinalChanged =\r\n            baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n          each(addedNodes, (node) => push(totalChangedNodes, node));\r\n          each(removedNodes, (node) => push(totalChangedNodes, node));\r\n\r\n          contentChanged = contentChanged || contentFinalChanged;\r\n          childListChanged = childListChanged || isChildListType;\r\n        }\r\n        // if is target observer and target attr changed\r\n        if (\r\n          !isContentObserver &&\r\n          targetIsMutationTarget &&\r\n          attributeChanged &&\r\n          !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n        ) {\r\n          push(targetChangedAttrs, attributeName);\r\n          targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n        }\r\n      });\r\n\r\n      // adds / removes the new elements from the event content change\r\n      updateEventContentChangeElements((selector: string) =>\r\n        deduplicateArray(totalChangedNodes).reduce<Node[]>((arr, node) => {\r\n          push(arr, find(selector, node));\r\n          return is(node, selector) ? push(arr, node) : arr;\r\n        }, [])\r\n      );\r\n\r\n      if (isContentObserver) {\r\n        if (!fromRecords && contentChanged) {\r\n          (callback as DOMContentObserverCallback)(false);\r\n        }\r\n        return [false] satisfies Parameters<DOMObserverCallback<true>> as Parameters<\r\n          DOMObserverCallback<ContentObserver>\r\n        >;\r\n      }\r\n\r\n      if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n        const args = [\r\n          deduplicateArray(targetChangedAttrs),\r\n          targetStyleChanged,\r\n        ] satisfies Parameters<DOMTargetObserverCallback> & Parameters<DOMObserverCallback<false>>;\r\n\r\n        if (!fromRecords) {\r\n          (callback as DOMTargetObserverCallback).apply(0, args);\r\n        }\r\n\r\n        return args as Parameters<DOMObserverCallback<ContentObserver>>;\r\n      }\r\n    }\r\n  };\r\n  const mutationObserver: MutationObserver = new MutationObserverConstructor!(\r\n    bind(observerCallback, false)\r\n  );\r\n\r\n  return [\r\n    () => {\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        if (isConnected) {\r\n          destroyEventContentChange();\r\n          mutationObserver.disconnect();\r\n          isConnected = false;\r\n        }\r\n      };\r\n    },\r\n    () => {\r\n      if (isConnected) {\r\n        return observerCallback(true, mutationObserver.takeRecords());\r\n      }\r\n    },\r\n  ];\r\n};\r\n","import type { SizeObserverPlugin } from '../plugins';\r\nimport {\r\n  createCache,\r\n  createDOM,\r\n  runEachAndClear,\r\n  addEventListener,\r\n  addClass,\r\n  push,\r\n  ResizeObserverConstructor,\r\n  appendChildren,\r\n  domRectHasDimensions,\r\n  bind,\r\n  noop,\r\n  domRectAppeared,\r\n  concat,\r\n  debounce,\r\n  isBoolean,\r\n  isArray,\r\n  isEmptyArray,\r\n} from '../support';\r\nimport {\r\n  classNameSizeObserver,\r\n  classNameSizeObserverAppear,\r\n  classNameSizeObserverListener,\r\n} from '../classnames';\r\nimport { getStaticPluginModuleInstance, sizeObserverPluginName } from '../plugins';\r\n\r\nexport interface SizeObserverOptions {\r\n  /** Whether appearing should be observed. */\r\n  _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n  _sizeChanged: boolean;\r\n  _appear?: boolean;\r\n}\r\n\r\nexport type SizeObserver = () => () => void;\r\n\r\nlet resizeObserverBoxSupport: boolean | null = null;\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  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n  options?: SizeObserverOptions\r\n): SizeObserver => {\r\n  const { _appear: observeAppearChange } = options || {};\r\n  const sizeObserverPlugin =\r\n    getStaticPluginModuleInstance<typeof SizeObserverPlugin>(sizeObserverPluginName);\r\n  const [updateResizeObserverContentRectCache] = createCache<DOMRectReadOnly | false>({\r\n    _initialValue: false,\r\n    _alwaysUpdateValues: true,\r\n  });\r\n\r\n  return () => {\r\n    const destroyFns: (() => void)[] = [];\r\n    const polyfillElements = createDOM(\r\n      `<div class=\"${classNameSizeObserver}\"><div class=\"${classNameSizeObserverListener}\"></div></div>`\r\n    );\r\n    const polyfillRootElement = polyfillElements[0] as HTMLElement;\r\n    const polyfillTargetElement = polyfillRootElement.firstChild as HTMLElement;\r\n\r\n    const onSizeChangedCallbackProxy = (sizeChangedContext?: ResizeObserverEntry[] | boolean) => {\r\n      const isResizeObserverCall = isArray(sizeChangedContext) && !isEmptyArray(sizeChangedContext);\r\n\r\n      let skip = false;\r\n      let appear = false;\r\n\r\n      // if triggered from RO.\r\n      if (isResizeObserverCall) {\r\n        const resizeObserverEntry = sizeChangedContext[0];\r\n        const [currContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n          resizeObserverEntry.contentRect\r\n        );\r\n        const hasDimensions = domRectHasDimensions(currContentRect);\r\n        appear = domRectAppeared(currContentRect, prevContentRect);\r\n        skip = !appear && !hasDimensions; // skip if display is none or when window resize\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 (!skip) {\r\n        onSizeChangedCallback({\r\n          _sizeChanged: true,\r\n          _appear: appear,\r\n        });\r\n      }\r\n    };\r\n\r\n    if (ResizeObserverConstructor) {\r\n      if (!isBoolean(resizeObserverBoxSupport)) {\r\n        const detectSupportResizeObserver = new ResizeObserverConstructor(noop);\r\n        detectSupportResizeObserver.observe(target, {\r\n          // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n          // @ts-ignore -> void === undefined\r\n          get box() {\r\n            resizeObserverBoxSupport = true;\r\n          },\r\n        });\r\n        resizeObserverBoxSupport = resizeObserverBoxSupport || false;\r\n        detectSupportResizeObserver.disconnect();\r\n      }\r\n\r\n      /*\r\n      const { port1, port2 } = new MessageChannel();\r\n      const tasks: Set<() => void> = new Set();\r\n      const debounceTiming: DebounceTiming = {\r\n        _debouncer: (task) => {\r\n          tasks.add(task);\r\n          port2.postMessage(0);\r\n          return () => {\r\n            tasks.delete(task);\r\n          };\r\n        },\r\n      };\r\n      port1.onmessage = () => {\r\n        tasks.forEach((task) => task());\r\n      };\r\n      */\r\n      const debouncedOnSizeChangedCallbackProxy = debounce(onSizeChangedCallbackProxy, {\r\n        _debounceTiming: 0,\r\n        _maxDebounceTiming: 0,\r\n      });\r\n      const resizeObserverCallback = (entries: ResizeObserverEntry[]) =>\r\n        debouncedOnSizeChangedCallbackProxy(entries);\r\n      const contentBoxResizeObserver = new ResizeObserverConstructor(resizeObserverCallback);\r\n      contentBoxResizeObserver.observe(resizeObserverBoxSupport ? target : polyfillTargetElement);\r\n\r\n      push(destroyFns, [\r\n        () => {\r\n          contentBoxResizeObserver.disconnect();\r\n          /*\r\n          port1.close();\r\n          port2.close();\r\n          tasks.clear();\r\n          */\r\n        },\r\n        !resizeObserverBoxSupport && appendChildren(target, polyfillRootElement),\r\n      ]);\r\n\r\n      if (resizeObserverBoxSupport) {\r\n        const borderBoxResizeObserver = new ResizeObserverConstructor(resizeObserverCallback);\r\n        borderBoxResizeObserver.observe(target, {\r\n          box: 'border-box',\r\n        });\r\n        push(destroyFns, () => borderBoxResizeObserver.disconnect());\r\n      }\r\n    } else if (sizeObserverPlugin) {\r\n      const [pluginAppearCallback, pluginDestroyFns] = sizeObserverPlugin(\r\n        polyfillTargetElement,\r\n        onSizeChangedCallbackProxy,\r\n        observeAppearChange\r\n      );\r\n      push(\r\n        destroyFns,\r\n        concat(\r\n          [\r\n            addClass(polyfillRootElement, classNameSizeObserverAppear),\r\n            addEventListener(polyfillRootElement, 'animationstart', pluginAppearCallback),\r\n            appendChildren(target, polyfillRootElement),\r\n          ],\r\n          pluginDestroyFns\r\n        )\r\n      );\r\n    } else {\r\n      return noop;\r\n    }\r\n\r\n    return bind(runEachAndClear, destroyFns);\r\n  };\r\n};\r\n","import type { WH, CacheValues } from '../support';\r\nimport { createSizeObserver } from './sizeObserver';\r\nimport { classNameTrinsicObserver } from '../classnames';\r\nimport {\r\n  createDiv,\r\n  getOffsetSize,\r\n  runEachAndClear,\r\n  createCache,\r\n  push,\r\n  IntersectionObserverConstructor,\r\n  appendChildren,\r\n  bind,\r\n} from '../support';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type TrinsicObserverCallback = (heightIntrinsic: CacheValues<boolean>) => any;\r\nexport type TrinsicObserver = [\r\n  construct: () => () => void,\r\n  update: () => void | false | null | undefined | Parameters<TrinsicObserverCallback>,\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: TrinsicObserverCallback\r\n): TrinsicObserver => {\r\n  let intersectionObserverInstance: undefined | IntersectionObserver;\r\n  const isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH<number>): boolean =>\r\n    (ioEntryOrSize as WH<number>).h === 0 ||\r\n    (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n    (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n  const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n  const [updateHeightIntrinsicCache] = createCache({\r\n    _initialValue: false,\r\n  });\r\n  const triggerOnTrinsicChangedCallback = (\r\n    updateValue: IntersectionObserverEntry | WH<number> | undefined,\r\n    fromRecords?: boolean\r\n  ): void | Parameters<TrinsicObserverCallback> => {\r\n    if (updateValue) {\r\n      const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n      const [, heightIntrinsicChanged] = heightIntrinsic;\r\n      return (\r\n        heightIntrinsicChanged &&\r\n        !fromRecords &&\r\n        onTrinsicChangedCallback(heightIntrinsic) && [heightIntrinsic]\r\n      );\r\n    }\r\n  };\r\n  const intersectionObserverCallback = (\r\n    fromRecords: boolean,\r\n    entries: IntersectionObserverEntry[]\r\n  ) => triggerOnTrinsicChangedCallback(entries.pop(), fromRecords);\r\n\r\n  return [\r\n    () => {\r\n      const destroyFns: (() => void)[] = [];\r\n\r\n      if (IntersectionObserverConstructor) {\r\n        intersectionObserverInstance = new IntersectionObserverConstructor(\r\n          bind(intersectionObserverCallback, false),\r\n          { root: target }\r\n        );\r\n        intersectionObserverInstance.observe(trinsicObserver);\r\n        push(destroyFns, () => {\r\n          intersectionObserverInstance!.disconnect();\r\n        });\r\n      } else {\r\n        const onSizeChanged = () => {\r\n          const newSize = getOffsetSize(trinsicObserver);\r\n          triggerOnTrinsicChangedCallback(newSize);\r\n        };\r\n        push(destroyFns, createSizeObserver(trinsicObserver, onSizeChanged)());\r\n        onSizeChanged();\r\n      }\r\n\r\n      return bind(runEachAndClear, push(destroyFns, appendChildren(target, trinsicObserver)));\r\n    },\r\n    () =>\r\n      intersectionObserverInstance &&\r\n      intersectionObserverCallback(true, intersectionObserverInstance.takeRecords()),\r\n  ];\r\n};\r\n","import type { Options, OptionsCheckFn, OptionsDebounceValue } from '../../options';\r\nimport type { ScrollbarsHidingPlugin } from '../../plugins';\r\nimport type { SizeObserverCallbackParams } from '../../observers';\r\nimport type { StructureSetupElementsObj } from '../structureSetup/structureSetup.elements';\r\nimport type { Setup, SetupUpdateInfo, StructureSetupState } from '../../setups';\r\nimport type { CacheValues, DebounceLeading, DebounceTiming, WH } from '../../support';\r\nimport type { DeepReadonly, PlainObject } from '../../typings';\r\nimport { defaultOptionsUpdateDebounceEnv, defaultOptionsUpdateDebounceEvent } from '../../options';\r\nimport { getStaticPluginModuleInstance, scrollbarsHidingPluginName } from '../../plugins';\r\nimport {\r\n  classNameScrollbar,\r\n  dataAttributeHost,\r\n  dataAttributeViewport,\r\n  dataValueViewportMeasuring,\r\n  dataValueViewportArrange,\r\n  dataValueNoClipping,\r\n} from '../../classnames';\r\nimport { getEnvironment } from '../../environment';\r\nimport { createDOMObserver, createSizeObserver, createTrinsicObserver } from '../../observers';\r\nimport {\r\n  ResizeObserverConstructor,\r\n  assignDeep,\r\n  closest,\r\n  createCache,\r\n  debounce,\r\n  equalWH,\r\n  getFractionalSize,\r\n  isArray,\r\n  isFunction,\r\n  isNumber,\r\n  isPlainObject,\r\n  keys,\r\n  liesBetween,\r\n  getScrollSize,\r\n  getElementScroll,\r\n  scrollElementTo,\r\n  domRectAppeared,\r\n  concat,\r\n  getStyles,\r\n  hasAttrClass,\r\n} from '../../support';\r\n\r\nexport interface ObserversSetupState {\r\n  _heightIntrinsic: boolean;\r\n  _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface ObserversSetupUpdateInfo extends SetupUpdateInfo {\r\n  _takeRecords?: boolean;\r\n}\r\n\r\nexport type ObserversSetupUpdateHints = {\r\n  _sizeChanged?: boolean;\r\n  _directionChanged?: boolean;\r\n  _heightIntrinsicChanged?: boolean;\r\n  _hostMutation?: boolean;\r\n  _contentMutation?: boolean;\r\n  _appear?: boolean;\r\n  _scrollbarSizeChanged?: boolean;\r\n};\r\n\r\nexport type ObserversSetup = Setup<\r\n  ObserversSetupUpdateInfo,\r\n  ObserversSetupState,\r\n  ObserversSetupUpdateHints\r\n>;\r\n\r\nexport const createObserversSetup = (\r\n  structureSetupElements: DeepReadonly<StructureSetupElementsObj>,\r\n  structureSetupState: DeepReadonly<StructureSetupState>,\r\n  getCurrentOption: OptionsCheckFn<Options>,\r\n  onObserversUpdated: (updateHints: DeepReadonly<ObserversSetupUpdateHints>) => void\r\n): ObserversSetup => {\r\n  // latest debounce options\r\n  let debounceMutation: OptionsDebounceValue | undefined;\r\n  let debounceResize: OptionsDebounceValue | undefined;\r\n  let debounceEvent: OptionsDebounceValue | undefined;\r\n  let debounceEnv: OptionsDebounceValue | undefined;\r\n\r\n  let updateContentMutationObserver: (() => void) | undefined;\r\n  let destroyContentMutationObserver: (() => void) | undefined;\r\n  let prevContentRect: DOMRectReadOnly | undefined;\r\n  let prevDirectionIsRTL: boolean | undefined;\r\n  const hostSelector = `[${dataAttributeHost}]`;\r\n\r\n  // TODO: observer textarea attrs if textarea\r\n\r\n  const viewportSelector = `[${dataAttributeViewport}]`;\r\n  const baseStyleChangingAttrs = ['id', 'class', 'style', 'open', 'wrap', 'cols', 'rows'];\r\n  const {\r\n    _target,\r\n    _host,\r\n    _viewport,\r\n    _scrollOffsetElement,\r\n    _content,\r\n    _viewportIsTarget,\r\n    _isBody,\r\n    _viewportHasClass,\r\n    _viewportAddRemoveClass,\r\n    _removeScrollObscuringStyles,\r\n  } = structureSetupElements;\r\n  const getDirectionIsRTL = (elm: HTMLElement): boolean => getStyles(elm, 'direction') === 'rtl';\r\n  const createDebouncedObservesUpdate = () => {\r\n    let currDebounceTiming: DebounceTiming;\r\n    let currMaxDebounceTiming: DebounceTiming;\r\n    let currDebounceLeading: DebounceLeading;\r\n    const debouncedFn = debounce(onObserversUpdated, {\r\n      _debounceTiming: () => currDebounceTiming,\r\n      _maxDebounceTiming: () => currMaxDebounceTiming,\r\n      _leading: () => currDebounceLeading,\r\n      _mergeParams(prev, curr) {\r\n        const [prevObj] = prev;\r\n        const [currObj] = curr;\r\n        return [\r\n          concat(keys(prevObj), keys(currObj)).reduce((obj, key) => {\r\n            obj[key] = prevObj[key as keyof typeof prevObj] || currObj[key as keyof typeof currObj];\r\n            return obj;\r\n          }, {} as PlainObject),\r\n        ] as [Partial<ObserversSetupUpdateHints>];\r\n      },\r\n    });\r\n    const fn = (\r\n      updateHints: ObserversSetupUpdateHints,\r\n      debounceOption: OptionsDebounceValue | false | undefined\r\n    ) => {\r\n      if (isArray(debounceOption)) {\r\n        const [timing, maxTiming, leading] = debounceOption;\r\n        currDebounceTiming = timing;\r\n        currMaxDebounceTiming = maxTiming;\r\n        currDebounceLeading = leading;\r\n      } else if (isNumber(debounceOption)) {\r\n        currDebounceTiming = debounceOption;\r\n        currMaxDebounceTiming = false;\r\n        currDebounceLeading = false;\r\n      } else {\r\n        currDebounceTiming = false;\r\n        currMaxDebounceTiming = false;\r\n        currDebounceLeading = false;\r\n      }\r\n\r\n      debouncedFn(updateHints);\r\n    };\r\n    fn._flush = debouncedFn._flush;\r\n\r\n    return fn;\r\n  };\r\n\r\n  const state: ObserversSetupState = {\r\n    _heightIntrinsic: false,\r\n    _directionIsRTL: getDirectionIsRTL(_target),\r\n  };\r\n  const env = getEnvironment();\r\n  const scrollbarsHidingPlugin = getStaticPluginModuleInstance<typeof ScrollbarsHidingPlugin>(\r\n    scrollbarsHidingPluginName\r\n  );\r\n  const [updateContentSizeCache] = createCache<WH<number>>(\r\n    {\r\n      _equal: equalWH,\r\n      _initialValue: { w: 0, h: 0 },\r\n    },\r\n    () => {\r\n      const undoViewportArrange =\r\n        scrollbarsHidingPlugin &&\r\n        scrollbarsHidingPlugin._viewportArrangement(\r\n          structureSetupElements,\r\n          structureSetupState,\r\n          state,\r\n          env,\r\n          getCurrentOption\r\n        )._undoViewportArrange;\r\n\r\n      const viewportIsTargetBody = _isBody && _viewportIsTarget;\r\n      const noClipping =\r\n        !viewportIsTargetBody && hasAttrClass(_host, dataAttributeHost, dataValueNoClipping);\r\n      const isArranged = !_viewportIsTarget && _viewportHasClass(dataValueViewportArrange);\r\n      const scrollOffset = isArranged && getElementScroll(_scrollOffsetElement);\r\n      const revertScrollObscuringStyles = scrollOffset && _removeScrollObscuringStyles();\r\n\r\n      const revertMeasuring = _viewportAddRemoveClass(dataValueViewportMeasuring, noClipping);\r\n      const redoViewportArrange = isArranged && undoViewportArrange && undoViewportArrange();\r\n      const viewportScroll = getScrollSize(_viewport);\r\n      const fractional = getFractionalSize(_viewport);\r\n\r\n      if (redoViewportArrange) {\r\n        redoViewportArrange();\r\n      }\r\n\r\n      scrollElementTo(_scrollOffsetElement, scrollOffset);\r\n      if (revertScrollObscuringStyles) {\r\n        revertScrollObscuringStyles();\r\n      }\r\n      if (noClipping) {\r\n        revertMeasuring();\r\n      }\r\n\r\n      return {\r\n        w: viewportScroll.w + fractional.w,\r\n        h: viewportScroll.h + fractional.h,\r\n      };\r\n    }\r\n  );\r\n  const onObserversUpdatedDebounced = createDebouncedObservesUpdate();\r\n  const setDirection = (updateHints: ObserversSetupUpdateHints) => {\r\n    const newDirectionIsRTL = getDirectionIsRTL(_target);\r\n    assignDeep(updateHints, { _directionChanged: prevDirectionIsRTL !== newDirectionIsRTL });\r\n    assignDeep(state, { _directionIsRTL: newDirectionIsRTL });\r\n    prevDirectionIsRTL = newDirectionIsRTL;\r\n  };\r\n  const onTrinsicChanged = (\r\n    heightIntrinsicCache: CacheValues<boolean>,\r\n    fromRecords?: true\r\n  ): ObserversSetupUpdateHints => {\r\n    const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n    const updateHints: ObserversSetupUpdateHints = {\r\n      _heightIntrinsicChanged: heightIntrinsicChanged,\r\n    };\r\n\r\n    assignDeep(state, { _heightIntrinsic: heightIntrinsic });\r\n\r\n    if (!fromRecords) {\r\n      onObserversUpdated(updateHints);\r\n    }\r\n\r\n    return updateHints;\r\n  };\r\n  const onSizeChanged = ({ _sizeChanged, _appear }: SizeObserverCallbackParams) => {\r\n    // only don't debounce appear since it shouldn't happen that frequently\r\n    const updateFn = _appear ? onObserversUpdated : onObserversUpdatedDebounced;\r\n    const updateHints: ObserversSetupUpdateHints = {\r\n      _sizeChanged: _sizeChanged || _appear,\r\n      _appear,\r\n    };\r\n\r\n    setDirection(updateHints);\r\n    updateFn(updateHints, debounceResize);\r\n  };\r\n  const onContentMutation = (\r\n    contentChangedThroughEvent: boolean,\r\n    fromRecords?: true\r\n  ): ObserversSetupUpdateHints => {\r\n    const [, _contentMutation] = updateContentSizeCache();\r\n    const updateHints: ObserversSetupUpdateHints = {\r\n      _contentMutation,\r\n    };\r\n\r\n    setDirection(updateHints);\r\n\r\n    if (_contentMutation && !fromRecords) {\r\n      onObserversUpdatedDebounced(\r\n        updateHints,\r\n        contentChangedThroughEvent ? debounceEvent : debounceMutation\r\n      );\r\n    }\r\n\r\n    return updateHints;\r\n  };\r\n  const onHostMutation = (\r\n    targetChangedAttrs: string[],\r\n    targetStyleChanged: boolean,\r\n    fromRecords?: true\r\n  ): ObserversSetupUpdateHints => {\r\n    const updateHints: ObserversSetupUpdateHints = {\r\n      _hostMutation: targetStyleChanged,\r\n    };\r\n\r\n    setDirection(updateHints);\r\n\r\n    if (targetStyleChanged && !fromRecords) {\r\n      onObserversUpdatedDebounced(updateHints, debounceMutation);\r\n    }\r\n    /*\r\n    else if (!_viewportIsTarget) {\r\n      updateViewportAttrsFromHost(targetChangedAttrs);\r\n    }\r\n    */\r\n\r\n    return updateHints;\r\n  };\r\n  const [constructTrinsicObserver, updateTrinsicObserver] = _content\r\n    ? createTrinsicObserver(_host, onTrinsicChanged)\r\n    : [];\r\n  const constructSizeObserver =\r\n    !_viewportIsTarget &&\r\n    createSizeObserver(_host, onSizeChanged, {\r\n      _appear: true,\r\n    });\r\n  const [constructHostMutationObserver, updateHostMutationObserver] = createDOMObserver(\r\n    _host,\r\n    false,\r\n    onHostMutation,\r\n    {\r\n      _styleChangingAttributes: baseStyleChangingAttrs,\r\n      _attributes: baseStyleChangingAttrs,\r\n    }\r\n  );\r\n  const viewportIsTargetResizeObserver =\r\n    _viewportIsTarget &&\r\n    ResizeObserverConstructor &&\r\n    new ResizeObserverConstructor((entries) => {\r\n      const currContentRect = entries[entries.length - 1].contentRect;\r\n      onSizeChanged({\r\n        _sizeChanged: true,\r\n        _appear: domRectAppeared(currContentRect, prevContentRect),\r\n      });\r\n      prevContentRect = currContentRect;\r\n    });\r\n\r\n  return [\r\n    () => {\r\n      // order is matter!\r\n      // updateViewportAttrsFromHost();\r\n      if (viewportIsTargetResizeObserver) {\r\n        viewportIsTargetResizeObserver.observe(_host);\r\n      }\r\n      const destroySizeObserver = constructSizeObserver && constructSizeObserver();\r\n      const destroyTrinsicObserver = constructTrinsicObserver && constructTrinsicObserver();\r\n      const destroyHostMutationObserver = constructHostMutationObserver();\r\n      const removeResizeListener = env._addResizeListener((_scrollbarSizeChanged) => {\r\n        const [, _contentMutation] = updateContentSizeCache();\r\n        onObserversUpdatedDebounced(\r\n          { _scrollbarSizeChanged, _contentMutation, _sizeChanged: _isBody },\r\n          debounceEnv\r\n        );\r\n      });\r\n\r\n      return () => {\r\n        if (viewportIsTargetResizeObserver) {\r\n          viewportIsTargetResizeObserver.disconnect();\r\n        }\r\n        if (destroySizeObserver) {\r\n          destroySizeObserver();\r\n        }\r\n        if (destroyTrinsicObserver) {\r\n          destroyTrinsicObserver();\r\n        }\r\n        if (destroyContentMutationObserver) {\r\n          destroyContentMutationObserver();\r\n        }\r\n        destroyHostMutationObserver();\r\n        removeResizeListener();\r\n      };\r\n    },\r\n    ({ _checkOption, _takeRecords, _force }) => {\r\n      const updateHints: ObserversSetupUpdateHints = {};\r\n\r\n      const [ignoreMutation] = _checkOption('update.ignoreMutation');\r\n      const [attributes, attributesChanged] = _checkOption('update.attributes');\r\n      const [elementEvents, elementEventsChanged] = _checkOption('update.elementEvents');\r\n      const [debounceValue, debounceChanged] = _checkOption('update.debounce');\r\n      const contentMutationObserverChanged = elementEventsChanged || attributesChanged;\r\n      const takeRecords = _takeRecords || _force;\r\n      const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n        isFunction(ignoreMutation) && !!ignoreMutation(mutation);\r\n\r\n      if (contentMutationObserverChanged) {\r\n        if (updateContentMutationObserver) {\r\n          updateContentMutationObserver();\r\n        }\r\n        if (destroyContentMutationObserver) {\r\n          destroyContentMutationObserver();\r\n        }\r\n\r\n        const [construct, update] = createDOMObserver(\r\n          _content || _viewport,\r\n          true,\r\n          onContentMutation,\r\n          {\r\n            _attributes: concat(baseStyleChangingAttrs, attributes || []),\r\n            _eventContentChange: elementEvents,\r\n            _nestedTargetSelector: hostSelector,\r\n            _ignoreContentChange: (mutation, isNestedTarget) => {\r\n              const { target: mutationTarget, attributeName } = mutation;\r\n              const ignore =\r\n                !isNestedTarget && attributeName && !_viewportIsTarget\r\n                  ? liesBetween(mutationTarget, hostSelector, viewportSelector)\r\n                  : false;\r\n              return (\r\n                ignore ||\r\n                !!closest(mutationTarget, `.${classNameScrollbar}`) || // ignore explicitely all scrollbar elements\r\n                ignoreMutationFromOptions(mutation)\r\n              );\r\n            },\r\n          }\r\n        );\r\n\r\n        destroyContentMutationObserver = construct();\r\n        updateContentMutationObserver = update;\r\n      }\r\n\r\n      if (debounceChanged) {\r\n        onObserversUpdatedDebounced._flush();\r\n        // parse and distribute the debounce option\r\n        if (isArray(debounceValue) || isNumber(debounceValue)) {\r\n          // deprecated behavior: Value applies to mutation. resize and event are undefined\r\n          debounceMutation = debounceValue;\r\n          debounceResize = false;\r\n          debounceEvent = defaultOptionsUpdateDebounceEvent;\r\n          debounceEnv = defaultOptionsUpdateDebounceEnv;\r\n        } else if (isPlainObject(debounceValue)) {\r\n          debounceMutation = debounceValue.mutation;\r\n          debounceResize = debounceValue.resize;\r\n          debounceEvent = debounceValue.event;\r\n          debounceEnv = debounceValue.env;\r\n        } else {\r\n          debounceMutation = false;\r\n          debounceResize = false;\r\n          debounceEvent = false;\r\n          debounceEnv = false;\r\n        }\r\n      }\r\n\r\n      if (takeRecords) {\r\n        const hostUpdateResult = updateHostMutationObserver();\r\n        const trinsicUpdateResult = updateTrinsicObserver && updateTrinsicObserver();\r\n        const contentUpdateResult =\r\n          updateContentMutationObserver && updateContentMutationObserver();\r\n\r\n        if (hostUpdateResult) {\r\n          assignDeep(\r\n            updateHints,\r\n            onHostMutation(hostUpdateResult[0], hostUpdateResult[1], takeRecords)\r\n          );\r\n        }\r\n\r\n        if (trinsicUpdateResult) {\r\n          assignDeep(updateHints, onTrinsicChanged(trinsicUpdateResult[0], takeRecords));\r\n        }\r\n\r\n        if (contentUpdateResult) {\r\n          assignDeep(updateHints, onContentMutation(contentUpdateResult[0], takeRecords));\r\n        }\r\n      }\r\n\r\n      setDirection(updateHints);\r\n\r\n      return updateHints;\r\n    },\r\n    state,\r\n  ];\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport type { DeepPartial } from './typings';\r\nimport { isFunction, isHTMLElement, isNull, isUndefined } from './support';\r\nimport { getEnvironment } from './environment';\r\n\r\ntype FallbackStaticInitializtationElement<Args extends any[]> =\r\n  Extract<StaticInitializationElement<Args>, (...args: Args) => any> extends (\r\n    ...args: infer P\r\n  ) => any\r\n    ? (...args: P) => HTMLElement\r\n    : never;\r\ntype FallbackDynamicInitializtationElement<Args extends any[]> =\r\n  Extract<DynamicInitializationElement<Args>, (...args: Args) => any> extends (\r\n    ...args: infer P\r\n  ) => any\r\n    ? (...args: P) => HTMLElement\r\n    : never;\r\n\r\nexport type StaticInitialization = HTMLElement | false | null;\r\nexport type DynamicInitialization = HTMLElement | boolean | null;\r\n\r\n/**\r\n * Static elements are elements which MUST be present in the final DOM.\r\n * If an `HTMLElement` is passed the passed element will be taken as the repsective element.\r\n * With `false`, `null` or `undefined` an appropriate element is generated automatically.\r\n */\r\nexport type StaticInitializationElement<Args extends any[]> =\r\n  /** A function which returns the the StaticInitialization value. */\r\n  | ((...args: Args) => StaticInitialization)\r\n  /** The StaticInitialization value. */\r\n  | StaticInitialization;\r\n\r\n/**\r\n * Dynamic elements are elements which CAN be present in the final DOM.\r\n * If an `HTMLElement`is passed the passed element will be taken as the repsective element.\r\n * With `true` an appropriate element is generated automatically.\r\n * With `false`, `null` or `undefined` the element won't be in the DOM.\r\n */\r\nexport type DynamicInitializationElement<Args extends any[]> =\r\n  /** A function which returns the the DynamicInitialization value. */\r\n  | ((...args: Args) => DynamicInitialization)\r\n  /** The DynamicInitialization value. */\r\n  | DynamicInitialization;\r\n\r\n/**\r\n * Describes how a OverlayScrollbar instance should initialize.\r\n */\r\nexport type Initialization = {\r\n  /**\r\n   * Customizes which elements are generated and used.\r\n   * If a function is passed to any of the fields, it receives the `target` element as its argument.\r\n   * Any passed function should be a \"pure\" function. (same input produces same output)\r\n   */\r\n  elements: {\r\n    /**\r\n     * Assign a custom element as the host element.\r\n     * Only relevant if the target element is a Textarea.\r\n     */\r\n    host: StaticInitializationElement<[target: InitializationTargetElement]>;\r\n    /** Assign a custom element as the viewport element. */\r\n    viewport: StaticInitializationElement<[target: InitializationTargetElement]>;\r\n    /** Assign a custom element as the padding element or force the element not to be generated. */\r\n    padding: DynamicInitializationElement<[target: InitializationTargetElement]>;\r\n    /** Assign a custom element as the content element or force the element not to be generated. */\r\n    content: DynamicInitializationElement<[target: InitializationTargetElement]>;\r\n  };\r\n  /**\r\n   * Customizes elements related to the scrollbars.\r\n   * If a function is passed, it receives the `target`, `host` and `viewport` element as arguments.\r\n   */\r\n  scrollbars: {\r\n    slot: DynamicInitializationElement<\r\n      [target: InitializationTargetElement, host: HTMLElement, viewport: HTMLElement]\r\n    >;\r\n  };\r\n  /**\r\n   * Customizes the cancelation behavior.\r\n   */\r\n  cancel: {\r\n    /** Whether the initialization shall be canceled if the native scrollbars are overlaid. */\r\n    nativeScrollbarsOverlaid: boolean;\r\n    /**\r\n     * Whether the initialization shall be canceled if its applied to a body element.\r\n     * With `true` an initialization is always canceled, with `false` its never canceled.\r\n     * With `null` the initialization will only be canceled when the initialization would affect the browsers functionality. (window.scrollTo, mobile browser behavior etc.)\r\n     */\r\n    body: boolean | null;\r\n  };\r\n};\r\n\r\nexport type PartialInitialization = DeepPartial<Initialization>;\r\n\r\n/** The initialization target element. */\r\nexport type InitializationTargetElement = HTMLElement; // | HTMLTextAreaElement;\r\n\r\n/**\r\n * The initialization target object.\r\n * OverlayScrollbars({ target: myElement }) is equivalent to OverlayScrollbars(myElement).\r\n */\r\nexport type InitializationTargetObject = PartialInitialization & {\r\n  target: InitializationTargetElement;\r\n};\r\n\r\n/** The initialization target. */\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport const resolveInitialization = <T extends StaticInitialization | DynamicInitialization>(\r\n  args: any,\r\n  value: any\r\n): T => (isFunction(value) ? value.apply(0, args) : value);\r\n\r\nexport const staticInitializationElement = <Args extends any[]>(\r\n  args: Args,\r\n  fallbackStaticInitializationElement: FallbackStaticInitializtationElement<Args>,\r\n  defaultStaticInitializationElement: StaticInitializationElement<Args>,\r\n  staticInitializationElementValue?: StaticInitializationElement<Args>\r\n): HTMLElement => {\r\n  const staticInitialization = isUndefined(staticInitializationElementValue)\r\n    ? defaultStaticInitializationElement\r\n    : staticInitializationElementValue;\r\n  const resolvedInitialization = resolveInitialization<StaticInitialization>(\r\n    args,\r\n    staticInitialization\r\n  );\r\n  return resolvedInitialization || fallbackStaticInitializationElement.apply(0, args);\r\n};\r\n\r\nexport const dynamicInitializationElement = <Args extends any[]>(\r\n  args: Args,\r\n  fallbackDynamicInitializationElement: FallbackDynamicInitializtationElement<Args>,\r\n  defaultDynamicInitializationElement: DynamicInitializationElement<Args>,\r\n  dynamicInitializationElementValue?: DynamicInitializationElement<Args>\r\n): HTMLElement | false => {\r\n  const dynamicInitialization = isUndefined(dynamicInitializationElementValue)\r\n    ? defaultDynamicInitializationElement\r\n    : dynamicInitializationElementValue;\r\n  const resolvedInitialization = resolveInitialization<DynamicInitialization>(\r\n    args,\r\n    dynamicInitialization\r\n  );\r\n  return (\r\n    !!resolvedInitialization &&\r\n    (isHTMLElement(resolvedInitialization)\r\n      ? resolvedInitialization\r\n      : fallbackDynamicInitializationElement.apply(0, args))\r\n  );\r\n};\r\n\r\nexport const cancelInitialization = (\r\n  isBody: boolean,\r\n  cancelInitializationValue?: DeepPartial<Initialization['cancel']> | false | null | undefined\r\n): boolean => {\r\n  const { nativeScrollbarsOverlaid, body } = cancelInitializationValue || {};\r\n  const { _nativeScrollbarsOverlaid, _nativeScrollbarsHiding, _getDefaultInitialization } =\r\n    getEnvironment();\r\n  const { nativeScrollbarsOverlaid: defaultNativeScrollbarsOverlaid, body: defaultbody } =\r\n    _getDefaultInitialization().cancel;\r\n\r\n  const resolvedNativeScrollbarsOverlaid =\r\n    nativeScrollbarsOverlaid ?? defaultNativeScrollbarsOverlaid;\r\n  const resolvedDocumentScrollingElement = isUndefined(body) ? defaultbody : body;\r\n\r\n  const finalNativeScrollbarsOverlaid =\r\n    (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y) &&\r\n    resolvedNativeScrollbarsOverlaid;\r\n  const finalDocumentScrollingElement =\r\n    isBody &&\r\n    (isNull(resolvedDocumentScrollingElement)\r\n      ? !_nativeScrollbarsHiding\r\n      : resolvedDocumentScrollingElement);\r\n\r\n  return !!finalNativeScrollbarsOverlaid || !!finalDocumentScrollingElement;\r\n};\r\n","import type { XY } from '../../support';\r\nimport type {\r\n  InitializationTarget,\r\n  InitializationTargetElement,\r\n  InitializationTargetObject,\r\n} from '../../initialization';\r\nimport type { StructureSetupElementsObj } from '../structureSetup/structureSetup.elements';\r\nimport type { ScrollbarsSetupEvents } from './scrollbarsSetup.events';\r\nimport type { DeepReadonly, StyleObject } from '../../typings';\r\nimport type { StructureSetupState } from '../structureSetup';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from '../../initialization';\r\nimport { getEnvironment } from '../../environment';\r\nimport {\r\n  classNameScrollbar,\r\n  classNameScrollbarHorizontal,\r\n  classNameScrollbarVertical,\r\n  classNameScrollbarTrack,\r\n  classNameScrollbarHandle,\r\n} from '../../classnames';\r\nimport {\r\n  addClass,\r\n  appendChildren,\r\n  createDiv,\r\n  each,\r\n  getTrasformTranslateValue,\r\n  isBoolean,\r\n  parent,\r\n  push,\r\n  removeClass,\r\n  removeElements,\r\n  runEachAndClear,\r\n  scrollT,\r\n  bind,\r\n  getElementScroll,\r\n  numberToCssPx,\r\n  setStyles,\r\n  capNumber,\r\n  getScrollCoordinatesPercent,\r\n  isDefaultDirectionScrollCoordinates,\r\n  roundCssNumber,\r\n} from '../../support';\r\n\r\nexport interface ScrollbarStructure {\r\n  _scrollbar: HTMLElement;\r\n  _track: HTMLElement;\r\n  _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElement {\r\n  _scrollbarStructures: ScrollbarStructure[];\r\n  _clone: () => ScrollbarStructure;\r\n  _style: (\r\n    elmStyle: (\r\n      scrollbarStructure: ScrollbarStructure\r\n    ) => [HTMLElement | false | null | undefined, StyleObject]\r\n  ) => void;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n  _scrollbarsAddRemoveClass: (\r\n    classNames: string | false | null | undefined,\r\n    add?: boolean,\r\n    isHorizontal?: boolean\r\n  ) => void;\r\n  _refreshScrollbarsHandleLength: () => void;\r\n  _refreshScrollbarsHandleOffset: () => void;\r\n  _refreshScrollbarsScrollbarOffset: () => void;\r\n  _refreshScrollbarsScrollCoordinates: () => void;\r\n  _horizontal: ScrollbarsSetupElement;\r\n  _vertical: ScrollbarsSetupElement;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [\r\n  elements: ScrollbarsSetupElementsObj,\r\n  appendElements: () => () => void,\r\n];\r\n\r\ntype ScrollbarStyleFn = (\r\n  scrollbarStructure: ScrollbarStructure\r\n) => [HTMLElement | false | null | undefined, StyleObject | false | null | undefined];\r\n\r\nexport const createScrollbarsSetupElements = (\r\n  target: InitializationTarget,\r\n  structureSetupElements: DeepReadonly<StructureSetupElementsObj>,\r\n  structureSetupState: DeepReadonly<StructureSetupState>,\r\n  scrollbarsSetupEvents: ScrollbarsSetupEvents\r\n): ScrollbarsSetupElements => {\r\n  const cssCustomPropViewportPercent = '--os-viewport-percent';\r\n  const cssCustomPropScrollPercent = '--os-scroll-percent';\r\n  const cssCustomPropScrollDirection = '--os-scroll-direction';\r\n  const { _getDefaultInitialization } = getEnvironment();\r\n  const { scrollbars: defaultInitScrollbars } = _getDefaultInitialization();\r\n  const { slot: defaultInitScrollbarsSlot } = defaultInitScrollbars;\r\n  const {\r\n    _target,\r\n    _host,\r\n    _viewport,\r\n    _targetIsElm,\r\n    _scrollOffsetElement,\r\n    _isBody,\r\n    _viewportIsTarget,\r\n  } = structureSetupElements;\r\n  const { scrollbars: scrollbarsInit } = (_targetIsElm ? {} : target) as InitializationTargetObject;\r\n  const { slot: initScrollbarsSlot } = scrollbarsInit || {};\r\n  const destroyFns: (() => void)[] = [];\r\n  const horizontalScrollbars: ScrollbarStructure[] = [];\r\n  const verticalScrollbars: ScrollbarStructure[] = [];\r\n  const evaluatedScrollbarSlot = generalDynamicInitializationElement<\r\n    [InitializationTargetElement, HTMLElement, HTMLElement]\r\n  >(\r\n    [_target, _host, _viewport],\r\n    () => (_viewportIsTarget && _isBody ? _target : _host),\r\n    defaultInitScrollbarsSlot,\r\n    initScrollbarsSlot\r\n  );\r\n\r\n  const initScrollTimeline = (axis: keyof XY<unknown>) => {\r\n    if (scrollT) {\r\n      let currAnimation: Animation | null = null;\r\n      let currAnimationTransform: string[] = [];\r\n      const timeline = new scrollT({\r\n        source: _scrollOffsetElement,\r\n        axis,\r\n      });\r\n      const cancelAnimation = () => {\r\n        if (currAnimation) {\r\n          currAnimation.cancel();\r\n        }\r\n        currAnimation = null;\r\n      };\r\n      const _setScrollPercentAnimation = (structure: ScrollbarStructure) => {\r\n        const { _scrollCoordinates } = structureSetupState;\r\n        const defaultDirectionScroll =\r\n          isDefaultDirectionScrollCoordinates(_scrollCoordinates)[axis];\r\n        const isHorizontal = axis === 'x';\r\n        const transformArray = [\r\n          getTrasformTranslateValue(0, isHorizontal),\r\n          getTrasformTranslateValue(`calc(-100% + 100cq${isHorizontal ? 'w' : 'h'})`, isHorizontal),\r\n        ];\r\n        const transform = defaultDirectionScroll ? transformArray : transformArray.reverse();\r\n\r\n        // if the animation keyframes are identical, do nothing and keep current animation\r\n        if (\r\n          currAnimationTransform[0] === transform[0] &&\r\n          currAnimationTransform[1] === transform[1]\r\n        ) {\r\n          return cancelAnimation;\r\n        }\r\n\r\n        currAnimationTransform = transform;\r\n\r\n        cancelAnimation();\r\n        currAnimation = structure._handle.animate(\r\n          {\r\n            // dummy keyframe which fixes bug where the scrollbar handle is reverted to origin position when it should be at its max position\r\n            clear: ['left'],\r\n            // transform is a temporary fix for: https://github.com/KingSora/OverlayScrollbars/issues/705\r\n            // can be reverted to just animate \"cssCustomPropScrollPercent\" when browsers implement an optimization possibility\r\n            transform,\r\n            // [cssCustomPropScrollPercent]: [0, 1],\r\n          },\r\n          {\r\n            timeline,\r\n          }\r\n        );\r\n\r\n        return cancelAnimation;\r\n      };\r\n\r\n      return {\r\n        _setScrollPercentAnimation,\r\n      };\r\n    }\r\n  };\r\n  const scrollTimeline = {\r\n    x: initScrollTimeline('x'),\r\n    y: initScrollTimeline('y'),\r\n  };\r\n  const getViewportPercent = () => {\r\n    const { _overflowAmount, _overflowEdge } = structureSetupState;\r\n    const getAxisValue = (axisViewportSize: number, axisOverflowAmount: number) =>\r\n      capNumber(0, 1, axisViewportSize / (axisViewportSize + axisOverflowAmount) || 0);\r\n\r\n    return {\r\n      x: getAxisValue(_overflowEdge.x, _overflowAmount.x),\r\n      y: getAxisValue(_overflowEdge.y, _overflowAmount.y),\r\n    };\r\n  };\r\n  const scrollbarStructureAddRemoveClass = (\r\n    scrollbarStructures: ScrollbarStructure[],\r\n    classNames: string | false | null | undefined,\r\n    add?: boolean\r\n  ) => {\r\n    const action = add ? addClass : removeClass;\r\n    each(scrollbarStructures, (scrollbarStructure) => {\r\n      action(scrollbarStructure._scrollbar, classNames);\r\n    });\r\n  };\r\n  const scrollbarStyle = (\r\n    scrollbarStructures: ScrollbarStructure[],\r\n    elmStyle: ScrollbarStyleFn\r\n  ) => {\r\n    each(scrollbarStructures, (scrollbarStructure) => {\r\n      const [elm, styles] = elmStyle(scrollbarStructure);\r\n      setStyles(elm, styles);\r\n    });\r\n  };\r\n  const scrollbarsAddRemoveClass = (\r\n    className: string | false | null | undefined,\r\n    add?: boolean,\r\n    onlyHorizontal?: boolean\r\n  ) => {\r\n    const singleAxis = isBoolean(onlyHorizontal);\r\n    const runHorizontal = singleAxis ? onlyHorizontal : true;\r\n    const runVertical = singleAxis ? !onlyHorizontal : true;\r\n    if (runHorizontal) {\r\n      scrollbarStructureAddRemoveClass(horizontalScrollbars, className, add);\r\n    }\r\n    if (runVertical) {\r\n      scrollbarStructureAddRemoveClass(verticalScrollbars, className, add);\r\n    }\r\n  };\r\n  const refreshScrollbarsHandleLength = () => {\r\n    const viewportPercent = getViewportPercent();\r\n    const createScrollbarStyleFn =\r\n      (axisViewportPercent: number): ScrollbarStyleFn =>\r\n      (structure: ScrollbarStructure) => [\r\n        structure._scrollbar,\r\n        {\r\n          [cssCustomPropViewportPercent]: roundCssNumber(axisViewportPercent) + '',\r\n        },\r\n      ];\r\n\r\n    scrollbarStyle(horizontalScrollbars, createScrollbarStyleFn(viewportPercent.x));\r\n    scrollbarStyle(verticalScrollbars, createScrollbarStyleFn(viewportPercent.y));\r\n  };\r\n  const refreshScrollbarsHandleOffset = () => {\r\n    if (!scrollT) {\r\n      const { _scrollCoordinates } = structureSetupState;\r\n      const scrollPercent = getScrollCoordinatesPercent(\r\n        _scrollCoordinates,\r\n        getElementScroll(_scrollOffsetElement)\r\n      );\r\n      const createScrollbarStyleFn =\r\n        (axisScrollPercent: number): ScrollbarStyleFn =>\r\n        (structure: ScrollbarStructure) => [\r\n          structure._scrollbar,\r\n          {\r\n            [cssCustomPropScrollPercent]: roundCssNumber(axisScrollPercent) + '',\r\n          },\r\n        ];\r\n\r\n      scrollbarStyle(horizontalScrollbars, createScrollbarStyleFn(scrollPercent.x));\r\n      scrollbarStyle(verticalScrollbars, createScrollbarStyleFn(scrollPercent.y));\r\n    }\r\n  };\r\n  const refreshScrollbarsScrollCoordinates = () => {\r\n    const { _scrollCoordinates } = structureSetupState;\r\n    const defaultDirectionScroll = isDefaultDirectionScrollCoordinates(_scrollCoordinates);\r\n    const createScrollbarStyleFn =\r\n      (axisIsDefaultDirectionScrollCoordinates: boolean): ScrollbarStyleFn =>\r\n      (structure: ScrollbarStructure) => [\r\n        structure._scrollbar,\r\n        {\r\n          [cssCustomPropScrollDirection]: axisIsDefaultDirectionScrollCoordinates ? '0' : '1',\r\n        },\r\n      ];\r\n\r\n    scrollbarStyle(horizontalScrollbars, createScrollbarStyleFn(defaultDirectionScroll.x));\r\n    scrollbarStyle(verticalScrollbars, createScrollbarStyleFn(defaultDirectionScroll.y));\r\n\r\n    // temporary fix for: https://github.com/KingSora/OverlayScrollbars/issues/705\r\n    if (scrollT) {\r\n      horizontalScrollbars.forEach(scrollTimeline.x!._setScrollPercentAnimation);\r\n      verticalScrollbars.forEach(scrollTimeline.y!._setScrollPercentAnimation);\r\n    }\r\n  };\r\n  const refreshScrollbarsScrollbarOffset = () => {\r\n    if (_viewportIsTarget && !_isBody) {\r\n      const { _overflowAmount, _scrollCoordinates } = structureSetupState;\r\n      const isDefaultDirectionScroll = isDefaultDirectionScrollCoordinates(_scrollCoordinates);\r\n      const scrollPercent = getScrollCoordinatesPercent(\r\n        _scrollCoordinates,\r\n        getElementScroll(_scrollOffsetElement)\r\n      );\r\n      const styleScrollbarPosition: ScrollbarStyleFn = (structure: ScrollbarStructure) => {\r\n        const { _scrollbar } = structure;\r\n        const elm = parent(_scrollbar) === _viewport && _scrollbar;\r\n        const getTranslateValue = (\r\n          axisScrollPercent: number,\r\n          axisOverflowAmount: number,\r\n          axisIsDefaultCoordinates: boolean\r\n        ) => {\r\n          const px = axisOverflowAmount * axisScrollPercent;\r\n          return numberToCssPx(axisIsDefaultCoordinates ? px : -px);\r\n        };\r\n\r\n        return [\r\n          elm,\r\n          elm && {\r\n            transform: getTrasformTranslateValue({\r\n              x: getTranslateValue(scrollPercent.x, _overflowAmount.x, isDefaultDirectionScroll.x),\r\n              y: getTranslateValue(scrollPercent.y, _overflowAmount.y, isDefaultDirectionScroll.y),\r\n            }),\r\n          },\r\n        ];\r\n      };\r\n\r\n      scrollbarStyle(horizontalScrollbars, styleScrollbarPosition);\r\n      scrollbarStyle(verticalScrollbars, styleScrollbarPosition);\r\n    }\r\n  };\r\n  const generateScrollbarDOM = (isHorizontal?: boolean): ScrollbarStructure => {\r\n    const xyKey = isHorizontal ? 'x' : 'y';\r\n    const scrollbarClassName = isHorizontal\r\n      ? classNameScrollbarHorizontal\r\n      : classNameScrollbarVertical;\r\n    const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n    const track = createDiv(classNameScrollbarTrack);\r\n    const handle = createDiv(classNameScrollbarHandle);\r\n    const result = {\r\n      _scrollbar: scrollbar,\r\n      _track: track,\r\n      _handle: handle,\r\n    };\r\n    const timeline = scrollTimeline[xyKey];\r\n\r\n    push(isHorizontal ? horizontalScrollbars : verticalScrollbars, result);\r\n    push(destroyFns, [\r\n      appendChildren(scrollbar, track),\r\n      appendChildren(track, handle),\r\n      bind(removeElements, scrollbar),\r\n      timeline && timeline._setScrollPercentAnimation(result),\r\n      scrollbarsSetupEvents(result, scrollbarsAddRemoveClass, isHorizontal),\r\n    ]);\r\n\r\n    return result;\r\n  };\r\n  const generateHorizontalScrollbarStructure = bind(generateScrollbarDOM, true);\r\n  const generateVerticalScrollbarStructure = bind(generateScrollbarDOM, false);\r\n  const appendElements = () => {\r\n    appendChildren(evaluatedScrollbarSlot, horizontalScrollbars[0]._scrollbar);\r\n    appendChildren(evaluatedScrollbarSlot, verticalScrollbars[0]._scrollbar);\r\n\r\n    return bind(runEachAndClear, destroyFns);\r\n  };\r\n\r\n  generateHorizontalScrollbarStructure();\r\n  generateVerticalScrollbarStructure();\r\n\r\n  return [\r\n    {\r\n      _refreshScrollbarsHandleLength: refreshScrollbarsHandleLength,\r\n      _refreshScrollbarsHandleOffset: refreshScrollbarsHandleOffset,\r\n      _refreshScrollbarsScrollCoordinates: refreshScrollbarsScrollCoordinates,\r\n      _refreshScrollbarsScrollbarOffset: refreshScrollbarsScrollbarOffset,\r\n      _scrollbarsAddRemoveClass: scrollbarsAddRemoveClass,\r\n      _horizontal: {\r\n        _scrollbarStructures: horizontalScrollbars,\r\n        _clone: generateHorizontalScrollbarStructure,\r\n        _style: bind(scrollbarStyle, horizontalScrollbars),\r\n      },\r\n      _vertical: {\r\n        _scrollbarStructures: verticalScrollbars,\r\n        _clone: generateVerticalScrollbarStructure,\r\n        _style: bind(scrollbarStyle, verticalScrollbars),\r\n      },\r\n    },\r\n    appendElements,\r\n  ];\r\n};\r\n","import type { XY } from '../../support';\r\nimport type { ReadonlyOptions } from '../../options';\r\nimport type { StructureSetupState } from '../../setups';\r\nimport type { ScrollbarsSetupElementsObj, ScrollbarStructure } from './scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from '../structureSetup/structureSetup.elements';\r\nimport {\r\n  ClickScrollPlugin,\r\n  clickScrollPluginModuleName,\r\n  getStaticPluginModuleInstance,\r\n} from '../../plugins';\r\nimport {\r\n  classNameScrollbarHandle,\r\n  classNameScrollbarInteraction,\r\n  classNameScrollbarWheel,\r\n  dataAttributeHost,\r\n  dataAttributeViewport,\r\n} from '../../classnames';\r\nimport {\r\n  getBoundingClientRect,\r\n  getOffsetSize,\r\n  addEventListener,\r\n  preventDefault,\r\n  runEachAndClear,\r\n  selfClearTimeout,\r\n  parent,\r\n  closest,\r\n  push,\r\n  bind,\r\n  mathRound,\r\n  strWidth,\r\n  strHeight,\r\n  getElementScroll,\r\n  scrollElementTo,\r\n  getFocusedElement,\r\n  setT,\r\n  hasAttr,\r\n  stopAndPrevent,\r\n  isFunction,\r\n  mathAbs,\r\n  focusElement,\r\n} from '../../support';\r\nimport { DeepReadonly } from '../../typings';\r\n\r\nexport type ScrollbarsSetupEvents = (\r\n  scrollbarStructure: DeepReadonly<ScrollbarStructure>,\r\n  scrollbarsAddRemoveClass: ScrollbarsSetupElementsObj['_scrollbarsAddRemoveClass'],\r\n  isHorizontal?: boolean\r\n) => () => void;\r\n\r\nexport const createScrollbarsSetupEvents = (\r\n  options: ReadonlyOptions,\r\n  structureSetupElements: DeepReadonly<StructureSetupElementsObj>,\r\n  structureSetupState: DeepReadonly<StructureSetupState>,\r\n  skipEventIfSleeping: <T extends Event>(fn: (event: T) => void) => (event: T) => void,\r\n  scrollbarHandlePointerInteraction: (event: PointerEvent) => void\r\n): ScrollbarsSetupEvents => {\r\n  return (scrollbarStructure, scrollbarsAddRemoveClass, isHorizontal) => {\r\n    const {\r\n      _host,\r\n      _viewport,\r\n      _viewportIsTarget,\r\n      _scrollOffsetElement,\r\n      _documentElm,\r\n      _removeScrollObscuringStyles,\r\n    } = structureSetupElements;\r\n    const { _scrollbar, _track, _handle } = scrollbarStructure;\r\n    const [wheelTimeout, clearWheelTimeout] = selfClearTimeout(333);\r\n    const [scrollSnapScrollTransitionTimeout, clearScrollSnapScrollTransitionTimeout] =\r\n      selfClearTimeout(444);\r\n    const scrollOffsetElementScrollBy = (coordinates: XY<number>) => {\r\n      if (isFunction(_scrollOffsetElement.scrollBy)) {\r\n        _scrollOffsetElement.scrollBy({\r\n          behavior: 'smooth',\r\n          left: coordinates.x,\r\n          top: coordinates.y,\r\n        });\r\n      }\r\n    };\r\n\r\n    const createInteractiveScrollEvents = () => {\r\n      const releasePointerCaptureEvents = 'pointerup pointercancel lostpointercapture';\r\n      const clientXYKey = `client${isHorizontal ? 'X' : 'Y'}` as 'clientX' | 'clientY';\r\n      const widthHeightKey = isHorizontal ? strWidth : strHeight;\r\n      const leftTopKey = isHorizontal ? 'left' : 'top';\r\n      const whKey = isHorizontal ? 'w' : 'h';\r\n      const xyKey = isHorizontal ? 'x' : 'y';\r\n      const pointerdownCleanupFns: Array<() => void> = [];\r\n\r\n      return addEventListener(\r\n        _track,\r\n        'pointerdown',\r\n        skipEventIfSleeping((pointerDownEvent: PointerEvent) => {\r\n          const isDragScroll =\r\n            closest(pointerDownEvent.target as Node, `.${classNameScrollbarHandle}`) === _handle;\r\n          const pointerCaptureElement = isDragScroll ? _handle : _track;\r\n\r\n          const scrollbarOptions = options.scrollbars;\r\n          const dragClickScrollOption =\r\n            scrollbarOptions[isDragScroll ? 'dragScroll' : 'clickScroll'];\r\n          const { button, isPrimary, pointerType } = pointerDownEvent;\r\n          const { pointers } = scrollbarOptions;\r\n\r\n          const continuePointerDown =\r\n            button === 0 &&\r\n            isPrimary &&\r\n            dragClickScrollOption &&\r\n            (pointers || []).includes(pointerType);\r\n\r\n          if (continuePointerDown) {\r\n            runEachAndClear(pointerdownCleanupFns);\r\n            clearScrollSnapScrollTransitionTimeout();\r\n\r\n            const instantClickScroll =\r\n              !isDragScroll && (pointerDownEvent.shiftKey || dragClickScrollOption === 'instant');\r\n            const getHandleRect = bind(getBoundingClientRect, _handle);\r\n            const getTrackRect = bind(getBoundingClientRect, _track);\r\n            const getHandleOffset = (handleRect?: DOMRect, trackRect?: DOMRect) =>\r\n              (handleRect || getHandleRect())[leftTopKey] -\r\n              (trackRect || getTrackRect())[leftTopKey];\r\n            const axisScale =\r\n              mathRound(getBoundingClientRect(_scrollOffsetElement)[widthHeightKey]) /\r\n                getOffsetSize(_scrollOffsetElement)[whKey] || 1;\r\n            const mouseDownScroll = getElementScroll(_scrollOffsetElement)[xyKey];\r\n            const scrollRelative = (deltaScroll: number) => {\r\n              scrollElementTo(_scrollOffsetElement, {\r\n                [xyKey]: mouseDownScroll + deltaScroll,\r\n              });\r\n            };\r\n            const moveHandleRelative = (deltaMovement: number) => {\r\n              const { _overflowAmount } = structureSetupState;\r\n              const handleTrackDiff = getOffsetSize(_track)[whKey] - getOffsetSize(_handle)[whKey];\r\n              const scrollDeltaPercent = ((1 / axisScale) * deltaMovement) / handleTrackDiff;\r\n              scrollRelative(scrollDeltaPercent * _overflowAmount[xyKey]);\r\n            };\r\n            const pointerDownClientOffset = pointerDownEvent[clientXYKey];\r\n            const handleRect = getHandleRect();\r\n            const trackRect = getTrackRect();\r\n            const handleLength = handleRect[widthHeightKey];\r\n            const handleCenter = getHandleOffset(handleRect, trackRect) + handleLength / 2;\r\n            const relativeTrackPointerOffset = pointerDownClientOffset - trackRect[leftTopKey];\r\n            const clickScrollDeltaMovement = relativeTrackPointerOffset - handleCenter;\r\n            const dragScrollStartOffset = isDragScroll ? 0 : clickScrollDeltaMovement; // `clickScrollDeltaMovement` is for \"instant\" click scroll + drag afterwards\r\n\r\n            const releasePointerCapture = (pointerUpEvent: PointerEvent) => {\r\n              runEachAndClear(pointerupCleanupFns);\r\n              pointerCaptureElement.releasePointerCapture(pointerUpEvent.pointerId);\r\n            };\r\n            const nonAnimatedScroll = isDragScroll || instantClickScroll;\r\n            const revertScrollObscuringStyles = _removeScrollObscuringStyles();\r\n\r\n            const pointerupCleanupFns = [\r\n              addEventListener(_documentElm, releasePointerCaptureEvents, releasePointerCapture),\r\n              addEventListener(\r\n                _documentElm,\r\n                'selectstart',\r\n                (event: Event) => preventDefault(event),\r\n                {\r\n                  _passive: false,\r\n                }\r\n              ),\r\n              addEventListener(_track, releasePointerCaptureEvents, releasePointerCapture),\r\n              nonAnimatedScroll &&\r\n                addEventListener(_track, 'pointermove', (pointerMoveEvent: PointerEvent) =>\r\n                  moveHandleRelative(\r\n                    dragScrollStartOffset + pointerMoveEvent[clientXYKey] - pointerDownClientOffset\r\n                  )\r\n                ),\r\n              nonAnimatedScroll &&\r\n                (() => {\r\n                  const withoutSnapScrollOffset = getElementScroll(_scrollOffsetElement);\r\n                  revertScrollObscuringStyles();\r\n                  const withSnapScrollOffset = getElementScroll(_scrollOffsetElement);\r\n                  const snapScrollDiff = {\r\n                    x: withSnapScrollOffset.x - withoutSnapScrollOffset.x,\r\n                    y: withSnapScrollOffset.y - withoutSnapScrollOffset.y,\r\n                  };\r\n\r\n                  if (mathAbs(snapScrollDiff.x) > 3 || mathAbs(snapScrollDiff.y) > 3) {\r\n                    _removeScrollObscuringStyles();\r\n                    scrollElementTo(_scrollOffsetElement, withoutSnapScrollOffset);\r\n                    scrollOffsetElementScrollBy(snapScrollDiff);\r\n                    scrollSnapScrollTransitionTimeout(revertScrollObscuringStyles);\r\n                  }\r\n                }),\r\n            ];\r\n\r\n            pointerCaptureElement.setPointerCapture(pointerDownEvent.pointerId);\r\n\r\n            if (instantClickScroll) {\r\n              moveHandleRelative(clickScrollDeltaMovement);\r\n            } else if (!isDragScroll) {\r\n              const animateClickScroll = getStaticPluginModuleInstance<typeof ClickScrollPlugin>(\r\n                clickScrollPluginModuleName\r\n              );\r\n              if (animateClickScroll) {\r\n                const { _overflowEdge } = structureSetupState;\r\n                const stopClickScrollAnimation = animateClickScroll(\r\n                  scrollRelative,\r\n                  moveHandleRelative,\r\n                  bind(getHandleOffset),\r\n                  clickScrollDeltaMovement,\r\n                  _overflowEdge[xyKey],\r\n                  dragClickScrollOption,\r\n                  !!isHorizontal,\r\n                  (stopped) => {\r\n                    // if the scroll animation doesn't continue with a press\r\n                    if (stopped) {\r\n                      revertScrollObscuringStyles();\r\n                    } else {\r\n                      push(pointerupCleanupFns, revertScrollObscuringStyles);\r\n                    }\r\n                  }\r\n                );\r\n\r\n                push(pointerupCleanupFns, stopClickScrollAnimation);\r\n                push(pointerdownCleanupFns, bind(stopClickScrollAnimation, true));\r\n              }\r\n            }\r\n          }\r\n        })\r\n      );\r\n    };\r\n\r\n    let wheelScrollBy = true;\r\n\r\n    return bind(runEachAndClear, [\r\n      addEventListener(\r\n        _handle,\r\n        'pointermove pointerleave',\r\n        skipEventIfSleeping(scrollbarHandlePointerInteraction)\r\n      ),\r\n      addEventListener(\r\n        _scrollbar,\r\n        'pointerenter',\r\n        skipEventIfSleeping(() => {\r\n          scrollbarsAddRemoveClass(classNameScrollbarInteraction, true);\r\n        })\r\n      ),\r\n      addEventListener(\r\n        _scrollbar,\r\n        'pointerleave pointercancel',\r\n        skipEventIfSleeping(() => {\r\n          scrollbarsAddRemoveClass(classNameScrollbarInteraction, false);\r\n        })\r\n      ),\r\n      // propagate wheel events to viewport when mouse is over scrollbar\r\n      addEventListener(\r\n        _scrollbar,\r\n        'wheel',\r\n        skipEventIfSleeping((wheelEvent: WheelEvent) => {\r\n          const { deltaX, deltaY, deltaMode } = wheelEvent;\r\n\r\n          // the first wheel event is swallowed, simulate scroll to compensate for it\r\n          if (wheelScrollBy && deltaMode === 0 && parent(_scrollbar) === _host) {\r\n            scrollOffsetElementScrollBy({\r\n              x: deltaX,\r\n              y: deltaY,\r\n            });\r\n          }\r\n\r\n          wheelScrollBy = false;\r\n          scrollbarsAddRemoveClass(classNameScrollbarWheel, true);\r\n          wheelTimeout(() => {\r\n            wheelScrollBy = true;\r\n            scrollbarsAddRemoveClass(classNameScrollbarWheel);\r\n          });\r\n\r\n          preventDefault(wheelEvent);\r\n        }),\r\n        { _passive: false, _capture: true }\r\n      ),\r\n      // focus viewport when clicking on a scrollbar (mouse only)\r\n      !_viewportIsTarget &&\r\n        addEventListener(\r\n          _scrollbar,\r\n          'mousedown',\r\n          skipEventIfSleeping(() => {\r\n            const focusedElement = getFocusedElement();\r\n            // dont steal focus from buttons or other interactive elements\r\n            if (\r\n              hasAttr(focusedElement, dataAttributeViewport) ||\r\n              hasAttr(focusedElement, dataAttributeHost) ||\r\n              focusedElement === document.body\r\n            ) {\r\n              setT(bind(focusElement, _viewport), 25);\r\n            }\r\n          })\r\n        ),\r\n      // solve problem of interaction causing `click` events (https://github.com/KingSora/OverlayScrollbars/issues/251)\r\n      // 1. on `scrollbar` pointer down register a `document` click event which gets prevented and propagation is stopped\r\n      // 2. on `document` pointerup / pointercancel remove that click event after a timeout (in case the click is never triggered)\r\n      addEventListener(\r\n        _scrollbar,\r\n        'pointerdown',\r\n        () => {\r\n          const removeClickEvent = addEventListener(\r\n            _documentElm,\r\n            'click',\r\n            (clickEvent: Event) => {\r\n              removePointerEvents();\r\n              stopAndPrevent(clickEvent);\r\n            },\r\n            {\r\n              _once: true,\r\n              _capture: true,\r\n              _passive: false,\r\n            }\r\n          );\r\n          const removePointerEvents = addEventListener(\r\n            _documentElm,\r\n            'pointerup pointercancel',\r\n            () => {\r\n              removePointerEvents();\r\n              setTimeout(removeClickEvent, 150);\r\n            },\r\n            {\r\n              _capture: true,\r\n              _passive: true,\r\n            }\r\n          );\r\n        },\r\n        { _capture: true, _passive: true }\r\n      ),\r\n      createInteractiveScrollEvents(),\r\n      clearWheelTimeout,\r\n      clearScrollSnapScrollTransitionTimeout,\r\n    ]);\r\n  };\r\n};\r\n","import type { OverflowBehavior, ReadonlyOptions } from '../../options';\r\nimport type { ScrollbarsSetupElementsObj } from './scrollbarsSetup.elements';\r\nimport type {\r\n  ObserversSetupState,\r\n  ObserversSetupUpdateHints,\r\n  Setup,\r\n  SetupsInstanceState,\r\n  SetupUpdateInfo,\r\n  StructureSetupState,\r\n  StructureSetupUpdateHints,\r\n} from '../../setups';\r\nimport type { InitializationTarget } from '../../initialization';\r\nimport type { DeepReadonly, OverflowStyle } from '../../typings';\r\nimport type { StructureSetupElementsObj } from '../structureSetup/structureSetup.elements';\r\nimport {\r\n  classNameScrollbarThemeNone,\r\n  classNameScrollbarVisible,\r\n  classNameScrollbarUnusable,\r\n  classNameScrollbarCornerless,\r\n  classNameScrollbarAutoHideHidden,\r\n  classNameScrollbarHandleInteractive,\r\n  classNameScrollbarTrackInteractive,\r\n  classNameScrollbarRtl,\r\n  classNameScrollbarAutoHide,\r\n} from '../../classnames';\r\nimport { getEnvironment } from '../../environment';\r\nimport {\r\n  bind,\r\n  noop,\r\n  addEventListener,\r\n  push,\r\n  runEachAndClear,\r\n  selfClearTimeout,\r\n  strScroll,\r\n  strVisible,\r\n} from '../../support';\r\nimport { createScrollbarsSetupElements } from './scrollbarsSetup.elements';\r\nimport { createScrollbarsSetupEvents } from './scrollbarsSetup.events';\r\nimport {\r\n  getStaticPluginModuleInstance,\r\n  ScrollbarsHidingPlugin,\r\n  scrollbarsHidingPluginName,\r\n} from '../../plugins';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupUpdateInfo extends SetupUpdateInfo {\r\n  _observersUpdateHints?: DeepReadonly<ObserversSetupUpdateHints>;\r\n  _structureUpdateHints?: DeepReadonly<StructureSetupUpdateHints>;\r\n}\r\n\r\nexport type ScrollbarsSetup = [\r\n  ...Setup<ScrollbarsSetupUpdateInfo, ScrollbarsSetupState, void>,\r\n  /** The elements created by the scrollbars setup. */\r\n  DeepReadonly<ScrollbarsSetupElementsObj>,\r\n];\r\n\r\nexport const createScrollbarsSetup = (\r\n  target: InitializationTarget,\r\n  options: ReadonlyOptions,\r\n  setupsInstanceState: DeepReadonly<SetupsInstanceState>,\r\n  observersSetupState: DeepReadonly<ObserversSetupState>,\r\n  structureSetupState: DeepReadonly<StructureSetupState>,\r\n  structureSetupElements: DeepReadonly<StructureSetupElementsObj>,\r\n  onScroll: (event: Event) => void\r\n): ScrollbarsSetup => {\r\n  let mouseInHost: boolean | undefined;\r\n  let autoHideIsMove: boolean | undefined;\r\n  let autoHideIsLeave: boolean | undefined;\r\n  let autoHideIsNever: boolean | undefined;\r\n  let prevTheme: string | null | undefined;\r\n  let instanceAutoHideSuspendScrollDestroyFn = noop;\r\n  let instanceAutoHideDelay = 0;\r\n  const hoverablePointerTypes = ['mouse', 'pen'];\r\n  const skipEventIfSleeping =\r\n    <T extends Event>(fn: (event: T) => void): ((event: T) => void) =>\r\n    (event: T) => {\r\n      if (!setupsInstanceState._sleeping) {\r\n        fn(event);\r\n      }\r\n    };\r\n\r\n  // needed to not fire unnecessary operations for pointer events on ios safari which will cause side effects: https://github.com/KingSora/OverlayScrollbars/issues/560\r\n  const isHoverablePointerType = (event: PointerEvent) =>\r\n    hoverablePointerTypes.includes(event.pointerType);\r\n\r\n  const [requestScrollAnimationFrame, cancelScrollAnimationFrame] = selfClearTimeout();\r\n  const [autoHideInstantInteractionTimeout, clearAutoHideInstantInteractionTimeout] =\r\n    selfClearTimeout(100);\r\n  const [autoHideSuspendTimeout, clearAutoHideSuspendTimeout] = selfClearTimeout(50);\r\n  const [auotHideTimeout, clearAutoHideTimeout] = selfClearTimeout(() => instanceAutoHideDelay);\r\n  const [elements, appendElements] = createScrollbarsSetupElements(\r\n    target,\r\n    structureSetupElements,\r\n    structureSetupState,\r\n    createScrollbarsSetupEvents(\r\n      options,\r\n      structureSetupElements,\r\n      structureSetupState,\r\n      skipEventIfSleeping,\r\n      (event) => isHoverablePointerType(event) && manageScrollbarsAutoHideInstantInteraction()\r\n    )\r\n  );\r\n  const { _host, _scrollEventElement, _isBody } = structureSetupElements;\r\n  const {\r\n    _scrollbarsAddRemoveClass,\r\n    _refreshScrollbarsHandleLength,\r\n    _refreshScrollbarsHandleOffset,\r\n    _refreshScrollbarsScrollCoordinates,\r\n    _refreshScrollbarsScrollbarOffset,\r\n  } = elements;\r\n  const manageScrollbarsAutoHide = (removeAutoHide: boolean, delayless?: boolean) => {\r\n    clearAutoHideTimeout();\r\n\r\n    const hide = (add?: boolean) => {\r\n      if (setupsInstanceState._sleeping) {\r\n        return;\r\n      }\r\n      _scrollbarsAddRemoveClass(classNameScrollbarAutoHideHidden, add);\r\n    };\r\n\r\n    if (removeAutoHide) {\r\n      hide();\r\n    } else {\r\n      const add = autoHideIsLeave ? !mouseInHost : true;\r\n      if (instanceAutoHideDelay > 0 && !delayless) {\r\n        auotHideTimeout(bind(hide, add));\r\n      } else {\r\n        hide(add);\r\n      }\r\n    }\r\n  };\r\n  const manageScrollbarsAutoHideInstantInteraction = () => {\r\n    if (autoHideIsLeave ? !mouseInHost : !autoHideIsNever) {\r\n      manageScrollbarsAutoHide(true);\r\n      autoHideInstantInteractionTimeout(() => {\r\n        manageScrollbarsAutoHide(false);\r\n      });\r\n    }\r\n  };\r\n  const onHostMouseEnter = (event: PointerEvent) => {\r\n    if (isHoverablePointerType(event)) {\r\n      mouseInHost = true;\r\n      if (!setupsInstanceState._sleeping && autoHideIsLeave) {\r\n        manageScrollbarsAutoHide(true);\r\n      }\r\n    }\r\n  };\r\n  const onHostMouseLeave = (event: PointerEvent) => {\r\n    if (isHoverablePointerType(event)) {\r\n      mouseInHost = false;\r\n      if (!setupsInstanceState._sleeping && autoHideIsLeave) {\r\n        manageScrollbarsAutoHide(false);\r\n      }\r\n    }\r\n  };\r\n  const manageAutoHideSuspension = (add: boolean) => {\r\n    _scrollbarsAddRemoveClass(classNameScrollbarAutoHide, add, true);\r\n    _scrollbarsAddRemoveClass(classNameScrollbarAutoHide, add, false);\r\n  };\r\n  const destroyFns: (() => void)[] = [\r\n    clearAutoHideTimeout,\r\n    clearAutoHideInstantInteractionTimeout,\r\n    clearAutoHideSuspendTimeout,\r\n    cancelScrollAnimationFrame,\r\n    () => instanceAutoHideSuspendScrollDestroyFn(),\r\n\r\n    addEventListener(_host, 'pointerover', onHostMouseEnter, { _once: true }),\r\n    addEventListener(_host, 'pointerenter', onHostMouseEnter),\r\n    addEventListener(_host, 'pointerleave', onHostMouseLeave),\r\n    addEventListener(\r\n      _host,\r\n      'pointermove',\r\n      skipEventIfSleeping((event: PointerEvent) => {\r\n        if (isHoverablePointerType(event) && autoHideIsMove) {\r\n          manageScrollbarsAutoHideInstantInteraction();\r\n        }\r\n      })\r\n    ),\r\n    addEventListener(\r\n      _scrollEventElement,\r\n      'scroll',\r\n      skipEventIfSleeping((event) => {\r\n        requestScrollAnimationFrame(() => {\r\n          _refreshScrollbarsHandleOffset();\r\n          manageScrollbarsAutoHideInstantInteraction();\r\n        });\r\n\r\n        onScroll(event);\r\n\r\n        _refreshScrollbarsScrollbarOffset();\r\n      })\r\n    ),\r\n  ];\r\n  const scrollbarsHidingPlugin = getStaticPluginModuleInstance<typeof ScrollbarsHidingPlugin>(\r\n    scrollbarsHidingPluginName\r\n  );\r\n\r\n  return [\r\n    () => bind(runEachAndClear, push(destroyFns, appendElements())),\r\n    ({ _checkOption, _force, _observersUpdateHints, _structureUpdateHints }) => {\r\n      const {\r\n        _overflowEdgeChanged,\r\n        _overflowAmountChanged,\r\n        _overflowStyleChanged,\r\n        _scrollCoordinatesChanged,\r\n      } = _structureUpdateHints || {};\r\n      const { _directionChanged, _appear } = _observersUpdateHints || {};\r\n      const { _directionIsRTL } = observersSetupState;\r\n      const { _nativeScrollbarsOverlaid, _nativeScrollbarsHiding } = getEnvironment();\r\n      const { _overflowStyle, _hasOverflow } = structureSetupState;\r\n      const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n        _checkOption('showNativeOverlaidScrollbars');\r\n      const [theme, themeChanged] = _checkOption('scrollbars.theme');\r\n      const [visibility, visibilityChanged] = _checkOption('scrollbars.visibility');\r\n      const [autoHide, autoHideChanged] = _checkOption('scrollbars.autoHide');\r\n      const [autoHideSuspend, autoHideSuspendChanged] = _checkOption('scrollbars.autoHideSuspend');\r\n      const [autoHideDelay] = _checkOption('scrollbars.autoHideDelay');\r\n      const [dragScroll, dragScrollChanged] = _checkOption('scrollbars.dragScroll');\r\n      const [clickScroll, clickScrollChanged] = _checkOption('scrollbars.clickScroll');\r\n      const [overflow, overflowChanged] = _checkOption('overflow');\r\n      const trulyAppeared = _appear && !_force;\r\n      const updateScrollbars =\r\n        _overflowEdgeChanged ||\r\n        _overflowAmountChanged ||\r\n        _scrollCoordinatesChanged ||\r\n        _directionChanged ||\r\n        _force;\r\n      const updateVisibility = _overflowStyleChanged || visibilityChanged || overflowChanged;\r\n      const showNativeOverlaidScrollbars =\r\n        showNativeOverlaidScrollbarsOption &&\r\n        _nativeScrollbarsOverlaid.x &&\r\n        _nativeScrollbarsOverlaid.y;\r\n      const cantHideScrollbars = !_nativeScrollbarsHiding && !scrollbarsHidingPlugin;\r\n      const showNativeScrollbars = showNativeOverlaidScrollbars || cantHideScrollbars;\r\n\r\n      const setScrollbarVisibility = (\r\n        overflowBehavior: OverflowBehavior,\r\n        overflowStyle: OverflowStyle,\r\n        isHorizontal: boolean\r\n      ) => {\r\n        const isVisible =\r\n          overflowBehavior.includes(strScroll) &&\r\n          (visibility === strVisible || (visibility === 'auto' && overflowStyle === strScroll));\r\n\r\n        _scrollbarsAddRemoveClass(classNameScrollbarVisible, isVisible, isHorizontal);\r\n\r\n        return isVisible;\r\n      };\r\n\r\n      instanceAutoHideDelay = autoHideDelay;\r\n\r\n      if (showNativeOverlaidScrollbarsChanged || cantHideScrollbars) {\r\n        _scrollbarsAddRemoveClass(classNameScrollbarThemeNone, showNativeScrollbars);\r\n      }\r\n\r\n      if (themeChanged) {\r\n        _scrollbarsAddRemoveClass(prevTheme);\r\n        _scrollbarsAddRemoveClass(theme, true);\r\n\r\n        prevTheme = theme;\r\n      }\r\n\r\n      if (autoHideSuspendChanged || trulyAppeared) {\r\n        manageAutoHideSuspension(!autoHideSuspend);\r\n\r\n        if (trulyAppeared && autoHideSuspend) {\r\n          if (_hasOverflow.x || _hasOverflow.y) {\r\n            instanceAutoHideSuspendScrollDestroyFn();\r\n            autoHideSuspendTimeout(() => {\r\n              instanceAutoHideSuspendScrollDestroyFn = addEventListener(\r\n                _scrollEventElement,\r\n                strScroll,\r\n                skipEventIfSleeping(bind(manageAutoHideSuspension, true)),\r\n                {\r\n                  _once: true,\r\n                }\r\n              );\r\n            });\r\n          } else {\r\n            manageAutoHideSuspension(true);\r\n          }\r\n        }\r\n      }\r\n\r\n      if (autoHideChanged) {\r\n        autoHideIsMove = autoHide === 'move';\r\n        autoHideIsLeave = autoHide === 'leave';\r\n        autoHideIsNever = autoHide === 'never';\r\n\r\n        manageScrollbarsAutoHide(autoHideIsNever, true);\r\n      }\r\n\r\n      if (dragScrollChanged) {\r\n        _scrollbarsAddRemoveClass(classNameScrollbarHandleInteractive, dragScroll);\r\n      }\r\n\r\n      if (clickScrollChanged) {\r\n        _scrollbarsAddRemoveClass(classNameScrollbarTrackInteractive, !!clickScroll);\r\n      }\r\n\r\n      // always update scrollbar visibility before scrollbar size\r\n      // the scrollbar size is influenced whether both or just one scrollbar is visible (because of the corner element)\r\n      if (updateVisibility) {\r\n        const xVisible = setScrollbarVisibility(overflow.x, _overflowStyle.x, true);\r\n        const yVisible = setScrollbarVisibility(overflow.y, _overflowStyle.y, false);\r\n        const hasCorner = xVisible && yVisible;\r\n\r\n        _scrollbarsAddRemoveClass(classNameScrollbarCornerless, !hasCorner);\r\n      }\r\n\r\n      // always update scrollbar sizes after the visibility\r\n      if (updateScrollbars) {\r\n        _refreshScrollbarsHandleOffset();\r\n        _refreshScrollbarsHandleLength();\r\n        _refreshScrollbarsScrollbarOffset();\r\n        if (_scrollCoordinatesChanged) {\r\n          _refreshScrollbarsScrollCoordinates();\r\n        }\r\n\r\n        _scrollbarsAddRemoveClass(classNameScrollbarUnusable, !_hasOverflow.x, true);\r\n        _scrollbarsAddRemoveClass(classNameScrollbarUnusable, !_hasOverflow.y, false);\r\n        _scrollbarsAddRemoveClass(classNameScrollbarRtl, _directionIsRTL && !_isBody);\r\n      }\r\n    },\r\n    {},\r\n    elements,\r\n  ];\r\n};\r\n","import type {\r\n  InitializationTarget,\r\n  InitializationTargetElement,\r\n  InitializationTargetObject,\r\n} from '../../initialization';\r\nimport {\r\n  isHTMLElement,\r\n  appendChildren,\r\n  createDiv,\r\n  contents,\r\n  parent,\r\n  removeElements,\r\n  push,\r\n  runEachAndClear,\r\n  removeAttrs,\r\n  hasAttrClass,\r\n  addEventListener,\r\n  bind,\r\n  inArray,\r\n  addAttrClass,\r\n  addRemoveAttrClass,\r\n  setAttrs,\r\n  getAttr,\r\n  isBodyElement,\r\n  getFocusedElement,\r\n  wnd,\r\n  focusElement,\r\n  stopAndPrevent,\r\n  getOffsetSize,\r\n  getScrollSize,\r\n  getStyles,\r\n  strOverflowX,\r\n  strOverflowY,\r\n} from '../../support';\r\nimport {\r\n  dataAttributeHost,\r\n  dataAttributeInitialize,\r\n  dataAttributeViewport,\r\n  dataValueViewportScrollbarHidden,\r\n  dataAttributePadding,\r\n  dataAttributeContent,\r\n  dataAttributeHtmlBody,\r\n  dataValueHostIsHost,\r\n  dataValueViewportScrolling,\r\n} from '../../classnames';\r\nimport { getEnvironment } from '../../environment';\r\nimport {\r\n  staticInitializationElement as generalStaticInitializationElement,\r\n  dynamicInitializationElement as generalDynamicInitializationElement,\r\n} from '../../initialization';\r\nimport { overflowIsVisible } from './structureSetup.utils';\r\n\r\nexport type StructureSetupElements = [\r\n  elements: StructureSetupElementsObj,\r\n  appendElements: () => () => void,\r\n  canceled: () => void,\r\n];\r\n\r\nexport interface StructureSetupElementsObj {\r\n  _target: InitializationTargetElement;\r\n  _host: HTMLElement;\r\n  _viewport: HTMLElement;\r\n  _padding: HTMLElement | false;\r\n  _content: HTMLElement | false;\r\n  _scrollOffsetElement: HTMLElement;\r\n  _scrollEventElement: HTMLElement | Document;\r\n  _originalScrollOffsetElement: HTMLElement;\r\n  // ctx ----\r\n  _isBody: boolean;\r\n  _documentElm: Document;\r\n  _targetIsElm: boolean;\r\n  _viewportIsTarget: boolean;\r\n  _windowElm: () => Window;\r\n  _viewportHasClass: (viewportAttributeClassName: string) => boolean;\r\n  _viewportAddRemoveClass: (viewportAttributeClassName: string, add?: boolean) => () => void;\r\n  _removeScrollObscuringStyles: () => () => void;\r\n}\r\n\r\nexport const createStructureSetupElements = (\r\n  target: InitializationTarget\r\n): StructureSetupElements => {\r\n  const env = getEnvironment();\r\n  const { _getDefaultInitialization, _nativeScrollbarsHiding } = env;\r\n  const { elements: defaultInitElements } = _getDefaultInitialization();\r\n  const {\r\n    padding: defaultPaddingInitialization,\r\n    viewport: defaultViewportInitialization,\r\n    content: defaultContentInitialization,\r\n  } = defaultInitElements;\r\n  const targetIsElm = isHTMLElement(target);\r\n  const targetStructureInitialization = (targetIsElm ? {} : target) as InitializationTargetObject;\r\n  const { elements: initElements } = targetStructureInitialization;\r\n  const {\r\n    padding: paddingInitialization,\r\n    viewport: viewportInitialization,\r\n    content: contentInitialization,\r\n  } = initElements || {};\r\n\r\n  const targetElement = targetIsElm ? target : targetStructureInitialization.target;\r\n  const isBody = isBodyElement(targetElement);\r\n  const ownerDocument = targetElement.ownerDocument;\r\n  const docElement = ownerDocument.documentElement;\r\n  const getDocumentWindow = () => ownerDocument.defaultView || wnd;\r\n  const staticInitializationElement = bind(generalStaticInitializationElement, [targetElement]);\r\n  const dynamicInitializationElement = bind(generalDynamicInitializationElement, [targetElement]);\r\n  const createNewDiv = bind(createDiv, '');\r\n  const generateViewportElement = bind(\r\n    staticInitializationElement,\r\n    createNewDiv,\r\n    defaultViewportInitialization\r\n  );\r\n  const generateContentElement = bind(\r\n    dynamicInitializationElement,\r\n    createNewDiv,\r\n    defaultContentInitialization\r\n  );\r\n  const elementHasOverflow = (elm: HTMLElement) => {\r\n    const offsetSize = getOffsetSize(elm);\r\n    const scrollSize = getScrollSize(elm);\r\n    const overflowX = getStyles(elm, strOverflowX);\r\n    const overflowY = getStyles(elm, strOverflowY);\r\n\r\n    return (\r\n      (scrollSize.w - offsetSize.w > 0 && !overflowIsVisible(overflowX)) ||\r\n      (scrollSize.h - offsetSize.h > 0 && !overflowIsVisible(overflowY))\r\n    );\r\n  };\r\n  const possibleViewportElement = generateViewportElement(viewportInitialization);\r\n  const viewportIsTarget = possibleViewportElement === targetElement;\r\n  const viewportIsTargetBody = viewportIsTarget && isBody;\r\n  const possibleContentElement = !viewportIsTarget && generateContentElement(contentInitialization);\r\n  // edge case if passed viewportElement is contentElement:\r\n  // viewport element has higher priority and content element will not be generated\r\n  // will act the same way as initialization: `{ elements: { viewport, content: false } }`\r\n  const viewportIsContent = !viewportIsTarget && possibleViewportElement === possibleContentElement;\r\n  const viewportElement = viewportIsTargetBody ? docElement : possibleViewportElement;\r\n  const hostElement = viewportIsTargetBody ? viewportElement : targetElement;\r\n  const paddingElement =\r\n    !viewportIsTarget &&\r\n    dynamicInitializationElement(createNewDiv, defaultPaddingInitialization, paddingInitialization);\r\n  const contentElement = !viewportIsContent && possibleContentElement;\r\n  const generatedElements = [contentElement, viewportElement, paddingElement, hostElement].map(\r\n    (elm) => isHTMLElement(elm) && !parent(elm) && elm\r\n  );\r\n  const elementIsGenerated = (elm: HTMLElement | false) => elm && inArray(generatedElements, elm);\r\n  const originalNonBodyScrollOffsetElement =\r\n    !elementIsGenerated(viewportElement) && elementHasOverflow(viewportElement)\r\n      ? viewportElement\r\n      : targetElement;\r\n  const scrollOffsetElement = viewportIsTargetBody ? docElement : viewportElement;\r\n  const scrollEventElement = viewportIsTargetBody ? ownerDocument : viewportElement;\r\n\r\n  const evaluatedTargetObj: StructureSetupElementsObj = {\r\n    _target: targetElement,\r\n    _host: hostElement,\r\n    _viewport: viewportElement,\r\n    _padding: paddingElement,\r\n    _content: contentElement,\r\n    _scrollOffsetElement: scrollOffsetElement,\r\n    _scrollEventElement: scrollEventElement,\r\n    _originalScrollOffsetElement: isBody ? docElement : originalNonBodyScrollOffsetElement,\r\n    _documentElm: ownerDocument,\r\n    _isBody: isBody,\r\n    _targetIsElm: targetIsElm,\r\n    _viewportIsTarget: viewportIsTarget,\r\n    _windowElm: getDocumentWindow,\r\n    _viewportHasClass: (viewportAttributeClassName: string) =>\r\n      hasAttrClass(viewportElement, dataAttributeViewport, viewportAttributeClassName),\r\n    _viewportAddRemoveClass: (viewportAttributeClassName: string, add?: boolean) =>\r\n      addRemoveAttrClass(viewportElement, dataAttributeViewport, viewportAttributeClassName, add),\r\n    _removeScrollObscuringStyles: () =>\r\n      addRemoveAttrClass(\r\n        scrollOffsetElement,\r\n        dataAttributeViewport,\r\n        dataValueViewportScrolling,\r\n        true\r\n      ),\r\n  };\r\n  const { _target, _host, _padding, _viewport, _content } = evaluatedTargetObj;\r\n  const destroyFns: (() => void)[] = [\r\n    () => {\r\n      // always remove dataAttributeHost & dataAttributeInitialize from host and from <html> element if target is body\r\n      removeAttrs(_host, [dataAttributeHost, dataAttributeInitialize]);\r\n      removeAttrs(_target, dataAttributeInitialize);\r\n      if (isBody) {\r\n        removeAttrs(docElement, [dataAttributeInitialize, dataAttributeHost]);\r\n      }\r\n    },\r\n  ];\r\n  let targetContents = contents(\r\n    [_content, _viewport, _padding, _host, _target].find((elm) => elm && !elementIsGenerated(elm))\r\n  );\r\n  const contentSlot = viewportIsTargetBody ? _target : _content || _viewport;\r\n  const destroy = bind(runEachAndClear, destroyFns);\r\n  const appendElements = () => {\r\n    const docWnd = getDocumentWindow();\r\n    const initActiveElm = getFocusedElement();\r\n    const unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n      appendChildren(parent(elm), contents(elm));\r\n      removeElements(elm);\r\n    };\r\n    // wrapping / unwrapping will cause the focused element to blur, this should prevent those events to surface\r\n    const prepareWrapUnwrapFocus = (activeElement: Element | false | null | undefined) =>\r\n      addEventListener(activeElement, 'focusin focusout focus blur', stopAndPrevent, {\r\n        _capture: true,\r\n        _passive: false,\r\n      });\r\n    const tabIndexStr = 'tabindex';\r\n    const originalViewportTabIndex = getAttr(_viewport, tabIndexStr);\r\n    const undoInitWrapUndwrapFocus = prepareWrapUnwrapFocus(initActiveElm);\r\n    setAttrs(_host, dataAttributeHost, viewportIsTarget ? '' : dataValueHostIsHost);\r\n    setAttrs(_padding, dataAttributePadding, '');\r\n    setAttrs(_viewport, dataAttributeViewport, '');\r\n    setAttrs(_content, dataAttributeContent, '');\r\n\r\n    if (!viewportIsTarget) {\r\n      setAttrs(_viewport, tabIndexStr, originalViewportTabIndex || '-1');\r\n      if (isBody) {\r\n        setAttrs(docElement, dataAttributeHtmlBody, '');\r\n      }\r\n    }\r\n\r\n    appendChildren(contentSlot, targetContents);\r\n    appendChildren(_host, _padding);\r\n    appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n    appendChildren(_viewport, _content);\r\n\r\n    push(destroyFns, [\r\n      undoInitWrapUndwrapFocus,\r\n      () => {\r\n        const destroyActiveElm = getFocusedElement();\r\n        const viewportIsGenerated = elementIsGenerated(_viewport);\r\n        // if the focused element is viewport and viewport will be destroyed shift the focus to target\r\n        // otherwise keep the focused element\r\n        const destroyFocusElement =\r\n          viewportIsGenerated && destroyActiveElm === _viewport ? _target : destroyActiveElm;\r\n        const undoDestroyWrapUndwrapFocus = prepareWrapUnwrapFocus(destroyFocusElement);\r\n        removeAttrs(_padding, dataAttributePadding);\r\n        removeAttrs(_content, dataAttributeContent);\r\n        removeAttrs(_viewport, dataAttributeViewport);\r\n        if (isBody) {\r\n          removeAttrs(docElement, dataAttributeHtmlBody);\r\n        }\r\n        if (originalViewportTabIndex) {\r\n          setAttrs(_viewport, tabIndexStr, originalViewportTabIndex);\r\n        } else {\r\n          removeAttrs(_viewport, tabIndexStr);\r\n        }\r\n\r\n        if (elementIsGenerated(_content)) {\r\n          unwrap(_content);\r\n        }\r\n        if (viewportIsGenerated) {\r\n          unwrap(_viewport);\r\n        }\r\n        if (elementIsGenerated(_padding)) {\r\n          unwrap(_padding);\r\n        }\r\n\r\n        focusElement(destroyFocusElement);\r\n        undoDestroyWrapUndwrapFocus();\r\n      },\r\n    ]);\r\n\r\n    if (_nativeScrollbarsHiding && !viewportIsTarget) {\r\n      addAttrClass(_viewport, dataAttributeViewport, dataValueViewportScrollbarHidden);\r\n      push(destroyFns, bind(removeAttrs, _viewport, dataAttributeViewport));\r\n    }\r\n\r\n    // keep the original focused element focused except when\r\n    // the target is body and viewport is not target, then shift the focus to the viewport element\r\n    focusElement(\r\n      !viewportIsTarget && isBody && initActiveElm === _target && docWnd.top === docWnd\r\n        ? _viewport\r\n        : initActiveElm\r\n    );\r\n    undoInitWrapUndwrapFocus();\r\n\r\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n    // @ts-ignore\r\n    targetContents = 0;\r\n\r\n    return destroy;\r\n  };\r\n\r\n  return [evaluatedTargetObj, appendElements, destroy];\r\n};\r\n","import type { CreateStructureUpdateSegment } from '../structureSetup';\r\nimport { setStyles, strHeight } from '../../../support';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdateSegment: CreateStructureUpdateSegment =\r\n  ({ _content }) =>\r\n  ({ _observersUpdateHints, _observersState, _force }) => {\r\n    const { _heightIntrinsicChanged } = _observersUpdateHints || {};\r\n    const { _heightIntrinsic } = _observersState;\r\n    const heightIntrinsicChanged = _content && (_heightIntrinsicChanged || _force);\r\n\r\n    if (heightIntrinsicChanged) {\r\n      setStyles(_content, {\r\n        [strHeight]: _heightIntrinsic && '100%',\r\n      });\r\n    }\r\n  };\r\n","import type { StyleObject } from '../../../typings';\r\nimport type { CreateStructureUpdateSegment } from '../structureSetup';\r\nimport {\r\n  createCache,\r\n  topRightBottomLeft,\r\n  equalTRBL,\r\n  assignDeep,\r\n  bind,\r\n  strMarginBottom,\r\n  strMarginLeft,\r\n  strMarginRight,\r\n  strPaddingBottom,\r\n  strPaddingLeft,\r\n  strPaddingRight,\r\n  strPaddingTop,\r\n  strWidth,\r\n  setStyles,\r\n} from '../../../support';\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 structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdateSegment: CreateStructureUpdateSegment = (\r\n  { _host, _padding, _viewport, _viewportIsTarget },\r\n  state\r\n) => {\r\n  const [updatePaddingCache, currentPaddingCache] = createCache(\r\n    {\r\n      _equal: equalTRBL,\r\n      _initialValue: topRightBottomLeft(),\r\n    },\r\n    bind(topRightBottomLeft, _host, 'padding', '')\r\n  );\r\n\r\n  return ({ _checkOption, _observersUpdateHints, _observersState, _force }) => {\r\n    let [padding, paddingChanged] = currentPaddingCache(_force);\r\n    const { _nativeScrollbarsHiding } = getEnvironment();\r\n    const { _sizeChanged, _contentMutation, _directionChanged } = _observersUpdateHints || {};\r\n    const { _directionIsRTL } = _observersState;\r\n    const [paddingAbsolute, paddingAbsoluteChanged] = _checkOption('paddingAbsolute');\r\n    const contentMutation = _force || _contentMutation;\r\n\r\n    if (_sizeChanged || paddingChanged || contentMutation) {\r\n      [padding, paddingChanged] = updatePaddingCache(_force);\r\n    }\r\n\r\n    const paddingStyleChanged =\r\n      !_viewportIsTarget && (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 && !_nativeScrollbarsHiding);\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        [strMarginRight]: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n        [strMarginBottom]: paddingRelative ? -paddingVertical : 0,\r\n        [strMarginLeft]: 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        [strWidth]: paddingRelative && `calc(100% + ${paddingHorizontal}px)`,\r\n      };\r\n      const viewportStyle: StyleObject = {\r\n        [strPaddingTop]: paddingRelative ? padding.t : 0,\r\n        [strPaddingRight]: paddingRelative ? padding.r : 0,\r\n        [strPaddingBottom]: paddingRelative ? padding.b : 0,\r\n        [strPaddingLeft]: 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      setStyles(_padding || _viewport, paddingStyle);\r\n      setStyles(_viewport, viewportStyle);\r\n\r\n      assignDeep(state, {\r\n        _padding: padding,\r\n        _paddingAbsolute: !paddingRelative,\r\n        _viewportPaddingStyle: _padding\r\n          ? viewportStyle\r\n          : assignDeep({}, paddingStyle, viewportStyle),\r\n      });\r\n    }\r\n\r\n    return {\r\n      _paddingStyleChanged: paddingStyleChanged,\r\n    };\r\n  };\r\n};\r\n","import type { ScrollCoordinates, WH, XY } from '../../../support';\r\nimport type { ScrollbarsHidingPlugin } from '../../../plugins/scrollbarsHidingPlugin';\r\nimport type { OverflowStyle } from '../../../typings';\r\nimport type { CreateStructureUpdateSegment } from '../structureSetup';\r\nimport {\r\n  createCache,\r\n  getScrollSize,\r\n  getFractionalSize,\r\n  equalWH,\r\n  getClientSize,\r\n  equalXY,\r\n  assignDeep,\r\n  bind,\r\n  wnd,\r\n  mathMax,\r\n  getWindowSize,\r\n  addRemoveAttrClass,\r\n  capitalizeFirstLetter,\r\n  setStyles,\r\n  strVisible,\r\n  strHidden,\r\n  keys,\r\n  strScroll,\r\n  scrollElementTo,\r\n  getElementScroll,\r\n  sanitizeScrollCoordinates,\r\n  getStyles,\r\n  getZeroScrollCoordinates,\r\n  hasDimensions,\r\n  addEventListener,\r\n  stopPropagation,\r\n  rAF,\r\n  hasAttrClass,\r\n  mathAbs,\r\n  equal,\r\n  concat,\r\n  deduplicateArray,\r\n  isString,\r\n} from '../../../support';\r\nimport { getEnvironment } from '../../../environment';\r\nimport {\r\n  dataAttributeHost,\r\n  dataValueNoClipping,\r\n  dataValueViewportScrollbarHidden,\r\n  dataAttributePadding,\r\n  dataValueViewportOverflowXPrefix,\r\n  dataValueViewportOverflowYPrefix,\r\n  dataValueViewportNoContent,\r\n  dataValueViewportMeasuring,\r\n} from '../../../classnames';\r\nimport { getStaticPluginModuleInstance, scrollbarsHidingPluginName } from '../../../plugins';\r\nimport {\r\n  getShowNativeOverlaidScrollbars,\r\n  getElementOverflowStyle,\r\n  overflowBehaviorToOverflowStyle,\r\n  overflowCssValueToOverflowStyle,\r\n  overflowIsVisible,\r\n} from '../structureSetup.utils';\r\nimport { OverflowBehavior } from '../../../options';\r\n\r\ninterface FlowDirectionStyles {\r\n  display?: string;\r\n  direction?: string;\r\n  flexDirection?: string;\r\n  writingMode?: string;\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 structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdateSegment: CreateStructureUpdateSegment = (\r\n  structureSetupElements,\r\n  structureSetupState\r\n) => {\r\n  const env = getEnvironment();\r\n  const {\r\n    _host,\r\n    _padding,\r\n    _viewport,\r\n    _viewportIsTarget,\r\n    _scrollEventElement,\r\n    _scrollOffsetElement,\r\n    _isBody,\r\n    _viewportAddRemoveClass,\r\n    _windowElm,\r\n  } = structureSetupElements;\r\n  const { _nativeScrollbarsHiding } = env;\r\n  const viewportIsTargetBody = _isBody && _viewportIsTarget;\r\n  const max0 = bind(mathMax, 0);\r\n  const flowDirectionCanBeNonDefaultMap: Record<\r\n    keyof FlowDirectionStyles,\r\n    (styleValue: string) => boolean\r\n  > = {\r\n    display: () => false,\r\n    direction: (directionStyle) => directionStyle !== 'ltr',\r\n    flexDirection: (flexDirectionStyle) => flexDirectionStyle.endsWith('-reverse'),\r\n    writingMode: (writingModeStyle) => writingModeStyle !== 'horizontal-tb',\r\n  };\r\n  const flowDirectionStyleArr = keys(flowDirectionCanBeNonDefaultMap) as Array<\r\n    keyof FlowDirectionStyles\r\n  >;\r\n  const whCacheOptions = {\r\n    _equal: equalWH,\r\n    _initialValue: { w: 0, h: 0 },\r\n  };\r\n  const partialXYOptions = {\r\n    _equal: equalXY,\r\n    _initialValue: {},\r\n  };\r\n\r\n  const setMeasuringMode = (active: boolean) => {\r\n    // viewportIsTargetBody never needs measuring\r\n    _viewportAddRemoveClass(dataValueViewportMeasuring, !viewportIsTargetBody && active);\r\n  };\r\n\r\n  const getFlowDirectionStyles = (): Record<string, unknown> =>\r\n    getStyles(_viewport, flowDirectionStyleArr);\r\n  const getMeasuredScrollCoordinates = (\r\n    flowDirectionStyles: Record<string, unknown>,\r\n    flowDirectionStylesComingFromOptions: boolean\r\n  ) => {\r\n    const skipFlowDirectionCheck = !keys(flowDirectionStyles).length;\r\n    const flowDirectionStylesIndicateNonDefaultFlowDirection = flowDirectionStylesComingFromOptions\r\n      ? true\r\n      : flowDirectionStyleArr.some((styleName) => {\r\n          const styleValue = flowDirectionStyles[styleName];\r\n          return isString(styleValue) && flowDirectionCanBeNonDefaultMap[styleName](styleValue);\r\n        });\r\n\r\n    // if the direction is default or the element has no dimensions return default scroll coordinates (only the sign of the numbers matters)\r\n    if (\r\n      skipFlowDirectionCheck ||\r\n      !flowDirectionStylesIndicateNonDefaultFlowDirection ||\r\n      !hasDimensions(_viewport)\r\n    ) {\r\n      return {\r\n        _start: { x: 0, y: 0 },\r\n        _end: { x: 1, y: 1 },\r\n      };\r\n    }\r\n\r\n    setMeasuringMode(true);\r\n\r\n    const originalScrollOffset = getElementScroll(_scrollOffsetElement);\r\n    const removeScrollBlock = addEventListener(\r\n      _scrollEventElement,\r\n      strScroll,\r\n      (event) => {\r\n        const scrollEventScrollOffset = getElementScroll(_scrollOffsetElement);\r\n        // if scroll offset didnt change\r\n        if (\r\n          event.isTrusted &&\r\n          scrollEventScrollOffset.x === originalScrollOffset.x &&\r\n          scrollEventScrollOffset.y === originalScrollOffset.y\r\n        ) {\r\n          stopPropagation(event);\r\n        }\r\n      },\r\n      {\r\n        _capture: true,\r\n        _once: true,\r\n      }\r\n    );\r\n    const removeNoContent = _viewportAddRemoveClass(dataValueViewportNoContent, true);\r\n\r\n    scrollElementTo(_scrollOffsetElement, {\r\n      x: 0,\r\n      y: 0,\r\n    });\r\n    removeNoContent();\r\n\r\n    const _start = getElementScroll(_scrollOffsetElement);\r\n    const scrollSize = getScrollSize(_scrollOffsetElement);\r\n    scrollElementTo(_scrollOffsetElement, {\r\n      x: scrollSize.w,\r\n      y: scrollSize.h,\r\n    });\r\n    const positiveScroll = getElementScroll(_scrollOffsetElement);\r\n    const positiveDistance = {\r\n      x: positiveScroll.x - _start.x,\r\n      y: positiveScroll.y - _start.y,\r\n    };\r\n\r\n    scrollElementTo(_scrollOffsetElement, {\r\n      x: -scrollSize.w,\r\n      y: -scrollSize.h,\r\n    });\r\n    const negativeScroll = getElementScroll(_scrollOffsetElement);\r\n    const negativeDistance = {\r\n      x: negativeScroll.x - _start.x,\r\n      y: negativeScroll.y - _start.y,\r\n    };\r\n\r\n    // take the scroll positions which scrolled the greatest distance\r\n    // because of: https://github.com/KingSora/OverlayScrollbars/issues/625#issuecomment-3778048936\r\n    // this logic is in place due to rounding issues of the `scrollTop` / `scrollLeft` properties\r\n    // its possible that even if the scroll coordinates are effectively 0..-100 the scroll value is 1 which is outside of the coordinate system\r\n    // this happens because the browser rounds the value to 1 even if it should be 0\r\n    const _end = {\r\n      x:\r\n        mathAbs(positiveDistance.x) >= mathAbs(negativeDistance.x)\r\n          ? positiveScroll.x\r\n          : negativeScroll.x,\r\n      y:\r\n        mathAbs(positiveDistance.y) >= mathAbs(negativeDistance.y)\r\n          ? positiveScroll.y\r\n          : negativeScroll.y,\r\n    };\r\n    scrollElementTo(_scrollOffsetElement, originalScrollOffset);\r\n    rAF(() => removeScrollBlock());\r\n\r\n    return {\r\n      _start,\r\n      _end,\r\n    };\r\n  };\r\n  const getOverflowAmount = (\r\n    viewportScrollSize: WH<number>,\r\n    viewportClientSize: WH<number>\r\n  ): WH<number> => {\r\n    const tollerance = wnd.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n    const amount = {\r\n      w: max0(viewportScrollSize.w - viewportClientSize.w),\r\n      h: max0(viewportScrollSize.h - viewportClientSize.h),\r\n    };\r\n\r\n    return {\r\n      w: amount.w > tollerance ? amount.w : 0,\r\n      h: amount.h > tollerance ? amount.h : 0,\r\n    };\r\n  };\r\n  const getViewportOverflowStyle = (\r\n    hasOverflow: Partial<XY<boolean>>,\r\n    overflowBehavior: XY<OverflowBehavior>\r\n  ): XY<OverflowStyle> => {\r\n    const getAxisOverflowStyle = (\r\n      axisBehavior: OverflowBehavior,\r\n      axisHasOverflow: boolean | undefined,\r\n      perpendicularBehavior: OverflowBehavior,\r\n      perpendicularOverflow: boolean | undefined\r\n    ): OverflowStyle => {\r\n      // convert behavior to style:\r\n      // 'visible'        -> 'hidden'\r\n      // 'hidden'         -> 'hidden'\r\n      // 'scroll'         -> 'scroll'\r\n      // 'visible-hidden' -> 'hidden'\r\n      // 'visible-scroll' -> 'scroll'\r\n      const behaviorStyle =\r\n        axisBehavior === strVisible ? strHidden : overflowBehaviorToOverflowStyle(axisBehavior);\r\n      const axisOverflowVisible = overflowIsVisible(axisBehavior);\r\n      const perpendicularOverflowVisible = overflowIsVisible(perpendicularBehavior);\r\n\r\n      // if no axis has overflow set 'hidden'\r\n      if (!axisHasOverflow && !perpendicularOverflow) {\r\n        return strHidden;\r\n      }\r\n\r\n      // if both axis have a visible behavior ('visible', 'visible-hidden', 'visible-scroll') set 'visible'\r\n      if (axisOverflowVisible && perpendicularOverflowVisible) {\r\n        return strVisible;\r\n      }\r\n\r\n      // this this axis has a visible behavior\r\n      if (axisOverflowVisible) {\r\n        const nonPerpendicularOverflow = axisHasOverflow ? strVisible : strHidden;\r\n        return axisHasOverflow && perpendicularOverflow\r\n          ? behaviorStyle // if both axis have an overflow set ('hidden' or 'scroll')\r\n          : nonPerpendicularOverflow; // if only this axis has an overflow set 'visible', if no axis has an overflow set 'hidden'\r\n      }\r\n\r\n      const nonOverflow =\r\n        perpendicularOverflowVisible && perpendicularOverflow ? strVisible : strHidden;\r\n      return axisHasOverflow\r\n        ? behaviorStyle // if this axis has an overflow\r\n        : nonOverflow; // if the perp. axis has a visible behavior and has an overflow set 'visible', otherwise set 'hidden'\r\n    };\r\n\r\n    return {\r\n      x: getAxisOverflowStyle(overflowBehavior.x, hasOverflow.x, overflowBehavior.y, hasOverflow.y),\r\n      y: getAxisOverflowStyle(overflowBehavior.y, hasOverflow.y, overflowBehavior.x, hasOverflow.x),\r\n    };\r\n  };\r\n  const setViewportOverflowStyle = (viewportOverflowStyle: XY<OverflowStyle>) => {\r\n    // `createAllOverflowStyleClassNames` and `allOverflowStyleClassNames` could be one scope further up but would increase bundle size\r\n    const createAllOverflowStyleClassNames = (isHorizontal?: boolean) =>\r\n      [strVisible, strHidden, strScroll].map((style) =>\r\n        createViewportOverflowStyleClassName(overflowCssValueToOverflowStyle(style), isHorizontal)\r\n      );\r\n    const allOverflowStyleClassNames = createAllOverflowStyleClassNames(true)\r\n      .concat(createAllOverflowStyleClassNames())\r\n      .join(' ');\r\n\r\n    _viewportAddRemoveClass(allOverflowStyleClassNames);\r\n    _viewportAddRemoveClass(\r\n      (keys(viewportOverflowStyle) as Array<keyof typeof viewportOverflowStyle>)\r\n        .map((axis) =>\r\n          createViewportOverflowStyleClassName(viewportOverflowStyle[axis], axis === 'x')\r\n        )\r\n        .join(' '),\r\n      true\r\n    );\r\n  };\r\n\r\n  const [updateSizeFraction, getCurrentSizeFraction] = createCache<WH<number>>(\r\n    whCacheOptions,\r\n    bind(getFractionalSize, _viewport)\r\n  );\r\n  const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n    WH<number>\r\n  >(whCacheOptions, bind(getScrollSize, _viewport));\r\n  const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n    createCache<WH<number>>(whCacheOptions);\r\n  const [updateHasOverflowCache] = createCache<Partial<XY<boolean>>>(partialXYOptions);\r\n  const [updateOverflowEdge, getCurrentOverflowEdgeCache] = createCache<WH<number>>(whCacheOptions);\r\n  const [updateOverflowStyleCache] = createCache<Partial<XY<OverflowStyle>>>(partialXYOptions);\r\n  const [updateNonDefaultFlowDirectionStyles] = createCache<Record<string, unknown>>({\r\n    _equal: (currVal, newVal) =>\r\n      equal(currVal, newVal, deduplicateArray(concat(keys(currVal), keys(newVal)))),\r\n    _initialValue: {},\r\n  });\r\n  const [updateMeasuredScrollCoordinates, getCurrentMeasuredScrollCoordinates] =\r\n    createCache<ScrollCoordinates>({\r\n      _equal: (currVal, newVal) =>\r\n        equalXY(currVal._start, newVal._start) && equalXY(currVal._end, newVal._end),\r\n      _initialValue: getZeroScrollCoordinates(),\r\n    });\r\n\r\n  const scrollbarsHidingPlugin = getStaticPluginModuleInstance<typeof ScrollbarsHidingPlugin>(\r\n    scrollbarsHidingPluginName\r\n  );\r\n\r\n  const createViewportOverflowStyleClassName = (\r\n    overflowStyle: OverflowStyle,\r\n    isHorizontal?: boolean\r\n  ) => {\r\n    const prefix = isHorizontal\r\n      ? dataValueViewportOverflowXPrefix\r\n      : dataValueViewportOverflowYPrefix;\r\n    return `${prefix}${capitalizeFirstLetter(overflowStyle)}`;\r\n  };\r\n\r\n  return (\r\n    { _checkOption, _observersUpdateHints, _observersState, _force },\r\n    { _paddingStyleChanged }\r\n  ) => {\r\n    const {\r\n      _sizeChanged,\r\n      _hostMutation,\r\n      _contentMutation,\r\n      _directionChanged,\r\n      _appear,\r\n      _scrollbarSizeChanged,\r\n    } = _observersUpdateHints || {};\r\n    const scrollbarsHidingPluginViewportArrangement =\r\n      scrollbarsHidingPlugin &&\r\n      scrollbarsHidingPlugin._viewportArrangement(\r\n        structureSetupElements,\r\n        structureSetupState,\r\n        _observersState,\r\n        env,\r\n        _checkOption\r\n      );\r\n\r\n    const { _arrangeViewport, _undoViewportArrange, _hideNativeScrollbars } =\r\n      scrollbarsHidingPluginViewportArrangement || {};\r\n\r\n    const [showNativeOverlaidScrollbars, showNativeOverlaidScrollbarsChanged] =\r\n      getShowNativeOverlaidScrollbars(_checkOption, env);\r\n    const [overflow, overflowChanged] = _checkOption('overflow');\r\n    const overflowXVisible = overflowIsVisible(overflow.x);\r\n    const overflowYVisible = overflowIsVisible(overflow.y);\r\n\r\n    const viewportChanged =\r\n      _sizeChanged ||\r\n      _paddingStyleChanged ||\r\n      _contentMutation ||\r\n      _directionChanged ||\r\n      _scrollbarSizeChanged ||\r\n      showNativeOverlaidScrollbarsChanged;\r\n\r\n    let sizeFractionCache = getCurrentSizeFraction(_force);\r\n    let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(_force);\r\n    let overflowAmuntCache = getCurrentOverflowAmountCache(_force);\r\n    let overflowEdgeCache = getCurrentOverflowEdgeCache(_force);\r\n\r\n    if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\r\n      _viewportAddRemoveClass(dataValueViewportScrollbarHidden, !showNativeOverlaidScrollbars);\r\n    }\r\n\r\n    if (viewportChanged) {\r\n      if (hasAttrClass(_host, dataAttributeHost, dataValueNoClipping)) {\r\n        setMeasuringMode(true);\r\n      }\r\n\r\n      const redoViewportArrange = _undoViewportArrange && _undoViewportArrange();\r\n\r\n      const [sizeFraction] = (sizeFractionCache = updateSizeFraction(_force));\r\n      const [viewportScrollSize] = (viewportScrollSizeCache =\r\n        updateViewportScrollSizeCache(_force));\r\n      const viewportClientSize = getClientSize(_viewport);\r\n      const windowInnerSize = viewportIsTargetBody && getWindowSize(_windowElm());\r\n      const overflowAmountScrollSize = {\r\n        w: max0(viewportScrollSize.w + sizeFraction.w),\r\n        h: max0(viewportScrollSize.h + sizeFraction.h),\r\n      };\r\n\r\n      const overflowAmountClientSize = {\r\n        w: max0(\r\n          (windowInnerSize\r\n            ? windowInnerSize.w\r\n            : viewportClientSize.w + max0(viewportClientSize.w - viewportScrollSize.w)) +\r\n            sizeFraction.w\r\n        ),\r\n        h: max0(\r\n          (windowInnerSize\r\n            ? windowInnerSize.h\r\n            : viewportClientSize.h + max0(viewportClientSize.h - viewportScrollSize.h)) +\r\n            sizeFraction.h\r\n        ),\r\n      };\r\n\r\n      if (redoViewportArrange) {\r\n        redoViewportArrange();\r\n      }\r\n\r\n      overflowEdgeCache = updateOverflowEdge(overflowAmountClientSize);\r\n      overflowAmuntCache = updateOverflowAmountCache(\r\n        getOverflowAmount(overflowAmountScrollSize, overflowAmountClientSize),\r\n        _force\r\n      );\r\n    }\r\n\r\n    const [overflowEdge, overflowEdgeChanged] = overflowEdgeCache;\r\n    const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n    const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n    const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n    const [hasOverflow /*, hasOverflowChanged */] = updateHasOverflowCache({\r\n      x: overflowAmount.w > 0,\r\n      y: overflowAmount.h > 0,\r\n    });\r\n    const removeClipping =\r\n      (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n      (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n      (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n    const adjustViewportStyle =\r\n      _paddingStyleChanged ||\r\n      _directionChanged ||\r\n      _scrollbarSizeChanged ||\r\n      sizeFractionChanged ||\r\n      viewportScrollSizeChanged ||\r\n      overflowEdgeChanged ||\r\n      overflowAmountChanged ||\r\n      overflowChanged ||\r\n      showNativeOverlaidScrollbarsChanged ||\r\n      viewportChanged ||\r\n      (_hostMutation && viewportIsTargetBody);\r\n    const [flowDirectionStylesOption] = _checkOption('update.flowDirectionStyles');\r\n    const [flowDirectionStyles, flowDirectionStylesChanged] = updateNonDefaultFlowDirectionStyles(\r\n      flowDirectionStylesOption\r\n        ? flowDirectionStylesOption(_viewport) || {}\r\n        : getFlowDirectionStyles(),\r\n      _force\r\n    );\r\n    const adjustMeasuredScrollCoordinates =\r\n      _directionChanged ||\r\n      _appear ||\r\n      flowDirectionStylesChanged ||\r\n      // Lets try to omit hasOverflowChanged here in favor of performance and:\r\n      // https://github.com/KingSora/OverlayScrollbars/issues/756\r\n      // hasOverflowChanged ||\r\n      _force;\r\n    const [scrollCoordinates, scrollCoordinatesChanged] = adjustMeasuredScrollCoordinates\r\n      ? updateMeasuredScrollCoordinates(\r\n          getMeasuredScrollCoordinates(flowDirectionStyles, !!flowDirectionStylesOption),\r\n          _force\r\n        )\r\n      : getCurrentMeasuredScrollCoordinates();\r\n\r\n    let viewportOverflowStyle = getViewportOverflowStyle(hasOverflow, overflow);\r\n\r\n    setMeasuringMode(false);\r\n\r\n    if (adjustViewportStyle) {\r\n      setViewportOverflowStyle(viewportOverflowStyle);\r\n\r\n      viewportOverflowStyle = getElementOverflowStyle(_viewport, hasOverflow);\r\n\r\n      if (_hideNativeScrollbars && _arrangeViewport) {\r\n        _arrangeViewport(viewportOverflowStyle, viewportScrollSize, sizeFraction);\r\n\r\n        setStyles(_viewport, _hideNativeScrollbars(viewportOverflowStyle));\r\n      }\r\n    }\r\n\r\n    const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(viewportOverflowStyle);\r\n\r\n    addRemoveAttrClass(_host, dataAttributeHost, dataValueNoClipping, removeClipping);\r\n    addRemoveAttrClass(_padding, dataAttributePadding, dataValueNoClipping, removeClipping);\r\n\r\n    assignDeep(structureSetupState, {\r\n      _overflowStyle: overflowStyle,\r\n      _overflowEdge: {\r\n        x: overflowEdge.w,\r\n        y: overflowEdge.h,\r\n      },\r\n      _overflowAmount: {\r\n        x: overflowAmount.w,\r\n        y: overflowAmount.h,\r\n      },\r\n      _hasOverflow: hasOverflow,\r\n      _scrollCoordinates: sanitizeScrollCoordinates(scrollCoordinates, overflowAmount),\r\n    });\r\n\r\n    return {\r\n      _overflowStyleChanged: overflowStyleChanged,\r\n      _overflowEdgeChanged: overflowEdgeChanged,\r\n      _overflowAmountChanged: overflowAmountChanged,\r\n      _scrollCoordinatesChanged: scrollCoordinatesChanged || overflowAmountChanged,\r\n    };\r\n  };\r\n};\r\n","import type { TRBL, XY, ScrollCoordinates } from '../../support';\r\nimport type { StructureSetupElementsObj } from './structureSetup.elements';\r\nimport type {\r\n  ObserversSetupState,\r\n  ObserversSetupUpdateHints,\r\n  Setup,\r\n  SetupUpdateInfo,\r\n} from '../../setups';\r\nimport type { InitializationTarget } from '../../initialization';\r\nimport type { StyleObject, OverflowStyle, DeepReadonly } from '../../typings';\r\nimport {\r\n  assignDeep,\r\n  each,\r\n  getElementScroll,\r\n  getZeroScrollCoordinates,\r\n  scrollElementTo,\r\n  strHidden,\r\n  strMarginBottom,\r\n  strMarginLeft,\r\n  strMarginRight,\r\n  strPaddingBottom,\r\n  strPaddingLeft,\r\n  strPaddingRight,\r\n  strPaddingTop,\r\n} from '../../support';\r\nimport { getEnvironment } from '../../environment';\r\nimport { createStructureSetupElements } from './structureSetup.elements';\r\nimport {\r\n  createOverflowUpdateSegment,\r\n  createPaddingUpdateSegment,\r\n  createTrinsicUpdateSegment,\r\n} from './updateSegments';\r\n\r\nexport interface StructureSetupState {\r\n  _padding: TRBL;\r\n  _paddingAbsolute: boolean;\r\n  _viewportPaddingStyle: StyleObject;\r\n  _overflowEdge: XY<number>;\r\n  _overflowAmount: XY<number>;\r\n  _overflowStyle: XY<OverflowStyle>;\r\n  _hasOverflow: XY<boolean>;\r\n  _scrollCoordinates: ScrollCoordinates;\r\n}\r\n\r\nexport interface StructureSetupUpdateInfo extends SetupUpdateInfo {\r\n  _observersState: DeepReadonly<ObserversSetupState>;\r\n  _observersUpdateHints?: DeepReadonly<ObserversSetupUpdateHints>;\r\n}\r\n\r\nexport type StructureSetupUpdateHints = {\r\n  _overflowEdgeChanged?: boolean;\r\n  _overflowAmountChanged?: boolean;\r\n  _overflowStyleChanged?: boolean;\r\n  _paddingStyleChanged?: boolean;\r\n  _scrollCoordinatesChanged?: boolean;\r\n};\r\n\r\nexport type StructureSetup = [\r\n  ...Setup<StructureSetupUpdateInfo, StructureSetupState, StructureSetupUpdateHints>,\r\n  /** The elements created by the structure setup. */\r\n  DeepReadonly<StructureSetupElementsObj>,\r\n  /** Function to be called when the initialization was canceled. */\r\n  () => void,\r\n];\r\n\r\nexport type StructureUpdateSegment = (\r\n  updateInfo: DeepReadonly<StructureSetupUpdateInfo>,\r\n  updateHints: DeepReadonly<StructureSetupUpdateHints>\r\n) => StructureSetupUpdateHints | void;\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n  structureSetupElements: DeepReadonly<StructureSetupElementsObj>,\r\n  state: DeepReadonly<StructureSetupState>\r\n) => StructureUpdateSegment;\r\n\r\nexport const createStructureSetup = (target: InitializationTarget): StructureSetup => {\r\n  const [elements, appendStructureElements, canceled] = createStructureSetupElements(target);\r\n  const state: StructureSetupState = {\r\n    _padding: {\r\n      t: 0,\r\n      r: 0,\r\n      b: 0,\r\n      l: 0,\r\n    },\r\n    _paddingAbsolute: false,\r\n    _viewportPaddingStyle: {\r\n      [strMarginRight]: 0,\r\n      [strMarginBottom]: 0,\r\n      [strMarginLeft]: 0,\r\n      [strPaddingTop]: 0,\r\n      [strPaddingRight]: 0,\r\n      [strPaddingBottom]: 0,\r\n      [strPaddingLeft]: 0,\r\n    },\r\n    _overflowEdge: { x: 0, y: 0 },\r\n    _overflowAmount: { x: 0, y: 0 },\r\n    _overflowStyle: {\r\n      x: strHidden,\r\n      y: strHidden,\r\n    },\r\n    _hasOverflow: {\r\n      x: false,\r\n      y: false,\r\n    },\r\n    _scrollCoordinates: getZeroScrollCoordinates(),\r\n  };\r\n  const { _target, _scrollOffsetElement, _viewportIsTarget, _removeScrollObscuringStyles } =\r\n    elements;\r\n  const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid } = getEnvironment();\r\n  const doViewportArrange =\r\n    !_nativeScrollbarsHiding && (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n\r\n  const updateSegments: StructureUpdateSegment[] = [\r\n    createTrinsicUpdateSegment(elements, state),\r\n    createPaddingUpdateSegment(elements, state),\r\n    createOverflowUpdateSegment(elements, state),\r\n  ];\r\n\r\n  return [\r\n    appendStructureElements,\r\n    (updateInfo) => {\r\n      const updateHints: StructureSetupUpdateHints = {};\r\n      const adjustScrollOffset = doViewportArrange;\r\n      const scrollOffset = adjustScrollOffset && getElementScroll(_scrollOffsetElement);\r\n      const revertScrollObscuringStyles = scrollOffset && _removeScrollObscuringStyles();\r\n\r\n      each(updateSegments, (updateSegment) => {\r\n        assignDeep(updateHints, updateSegment(updateInfo, updateHints) || {});\r\n      });\r\n\r\n      scrollElementTo(_scrollOffsetElement, scrollOffset);\r\n      if (revertScrollObscuringStyles) {\r\n        revertScrollObscuringStyles();\r\n      }\r\n      if (!_viewportIsTarget) {\r\n        scrollElementTo(_target, 0);\r\n      }\r\n\r\n      return updateHints;\r\n    },\r\n    state,\r\n    elements,\r\n    canceled,\r\n  ];\r\n};\r\n","import type { OptionsCheckFn, Options, PartialOptions, ReadonlyOptions } from '../options';\r\nimport type { DeepReadonly } from '../typings';\r\nimport type { InitializationTarget } from '../initialization';\r\nimport type { ObserversSetupState, ObserversSetupUpdateHints } from './observersSetup';\r\nimport type { StructureSetupState, StructureSetupUpdateHints } from './structureSetup';\r\nimport type { StructureSetupElementsObj } from './structureSetup/structureSetup.elements';\r\nimport type { ScrollbarsSetupElementsObj } from './scrollbarsSetup/scrollbarsSetup.elements';\r\nimport { createOptionCheck } from '../options';\r\nimport {\r\n  assignDeep,\r\n  bind,\r\n  getElementScroll,\r\n  isEmptyObject,\r\n  keys,\r\n  runEachAndClear,\r\n  scrollElementTo,\r\n} from '../support';\r\nimport { createObserversSetup } from './observersSetup';\r\nimport { createScrollbarsSetup } from './scrollbarsSetup';\r\nimport { createStructureSetup } from './structureSetup';\r\n\r\nexport type SetupUpdateHints = Partial<Record<string, boolean>>;\r\n\r\nexport type SetupUpdateInfo = {\r\n  _checkOption: OptionsCheckFn<Options>;\r\n  _changedOptions: DeepReadonly<PartialOptions>;\r\n  _force: boolean;\r\n};\r\n\r\nexport type Setup<\r\n  U extends SetupUpdateInfo,\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  S extends Record<string, any>,\r\n  H extends SetupUpdateHints | void,\r\n> = [\r\n  /** The create function which returns the `destroy` function. */\r\n  _create: () => () => void,\r\n  /** Function which updates the setup and returns the update result. */\r\n  _update: (updateInfo: DeepReadonly<U>) => H,\r\n  /** Function which returns the current state. */\r\n  _state: DeepReadonly<S>,\r\n];\r\n\r\nexport interface SetupsUpdateInfo {\r\n  /** The options that changed or `undefined` if none changed. */\r\n  _changedOptions?: PartialOptions;\r\n  /** Whether chache should be ignored. */\r\n  _force?: boolean;\r\n  /** Whether observers should take their records and thus update as well. */\r\n  _takeRecords?: boolean;\r\n}\r\n\r\nexport interface SetupsInstanceState {\r\n  /** Whether the instance is sleeping. */\r\n  _sleeping: boolean;\r\n  /** Whether the instance is destroyed. */\r\n  _destroyed: boolean;\r\n}\r\n\r\nexport interface SetupsUpdateHints {\r\n  readonly _observersUpdateHints: DeepReadonly<ObserversSetupUpdateHints>;\r\n  readonly _structureUpdateHints: DeepReadonly<StructureSetupUpdateHints>;\r\n}\r\n\r\nexport interface SetupsState {\r\n  readonly _instanceState: DeepReadonly<SetupsInstanceState>;\r\n  readonly _observersSetupState: DeepReadonly<ObserversSetupState>;\r\n  readonly _structureSetupState: DeepReadonly<StructureSetupState>;\r\n}\r\n\r\nexport interface SetupsElements {\r\n  readonly _structureSetupElements: DeepReadonly<StructureSetupElementsObj>;\r\n  readonly _scrollbarsSetupElements: DeepReadonly<ScrollbarsSetupElementsObj>;\r\n}\r\n\r\nexport type Setups = [\r\n  construct: () => () => void,\r\n  update: (updateInfo: DeepReadonly<SetupsUpdateInfo>) => boolean,\r\n  updateSleep: (sleeping: boolean) => void,\r\n  cloneScrollbar: () => void,\r\n  getState: () => DeepReadonly<SetupsState>,\r\n  elements: DeepReadonly<SetupsElements>,\r\n  canceled: () => void,\r\n];\r\n\r\nexport const createSetups = (\r\n  target: InitializationTarget,\r\n  options: ReadonlyOptions,\r\n  onUpdated: (updateInfo: SetupsUpdateInfo, updateHints: SetupsUpdateHints) => void,\r\n  onScroll: (scrollEvent: Event) => void\r\n): Setups => {\r\n  let cacheAndOptionsInitialized = false;\r\n  const instanceState: SetupsInstanceState = {\r\n    _sleeping: false,\r\n    _destroyed: false,\r\n  };\r\n  const getCurrentOption = createOptionCheck(options, {});\r\n  const [\r\n    structureSetupCreate,\r\n    structureSetupUpdate,\r\n    structureSetupState,\r\n    structureSetupElements,\r\n    structureSetupCanceled,\r\n  ] = createStructureSetup(target);\r\n  const [observersSetupCreate, observersSetupUpdate, observersSetupState] = createObserversSetup(\r\n    structureSetupElements,\r\n    structureSetupState,\r\n    getCurrentOption,\r\n    (observersUpdateHints) => {\r\n      update({}, observersUpdateHints);\r\n    }\r\n  );\r\n  const [scrollbarsSetupCreate, scrollbarsSetupUpdate, , scrollbarsSetupElements] =\r\n    createScrollbarsSetup(\r\n      target,\r\n      options,\r\n      instanceState,\r\n      observersSetupState,\r\n      structureSetupState,\r\n      structureSetupElements,\r\n      onScroll\r\n    );\r\n\r\n  const updateHintsAreTruthy = (hints: SetupUpdateHints) =>\r\n    keys(hints).some((key) => !!hints[key as keyof typeof hints]);\r\n\r\n  const update = (\r\n    updateInfo: SetupsUpdateInfo,\r\n    observerUpdateHints?: Readonly<ObserversSetupUpdateHints>\r\n  ): boolean => {\r\n    const { _sleeping, _destroyed } = instanceState;\r\n    if (_destroyed || (_sleeping && cacheAndOptionsInitialized)) {\r\n      return false;\r\n    }\r\n\r\n    const { _changedOptions: rawChangedOptions, _force: rawForce, _takeRecords } = updateInfo;\r\n\r\n    const _changedOptions = rawChangedOptions || {};\r\n    const _force = !!rawForce || !cacheAndOptionsInitialized;\r\n    const baseUpdateInfoObj: SetupUpdateInfo = {\r\n      _checkOption: createOptionCheck(options, _changedOptions, _force),\r\n      _changedOptions,\r\n      _force,\r\n    };\r\n\r\n    const observersHints =\r\n      observerUpdateHints ||\r\n      observersSetupUpdate(\r\n        assignDeep({}, baseUpdateInfoObj, {\r\n          _takeRecords,\r\n        })\r\n      );\r\n\r\n    const structureHints = structureSetupUpdate(\r\n      assignDeep({}, baseUpdateInfoObj, {\r\n        _observersState: observersSetupState,\r\n        _observersUpdateHints: observersHints,\r\n      })\r\n    );\r\n\r\n    scrollbarsSetupUpdate(\r\n      assignDeep({}, baseUpdateInfoObj, {\r\n        _observersUpdateHints: observersHints,\r\n        _structureUpdateHints: structureHints,\r\n      })\r\n    );\r\n\r\n    const truthyObserversHints = updateHintsAreTruthy(observersHints);\r\n    const truthyStructureHints = updateHintsAreTruthy(structureHints);\r\n    const changed =\r\n      truthyObserversHints || truthyStructureHints || !isEmptyObject(_changedOptions) || _force;\r\n\r\n    cacheAndOptionsInitialized = true;\r\n\r\n    if (changed) {\r\n      onUpdated(updateInfo, {\r\n        _observersUpdateHints: observersHints,\r\n        _structureUpdateHints: structureHints,\r\n      });\r\n    }\r\n\r\n    return changed;\r\n  };\r\n\r\n  return [\r\n    () => {\r\n      const { _originalScrollOffsetElement, _scrollOffsetElement, _removeScrollObscuringStyles } =\r\n        structureSetupElements;\r\n      const initialScroll = getElementScroll(_originalScrollOffsetElement);\r\n      const destroyFns = [\r\n        observersSetupCreate(),\r\n        structureSetupCreate(),\r\n        scrollbarsSetupCreate(),\r\n        () => {\r\n          instanceState._destroyed = true;\r\n        },\r\n      ];\r\n      const revertScrollObscuringStyles = _removeScrollObscuringStyles();\r\n\r\n      scrollElementTo(_scrollOffsetElement, initialScroll);\r\n      revertScrollObscuringStyles();\r\n\r\n      return bind(runEachAndClear, destroyFns);\r\n    },\r\n    update,\r\n    (sleeping) => {\r\n      const oldSleeping = instanceState._sleeping;\r\n      instanceState._sleeping = sleeping;\r\n\r\n      if (!sleeping && oldSleeping !== sleeping) {\r\n        update({ _force: true, _takeRecords: true });\r\n      }\r\n    },\r\n    () => {\r\n      scrollbarsSetupUpdate({\r\n        _checkOption: createOptionCheck(options, {}, false),\r\n        _changedOptions: {},\r\n        _force: false,\r\n      });\r\n    },\r\n    () => ({\r\n      _instanceState: instanceState,\r\n      _observersSetupState: observersSetupState,\r\n      _structureSetupState: structureSetupState,\r\n    }),\r\n    {\r\n      _structureSetupElements: structureSetupElements,\r\n      _scrollbarsSetupElements: scrollbarsSetupElements,\r\n    },\r\n    structureSetupCanceled,\r\n  ];\r\n};\r\n","import type { OverlayScrollbars } from './overlayscrollbars';\r\n\r\nconst targetInstanceMap: WeakMap<Element, OverlayScrollbars> = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n  targetInstanceMap.set(target, osInstance);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n  targetInstanceMap.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n  targetInstanceMap.get(target);\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport type { XY, TRBL } from './support';\r\nimport type { Options, PartialOptions, ReadonlyOptions } from './options';\r\nimport type {\r\n  InferInstancePluginModuleInstance,\r\n  InferStaticPluginModuleInstance,\r\n  InstancePlugin,\r\n  OptionsValidationPlugin,\r\n  Plugin,\r\n  PluginModuleInstance,\r\n  StaticPlugin,\r\n} from './plugins';\r\nimport type { Initialization, InitializationTarget, PartialInitialization } from './initialization';\r\nimport type { OverflowStyle } from './typings';\r\nimport type { EventListenerArgs, EventListener, EventListeners } from './eventListeners';\r\nimport type {\r\n  ScrollbarsSetupElement,\r\n  ScrollbarStructure,\r\n} from './setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport {\r\n  addPlugins,\r\n  getStaticPluginModuleInstance,\r\n  optionsValidationPluginModuleName,\r\n  pluginModules,\r\n  registerPluginModuleInstances,\r\n} from './plugins';\r\nimport { createSetups } from './setups';\r\nimport { addInstance, getInstance, removeInstance } from './instances';\r\nimport { cancelInitialization } from './initialization';\r\nimport { getEnvironment } from './environment';\r\nimport { getOptionsDiff } from './options';\r\nimport {\r\n  assignDeep,\r\n  isEmptyObject,\r\n  isFunction,\r\n  isHTMLElement,\r\n  createEventListenerHub,\r\n  isPlainObject,\r\n  keys,\r\n  isArray,\r\n  push,\r\n  runEachAndClear,\r\n  bind,\r\n  removeUndefinedProperties,\r\n} from './support';\r\nimport { setNonce } from './nonce';\r\nimport { setTrustedTypePolicy } from './trustedTypePolicy';\r\n\r\n// Notes:\r\n// Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n\r\n/**\r\n * Describes the OverlayScrollbars environment.\r\n */\r\nexport interface Environment {\r\n  /** The native scrollbars size of the browser / system. */\r\n  scrollbarsSize: XY<number>;\r\n  /** Whether the native scrollbars are overlaid. */\r\n  scrollbarsOverlaid: XY<boolean>;\r\n  /** Whether the browser supports native scrollbars hiding. */\r\n  scrollbarsHiding: boolean;\r\n  /** Whether the browser supports the ScrollTimeline API. */\r\n  scrollTimeline: boolean;\r\n  /** The default Initialization to use if nothing else is specified. */\r\n  staticDefaultInitialization: Initialization;\r\n  /** The default Options to use if nothing else is specified. */\r\n  staticDefaultOptions: Options;\r\n\r\n  /** Returns the current default Initialization. */\r\n  getDefaultInitialization(): Initialization;\r\n  /** Returns the current default Options. */\r\n  getDefaultOptions(): Options;\r\n\r\n  /**\r\n   * Sets a new default Initialization.\r\n   * If the new default Initialization is partially filled, its deeply merged with the current default Initialization.\r\n   * @param newDefaultInitialization The new default Initialization.\r\n   * @returns The current default Initialization.\r\n   */\r\n  setDefaultInitialization(newDefaultInitialization: PartialInitialization): Initialization;\r\n  /**\r\n   * Sets new default Options.\r\n   * If the new default Options are partially filled, they're deeply merged with the current default Options.\r\n   * @param newDefaultOptions The new default Options.\r\n   * @returns The current default options.\r\n   */\r\n  setDefaultOptions(newDefaultOptions: PartialOptions): Options;\r\n}\r\n\r\n/**\r\n * The primary entry point to OverlayScrollbars.\r\n */\r\nexport interface OverlayScrollbarsStatic {\r\n  /**\r\n   * Returns the current OverlayScrollbars instance if the target already has an instance.\r\n   * @param target The initialization target to from which the instance shall be returned.\r\n   */\r\n  (target: InitializationTarget): OverlayScrollbars | undefined;\r\n  /**\r\n   * Initializes a new OverlayScrollbars instance to the given target\r\n   * or returns the current OverlayScrollbars instance if the target already has an instance.\r\n   * @param target The target.\r\n   * @param options The options. (Can be just an empty object)\r\n   * @param eventListeners Optional event listeners.\r\n   */\r\n  (\r\n    target: InitializationTarget,\r\n    options: PartialOptions,\r\n    eventListeners?: EventListeners\r\n  ): OverlayScrollbars;\r\n\r\n  /**\r\n   * Checks whether the passed value is a valid and not destroyed overlayscrollbars instance.\r\n   * @param osInstance The value which shall be checked.\r\n   */\r\n  valid(osInstance: any): osInstance is OverlayScrollbars;\r\n  /**\r\n   * Gets the environment.\r\n   */\r\n  env(): Environment;\r\n  /**\r\n   * Sets the nonce attribute for inline styles.\r\n   */\r\n  nonce(newNonce: string | undefined): void;\r\n  /**\r\n   * Sets the trusted type policy used for DOM operations.\r\n   */\r\n  trustedTypePolicy(newTrustedTypePolicy: unknown | undefined): void;\r\n  /**\r\n   * Adds a single plugin.\r\n   * @param plugin The plugin to be added.\r\n   * @returns The plugins static modules instance or `void` if no instance was found.\r\n   */\r\n  plugin<P extends Plugin>(\r\n    plugin: P\r\n  ): P extends StaticPlugin ? InferStaticPluginModuleInstance<P> : void;\r\n  /**\r\n   * Adds multiple plugins.\r\n   * @param plugins The plugins to be added.\r\n   * @returns The plugins static modules instances or `void` if no instance was found.\r\n   */\r\n  plugin<P extends [Plugin, ...Plugin[]]>(\r\n    plugins: P\r\n  ): P extends [Plugin, ...Plugin[]]\r\n    ? {\r\n        [K in keyof P]: P[K] extends StaticPlugin ? InferStaticPluginModuleInstance<P[K]> : void;\r\n      }\r\n    : void;\r\n}\r\n\r\n/**\r\n * Describes a OverlayScrollbars instances state.\r\n */\r\nexport interface State {\r\n  /** Describes the current padding in pixel. */\r\n  padding: TRBL;\r\n  /** Whether the current padding is absolute. */\r\n  paddingAbsolute: boolean;\r\n  /** The client width (x) & height (y) of the viewport in pixel. */\r\n  overflowEdge: XY<number>;\r\n  /** The overflow amount in pixel. */\r\n  overflowAmount: XY<number>;\r\n  /** The css overflow style of the viewport. */\r\n  overflowStyle: XY<OverflowStyle>;\r\n  /** Whether the viewport has an overflow. */\r\n  hasOverflow: XY<boolean>;\r\n  /** The scroll coordinates of the viewport. */\r\n  scrollCoordinates: {\r\n    /** The start (origin) scroll coordinates for each axis. */\r\n    start: XY<number>;\r\n    /** The end scroll coordinates for each axis. */\r\n    end: XY<number>;\r\n  };\r\n  /** Whether the direction is considered rtl. */\r\n  directionRTL: boolean;\r\n  /** Whether the instance is sleeping. */\r\n  sleeping: boolean;\r\n  /** Whether the instance is considered destroyed. */\r\n  destroyed: boolean;\r\n}\r\n\r\n/**\r\n * Describes the elements of a scrollbar.\r\n */\r\nexport interface ScrollbarElements {\r\n  /**\r\n   * The root element of the scrollbar.\r\n   * The HTML structure looks like this:\r\n   * <scrollbar>\r\n   *   <track>\r\n   *     <handle />\r\n   *   </track>\r\n   * </scrollbar>\r\n   */\r\n  scrollbar: HTMLElement;\r\n  /** The track element of the scrollbar. */\r\n  track: HTMLElement;\r\n  /** The handle element of the scrollbar. */\r\n  handle: HTMLElement;\r\n}\r\n\r\n/**\r\n * Describes the elements of a scrollbar and provides the possibility to clone them.\r\n */\r\nexport interface CloneableScrollbarElements extends ScrollbarElements {\r\n  /**\r\n   * Clones the current scrollbar and returns the cloned elements.\r\n   * The returned elements aren't added to the DOM.\r\n   */\r\n  clone(): ScrollbarElements;\r\n}\r\n\r\n/**\r\n * Describes the elements of a OverlayScrollbars instance.\r\n */\r\nexport interface Elements {\r\n  /** The element the instance was applied to. */\r\n  target: HTMLElement;\r\n  /** The host element. Its the root of all other elements. */\r\n  host: HTMLElement;\r\n  /**\r\n   * The element which is responsible to apply correct paddings.\r\n   * Depending on the Initialization it can be the same as the viewport element.\r\n   */\r\n  padding: HTMLElement;\r\n  /** The element which is responsible to do any scrolling. */\r\n  viewport: HTMLElement;\r\n  /**\r\n   * The element which is responsible to hold the content.\r\n   * Depending on the Initialization it can be the same as the viewport element.\r\n   */\r\n  content: HTMLElement;\r\n  /**\r\n   * The element through which you can get the current `scrollLeft` or `scrollTop` offset.\r\n   * Depending on the target element it can be the same as the viewport element.\r\n   */\r\n  scrollOffsetElement: HTMLElement;\r\n  /**\r\n   * The element through which you can add `scroll` events.\r\n   * Depending on the target element it can be the same as the viewport element.\r\n   */\r\n  scrollEventElement: HTMLElement | Document;\r\n  /** The horizontal scrollbar elements. */\r\n  scrollbarHorizontal: CloneableScrollbarElements;\r\n  /** The vertical scrollbar elements. */\r\n  scrollbarVertical: CloneableScrollbarElements;\r\n}\r\n\r\n/**\r\n * Describes a OverlayScrollbars instance.\r\n */\r\nexport interface OverlayScrollbars {\r\n  /** Gets the current options of the instance. */\r\n  options(): Options;\r\n  /**\r\n   * Sets the options of the instance.\r\n   * If the new options are partially filled, they're deeply merged with either the current options or the current default options.\r\n   * @param newOptions The new options which should be applied.\r\n   * @param pure Whether the options should be reset before the new options are added.\r\n   * @returns Returns the current options of the instance.\r\n   */\r\n  options(newOptions: PartialOptions, pure?: boolean): Options;\r\n\r\n  /**\r\n   * Adds event listeners to the instance.\r\n   * @param eventListeners An object which contains the added listeners.\r\n   * @param pure Whether all already added event listeners should be removed before the new listeners are added.\r\n   * @returns Returns a function which removes the added listeners.\r\n   */\r\n  on(eventListeners: EventListeners, pure?: boolean): () => void;\r\n  /**\r\n   * Adds a single event listener to the instance.\r\n   * @param name The name of the event.\r\n   * @param listener The listener which is invoked on that event.\r\n   * @returns Returns a function which removes the added listeners.\r\n   */\r\n  on<N extends keyof EventListenerArgs>(name: N, listener: EventListener<N>): () => void;\r\n  /**\r\n   * Adds multiple event listeners to the instance.\r\n   * @param name The name of the event.\r\n   * @param listener The listeners which are invoked on that event.\r\n   * @returns Returns a function which removes the added listeners.\r\n   */\r\n  on<N extends keyof EventListenerArgs>(name: N, listener: EventListener<N>[]): () => void;\r\n\r\n  /**\r\n   * Removes a single event listener from the instance.\r\n   * @param name The name of the event.\r\n   * @param listener The listener which shall be removed.\r\n   */\r\n  off<N extends keyof EventListenerArgs>(name: N, listener: EventListener<N>): void;\r\n  /**\r\n   * Removes multiple event listeners from the instance.\r\n   * @param name The name of the event.\r\n   * @param listener The listeners which shall be removed.\r\n   */\r\n  off<N extends keyof EventListenerArgs>(name: N, listener: EventListener<N>[]): void;\r\n\r\n  /**\r\n   * Updates the instance.\r\n   * @param force Whether the update should force the cache to be invalidated.\r\n   * @returns A boolean which indicates whether the `update` event was triggered through this update.\r\n   * The update event is only triggered if something changed because of this update.\r\n   */\r\n  update(force?: boolean): boolean;\r\n  /** Puts the instance to sleep or wakes it up. */\r\n  sleep(sleeping: boolean): void;\r\n  /** Returns the state of the instance. */\r\n  state(): State;\r\n  /** Returns the elements of the instance. */\r\n  elements(): Elements;\r\n  /** Destroys the instance and removes all added elements. */\r\n  destroy(): void;\r\n  /** Returns the instance of the passed plugin or `undefined` if no instance was found. */\r\n  plugin<P extends InstancePlugin>(osPlugin: P): InferInstancePluginModuleInstance<P> | undefined;\r\n}\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n  target: InitializationTarget,\r\n  options?: PartialOptions,\r\n  eventListeners?: EventListeners\r\n) => {\r\n  const { _getDefaultOptions } = getEnvironment();\r\n  const targetIsElement = isHTMLElement(target);\r\n  const instanceTarget = targetIsElement ? target : target.target;\r\n  const potentialInstance = getInstance(instanceTarget);\r\n  if (options && !potentialInstance) {\r\n    const destroyFns: (() => void)[] = [];\r\n    const instancePluginModuleInstances: Record<string, PluginModuleInstance> = {};\r\n    const validateOptions = (newOptions: PartialOptions) => {\r\n      const newOptionsWithoutUndefined = removeUndefinedProperties(newOptions, true);\r\n      const pluginValidate = getStaticPluginModuleInstance<typeof OptionsValidationPlugin>(\r\n        optionsValidationPluginModuleName\r\n      );\r\n      return pluginValidate\r\n        ? pluginValidate(newOptionsWithoutUndefined, true)\r\n        : newOptionsWithoutUndefined;\r\n    };\r\n    const currentOptions: ReadonlyOptions = assignDeep(\r\n      {},\r\n      _getDefaultOptions(),\r\n      validateOptions(options)\r\n    );\r\n    const [addPluginEvent, removePluginEvents, triggerPluginEvent] =\r\n      createEventListenerHub<EventListenerArgs>();\r\n    const [addInstanceEvent, removeInstanceEvents, triggerInstanceEvent] =\r\n      createEventListenerHub(eventListeners);\r\n    const triggerEvent: typeof triggerPluginEvent = (name, args) => {\r\n      triggerInstanceEvent(name, args);\r\n      triggerPluginEvent(name, args);\r\n    };\r\n    const [\r\n      setupsConstruct,\r\n      setupsUpdate,\r\n      setupsUpdateSleep,\r\n      setupsCloneScrollbar,\r\n      setupsState,\r\n      setupsElements,\r\n      setupsCanceled,\r\n    ] = createSetups(\r\n      target,\r\n      currentOptions,\r\n      /*\r\n      <T extends InstancePlugin>(pluginName: T extends InstancePlugin<infer N> ? N : never) =>\r\n        getInstancePluginModuleInstance(instancePluginModuleInstances, pluginName),\r\n      */\r\n      ({ _changedOptions, _force }, { _observersUpdateHints, _structureUpdateHints }) => {\r\n        const {\r\n          _sizeChanged,\r\n          _directionChanged,\r\n          _heightIntrinsicChanged,\r\n          _contentMutation,\r\n          _hostMutation,\r\n          _appear,\r\n        } = _observersUpdateHints;\r\n\r\n        const {\r\n          _overflowEdgeChanged,\r\n          _overflowAmountChanged,\r\n          _overflowStyleChanged,\r\n          _scrollCoordinatesChanged,\r\n        } = _structureUpdateHints;\r\n\r\n        triggerEvent('updated', [\r\n          instance,\r\n          {\r\n            updateHints: {\r\n              sizeChanged: !!_sizeChanged,\r\n              directionChanged: !!_directionChanged,\r\n              heightIntrinsicChanged: !!_heightIntrinsicChanged,\r\n              overflowEdgeChanged: !!_overflowEdgeChanged,\r\n              overflowAmountChanged: !!_overflowAmountChanged,\r\n              overflowStyleChanged: !!_overflowStyleChanged,\r\n              scrollCoordinatesChanged: !!_scrollCoordinatesChanged,\r\n              contentMutation: !!_contentMutation,\r\n              hostMutation: !!_hostMutation,\r\n              appear: !!_appear,\r\n            },\r\n            changedOptions: _changedOptions || {},\r\n            force: !!_force,\r\n          },\r\n        ]);\r\n      },\r\n      (scrollEvent) => triggerEvent('scroll', [instance, scrollEvent])\r\n    );\r\n\r\n    const destroy = (canceled: boolean) => {\r\n      const { _instanceState } = setupsState();\r\n      const { _destroyed } = _instanceState;\r\n\r\n      if (_destroyed) {\r\n        return;\r\n      }\r\n\r\n      removeInstance(instanceTarget);\r\n      runEachAndClear(destroyFns);\r\n\r\n      triggerEvent('destroyed', [instance, canceled]);\r\n\r\n      removePluginEvents();\r\n      removeInstanceEvents();\r\n    };\r\n    const update = (_force?: boolean) => setupsUpdate({ _force, _takeRecords: true });\r\n\r\n    const instance: OverlayScrollbars = {\r\n      options(newOptions?: PartialOptions, pure?: boolean) {\r\n        if (newOptions) {\r\n          const base = pure ? _getDefaultOptions() : {};\r\n          const changedOptions = getOptionsDiff(\r\n            currentOptions,\r\n            assignDeep(base, validateOptions(newOptions))\r\n          );\r\n          if (!isEmptyObject(changedOptions)) {\r\n            assignDeep(currentOptions, changedOptions);\r\n            setupsUpdate({ _changedOptions: changedOptions });\r\n          }\r\n        }\r\n        return assignDeep({}, currentOptions);\r\n      },\r\n      on: addInstanceEvent,\r\n      off: (name, listener) => {\r\n        if (name && listener) {\r\n          removeInstanceEvents(name, listener);\r\n        }\r\n      },\r\n      state() {\r\n        const { _instanceState, _observersSetupState, _structureSetupState } = setupsState();\r\n        const { _destroyed, _sleeping } = _instanceState;\r\n        const { _directionIsRTL } = _observersSetupState;\r\n        const {\r\n          _overflowEdge,\r\n          _overflowAmount,\r\n          _overflowStyle,\r\n          _hasOverflow,\r\n          _padding,\r\n          _paddingAbsolute,\r\n          _scrollCoordinates,\r\n        } = _structureSetupState;\r\n        return assignDeep(\r\n          {},\r\n          {\r\n            overflowEdge: _overflowEdge,\r\n            overflowAmount: _overflowAmount,\r\n            overflowStyle: _overflowStyle,\r\n            hasOverflow: _hasOverflow,\r\n            scrollCoordinates: {\r\n              start: _scrollCoordinates._start,\r\n              end: _scrollCoordinates._end,\r\n            },\r\n            padding: _padding,\r\n            paddingAbsolute: _paddingAbsolute,\r\n            directionRTL: _directionIsRTL,\r\n            sleeping: _sleeping,\r\n            destroyed: _destroyed,\r\n          }\r\n        );\r\n      },\r\n      elements() {\r\n        const {\r\n          _target,\r\n          _host,\r\n          _padding,\r\n          _viewport,\r\n          _content,\r\n          _scrollOffsetElement,\r\n          _scrollEventElement,\r\n        } = setupsElements._structureSetupElements;\r\n        const { _horizontal, _vertical } = setupsElements._scrollbarsSetupElements;\r\n        const translateScrollbarStructure = (\r\n          scrollbarStructure: ScrollbarStructure\r\n        ): ScrollbarElements => {\r\n          const { _handle, _track, _scrollbar } = scrollbarStructure;\r\n          return {\r\n            scrollbar: _scrollbar,\r\n            track: _track,\r\n            handle: _handle,\r\n          };\r\n        };\r\n        const translateScrollbarsSetupElement = (\r\n          scrollbarsSetupElement: ScrollbarsSetupElement\r\n        ): CloneableScrollbarElements => {\r\n          const { _scrollbarStructures, _clone } = scrollbarsSetupElement;\r\n          const translatedStructure = translateScrollbarStructure(_scrollbarStructures[0]);\r\n\r\n          return assignDeep({}, translatedStructure, {\r\n            clone: () => {\r\n              const result = translateScrollbarStructure(_clone());\r\n              setupsCloneScrollbar();\r\n              return result;\r\n            },\r\n          });\r\n        };\r\n        return assignDeep(\r\n          {},\r\n          {\r\n            target: _target,\r\n            host: _host,\r\n            padding: _padding || _viewport,\r\n            viewport: _viewport,\r\n            content: _content || _viewport,\r\n            scrollOffsetElement: _scrollOffsetElement,\r\n            scrollEventElement: _scrollEventElement,\r\n            scrollbarHorizontal: translateScrollbarsSetupElement(_horizontal),\r\n            scrollbarVertical: translateScrollbarsSetupElement(_vertical),\r\n          }\r\n        );\r\n      },\r\n      update,\r\n      destroy: bind(destroy, false),\r\n      sleep: setupsUpdateSleep,\r\n      plugin: <P extends InstancePlugin>(plugin: P) =>\r\n        instancePluginModuleInstances[keys(plugin)[0]] as\r\n          | InferInstancePluginModuleInstance<P>\r\n          | undefined,\r\n    };\r\n\r\n    push(destroyFns, [setupsCanceled]);\r\n\r\n    // valid inside plugins\r\n    addInstance(instanceTarget, instance);\r\n\r\n    // init plugins\r\n    registerPluginModuleInstances(pluginModules, OverlayScrollbars, [\r\n      instance,\r\n      addPluginEvent,\r\n      instancePluginModuleInstances,\r\n    ]);\r\n\r\n    if (\r\n      cancelInitialization(\r\n        setupsElements._structureSetupElements._isBody,\r\n        !targetIsElement && target.cancel\r\n      )\r\n    ) {\r\n      destroy(true);\r\n      return instance;\r\n    }\r\n\r\n    push(destroyFns, setupsConstruct());\r\n\r\n    triggerEvent('initialized', [instance]);\r\n\r\n    instance.update();\r\n\r\n    return instance;\r\n  }\r\n  return potentialInstance!;\r\n};\r\n\r\nOverlayScrollbars.plugin = (plugins: Plugin | Plugin[]) => {\r\n  const isArr = isArray(plugins);\r\n  const pluginsToAdd: Plugin<string, void | PluginModuleInstance, void | PluginModuleInstance>[] =\r\n    isArr ? plugins : [plugins];\r\n  const result = pluginsToAdd.map(\r\n    (plugin) => registerPluginModuleInstances(plugin, OverlayScrollbars)[0]\r\n  );\r\n  addPlugins(pluginsToAdd);\r\n  return isArr ? result : (result[0] as any);\r\n};\r\nOverlayScrollbars.valid = (osInstance: any): osInstance is OverlayScrollbars => {\r\n  const hasElmsFn = osInstance && (osInstance as OverlayScrollbars).elements;\r\n  const elements = isFunction(hasElmsFn) && hasElmsFn();\r\n  return isPlainObject(elements) && !!getInstance(elements.target);\r\n};\r\nOverlayScrollbars.env = () => {\r\n  const {\r\n    _nativeScrollbarsSize,\r\n    _nativeScrollbarsOverlaid,\r\n    _nativeScrollbarsHiding,\r\n    _scrollTimeline,\r\n    _staticDefaultInitialization,\r\n    _staticDefaultOptions,\r\n    _getDefaultInitialization,\r\n    _setDefaultInitialization,\r\n    _getDefaultOptions,\r\n    _setDefaultOptions,\r\n  } = getEnvironment();\r\n  return assignDeep(\r\n    {},\r\n    {\r\n      scrollbarsSize: _nativeScrollbarsSize,\r\n      scrollbarsOverlaid: _nativeScrollbarsOverlaid,\r\n      scrollbarsHiding: _nativeScrollbarsHiding,\r\n      scrollTimeline: _scrollTimeline,\r\n      staticDefaultInitialization: _staticDefaultInitialization,\r\n      staticDefaultOptions: _staticDefaultOptions,\r\n\r\n      getDefaultInitialization: _getDefaultInitialization,\r\n      setDefaultInitialization: _setDefaultInitialization,\r\n      getDefaultOptions: _getDefaultOptions,\r\n      setDefaultOptions: _setDefaultOptions,\r\n    }\r\n  );\r\n};\r\nOverlayScrollbars.nonce = setNonce;\r\nOverlayScrollbars.trustedTypePolicy = setTrustedTypePolicy;\r\n"],"names":["createCache","options","update","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","isBrowser","window","HTMLElement","document","wnd","mathMax","Math","max","mathMin","min","mathRound","round","mathAbs","abs","mathSign","sign","cAF","cancelAnimationFrame","rAF","requestAnimationFrame","setT","setTimeout","clearT","clearTimeout","getApi","name","undefined","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","scrollT","isUndefined","obj","isNull","type","Object","prototype","toString","call","replace","toLowerCase","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","constructor","isHTMLElement","isElement","Element","animationCurrentTime","performance","now","animateNumber","from","to","duration","onFrame","easing","animationFrameId","timeStart","finalDuration","frame","complete","timeNow","timeElapsed","stopAnimation","percent","progress","animationCompleted","each","source","callback","i","keys","key","inArray","arr","item","indexOf","concat","a","b","push","array","items","arrayIsSingleItem","apply","createOrKeepArray","value","isEmptyArray","deduplicateArray","Set","runEachAndClear","args","keep","runFn","fn","strPaddingTop","strPaddingRight","strPaddingLeft","strPaddingBottom","strMarginLeft","strMarginRight","strMarginBottom","strOverflowX","strOverflowY","strWidth","strHeight","strVisible","strHidden","strScroll","capitalizeFirstLetter","str","finalStr","String","toUpperCase","slice","equal","props","propMutation","result","prop","compareA","compareB","equalWH","equalXY","equalTRBL","bind","_len","arguments","_key","selfClearTimeout","timeout","id","setTFn","clearTFn","getDebouncer","debounceTiming","debounceTimingResult","schedule","clear","task","timeoutId","_debouncer","debounce","functionToDebounce","_ref","_timeout","_debounceTiming","_maxDelay","_maxDebounceTiming","_leading","_mergeParams","cancelMaxTimeoutDebouncer","cancelTimeoutDebounder","prevArguments","leadingInvoked","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","timeoutDebouncer","leading","maxDelayDebouncer","mergeParamsResult","invokedArgs","boundInvoke","_flush","hasOwnProperty","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","_","copy","copyIsArray","src","clone","removeUndefinedProperties","deep","isEmptyObject","noop","capNumber","number","getDomTokensArray","tokens","split","filter","token","getAttr","elm","attrName","getAttribute","hasAttr","hasAttribute","setAttrs","attrNames","setAttribute","removeAttrs","removeAttribute","domTokenListAttr","initialArr","setElmAttr","domTokenListOperation","operationTokens","operation","initialArrSet","join","_remove","removeTokens","_add","addTokens","_has","hasTokens","tokenSet","reduce","boolean","includes","removeAttrClass","addAttrClass","addRemoveAttrClass","add","hasAttrClass","createDomTokenListClass","removeClass","className","addClass","find","selector","rootElm","querySelectorAll","findFirst","querySelector","is","matches","isBodyElement","contents","childNodes","parent","parentElement","closest","getFocusedElement","doc","activeElement","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","deepBoundaryIsValid","removeElements","nodes","node","parentElm","removeChild","appendChildren","children","child","appendChild","trustedTypePolicy","getTrustedTypePolicy","setTrustedTypePolicy","newTrustedTypePolicy","createDiv","classNames","div","createElement","createDOM","html","createdDiv","trustedTypesPolicy","trimmedHtml","trim","innerHTML","createHTML","getCSSVal","computedStyle","getPropertyValue","validFiniteNumber","notNaN","isFinite","parseToZeroOrNumber","parseFloat","roundCssNumber","numberToCssPx","setStyles","styles","rawValue","elmStyle","style","setProperty","_unused","getStyles","pseudoElm","getSingleStyle","getStylesResult","getComputedStyle","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","getTrasformTranslateValue","isHorizontal","x","y","elementHasDimensions","offsetWidth","offsetHeight","getClientRects","zeroObj","w","h","getElmWidthHeightProperty","property","getWindowSize","customWnd","getOffsetSize","getClientSize","getScrollSize","getFractionalSize","cssWidth","cssHeight","getBoundingClientRect","hasDimensions","domRectHasDimensions","rect","domRectAppeared","currContentRect","prevContentRect","rectHasDimensions","rectHadDimensions","removeEventListener","eventNames","listener","capture","eventName","addEventListener","passive","_passive","_capture","once","_once","nativeOptions","map","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","scrollElementTo","position","scrollLeft","scrollTop","getElementScroll","getZeroScrollCoordinates","_start","_end","sanitizeScrollCoordinates","rawScrollCoordinates","overflowAmount","sanitizeAxis","start","end","amount","newStart","newEnd","startAbs","endAbs","_sanitizeAxis","startX","endX","_sanitizeAxis2","startY","endY","isDefaultDirectionScrollCoordinates","_ref2","getAxis","getScrollCoordinatesPercent","_ref3","currentScroll","current","focusElement","element","focus","preventScroll","focusVisible","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","get","currListener","forEach","addEvent","nameOrEventListeners","listenerOrPure","set","eventListenerKeys","offFns","eventListener","triggerEvent","event","pluginModules","staticPluginModuleInstances","addPlugins","addedPlugin","plugin","registerPluginModuleInstances","staticObj","instanceInfo","_plugin$name","osStatic","static","osInstance","instance","instanceObj","instancePluginMap","ctor","getInstancePluginModuleInstance","instancePluginModuleInstances","pluginModuleName","getStaticPluginModuleInstance","_extends","module","exports","assign","n","e","__esModule","optionsTemplateTypes","string","object","function","null","validateRecursive","template","doWriteErrors","propPath","validatedOptions","optionsCopy","optionsValue","templateValue","templateIsComplex","propPrefix","_validateRecursive","validated","foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","console","warn","validateOptions","optionsValidationPluginModuleName","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","scrollbarsClickScrollAllowedValues","optionsTemplate","paddingAbsolute","showNativeOverlaidScrollbars","elementEvents","attributes","ignoreMutation","flowDirectionStyles","overflow","scrollbars","theme","visibility","autoHide","autoHideDelay","autoHideSuspend","dragScroll","clickScroll","pointers","_validateOptions","dataAttributePrefix","classNameEnvironment","classNameEnvironmentScrollbarHidden","dataAttributeInitialize","dataValueNoClipping","dataAttributeHtmlBody","dataAttributeHost","dataValueHostIsHost","dataAttributeViewport","dataValueViewportOverflowXPrefix","dataValueViewportOverflowYPrefix","dataValueViewportArrange","dataValueViewportMeasuring","dataValueViewportScrolling","dataValueViewportScrollbarHidden","dataValueViewportNoContent","dataAttributePadding","dataAttributeContent","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbarThemeNone","classNameScrollbar","classNameScrollbarRtl","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","classNameScrollbarVisible","classNameScrollbarCornerless","classNameScrollbarInteraction","classNameScrollbarUnusable","classNameScrollbarAutoHide","classNameScrollbarAutoHideHidden","classNameScrollbarWheel","classNameScrollbarTrackInteractive","classNameScrollbarHandleInteractive","sizeObserverPluginName","SizeObserverPlugin","listenerElement","onSizeChangedCallback","observeAppearChange","_setStyles","scrollAmount","scrollEventName","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","firstChild","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","appear","onScroll","scrollEvent","destroyFns","getShowNativeOverlaidScrollbars","checkOption","env","_nativeScrollbarsOverlaid","_checkOption","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","overflowIsVisible","overflowBehaviorToOverflowStyle","overflowBehavior","overflowCssValueToOverflowStyle","cssValue","hasOverflow","finalCssValue","getElementOverflowStyle","_getStyles","overflowX","overflowY","scrollbarsHidingPluginName","ScrollbarsHidingPlugin","_viewportArrangement","structureSetupElements","structureSetupState","observersSetupState","checkOptions","_viewportIsTarget","_viewport","_nativeScrollbarsHiding","_nativeScrollbarsSize","doViewportArrange","_getShowNativeOverlai","_getViewportOverflowHideOffset","viewportOverflowStyle","arrangeHideOffset","getHideOffsetPerAxis","isOverlaid","overflowScroll","nativeScrollbarSize","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","_getHideOffsetPerAxis","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","_getHideOffsetPerAxis2","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_scrollbarsHideOffset","_scrollbarsHideOffsetArrange","_hideNativeScrollbars","_assignDeep","_directionIsRTL","viewportStyleObj","_getViewportOverflowH","arrangeX","arrangeY","hideOffsetX","hideOffsetY","_viewportPaddingStyle","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","_arrangeViewport","viewportScrollSize","sizeFraction","_getViewportOverflowH2","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","_undoViewportArrange","_hasOverflow","viewportPaddingStyle","_getViewportOverflowH3","finalPaddingStyle","assignProps","prevStyle","addArrange","clickScrollPluginModuleName","ClickScrollPlugin","scrollRelative","moveHandleRelative","getHandleOffset","targetDeltaMovement","viewportSize","clickScrollOption","onClickScrollCompleted","stopped","stopPressAnimation","defaultClickScrollOptions","clickScrollDistance","clickScrollDuration","clickPressDelay","pressDistanceDuration","easeOutQuad","easeInOutQuad","pow","clickScrollDistanceIsTargetDeltaMovement","pressInOutMs","pressOutMs","viewportSizeScalingFactor","_selfClearTimeout","setPressAnimationTimeout","clearPressAnimationTimeout","beforeClickHandleOffset","targetDeltaMovementSign","stopClickAnimation","clickAnimationProgress","clickAnimationCompleted","afterClickHandleOffset","clickScrollHandleDeltaMovement","clickScrollHandleDeltaMovementViewportSize","remainingTargetOffsetDistance","remainingClickScrollHandleDeltaMovements","isInOutAnimation","durationScalingFactor","continueWithPress","completed","stopClick","opsStringify","JSON","stringify","val","getPropByPath","path","o","defaultOptionsUpdateDebounceMutation","defaultOptionsUpdateDebounceEvent","defaultOptionsUpdateDebounceEnv","defaultOptions","mutation","resize","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","optionKey","currOptionValue","newOptionValue","isDiff","createOptionCheck","changedOptions","nonce","getNonce","setNonce","newNonce","environmentInstance","createEnvironment","getNativeScrollbarSize","measureElm","measureElmChild","body","cSize","oSize","fSize","getNativeScrollbarsHiding","testElm","revertClass","envStyle","envDOM","envElm","envChildElm","styleElm","_createEventListenerH","_createCache","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","_getNativeScrollbarSi","nativeScrollbarsSize","nativeScrollbarsHiding","nativeScrollbarsOverlaid","staticDefaultInitialization","elements","host","padding","viewport","content","slot","cancel","staticDefaultOptions","getDefaultOptions","getDefaultInitialization","_scrollTimeline","_addResizeListener","_getDefaultInitialization","_setDefaultInitialization","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_staticDefaultInitialization","_staticDefaultOptions","matchMedia","addZoomListener","onZoom","media","devicePixelRatio","_updateNativeScrollba","updatedNativeScrollbarSize","nativeScrollbarSizeChanged","getEnvironment","createEventContentChange","eventContentChange","destroyed","WeakMap","destroy","updateElements","getElements","eventElmList","entries","isTargetChild","contains","removeListener","delete","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreContentChange","_createEventContentCh","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","fromRecords","mutations","ignoreTargetChange","ignoreContentChange","totalChangedNodes","targetChangedAttrs","targetStyleChanged","contentChanged","attributeName","mutationTarget","oldValue","addedNodes","removedNodes","isAttributesType","isChildListType","targetIsMutationTarget","isAttrChange","attributeValue","attributeChanged","styleChangingAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","observe","attributeOldValue","attributeFilter","subtree","childList","characterData","disconnect","takeRecords","resizeObserverBoxSupport","createSizeObserver","_appear","sizeObserverPlugin","updateResizeObserverContentRectCache","polyfillElements","polyfillRootElement","polyfillTargetElement","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","skip","resizeObserverEntry","_updateResizeObserver","contentRect","_sizeChanged","detectSupportResizeObserver","box","debouncedOnSizeChangedCallbackProxy","resizeObserverCallback","contentBoxResizeObserver","borderBoxResizeObserver","_sizeObserverPlugin","pluginAppearCallback","pluginDestroyFns","createTrinsicObserver","onTrinsicChangedCallback","intersectionObserverInstance","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","heightIntrinsic","heightIntrinsicChanged","intersectionObserverCallback","pop","root","onSizeChanged","newSize","createObserversSetup","getCurrentOption","onObserversUpdated","debounceMutation","debounceResize","debounceEvent","debounceEnv","updateContentMutationObserver","destroyContentMutationObserver","prevDirectionIsRTL","hostSelector","viewportSelector","baseStyleChangingAttrs","_target","_host","_scrollOffsetElement","_content","_isBody","_viewportHasClass","_viewportAddRemoveClass","_removeScrollObscuringStyles","getDirectionIsRTL","createDebouncedObservesUpdate","currDebounceTiming","currMaxDebounceTiming","currDebounceLeading","prev","prevObj","currObj","updateHints","debounceOption","timing","maxTiming","state","_heightIntrinsic","scrollbarsHidingPlugin","undoViewportArrange","viewportIsTargetBody","noClipping","isArranged","scrollOffset","revertScrollObscuringStyles","revertMeasuring","redoViewportArrange","viewportScroll","fractional","updateContentSizeCache","onObserversUpdatedDebounced","setDirection","newDirectionIsRTL","_directionChanged","onTrinsicChanged","heightIntrinsicCache","_heightIntrinsicChanged","updateFn","onContentMutation","contentChangedThroughEvent","_updateContentSizeCac","_contentMutation","onHostMutation","_hostMutation","constructTrinsicObserver","updateTrinsicObserver","constructSizeObserver","_createDOMObserver","constructHostMutationObserver","updateHostMutationObserver","viewportIsTargetResizeObserver","destroySizeObserver","destroyTrinsicObserver","destroyHostMutationObserver","removeResizeListener","_scrollbarSizeChanged","_updateContentSizeCac2","_takeRecords","_force","_checkOption2","_checkOption3","attributesChanged","_checkOption4","elementEventsChanged","_checkOption5","debounceValue","debounceChanged","contentMutationObserverChanged","ignoreMutationFromOptions","_createDOMObserver2","ignore","construct","hostUpdateResult","trinsicUpdateResult","contentUpdateResult","resolveInitialization","staticInitializationElement","fallbackStaticInitializationElement","defaultStaticInitializationElement","staticInitializationElementValue","staticInitialization","resolvedInitialization","dynamicInitializationElement","fallbackDynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementValue","dynamicInitialization","cancelInitialization","isBody","cancelInitializationValue","_getEnvironment","_getDefaultInitializa","defaultNativeScrollbarsOverlaid","defaultbody","resolvedNativeScrollbarsOverlaid","resolvedDocumentScrollingElement","finalNativeScrollbarsOverlaid","finalDocumentScrollingElement","createScrollbarsSetupElements","scrollbarsSetupEvents","cssCustomPropViewportPercent","cssCustomPropScrollPercent","cssCustomPropScrollDirection","defaultInitScrollbars","defaultInitScrollbarsSlot","_targetIsElm","scrollbarsInit","initScrollbarsSlot","horizontalScrollbars","verticalScrollbars","evaluatedScrollbarSlot","generalDynamicInitializationElement","initScrollTimeline","axis","currAnimation","currAnimationTransform","timeline","cancelAnimation","_setScrollPercentAnimation","structure","_scrollCoordinates","defaultDirectionScroll","transformArray","transform","reverse","_handle","animate","scrollTimeline","getViewportPercent","_overflowAmount","_overflowEdge","getAxisValue","axisViewportSize","axisOverflowAmount","scrollbarStructureAddRemoveClass","scrollbarStructures","action","scrollbarStructure","_scrollbar","scrollbarStyle","_elmStyle","scrollbarsAddRemoveClass","onlyHorizontal","singleAxis","runHorizontal","runVertical","refreshScrollbarsHandleLength","viewportPercent","createScrollbarStyleFn","axisViewportPercent","refreshScrollbarsHandleOffset","scrollPercent","axisScrollPercent","_ref4","refreshScrollbarsScrollCoordinates","axisIsDefaultDirectionScrollCoordinates","_ref5","refreshScrollbarsScrollbarOffset","isDefaultDirectionScroll","styleScrollbarPosition","getTranslateValue","axisIsDefaultCoordinates","px","generateScrollbarDOM","xyKey","scrollbarClassName","scrollbar","track","handle","_track","generateHorizontalScrollbarStructure","generateVerticalScrollbarStructure","appendElements","_refreshScrollbarsHandleLength","_refreshScrollbarsHandleOffset","_refreshScrollbarsScrollCoordinates","_refreshScrollbarsScrollbarOffset","_scrollbarsAddRemoveClass","_horizontal","_scrollbarStructures","_clone","_style","_vertical","createScrollbarsSetupEvents","skipEventIfSleeping","scrollbarHandlePointerInteraction","_documentElm","wheelTimeout","clearWheelTimeout","_selfClearTimeout2","scrollSnapScrollTransitionTimeout","clearScrollSnapScrollTransitionTimeout","scrollOffsetElementScrollBy","coordinates","scrollBy","behavior","createInteractiveScrollEvents","releasePointerCaptureEvents","clientXYKey","widthHeightKey","leftTopKey","whKey","pointerdownCleanupFns","pointerDownEvent","isDragScroll","pointerCaptureElement","scrollbarOptions","dragClickScrollOption","button","isPrimary","pointerType","continuePointerDown","instantClickScroll","shiftKey","getHandleRect","getTrackRect","handleRect","trackRect","axisScale","mouseDownScroll","deltaScroll","_scrollElementTo","deltaMovement","handleTrackDiff","scrollDeltaPercent","pointerDownClientOffset","handleLength","handleCenter","relativeTrackPointerOffset","clickScrollDeltaMovement","dragScrollStartOffset","releasePointerCapture","pointerUpEvent","pointerupCleanupFns","pointerId","nonAnimatedScroll","pointerMoveEvent","withoutSnapScrollOffset","withSnapScrollOffset","snapScrollDiff","setPointerCapture","animateClickScroll","stopClickScrollAnimation","wheelScrollBy","wheelEvent","deltaX","deltaY","deltaMode","focusedElement","removeClickEvent","clickEvent","removePointerEvents","createScrollbarsSetup","setupsInstanceState","mouseInHost","autoHideIsMove","autoHideIsLeave","autoHideIsNever","prevTheme","instanceAutoHideSuspendScrollDestroyFn","instanceAutoHideDelay","hoverablePointerTypes","_sleeping","isHoverablePointerType","requestScrollAnimationFrame","cancelScrollAnimationFrame","autoHideInstantInteractionTimeout","clearAutoHideInstantInteractionTimeout","_selfClearTimeout3","autoHideSuspendTimeout","clearAutoHideSuspendTimeout","_selfClearTimeout4","auotHideTimeout","clearAutoHideTimeout","_createScrollbarsSetu","manageScrollbarsAutoHideInstantInteraction","_scrollEventElement","manageScrollbarsAutoHide","removeAutoHide","delayless","hide","onHostMouseEnter","onHostMouseLeave","manageAutoHideSuspension","_observersUpdateHints","_structureUpdateHints","_overflowEdgeChanged","_overflowAmountChanged","_overflowStyleChanged","_scrollCoordinatesChanged","_overflowStyle","themeChanged","visibilityChanged","autoHideChanged","_checkOption6","autoHideSuspendChanged","_checkOption7","_checkOption8","dragScrollChanged","_checkOption9","clickScrollChanged","_checkOption10","overflowChanged","trulyAppeared","updateScrollbars","updateVisibility","cantHideScrollbars","showNativeScrollbars","setScrollbarVisibility","overflowStyle","isVisible","xVisible","yVisible","hasCorner","createStructureSetupElements","defaultInitElements","defaultPaddingInitialization","defaultViewportInitialization","defaultContentInitialization","targetIsElm","targetStructureInitialization","initElements","paddingInitialization","viewportInitialization","contentInitialization","targetElement","ownerDocument","docElement","documentElement","getDocumentWindow","defaultView","generalStaticInitializationElement","createNewDiv","generateViewportElement","generateContentElement","elementHasOverflow","offsetSize","scrollSize","possibleViewportElement","viewportIsTarget","possibleContentElement","viewportIsContent","viewportElement","hostElement","paddingElement","contentElement","generatedElements","elementIsGenerated","originalNonBodyScrollOffsetElement","scrollOffsetElement","scrollEventElement","evaluatedTargetObj","_padding","_originalScrollOffsetElement","_windowElm","viewportAttributeClassName","targetContents","contentSlot","docWnd","initActiveElm","unwrap","prepareWrapUnwrapFocus","tabIndexStr","originalViewportTabIndex","undoInitWrapUndwrapFocus","destroyActiveElm","viewportIsGenerated","destroyFocusElement","undoDestroyWrapUndwrapFocus","createTrinsicUpdateSegment","_observersState","createPaddingUpdateSegment","updatePaddingCache","currentPaddingCache","_currentPaddingCache","paddingChanged","paddingAbsoluteChanged","contentMutation","_updatePaddingCache","paddingStyleChanged","_paddingStyle","_viewportStyle","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","viewportStyle","_paddingAbsolute","_paddingStyleChanged","createOverflowUpdateSegment","max0","flowDirectionCanBeNonDefaultMap","display","direction","directionStyle","flexDirection","flexDirectionStyle","endsWith","writingMode","writingModeStyle","flowDirectionStyleArr","whCacheOptions","partialXYOptions","setMeasuringMode","active","getFlowDirectionStyles","getMeasuredScrollCoordinates","flowDirectionStylesComingFromOptions","skipFlowDirectionCheck","flowDirectionStylesIndicateNonDefaultFlowDirection","some","styleName","styleValue","originalScrollOffset","removeScrollBlock","scrollEventScrollOffset","isTrusted","removeNoContent","positiveScroll","positiveDistance","negativeScroll","negativeDistance","getOverflowAmount","viewportClientSize","tollerance","getViewportOverflowStyle","getAxisOverflowStyle","axisBehavior","axisHasOverflow","perpendicularBehavior","perpendicularOverflow","behaviorStyle","axisOverflowVisible","perpendicularOverflowVisible","nonPerpendicularOverflow","nonOverflow","setViewportOverflowStyle","createAllOverflowStyleClassNames","createViewportOverflowStyleClassName","allOverflowStyleClassNames","updateSizeFraction","getCurrentSizeFraction","_createCache2","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","_createCache3","updateOverflowAmountCache","getCurrentOverflowAmountCache","_createCache4","updateHasOverflowCache","_createCache5","updateOverflowEdge","getCurrentOverflowEdgeCache","_createCache6","updateOverflowStyleCache","_createCache7","currVal","updateNonDefaultFlowDirectionStyles","_createCache8","updateMeasuredScrollCoordinates","getCurrentMeasuredScrollCoordinates","prefix","scrollbarsHidingPluginViewportArrangement","overflowXVisible","overflowYVisible","viewportChanged","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","overflowEdgeCache","_sizeFractionCache","_viewportScrollSizeCa","windowInnerSize","overflowAmountScrollSize","overflowAmountClientSize","_overflowEdgeCache","overflowEdge","overflowEdgeChanged","_overflowAmuntCache","overflowAmountChanged","_viewportScrollSizeCa2","viewportScrollSizeChanged","_sizeFractionCache2","sizeFractionChanged","_updateHasOverflowCac","removeClipping","adjustViewportStyle","flowDirectionStylesOption","_updateNonDefaultFlow","flowDirectionStylesChanged","adjustMeasuredScrollCoordinates","scrollCoordinates","scrollCoordinatesChanged","_updateOverflowStyleC","overflowStyleChanged","createStructureSetup","_createStructureSetup","appendStructureElements","canceled","updateSegments","updateInfo","adjustScrollOffset","updateSegment","createSetups","onUpdated","cacheAndOptionsInitialized","instanceState","_destroyed","structureSetupCreate","structureSetupUpdate","structureSetupCanceled","_createObserversSetup","observersUpdateHints","observersSetupCreate","observersSetupUpdate","scrollbarsSetupCreate","scrollbarsSetupUpdate","scrollbarsSetupElements","updateHintsAreTruthy","hints","observerUpdateHints","rawChangedOptions","_changedOptions","rawForce","baseUpdateInfoObj","observersHints","structureHints","truthyObserversHints","truthyStructureHints","initialScroll","sleeping","oldSleeping","_instanceState","_observersSetupState","_structureSetupState","_structureSetupElements","_scrollbarsSetupElements","targetInstanceMap","addInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","targetIsElement","instanceTarget","potentialInstance","newOptionsWithoutUndefined","pluginValidate","currentOptions","addPluginEvent","removePluginEvents","triggerPluginEvent","_createEventListenerH2","addInstanceEvent","removeInstanceEvents","triggerInstanceEvent","_createSetups","sizeChanged","directionChanged","hostMutation","setupsConstruct","setupsUpdate","setupsUpdateSleep","setupsCloneScrollbar","setupsState","setupsElements","setupsCanceled","_setupsState","pure","base","on","off","_setupsState2","directionRTL","_setupsElements$_stru","_setupsElements$_scro","translateScrollbarStructure","translateScrollbarsSetupElement","scrollbarsSetupElement","translatedStructure","scrollbarHorizontal","scrollbarVertical","sleep","plugins","isArr","pluginsToAdd","valid","hasElmsFn","_getEnvironment2","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","setDefaultInitialization","setDefaultOptions"],"mappings":"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","x_google_ignoreList":[26]}