{"version":3,"file":"overlayscrollbars.cjs","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","../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","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","o","_initialValue","i","_equal","u","_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","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","constructor","Object","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","keys","key","inArray","arr","item","indexOf","concat","a","b","push","array","items","arrayIsSingleItem","prototype","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","selfClearTimeout","timeout","id","setTFn","clearTFn","getDebouncer","debounceTiming","debounceTimingResult","schedule","clear","task","timeoutId","_debouncer","debounce","functionToDebounce","_debounceTiming","_timeout","_maxDebounceTiming","_maxDelay","S","_leading","m","_mergeParams","cancelMaxTimeoutDebouncer","cancelTimeoutDebounder","prevArguments","leadingInvoked","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","timeoutDebouncer","leading","maxDelayDebouncer","mergeParamsResult","invokedArgs","boundInvoke","_flush","hasOwnProperty","call","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","_ref","passive","_passive","_capture","once","_once","nativeOptions","map","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","scrollElementTo","position","scrollLeft","scrollTop","getElementScroll","getZeroScrollCoordinates","_start","_end","sanitizeScrollCoordinates","rawScrollCoordinates","overflowAmount","T","k","sanitizeAxis","start","end","amount","newStart","newEnd","startAbs","endAbs","startX","endX","startY","endY","isDefaultDirectionScrollCoordinates","getAxis","getScrollCoordinatesPercent","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","static","osStatic","instance","osInstance","instanceObj","instancePluginMap","ctor","getInstancePluginModuleInstance","instancePluginModuleInstances","pluginModuleName","getStaticPluginModuleInstance","optionsValidationPluginModuleName","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","scrollAmount","scrollEventName","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","firstChild","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","appear","onScroll","scrollEvent","destroyFns","getShowNativeOverlaidScrollbars","checkOption","env","M","_nativeScrollbarsOverlaid","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","overflowIsVisible","overflow","overflowBehaviorToOverflowStyle","overflowBehavior","replace","overflowCssValueToOverflowStyle","cssValue","hasOverflow","finalCssValue","getElementOverflowStyle","overflowX","overflowY","scrollbarsHidingPluginName","ScrollbarsHidingPlugin","_viewportArrangement","structureSetupElements","structureSetupState","observersSetupState","checkOptions","V","_viewportIsTarget","L","_viewport","P","_nativeScrollbarsHiding","U","_nativeScrollbarsSize","doViewportArrange","showNativeOverlaidScrollbars","_getViewportOverflowHideOffset","viewportOverflowStyle","arrangeHideOffset","getHideOffsetPerAxis","isOverlaid","overflowScroll","nativeScrollbarSize","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_scrollbarsHideOffset","_scrollbarsHideOffsetArrange","_hideNativeScrollbars","j","_directionIsRTL","viewportStyleObj","N","q","arrangeX","arrangeY","hideOffsetX","hideOffsetY","B","_viewportPaddingStyle","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","_arrangeViewport","viewportScrollSize","sizeFraction","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","_undoViewportArrange","F","_hasOverflow","viewportPaddingStyle","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","setPressAnimationTimeout","clearPressAnimationTimeout","beforeClickHandleOffset","targetDeltaMovementSign","stopClickAnimation","clickAnimationProgress","clickAnimationCompleted","afterClickHandleOffset","clickScrollHandleDeltaMovement","clickScrollHandleDeltaMovementViewportSize","remainingTargetOffsetDistance","remainingClickScrollHandleDeltaMovements","isInOutAnimation","durationScalingFactor","continueWithPress","completed","stopClick","opsStringify","JSON","stringify","val","getPropByPath","path","defaultOptionsUpdateDebounceMutation","defaultOptionsUpdateDebounceEvent","defaultOptionsUpdateDebounceEnv","defaultOptions","paddingAbsolute","elementEvents","mutation","resize","attributes","ignoreMutation","flowDirectionStyles","scrollbars","theme","visibility","autoHide","autoHideDelay","autoHideSuspend","dragScroll","clickScroll","pointers","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","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","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","updatedNativeScrollbarSize","nativeScrollbarSizeChanged","getEnvironment","createEventContentChange","eventContentChange","destroyed","WeakMap","destroy","updateElements","getElements","eventElmList","entries","isTargetChild","contains","removeListener","delete","createDOMObserver","isContentObserver","isConnected","et","_attributes","ct","_styleChangingAttributes","rt","_eventContentChange","it","_nestedTargetSelector","lt","_ignoreTargetChange","ut","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","fromRecords","mutations","ignoreTargetChange","ignoreContentChange","totalChangedNodes","targetChangedAttrs","targetStyleChanged","contentChanged","attributeName","mutationTarget","type","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","contentRect","_sizeChanged","detectSupportResizeObserver","box","debouncedOnSizeChangedCallbackProxy","resizeObserverCallback","contentBoxResizeObserver","borderBoxResizeObserver","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","dt","_target","vt","_host","gt","_scrollOffsetElement","ht","_content","bt","_isBody","yt","_viewportHasClass","wt","_viewportAddRemoveClass","St","_removeScrollObscuringStyles","getDirectionIsRTL","createDebouncedObservesUpdate","currDebounceTiming","currMaxDebounceTiming","currDebounceLeading","prev","prevObj","currObj","updateHints","debounceOption","timing","maxTiming","state","_heightIntrinsic","scrollbarsHidingPlugin","updateContentSizeCache","undoViewportArrange","viewportIsTargetBody","noClipping","isArranged","scrollOffset","revertScrollObscuringStyles","revertMeasuring","redoViewportArrange","viewportScroll","fractional","onObserversUpdatedDebounced","setDirection","newDirectionIsRTL","_directionChanged","onTrinsicChanged","heightIntrinsicCache","_heightIntrinsicChanged","updateFn","onContentMutation","contentChangedThroughEvent","_contentMutation","onHostMutation","_hostMutation","constructTrinsicObserver","updateTrinsicObserver","constructSizeObserver","constructHostMutationObserver","updateHostMutationObserver","viewportIsTargetResizeObserver","destroySizeObserver","destroyTrinsicObserver","destroyHostMutationObserver","removeResizeListener","_scrollbarSizeChanged","_checkOption","_takeRecords","_force","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","contentMutationObserverChanged","ignoreMutationFromOptions","construct","ignore","hostUpdateResult","trinsicUpdateResult","contentUpdateResult","resolveInitialization","staticInitializationElement","fallbackStaticInitializationElement","defaultStaticInitializationElement","staticInitializationElementValue","staticInitialization","resolvedInitialization","dynamicInitializationElement","fallbackDynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementValue","dynamicInitialization","cancelInitialization","isBody","cancelInitializationValue","K","defaultNativeScrollbarsOverlaid","defaultbody","resolvedNativeScrollbarsOverlaid","resolvedDocumentScrollingElement","finalNativeScrollbarsOverlaid","finalDocumentScrollingElement","createScrollbarsSetupElements","scrollbarsSetupEvents","cssCustomPropViewportPercent","cssCustomPropScrollPercent","cssCustomPropScrollDirection","defaultInitScrollbars","defaultInitScrollbarsSlot","At","_targetIsElm","scrollbarsInit","initScrollbarsSlot","horizontalScrollbars","verticalScrollbars","evaluatedScrollbarSlot","generalDynamicInitializationElement","initScrollTimeline","axis","currAnimation","currAnimationTransform","timeline","cancelAnimation","_setScrollPercentAnimation","structure","Tt","_scrollCoordinates","defaultDirectionScroll","transformArray","transform","reverse","_handle","animate","scrollTimeline","getViewportPercent","Rt","_overflowAmount","Vt","_overflowEdge","getAxisValue","axisViewportSize","axisOverflowAmount","scrollbarStructureAddRemoveClass","scrollbarStructures","action","scrollbarStructure","_scrollbar","scrollbarStyle","scrollbarsAddRemoveClass","onlyHorizontal","singleAxis","runHorizontal","runVertical","refreshScrollbarsHandleLength","viewportPercent","createScrollbarStyleFn","axisViewportPercent","refreshScrollbarsHandleOffset","scrollPercent","axisScrollPercent","refreshScrollbarsScrollCoordinates","axisIsDefaultDirectionScrollCoordinates","refreshScrollbarsScrollbarOffset","isDefaultDirectionScroll","styleScrollbarPosition","Lt","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","Gt","_documentElm","Pt","kt","wheelTimeout","clearWheelTimeout","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","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","autoHideSuspendTimeout","clearAutoHideSuspendTimeout","auotHideTimeout","clearAutoHideTimeout","manageScrollbarsAutoHideInstantInteraction","Qt","_scrollEventElement","Bt","Ut","Nt","qt","jt","manageScrollbarsAutoHide","removeAutoHide","delayless","hide","onHostMouseEnter","onHostMouseLeave","manageAutoHideSuspension","_observersUpdateHints","_structureUpdateHints","nn","_overflowEdgeChanged","sn","_overflowAmountChanged","en","_overflowStyleChanged","cn","_scrollCoordinatesChanged","Ct","ft","rn","_overflowStyle","themeChanged","visibilityChanged","autoHideChanged","autoHideSuspendChanged","dragScrollChanged","clickScrollChanged","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","ln","targetContents","contentSlot","docWnd","initActiveElm","unwrap","prepareWrapUnwrapFocus","tabIndexStr","originalViewportTabIndex","undoInitWrapUndwrapFocus","destroyActiveElm","viewportIsGenerated","destroyFocusElement","undoDestroyWrapUndwrapFocus","createTrinsicUpdateSegment","_observersState","$t","Ot","createPaddingUpdateSegment","updatePaddingCache","currentPaddingCache","paddingChanged","_t","xt","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","viewportStyle","_paddingAbsolute","_paddingStyleChanged","createOverflowUpdateSegment","un","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","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","updateHasOverflowCache","updateOverflowEdge","getCurrentOverflowEdgeCache","updateOverflowStyleCache","updateNonDefaultFlowDirectionStyles","currVal","updateMeasuredScrollCoordinates","getCurrentMeasuredScrollCoordinates","prefix","Ht","Et","scrollbarsHidingPluginViewportArrangement","X","Y","W","overflowXVisible","overflowYVisible","viewportChanged","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","overflowEdgeCache","windowInnerSize","overflowAmountScrollSize","overflowAmountClientSize","overflowEdge","overflowEdgeChanged","overflowAmountChanged","viewportScrollSizeChanged","sizeFractionChanged","removeClipping","adjustViewportStyle","flowDirectionStylesOption","flowDirectionStylesChanged","adjustMeasuredScrollCoordinates","scrollCoordinates","scrollCoordinatesChanged","overflowStyleChanged","createStructureSetup","appendStructureElements","canceled","updateSegments","updateInfo","adjustScrollOffset","updateSegment","createSetups","onUpdated","cacheAndOptionsInitialized","instanceState","_destroyed","structureSetupCreate","structureSetupUpdate","structureSetupCanceled","observersSetupCreate","observersSetupUpdate","observersUpdateHints","scrollbarsSetupCreate","scrollbarsSetupUpdate","scrollbarsSetupElements","updateHintsAreTruthy","hints","observerUpdateHints","Kt","pn","_changedOptions","rawChangedOptions","rawForce","zt","baseUpdateInfoObj","observersHints","structureHints","truthyObserversHints","truthyStructureHints","an","initialScroll","sleeping","oldSleeping","_instanceState","_observersSetupState","_structureSetupState","_structureSetupElements","_scrollbarsSetupElements","targetInstanceMap","addInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","tt","targetIsElement","instanceTarget","potentialInstance","validateOptions","newOptionsWithoutUndefined","pluginValidate","currentOptions","addPluginEvent","removePluginEvents","triggerPluginEvent","addInstanceEvent","removeInstanceEvents","triggerInstanceEvent","setupsConstruct","setupsUpdate","setupsUpdateSleep","setupsCloneScrollbar","setupsState","setupsElements","setupsCanceled","sizeChanged","directionChanged","hostMutation","gn","pure","base","on","off","hn","bn","_n","directionRTL","Ft","Jt","translateScrollbarStructure","translateScrollbarsSetupElement","scrollbarsSetupElement","Xt","Yt","translatedStructure","scrollbarHorizontal","scrollbarVertical","sleep","plugins","isArr","pluginsToAdd","valid","hasElmsFn","J","ot","st","Z","nt","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","setDefaultInitialization","setDefaultOptions"],"mappings":"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"}