@acorex/cdk 22.4.17 → 22.4.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
- import { DOCUMENT, isPlatformBrowser } from '@angular/common';
1
+ import { isPlatformBrowser, DOCUMENT } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { inject, ElementRef, DestroyRef, PLATFORM_ID, input, afterRenderEffect, effect, afterNextRender, Directive } from '@angular/core';
3
+ import { InjectionToken, makeEnvironmentProviders, ENVIRONMENT_INITIALIZER, inject, PLATFORM_ID, ElementRef, DestroyRef, input, afterRenderEffect, effect, afterNextRender, Directive } from '@angular/core';
4
4
 
5
5
  /** CSS custom properties for overlay scrollbar styling (set on the scroll host or in CSS). */
6
6
  const AX_OVERLAY_SCROLLBAR_CSS_VARS = {
@@ -18,6 +18,100 @@ const AX_OVERLAY_SCROLLBAR_CSS_VARS = {
18
18
  trackBorderColor: '--ax-comp-overlay-scrollbar-track-border-color',
19
19
  fadeDuration: '--ax-comp-overlay-scrollbar-fade-duration',
20
20
  };
21
+
22
+ /** Default delay (ms) before the overlay scrollbar fades out after scroll. */
23
+ const AX_OVERLAY_SCROLLBAR_DEFAULT_HIDE_DELAY_MS = 800;
24
+ /** Default pixels scrolled per navigation arrow click. */
25
+ const AX_OVERLAY_SCROLLBAR_DEFAULT_NAV_SCROLL_STEP_PX = 40;
26
+ const AXOverlayScrollbarDefaultConfig = {
27
+ hideDelay: AX_OVERLAY_SCROLLBAR_DEFAULT_HIDE_DELAY_MS,
28
+ navigationButtons: false,
29
+ navScrollStep: AX_OVERLAY_SCROLLBAR_DEFAULT_NAV_SCROLL_STEP_PX,
30
+ };
31
+ const AX_OVERLAY_SCROLLBAR_CONFIG = new InjectionToken('AX_OVERLAY_SCROLLBAR_CONFIG', {
32
+ providedIn: 'root',
33
+ factory: () => AXOverlayScrollbarDefaultConfig,
34
+ });
35
+ const DESIGN_TOKEN_KEYS = {
36
+ size: AX_OVERLAY_SCROLLBAR_CSS_VARS.size,
37
+ thumbRadius: AX_OVERLAY_SCROLLBAR_CSS_VARS.thumbRadius,
38
+ trackRadius: AX_OVERLAY_SCROLLBAR_CSS_VARS.trackRadius,
39
+ trackColor: AX_OVERLAY_SCROLLBAR_CSS_VARS.trackColor,
40
+ thumbColor: AX_OVERLAY_SCROLLBAR_CSS_VARS.thumbColor,
41
+ thumbActiveColor: AX_OVERLAY_SCROLLBAR_CSS_VARS.thumbActiveColor,
42
+ thumbHoverColor: AX_OVERLAY_SCROLLBAR_CSS_VARS.thumbHoverColor,
43
+ trackActiveColor: AX_OVERLAY_SCROLLBAR_CSS_VARS.trackActiveColor,
44
+ thumbBorderWidth: AX_OVERLAY_SCROLLBAR_CSS_VARS.thumbBorderWidth,
45
+ thumbBorderColor: AX_OVERLAY_SCROLLBAR_CSS_VARS.thumbBorderColor,
46
+ trackBorderWidth: AX_OVERLAY_SCROLLBAR_CSS_VARS.trackBorderWidth,
47
+ trackBorderColor: AX_OVERLAY_SCROLLBAR_CSS_VARS.trackBorderColor,
48
+ fadeDuration: AX_OVERLAY_SCROLLBAR_CSS_VARS.fadeDuration,
49
+ };
50
+ /** Merges partial config with {@link AXOverlayScrollbarDefaultConfig}. */
51
+ function overlayScrollbarConfig(config = {}) {
52
+ const { designTokens, ...rest } = config;
53
+ return {
54
+ ...AXOverlayScrollbarDefaultConfig,
55
+ ...rest,
56
+ designTokens: designTokens ? { ...designTokens } : undefined,
57
+ };
58
+ }
59
+ /** Sets overlay scrollbar CSS variables on the given element. */
60
+ function applyOverlayScrollbarDesignTokens(element, tokens) {
61
+ if (!tokens) {
62
+ return;
63
+ }
64
+ for (const key of Object.keys(DESIGN_TOKEN_KEYS)) {
65
+ const value = tokens[key];
66
+ if (value != null && value !== '') {
67
+ element.style.setProperty(DESIGN_TOKEN_KEYS[key], value);
68
+ }
69
+ }
70
+ }
71
+ /**
72
+ * Registers global overlay scrollbar defaults for the application.
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * export const appConfig: ApplicationConfig = {
77
+ * providers: [
78
+ * provideOverlayScrollbar({
79
+ * hideDelay: 1200,
80
+ * navigationButtons: true,
81
+ * navScrollStep: 48,
82
+ * designTokens: {
83
+ * size: '8px',
84
+ * thumbColor: 'var(--ax-sys-scroller-thumb-color)',
85
+ * },
86
+ * }),
87
+ * ],
88
+ * };
89
+ * ```
90
+ */
91
+ function provideOverlayScrollbar(config = {}) {
92
+ const merged = overlayScrollbarConfig(config);
93
+ return makeEnvironmentProviders([
94
+ {
95
+ provide: AX_OVERLAY_SCROLLBAR_CONFIG,
96
+ useValue: merged,
97
+ },
98
+ {
99
+ provide: ENVIRONMENT_INITIALIZER,
100
+ multi: true,
101
+ useValue: () => {
102
+ if (!merged.designTokens) {
103
+ return;
104
+ }
105
+ const platformId = inject(PLATFORM_ID);
106
+ if (!isPlatformBrowser(platformId)) {
107
+ return;
108
+ }
109
+ applyOverlayScrollbarDesignTokens(inject(DOCUMENT).documentElement, merged.designTokens);
110
+ },
111
+ },
112
+ ]);
113
+ }
114
+
21
115
  const OVERLAY_SCROLLBAR_TOKEN_NAMES = Object.values(AX_OVERLAY_SCROLLBAR_CSS_VARS);
22
116
  const ROOT_CLASS = 'ax-cdk-overlay-scrollbar-root';
23
117
  const RAIL_CLASS = 'ax-cdk-overlay-scrollbar__rail';
@@ -216,12 +310,12 @@ const OVERLAY_SCROLLBAR_STYLES = `
216
310
  }
217
311
  `.trim();
218
312
  const STYLE_ELEMENT_ID = 'ax-overlay-scrollbar-styles';
219
- const DEFAULT_HIDE_DELAY_MS = 800;
313
+ const DEFAULT_HIDE_DELAY_MS = AX_OVERLAY_SCROLLBAR_DEFAULT_HIDE_DELAY_MS;
220
314
  const MIN_SCROLLBAR_WIDTH_PX = 2;
221
315
  const MAX_SCROLLBAR_WIDTH_PX = 32;
222
316
  const DEFAULT_SCROLLBAR_WIDTH_PX = 6;
223
317
  const MIN_THUMB_HEIGHT_PX = 20;
224
- const DEFAULT_NAV_SCROLL_STEP_PX = 40;
318
+ const DEFAULT_NAV_SCROLL_STEP_PX = AX_OVERLAY_SCROLLBAR_DEFAULT_NAV_SCROLL_STEP_PX;
225
319
  function clampOverlayScrollbarWidth(px) {
226
320
  if (!Number.isFinite(px)) {
227
321
  return DEFAULT_SCROLLBAR_WIDTH_PX;
@@ -281,6 +375,7 @@ class AXOverlayScrollbarDirective {
281
375
  this.destroyRef = inject(DestroyRef);
282
376
  this.platformId = inject(PLATFORM_ID);
283
377
  this.document = inject(DOCUMENT);
378
+ this.appConfig = inject(AX_OVERLAY_SCROLLBAR_CONFIG);
284
379
  this.rootEl = null;
285
380
  this.railEl = null;
286
381
  this.trackEl = null;
@@ -296,16 +391,16 @@ class AXOverlayScrollbarDirective {
296
391
  this.unbindRailInteraction = null;
297
392
  /** Thumb size derived from layout; position updates on scroll without re-measuring scrollHeight. */
298
393
  this.thumbLayout = null;
299
- this.hideDelay = input(DEFAULT_HIDE_DELAY_MS, /* @ts-ignore */
394
+ this.hideDelay = input(this.appConfig.hideDelay, /* @ts-ignore */
300
395
  ...(ngDevMode ? [{ debugName: "hideDelay" }] : /* istanbul ignore next */ []));
301
396
  /**
302
397
  * When true, shows browser-style up/down arrow buttons on the rail.
303
398
  * Styling follows track/thumb CSS tokens.
304
399
  */
305
- this.navigationButtons = input(false, /* @ts-ignore */
400
+ this.navigationButtons = input(this.appConfig.navigationButtons, /* @ts-ignore */
306
401
  ...(ngDevMode ? [{ debugName: "navigationButtons" }] : /* istanbul ignore next */ []));
307
402
  /** Pixels to scroll per arrow click. */
308
- this.navScrollStep = input(DEFAULT_NAV_SCROLL_STEP_PX, /* @ts-ignore */
403
+ this.navScrollStep = input(this.appConfig.navScrollStep, /* @ts-ignore */
309
404
  ...(ngDevMode ? [{ debugName: "navScrollStep" }] : /* istanbul ignore next */ []));
310
405
  this.hideTimer = null;
311
406
  afterRenderEffect(() => {
@@ -804,5 +899,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
804
899
  * Generated bundle index. Do not edit.
805
900
  */
806
901
 
807
- export { AXOverlayScrollbarDirective, AX_OVERLAY_SCROLLBAR_CSS_VARS, clampOverlayScrollbarWidth };
902
+ export { AXOverlayScrollbarDefaultConfig, AXOverlayScrollbarDirective, AX_OVERLAY_SCROLLBAR_CONFIG, AX_OVERLAY_SCROLLBAR_CSS_VARS, AX_OVERLAY_SCROLLBAR_DEFAULT_HIDE_DELAY_MS, AX_OVERLAY_SCROLLBAR_DEFAULT_NAV_SCROLL_STEP_PX, applyOverlayScrollbarDesignTokens, clampOverlayScrollbarWidth, overlayScrollbarConfig, provideOverlayScrollbar };
808
903
  //# sourceMappingURL=acorex-cdk-overlay-scrollbar.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-cdk-overlay-scrollbar.mjs","sources":["../../../../packages/cdk/overlay-scrollbar/src/lib/overlay-scrollbar.directive.ts","../../../../packages/cdk/overlay-scrollbar/src/acorex-cdk-overlay-scrollbar.ts"],"sourcesContent":["import { DOCUMENT, isPlatformBrowser } from '@angular/common';\n\nimport {\n afterNextRender,\n afterRenderEffect,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n PLATFORM_ID,\n} from '@angular/core';\n\n/** CSS custom properties for overlay scrollbar styling (set on the scroll host or in CSS). */\nexport const AX_OVERLAY_SCROLLBAR_CSS_VARS = {\n size: '--ax-comp-overlay-scrollbar-size',\n thumbRadius: '--ax-comp-overlay-scrollbar-thumb-radius',\n trackRadius: '--ax-comp-overlay-scrollbar-track-radius',\n trackColor: '--ax-comp-overlay-scrollbar-track-color',\n thumbColor: '--ax-comp-overlay-scrollbar-thumb-color',\n thumbActiveColor: '--ax-comp-overlay-scrollbar-thumb-active-color',\n thumbHoverColor: '--ax-comp-overlay-scrollbar-thumb-hover-color',\n trackActiveColor: '--ax-comp-overlay-scrollbar-track-active-color',\n thumbBorderWidth: '--ax-comp-overlay-scrollbar-thumb-border-width',\n thumbBorderColor: '--ax-comp-overlay-scrollbar-thumb-border-color',\n trackBorderWidth: '--ax-comp-overlay-scrollbar-track-border-width',\n trackBorderColor: '--ax-comp-overlay-scrollbar-track-border-color',\n fadeDuration: '--ax-comp-overlay-scrollbar-fade-duration',\n} as const;\n\nconst OVERLAY_SCROLLBAR_TOKEN_NAMES = Object.values(AX_OVERLAY_SCROLLBAR_CSS_VARS);\n\nconst ROOT_CLASS = 'ax-cdk-overlay-scrollbar-root';\nconst RAIL_CLASS = 'ax-cdk-overlay-scrollbar__rail';\nconst TRACK_CLASS = 'ax-cdk-overlay-scrollbar__rail-track';\nconst THUMB_CLASS = 'ax-cdk-overlay-scrollbar__rail-thumb';\nconst NAV_BTN_CLASS = 'ax-cdk-overlay-scrollbar__nav-button';\nconst NAV_BTN_PRESSED_CLASS = 'ax-cdk-overlay-scrollbar__nav-button--pressed';\nconst NAV_ARROW_CLASS = 'ax-cdk-overlay-scrollbar__nav-arrow';\nconst RAIL_WITH_NAV_CLASS = 'ax-cdk-overlay-scrollbar__rail--with-nav';\nconst VISIBLE_CLASS = 'ax-cdk-overlay-scrollbar--active';\n/** Applied while dragging the thumb (active fill; not used during wheel/content scroll). */\nconst ENGAGED_CLASS = 'ax-cdk-overlay-scrollbar--engaged';\n/** Primary button down on the track (outside thumb); `:active` is unreliable with `preventDefault`. */\nconst TRACK_PRESSED_CLASS = 'ax-cdk-overlay-scrollbar--track-pressed';\n\nconst OVERLAY_SCROLLBAR_STYLES = `\n.ax-cdk-overlay-scrollbar-root {\n position: relative;\n display: block;\n min-height: 0;\n --ax-comp-overlay-scrollbar-size: 6px;\n --ax-comp-overlay-scrollbar-fade-duration: 0.35s;\n --ax-comp-overlay-scrollbar-thumb-radius: 4px;\n --ax-comp-overlay-scrollbar-track-radius: 4px;\n --ax-comp-overlay-scrollbar-track-color: transparent;\n --ax-comp-overlay-scrollbar-thumb-color: var(--ax-sys-scroller-thumb-color, #64748b);\n --ax-comp-overlay-scrollbar-thumb-border-width: 0;\n --ax-comp-overlay-scrollbar-thumb-border-color: transparent;\n --ax-comp-overlay-scrollbar-track-border-width: 0;\n --ax-comp-overlay-scrollbar-track-border-color: transparent;\n}\n\n.ax-cdk-overlay-scrollbar {\n position: relative;\n --ax-comp-overlay-scrollbar-size: 6px;\n --ax-comp-overlay-scrollbar-fade-duration: 0.35s;\n --ax-comp-overlay-scrollbar-thumb-radius: 4px;\n --ax-comp-overlay-scrollbar-track-radius: 4px;\n --ax-comp-overlay-scrollbar-track-color: transparent;\n --ax-comp-overlay-scrollbar-thumb-color: var(--ax-sys-scroller-thumb-color, #64748b);\n --ax-comp-overlay-scrollbar-thumb-border-width: 0;\n --ax-comp-overlay-scrollbar-thumb-border-color: transparent;\n --ax-comp-overlay-scrollbar-track-border-width: 0;\n --ax-comp-overlay-scrollbar-track-border-color: transparent;\n\n scrollbar-width: none !important;\n -ms-overflow-style: none;\n}\n\n.ax-cdk-overlay-scrollbar::-webkit-scrollbar {\n display: none !important;\n width: 0 !important;\n height: 0 !important;\n background: transparent !important;\n}\n\n.ax-cdk-overlay-scrollbar__rail {\n position: absolute;\n top: 0;\n bottom: 0;\n inset-inline-end: 0;\n width: var(--ax-comp-overlay-scrollbar-size, 6px);\n overflow: hidden;\n pointer-events: auto;\n opacity: 0;\n z-index: 10;\n box-sizing: border-box;\n border-radius: var(--ax-comp-overlay-scrollbar-track-radius, 4px);\n background-color: var(--ax-comp-overlay-scrollbar-track-color, transparent);\n border-width: var(--ax-comp-overlay-scrollbar-track-border-width, 0);\n border-style: solid;\n border-color: var(--ax-comp-overlay-scrollbar-track-border-color, transparent);\n transition:\n opacity var(--ax-comp-overlay-scrollbar-fade-duration, 0.35s) ease,\n background-color 0.15s ease;\n}\n\n.ax-cdk-overlay-scrollbar-root.ax-cdk-overlay-scrollbar--active .ax-cdk-overlay-scrollbar__rail,\n.ax-cdk-overlay-scrollbar.ax-cdk-overlay-scrollbar--active .ax-cdk-overlay-scrollbar__rail {\n opacity: 1;\n}\n\n.ax-cdk-overlay-scrollbar__rail-track {\n position: absolute;\n inset: 0;\n box-sizing: border-box;\n}\n\n.ax-cdk-overlay-scrollbar-root.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--track-pressed\n .ax-cdk-overlay-scrollbar__rail,\n.ax-cdk-overlay-scrollbar.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--track-pressed\n .ax-cdk-overlay-scrollbar__rail,\n.ax-cdk-overlay-scrollbar-root.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--engaged\n .ax-cdk-overlay-scrollbar__rail,\n.ax-cdk-overlay-scrollbar.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--engaged\n .ax-cdk-overlay-scrollbar__rail {\n background-color: var(\n --ax-comp-overlay-scrollbar-track-active-color,\n var(--ax-comp-overlay-scrollbar-track-color, transparent)\n );\n}\n\n.ax-cdk-overlay-scrollbar__rail--with-nav {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.ax-cdk-overlay-scrollbar__rail--with-nav .ax-cdk-overlay-scrollbar__rail-track {\n position: relative;\n flex: 1 1 auto;\n min-height: 0;\n inset: auto;\n}\n\n.ax-cdk-overlay-scrollbar__nav-button {\n display: none;\n flex: 0 0 var(--ax-comp-overlay-scrollbar-size, 6px);\n width: 100%;\n min-height: var(--ax-comp-overlay-scrollbar-size, 6px);\n margin: 0;\n padding: 0;\n border: none;\n box-sizing: border-box;\n cursor: default;\n align-items: center;\n justify-content: center;\n background-color: transparent;\n color: var(--ax-comp-overlay-scrollbar-thumb-color, var(--ax-sys-scroller-thumb-color, #64748b));\n}\n\n.ax-cdk-overlay-scrollbar__rail--with-nav .ax-cdk-overlay-scrollbar__nav-button {\n display: flex;\n}\n\n.ax-cdk-overlay-scrollbar__nav-arrow {\n width: 0;\n height: 0;\n border-left: 3px solid transparent;\n border-right: 3px solid transparent;\n pointer-events: none;\n}\n\n.ax-cdk-overlay-scrollbar__nav-arrow--up {\n border-bottom: 4px solid currentColor;\n}\n\n.ax-cdk-overlay-scrollbar__nav-arrow--down {\n border-top: 4px solid currentColor;\n}\n\n.ax-cdk-overlay-scrollbar__rail-thumb {\n position: absolute;\n top: 0;\n inset-inline-start: 0;\n width: 100%;\n box-sizing: border-box;\n border-radius: var(--ax-comp-overlay-scrollbar-thumb-radius, 4px);\n background-color: var(--ax-comp-overlay-scrollbar-thumb-color, var(--ax-sys-scroller-thumb-color, #64748b));\n border-width: var(--ax-comp-overlay-scrollbar-thumb-border-width, 0);\n border-style: solid;\n border-color: var(--ax-comp-overlay-scrollbar-thumb-border-color, transparent);\n transition: background-color 0.15s ease;\n pointer-events: auto;\n touch-action: none;\n}\n\n.ax-cdk-overlay-scrollbar__rail-thumb::before {\n content: '';\n position: absolute;\n inset: -4px -8px;\n}\n\n.ax-cdk-overlay-scrollbar-root.ax-cdk-overlay-scrollbar--active .ax-cdk-overlay-scrollbar__rail-thumb:hover,\n.ax-cdk-overlay-scrollbar.ax-cdk-overlay-scrollbar--active .ax-cdk-overlay-scrollbar__rail-thumb:hover {\n background-color: var(\n --ax-comp-overlay-scrollbar-thumb-hover-color,\n var(\n --ax-comp-overlay-scrollbar-thumb-active-color,\n var(--ax-comp-overlay-scrollbar-thumb-color, var(--ax-sys-scroller-thumb-color, #64748b))\n )\n );\n}\n\n.ax-cdk-overlay-scrollbar-root.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--engaged\n .ax-cdk-overlay-scrollbar__rail-thumb,\n.ax-cdk-overlay-scrollbar.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--engaged\n .ax-cdk-overlay-scrollbar__rail-thumb,\n.ax-cdk-overlay-scrollbar-root.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--engaged\n .ax-cdk-overlay-scrollbar__rail-thumb:hover,\n.ax-cdk-overlay-scrollbar.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--engaged\n .ax-cdk-overlay-scrollbar__rail-thumb:hover {\n background-color: var(\n --ax-comp-overlay-scrollbar-thumb-active-color,\n var(--ax-comp-overlay-scrollbar-thumb-color, var(--ax-sys-scroller-thumb-color, #64748b))\n );\n}\n`.trim();\n\nconst STYLE_ELEMENT_ID = 'ax-overlay-scrollbar-styles';\nconst DEFAULT_HIDE_DELAY_MS = 800;\nconst MIN_SCROLLBAR_WIDTH_PX = 2;\nconst MAX_SCROLLBAR_WIDTH_PX = 32;\nconst DEFAULT_SCROLLBAR_WIDTH_PX = 6;\nconst MIN_THUMB_HEIGHT_PX = 20;\nconst DEFAULT_NAV_SCROLL_STEP_PX = 40;\n\nexport function clampOverlayScrollbarWidth(px: number): number {\n if (!Number.isFinite(px)) {\n return DEFAULT_SCROLLBAR_WIDTH_PX;\n }\n return Math.min(MAX_SCROLLBAR_WIDTH_PX, Math.max(MIN_SCROLLBAR_WIDTH_PX, Math.round(px)));\n}\n\nfunction injectOverlayScrollbarStyles(document: Document): void {\n const existing = document.getElementById(STYLE_ELEMENT_ID);\n if (existing) {\n existing.textContent = OVERLAY_SCROLLBAR_STYLES;\n return;\n }\n\n const style = document.createElement('style');\n style.id = STYLE_ELEMENT_ID;\n style.textContent = OVERLAY_SCROLLBAR_STYLES;\n document.head.appendChild(style);\n}\n\n/** Rail is a sibling of the host; copy resolved tokens from the host so the rail can use them. */\nfunction syncOverlayScrollbarDesignTokens(host: HTMLElement, root: HTMLElement | null): void {\n if (!root) {\n return;\n }\n\n const computed = getComputedStyle(host);\n for (const varName of OVERLAY_SCROLLBAR_TOKEN_NAMES) {\n const value = computed.getPropertyValue(varName).trim();\n if (value) {\n root.style.setProperty(varName, value);\n } else {\n root.style.removeProperty(varName);\n }\n }\n}\n\nfunction readRailWidthPx(rail: HTMLElement): number {\n const width = rail.offsetWidth;\n if (width > 0) {\n return width;\n }\n const parsed = Number.parseFloat(getComputedStyle(rail).width);\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n const sizeToken = getComputedStyle(rail).getPropertyValue(AX_OVERLAY_SCROLLBAR_CSS_VARS.size).trim();\n const fromToken = Number.parseFloat(sizeToken);\n if (Number.isFinite(fromToken) && fromToken > 0) {\n return fromToken;\n }\n return DEFAULT_SCROLLBAR_WIDTH_PX;\n}\n\n/**\n * Custom overlay scrollbar: native scrollbars are hidden; a positioned thumb reflects scroll position.\n * Styles are injected once by this directive.\n */\n@Directive({\n selector: '[axOverlayScrollbar]',\n exportAs: 'axOverlayScrollbar',\n host: {\n class: 'ax-cdk-overlay-scrollbar',\n },\n})\nexport class AXOverlayScrollbarDirective {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly document = inject(DOCUMENT);\n\n private rootEl: HTMLElement | null = null;\n private railEl: HTMLElement | null = null;\n private trackEl: HTMLElement | null = null;\n private navUpEl: HTMLButtonElement | null = null;\n private navDownEl: HTMLButtonElement | null = null;\n private thumbEl: HTMLElement | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private designTokenMutationObserver: MutationObserver | null = null;\n private designTokenSyncFrame: number | null = null;\n private thumbDragPointerId: number | null = null;\n private pointerOverRail = false;\n private trackPressReleaseListener: (() => void) | null = null;\n private unbindRailInteraction: (() => void) | null = null;\n /** Thumb size derived from layout; position updates on scroll without re-measuring scrollHeight. */\n private thumbLayout: {\n thumbHeight: number;\n maxScroll: number;\n maxThumbOffset: number;\n } | null = null;\n\n readonly hideDelay = input(DEFAULT_HIDE_DELAY_MS);\n\n /**\n * When true, shows browser-style up/down arrow buttons on the rail.\n * Styling follows track/thumb CSS tokens.\n */\n readonly navigationButtons = input(false);\n\n /** Pixels to scroll per arrow click. */\n readonly navScrollStep = input(DEFAULT_NAV_SCROLL_STEP_PX);\n\n private hideTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor() {\n afterRenderEffect(() => {\n if (!isPlatformBrowser(this.platformId) || !this.rootEl) {\n return;\n }\n syncOverlayScrollbarDesignTokens(this.host.nativeElement, this.rootEl);\n });\n\n effect(() => {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n this.navigationButtons();\n this.remeasureCustomThumb();\n });\n\n afterNextRender(() => {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n injectOverlayScrollbarStyles(this.document);\n const element = this.host.nativeElement;\n this.mountCustomScrollbar(element);\n\n const interactionRoot = () => this.rootEl ?? element;\n\n const onScroll = () => {\n this.syncThumbPosition();\n this.bumpVisibility();\n };\n const onScrollEnd = () => {\n this.scheduleHide();\n this.syncEngagedAfterScroll();\n };\n const onPointerEnter = () => this.bumpVisibility();\n const onPointerMove = () => this.bumpVisibility();\n const onPointerLeave = () => {\n if (this.thumbDragPointerId === null) {\n this.setScrollbarEngaged(false);\n }\n this.deactivateThumb();\n };\n\n element.addEventListener('scroll', onScroll, { passive: true });\n element.addEventListener('scrollend', onScrollEnd);\n\n const root = interactionRoot();\n root.addEventListener('pointerenter', onPointerEnter);\n root.addEventListener('pointermove', onPointerMove);\n root.addEventListener('pointerleave', onPointerLeave);\n\n this.bindRailInteraction(element);\n\n this.resizeObserver = new ResizeObserver(() => this.remeasureCustomThumb());\n this.resizeObserver.observe(element);\n\n this.observeHostDesignTokenChanges(element);\n this.queueDesignTokenSync();\n this.remeasureCustomThumb();\n\n this.destroyRef.onDestroy(() => {\n this.clearHideTimer();\n this.clearTrackPressed();\n this.unbindRailInteraction?.();\n this.unbindRailInteraction = null;\n if (this.thumbEl && this.thumbDragPointerId !== null) {\n try {\n this.thumbEl.releasePointerCapture(this.thumbDragPointerId);\n } catch {\n /* already released */\n }\n }\n this.thumbDragPointerId = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.designTokenMutationObserver?.disconnect();\n this.designTokenMutationObserver = null;\n if (this.designTokenSyncFrame !== null) {\n cancelAnimationFrame(this.designTokenSyncFrame);\n this.designTokenSyncFrame = null;\n }\n element.removeEventListener('scroll', onScroll);\n element.removeEventListener('scrollend', onScrollEnd);\n root.removeEventListener('pointerenter', onPointerEnter);\n root.removeEventListener('pointermove', onPointerMove);\n root.removeEventListener('pointerleave', onPointerLeave);\n this.unmountCustomScrollbar(element);\n });\n });\n }\n\n /** Host and rail are siblings under the root; mirror CSS variables when the host style/class changes. */\n private observeHostDesignTokenChanges(host: HTMLElement): void {\n this.designTokenMutationObserver?.disconnect();\n this.designTokenMutationObserver = new MutationObserver(() => this.queueDesignTokenSync());\n this.designTokenMutationObserver.observe(host, {\n attributes: true,\n attributeFilter: ['style', 'class'],\n });\n }\n\n private queueDesignTokenSync(): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (this.designTokenSyncFrame !== null) {\n cancelAnimationFrame(this.designTokenSyncFrame);\n }\n this.designTokenSyncFrame = requestAnimationFrame(() => {\n this.designTokenSyncFrame = null;\n syncOverlayScrollbarDesignTokens(this.host.nativeElement, this.rootEl);\n this.remeasureCustomThumb();\n });\n }\n\n /** Rail lives on a wrapper so it stays fixed while the host scrolls. */\n private ensureScrollRoot(scroller: HTMLElement): HTMLElement {\n const parent = scroller.parentElement;\n if (parent?.classList.contains(ROOT_CLASS)) {\n this.rootEl = parent;\n return parent;\n }\n\n const root = this.document.createElement('div');\n root.className = ROOT_CLASS;\n parent?.insertBefore(root, scroller);\n root.appendChild(scroller);\n this.rootEl = root;\n return root;\n }\n\n private mountCustomScrollbar(element: HTMLElement): void {\n const root = this.ensureScrollRoot(element);\n const existingRail = root.querySelector<HTMLElement>(`.${RAIL_CLASS}`);\n if (existingRail) {\n this.railEl = existingRail;\n this.ensureRailStructure(existingRail);\n this.bindRailInteraction(element);\n return;\n }\n\n const rail = this.document.createElement('div');\n rail.className = RAIL_CLASS;\n rail.setAttribute('aria-hidden', 'true');\n this.ensureRailStructure(rail);\n root.appendChild(rail);\n this.railEl = rail;\n this.bindRailInteraction(element);\n }\n\n private ensureRailStructure(rail: HTMLElement): void {\n let thumb = rail.querySelector<HTMLElement>(`.${THUMB_CLASS}`);\n if (!thumb) {\n thumb = this.document.createElement('div');\n thumb.className = THUMB_CLASS;\n thumb.addEventListener('pointerdown', (event) => this.onThumbPointerDown(event));\n }\n\n let track = rail.querySelector<HTMLElement>(`.${TRACK_CLASS}`);\n if (!track) {\n const navUp = this.createNavButton('up');\n const navDown = this.createNavButton('down');\n track = this.document.createElement('div');\n track.className = TRACK_CLASS;\n rail.replaceChildren(navUp, track, navDown);\n track.appendChild(thumb);\n this.navUpEl = navUp;\n this.navDownEl = navDown;\n } else if (!track.contains(thumb)) {\n track.appendChild(thumb);\n this.navUpEl = rail.querySelector<HTMLButtonElement>(`.${NAV_BTN_CLASS}--up`);\n this.navDownEl = rail.querySelector<HTMLButtonElement>(`.${NAV_BTN_CLASS}--down`);\n } else {\n this.navUpEl = rail.querySelector<HTMLButtonElement>(`.${NAV_BTN_CLASS}--up`);\n this.navDownEl = rail.querySelector<HTMLButtonElement>(`.${NAV_BTN_CLASS}--down`);\n }\n\n this.trackEl = track;\n this.thumbEl = thumb;\n }\n\n private createNavButton(direction: 'up' | 'down'): HTMLButtonElement {\n const button = this.document.createElement('button');\n button.type = 'button';\n button.className = `${NAV_BTN_CLASS} ${NAV_BTN_CLASS}--${direction}`;\n button.setAttribute('aria-label', direction === 'up' ? 'Scroll up' : 'Scroll down');\n\n const arrow = this.document.createElement('span');\n arrow.className = `${NAV_ARROW_CLASS} ${NAV_ARROW_CLASS}--${direction}`;\n arrow.setAttribute('aria-hidden', 'true');\n button.appendChild(arrow);\n return button;\n }\n\n private resolveNavScrollStepPx(): number {\n const step = this.navScrollStep();\n if (Number.isFinite(step) && step > 0) {\n return Math.round(step);\n }\n return DEFAULT_NAV_SCROLL_STEP_PX;\n }\n\n private scrollByNavStep(scroller: HTMLElement, direction: -1 | 1): void {\n scroller.scrollTop += direction * this.resolveNavScrollStepPx();\n this.syncThumbPosition();\n this.bumpVisibility();\n }\n\n private bindRailInteraction(scroller: HTMLElement): void {\n const rail = this.railEl;\n if (!rail) {\n return;\n }\n\n this.unbindRailInteraction?.();\n\n const onRailPointerEnter = () => {\n this.pointerOverRail = true;\n this.showScrollbar();\n this.clearHideTimer();\n };\n const onRailPointerLeave = () => {\n this.pointerOverRail = false;\n this.clearTrackPressed();\n this.syncEngagedAfterScroll();\n this.scheduleHide();\n };\n const onRailWheel = (event: WheelEvent) => {\n event.preventDefault();\n event.stopPropagation();\n scroller.scrollTop += event.deltaY;\n this.bumpVisibility();\n };\n const onRailPointerDown = (event: PointerEvent) => {\n const thumb = this.thumbEl;\n const target = event.target as Node;\n if (thumb && (event.target === thumb || thumb.contains(target))) {\n return;\n }\n if (\n this.navUpEl?.contains(target) ||\n this.navDownEl?.contains(target) ||\n event.target === this.navUpEl ||\n event.target === this.navDownEl\n ) {\n return;\n }\n const track = this.trackEl;\n if (!track || (event.target !== track && !track.contains(target))) {\n return;\n }\n if (this.isPointerOverThumbVisual(event.clientX, event.clientY)) {\n return;\n }\n event.preventDefault();\n this.beginTrackPressed();\n this.jumpScrollToTrackPointer(event, scroller);\n };\n\n const bindNavButton = (button: HTMLButtonElement | null, direction: -1 | 1): (() => void) => {\n if (!button) {\n return () => undefined;\n }\n\n const onNavPointerLeave = () => {\n button.classList.remove(NAV_BTN_PRESSED_CLASS);\n };\n const onNavPointerDown = (event: PointerEvent) => {\n event.preventDefault();\n event.stopPropagation();\n button.classList.add(NAV_BTN_PRESSED_CLASS);\n this.beginTrackPressed();\n this.scrollByNavStep(scroller, direction);\n };\n const onNavPointerUp = () => {\n button.classList.remove(NAV_BTN_PRESSED_CLASS);\n };\n\n button.addEventListener('pointerleave', onNavPointerLeave);\n button.addEventListener('pointerdown', onNavPointerDown);\n button.addEventListener('pointerup', onNavPointerUp);\n button.addEventListener('pointercancel', onNavPointerUp);\n\n return () => {\n button.removeEventListener('pointerleave', onNavPointerLeave);\n button.removeEventListener('pointerdown', onNavPointerDown);\n button.removeEventListener('pointerup', onNavPointerUp);\n button.removeEventListener('pointercancel', onNavPointerUp);\n button.classList.remove(NAV_BTN_PRESSED_CLASS);\n };\n };\n\n const unbindNavUp = bindNavButton(this.navUpEl, -1);\n const unbindNavDown = bindNavButton(this.navDownEl, 1);\n\n rail.addEventListener('pointerenter', onRailPointerEnter);\n rail.addEventListener('pointerleave', onRailPointerLeave);\n rail.addEventListener('wheel', onRailWheel, { passive: false });\n rail.addEventListener('pointerdown', onRailPointerDown);\n\n this.unbindRailInteraction = () => {\n rail.removeEventListener('pointerenter', onRailPointerEnter);\n rail.removeEventListener('pointerleave', onRailPointerLeave);\n this.clearTrackPressed();\n rail.removeEventListener('wheel', onRailWheel);\n rail.removeEventListener('pointerdown', onRailPointerDown);\n unbindNavUp?.();\n unbindNavDown?.();\n };\n }\n\n private unmountCustomScrollbar(scroller: HTMLElement): void {\n this.railEl?.remove();\n this.railEl = null;\n this.trackEl = null;\n this.navUpEl = null;\n this.navDownEl = null;\n this.thumbEl = null;\n this.thumbLayout = null;\n\n const root = this.rootEl;\n if (!root?.classList.contains(ROOT_CLASS)) {\n this.rootEl = null;\n return;\n }\n\n const parent = root.parentElement;\n if (parent) {\n parent.insertBefore(scroller, root);\n root.remove();\n }\n this.rootEl = null;\n }\n\n private remeasureCustomThumb(): void {\n const element = this.host.nativeElement;\n const rail = this.railEl;\n const thumb = this.thumbEl;\n if (!rail || !thumb) {\n return;\n }\n\n syncOverlayScrollbarDesignTokens(element, this.rootEl);\n\n const clientHeight = element.clientHeight;\n rail.style.height = `${clientHeight}px`;\n\n const widthPx = readRailWidthPx(rail);\n const navigationEnabled = this.navigationButtons() === true;\n rail.classList.toggle(RAIL_WITH_NAV_CLASS, navigationEnabled);\n\n const track = this.trackEl;\n let trackViewportHeight = track?.clientHeight ?? 0;\n if (trackViewportHeight <= 0) {\n trackViewportHeight = navigationEnabled ? Math.max(0, clientHeight - 2 * widthPx) : clientHeight;\n }\n\n const scrollHeight = element.scrollHeight;\n const isScrollable = scrollHeight > clientHeight + 1;\n rail.hidden = !isScrollable;\n if (!isScrollable) {\n this.thumbLayout = null;\n thumb.style.height = '';\n thumb.style.top = '';\n return;\n }\n\n const thumbHeight = Math.max(MIN_THUMB_HEIGHT_PX, (trackViewportHeight / scrollHeight) * trackViewportHeight);\n const maxScroll = scrollHeight - clientHeight;\n const maxThumbOffset = Math.max(0, trackViewportHeight - thumbHeight);\n\n this.thumbLayout = { thumbHeight, maxScroll, maxThumbOffset };\n thumb.style.height = `${thumbHeight}px`;\n this.syncThumbPosition();\n }\n\n private syncThumbPosition(): void {\n const element = this.host.nativeElement;\n const thumb = this.thumbEl;\n const layout = this.thumbLayout;\n if (!thumb || !layout) {\n return;\n }\n\n const { maxScroll, maxThumbOffset } = layout;\n const scrollTop = element.scrollTop;\n const thumbOffset = maxScroll > 0 ? (scrollTop / maxScroll) * maxThumbOffset : 0;\n thumb.style.top = `${thumbOffset}px`;\n }\n\n /** Move thumb (and scroll position) to the pointer Y on the track. */\n private jumpScrollToTrackPointer(event: PointerEvent, scroller: HTMLElement): void {\n const rail = this.railEl;\n const layout = this.thumbLayout;\n if (!rail || !layout || layout.maxScroll <= 0 || layout.maxThumbOffset <= 0) {\n return;\n }\n\n const track = this.trackEl ?? rail;\n const rect = track.getBoundingClientRect();\n const offsetY = event.clientY - rect.top;\n const thumbTop = Math.min(layout.maxThumbOffset, Math.max(0, offsetY - layout.thumbHeight / 2));\n scroller.scrollTop = (thumbTop / layout.maxThumbOffset) * layout.maxScroll;\n this.syncThumbPosition();\n this.bumpVisibility();\n }\n\n private onThumbPointerDown(event: PointerEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n const element = this.host.nativeElement;\n const thumb = this.thumbEl;\n if (!thumb) {\n return;\n }\n\n this.setScrollbarEngaged(true);\n this.bumpVisibility();\n thumb.setPointerCapture(event.pointerId);\n\n const startY = event.clientY;\n const startScrollTop = element.scrollTop;\n const layout = this.thumbLayout;\n const clientHeight = element.clientHeight;\n const maxScroll = layout?.maxScroll ?? element.scrollHeight - clientHeight;\n const maxThumbOffset = layout?.maxThumbOffset ?? clientHeight - thumb.offsetHeight;\n\n const onPointerMove = (moveEvent: PointerEvent) => {\n if (maxThumbOffset <= 0 || maxScroll <= 0) {\n return;\n }\n const deltaY = moveEvent.clientY - startY;\n const scrollDelta = (deltaY / maxThumbOffset) * maxScroll;\n element.scrollTop = startScrollTop + scrollDelta;\n };\n\n const onPointerUp = (upEvent: PointerEvent) => {\n thumb.releasePointerCapture(upEvent.pointerId);\n thumb.removeEventListener('pointermove', onPointerMove);\n thumb.removeEventListener('pointerup', onPointerUp);\n thumb.removeEventListener('pointercancel', onPointerUp);\n this.thumbDragPointerId = null;\n this.setScrollbarEngaged(false);\n };\n\n this.thumbDragPointerId = event.pointerId;\n thumb.addEventListener('pointermove', onPointerMove);\n thumb.addEventListener('pointerup', onPointerUp);\n thumb.addEventListener('pointercancel', onPointerUp);\n }\n\n private showScrollbar(): void {\n this.host.nativeElement.classList.add(VISIBLE_CLASS);\n this.rootEl?.classList.add(VISIBLE_CLASS);\n }\n\n private bumpVisibility(): void {\n this.showScrollbar();\n if (this.pointerOverRail) {\n this.clearHideTimer();\n return;\n }\n this.scheduleHide();\n }\n\n private deactivateThumb(): void {\n if (this.pointerOverRail) {\n return;\n }\n this.clearHideTimer();\n this.host.nativeElement.classList.remove(VISIBLE_CLASS);\n this.rootEl?.classList.remove(VISIBLE_CLASS);\n this.setScrollbarEngaged(false);\n }\n\n private setScrollbarEngaged(engaged: boolean): void {\n this.host.nativeElement.classList.toggle(ENGAGED_CLASS, engaged);\n this.rootEl?.classList.toggle(ENGAGED_CLASS, engaged);\n }\n\n private setTrackPressed(pressed: boolean): void {\n this.host.nativeElement.classList.toggle(TRACK_PRESSED_CLASS, pressed);\n this.rootEl?.classList.toggle(TRACK_PRESSED_CLASS, pressed);\n }\n\n private isPointerOverThumbVisual(clientX: number, clientY: number): boolean {\n const thumb = this.thumbEl;\n if (!thumb) {\n return false;\n }\n const rect = thumb.getBoundingClientRect();\n return clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n }\n\n private beginTrackPressed(): void {\n this.clearTrackPressed();\n this.setTrackPressed(true);\n const release = () => {\n this.setTrackPressed(false);\n this.document.removeEventListener('pointerup', release);\n this.document.removeEventListener('pointercancel', release);\n this.trackPressReleaseListener = null;\n };\n this.trackPressReleaseListener = release;\n this.document.addEventListener('pointerup', release);\n this.document.addEventListener('pointercancel', release);\n }\n\n private clearTrackPressed(): void {\n if (this.trackPressReleaseListener) {\n this.document.removeEventListener('pointerup', this.trackPressReleaseListener);\n this.document.removeEventListener('pointercancel', this.trackPressReleaseListener);\n this.trackPressReleaseListener = null;\n }\n this.setTrackPressed(false);\n }\n\n private syncEngagedAfterScroll(): void {\n if (this.thumbDragPointerId !== null) {\n return;\n }\n this.setScrollbarEngaged(false);\n }\n\n private scheduleHide(): void {\n if (this.pointerOverRail) {\n this.clearHideTimer();\n return;\n }\n this.clearHideTimer();\n const delay = Math.max(0, this.hideDelay());\n this.hideTimer = setTimeout(() => {\n this.deactivateThumb();\n this.hideTimer = null;\n }, delay);\n }\n\n private clearHideTimer(): void {\n if (this.hideTimer !== null) {\n clearTimeout(this.hideTimer);\n this.hideTimer = null;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAcA;AACO,MAAM,6BAA6B,GAAG;AAC3C,IAAA,IAAI,EAAE,kCAAkC;AACxC,IAAA,WAAW,EAAE,0CAA0C;AACvD,IAAA,WAAW,EAAE,0CAA0C;AACvD,IAAA,UAAU,EAAE,yCAAyC;AACrD,IAAA,UAAU,EAAE,yCAAyC;AACrD,IAAA,gBAAgB,EAAE,gDAAgD;AAClE,IAAA,eAAe,EAAE,+CAA+C;AAChE,IAAA,gBAAgB,EAAE,gDAAgD;AAClE,IAAA,gBAAgB,EAAE,gDAAgD;AAClE,IAAA,gBAAgB,EAAE,gDAAgD;AAClE,IAAA,gBAAgB,EAAE,gDAAgD;AAClE,IAAA,gBAAgB,EAAE,gDAAgD;AAClE,IAAA,YAAY,EAAE,2CAA2C;;AAG3D,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC,6BAA6B,CAAC;AAElF,MAAM,UAAU,GAAG,+BAA+B;AAClD,MAAM,UAAU,GAAG,gCAAgC;AACnD,MAAM,WAAW,GAAG,sCAAsC;AAC1D,MAAM,WAAW,GAAG,sCAAsC;AAC1D,MAAM,aAAa,GAAG,sCAAsC;AAC5D,MAAM,qBAAqB,GAAG,+CAA+C;AAC7E,MAAM,eAAe,GAAG,qCAAqC;AAC7D,MAAM,mBAAmB,GAAG,0CAA0C;AACtE,MAAM,aAAa,GAAG,kCAAkC;AACxD;AACA,MAAM,aAAa,GAAG,mCAAmC;AACzD;AACA,MAAM,mBAAmB,GAAG,yCAAyC;AAErE,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsLhC,CAAC,IAAI,EAAE;AAER,MAAM,gBAAgB,GAAG,6BAA6B;AACtD,MAAM,qBAAqB,GAAG,GAAG;AACjC,MAAM,sBAAsB,GAAG,CAAC;AAChC,MAAM,sBAAsB,GAAG,EAAE;AACjC,MAAM,0BAA0B,GAAG,CAAC;AACpC,MAAM,mBAAmB,GAAG,EAAE;AAC9B,MAAM,0BAA0B,GAAG,EAAE;AAE/B,SAAU,0BAA0B,CAAC,EAAU,EAAA;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AACxB,QAAA,OAAO,0BAA0B;IACnC;IACA,OAAO,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3F;AAEA,SAAS,4BAA4B,CAAC,QAAkB,EAAA;IACtD,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;IAC1D,IAAI,QAAQ,EAAE;AACZ,QAAA,QAAQ,CAAC,WAAW,GAAG,wBAAwB;QAC/C;IACF;IAEA,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,IAAA,KAAK,CAAC,EAAE,GAAG,gBAAgB;AAC3B,IAAA,KAAK,CAAC,WAAW,GAAG,wBAAwB;AAC5C,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAClC;AAEA;AACA,SAAS,gCAAgC,CAAC,IAAiB,EAAE,IAAwB,EAAA;IACnF,IAAI,CAAC,IAAI,EAAE;QACT;IACF;AAEA,IAAA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC;AACvC,IAAA,KAAK,MAAM,OAAO,IAAI,6BAA6B,EAAE;QACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;QACvD,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;QACxC;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;QACpC;IACF;AACF;AAEA,SAAS,eAAe,CAAC,IAAiB,EAAA;AACxC,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW;AAC9B,IAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAC9D,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;AACzC,QAAA,OAAO,MAAM;IACf;AACA,IAAA,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;IACpG,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;IAC9C,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE;AAC/C,QAAA,OAAO,SAAS;IAClB;AACA,IAAA,OAAO,0BAA0B;AACnC;AAEA;;;AAGG;MAQU,2BAA2B,CAAA;AAuCtC,IAAA,WAAA,GAAA;AAtCiB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;AAClD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEpC,IAAA,CAAA,MAAM,GAAuB,IAAI;QACjC,IAAA,CAAA,MAAM,GAAuB,IAAI;QACjC,IAAA,CAAA,OAAO,GAAuB,IAAI;QAClC,IAAA,CAAA,OAAO,GAA6B,IAAI;QACxC,IAAA,CAAA,SAAS,GAA6B,IAAI;QAC1C,IAAA,CAAA,OAAO,GAAuB,IAAI;QAClC,IAAA,CAAA,cAAc,GAA0B,IAAI;QAC5C,IAAA,CAAA,2BAA2B,GAA4B,IAAI;QAC3D,IAAA,CAAA,oBAAoB,GAAkB,IAAI;QAC1C,IAAA,CAAA,kBAAkB,GAAkB,IAAI;QACxC,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,yBAAyB,GAAwB,IAAI;QACrD,IAAA,CAAA,qBAAqB,GAAwB,IAAI;;QAEjD,IAAA,CAAA,WAAW,GAIR,IAAI;QAEN,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,qBAAqB;sFAAC;AAEjD;;;AAGG;QACM,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAC,KAAK;8FAAC;;QAGhC,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,0BAA0B;0FAAC;QAElD,IAAA,CAAA,SAAS,GAAyC,IAAI;QAG5D,iBAAiB,CAAC,MAAK;AACrB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACvD;YACF;YACA,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;AACxE,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACvC;YACF;YACA,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,oBAAoB,EAAE;AAC7B,QAAA,CAAC,CAAC;QAEF,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACvC;YACF;AAEA,YAAA,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC3C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AACvC,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAElC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM,IAAI,OAAO;YAEpD,MAAM,QAAQ,GAAG,MAAK;gBACpB,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,CAAC;YACD,MAAM,WAAW,GAAG,MAAK;gBACvB,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,sBAAsB,EAAE;AAC/B,YAAA,CAAC;YACD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;YAClD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;YACjD,MAAM,cAAc,GAAG,MAAK;AAC1B,gBAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;AACpC,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;gBACjC;gBACA,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,CAAC;AAED,YAAA,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC/D,YAAA,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC;AAElD,YAAA,MAAM,IAAI,GAAG,eAAe,EAAE;AAC9B,YAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC;AACrD,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC;AACnD,YAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC;AAErD,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAEjC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC3E,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;AAEpC,YAAA,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC;YAC3C,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,oBAAoB,EAAE;AAE3B,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;gBAC7B,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,iBAAiB,EAAE;AACxB,gBAAA,IAAI,CAAC,qBAAqB,IAAI;AAC9B,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;gBACjC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;AACpD,oBAAA,IAAI;wBACF,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,CAAC;oBAC7D;AAAE,oBAAA,MAAM;;oBAER;gBACF;AACA,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,gBAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,CAAC,2BAA2B,EAAE,UAAU,EAAE;AAC9C,gBAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI;AACvC,gBAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE;AACtC,oBAAA,oBAAoB,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC/C,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;gBAClC;AACA,gBAAA,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC/C,gBAAA,OAAO,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC;AACrD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,cAAc,CAAC;AACxD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC;AACtD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,cAAc,CAAC;AACxD,gBAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;AACtC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;AAGQ,IAAA,6BAA6B,CAAC,IAAiB,EAAA;AACrD,QAAA,IAAI,CAAC,2BAA2B,EAAE,UAAU,EAAE;AAC9C,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC1F,QAAA,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,IAAI,EAAE;AAC7C,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;AACpC,SAAA,CAAC;IACJ;IAEQ,oBAAoB,GAAA;QAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACvC;QACF;AACA,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE;AACtC,YAAA,oBAAoB,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACjD;AACA,QAAA,IAAI,CAAC,oBAAoB,GAAG,qBAAqB,CAAC,MAAK;AACrD,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;YAChC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;YACtE,IAAI,CAAC,oBAAoB,EAAE;AAC7B,QAAA,CAAC,CAAC;IACJ;;AAGQ,IAAA,gBAAgB,CAAC,QAAqB,EAAA;AAC5C,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa;QACrC,IAAI,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,YAAA,OAAO,MAAM;QACf;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;AAC3B,QAAA,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,oBAAoB,CAAC,OAAoB,EAAA;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAc,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE,CAAC;QACtE,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,GAAG,YAAY;AAC1B,YAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;AACtC,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;YACjC;QACF;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AACxC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;IACnC;AAEQ,IAAA,mBAAmB,CAAC,IAAiB,EAAA;QAC3C,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAc,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,KAAK,CAAC,SAAS,GAAG,WAAW;AAC7B,YAAA,KAAK,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAClF;QAEA,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAc,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;YAC5C,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,KAAK,CAAC,SAAS,GAAG,WAAW;YAC7B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC;AAC3C,YAAA,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,SAAS,GAAG,OAAO;QAC1B;aAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACjC,YAAA,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAoB,CAAA,CAAA,EAAI,aAAa,CAAA,IAAA,CAAM,CAAC;YAC7E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAoB,CAAA,CAAA,EAAI,aAAa,CAAA,MAAA,CAAQ,CAAC;QACnF;aAAO;YACL,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAoB,CAAA,CAAA,EAAI,aAAa,CAAA,IAAA,CAAM,CAAC;YAC7E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAoB,CAAA,CAAA,EAAI,aAAa,CAAA,MAAA,CAAQ,CAAC;QACnF;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;AAEQ,IAAA,eAAe,CAAC,SAAwB,EAAA;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACpD,QAAA,MAAM,CAAC,IAAI,GAAG,QAAQ;QACtB,MAAM,CAAC,SAAS,GAAG,CAAA,EAAG,aAAa,IAAI,aAAa,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE;AACpE,QAAA,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,KAAK,IAAI,GAAG,WAAW,GAAG,aAAa,CAAC;QAEnF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QACjD,KAAK,CAAC,SAAS,GAAG,CAAA,EAAG,eAAe,IAAI,eAAe,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE;AACvE,QAAA,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AACzC,QAAA,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;AACzB,QAAA,OAAO,MAAM;IACf;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;QACjC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;AACrC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACzB;AACA,QAAA,OAAO,0BAA0B;IACnC;IAEQ,eAAe,CAAC,QAAqB,EAAE,SAAiB,EAAA;QAC9D,QAAQ,CAAC,SAAS,IAAI,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE;QAC/D,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,cAAc,EAAE;IACvB;AAEQ,IAAA,mBAAmB,CAAC,QAAqB,EAAA;AAC/C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;QACxB,IAAI,CAAC,IAAI,EAAE;YACT;QACF;AAEA,QAAA,IAAI,CAAC,qBAAqB,IAAI;QAE9B,MAAM,kBAAkB,GAAG,MAAK;AAC9B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC3B,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,cAAc,EAAE;AACvB,QAAA,CAAC;QACD,MAAM,kBAAkB,GAAG,MAAK;AAC9B,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,YAAY,EAAE;AACrB,QAAA,CAAC;AACD,QAAA,MAAM,WAAW,GAAG,CAAC,KAAiB,KAAI;YACxC,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,QAAQ,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM;YAClC,IAAI,CAAC,cAAc,EAAE;AACvB,QAAA,CAAC;AACD,QAAA,MAAM,iBAAiB,GAAG,CAAC,KAAmB,KAAI;AAChD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAc;AACnC,YAAA,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;gBAC/D;YACF;AACA,YAAA,IACE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC9B,gBAAA,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC;AAChC,gBAAA,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO;AAC7B,gBAAA,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,EAC/B;gBACA;YACF;AACA,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,YAAA,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;gBACjE;YACF;AACA,YAAA,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;gBAC/D;YACF;YACA,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC;AAChD,QAAA,CAAC;AAED,QAAA,MAAM,aAAa,GAAG,CAAC,MAAgC,EAAE,SAAiB,KAAkB;YAC1F,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAO,MAAM,SAAS;YACxB;YAEA,MAAM,iBAAiB,GAAG,MAAK;AAC7B,gBAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC;AAChD,YAAA,CAAC;AACD,YAAA,MAAM,gBAAgB,GAAG,CAAC,KAAmB,KAAI;gBAC/C,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC;gBAC3C,IAAI,CAAC,iBAAiB,EAAE;AACxB,gBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC3C,YAAA,CAAC;YACD,MAAM,cAAc,GAAG,MAAK;AAC1B,gBAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC;AAChD,YAAA,CAAC;AAED,YAAA,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,iBAAiB,CAAC;AAC1D,YAAA,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,CAAC;AACxD,YAAA,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,cAAc,CAAC;AACpD,YAAA,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,cAAc,CAAC;AAExD,YAAA,OAAO,MAAK;AACV,gBAAA,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,iBAAiB,CAAC;AAC7D,gBAAA,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,gBAAgB,CAAC;AAC3D,gBAAA,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,cAAc,CAAC;AACvD,gBAAA,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,cAAc,CAAC;AAC3D,gBAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC;AAChD,YAAA,CAAC;AACH,QAAA,CAAC;QAED,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAEtD,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC;AACzD,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC;AACzD,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC/D,QAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,iBAAiB,CAAC;AAEvD,QAAA,IAAI,CAAC,qBAAqB,GAAG,MAAK;AAChC,YAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,kBAAkB,CAAC;AAC5D,YAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,kBAAkB,CAAC;YAC5D,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC;AAC9C,YAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,iBAAiB,CAAC;YAC1D,WAAW,IAAI;YACf,aAAa,IAAI;AACnB,QAAA,CAAC;IACH;AAEQ,IAAA,sBAAsB,CAAC,QAAqB,EAAA;AAClD,QAAA,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;QACxB,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACzC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa;QACjC,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC;YACnC,IAAI,CAAC,MAAM,EAAE;QACf;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACpB;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;YACnB;QACF;AAEA,QAAA,gCAAgC,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;AAEtD,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;QACzC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,YAAY,IAAI;AAEvC,QAAA,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,KAAK,IAAI;QAC3D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;AAE7D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,QAAA,IAAI,mBAAmB,GAAG,KAAK,EAAE,YAAY,IAAI,CAAC;AAClD,QAAA,IAAI,mBAAmB,IAAI,CAAC,EAAE;YAC5B,mBAAmB,GAAG,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,YAAY;QAClG;AAEA,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;AACzC,QAAA,MAAM,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,CAAC;AACpD,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,YAAY;QAC3B,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;AACvB,YAAA,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE;YACpB;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,mBAAmB,GAAG,YAAY,IAAI,mBAAmB,CAAC;AAC7G,QAAA,MAAM,SAAS,GAAG,YAAY,GAAG,YAAY;AAC7C,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,GAAG,WAAW,CAAC;QAErE,IAAI,CAAC,WAAW,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE;QAC7D,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,WAAW,IAAI;QACvC,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AACvC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW;AAC/B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;YACrB;QACF;AAEA,QAAA,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM;AAC5C,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;AACnC,QAAA,MAAM,WAAW,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,IAAI,cAAc,GAAG,CAAC;QAChF,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,WAAW,IAAI;IACtC;;IAGQ,wBAAwB,CAAC,KAAmB,EAAE,QAAqB,EAAA;AACzE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW;AAC/B,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,EAAE;YAC3E;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI;AAClC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,EAAE;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AAC/F,QAAA,QAAQ,CAAC,SAAS,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS;QAC1E,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,cAAc,EAAE;IACvB;AAEQ,IAAA,kBAAkB,CAAC,KAAmB,EAAA;QAC5C,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AACvC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;QAC1B,IAAI,CAAC,KAAK,EAAE;YACV;QACF;AAEA,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;AAExC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO;AAC5B,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW;AAC/B,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;QACzC,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,OAAO,CAAC,YAAY,GAAG,YAAY;QAC1E,MAAM,cAAc,GAAG,MAAM,EAAE,cAAc,IAAI,YAAY,GAAG,KAAK,CAAC,YAAY;AAElF,QAAA,MAAM,aAAa,GAAG,CAAC,SAAuB,KAAI;YAChD,IAAI,cAAc,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE;gBACzC;YACF;AACA,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,GAAG,MAAM;YACzC,MAAM,WAAW,GAAG,CAAC,MAAM,GAAG,cAAc,IAAI,SAAS;AACzD,YAAA,OAAO,CAAC,SAAS,GAAG,cAAc,GAAG,WAAW;AAClD,QAAA,CAAC;AAED,QAAA,MAAM,WAAW,GAAG,CAAC,OAAqB,KAAI;AAC5C,YAAA,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC;AAC9C,YAAA,KAAK,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC;AACvD,YAAA,KAAK,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC;AACnD,YAAA,KAAK,CAAC,mBAAmB,CAAC,eAAe,EAAE,WAAW,CAAC;AACvD,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AACjC,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,SAAS;AACzC,QAAA,KAAK,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC;AACpD,QAAA,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC;AAChD,QAAA,KAAK,CAAC,gBAAgB,CAAC,eAAe,EAAE,WAAW,CAAC;IACtD;IAEQ,aAAa,GAAA;QACnB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;QACpD,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;IAC3C;IAEQ,cAAc,GAAA;QACpB,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,cAAc,EAAE;YACrB;QACF;QACA,IAAI,CAAC,YAAY,EAAE;IACrB;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB;QACF;QACA,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;QACvD,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;AAC5C,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IACjC;AAEQ,IAAA,mBAAmB,CAAC,OAAgB,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC;IACvD;AAEQ,IAAA,eAAe,CAAC,OAAgB,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC;QACtE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC;IAC7D;IAEQ,wBAAwB,CAAC,OAAe,EAAE,OAAe,EAAA;AAC/D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;QAC1B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,KAAK;QACd;AACA,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,EAAE;QAC1C,OAAO,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,GAAG,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM;IACvG;IAEQ,iBAAiB,GAAA;QACvB,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAC1B,MAAM,OAAO,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACvC,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,yBAAyB,GAAG,OAAO;QACxC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,eAAe,EAAE,OAAO,CAAC;IAC1D;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,yBAAyB,CAAC;YAC9E,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,yBAAyB,CAAC;AAClF,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;QACvC;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;IAC7B;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;YACpC;QACF;AACA,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IACjC;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,cAAc,EAAE;YACrB;QACF;QACA,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAK;YAC/B,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB,CAAC,EAAE,KAAK,CAAC;IACX;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AAC3B,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;IACF;8GAvkBW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,0BAA0B;AAClC,qBAAA;AACF,iBAAA;;;AC/SD;;AAEG;;"}
1
+ {"version":3,"file":"acorex-cdk-overlay-scrollbar.mjs","sources":["../../../../packages/cdk/overlay-scrollbar/src/lib/overlay-scrollbar.tokens.ts","../../../../packages/cdk/overlay-scrollbar/src/lib/overlay-scrollbar.config.ts","../../../../packages/cdk/overlay-scrollbar/src/lib/overlay-scrollbar.directive.ts","../../../../packages/cdk/overlay-scrollbar/src/acorex-cdk-overlay-scrollbar.ts"],"sourcesContent":["/** CSS custom properties for overlay scrollbar styling (set on the scroll host or in CSS). */\nexport const AX_OVERLAY_SCROLLBAR_CSS_VARS = {\n size: '--ax-comp-overlay-scrollbar-size',\n thumbRadius: '--ax-comp-overlay-scrollbar-thumb-radius',\n trackRadius: '--ax-comp-overlay-scrollbar-track-radius',\n trackColor: '--ax-comp-overlay-scrollbar-track-color',\n thumbColor: '--ax-comp-overlay-scrollbar-thumb-color',\n thumbActiveColor: '--ax-comp-overlay-scrollbar-thumb-active-color',\n thumbHoverColor: '--ax-comp-overlay-scrollbar-thumb-hover-color',\n trackActiveColor: '--ax-comp-overlay-scrollbar-track-active-color',\n thumbBorderWidth: '--ax-comp-overlay-scrollbar-thumb-border-width',\n thumbBorderColor: '--ax-comp-overlay-scrollbar-thumb-border-color',\n trackBorderWidth: '--ax-comp-overlay-scrollbar-track-border-width',\n trackBorderColor: '--ax-comp-overlay-scrollbar-track-border-color',\n fadeDuration: '--ax-comp-overlay-scrollbar-fade-duration',\n} as const;\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n ENVIRONMENT_INITIALIZER,\n EnvironmentProviders,\n InjectionToken,\n PLATFORM_ID,\n inject,\n makeEnvironmentProviders,\n} from '@angular/core';\n\nimport { AX_OVERLAY_SCROLLBAR_CSS_VARS } from './overlay-scrollbar.tokens';\n\n/** Default delay (ms) before the overlay scrollbar fades out after scroll. */\nexport const AX_OVERLAY_SCROLLBAR_DEFAULT_HIDE_DELAY_MS = 800;\n\n/** Default pixels scrolled per navigation arrow click. */\nexport const AX_OVERLAY_SCROLLBAR_DEFAULT_NAV_SCROLL_STEP_PX = 40;\n\n/**\n * Visual tokens for overlay scrollbars (`--ax-comp-overlay-scrollbar-*`).\n * Values are applied to `:root` when using {@link provideOverlayScrollbar}, and inherited by scroll hosts.\n */\nexport interface AXOverlayScrollbarDesignTokens {\n size?: string;\n thumbRadius?: string;\n trackRadius?: string;\n trackColor?: string;\n thumbColor?: string;\n thumbActiveColor?: string;\n thumbHoverColor?: string;\n trackActiveColor?: string;\n thumbBorderWidth?: string;\n thumbBorderColor?: string;\n trackBorderWidth?: string;\n trackBorderColor?: string;\n fadeDuration?: string;\n}\n\n/** Application-wide defaults for {@link AXOverlayScrollbarDirective}. */\nexport interface AXOverlayScrollbarConfig {\n /** Milliseconds before the scrollbar rail fades out after scrolling stops. */\n hideDelay: number;\n /** When true, shows up/down arrow buttons on the scrollbar rail. */\n navigationButtons: boolean;\n /** Pixels to scroll per navigation arrow click. */\n navScrollStep: number;\n /** Optional global design tokens (CSS custom properties). */\n designTokens?: AXOverlayScrollbarDesignTokens;\n}\n\nexport const AXOverlayScrollbarDefaultConfig: AXOverlayScrollbarConfig = {\n hideDelay: AX_OVERLAY_SCROLLBAR_DEFAULT_HIDE_DELAY_MS,\n navigationButtons: false,\n navScrollStep: AX_OVERLAY_SCROLLBAR_DEFAULT_NAV_SCROLL_STEP_PX,\n};\n\nexport type AXPartialOverlayScrollbarConfig = Partial<AXOverlayScrollbarConfig> & {\n designTokens?: Partial<AXOverlayScrollbarDesignTokens>;\n};\n\nexport const AX_OVERLAY_SCROLLBAR_CONFIG = new InjectionToken<AXOverlayScrollbarConfig>(\n 'AX_OVERLAY_SCROLLBAR_CONFIG',\n {\n providedIn: 'root',\n factory: () => AXOverlayScrollbarDefaultConfig,\n },\n);\n\nconst DESIGN_TOKEN_KEYS: Record<keyof AXOverlayScrollbarDesignTokens, string> = {\n size: AX_OVERLAY_SCROLLBAR_CSS_VARS.size,\n thumbRadius: AX_OVERLAY_SCROLLBAR_CSS_VARS.thumbRadius,\n trackRadius: AX_OVERLAY_SCROLLBAR_CSS_VARS.trackRadius,\n trackColor: AX_OVERLAY_SCROLLBAR_CSS_VARS.trackColor,\n thumbColor: AX_OVERLAY_SCROLLBAR_CSS_VARS.thumbColor,\n thumbActiveColor: AX_OVERLAY_SCROLLBAR_CSS_VARS.thumbActiveColor,\n thumbHoverColor: AX_OVERLAY_SCROLLBAR_CSS_VARS.thumbHoverColor,\n trackActiveColor: AX_OVERLAY_SCROLLBAR_CSS_VARS.trackActiveColor,\n thumbBorderWidth: AX_OVERLAY_SCROLLBAR_CSS_VARS.thumbBorderWidth,\n thumbBorderColor: AX_OVERLAY_SCROLLBAR_CSS_VARS.thumbBorderColor,\n trackBorderWidth: AX_OVERLAY_SCROLLBAR_CSS_VARS.trackBorderWidth,\n trackBorderColor: AX_OVERLAY_SCROLLBAR_CSS_VARS.trackBorderColor,\n fadeDuration: AX_OVERLAY_SCROLLBAR_CSS_VARS.fadeDuration,\n};\n\n/** Merges partial config with {@link AXOverlayScrollbarDefaultConfig}. */\nexport function overlayScrollbarConfig(config: AXPartialOverlayScrollbarConfig = {}): AXOverlayScrollbarConfig {\n const { designTokens, ...rest } = config;\n return {\n ...AXOverlayScrollbarDefaultConfig,\n ...rest,\n designTokens: designTokens ? { ...designTokens } : undefined,\n };\n}\n\n/** Sets overlay scrollbar CSS variables on the given element. */\nexport function applyOverlayScrollbarDesignTokens(\n element: HTMLElement,\n tokens?: AXOverlayScrollbarDesignTokens,\n): void {\n if (!tokens) {\n return;\n }\n\n for (const key of Object.keys(DESIGN_TOKEN_KEYS) as (keyof AXOverlayScrollbarDesignTokens)[]) {\n const value = tokens[key];\n if (value != null && value !== '') {\n element.style.setProperty(DESIGN_TOKEN_KEYS[key], value);\n }\n }\n}\n\n/**\n * Registers global overlay scrollbar defaults for the application.\n *\n * @example\n * ```ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideOverlayScrollbar({\n * hideDelay: 1200,\n * navigationButtons: true,\n * navScrollStep: 48,\n * designTokens: {\n * size: '8px',\n * thumbColor: 'var(--ax-sys-scroller-thumb-color)',\n * },\n * }),\n * ],\n * };\n * ```\n */\nexport function provideOverlayScrollbar(config: AXPartialOverlayScrollbarConfig = {}): EnvironmentProviders {\n const merged = overlayScrollbarConfig(config);\n\n return makeEnvironmentProviders([\n {\n provide: AX_OVERLAY_SCROLLBAR_CONFIG,\n useValue: merged,\n },\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: () => {\n if (!merged.designTokens) {\n return;\n }\n const platformId = inject(PLATFORM_ID);\n if (!isPlatformBrowser(platformId)) {\n return;\n }\n applyOverlayScrollbarDesignTokens(inject(DOCUMENT).documentElement, merged.designTokens);\n },\n },\n ]);\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\n\nimport {\n afterNextRender,\n afterRenderEffect,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n PLATFORM_ID,\n} from '@angular/core';\n\nimport {\n AX_OVERLAY_SCROLLBAR_CONFIG,\n AX_OVERLAY_SCROLLBAR_DEFAULT_HIDE_DELAY_MS,\n AX_OVERLAY_SCROLLBAR_DEFAULT_NAV_SCROLL_STEP_PX,\n} from './overlay-scrollbar.config';\nimport { AX_OVERLAY_SCROLLBAR_CSS_VARS } from './overlay-scrollbar.tokens';\n\nconst OVERLAY_SCROLLBAR_TOKEN_NAMES = Object.values(AX_OVERLAY_SCROLLBAR_CSS_VARS);\n\nconst ROOT_CLASS = 'ax-cdk-overlay-scrollbar-root';\nconst RAIL_CLASS = 'ax-cdk-overlay-scrollbar__rail';\nconst TRACK_CLASS = 'ax-cdk-overlay-scrollbar__rail-track';\nconst THUMB_CLASS = 'ax-cdk-overlay-scrollbar__rail-thumb';\nconst NAV_BTN_CLASS = 'ax-cdk-overlay-scrollbar__nav-button';\nconst NAV_BTN_PRESSED_CLASS = 'ax-cdk-overlay-scrollbar__nav-button--pressed';\nconst NAV_ARROW_CLASS = 'ax-cdk-overlay-scrollbar__nav-arrow';\nconst RAIL_WITH_NAV_CLASS = 'ax-cdk-overlay-scrollbar__rail--with-nav';\nconst VISIBLE_CLASS = 'ax-cdk-overlay-scrollbar--active';\n/** Applied while dragging the thumb (active fill; not used during wheel/content scroll). */\nconst ENGAGED_CLASS = 'ax-cdk-overlay-scrollbar--engaged';\n/** Primary button down on the track (outside thumb); `:active` is unreliable with `preventDefault`. */\nconst TRACK_PRESSED_CLASS = 'ax-cdk-overlay-scrollbar--track-pressed';\n\nconst OVERLAY_SCROLLBAR_STYLES = `\n.ax-cdk-overlay-scrollbar-root {\n position: relative;\n display: block;\n min-height: 0;\n --ax-comp-overlay-scrollbar-size: 6px;\n --ax-comp-overlay-scrollbar-fade-duration: 0.35s;\n --ax-comp-overlay-scrollbar-thumb-radius: 4px;\n --ax-comp-overlay-scrollbar-track-radius: 4px;\n --ax-comp-overlay-scrollbar-track-color: transparent;\n --ax-comp-overlay-scrollbar-thumb-color: var(--ax-sys-scroller-thumb-color, #64748b);\n --ax-comp-overlay-scrollbar-thumb-border-width: 0;\n --ax-comp-overlay-scrollbar-thumb-border-color: transparent;\n --ax-comp-overlay-scrollbar-track-border-width: 0;\n --ax-comp-overlay-scrollbar-track-border-color: transparent;\n}\n\n.ax-cdk-overlay-scrollbar {\n position: relative;\n --ax-comp-overlay-scrollbar-size: 6px;\n --ax-comp-overlay-scrollbar-fade-duration: 0.35s;\n --ax-comp-overlay-scrollbar-thumb-radius: 4px;\n --ax-comp-overlay-scrollbar-track-radius: 4px;\n --ax-comp-overlay-scrollbar-track-color: transparent;\n --ax-comp-overlay-scrollbar-thumb-color: var(--ax-sys-scroller-thumb-color, #64748b);\n --ax-comp-overlay-scrollbar-thumb-border-width: 0;\n --ax-comp-overlay-scrollbar-thumb-border-color: transparent;\n --ax-comp-overlay-scrollbar-track-border-width: 0;\n --ax-comp-overlay-scrollbar-track-border-color: transparent;\n\n scrollbar-width: none !important;\n -ms-overflow-style: none;\n}\n\n.ax-cdk-overlay-scrollbar::-webkit-scrollbar {\n display: none !important;\n width: 0 !important;\n height: 0 !important;\n background: transparent !important;\n}\n\n.ax-cdk-overlay-scrollbar__rail {\n position: absolute;\n top: 0;\n bottom: 0;\n inset-inline-end: 0;\n width: var(--ax-comp-overlay-scrollbar-size, 6px);\n overflow: hidden;\n pointer-events: auto;\n opacity: 0;\n z-index: 10;\n box-sizing: border-box;\n border-radius: var(--ax-comp-overlay-scrollbar-track-radius, 4px);\n background-color: var(--ax-comp-overlay-scrollbar-track-color, transparent);\n border-width: var(--ax-comp-overlay-scrollbar-track-border-width, 0);\n border-style: solid;\n border-color: var(--ax-comp-overlay-scrollbar-track-border-color, transparent);\n transition:\n opacity var(--ax-comp-overlay-scrollbar-fade-duration, 0.35s) ease,\n background-color 0.15s ease;\n}\n\n.ax-cdk-overlay-scrollbar-root.ax-cdk-overlay-scrollbar--active .ax-cdk-overlay-scrollbar__rail,\n.ax-cdk-overlay-scrollbar.ax-cdk-overlay-scrollbar--active .ax-cdk-overlay-scrollbar__rail {\n opacity: 1;\n}\n\n.ax-cdk-overlay-scrollbar__rail-track {\n position: absolute;\n inset: 0;\n box-sizing: border-box;\n}\n\n.ax-cdk-overlay-scrollbar-root.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--track-pressed\n .ax-cdk-overlay-scrollbar__rail,\n.ax-cdk-overlay-scrollbar.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--track-pressed\n .ax-cdk-overlay-scrollbar__rail,\n.ax-cdk-overlay-scrollbar-root.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--engaged\n .ax-cdk-overlay-scrollbar__rail,\n.ax-cdk-overlay-scrollbar.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--engaged\n .ax-cdk-overlay-scrollbar__rail {\n background-color: var(\n --ax-comp-overlay-scrollbar-track-active-color,\n var(--ax-comp-overlay-scrollbar-track-color, transparent)\n );\n}\n\n.ax-cdk-overlay-scrollbar__rail--with-nav {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.ax-cdk-overlay-scrollbar__rail--with-nav .ax-cdk-overlay-scrollbar__rail-track {\n position: relative;\n flex: 1 1 auto;\n min-height: 0;\n inset: auto;\n}\n\n.ax-cdk-overlay-scrollbar__nav-button {\n display: none;\n flex: 0 0 var(--ax-comp-overlay-scrollbar-size, 6px);\n width: 100%;\n min-height: var(--ax-comp-overlay-scrollbar-size, 6px);\n margin: 0;\n padding: 0;\n border: none;\n box-sizing: border-box;\n cursor: default;\n align-items: center;\n justify-content: center;\n background-color: transparent;\n color: var(--ax-comp-overlay-scrollbar-thumb-color, var(--ax-sys-scroller-thumb-color, #64748b));\n}\n\n.ax-cdk-overlay-scrollbar__rail--with-nav .ax-cdk-overlay-scrollbar__nav-button {\n display: flex;\n}\n\n.ax-cdk-overlay-scrollbar__nav-arrow {\n width: 0;\n height: 0;\n border-left: 3px solid transparent;\n border-right: 3px solid transparent;\n pointer-events: none;\n}\n\n.ax-cdk-overlay-scrollbar__nav-arrow--up {\n border-bottom: 4px solid currentColor;\n}\n\n.ax-cdk-overlay-scrollbar__nav-arrow--down {\n border-top: 4px solid currentColor;\n}\n\n.ax-cdk-overlay-scrollbar__rail-thumb {\n position: absolute;\n top: 0;\n inset-inline-start: 0;\n width: 100%;\n box-sizing: border-box;\n border-radius: var(--ax-comp-overlay-scrollbar-thumb-radius, 4px);\n background-color: var(--ax-comp-overlay-scrollbar-thumb-color, var(--ax-sys-scroller-thumb-color, #64748b));\n border-width: var(--ax-comp-overlay-scrollbar-thumb-border-width, 0);\n border-style: solid;\n border-color: var(--ax-comp-overlay-scrollbar-thumb-border-color, transparent);\n transition: background-color 0.15s ease;\n pointer-events: auto;\n touch-action: none;\n}\n\n.ax-cdk-overlay-scrollbar__rail-thumb::before {\n content: '';\n position: absolute;\n inset: -4px -8px;\n}\n\n.ax-cdk-overlay-scrollbar-root.ax-cdk-overlay-scrollbar--active .ax-cdk-overlay-scrollbar__rail-thumb:hover,\n.ax-cdk-overlay-scrollbar.ax-cdk-overlay-scrollbar--active .ax-cdk-overlay-scrollbar__rail-thumb:hover {\n background-color: var(\n --ax-comp-overlay-scrollbar-thumb-hover-color,\n var(\n --ax-comp-overlay-scrollbar-thumb-active-color,\n var(--ax-comp-overlay-scrollbar-thumb-color, var(--ax-sys-scroller-thumb-color, #64748b))\n )\n );\n}\n\n.ax-cdk-overlay-scrollbar-root.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--engaged\n .ax-cdk-overlay-scrollbar__rail-thumb,\n.ax-cdk-overlay-scrollbar.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--engaged\n .ax-cdk-overlay-scrollbar__rail-thumb,\n.ax-cdk-overlay-scrollbar-root.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--engaged\n .ax-cdk-overlay-scrollbar__rail-thumb:hover,\n.ax-cdk-overlay-scrollbar.ax-cdk-overlay-scrollbar--active.ax-cdk-overlay-scrollbar--engaged\n .ax-cdk-overlay-scrollbar__rail-thumb:hover {\n background-color: var(\n --ax-comp-overlay-scrollbar-thumb-active-color,\n var(--ax-comp-overlay-scrollbar-thumb-color, var(--ax-sys-scroller-thumb-color, #64748b))\n );\n}\n`.trim();\n\nconst STYLE_ELEMENT_ID = 'ax-overlay-scrollbar-styles';\nconst DEFAULT_HIDE_DELAY_MS = AX_OVERLAY_SCROLLBAR_DEFAULT_HIDE_DELAY_MS;\nconst MIN_SCROLLBAR_WIDTH_PX = 2;\nconst MAX_SCROLLBAR_WIDTH_PX = 32;\nconst DEFAULT_SCROLLBAR_WIDTH_PX = 6;\nconst MIN_THUMB_HEIGHT_PX = 20;\nconst DEFAULT_NAV_SCROLL_STEP_PX = AX_OVERLAY_SCROLLBAR_DEFAULT_NAV_SCROLL_STEP_PX;\n\nexport function clampOverlayScrollbarWidth(px: number): number {\n if (!Number.isFinite(px)) {\n return DEFAULT_SCROLLBAR_WIDTH_PX;\n }\n return Math.min(MAX_SCROLLBAR_WIDTH_PX, Math.max(MIN_SCROLLBAR_WIDTH_PX, Math.round(px)));\n}\n\nfunction injectOverlayScrollbarStyles(document: Document): void {\n const existing = document.getElementById(STYLE_ELEMENT_ID);\n if (existing) {\n existing.textContent = OVERLAY_SCROLLBAR_STYLES;\n return;\n }\n\n const style = document.createElement('style');\n style.id = STYLE_ELEMENT_ID;\n style.textContent = OVERLAY_SCROLLBAR_STYLES;\n document.head.appendChild(style);\n}\n\n/** Rail is a sibling of the host; copy resolved tokens from the host so the rail can use them. */\nfunction syncOverlayScrollbarDesignTokens(host: HTMLElement, root: HTMLElement | null): void {\n if (!root) {\n return;\n }\n\n const computed = getComputedStyle(host);\n for (const varName of OVERLAY_SCROLLBAR_TOKEN_NAMES) {\n const value = computed.getPropertyValue(varName).trim();\n if (value) {\n root.style.setProperty(varName, value);\n } else {\n root.style.removeProperty(varName);\n }\n }\n}\n\nfunction readRailWidthPx(rail: HTMLElement): number {\n const width = rail.offsetWidth;\n if (width > 0) {\n return width;\n }\n const parsed = Number.parseFloat(getComputedStyle(rail).width);\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n const sizeToken = getComputedStyle(rail).getPropertyValue(AX_OVERLAY_SCROLLBAR_CSS_VARS.size).trim();\n const fromToken = Number.parseFloat(sizeToken);\n if (Number.isFinite(fromToken) && fromToken > 0) {\n return fromToken;\n }\n return DEFAULT_SCROLLBAR_WIDTH_PX;\n}\n\n/**\n * Custom overlay scrollbar: native scrollbars are hidden; a positioned thumb reflects scroll position.\n * Styles are injected once by this directive.\n */\n@Directive({\n selector: '[axOverlayScrollbar]',\n exportAs: 'axOverlayScrollbar',\n host: {\n class: 'ax-cdk-overlay-scrollbar',\n },\n})\nexport class AXOverlayScrollbarDirective {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly document = inject(DOCUMENT);\n private readonly appConfig = inject(AX_OVERLAY_SCROLLBAR_CONFIG);\n\n private rootEl: HTMLElement | null = null;\n private railEl: HTMLElement | null = null;\n private trackEl: HTMLElement | null = null;\n private navUpEl: HTMLButtonElement | null = null;\n private navDownEl: HTMLButtonElement | null = null;\n private thumbEl: HTMLElement | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private designTokenMutationObserver: MutationObserver | null = null;\n private designTokenSyncFrame: number | null = null;\n private thumbDragPointerId: number | null = null;\n private pointerOverRail = false;\n private trackPressReleaseListener: (() => void) | null = null;\n private unbindRailInteraction: (() => void) | null = null;\n /** Thumb size derived from layout; position updates on scroll without re-measuring scrollHeight. */\n private thumbLayout: {\n thumbHeight: number;\n maxScroll: number;\n maxThumbOffset: number;\n } | null = null;\n\n readonly hideDelay = input(this.appConfig.hideDelay);\n\n /**\n * When true, shows browser-style up/down arrow buttons on the rail.\n * Styling follows track/thumb CSS tokens.\n */\n readonly navigationButtons = input(this.appConfig.navigationButtons);\n\n /** Pixels to scroll per arrow click. */\n readonly navScrollStep = input(this.appConfig.navScrollStep);\n\n private hideTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor() {\n afterRenderEffect(() => {\n if (!isPlatformBrowser(this.platformId) || !this.rootEl) {\n return;\n }\n syncOverlayScrollbarDesignTokens(this.host.nativeElement, this.rootEl);\n });\n\n effect(() => {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n this.navigationButtons();\n this.remeasureCustomThumb();\n });\n\n afterNextRender(() => {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n injectOverlayScrollbarStyles(this.document);\n const element = this.host.nativeElement;\n this.mountCustomScrollbar(element);\n\n const interactionRoot = () => this.rootEl ?? element;\n\n const onScroll = () => {\n this.syncThumbPosition();\n this.bumpVisibility();\n };\n const onScrollEnd = () => {\n this.scheduleHide();\n this.syncEngagedAfterScroll();\n };\n const onPointerEnter = () => this.bumpVisibility();\n const onPointerMove = () => this.bumpVisibility();\n const onPointerLeave = () => {\n if (this.thumbDragPointerId === null) {\n this.setScrollbarEngaged(false);\n }\n this.deactivateThumb();\n };\n\n element.addEventListener('scroll', onScroll, { passive: true });\n element.addEventListener('scrollend', onScrollEnd);\n\n const root = interactionRoot();\n root.addEventListener('pointerenter', onPointerEnter);\n root.addEventListener('pointermove', onPointerMove);\n root.addEventListener('pointerleave', onPointerLeave);\n\n this.bindRailInteraction(element);\n\n this.resizeObserver = new ResizeObserver(() => this.remeasureCustomThumb());\n this.resizeObserver.observe(element);\n\n this.observeHostDesignTokenChanges(element);\n this.queueDesignTokenSync();\n this.remeasureCustomThumb();\n\n this.destroyRef.onDestroy(() => {\n this.clearHideTimer();\n this.clearTrackPressed();\n this.unbindRailInteraction?.();\n this.unbindRailInteraction = null;\n if (this.thumbEl && this.thumbDragPointerId !== null) {\n try {\n this.thumbEl.releasePointerCapture(this.thumbDragPointerId);\n } catch {\n /* already released */\n }\n }\n this.thumbDragPointerId = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.designTokenMutationObserver?.disconnect();\n this.designTokenMutationObserver = null;\n if (this.designTokenSyncFrame !== null) {\n cancelAnimationFrame(this.designTokenSyncFrame);\n this.designTokenSyncFrame = null;\n }\n element.removeEventListener('scroll', onScroll);\n element.removeEventListener('scrollend', onScrollEnd);\n root.removeEventListener('pointerenter', onPointerEnter);\n root.removeEventListener('pointermove', onPointerMove);\n root.removeEventListener('pointerleave', onPointerLeave);\n this.unmountCustomScrollbar(element);\n });\n });\n }\n\n /** Host and rail are siblings under the root; mirror CSS variables when the host style/class changes. */\n private observeHostDesignTokenChanges(host: HTMLElement): void {\n this.designTokenMutationObserver?.disconnect();\n this.designTokenMutationObserver = new MutationObserver(() => this.queueDesignTokenSync());\n this.designTokenMutationObserver.observe(host, {\n attributes: true,\n attributeFilter: ['style', 'class'],\n });\n }\n\n private queueDesignTokenSync(): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (this.designTokenSyncFrame !== null) {\n cancelAnimationFrame(this.designTokenSyncFrame);\n }\n this.designTokenSyncFrame = requestAnimationFrame(() => {\n this.designTokenSyncFrame = null;\n syncOverlayScrollbarDesignTokens(this.host.nativeElement, this.rootEl);\n this.remeasureCustomThumb();\n });\n }\n\n /** Rail lives on a wrapper so it stays fixed while the host scrolls. */\n private ensureScrollRoot(scroller: HTMLElement): HTMLElement {\n const parent = scroller.parentElement;\n if (parent?.classList.contains(ROOT_CLASS)) {\n this.rootEl = parent;\n return parent;\n }\n\n const root = this.document.createElement('div');\n root.className = ROOT_CLASS;\n parent?.insertBefore(root, scroller);\n root.appendChild(scroller);\n this.rootEl = root;\n return root;\n }\n\n private mountCustomScrollbar(element: HTMLElement): void {\n const root = this.ensureScrollRoot(element);\n const existingRail = root.querySelector<HTMLElement>(`.${RAIL_CLASS}`);\n if (existingRail) {\n this.railEl = existingRail;\n this.ensureRailStructure(existingRail);\n this.bindRailInteraction(element);\n return;\n }\n\n const rail = this.document.createElement('div');\n rail.className = RAIL_CLASS;\n rail.setAttribute('aria-hidden', 'true');\n this.ensureRailStructure(rail);\n root.appendChild(rail);\n this.railEl = rail;\n this.bindRailInteraction(element);\n }\n\n private ensureRailStructure(rail: HTMLElement): void {\n let thumb = rail.querySelector<HTMLElement>(`.${THUMB_CLASS}`);\n if (!thumb) {\n thumb = this.document.createElement('div');\n thumb.className = THUMB_CLASS;\n thumb.addEventListener('pointerdown', (event) => this.onThumbPointerDown(event));\n }\n\n let track = rail.querySelector<HTMLElement>(`.${TRACK_CLASS}`);\n if (!track) {\n const navUp = this.createNavButton('up');\n const navDown = this.createNavButton('down');\n track = this.document.createElement('div');\n track.className = TRACK_CLASS;\n rail.replaceChildren(navUp, track, navDown);\n track.appendChild(thumb);\n this.navUpEl = navUp;\n this.navDownEl = navDown;\n } else if (!track.contains(thumb)) {\n track.appendChild(thumb);\n this.navUpEl = rail.querySelector<HTMLButtonElement>(`.${NAV_BTN_CLASS}--up`);\n this.navDownEl = rail.querySelector<HTMLButtonElement>(`.${NAV_BTN_CLASS}--down`);\n } else {\n this.navUpEl = rail.querySelector<HTMLButtonElement>(`.${NAV_BTN_CLASS}--up`);\n this.navDownEl = rail.querySelector<HTMLButtonElement>(`.${NAV_BTN_CLASS}--down`);\n }\n\n this.trackEl = track;\n this.thumbEl = thumb;\n }\n\n private createNavButton(direction: 'up' | 'down'): HTMLButtonElement {\n const button = this.document.createElement('button');\n button.type = 'button';\n button.className = `${NAV_BTN_CLASS} ${NAV_BTN_CLASS}--${direction}`;\n button.setAttribute('aria-label', direction === 'up' ? 'Scroll up' : 'Scroll down');\n\n const arrow = this.document.createElement('span');\n arrow.className = `${NAV_ARROW_CLASS} ${NAV_ARROW_CLASS}--${direction}`;\n arrow.setAttribute('aria-hidden', 'true');\n button.appendChild(arrow);\n return button;\n }\n\n private resolveNavScrollStepPx(): number {\n const step = this.navScrollStep();\n if (Number.isFinite(step) && step > 0) {\n return Math.round(step);\n }\n return DEFAULT_NAV_SCROLL_STEP_PX;\n }\n\n private scrollByNavStep(scroller: HTMLElement, direction: -1 | 1): void {\n scroller.scrollTop += direction * this.resolveNavScrollStepPx();\n this.syncThumbPosition();\n this.bumpVisibility();\n }\n\n private bindRailInteraction(scroller: HTMLElement): void {\n const rail = this.railEl;\n if (!rail) {\n return;\n }\n\n this.unbindRailInteraction?.();\n\n const onRailPointerEnter = () => {\n this.pointerOverRail = true;\n this.showScrollbar();\n this.clearHideTimer();\n };\n const onRailPointerLeave = () => {\n this.pointerOverRail = false;\n this.clearTrackPressed();\n this.syncEngagedAfterScroll();\n this.scheduleHide();\n };\n const onRailWheel = (event: WheelEvent) => {\n event.preventDefault();\n event.stopPropagation();\n scroller.scrollTop += event.deltaY;\n this.bumpVisibility();\n };\n const onRailPointerDown = (event: PointerEvent) => {\n const thumb = this.thumbEl;\n const target = event.target as Node;\n if (thumb && (event.target === thumb || thumb.contains(target))) {\n return;\n }\n if (\n this.navUpEl?.contains(target) ||\n this.navDownEl?.contains(target) ||\n event.target === this.navUpEl ||\n event.target === this.navDownEl\n ) {\n return;\n }\n const track = this.trackEl;\n if (!track || (event.target !== track && !track.contains(target))) {\n return;\n }\n if (this.isPointerOverThumbVisual(event.clientX, event.clientY)) {\n return;\n }\n event.preventDefault();\n this.beginTrackPressed();\n this.jumpScrollToTrackPointer(event, scroller);\n };\n\n const bindNavButton = (button: HTMLButtonElement | null, direction: -1 | 1): (() => void) => {\n if (!button) {\n return () => undefined;\n }\n\n const onNavPointerLeave = () => {\n button.classList.remove(NAV_BTN_PRESSED_CLASS);\n };\n const onNavPointerDown = (event: PointerEvent) => {\n event.preventDefault();\n event.stopPropagation();\n button.classList.add(NAV_BTN_PRESSED_CLASS);\n this.beginTrackPressed();\n this.scrollByNavStep(scroller, direction);\n };\n const onNavPointerUp = () => {\n button.classList.remove(NAV_BTN_PRESSED_CLASS);\n };\n\n button.addEventListener('pointerleave', onNavPointerLeave);\n button.addEventListener('pointerdown', onNavPointerDown);\n button.addEventListener('pointerup', onNavPointerUp);\n button.addEventListener('pointercancel', onNavPointerUp);\n\n return () => {\n button.removeEventListener('pointerleave', onNavPointerLeave);\n button.removeEventListener('pointerdown', onNavPointerDown);\n button.removeEventListener('pointerup', onNavPointerUp);\n button.removeEventListener('pointercancel', onNavPointerUp);\n button.classList.remove(NAV_BTN_PRESSED_CLASS);\n };\n };\n\n const unbindNavUp = bindNavButton(this.navUpEl, -1);\n const unbindNavDown = bindNavButton(this.navDownEl, 1);\n\n rail.addEventListener('pointerenter', onRailPointerEnter);\n rail.addEventListener('pointerleave', onRailPointerLeave);\n rail.addEventListener('wheel', onRailWheel, { passive: false });\n rail.addEventListener('pointerdown', onRailPointerDown);\n\n this.unbindRailInteraction = () => {\n rail.removeEventListener('pointerenter', onRailPointerEnter);\n rail.removeEventListener('pointerleave', onRailPointerLeave);\n this.clearTrackPressed();\n rail.removeEventListener('wheel', onRailWheel);\n rail.removeEventListener('pointerdown', onRailPointerDown);\n unbindNavUp?.();\n unbindNavDown?.();\n };\n }\n\n private unmountCustomScrollbar(scroller: HTMLElement): void {\n this.railEl?.remove();\n this.railEl = null;\n this.trackEl = null;\n this.navUpEl = null;\n this.navDownEl = null;\n this.thumbEl = null;\n this.thumbLayout = null;\n\n const root = this.rootEl;\n if (!root?.classList.contains(ROOT_CLASS)) {\n this.rootEl = null;\n return;\n }\n\n const parent = root.parentElement;\n if (parent) {\n parent.insertBefore(scroller, root);\n root.remove();\n }\n this.rootEl = null;\n }\n\n private remeasureCustomThumb(): void {\n const element = this.host.nativeElement;\n const rail = this.railEl;\n const thumb = this.thumbEl;\n if (!rail || !thumb) {\n return;\n }\n\n syncOverlayScrollbarDesignTokens(element, this.rootEl);\n\n const clientHeight = element.clientHeight;\n rail.style.height = `${clientHeight}px`;\n\n const widthPx = readRailWidthPx(rail);\n const navigationEnabled = this.navigationButtons() === true;\n rail.classList.toggle(RAIL_WITH_NAV_CLASS, navigationEnabled);\n\n const track = this.trackEl;\n let trackViewportHeight = track?.clientHeight ?? 0;\n if (trackViewportHeight <= 0) {\n trackViewportHeight = navigationEnabled ? Math.max(0, clientHeight - 2 * widthPx) : clientHeight;\n }\n\n const scrollHeight = element.scrollHeight;\n const isScrollable = scrollHeight > clientHeight + 1;\n rail.hidden = !isScrollable;\n if (!isScrollable) {\n this.thumbLayout = null;\n thumb.style.height = '';\n thumb.style.top = '';\n return;\n }\n\n const thumbHeight = Math.max(MIN_THUMB_HEIGHT_PX, (trackViewportHeight / scrollHeight) * trackViewportHeight);\n const maxScroll = scrollHeight - clientHeight;\n const maxThumbOffset = Math.max(0, trackViewportHeight - thumbHeight);\n\n this.thumbLayout = { thumbHeight, maxScroll, maxThumbOffset };\n thumb.style.height = `${thumbHeight}px`;\n this.syncThumbPosition();\n }\n\n private syncThumbPosition(): void {\n const element = this.host.nativeElement;\n const thumb = this.thumbEl;\n const layout = this.thumbLayout;\n if (!thumb || !layout) {\n return;\n }\n\n const { maxScroll, maxThumbOffset } = layout;\n const scrollTop = element.scrollTop;\n const thumbOffset = maxScroll > 0 ? (scrollTop / maxScroll) * maxThumbOffset : 0;\n thumb.style.top = `${thumbOffset}px`;\n }\n\n /** Move thumb (and scroll position) to the pointer Y on the track. */\n private jumpScrollToTrackPointer(event: PointerEvent, scroller: HTMLElement): void {\n const rail = this.railEl;\n const layout = this.thumbLayout;\n if (!rail || !layout || layout.maxScroll <= 0 || layout.maxThumbOffset <= 0) {\n return;\n }\n\n const track = this.trackEl ?? rail;\n const rect = track.getBoundingClientRect();\n const offsetY = event.clientY - rect.top;\n const thumbTop = Math.min(layout.maxThumbOffset, Math.max(0, offsetY - layout.thumbHeight / 2));\n scroller.scrollTop = (thumbTop / layout.maxThumbOffset) * layout.maxScroll;\n this.syncThumbPosition();\n this.bumpVisibility();\n }\n\n private onThumbPointerDown(event: PointerEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n const element = this.host.nativeElement;\n const thumb = this.thumbEl;\n if (!thumb) {\n return;\n }\n\n this.setScrollbarEngaged(true);\n this.bumpVisibility();\n thumb.setPointerCapture(event.pointerId);\n\n const startY = event.clientY;\n const startScrollTop = element.scrollTop;\n const layout = this.thumbLayout;\n const clientHeight = element.clientHeight;\n const maxScroll = layout?.maxScroll ?? element.scrollHeight - clientHeight;\n const maxThumbOffset = layout?.maxThumbOffset ?? clientHeight - thumb.offsetHeight;\n\n const onPointerMove = (moveEvent: PointerEvent) => {\n if (maxThumbOffset <= 0 || maxScroll <= 0) {\n return;\n }\n const deltaY = moveEvent.clientY - startY;\n const scrollDelta = (deltaY / maxThumbOffset) * maxScroll;\n element.scrollTop = startScrollTop + scrollDelta;\n };\n\n const onPointerUp = (upEvent: PointerEvent) => {\n thumb.releasePointerCapture(upEvent.pointerId);\n thumb.removeEventListener('pointermove', onPointerMove);\n thumb.removeEventListener('pointerup', onPointerUp);\n thumb.removeEventListener('pointercancel', onPointerUp);\n this.thumbDragPointerId = null;\n this.setScrollbarEngaged(false);\n };\n\n this.thumbDragPointerId = event.pointerId;\n thumb.addEventListener('pointermove', onPointerMove);\n thumb.addEventListener('pointerup', onPointerUp);\n thumb.addEventListener('pointercancel', onPointerUp);\n }\n\n private showScrollbar(): void {\n this.host.nativeElement.classList.add(VISIBLE_CLASS);\n this.rootEl?.classList.add(VISIBLE_CLASS);\n }\n\n private bumpVisibility(): void {\n this.showScrollbar();\n if (this.pointerOverRail) {\n this.clearHideTimer();\n return;\n }\n this.scheduleHide();\n }\n\n private deactivateThumb(): void {\n if (this.pointerOverRail) {\n return;\n }\n this.clearHideTimer();\n this.host.nativeElement.classList.remove(VISIBLE_CLASS);\n this.rootEl?.classList.remove(VISIBLE_CLASS);\n this.setScrollbarEngaged(false);\n }\n\n private setScrollbarEngaged(engaged: boolean): void {\n this.host.nativeElement.classList.toggle(ENGAGED_CLASS, engaged);\n this.rootEl?.classList.toggle(ENGAGED_CLASS, engaged);\n }\n\n private setTrackPressed(pressed: boolean): void {\n this.host.nativeElement.classList.toggle(TRACK_PRESSED_CLASS, pressed);\n this.rootEl?.classList.toggle(TRACK_PRESSED_CLASS, pressed);\n }\n\n private isPointerOverThumbVisual(clientX: number, clientY: number): boolean {\n const thumb = this.thumbEl;\n if (!thumb) {\n return false;\n }\n const rect = thumb.getBoundingClientRect();\n return clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n }\n\n private beginTrackPressed(): void {\n this.clearTrackPressed();\n this.setTrackPressed(true);\n const release = () => {\n this.setTrackPressed(false);\n this.document.removeEventListener('pointerup', release);\n this.document.removeEventListener('pointercancel', release);\n this.trackPressReleaseListener = null;\n };\n this.trackPressReleaseListener = release;\n this.document.addEventListener('pointerup', release);\n this.document.addEventListener('pointercancel', release);\n }\n\n private clearTrackPressed(): void {\n if (this.trackPressReleaseListener) {\n this.document.removeEventListener('pointerup', this.trackPressReleaseListener);\n this.document.removeEventListener('pointercancel', this.trackPressReleaseListener);\n this.trackPressReleaseListener = null;\n }\n this.setTrackPressed(false);\n }\n\n private syncEngagedAfterScroll(): void {\n if (this.thumbDragPointerId !== null) {\n return;\n }\n this.setScrollbarEngaged(false);\n }\n\n private scheduleHide(): void {\n if (this.pointerOverRail) {\n this.clearHideTimer();\n return;\n }\n this.clearHideTimer();\n const delay = Math.max(0, this.hideDelay());\n this.hideTimer = setTimeout(() => {\n this.deactivateThumb();\n this.hideTimer = null;\n }, delay);\n }\n\n private clearHideTimer(): void {\n if (this.hideTimer !== null) {\n clearTimeout(this.hideTimer);\n this.hideTimer = null;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;AACO,MAAM,6BAA6B,GAAG;AAC3C,IAAA,IAAI,EAAE,kCAAkC;AACxC,IAAA,WAAW,EAAE,0CAA0C;AACvD,IAAA,WAAW,EAAE,0CAA0C;AACvD,IAAA,UAAU,EAAE,yCAAyC;AACrD,IAAA,UAAU,EAAE,yCAAyC;AACrD,IAAA,gBAAgB,EAAE,gDAAgD;AAClE,IAAA,eAAe,EAAE,+CAA+C;AAChE,IAAA,gBAAgB,EAAE,gDAAgD;AAClE,IAAA,gBAAgB,EAAE,gDAAgD;AAClE,IAAA,gBAAgB,EAAE,gDAAgD;AAClE,IAAA,gBAAgB,EAAE,gDAAgD;AAClE,IAAA,gBAAgB,EAAE,gDAAgD;AAClE,IAAA,YAAY,EAAE,2CAA2C;;;ACF3D;AACO,MAAM,0CAA0C,GAAG;AAE1D;AACO,MAAM,+CAA+C,GAAG;AAkCxD,MAAM,+BAA+B,GAA6B;AACvE,IAAA,SAAS,EAAE,0CAA0C;AACrD,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,aAAa,EAAE,+CAA+C;;MAOnD,2BAA2B,GAAG,IAAI,cAAc,CAC3D,6BAA6B,EAC7B;AACE,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM,+BAA+B;AAC/C,CAAA;AAGH,MAAM,iBAAiB,GAAyD;IAC9E,IAAI,EAAE,6BAA6B,CAAC,IAAI;IACxC,WAAW,EAAE,6BAA6B,CAAC,WAAW;IACtD,WAAW,EAAE,6BAA6B,CAAC,WAAW;IACtD,UAAU,EAAE,6BAA6B,CAAC,UAAU;IACpD,UAAU,EAAE,6BAA6B,CAAC,UAAU;IACpD,gBAAgB,EAAE,6BAA6B,CAAC,gBAAgB;IAChE,eAAe,EAAE,6BAA6B,CAAC,eAAe;IAC9D,gBAAgB,EAAE,6BAA6B,CAAC,gBAAgB;IAChE,gBAAgB,EAAE,6BAA6B,CAAC,gBAAgB;IAChE,gBAAgB,EAAE,6BAA6B,CAAC,gBAAgB;IAChE,gBAAgB,EAAE,6BAA6B,CAAC,gBAAgB;IAChE,gBAAgB,EAAE,6BAA6B,CAAC,gBAAgB;IAChE,YAAY,EAAE,6BAA6B,CAAC,YAAY;CACzD;AAED;AACM,SAAU,sBAAsB,CAAC,MAAA,GAA0C,EAAE,EAAA;IACjF,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM;IACxC,OAAO;AACL,QAAA,GAAG,+BAA+B;AAClC,QAAA,GAAG,IAAI;AACP,QAAA,YAAY,EAAE,YAAY,GAAG,EAAE,GAAG,YAAY,EAAE,GAAG,SAAS;KAC7D;AACH;AAEA;AACM,SAAU,iCAAiC,CAC/C,OAAoB,EACpB,MAAuC,EAAA;IAEvC,IAAI,CAAC,MAAM,EAAE;QACX;IACF;IAEA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAA6C,EAAE;AAC5F,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;QACzB,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;AACjC,YAAA,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;QAC1D;IACF;AACF;AAEA;;;;;;;;;;;;;;;;;;;AAmBG;AACG,SAAU,uBAAuB,CAAC,MAAA,GAA0C,EAAE,EAAA;AAClF,IAAA,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC;AAE7C,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA;AACE,YAAA,OAAO,EAAE,2BAA2B;AACpC,YAAA,QAAQ,EAAE,MAAM;AACjB,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,uBAAuB;AAChC,YAAA,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;oBACxB;gBACF;AACA,gBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AACtC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE;oBAClC;gBACF;AACA,gBAAA,iCAAiC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC;YAC1F,CAAC;AACF,SAAA;AACF,KAAA,CAAC;AACJ;;ACrIA,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC,6BAA6B,CAAC;AAElF,MAAM,UAAU,GAAG,+BAA+B;AAClD,MAAM,UAAU,GAAG,gCAAgC;AACnD,MAAM,WAAW,GAAG,sCAAsC;AAC1D,MAAM,WAAW,GAAG,sCAAsC;AAC1D,MAAM,aAAa,GAAG,sCAAsC;AAC5D,MAAM,qBAAqB,GAAG,+CAA+C;AAC7E,MAAM,eAAe,GAAG,qCAAqC;AAC7D,MAAM,mBAAmB,GAAG,0CAA0C;AACtE,MAAM,aAAa,GAAG,kCAAkC;AACxD;AACA,MAAM,aAAa,GAAG,mCAAmC;AACzD;AACA,MAAM,mBAAmB,GAAG,yCAAyC;AAErE,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsLhC,CAAC,IAAI,EAAE;AAER,MAAM,gBAAgB,GAAG,6BAA6B;AACtD,MAAM,qBAAqB,GAAG,0CAA0C;AACxE,MAAM,sBAAsB,GAAG,CAAC;AAChC,MAAM,sBAAsB,GAAG,EAAE;AACjC,MAAM,0BAA0B,GAAG,CAAC;AACpC,MAAM,mBAAmB,GAAG,EAAE;AAC9B,MAAM,0BAA0B,GAAG,+CAA+C;AAE5E,SAAU,0BAA0B,CAAC,EAAU,EAAA;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AACxB,QAAA,OAAO,0BAA0B;IACnC;IACA,OAAO,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3F;AAEA,SAAS,4BAA4B,CAAC,QAAkB,EAAA;IACtD,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;IAC1D,IAAI,QAAQ,EAAE;AACZ,QAAA,QAAQ,CAAC,WAAW,GAAG,wBAAwB;QAC/C;IACF;IAEA,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,IAAA,KAAK,CAAC,EAAE,GAAG,gBAAgB;AAC3B,IAAA,KAAK,CAAC,WAAW,GAAG,wBAAwB;AAC5C,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAClC;AAEA;AACA,SAAS,gCAAgC,CAAC,IAAiB,EAAE,IAAwB,EAAA;IACnF,IAAI,CAAC,IAAI,EAAE;QACT;IACF;AAEA,IAAA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC;AACvC,IAAA,KAAK,MAAM,OAAO,IAAI,6BAA6B,EAAE;QACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;QACvD,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;QACxC;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;QACpC;IACF;AACF;AAEA,SAAS,eAAe,CAAC,IAAiB,EAAA;AACxC,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW;AAC9B,IAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAC9D,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;AACzC,QAAA,OAAO,MAAM;IACf;AACA,IAAA,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;IACpG,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;IAC9C,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE;AAC/C,QAAA,OAAO,SAAS;IAClB;AACA,IAAA,OAAO,0BAA0B;AACnC;AAEA;;;AAGG;MAQU,2BAA2B,CAAA;AAwCtC,IAAA,WAAA,GAAA;AAvCiB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;AAClD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,2BAA2B,CAAC;QAExD,IAAA,CAAA,MAAM,GAAuB,IAAI;QACjC,IAAA,CAAA,MAAM,GAAuB,IAAI;QACjC,IAAA,CAAA,OAAO,GAAuB,IAAI;QAClC,IAAA,CAAA,OAAO,GAA6B,IAAI;QACxC,IAAA,CAAA,SAAS,GAA6B,IAAI;QAC1C,IAAA,CAAA,OAAO,GAAuB,IAAI;QAClC,IAAA,CAAA,cAAc,GAA0B,IAAI;QAC5C,IAAA,CAAA,2BAA2B,GAA4B,IAAI;QAC3D,IAAA,CAAA,oBAAoB,GAAkB,IAAI;QAC1C,IAAA,CAAA,kBAAkB,GAAkB,IAAI;QACxC,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,yBAAyB,GAAwB,IAAI;QACrD,IAAA,CAAA,qBAAqB,GAAwB,IAAI;;QAEjD,IAAA,CAAA,WAAW,GAIR,IAAI;AAEN,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS;sFAAC;AAEpD;;;AAGG;AACM,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB;8FAAC;;AAG3D,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa;0FAAC;QAEpD,IAAA,CAAA,SAAS,GAAyC,IAAI;QAG5D,iBAAiB,CAAC,MAAK;AACrB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACvD;YACF;YACA,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;AACxE,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACvC;YACF;YACA,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,oBAAoB,EAAE;AAC7B,QAAA,CAAC,CAAC;QAEF,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACvC;YACF;AAEA,YAAA,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC3C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AACvC,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAElC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM,IAAI,OAAO;YAEpD,MAAM,QAAQ,GAAG,MAAK;gBACpB,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,CAAC;YACD,MAAM,WAAW,GAAG,MAAK;gBACvB,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,sBAAsB,EAAE;AAC/B,YAAA,CAAC;YACD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;YAClD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;YACjD,MAAM,cAAc,GAAG,MAAK;AAC1B,gBAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;AACpC,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;gBACjC;gBACA,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,CAAC;AAED,YAAA,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC/D,YAAA,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC;AAElD,YAAA,MAAM,IAAI,GAAG,eAAe,EAAE;AAC9B,YAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC;AACrD,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC;AACnD,YAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC;AAErD,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAEjC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC3E,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;AAEpC,YAAA,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC;YAC3C,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,oBAAoB,EAAE;AAE3B,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;gBAC7B,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,iBAAiB,EAAE;AACxB,gBAAA,IAAI,CAAC,qBAAqB,IAAI;AAC9B,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;gBACjC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;AACpD,oBAAA,IAAI;wBACF,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,CAAC;oBAC7D;AAAE,oBAAA,MAAM;;oBAER;gBACF;AACA,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,gBAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,CAAC,2BAA2B,EAAE,UAAU,EAAE;AAC9C,gBAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI;AACvC,gBAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE;AACtC,oBAAA,oBAAoB,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC/C,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;gBAClC;AACA,gBAAA,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC/C,gBAAA,OAAO,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC;AACrD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,cAAc,CAAC;AACxD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC;AACtD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,cAAc,CAAC;AACxD,gBAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;AACtC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;AAGQ,IAAA,6BAA6B,CAAC,IAAiB,EAAA;AACrD,QAAA,IAAI,CAAC,2BAA2B,EAAE,UAAU,EAAE;AAC9C,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC1F,QAAA,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,IAAI,EAAE;AAC7C,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;AACpC,SAAA,CAAC;IACJ;IAEQ,oBAAoB,GAAA;QAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACvC;QACF;AACA,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE;AACtC,YAAA,oBAAoB,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACjD;AACA,QAAA,IAAI,CAAC,oBAAoB,GAAG,qBAAqB,CAAC,MAAK;AACrD,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;YAChC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;YACtE,IAAI,CAAC,oBAAoB,EAAE;AAC7B,QAAA,CAAC,CAAC;IACJ;;AAGQ,IAAA,gBAAgB,CAAC,QAAqB,EAAA;AAC5C,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa;QACrC,IAAI,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,YAAA,OAAO,MAAM;QACf;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;AAC3B,QAAA,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,oBAAoB,CAAC,OAAoB,EAAA;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAc,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE,CAAC;QACtE,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,GAAG,YAAY;AAC1B,YAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;AACtC,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;YACjC;QACF;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AACxC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;IACnC;AAEQ,IAAA,mBAAmB,CAAC,IAAiB,EAAA;QAC3C,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAc,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,KAAK,CAAC,SAAS,GAAG,WAAW;AAC7B,YAAA,KAAK,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAClF;QAEA,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAc,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;YAC5C,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,KAAK,CAAC,SAAS,GAAG,WAAW;YAC7B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC;AAC3C,YAAA,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,SAAS,GAAG,OAAO;QAC1B;aAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACjC,YAAA,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAoB,CAAA,CAAA,EAAI,aAAa,CAAA,IAAA,CAAM,CAAC;YAC7E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAoB,CAAA,CAAA,EAAI,aAAa,CAAA,MAAA,CAAQ,CAAC;QACnF;aAAO;YACL,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAoB,CAAA,CAAA,EAAI,aAAa,CAAA,IAAA,CAAM,CAAC;YAC7E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAoB,CAAA,CAAA,EAAI,aAAa,CAAA,MAAA,CAAQ,CAAC;QACnF;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;AAEQ,IAAA,eAAe,CAAC,SAAwB,EAAA;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACpD,QAAA,MAAM,CAAC,IAAI,GAAG,QAAQ;QACtB,MAAM,CAAC,SAAS,GAAG,CAAA,EAAG,aAAa,IAAI,aAAa,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE;AACpE,QAAA,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,KAAK,IAAI,GAAG,WAAW,GAAG,aAAa,CAAC;QAEnF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QACjD,KAAK,CAAC,SAAS,GAAG,CAAA,EAAG,eAAe,IAAI,eAAe,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE;AACvE,QAAA,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AACzC,QAAA,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;AACzB,QAAA,OAAO,MAAM;IACf;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;QACjC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;AACrC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACzB;AACA,QAAA,OAAO,0BAA0B;IACnC;IAEQ,eAAe,CAAC,QAAqB,EAAE,SAAiB,EAAA;QAC9D,QAAQ,CAAC,SAAS,IAAI,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE;QAC/D,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,cAAc,EAAE;IACvB;AAEQ,IAAA,mBAAmB,CAAC,QAAqB,EAAA;AAC/C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;QACxB,IAAI,CAAC,IAAI,EAAE;YACT;QACF;AAEA,QAAA,IAAI,CAAC,qBAAqB,IAAI;QAE9B,MAAM,kBAAkB,GAAG,MAAK;AAC9B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC3B,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,cAAc,EAAE;AACvB,QAAA,CAAC;QACD,MAAM,kBAAkB,GAAG,MAAK;AAC9B,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,YAAY,EAAE;AACrB,QAAA,CAAC;AACD,QAAA,MAAM,WAAW,GAAG,CAAC,KAAiB,KAAI;YACxC,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,QAAQ,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM;YAClC,IAAI,CAAC,cAAc,EAAE;AACvB,QAAA,CAAC;AACD,QAAA,MAAM,iBAAiB,GAAG,CAAC,KAAmB,KAAI;AAChD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAc;AACnC,YAAA,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;gBAC/D;YACF;AACA,YAAA,IACE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC9B,gBAAA,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC;AAChC,gBAAA,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO;AAC7B,gBAAA,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,EAC/B;gBACA;YACF;AACA,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,YAAA,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;gBACjE;YACF;AACA,YAAA,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;gBAC/D;YACF;YACA,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC;AAChD,QAAA,CAAC;AAED,QAAA,MAAM,aAAa,GAAG,CAAC,MAAgC,EAAE,SAAiB,KAAkB;YAC1F,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAO,MAAM,SAAS;YACxB;YAEA,MAAM,iBAAiB,GAAG,MAAK;AAC7B,gBAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC;AAChD,YAAA,CAAC;AACD,YAAA,MAAM,gBAAgB,GAAG,CAAC,KAAmB,KAAI;gBAC/C,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC;gBAC3C,IAAI,CAAC,iBAAiB,EAAE;AACxB,gBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC3C,YAAA,CAAC;YACD,MAAM,cAAc,GAAG,MAAK;AAC1B,gBAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC;AAChD,YAAA,CAAC;AAED,YAAA,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,iBAAiB,CAAC;AAC1D,YAAA,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,CAAC;AACxD,YAAA,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,cAAc,CAAC;AACpD,YAAA,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,cAAc,CAAC;AAExD,YAAA,OAAO,MAAK;AACV,gBAAA,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,iBAAiB,CAAC;AAC7D,gBAAA,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,gBAAgB,CAAC;AAC3D,gBAAA,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,cAAc,CAAC;AACvD,gBAAA,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,cAAc,CAAC;AAC3D,gBAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC;AAChD,YAAA,CAAC;AACH,QAAA,CAAC;QAED,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAEtD,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC;AACzD,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC;AACzD,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC/D,QAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,iBAAiB,CAAC;AAEvD,QAAA,IAAI,CAAC,qBAAqB,GAAG,MAAK;AAChC,YAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,kBAAkB,CAAC;AAC5D,YAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,kBAAkB,CAAC;YAC5D,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC;AAC9C,YAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,iBAAiB,CAAC;YAC1D,WAAW,IAAI;YACf,aAAa,IAAI;AACnB,QAAA,CAAC;IACH;AAEQ,IAAA,sBAAsB,CAAC,QAAqB,EAAA;AAClD,QAAA,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;QACxB,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACzC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa;QACjC,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC;YACnC,IAAI,CAAC,MAAM,EAAE;QACf;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACpB;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;YACnB;QACF;AAEA,QAAA,gCAAgC,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;AAEtD,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;QACzC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,YAAY,IAAI;AAEvC,QAAA,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,KAAK,IAAI;QAC3D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;AAE7D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,QAAA,IAAI,mBAAmB,GAAG,KAAK,EAAE,YAAY,IAAI,CAAC;AAClD,QAAA,IAAI,mBAAmB,IAAI,CAAC,EAAE;YAC5B,mBAAmB,GAAG,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,YAAY;QAClG;AAEA,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;AACzC,QAAA,MAAM,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,CAAC;AACpD,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,YAAY;QAC3B,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;AACvB,YAAA,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE;YACpB;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,mBAAmB,GAAG,YAAY,IAAI,mBAAmB,CAAC;AAC7G,QAAA,MAAM,SAAS,GAAG,YAAY,GAAG,YAAY;AAC7C,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,GAAG,WAAW,CAAC;QAErE,IAAI,CAAC,WAAW,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE;QAC7D,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,WAAW,IAAI;QACvC,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AACvC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW;AAC/B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;YACrB;QACF;AAEA,QAAA,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM;AAC5C,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;AACnC,QAAA,MAAM,WAAW,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,IAAI,cAAc,GAAG,CAAC;QAChF,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,WAAW,IAAI;IACtC;;IAGQ,wBAAwB,CAAC,KAAmB,EAAE,QAAqB,EAAA;AACzE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW;AAC/B,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,EAAE;YAC3E;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI;AAClC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,EAAE;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AAC/F,QAAA,QAAQ,CAAC,SAAS,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS;QAC1E,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,cAAc,EAAE;IACvB;AAEQ,IAAA,kBAAkB,CAAC,KAAmB,EAAA;QAC5C,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AACvC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;QAC1B,IAAI,CAAC,KAAK,EAAE;YACV;QACF;AAEA,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;AAExC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO;AAC5B,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW;AAC/B,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;QACzC,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,OAAO,CAAC,YAAY,GAAG,YAAY;QAC1E,MAAM,cAAc,GAAG,MAAM,EAAE,cAAc,IAAI,YAAY,GAAG,KAAK,CAAC,YAAY;AAElF,QAAA,MAAM,aAAa,GAAG,CAAC,SAAuB,KAAI;YAChD,IAAI,cAAc,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE;gBACzC;YACF;AACA,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,GAAG,MAAM;YACzC,MAAM,WAAW,GAAG,CAAC,MAAM,GAAG,cAAc,IAAI,SAAS;AACzD,YAAA,OAAO,CAAC,SAAS,GAAG,cAAc,GAAG,WAAW;AAClD,QAAA,CAAC;AAED,QAAA,MAAM,WAAW,GAAG,CAAC,OAAqB,KAAI;AAC5C,YAAA,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC;AAC9C,YAAA,KAAK,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC;AACvD,YAAA,KAAK,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC;AACnD,YAAA,KAAK,CAAC,mBAAmB,CAAC,eAAe,EAAE,WAAW,CAAC;AACvD,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AACjC,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,SAAS;AACzC,QAAA,KAAK,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC;AACpD,QAAA,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC;AAChD,QAAA,KAAK,CAAC,gBAAgB,CAAC,eAAe,EAAE,WAAW,CAAC;IACtD;IAEQ,aAAa,GAAA;QACnB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;QACpD,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;IAC3C;IAEQ,cAAc,GAAA;QACpB,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,cAAc,EAAE;YACrB;QACF;QACA,IAAI,CAAC,YAAY,EAAE;IACrB;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB;QACF;QACA,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;QACvD,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;AAC5C,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IACjC;AAEQ,IAAA,mBAAmB,CAAC,OAAgB,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC;IACvD;AAEQ,IAAA,eAAe,CAAC,OAAgB,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC;QACtE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC;IAC7D;IAEQ,wBAAwB,CAAC,OAAe,EAAE,OAAe,EAAA;AAC/D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;QAC1B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,KAAK;QACd;AACA,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,EAAE;QAC1C,OAAO,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,GAAG,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM;IACvG;IAEQ,iBAAiB,GAAA;QACvB,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAC1B,MAAM,OAAO,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,OAAO,CAAC;AAC3D,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACvC,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,yBAAyB,GAAG,OAAO;QACxC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,eAAe,EAAE,OAAO,CAAC;IAC1D;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,yBAAyB,CAAC;YAC9E,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,yBAAyB,CAAC;AAClF,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;QACvC;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;IAC7B;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;YACpC;QACF;AACA,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IACjC;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,cAAc,EAAE;YACrB;QACF;QACA,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAK;YAC/B,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB,CAAC,EAAE,KAAK,CAAC;IACX;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AAC3B,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;IACF;8GAxkBW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,0BAA0B;AAClC,qBAAA;AACF,iBAAA;;;ACrSD;;AAEG;;"}
@@ -1,11 +1,38 @@
1
1
  # @acorex/cdk/overlay-scrollbar
2
2
 
3
- Thin overlay scrollbars: hidden while idle, visible while scrolling. **Behavior** is configured with directive inputs; **visuals** use CSS custom properties (`--ax-comp-overlay-scrollbar-*`) on the scroll host.
3
+ Thin overlay scrollbars: hidden while idle, visible while scrolling. **Behavior** is configured with directive inputs or app-wide via `provideOverlayScrollbar`; **visuals** use CSS custom properties (`--ax-comp-overlay-scrollbar-*`) on the scroll host or in `designTokens`.
4
4
 
5
5
  ```typescript
6
- import { AXOverlayScrollbarDirective } from '@acorex/cdk/overlay-scrollbar';
6
+ import { AXOverlayScrollbarDirective, provideOverlayScrollbar } from '@acorex/cdk/overlay-scrollbar';
7
7
  ```
8
8
 
9
+ ## Application config
10
+
11
+ ```typescript
12
+ import { ApplicationConfig } from '@angular/core';
13
+ import { provideOverlayScrollbar } from '@acorex/cdk/overlay-scrollbar';
14
+
15
+ export const appConfig: ApplicationConfig = {
16
+ providers: [
17
+ provideOverlayScrollbar({
18
+ hideDelay: 1200,
19
+ navigationButtons: true,
20
+ navScrollStep: 48,
21
+ designTokens: {
22
+ size: '8px',
23
+ thumbRadius: '6px',
24
+ trackRadius: '4px',
25
+ thumbColor: 'var(--ax-sys-scroller-thumb-color)',
26
+ trackColor: 'transparent',
27
+ fadeDuration: '0.35s',
28
+ },
29
+ }),
30
+ ],
31
+ };
32
+ ```
33
+
34
+ Per-element inputs override these defaults when set on `axOverlayScrollbar`.
35
+
9
36
  ```html
10
37
  <div
11
38
  class="h-64 overflow-y-auto my-scroll-panel"
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@acorex/cdk",
3
- "version": "22.4.17",
3
+ "version": "22.4.18",
4
4
  "peerDependencies": {
5
- "@acorex/core": "22.4.17",
5
+ "@acorex/core": "22.4.18",
6
6
  "@tiptap/core": ">=3.31.4",
7
7
  "@tiptap/extension-color": ">=3.31.4",
8
8
  "@tiptap/extension-highlight": ">=3.31.4",
@@ -1,21 +1,71 @@
1
1
  import * as _angular_core from '@angular/core';
2
+ import { InjectionToken, EnvironmentProviders } from '@angular/core';
2
3
 
3
- /** CSS custom properties for overlay scrollbar styling (set on the scroll host or in CSS). */
4
- declare const AX_OVERLAY_SCROLLBAR_CSS_VARS: {
5
- readonly size: "--ax-comp-overlay-scrollbar-size";
6
- readonly thumbRadius: "--ax-comp-overlay-scrollbar-thumb-radius";
7
- readonly trackRadius: "--ax-comp-overlay-scrollbar-track-radius";
8
- readonly trackColor: "--ax-comp-overlay-scrollbar-track-color";
9
- readonly thumbColor: "--ax-comp-overlay-scrollbar-thumb-color";
10
- readonly thumbActiveColor: "--ax-comp-overlay-scrollbar-thumb-active-color";
11
- readonly thumbHoverColor: "--ax-comp-overlay-scrollbar-thumb-hover-color";
12
- readonly trackActiveColor: "--ax-comp-overlay-scrollbar-track-active-color";
13
- readonly thumbBorderWidth: "--ax-comp-overlay-scrollbar-thumb-border-width";
14
- readonly thumbBorderColor: "--ax-comp-overlay-scrollbar-thumb-border-color";
15
- readonly trackBorderWidth: "--ax-comp-overlay-scrollbar-track-border-width";
16
- readonly trackBorderColor: "--ax-comp-overlay-scrollbar-track-border-color";
17
- readonly fadeDuration: "--ax-comp-overlay-scrollbar-fade-duration";
4
+ /** Default delay (ms) before the overlay scrollbar fades out after scroll. */
5
+ declare const AX_OVERLAY_SCROLLBAR_DEFAULT_HIDE_DELAY_MS = 800;
6
+ /** Default pixels scrolled per navigation arrow click. */
7
+ declare const AX_OVERLAY_SCROLLBAR_DEFAULT_NAV_SCROLL_STEP_PX = 40;
8
+ /**
9
+ * Visual tokens for overlay scrollbars (`--ax-comp-overlay-scrollbar-*`).
10
+ * Values are applied to `:root` when using {@link provideOverlayScrollbar}, and inherited by scroll hosts.
11
+ */
12
+ interface AXOverlayScrollbarDesignTokens {
13
+ size?: string;
14
+ thumbRadius?: string;
15
+ trackRadius?: string;
16
+ trackColor?: string;
17
+ thumbColor?: string;
18
+ thumbActiveColor?: string;
19
+ thumbHoverColor?: string;
20
+ trackActiveColor?: string;
21
+ thumbBorderWidth?: string;
22
+ thumbBorderColor?: string;
23
+ trackBorderWidth?: string;
24
+ trackBorderColor?: string;
25
+ fadeDuration?: string;
26
+ }
27
+ /** Application-wide defaults for {@link AXOverlayScrollbarDirective}. */
28
+ interface AXOverlayScrollbarConfig {
29
+ /** Milliseconds before the scrollbar rail fades out after scrolling stops. */
30
+ hideDelay: number;
31
+ /** When true, shows up/down arrow buttons on the scrollbar rail. */
32
+ navigationButtons: boolean;
33
+ /** Pixels to scroll per navigation arrow click. */
34
+ navScrollStep: number;
35
+ /** Optional global design tokens (CSS custom properties). */
36
+ designTokens?: AXOverlayScrollbarDesignTokens;
37
+ }
38
+ declare const AXOverlayScrollbarDefaultConfig: AXOverlayScrollbarConfig;
39
+ type AXPartialOverlayScrollbarConfig = Partial<AXOverlayScrollbarConfig> & {
40
+ designTokens?: Partial<AXOverlayScrollbarDesignTokens>;
18
41
  };
42
+ declare const AX_OVERLAY_SCROLLBAR_CONFIG: InjectionToken<AXOverlayScrollbarConfig>;
43
+ /** Merges partial config with {@link AXOverlayScrollbarDefaultConfig}. */
44
+ declare function overlayScrollbarConfig(config?: AXPartialOverlayScrollbarConfig): AXOverlayScrollbarConfig;
45
+ /** Sets overlay scrollbar CSS variables on the given element. */
46
+ declare function applyOverlayScrollbarDesignTokens(element: HTMLElement, tokens?: AXOverlayScrollbarDesignTokens): void;
47
+ /**
48
+ * Registers global overlay scrollbar defaults for the application.
49
+ *
50
+ * @example
51
+ * ```ts
52
+ * export const appConfig: ApplicationConfig = {
53
+ * providers: [
54
+ * provideOverlayScrollbar({
55
+ * hideDelay: 1200,
56
+ * navigationButtons: true,
57
+ * navScrollStep: 48,
58
+ * designTokens: {
59
+ * size: '8px',
60
+ * thumbColor: 'var(--ax-sys-scroller-thumb-color)',
61
+ * },
62
+ * }),
63
+ * ],
64
+ * };
65
+ * ```
66
+ */
67
+ declare function provideOverlayScrollbar(config?: AXPartialOverlayScrollbarConfig): EnvironmentProviders;
68
+
19
69
  declare function clampOverlayScrollbarWidth(px: number): number;
20
70
  /**
21
71
  * Custom overlay scrollbar: native scrollbars are hidden; a positioned thumb reflects scroll position.
@@ -26,6 +76,7 @@ declare class AXOverlayScrollbarDirective {
26
76
  private readonly destroyRef;
27
77
  private readonly platformId;
28
78
  private readonly document;
79
+ private readonly appConfig;
29
80
  private rootEl;
30
81
  private railEl;
31
82
  private trackEl;
@@ -83,4 +134,22 @@ declare class AXOverlayScrollbarDirective {
83
134
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXOverlayScrollbarDirective, "[axOverlayScrollbar]", ["axOverlayScrollbar"], { "hideDelay": { "alias": "hideDelay"; "required": false; "isSignal": true; }; "navigationButtons": { "alias": "navigationButtons"; "required": false; "isSignal": true; }; "navScrollStep": { "alias": "navScrollStep"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
84
135
  }
85
136
 
86
- export { AXOverlayScrollbarDirective, AX_OVERLAY_SCROLLBAR_CSS_VARS, clampOverlayScrollbarWidth };
137
+ /** CSS custom properties for overlay scrollbar styling (set on the scroll host or in CSS). */
138
+ declare const AX_OVERLAY_SCROLLBAR_CSS_VARS: {
139
+ readonly size: "--ax-comp-overlay-scrollbar-size";
140
+ readonly thumbRadius: "--ax-comp-overlay-scrollbar-thumb-radius";
141
+ readonly trackRadius: "--ax-comp-overlay-scrollbar-track-radius";
142
+ readonly trackColor: "--ax-comp-overlay-scrollbar-track-color";
143
+ readonly thumbColor: "--ax-comp-overlay-scrollbar-thumb-color";
144
+ readonly thumbActiveColor: "--ax-comp-overlay-scrollbar-thumb-active-color";
145
+ readonly thumbHoverColor: "--ax-comp-overlay-scrollbar-thumb-hover-color";
146
+ readonly trackActiveColor: "--ax-comp-overlay-scrollbar-track-active-color";
147
+ readonly thumbBorderWidth: "--ax-comp-overlay-scrollbar-thumb-border-width";
148
+ readonly thumbBorderColor: "--ax-comp-overlay-scrollbar-thumb-border-color";
149
+ readonly trackBorderWidth: "--ax-comp-overlay-scrollbar-track-border-width";
150
+ readonly trackBorderColor: "--ax-comp-overlay-scrollbar-track-border-color";
151
+ readonly fadeDuration: "--ax-comp-overlay-scrollbar-fade-duration";
152
+ };
153
+
154
+ export { AXOverlayScrollbarDefaultConfig, AXOverlayScrollbarDirective, AX_OVERLAY_SCROLLBAR_CONFIG, AX_OVERLAY_SCROLLBAR_CSS_VARS, AX_OVERLAY_SCROLLBAR_DEFAULT_HIDE_DELAY_MS, AX_OVERLAY_SCROLLBAR_DEFAULT_NAV_SCROLL_STEP_PX, applyOverlayScrollbarDesignTokens, clampOverlayScrollbarWidth, overlayScrollbarConfig, provideOverlayScrollbar };
155
+ export type { AXOverlayScrollbarConfig, AXOverlayScrollbarDesignTokens, AXPartialOverlayScrollbarConfig };