@acorex/cdk 22.1.8 → 22.2.0-next.1
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.
- package/auto-follow-scroll/README.md +9 -0
- package/fesm2022/acorex-cdk-accordion.mjs +19 -19
- package/fesm2022/acorex-cdk-accordion.mjs.map +1 -1
- package/fesm2022/acorex-cdk-auto-follow-scroll.mjs +187 -0
- package/fesm2022/acorex-cdk-auto-follow-scroll.mjs.map +1 -0
- package/fesm2022/acorex-cdk-carousel.mjs +25 -7
- package/fesm2022/acorex-cdk-carousel.mjs.map +1 -1
- package/fesm2022/acorex-cdk-clipboard.mjs +6 -6
- package/fesm2022/acorex-cdk-clipboard.mjs.map +1 -1
- package/fesm2022/acorex-cdk-common.mjs +223 -108
- package/fesm2022/acorex-cdk-common.mjs.map +1 -1
- package/fesm2022/acorex-cdk-dom.mjs +3 -3
- package/fesm2022/acorex-cdk-dom.mjs.map +1 -1
- package/fesm2022/acorex-cdk-drag-drop.mjs +158 -68
- package/fesm2022/acorex-cdk-drag-drop.mjs.map +1 -1
- package/fesm2022/acorex-cdk-drawer.mjs +15 -13
- package/fesm2022/acorex-cdk-drawer.mjs.map +1 -1
- package/fesm2022/acorex-cdk-focus-trap.mjs +3 -3
- package/fesm2022/acorex-cdk-focus-trap.mjs.map +1 -1
- package/fesm2022/acorex-cdk-full-screen.mjs +26 -147
- package/fesm2022/acorex-cdk-full-screen.mjs.map +1 -1
- package/fesm2022/acorex-cdk-gesture.mjs +30 -4
- package/fesm2022/acorex-cdk-gesture.mjs.map +1 -1
- package/fesm2022/acorex-cdk-highlight.mjs +8 -78
- package/fesm2022/acorex-cdk-highlight.mjs.map +1 -1
- package/fesm2022/acorex-cdk-horizontal-scroll.mjs +37 -14
- package/fesm2022/acorex-cdk-horizontal-scroll.mjs.map +1 -1
- package/fesm2022/acorex-cdk-input-mask.mjs +3 -3
- package/fesm2022/acorex-cdk-input-mask.mjs.map +1 -1
- package/fesm2022/acorex-cdk-list-navigation.mjs +21 -10
- package/fesm2022/acorex-cdk-list-navigation.mjs.map +1 -1
- package/fesm2022/acorex-cdk-outline.mjs +277 -74
- package/fesm2022/acorex-cdk-outline.mjs.map +1 -1
- package/fesm2022/acorex-cdk-overlay-scrollbar.mjs +903 -0
- package/fesm2022/acorex-cdk-overlay-scrollbar.mjs.map +1 -0
- package/fesm2022/acorex-cdk-overlay.mjs +259 -25
- package/fesm2022/acorex-cdk-overlay.mjs.map +1 -1
- package/fesm2022/acorex-cdk-pan-view.mjs +3 -3
- package/fesm2022/acorex-cdk-pan-view.mjs.map +1 -1
- package/fesm2022/acorex-cdk-qrcode.mjs.map +1 -1
- package/fesm2022/acorex-cdk-resizable.mjs +483 -200
- package/fesm2022/acorex-cdk-resizable.mjs.map +1 -1
- package/fesm2022/acorex-cdk-selection.mjs +10 -10
- package/fesm2022/acorex-cdk-selection.mjs.map +1 -1
- package/fesm2022/acorex-cdk-shimmer.mjs +220 -0
- package/fesm2022/acorex-cdk-shimmer.mjs.map +1 -0
- package/fesm2022/acorex-cdk-sliding-item.mjs +3 -3
- package/fesm2022/acorex-cdk-sliding-item.mjs.map +1 -1
- package/fesm2022/acorex-cdk-sticky.mjs +3 -3
- package/fesm2022/acorex-cdk-sticky.mjs.map +1 -1
- package/fesm2022/acorex-cdk-text-editor.mjs +942 -0
- package/fesm2022/acorex-cdk-text-editor.mjs.map +1 -0
- package/fesm2022/acorex-cdk-uploader.mjs +9 -9
- package/fesm2022/acorex-cdk-uploader.mjs.map +1 -1
- package/fesm2022/acorex-cdk-viewport-guard.mjs +616 -0
- package/fesm2022/acorex-cdk-viewport-guard.mjs.map +1 -0
- package/fesm2022/acorex-cdk-virtual-scroll.mjs +10 -10
- package/fesm2022/acorex-cdk-virtual-scroll.mjs.map +1 -1
- package/fesm2022/acorex-cdk-wysiwyg.mjs +694 -37
- package/fesm2022/acorex-cdk-wysiwyg.mjs.map +1 -1
- package/fesm2022/acorex-cdk-z-index.mjs +3 -3
- package/fesm2022/acorex-cdk-z-index.mjs.map +1 -1
- package/fesm2022/acorex-cdk.mjs.map +1 -1
- package/overlay-scrollbar/README.md +54 -0
- package/package.json +33 -7
- package/shimmer/README.md +11 -0
- package/text-editor/README.md +5 -0
- package/types/acorex-cdk-auto-follow-scroll.d.ts +72 -0
- package/types/acorex-cdk-carousel.d.ts +2 -0
- package/types/acorex-cdk-clipboard.d.ts +1 -1
- package/types/acorex-cdk-common.d.ts +46 -19
- package/types/acorex-cdk-drag-drop.d.ts +43 -17
- package/types/acorex-cdk-full-screen.d.ts +18 -43
- package/types/acorex-cdk-gesture.d.ts +11 -1
- package/types/acorex-cdk-highlight.d.ts +1 -28
- package/types/acorex-cdk-horizontal-scroll.d.ts +3 -0
- package/types/acorex-cdk-list-navigation.d.ts +5 -0
- package/types/acorex-cdk-outline.d.ts +20 -0
- package/types/acorex-cdk-overlay-scrollbar.d.ts +155 -0
- package/types/acorex-cdk-overlay.d.ts +60 -4
- package/types/acorex-cdk-resizable.d.ts +80 -38
- package/types/acorex-cdk-shimmer.d.ts +68 -0
- package/types/acorex-cdk-text-editor.d.ts +156 -0
- package/types/acorex-cdk-uploader.d.ts +1 -1
- package/types/acorex-cdk-viewport-guard.d.ts +99 -0
- package/types/acorex-cdk-wysiwyg.d.ts +121 -14
- package/wysiwyg/README.md +3 -1
- package/fesm2022/acorex-cdk-double-click.mjs +0 -178
- package/fesm2022/acorex-cdk-double-click.mjs.map +0 -1
- package/types/acorex-cdk-double-click.d.ts +0 -66
|
@@ -0,0 +1 @@
|
|
|
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":"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"}
|
|
@@ -5,6 +5,161 @@ import { AXZIndexService } from '@acorex/core/z-index';
|
|
|
5
5
|
import { DOCUMENT } from '@angular/common';
|
|
6
6
|
import * as i0 from '@angular/core';
|
|
7
7
|
import { ElementRef, inject, TemplateRef, ComponentRef, Injectable } from '@angular/core';
|
|
8
|
+
import { Router, NavigationStart } from '@angular/router';
|
|
9
|
+
import { filter } from 'rxjs/operators';
|
|
10
|
+
|
|
11
|
+
const AX_OVERLAY_DEFAULT_ENTER_ANIMATION = ['animate-animated', 'animate-fadeIn', 'animate-fast'];
|
|
12
|
+
const AX_OVERLAY_DEFAULT_LEAVE_ANIMATION = ['animate-animated', 'animate-fadeOut', 'animate-2xfaster'];
|
|
13
|
+
const OVERLAY_ANIMATION_DURATION_CLASSES = [
|
|
14
|
+
'animate-2xfaster',
|
|
15
|
+
'animate-faster',
|
|
16
|
+
'animate-fast',
|
|
17
|
+
'animate-slow',
|
|
18
|
+
'animate-slower',
|
|
19
|
+
'animate-2xslower',
|
|
20
|
+
];
|
|
21
|
+
const OVERLAY_ANIMATION_NAME_CLASSES = ['animate-fadeIn', 'animate-fadeOut'];
|
|
22
|
+
/**
|
|
23
|
+
* Resolves overlay animation classes.
|
|
24
|
+
* - omitted: no animation (opt-in at the overlay layer)
|
|
25
|
+
* - `true`: default fade in/out
|
|
26
|
+
* - `false` or `[]`: no animation
|
|
27
|
+
* - `string[]`: custom enter classes only
|
|
28
|
+
* - `{ enter, leave }`: omitted keys fall back to the default fade classes
|
|
29
|
+
*/
|
|
30
|
+
function resolveOverlayAnimation(animation) {
|
|
31
|
+
if (animation === undefined || animation === false) {
|
|
32
|
+
return { enter: [], leave: [] };
|
|
33
|
+
}
|
|
34
|
+
if (animation === true) {
|
|
35
|
+
return {
|
|
36
|
+
enter: [...AX_OVERLAY_DEFAULT_ENTER_ANIMATION],
|
|
37
|
+
leave: [...AX_OVERLAY_DEFAULT_LEAVE_ANIMATION],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if (Array.isArray(animation)) {
|
|
41
|
+
if (animation.length === 0) {
|
|
42
|
+
return { enter: [], leave: [] };
|
|
43
|
+
}
|
|
44
|
+
return { enter: [...animation], leave: [] };
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
enter: animation.enter === undefined ? [...AX_OVERLAY_DEFAULT_ENTER_ANIMATION] : [...animation.enter],
|
|
48
|
+
leave: animation.leave === undefined ? [...AX_OVERLAY_DEFAULT_LEAVE_ANIMATION] : [...animation.leave],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** Prefers the content/pane so transforms are not applied to the full-screen container. */
|
|
52
|
+
function getOverlayAnimationTarget(container) {
|
|
53
|
+
const content = container.querySelector(':scope > .ax-overlay-content');
|
|
54
|
+
if (content)
|
|
55
|
+
return content;
|
|
56
|
+
const pane = container.querySelector(':scope > .ax-overlay-pane');
|
|
57
|
+
if (pane)
|
|
58
|
+
return pane;
|
|
59
|
+
return container;
|
|
60
|
+
}
|
|
61
|
+
function applyOverlayAnimationClasses(element, classes) {
|
|
62
|
+
for (const cls of classes) {
|
|
63
|
+
if (cls) {
|
|
64
|
+
element.classList.add(cls);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function removeOverlayAnimationClasses(element, classes) {
|
|
69
|
+
for (const cls of classes) {
|
|
70
|
+
if (cls) {
|
|
71
|
+
element.classList.remove(cls);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function prefersReducedMotion(documentRef) {
|
|
76
|
+
return !!documentRef.defaultView?.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
77
|
+
}
|
|
78
|
+
function parseCssTimeList(value) {
|
|
79
|
+
return value.split(',').map((part) => {
|
|
80
|
+
const trimmed = part.trim();
|
|
81
|
+
if (trimmed.endsWith('ms')) {
|
|
82
|
+
return Number.parseFloat(trimmed) || 0;
|
|
83
|
+
}
|
|
84
|
+
if (trimmed.endsWith('s')) {
|
|
85
|
+
return (Number.parseFloat(trimmed) || 0) * 1000;
|
|
86
|
+
}
|
|
87
|
+
return 0;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/** Maps theme duration utility classes to milliseconds (see tailwind-base). */
|
|
91
|
+
function getAnimationDurationFromClasses(classes) {
|
|
92
|
+
if (classes.includes('animate-2xfaster'))
|
|
93
|
+
return 250;
|
|
94
|
+
if (classes.includes('animate-faster'))
|
|
95
|
+
return 500;
|
|
96
|
+
if (classes.includes('animate-fast'))
|
|
97
|
+
return 800;
|
|
98
|
+
if (classes.includes('animate-slow'))
|
|
99
|
+
return 2000;
|
|
100
|
+
if (classes.includes('animate-slower'))
|
|
101
|
+
return 3000;
|
|
102
|
+
if (classes.includes('animate-2xslower'))
|
|
103
|
+
return 5000;
|
|
104
|
+
return 500;
|
|
105
|
+
}
|
|
106
|
+
function getOverlayAnimationTimeout(element, documentRef, fallbackMs) {
|
|
107
|
+
if (fallbackMs !== undefined && fallbackMs > 0) {
|
|
108
|
+
return fallbackMs + 32;
|
|
109
|
+
}
|
|
110
|
+
const style = documentRef.defaultView?.getComputedStyle(element);
|
|
111
|
+
if (!style)
|
|
112
|
+
return 0;
|
|
113
|
+
const durations = parseCssTimeList(style.animationDuration);
|
|
114
|
+
const delays = parseCssTimeList(style.animationDelay);
|
|
115
|
+
const max = durations.reduce((longest, duration, index) => {
|
|
116
|
+
return Math.max(longest, duration + (delays[index] ?? delays[0] ?? 0));
|
|
117
|
+
}, 0);
|
|
118
|
+
return max > 0 ? max + 32 : 0;
|
|
119
|
+
}
|
|
120
|
+
function playOverlayLeaveAnimation(element, enter, leave, documentRef) {
|
|
121
|
+
removeOverlayAnimationClasses(element, [
|
|
122
|
+
...enter,
|
|
123
|
+
...OVERLAY_ANIMATION_NAME_CLASSES,
|
|
124
|
+
...OVERLAY_ANIMATION_DURATION_CLASSES,
|
|
125
|
+
]);
|
|
126
|
+
void element.offsetWidth;
|
|
127
|
+
const leaveDurationMs = getAnimationDurationFromClasses(leave);
|
|
128
|
+
applyOverlayAnimationClasses(element, leave);
|
|
129
|
+
element.style.animationDuration = `${leaveDurationMs}ms`;
|
|
130
|
+
return waitForOverlayAnimationEnd(element, documentRef, {
|
|
131
|
+
fallbackMs: leaveDurationMs,
|
|
132
|
+
animationName: 'fadeOut',
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
function waitForOverlayAnimationEnd(element, documentRef, options) {
|
|
136
|
+
return new Promise((resolve) => {
|
|
137
|
+
const timeoutMs = getOverlayAnimationTimeout(element, documentRef, options?.fallbackMs);
|
|
138
|
+
if (timeoutMs <= 0) {
|
|
139
|
+
resolve();
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
let settled = false;
|
|
143
|
+
const finish = () => {
|
|
144
|
+
if (settled)
|
|
145
|
+
return;
|
|
146
|
+
settled = true;
|
|
147
|
+
element.removeEventListener('animationend', onEnd);
|
|
148
|
+
element.style.animationDuration = '';
|
|
149
|
+
resolve();
|
|
150
|
+
};
|
|
151
|
+
const onEnd = (event) => {
|
|
152
|
+
if (event.target !== element)
|
|
153
|
+
return;
|
|
154
|
+
if (options?.animationName && !event.animationName.toLowerCase().includes(options.animationName.toLowerCase())) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
finish();
|
|
158
|
+
};
|
|
159
|
+
element.addEventListener('animationend', onEnd);
|
|
160
|
+
documentRef.defaultView?.setTimeout(finish, timeoutMs);
|
|
161
|
+
});
|
|
162
|
+
}
|
|
8
163
|
|
|
9
164
|
const APPEARANCE_CLASSES = [
|
|
10
165
|
'ax-appearance-flat',
|
|
@@ -185,6 +340,26 @@ function clampToViewport(coords, overlayRect, viewportWidth, viewportHeight, mar
|
|
|
185
340
|
const clampedTop = Math.max(margin, Math.min(coords.top, viewportHeight - overlayRect.height - margin));
|
|
186
341
|
return { top: clampedTop, left: clampedLeft };
|
|
187
342
|
}
|
|
343
|
+
/**
|
|
344
|
+
* Free vertical space on the anchor side used by a connected position.
|
|
345
|
+
*/
|
|
346
|
+
function verticalFreeSpaceForPosition(anchorRect, position, viewportHeight) {
|
|
347
|
+
if (position.originY === 'bottom' && position.overlayY === 'top') {
|
|
348
|
+
return viewportHeight - anchorRect.bottom;
|
|
349
|
+
}
|
|
350
|
+
if (position.originY === 'top' && position.overlayY === 'bottom') {
|
|
351
|
+
return anchorRect.top;
|
|
352
|
+
}
|
|
353
|
+
return viewportHeight;
|
|
354
|
+
}
|
|
355
|
+
function isVerticalAnchorPlacement(position) {
|
|
356
|
+
return ((position.originY === 'bottom' && position.overlayY === 'top') ||
|
|
357
|
+
(position.originY === 'top' && position.overlayY === 'bottom'));
|
|
358
|
+
}
|
|
359
|
+
function clampHorizontalToViewport(coords, overlayRect, viewportWidth, margin = 4) {
|
|
360
|
+
const clampedLeft = Math.max(margin, Math.min(coords.left, viewportWidth - overlayRect.width - margin));
|
|
361
|
+
return { top: coords.top, left: clampedLeft };
|
|
362
|
+
}
|
|
188
363
|
/**
|
|
189
364
|
* Finds the best position for an overlay that fits in the viewport.
|
|
190
365
|
*/
|
|
@@ -195,10 +370,21 @@ function findBestPosition(anchorRect, overlayRect, positions, viewportWidth, vie
|
|
|
195
370
|
return { position, coords };
|
|
196
371
|
}
|
|
197
372
|
}
|
|
198
|
-
// Fallback to
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
373
|
+
// Fallback: anchor to the side with the most vertical room; do not slide over the anchor.
|
|
374
|
+
let bestPosition = positions[0];
|
|
375
|
+
let bestSpace = verticalFreeSpaceForPosition(anchorRect, bestPosition, viewportHeight);
|
|
376
|
+
for (let i = 1; i < positions.length; i++) {
|
|
377
|
+
const space = verticalFreeSpaceForPosition(anchorRect, positions[i], viewportHeight);
|
|
378
|
+
if (space > bestSpace) {
|
|
379
|
+
bestSpace = space;
|
|
380
|
+
bestPosition = positions[i];
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
const fallbackCoords = calculateAnchorPosition(anchorRect, overlayRect, bestPosition);
|
|
384
|
+
const clampedCoords = isVerticalAnchorPlacement(bestPosition)
|
|
385
|
+
? clampHorizontalToViewport(fallbackCoords, overlayRect, viewportWidth)
|
|
386
|
+
: clampToViewport(fallbackCoords, overlayRect, viewportWidth, viewportHeight);
|
|
387
|
+
return { position: bestPosition, coords: clampedCoords };
|
|
202
388
|
}
|
|
203
389
|
|
|
204
390
|
class AXOverlayService {
|
|
@@ -207,6 +393,7 @@ class AXOverlayService {
|
|
|
207
393
|
this.document = inject(DOCUMENT);
|
|
208
394
|
this.zIndexService = inject(AXZIndexService);
|
|
209
395
|
this._platform = inject(AXPlatform);
|
|
396
|
+
this.router = inject(Router, { optional: true });
|
|
210
397
|
}
|
|
211
398
|
/**
|
|
212
399
|
* Creates an overlay with optional anchor-based positioning.
|
|
@@ -219,6 +406,7 @@ class AXOverlayService {
|
|
|
219
406
|
let overlayContainer = null;
|
|
220
407
|
let backdropElement = null;
|
|
221
408
|
let isDisposed = false;
|
|
409
|
+
let navigationSubscription = null;
|
|
222
410
|
// Acquire a z-index token for this overlay
|
|
223
411
|
let zToken = this.zIndexService.acquire(options?.zIndexBase);
|
|
224
412
|
if (content instanceof TemplateRef) {
|
|
@@ -234,9 +422,11 @@ class AXOverlayService {
|
|
|
234
422
|
}
|
|
235
423
|
// Get the host element
|
|
236
424
|
const hostElement = this.getHostElement(instance);
|
|
237
|
-
// Create backdrop if enabled
|
|
238
|
-
|
|
239
|
-
|
|
425
|
+
// Create backdrop if enabled. Mobile action sheets also get one: their dimming
|
|
426
|
+
// used to be a box-shadow spread, which paints the scrim but does not hit-test,
|
|
427
|
+
// so controls behind the sheet stayed clickable.
|
|
428
|
+
if (options?.backdrop?.enabled || this.needsActionSheetBackdrop(options)) {
|
|
429
|
+
backdropElement = this.createBackdrop(this.withActionSheetBackdrop(options), zToken.zIndex);
|
|
240
430
|
}
|
|
241
431
|
// If anchor options are provided, set up positioned overlay (for tooltips, popovers)
|
|
242
432
|
if (options?.anchorOptions?.anchor) {
|
|
@@ -256,28 +446,34 @@ class AXOverlayService {
|
|
|
256
446
|
this.positionOverlay(overlayContainer, options);
|
|
257
447
|
}
|
|
258
448
|
};
|
|
449
|
+
const animation = resolveOverlayAnimation(options?.animation);
|
|
450
|
+
const reduceMotion = prefersReducedMotion(this.document);
|
|
259
451
|
const dispose = () => {
|
|
260
452
|
if (isDisposed)
|
|
261
453
|
return;
|
|
262
454
|
isDisposed = true;
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
455
|
+
navigationSubscription?.unsubscribe();
|
|
456
|
+
navigationSubscription = null;
|
|
457
|
+
const finish = () => {
|
|
458
|
+
backdropElement?.remove();
|
|
459
|
+
overlayContainer?.remove();
|
|
460
|
+
instance.destroy();
|
|
461
|
+
this.zIndexService.release(zToken);
|
|
462
|
+
zToken = null;
|
|
463
|
+
options?.onDispose?.();
|
|
464
|
+
};
|
|
465
|
+
const animationTarget = overlayContainer ? getOverlayAnimationTarget(overlayContainer) : null;
|
|
466
|
+
if (!animationTarget || !animation.leave.length || reduceMotion) {
|
|
467
|
+
finish();
|
|
468
|
+
return;
|
|
266
469
|
}
|
|
267
470
|
if (overlayContainer) {
|
|
268
|
-
overlayContainer.
|
|
471
|
+
overlayContainer.style.pointerEvents = 'none';
|
|
269
472
|
}
|
|
270
|
-
if (
|
|
271
|
-
|
|
272
|
-
}
|
|
273
|
-
else {
|
|
274
|
-
instance.destroy();
|
|
473
|
+
if (backdropElement) {
|
|
474
|
+
backdropElement.style.pointerEvents = 'none';
|
|
275
475
|
}
|
|
276
|
-
|
|
277
|
-
this.zIndexService.release(zToken);
|
|
278
|
-
zToken = null;
|
|
279
|
-
// Notify callback
|
|
280
|
-
options?.onDispose?.();
|
|
476
|
+
void playOverlayLeaveAnimation(animationTarget, animation.enter, animation.leave, this.document).finally(finish);
|
|
281
477
|
};
|
|
282
478
|
const bringToFront = () => {
|
|
283
479
|
if (!zToken || isDisposed)
|
|
@@ -296,16 +492,52 @@ class AXOverlayService {
|
|
|
296
492
|
dispose();
|
|
297
493
|
});
|
|
298
494
|
}
|
|
495
|
+
if (options?.closeOnNavigation !== false && this.router) {
|
|
496
|
+
navigationSubscription = this.router.events
|
|
497
|
+
.pipe(filter((event) => event instanceof NavigationStart))
|
|
498
|
+
.subscribe(() => {
|
|
499
|
+
dispose();
|
|
500
|
+
});
|
|
501
|
+
}
|
|
299
502
|
this.applyOverlayVisualContext(options, overlayContainer);
|
|
503
|
+
const animationTarget = overlayContainer ? getOverlayAnimationTarget(overlayContainer) : null;
|
|
504
|
+
if (animationTarget && animation.enter.length && !reduceMotion) {
|
|
505
|
+
applyOverlayAnimationClasses(animationTarget, animation.enter);
|
|
506
|
+
}
|
|
300
507
|
return {
|
|
301
508
|
instance,
|
|
302
509
|
updatePosition,
|
|
303
510
|
dispose,
|
|
304
511
|
overlayElement: overlayContainer,
|
|
512
|
+
backdropElement,
|
|
305
513
|
zToken,
|
|
306
514
|
bringToFront,
|
|
307
515
|
};
|
|
308
516
|
}
|
|
517
|
+
/**
|
|
518
|
+
* Mobile action sheets need a hit-testable scrim even when the caller did not
|
|
519
|
+
* ask for a backdrop. An explicit `backdrop.enabled: false` opts out.
|
|
520
|
+
*/
|
|
521
|
+
needsActionSheetBackdrop(options) {
|
|
522
|
+
return !!options?.actionSheetStyle && this._platform.is('SM') && options?.backdrop?.enabled !== false;
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* Fills in the action-sheet scrim when the caller did not configure a backdrop.
|
|
526
|
+
* Outside-click closing stays with the popover (`clickOut`); this layer only
|
|
527
|
+
* intercepts hits so the page behind the sheet cannot be clicked.
|
|
528
|
+
*/
|
|
529
|
+
withActionSheetBackdrop(options) {
|
|
530
|
+
if (!this.needsActionSheetBackdrop(options) || options?.backdrop?.enabled) {
|
|
531
|
+
return options;
|
|
532
|
+
}
|
|
533
|
+
return {
|
|
534
|
+
...options,
|
|
535
|
+
backdrop: {
|
|
536
|
+
enabled: true,
|
|
537
|
+
background: true,
|
|
538
|
+
},
|
|
539
|
+
};
|
|
540
|
+
}
|
|
309
541
|
/**
|
|
310
542
|
* Creates a backdrop element.
|
|
311
543
|
*/
|
|
@@ -322,6 +554,8 @@ class AXOverlayService {
|
|
|
322
554
|
backdrop.style.width = '100%';
|
|
323
555
|
backdrop.style.height = '100%';
|
|
324
556
|
backdrop.style.zIndex = String(zIndex);
|
|
557
|
+
backdrop.style.pointerEvents = 'auto';
|
|
558
|
+
backdrop.style.touchAction = 'none';
|
|
325
559
|
if (options?.backdrop?.background) {
|
|
326
560
|
backdrop.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
|
|
327
561
|
}
|
|
@@ -513,10 +747,10 @@ class AXOverlayService {
|
|
|
513
747
|
applyVisualContext(pane, context, scope);
|
|
514
748
|
}
|
|
515
749
|
}
|
|
516
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
517
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
750
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXOverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
751
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXOverlayService, providedIn: 'root' }); }
|
|
518
752
|
}
|
|
519
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
753
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXOverlayService, decorators: [{
|
|
520
754
|
type: Injectable,
|
|
521
755
|
args: [{
|
|
522
756
|
providedIn: 'root',
|
|
@@ -527,5 +761,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
527
761
|
* Generated bundle index. Do not edit.
|
|
528
762
|
*/
|
|
529
763
|
|
|
530
|
-
export { APPEARANCE_CLASSES, AXOverlayService, CONTRAST_CLASSES, MANAGED_OVERLAY_VISUAL_CLASSES, SIZE_CLASSES, THEME_CLASSES, applyVisualContext, calculateAnchorPosition, clampToViewport, findBestPosition, fitsInViewport, resolveContextElement, resolveVisualContext };
|
|
764
|
+
export { APPEARANCE_CLASSES, AXOverlayService, AX_OVERLAY_DEFAULT_ENTER_ANIMATION, AX_OVERLAY_DEFAULT_LEAVE_ANIMATION, CONTRAST_CLASSES, MANAGED_OVERLAY_VISUAL_CLASSES, SIZE_CLASSES, THEME_CLASSES, applyOverlayAnimationClasses, applyVisualContext, calculateAnchorPosition, clampToViewport, findBestPosition, fitsInViewport, getAnimationDurationFromClasses, getOverlayAnimationTarget, getOverlayAnimationTimeout, parseCssTimeList, playOverlayLeaveAnimation, prefersReducedMotion, removeOverlayAnimationClasses, resolveContextElement, resolveOverlayAnimation, resolveVisualContext, waitForOverlayAnimationEnd };
|
|
531
765
|
//# sourceMappingURL=acorex-cdk-overlay.mjs.map
|