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