@acorex/cdk 22.2.0-next.0 → 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.
@@ -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":";;;;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;;"}
@@ -340,6 +340,26 @@ function clampToViewport(coords, overlayRect, viewportWidth, viewportHeight, mar
340
340
  const clampedTop = Math.max(margin, Math.min(coords.top, viewportHeight - overlayRect.height - margin));
341
341
  return { top: clampedTop, left: clampedLeft };
342
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
+ }
343
363
  /**
344
364
  * Finds the best position for an overlay that fits in the viewport.
345
365
  */
@@ -350,10 +370,21 @@ function findBestPosition(anchorRect, overlayRect, positions, viewportWidth, vie
350
370
  return { position, coords };
351
371
  }
352
372
  }
353
- // Fallback to first position if none fit, but clamp to viewport bounds
354
- const fallbackCoords = calculateAnchorPosition(anchorRect, overlayRect, positions[0]);
355
- const clampedCoords = clampToViewport(fallbackCoords, overlayRect, viewportWidth, viewportHeight);
356
- return { position: positions[0], coords: clampedCoords };
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 };
357
388
  }
358
389
 
359
390
  class AXOverlayService {
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-cdk-overlay.mjs","sources":["../../../../packages/cdk/overlay/src/lib/overlay-animation.ts","../../../../packages/cdk/overlay/src/lib/overlay-visual-context.ts","../../../../packages/cdk/overlay/src/lib/overlay.types.ts","../../../../packages/cdk/overlay/src/lib/overlay.service.ts","../../../../packages/cdk/overlay/src/acorex-cdk-overlay.ts"],"sourcesContent":["export const AX_OVERLAY_DEFAULT_ENTER_ANIMATION = ['animate-animated', 'animate-fadeIn', 'animate-fast'];\nexport const AX_OVERLAY_DEFAULT_LEAVE_ANIMATION = ['animate-animated', 'animate-fadeOut', 'animate-2xfaster'];\n\nconst OVERLAY_ANIMATION_DURATION_CLASSES = [\n 'animate-2xfaster',\n 'animate-faster',\n 'animate-fast',\n 'animate-slow',\n 'animate-slower',\n 'animate-2xslower',\n] as const;\n\nconst OVERLAY_ANIMATION_NAME_CLASSES = ['animate-fadeIn', 'animate-fadeOut'] as const;\n\nexport type AXOverlayAnimation =\n | boolean\n | string[]\n | {\n enter?: string[];\n leave?: string[];\n };\n\nexport interface AXOverlayResolvedAnimation {\n enter: string[];\n leave: string[];\n}\n\n/**\n * Resolves overlay animation classes.\n * - omitted: no animation (opt-in at the overlay layer)\n * - `true`: default fade in/out\n * - `false` or `[]`: no animation\n * - `string[]`: custom enter classes only\n * - `{ enter, leave }`: omitted keys fall back to the default fade classes\n */\nexport function resolveOverlayAnimation(animation?: AXOverlayAnimation): AXOverlayResolvedAnimation {\n if (animation === undefined || animation === false) {\n return { enter: [], leave: [] };\n }\n\n if (animation === true) {\n return {\n enter: [...AX_OVERLAY_DEFAULT_ENTER_ANIMATION],\n leave: [...AX_OVERLAY_DEFAULT_LEAVE_ANIMATION],\n };\n }\n\n if (Array.isArray(animation)) {\n if (animation.length === 0) {\n return { enter: [], leave: [] };\n }\n return { enter: [...animation], leave: [] };\n }\n\n return {\n enter: animation.enter === undefined ? [...AX_OVERLAY_DEFAULT_ENTER_ANIMATION] : [...animation.enter],\n leave: animation.leave === undefined ? [...AX_OVERLAY_DEFAULT_LEAVE_ANIMATION] : [...animation.leave],\n };\n}\n\n/** Prefers the content/pane so transforms are not applied to the full-screen container. */\nexport function getOverlayAnimationTarget(container: HTMLElement): HTMLElement {\n const content = container.querySelector<HTMLElement>(':scope > .ax-overlay-content');\n if (content) return content;\n const pane = container.querySelector<HTMLElement>(':scope > .ax-overlay-pane');\n if (pane) return pane;\n return container;\n}\n\nexport function applyOverlayAnimationClasses(element: HTMLElement, classes: string[]): void {\n for (const cls of classes) {\n if (cls) {\n element.classList.add(cls);\n }\n }\n}\n\nexport function removeOverlayAnimationClasses(element: HTMLElement, classes: string[]): void {\n for (const cls of classes) {\n if (cls) {\n element.classList.remove(cls);\n }\n }\n}\n\nexport function prefersReducedMotion(documentRef: Document): boolean {\n return !!documentRef.defaultView?.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\nexport function parseCssTimeList(value: string): number[] {\n return value.split(',').map((part) => {\n const trimmed = part.trim();\n if (trimmed.endsWith('ms')) {\n return Number.parseFloat(trimmed) || 0;\n }\n if (trimmed.endsWith('s')) {\n return (Number.parseFloat(trimmed) || 0) * 1000;\n }\n return 0;\n });\n}\n\n/** Maps theme duration utility classes to milliseconds (see tailwind-base). */\nexport function getAnimationDurationFromClasses(classes: string[]): number {\n if (classes.includes('animate-2xfaster')) return 250;\n if (classes.includes('animate-faster')) return 500;\n if (classes.includes('animate-fast')) return 800;\n if (classes.includes('animate-slow')) return 2000;\n if (classes.includes('animate-slower')) return 3000;\n if (classes.includes('animate-2xslower')) return 5000;\n return 500;\n}\n\nexport function getOverlayAnimationTimeout(\n element: HTMLElement,\n documentRef: Document,\n fallbackMs?: number,\n): number {\n if (fallbackMs !== undefined && fallbackMs > 0) {\n return fallbackMs + 32;\n }\n\n const style = documentRef.defaultView?.getComputedStyle(element);\n if (!style) return 0;\n\n const durations = parseCssTimeList(style.animationDuration);\n const delays = parseCssTimeList(style.animationDelay);\n const max = durations.reduce((longest, duration, index) => {\n return Math.max(longest, duration + (delays[index] ?? delays[0] ?? 0));\n }, 0);\n\n return max > 0 ? max + 32 : 0;\n}\n\nexport function playOverlayLeaveAnimation(\n element: HTMLElement,\n enter: string[],\n leave: string[],\n documentRef: Document,\n): Promise<void> {\n removeOverlayAnimationClasses(element, [\n ...enter,\n ...OVERLAY_ANIMATION_NAME_CLASSES,\n ...OVERLAY_ANIMATION_DURATION_CLASSES,\n ]);\n void element.offsetWidth;\n\n const leaveDurationMs = getAnimationDurationFromClasses(leave);\n applyOverlayAnimationClasses(element, leave);\n element.style.animationDuration = `${leaveDurationMs}ms`;\n\n return waitForOverlayAnimationEnd(element, documentRef, {\n fallbackMs: leaveDurationMs,\n animationName: 'fadeOut',\n });\n}\n\nexport function waitForOverlayAnimationEnd(\n element: HTMLElement,\n documentRef: Document,\n options?: { fallbackMs?: number; animationName?: string },\n): Promise<void> {\n return new Promise((resolve) => {\n const timeoutMs = getOverlayAnimationTimeout(element, documentRef, options?.fallbackMs);\n if (timeoutMs <= 0) {\n resolve();\n return;\n }\n\n let settled = false;\n const finish = () => {\n if (settled) return;\n settled = true;\n element.removeEventListener('animationend', onEnd);\n element.style.animationDuration = '';\n resolve();\n };\n const onEnd = (event: AnimationEvent) => {\n if (event.target !== element) return;\n if (options?.animationName && !event.animationName.toLowerCase().includes(options.animationName.toLowerCase())) {\n return;\n }\n finish();\n };\n\n element.addEventListener('animationend', onEnd);\n documentRef.defaultView?.setTimeout(finish, timeoutMs);\n });\n}\n","import { ElementRef } from '@angular/core';\n\nexport type AXOverlayVisualContextScope = 'full' | 'theme';\n\nexport interface AXOverlayVisualContext {\n appearance?: string;\n theme?: 'ax-light' | 'ax-dark';\n contrast?: string;\n size?: string;\n}\n\nexport const APPEARANCE_CLASSES = [\n 'ax-appearance-flat',\n 'ax-appearance-depth',\n 'ax-appearance-translucent',\n] as const;\n\nexport const THEME_CLASSES = ['ax-light', 'ax-dark'] as const;\n\nexport const CONTRAST_CLASSES = ['ax-contrast-enhanced', 'ax-contrast-high'] as const;\n\nexport const SIZE_CLASSES = ['ax-xs', 'ax-sm', 'ax-md', 'ax-lg', 'ax-xl'] as const;\n\nexport const MANAGED_OVERLAY_VISUAL_CLASSES = [\n ...APPEARANCE_CLASSES,\n ...THEME_CLASSES,\n ...CONTRAST_CLASSES,\n ...SIZE_CLASSES,\n] as const;\n\n/**\n * Resolves the nearest effective visual context from an anchor or context source.\n * Theme uses nearest ax-light / ax-dark so nested Light overrides Dark ancestors.\n */\nexport function resolveVisualContext(\n source: HTMLElement | null | undefined,\n fallbackRoot?: HTMLElement | null,\n): AXOverlayVisualContext {\n const context: AXOverlayVisualContext = {};\n const root = fallbackRoot ?? (typeof document !== 'undefined' ? document.documentElement : null);\n\n let node: HTMLElement | null = source ?? root;\n while (node) {\n if (!context.appearance) {\n for (const cls of APPEARANCE_CLASSES) {\n if (node.classList.contains(cls)) {\n context.appearance = cls;\n break;\n }\n }\n }\n\n if (!context.contrast) {\n for (const cls of CONTRAST_CLASSES) {\n if (node.classList.contains(cls)) {\n context.contrast = cls;\n break;\n }\n }\n }\n\n if (!context.size) {\n for (const cls of SIZE_CLASSES) {\n if (node.classList.contains(cls)) {\n context.size = cls;\n break;\n }\n }\n\n if (!context.size && typeof getComputedStyle !== 'undefined') {\n const computedSize = getComputedStyle(node).getPropertyValue('--ax-sys-size').trim();\n if (SIZE_CLASSES.includes(computedSize as (typeof SIZE_CLASSES)[number])) {\n context.size = computedSize;\n }\n }\n }\n\n if (!context.theme) {\n if (node.classList.contains('ax-light')) {\n context.theme = 'ax-light';\n } else if (node.classList.contains('ax-dark')) {\n context.theme = 'ax-dark';\n }\n }\n\n node = node.parentElement;\n }\n\n if (!context.theme && root) {\n if (root.classList.contains('ax-light')) {\n context.theme = 'ax-light';\n } else if (root.classList.contains('ax-dark')) {\n context.theme = 'ax-dark';\n }\n }\n\n return context;\n}\n\n/** Applies resolved visual context classes to an overlay container. */\nexport function applyVisualContext(\n target: HTMLElement,\n context: AXOverlayVisualContext,\n scope: AXOverlayVisualContextScope = 'full',\n): void {\n for (const cls of MANAGED_OVERLAY_VISUAL_CLASSES) {\n target.classList.remove(cls);\n }\n\n if (scope === 'full' && context.appearance) {\n target.classList.add(context.appearance);\n }\n if (context.theme) {\n target.classList.add(context.theme);\n }\n if (scope === 'full' && context.contrast) {\n target.classList.add(context.contrast);\n }\n if (context.size) {\n target.classList.add(context.size);\n }\n}\n\nexport function resolveContextElement(\n contextElement: HTMLElement | ElementRef<HTMLElement> | undefined,\n anchor: HTMLElement | ElementRef<HTMLElement> | undefined,\n fallbackRoot: HTMLElement,\n): HTMLElement {\n if (contextElement) {\n return contextElement instanceof ElementRef ? contextElement.nativeElement : contextElement;\n }\n if (anchor) {\n return anchor instanceof ElementRef ? anchor.nativeElement : anchor;\n }\n return fallbackRoot;\n}\n","import { AXConnectedPosition, AXPlacement, AXPlacementType } from '@acorex/cdk/common';\nimport { AXComponentOptions } from '@acorex/core/components';\nimport { AXZToken } from '@acorex/core/z-index';\nimport { ComponentRef, ElementRef, EmbeddedViewRef } from '@angular/core';\nimport type { AXOverlayAnimation } from './overlay-animation';\nimport type { AXOverlayVisualContextScope } from './overlay-visual-context';\n\nexport interface AXOverlayRef<T> {\n instance: EmbeddedViewRef<T> | ComponentRef<T>;\n /** Updates the overlay position relative to the anchor */\n updatePosition: () => void;\n /** Destroys the overlay. DOM removal waits for a leave animation when one is configured. */\n dispose: () => void;\n /** The overlay container element */\n overlayElement: HTMLElement | null;\n /** The backdrop element if one was created */\n backdropElement: HTMLElement | null;\n /** The z-index token for this overlay */\n zToken: AXZToken | null;\n /** Brings this overlay to the front of all other overlays */\n bringToFront: () => void;\n}\n\nexport interface AXOverlayAnchorOptions {\n /** The anchor element to position relative to */\n anchor: HTMLElement | ElementRef<HTMLElement>;\n /** Placement of the overlay relative to the anchor */\n placement?: AXPlacementType;\n /** Horizontal offset in pixels */\n offsetX?: number;\n /** Vertical offset in pixels */\n offsetY?: number;\n /** Whether to flip the overlay when it overflows the viewport */\n autoFlip?: boolean;\n}\n\nexport interface AXOverlayOptions extends AXComponentOptions {\n backdrop?: {\n enabled?: boolean;\n background?: boolean;\n backdropClass?: string;\n closeOnClick?: boolean;\n };\n position?: AXPlacement;\n /** Anchor-based positioning options for tooltips, popovers, etc. */\n anchorOptions?: AXOverlayAnchorOptions;\n /** Custom CSS class for the overlay panel */\n panelClass?: string | string[];\n /**\n * Enter/leave animation applied to overlay content (`.ax-overlay-content` or `.ax-overlay-pane`),\n * not the full-screen container. Omitted: no animation. `true`: default fade in/out.\n * `false` or `[]`: disabled. A class array is enter-only. `{ enter, leave }` configures both.\n */\n animation?: AXOverlayAnimation;\n /** Whether to close when clicking outside */\n closeOnOutsideClick?: boolean;\n /** Whether to close when pressing Escape */\n closeOnEscape?: boolean;\n /** Width of the overlay container (e.g., 'auto', '200px', '100%') */\n width?: string;\n /** Dispose this overlay when Angular starts a navigation. Default: true. */\n closeOnNavigation?: boolean;\n /** Callback when the overlay is disposed (e.g., due to scroll) */\n onDispose?: () => void;\n /** Whether to use centered container (default: true). Set to false for positioned overlays like toasts */\n centered?: boolean;\n actionSheetStyle?: boolean;\n /** Base z-index for this overlay */\n zIndexBase?: number;\n /**\n * Visual context source for anchorless overlays (toast, dialog, notification).\n * Falls back to anchor, then document root.\n */\n contextElement?: HTMLElement | ElementRef<HTMLElement>;\n /**\n * Which visual context dimensions propagate to the overlay shell.\n * `theme` keeps light/dark (+ size) only; floating surfaces opt out of\n * appearance/contrast classes (popup, toast, dropdown).\n */\n visualContextScope?: AXOverlayVisualContextScope;\n}\n\n/**\n * Calculates the position of an overlay element relative to an anchor element.\n */\nexport function calculateAnchorPosition(\n anchorRect: DOMRect,\n overlayRect: DOMRect,\n position: AXConnectedPosition,\n): { top: number; left: number } {\n let left = 0;\n let top = 0;\n\n // Calculate origin point on anchor\n switch (position.originX) {\n case 'start':\n left = anchorRect.left;\n break;\n case 'center':\n left = anchorRect.left + anchorRect.width / 2;\n break;\n case 'end':\n left = anchorRect.right;\n break;\n }\n\n switch (position.originY) {\n case 'top':\n top = anchorRect.top;\n break;\n case 'center':\n top = anchorRect.top + anchorRect.height / 2;\n break;\n case 'bottom':\n top = anchorRect.bottom;\n break;\n }\n\n // Adjust for overlay alignment\n switch (position.overlayX) {\n case 'start':\n // left stays the same\n break;\n case 'center':\n left -= overlayRect.width / 2;\n break;\n case 'end':\n left -= overlayRect.width;\n break;\n }\n\n switch (position.overlayY) {\n case 'top':\n // top stays the same\n break;\n case 'center':\n top -= overlayRect.height / 2;\n break;\n case 'bottom':\n top -= overlayRect.height;\n break;\n }\n\n // Apply offsets\n if (position.offsetX) {\n left += position.offsetX;\n }\n if (position.offsetY) {\n top += position.offsetY;\n }\n\n return { top, left };\n}\n\n/**\n * Checks if the overlay position fits within the viewport.\n */\nexport function fitsInViewport(\n position: { top: number; left: number },\n overlayRect: DOMRect,\n viewportWidth: number,\n viewportHeight: number,\n): boolean {\n return (\n position.left >= 0 &&\n position.top >= 0 &&\n position.left + overlayRect.width <= viewportWidth &&\n position.top + overlayRect.height <= viewportHeight\n );\n}\n\n/**\n * Clamps a position to ensure the overlay stays within viewport bounds.\n */\nexport function clampToViewport(\n coords: { top: number; left: number },\n overlayRect: DOMRect,\n viewportWidth: number,\n viewportHeight: number,\n margin = 4,\n): { top: number; left: number } {\n const clampedLeft = Math.max(margin, Math.min(coords.left, viewportWidth - overlayRect.width - margin));\n const clampedTop = Math.max(margin, Math.min(coords.top, viewportHeight - overlayRect.height - margin));\n\n return { top: clampedTop, left: clampedLeft };\n}\n\n/**\n * Finds the best position for an overlay that fits in the viewport.\n */\nexport function findBestPosition(\n anchorRect: DOMRect,\n overlayRect: DOMRect,\n positions: AXConnectedPosition[],\n viewportWidth: number,\n viewportHeight: number,\n): { position: AXConnectedPosition; coords: { top: number; left: number } } {\n for (const position of positions) {\n const coords = calculateAnchorPosition(anchorRect, overlayRect, position);\n\n if (fitsInViewport(coords, overlayRect, viewportWidth, viewportHeight)) {\n return { position, coords };\n }\n }\n\n // Fallback to first position if none fit, but clamp to viewport bounds\n const fallbackCoords = calculateAnchorPosition(anchorRect, overlayRect, positions[0]);\n const clampedCoords = clampToViewport(fallbackCoords, overlayRect, viewportWidth, viewportHeight);\n return { position: positions[0], coords: clampedCoords };\n}\n","import { convertToPlacement } from '@acorex/cdk/common';\nimport { AXComponentContent, AXComponentService } from '@acorex/core/components';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXZIndexService, AXZToken } from '@acorex/core/z-index';\nimport { DOCUMENT } from '@angular/common';\nimport { ComponentRef, ElementRef, EmbeddedViewRef, inject, Injectable, TemplateRef } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport {\n applyOverlayAnimationClasses,\n getOverlayAnimationTarget,\n playOverlayLeaveAnimation,\n prefersReducedMotion,\n resolveOverlayAnimation,\n} from './overlay-animation';\nimport { applyVisualContext, resolveContextElement, resolveVisualContext } from './overlay-visual-context';\nimport { AXOverlayOptions, AXOverlayRef, findBestPosition } from './overlay.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXOverlayService {\n private componentService = inject(AXComponentService);\n private document = inject(DOCUMENT);\n private zIndexService = inject(AXZIndexService);\n private _platform: AXPlatform = inject(AXPlatform);\n private router = inject(Router, { optional: true });\n\n /**\n * Creates an overlay with optional anchor-based positioning.\n * @param content - Component or template to display\n * @param options - Configuration options for the overlay\n * @returns Promise<AXOverlayRef> - Reference to the created overlay\n */\n async create<T = unknown>(content: AXComponentContent<T>, options?: AXOverlayOptions): Promise<AXOverlayRef<T>> {\n let instance: EmbeddedViewRef<T> | ComponentRef<T>;\n let overlayContainer: HTMLElement | null = null;\n let backdropElement: HTMLElement | null = null;\n let isDisposed = false;\n let navigationSubscription: Subscription | null = null;\n\n // Acquire a z-index token for this overlay\n let zToken: AXZToken | null = this.zIndexService.acquire(options?.zIndexBase);\n\n if (content instanceof TemplateRef) {\n instance = this.componentService.createFromTemplate<T>(content);\n } else {\n instance = this.componentService.createFromComponent<T>(content);\n if (options?.inputs) {\n Object.entries(options.inputs).forEach((c) => {\n (instance as ComponentRef<T>).setInput(c[0], c[1]);\n });\n }\n }\n\n // Get the host element\n const hostElement = this.getHostElement(instance);\n\n // Create backdrop if enabled. Mobile action sheets also get one: their dimming\n // used to be a box-shadow spread, which paints the scrim but does not hit-test,\n // so controls behind the sheet stayed clickable.\n if (options?.backdrop?.enabled || this.needsActionSheetBackdrop(options)) {\n backdropElement = this.createBackdrop(this.withActionSheetBackdrop(options), zToken.zIndex);\n }\n\n // If anchor options are provided, set up positioned overlay (for tooltips, popovers)\n if (options?.anchorOptions?.anchor) {\n overlayContainer = this.createOverlayContainer(hostElement, options, zToken.zIndex);\n this.positionOverlay(overlayContainer, options);\n } else if (options?.centered === false) {\n // Non-centered positioned overlay (for toasts, notifications)\n overlayContainer = this.createOverlayContainer(hostElement, options, zToken.zIndex);\n } else {\n // No anchor - create centered overlay (for modals, popups)\n overlayContainer = this.createCenteredOverlayContainer(hostElement, options, zToken.zIndex);\n }\n\n const updatePosition = () => {\n if (overlayContainer && options?.anchorOptions?.anchor) {\n this.positionOverlay(overlayContainer, options);\n }\n };\n\n const animation = resolveOverlayAnimation(options?.animation);\n const reduceMotion = prefersReducedMotion(this.document);\n\n const dispose = () => {\n if (isDisposed) return;\n isDisposed = true;\n\n navigationSubscription?.unsubscribe();\n navigationSubscription = null;\n\n const finish = () => {\n backdropElement?.remove();\n overlayContainer?.remove();\n instance.destroy();\n this.zIndexService.release(zToken);\n zToken = null;\n options?.onDispose?.();\n };\n\n const animationTarget = overlayContainer ? getOverlayAnimationTarget(overlayContainer) : null;\n if (!animationTarget || !animation.leave.length || reduceMotion) {\n finish();\n return;\n }\n\n if (overlayContainer) {\n overlayContainer.style.pointerEvents = 'none';\n }\n if (backdropElement) {\n backdropElement.style.pointerEvents = 'none';\n }\n\n void playOverlayLeaveAnimation(animationTarget, animation.enter, animation.leave, this.document).finally(finish);\n };\n\n const bringToFront = () => {\n if (!zToken || isDisposed) return;\n zToken = this.zIndexService.bringToFront(zToken);\n if (backdropElement) {\n backdropElement.style.zIndex = String(zToken.zIndex);\n }\n if (overlayContainer) {\n overlayContainer.style.zIndex = String(zToken.zIndex);\n }\n };\n\n // Set up backdrop click handler\n if (backdropElement && options?.backdrop?.closeOnClick) {\n backdropElement.addEventListener('click', () => {\n dispose();\n });\n }\n\n if (options?.closeOnNavigation !== false && this.router) {\n navigationSubscription = this.router.events\n .pipe(filter((event): event is NavigationStart => event instanceof NavigationStart))\n .subscribe(() => {\n dispose();\n });\n }\n\n this.applyOverlayVisualContext(options, overlayContainer);\n\n const animationTarget = overlayContainer ? getOverlayAnimationTarget(overlayContainer) : null;\n if (animationTarget && animation.enter.length && !reduceMotion) {\n applyOverlayAnimationClasses(animationTarget, animation.enter);\n }\n\n return {\n instance,\n updatePosition,\n dispose,\n overlayElement: overlayContainer,\n backdropElement,\n zToken,\n bringToFront,\n };\n }\n\n /**\n * Mobile action sheets need a hit-testable scrim even when the caller did not\n * ask for a backdrop. An explicit `backdrop.enabled: false` opts out.\n */\n private needsActionSheetBackdrop(options: AXOverlayOptions | undefined): boolean {\n return !!options?.actionSheetStyle && this._platform.is('SM') && options?.backdrop?.enabled !== false;\n }\n\n /**\n * Fills in the action-sheet scrim when the caller did not configure a backdrop.\n * Outside-click closing stays with the popover (`clickOut`); this layer only\n * intercepts hits so the page behind the sheet cannot be clicked.\n */\n private withActionSheetBackdrop(options: AXOverlayOptions | undefined): AXOverlayOptions | undefined {\n if (!this.needsActionSheetBackdrop(options) || options?.backdrop?.enabled) {\n return options;\n }\n return {\n ...options,\n backdrop: {\n enabled: true,\n background: true,\n },\n };\n }\n\n /**\n * Creates a backdrop element.\n */\n private createBackdrop(options: AXOverlayOptions | undefined, zIndex: number): HTMLElement {\n const backdrop = this.document.createElement('div');\n backdrop.classList.add('ax-overlay-backdrop');\n\n if (options?.backdrop?.backdropClass) {\n backdrop.classList.add(options.backdrop.backdropClass);\n }\n\n // Style the backdrop\n backdrop.style.position = 'fixed';\n backdrop.style.top = '0';\n backdrop.style.left = '0';\n backdrop.style.width = '100%';\n backdrop.style.height = '100%';\n backdrop.style.zIndex = String(zIndex);\n backdrop.style.pointerEvents = 'auto';\n backdrop.style.touchAction = 'none';\n\n if (options?.backdrop?.background) {\n backdrop.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';\n }\n\n this.document.body.appendChild(backdrop);\n return backdrop;\n }\n\n /**\n * Creates a centered overlay container (for modals/popups).\n */\n private createCenteredOverlayContainer(\n content: HTMLElement,\n options: AXOverlayOptions | undefined,\n zIndex: number,\n ): HTMLElement {\n const container = this.document.createElement('div');\n container.classList.add('ax-overlay-container', 'ax-overlay-centered');\n\n // Add custom panel classes\n if (options?.panelClass) {\n const classes = Array.isArray(options.panelClass) ? options.panelClass : [options.panelClass];\n classes.forEach((cls) => {\n if (cls) {\n container.classList.add(cls);\n }\n });\n }\n\n // Set styles for centered positioning\n container.style.position = 'fixed';\n container.style.top = '0';\n container.style.left = '0';\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.display = 'flex';\n container.style.alignItems = 'center';\n container.style.justifyContent = 'center';\n container.style.zIndex = String(zIndex);\n\n // Create inner wrapper for the content\n const contentWrapper = this.document.createElement('div');\n contentWrapper.classList.add('ax-overlay-content');\n\n // Apply width if provided\n if (options?.width) {\n contentWrapper.style.width = options.width;\n } else if (this.hasPanelClass(options?.panelClass, 'ax-popup-overlay')) {\n contentWrapper.style.width = 'auto';\n contentWrapper.style.maxWidth = '100%';\n }\n\n // Move content into wrapper\n contentWrapper.appendChild(content);\n container.appendChild(contentWrapper);\n\n // Append to body\n this.document.body.appendChild(container);\n\n return container;\n }\n\n /**\n * Gets the host element from a ComponentRef or EmbeddedViewRef.\n */\n private hasPanelClass(panelClass: string | string[] | undefined, className: string): boolean {\n if (!panelClass) return false;\n const classes = Array.isArray(panelClass) ? panelClass : [panelClass];\n return classes.some((cls) => cls === className);\n }\n\n /**\n * Gets the host element from a ComponentRef or EmbeddedViewRef.\n */\n private getHostElement<T>(instance: EmbeddedViewRef<T> | ComponentRef<T>): HTMLElement {\n if (instance instanceof ComponentRef) {\n return instance.location.nativeElement;\n } else {\n // EmbeddedViewRef - get the first root node\n return instance.rootNodes[0] as HTMLElement;\n }\n }\n\n /**\n * Creates an overlay container element and appends the content to it.\n */\n private createOverlayContainer(\n content: HTMLElement,\n options: AXOverlayOptions | undefined,\n zIndex: number,\n ): HTMLElement {\n const container = this.document.createElement('div');\n const pane = this.document.createElement('div');\n container.classList.add('ax-overlay-container');\n\n if (Array.isArray(options.panelClass)) {\n const check = options.panelClass.some((element) => {\n return element === 'ax-action-sheet-panel';\n });\n if (!check) pane.classList.add('ax-overlay-pane');\n }\n\n if (options.actionSheetStyle && this._platform.is('SM')) pane.classList.add('ax-overlay-actionsheet');\n\n // Add custom panel classes\n if (options?.panelClass) {\n const classes = Array.isArray(options.panelClass) ? options.panelClass : [options.panelClass];\n classes.forEach((cls) => {\n if (cls) {\n container.classList.add(cls);\n }\n });\n }\n\n // Set initial styles for positioning\n container.style.position = 'fixed';\n container.style.zIndex = String(zIndex);\n container.style.maxWidth = '100%';\n container.style.maxHeight = '100%';\n\n if (options?.actionSheetStyle) {\n container.style.width = this._platform.is('SM') ? '100%' : 'fit-content';\n } else {\n container.style.width = options?.width || 'fit-content';\n }\n\n // Move content into container\n pane.appendChild(content);\n container.appendChild(pane);\n\n // Append to body\n this.document.body.appendChild(container);\n\n return container;\n }\n\n /**\n * Positions the overlay container relative to the anchor element.\n */\n private positionOverlay(container: HTMLElement, options: AXOverlayOptions): void {\n if (options.actionSheetStyle && this._platform.is('SM')) {\n container.style.bottom = `0px`;\n container.style.left = `0px`;\n container.style.right = `0px`;\n container.style.width = 'auto';\n return;\n }\n\n const anchorOptions = options.anchorOptions;\n if (!anchorOptions?.anchor) return;\n\n const anchorElement =\n anchorOptions.anchor instanceof ElementRef ? anchorOptions.anchor.nativeElement : anchorOptions.anchor;\n\n const anchorRect = anchorElement.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const viewportWidth = this.document.documentElement.clientWidth;\n const viewportHeight = this.document.documentElement.clientHeight;\n\n // Get positions from placement\n let positions = convertToPlacement(anchorOptions.placement ?? 'bottom');\n if (positions.length === 0) {\n positions = convertToPlacement('bottom');\n }\n\n // Apply custom offsets to positions with direction-aware inversion\n // When position flips, the offset should also be inverted to maintain the intended gap\n if (anchorOptions.offsetX || anchorOptions.offsetY) {\n const primaryPosition = positions[0];\n positions = positions.map((p) => {\n let adjustedOffsetX = anchorOptions.offsetX ?? 0;\n let adjustedOffsetY = anchorOptions.offsetY ?? 0;\n\n // Invert offsetY when vertical direction flips\n // (from bottom to top or vice versa)\n if (primaryPosition.originY !== p.originY) {\n adjustedOffsetY = -adjustedOffsetY;\n }\n\n // Invert offsetX when horizontal direction flips\n // (from end to start or vice versa)\n if (primaryPosition.originX !== p.originX) {\n adjustedOffsetX = -adjustedOffsetX;\n }\n\n return {\n ...p,\n offsetX: (p.offsetX ?? 0) + adjustedOffsetX,\n offsetY: (p.offsetY ?? 0) + adjustedOffsetY,\n };\n });\n }\n\n // Find the best position that fits in viewport\n const { coords } = anchorOptions.autoFlip\n ? findBestPosition(anchorRect, containerRect, positions, viewportWidth, viewportHeight)\n : {\n coords: {\n top:\n positions[0].originY === 'bottom'\n ? anchorRect.bottom + (positions[0].offsetY ?? 0)\n : anchorRect.top - containerRect.height + (positions[0].offsetY ?? 0),\n left: anchorRect.left + (positions[0].offsetX ?? 0),\n },\n };\n\n // Apply position\n container.style.top = `${coords.top}px`;\n container.style.left = `${coords.left}px`;\n }\n\n private applyOverlayVisualContext(options: AXOverlayOptions | undefined, targetElement: HTMLElement | null): void {\n if (!targetElement) return;\n\n const fallbackRoot = this.document.documentElement;\n const source = resolveContextElement(options?.contextElement, options?.anchorOptions?.anchor, fallbackRoot);\n const context = resolveVisualContext(source, fallbackRoot);\n const scope = options?.visualContextScope ?? 'full';\n applyVisualContext(targetElement, context, scope);\n\n const pane = targetElement.querySelector('.ax-overlay-pane');\n // Pane is a separate stacking context; mirror context classes so portaled content\n // inherits the same CSS variables when the pane is not a descendant of the container.\n if (pane instanceof HTMLElement) {\n applyVisualContext(pane, context, scope);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-cdk-overlay.mjs","sources":["../../../../packages/cdk/overlay/src/lib/overlay-animation.ts","../../../../packages/cdk/overlay/src/lib/overlay-visual-context.ts","../../../../packages/cdk/overlay/src/lib/overlay.types.ts","../../../../packages/cdk/overlay/src/lib/overlay.service.ts","../../../../packages/cdk/overlay/src/acorex-cdk-overlay.ts"],"sourcesContent":["export const AX_OVERLAY_DEFAULT_ENTER_ANIMATION = ['animate-animated', 'animate-fadeIn', 'animate-fast'];\nexport const AX_OVERLAY_DEFAULT_LEAVE_ANIMATION = ['animate-animated', 'animate-fadeOut', 'animate-2xfaster'];\n\nconst OVERLAY_ANIMATION_DURATION_CLASSES = [\n 'animate-2xfaster',\n 'animate-faster',\n 'animate-fast',\n 'animate-slow',\n 'animate-slower',\n 'animate-2xslower',\n] as const;\n\nconst OVERLAY_ANIMATION_NAME_CLASSES = ['animate-fadeIn', 'animate-fadeOut'] as const;\n\nexport type AXOverlayAnimation =\n | boolean\n | string[]\n | {\n enter?: string[];\n leave?: string[];\n };\n\nexport interface AXOverlayResolvedAnimation {\n enter: string[];\n leave: string[];\n}\n\n/**\n * Resolves overlay animation classes.\n * - omitted: no animation (opt-in at the overlay layer)\n * - `true`: default fade in/out\n * - `false` or `[]`: no animation\n * - `string[]`: custom enter classes only\n * - `{ enter, leave }`: omitted keys fall back to the default fade classes\n */\nexport function resolveOverlayAnimation(animation?: AXOverlayAnimation): AXOverlayResolvedAnimation {\n if (animation === undefined || animation === false) {\n return { enter: [], leave: [] };\n }\n\n if (animation === true) {\n return {\n enter: [...AX_OVERLAY_DEFAULT_ENTER_ANIMATION],\n leave: [...AX_OVERLAY_DEFAULT_LEAVE_ANIMATION],\n };\n }\n\n if (Array.isArray(animation)) {\n if (animation.length === 0) {\n return { enter: [], leave: [] };\n }\n return { enter: [...animation], leave: [] };\n }\n\n return {\n enter: animation.enter === undefined ? [...AX_OVERLAY_DEFAULT_ENTER_ANIMATION] : [...animation.enter],\n leave: animation.leave === undefined ? [...AX_OVERLAY_DEFAULT_LEAVE_ANIMATION] : [...animation.leave],\n };\n}\n\n/** Prefers the content/pane so transforms are not applied to the full-screen container. */\nexport function getOverlayAnimationTarget(container: HTMLElement): HTMLElement {\n const content = container.querySelector<HTMLElement>(':scope > .ax-overlay-content');\n if (content) return content;\n const pane = container.querySelector<HTMLElement>(':scope > .ax-overlay-pane');\n if (pane) return pane;\n return container;\n}\n\nexport function applyOverlayAnimationClasses(element: HTMLElement, classes: string[]): void {\n for (const cls of classes) {\n if (cls) {\n element.classList.add(cls);\n }\n }\n}\n\nexport function removeOverlayAnimationClasses(element: HTMLElement, classes: string[]): void {\n for (const cls of classes) {\n if (cls) {\n element.classList.remove(cls);\n }\n }\n}\n\nexport function prefersReducedMotion(documentRef: Document): boolean {\n return !!documentRef.defaultView?.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\nexport function parseCssTimeList(value: string): number[] {\n return value.split(',').map((part) => {\n const trimmed = part.trim();\n if (trimmed.endsWith('ms')) {\n return Number.parseFloat(trimmed) || 0;\n }\n if (trimmed.endsWith('s')) {\n return (Number.parseFloat(trimmed) || 0) * 1000;\n }\n return 0;\n });\n}\n\n/** Maps theme duration utility classes to milliseconds (see tailwind-base). */\nexport function getAnimationDurationFromClasses(classes: string[]): number {\n if (classes.includes('animate-2xfaster')) return 250;\n if (classes.includes('animate-faster')) return 500;\n if (classes.includes('animate-fast')) return 800;\n if (classes.includes('animate-slow')) return 2000;\n if (classes.includes('animate-slower')) return 3000;\n if (classes.includes('animate-2xslower')) return 5000;\n return 500;\n}\n\nexport function getOverlayAnimationTimeout(\n element: HTMLElement,\n documentRef: Document,\n fallbackMs?: number,\n): number {\n if (fallbackMs !== undefined && fallbackMs > 0) {\n return fallbackMs + 32;\n }\n\n const style = documentRef.defaultView?.getComputedStyle(element);\n if (!style) return 0;\n\n const durations = parseCssTimeList(style.animationDuration);\n const delays = parseCssTimeList(style.animationDelay);\n const max = durations.reduce((longest, duration, index) => {\n return Math.max(longest, duration + (delays[index] ?? delays[0] ?? 0));\n }, 0);\n\n return max > 0 ? max + 32 : 0;\n}\n\nexport function playOverlayLeaveAnimation(\n element: HTMLElement,\n enter: string[],\n leave: string[],\n documentRef: Document,\n): Promise<void> {\n removeOverlayAnimationClasses(element, [\n ...enter,\n ...OVERLAY_ANIMATION_NAME_CLASSES,\n ...OVERLAY_ANIMATION_DURATION_CLASSES,\n ]);\n void element.offsetWidth;\n\n const leaveDurationMs = getAnimationDurationFromClasses(leave);\n applyOverlayAnimationClasses(element, leave);\n element.style.animationDuration = `${leaveDurationMs}ms`;\n\n return waitForOverlayAnimationEnd(element, documentRef, {\n fallbackMs: leaveDurationMs,\n animationName: 'fadeOut',\n });\n}\n\nexport function waitForOverlayAnimationEnd(\n element: HTMLElement,\n documentRef: Document,\n options?: { fallbackMs?: number; animationName?: string },\n): Promise<void> {\n return new Promise((resolve) => {\n const timeoutMs = getOverlayAnimationTimeout(element, documentRef, options?.fallbackMs);\n if (timeoutMs <= 0) {\n resolve();\n return;\n }\n\n let settled = false;\n const finish = () => {\n if (settled) return;\n settled = true;\n element.removeEventListener('animationend', onEnd);\n element.style.animationDuration = '';\n resolve();\n };\n const onEnd = (event: AnimationEvent) => {\n if (event.target !== element) return;\n if (options?.animationName && !event.animationName.toLowerCase().includes(options.animationName.toLowerCase())) {\n return;\n }\n finish();\n };\n\n element.addEventListener('animationend', onEnd);\n documentRef.defaultView?.setTimeout(finish, timeoutMs);\n });\n}\n","import { ElementRef } from '@angular/core';\n\nexport type AXOverlayVisualContextScope = 'full' | 'theme';\n\nexport interface AXOverlayVisualContext {\n appearance?: string;\n theme?: 'ax-light' | 'ax-dark';\n contrast?: string;\n size?: string;\n}\n\nexport const APPEARANCE_CLASSES = [\n 'ax-appearance-flat',\n 'ax-appearance-depth',\n 'ax-appearance-translucent',\n] as const;\n\nexport const THEME_CLASSES = ['ax-light', 'ax-dark'] as const;\n\nexport const CONTRAST_CLASSES = ['ax-contrast-enhanced', 'ax-contrast-high'] as const;\n\nexport const SIZE_CLASSES = ['ax-xs', 'ax-sm', 'ax-md', 'ax-lg', 'ax-xl'] as const;\n\nexport const MANAGED_OVERLAY_VISUAL_CLASSES = [\n ...APPEARANCE_CLASSES,\n ...THEME_CLASSES,\n ...CONTRAST_CLASSES,\n ...SIZE_CLASSES,\n] as const;\n\n/**\n * Resolves the nearest effective visual context from an anchor or context source.\n * Theme uses nearest ax-light / ax-dark so nested Light overrides Dark ancestors.\n */\nexport function resolveVisualContext(\n source: HTMLElement | null | undefined,\n fallbackRoot?: HTMLElement | null,\n): AXOverlayVisualContext {\n const context: AXOverlayVisualContext = {};\n const root = fallbackRoot ?? (typeof document !== 'undefined' ? document.documentElement : null);\n\n let node: HTMLElement | null = source ?? root;\n while (node) {\n if (!context.appearance) {\n for (const cls of APPEARANCE_CLASSES) {\n if (node.classList.contains(cls)) {\n context.appearance = cls;\n break;\n }\n }\n }\n\n if (!context.contrast) {\n for (const cls of CONTRAST_CLASSES) {\n if (node.classList.contains(cls)) {\n context.contrast = cls;\n break;\n }\n }\n }\n\n if (!context.size) {\n for (const cls of SIZE_CLASSES) {\n if (node.classList.contains(cls)) {\n context.size = cls;\n break;\n }\n }\n\n if (!context.size && typeof getComputedStyle !== 'undefined') {\n const computedSize = getComputedStyle(node).getPropertyValue('--ax-sys-size').trim();\n if (SIZE_CLASSES.includes(computedSize as (typeof SIZE_CLASSES)[number])) {\n context.size = computedSize;\n }\n }\n }\n\n if (!context.theme) {\n if (node.classList.contains('ax-light')) {\n context.theme = 'ax-light';\n } else if (node.classList.contains('ax-dark')) {\n context.theme = 'ax-dark';\n }\n }\n\n node = node.parentElement;\n }\n\n if (!context.theme && root) {\n if (root.classList.contains('ax-light')) {\n context.theme = 'ax-light';\n } else if (root.classList.contains('ax-dark')) {\n context.theme = 'ax-dark';\n }\n }\n\n return context;\n}\n\n/** Applies resolved visual context classes to an overlay container. */\nexport function applyVisualContext(\n target: HTMLElement,\n context: AXOverlayVisualContext,\n scope: AXOverlayVisualContextScope = 'full',\n): void {\n for (const cls of MANAGED_OVERLAY_VISUAL_CLASSES) {\n target.classList.remove(cls);\n }\n\n if (scope === 'full' && context.appearance) {\n target.classList.add(context.appearance);\n }\n if (context.theme) {\n target.classList.add(context.theme);\n }\n if (scope === 'full' && context.contrast) {\n target.classList.add(context.contrast);\n }\n if (context.size) {\n target.classList.add(context.size);\n }\n}\n\nexport function resolveContextElement(\n contextElement: HTMLElement | ElementRef<HTMLElement> | undefined,\n anchor: HTMLElement | ElementRef<HTMLElement> | undefined,\n fallbackRoot: HTMLElement,\n): HTMLElement {\n if (contextElement) {\n return contextElement instanceof ElementRef ? contextElement.nativeElement : contextElement;\n }\n if (anchor) {\n return anchor instanceof ElementRef ? anchor.nativeElement : anchor;\n }\n return fallbackRoot;\n}\n","import { AXConnectedPosition, AXPlacement, AXPlacementType } from '@acorex/cdk/common';\nimport { AXComponentOptions } from '@acorex/core/components';\nimport { AXZToken } from '@acorex/core/z-index';\nimport { ComponentRef, ElementRef, EmbeddedViewRef } from '@angular/core';\nimport type { AXOverlayAnimation } from './overlay-animation';\nimport type { AXOverlayVisualContextScope } from './overlay-visual-context';\n\nexport interface AXOverlayRef<T> {\n instance: EmbeddedViewRef<T> | ComponentRef<T>;\n /** Updates the overlay position relative to the anchor */\n updatePosition: () => void;\n /** Destroys the overlay. DOM removal waits for a leave animation when one is configured. */\n dispose: () => void;\n /** The overlay container element */\n overlayElement: HTMLElement | null;\n /** The backdrop element if one was created */\n backdropElement: HTMLElement | null;\n /** The z-index token for this overlay */\n zToken: AXZToken | null;\n /** Brings this overlay to the front of all other overlays */\n bringToFront: () => void;\n}\n\nexport interface AXOverlayAnchorOptions {\n /** The anchor element to position relative to */\n anchor: HTMLElement | ElementRef<HTMLElement>;\n /** Placement of the overlay relative to the anchor */\n placement?: AXPlacementType;\n /** Horizontal offset in pixels */\n offsetX?: number;\n /** Vertical offset in pixels */\n offsetY?: number;\n /** Whether to flip the overlay when it overflows the viewport */\n autoFlip?: boolean;\n}\n\nexport interface AXOverlayOptions extends AXComponentOptions {\n backdrop?: {\n enabled?: boolean;\n background?: boolean;\n backdropClass?: string;\n closeOnClick?: boolean;\n };\n position?: AXPlacement;\n /** Anchor-based positioning options for tooltips, popovers, etc. */\n anchorOptions?: AXOverlayAnchorOptions;\n /** Custom CSS class for the overlay panel */\n panelClass?: string | string[];\n /**\n * Enter/leave animation applied to overlay content (`.ax-overlay-content` or `.ax-overlay-pane`),\n * not the full-screen container. Omitted: no animation. `true`: default fade in/out.\n * `false` or `[]`: disabled. A class array is enter-only. `{ enter, leave }` configures both.\n */\n animation?: AXOverlayAnimation;\n /** Whether to close when clicking outside */\n closeOnOutsideClick?: boolean;\n /** Whether to close when pressing Escape */\n closeOnEscape?: boolean;\n /** Width of the overlay container (e.g., 'auto', '200px', '100%') */\n width?: string;\n /** Dispose this overlay when Angular starts a navigation. Default: true. */\n closeOnNavigation?: boolean;\n /** Callback when the overlay is disposed (e.g., due to scroll) */\n onDispose?: () => void;\n /** Whether to use centered container (default: true). Set to false for positioned overlays like toasts */\n centered?: boolean;\n actionSheetStyle?: boolean;\n /** Base z-index for this overlay */\n zIndexBase?: number;\n /**\n * Visual context source for anchorless overlays (toast, dialog, notification).\n * Falls back to anchor, then document root.\n */\n contextElement?: HTMLElement | ElementRef<HTMLElement>;\n /**\n * Which visual context dimensions propagate to the overlay shell.\n * `theme` keeps light/dark (+ size) only; floating surfaces opt out of\n * appearance/contrast classes (popup, toast, dropdown).\n */\n visualContextScope?: AXOverlayVisualContextScope;\n}\n\n/**\n * Calculates the position of an overlay element relative to an anchor element.\n */\nexport function calculateAnchorPosition(\n anchorRect: DOMRect,\n overlayRect: DOMRect,\n position: AXConnectedPosition,\n): { top: number; left: number } {\n let left = 0;\n let top = 0;\n\n // Calculate origin point on anchor\n switch (position.originX) {\n case 'start':\n left = anchorRect.left;\n break;\n case 'center':\n left = anchorRect.left + anchorRect.width / 2;\n break;\n case 'end':\n left = anchorRect.right;\n break;\n }\n\n switch (position.originY) {\n case 'top':\n top = anchorRect.top;\n break;\n case 'center':\n top = anchorRect.top + anchorRect.height / 2;\n break;\n case 'bottom':\n top = anchorRect.bottom;\n break;\n }\n\n // Adjust for overlay alignment\n switch (position.overlayX) {\n case 'start':\n // left stays the same\n break;\n case 'center':\n left -= overlayRect.width / 2;\n break;\n case 'end':\n left -= overlayRect.width;\n break;\n }\n\n switch (position.overlayY) {\n case 'top':\n // top stays the same\n break;\n case 'center':\n top -= overlayRect.height / 2;\n break;\n case 'bottom':\n top -= overlayRect.height;\n break;\n }\n\n // Apply offsets\n if (position.offsetX) {\n left += position.offsetX;\n }\n if (position.offsetY) {\n top += position.offsetY;\n }\n\n return { top, left };\n}\n\n/**\n * Checks if the overlay position fits within the viewport.\n */\nexport function fitsInViewport(\n position: { top: number; left: number },\n overlayRect: DOMRect,\n viewportWidth: number,\n viewportHeight: number,\n): boolean {\n return (\n position.left >= 0 &&\n position.top >= 0 &&\n position.left + overlayRect.width <= viewportWidth &&\n position.top + overlayRect.height <= viewportHeight\n );\n}\n\n/**\n * Clamps a position to ensure the overlay stays within viewport bounds.\n */\nexport function clampToViewport(\n coords: { top: number; left: number },\n overlayRect: DOMRect,\n viewportWidth: number,\n viewportHeight: number,\n margin = 4,\n): { top: number; left: number } {\n const clampedLeft = Math.max(margin, Math.min(coords.left, viewportWidth - overlayRect.width - margin));\n const clampedTop = Math.max(margin, Math.min(coords.top, viewportHeight - overlayRect.height - margin));\n\n return { top: clampedTop, left: clampedLeft };\n}\n\n/**\n * Free vertical space on the anchor side used by a connected position.\n */\nfunction verticalFreeSpaceForPosition(\n anchorRect: DOMRect,\n position: AXConnectedPosition,\n viewportHeight: number,\n): number {\n if (position.originY === 'bottom' && position.overlayY === 'top') {\n return viewportHeight - anchorRect.bottom;\n }\n if (position.originY === 'top' && position.overlayY === 'bottom') {\n return anchorRect.top;\n }\n return viewportHeight;\n}\n\nfunction isVerticalAnchorPlacement(position: AXConnectedPosition): boolean {\n return (\n (position.originY === 'bottom' && position.overlayY === 'top') ||\n (position.originY === 'top' && position.overlayY === 'bottom')\n );\n}\n\nfunction clampHorizontalToViewport(\n coords: { top: number; left: number },\n overlayRect: DOMRect,\n viewportWidth: number,\n margin = 4,\n): { top: number; left: number } {\n const clampedLeft = Math.max(margin, Math.min(coords.left, viewportWidth - overlayRect.width - margin));\n return { top: coords.top, left: clampedLeft };\n}\n\n/**\n * Finds the best position for an overlay that fits in the viewport.\n */\nexport function findBestPosition(\n anchorRect: DOMRect,\n overlayRect: DOMRect,\n positions: AXConnectedPosition[],\n viewportWidth: number,\n viewportHeight: number,\n): { position: AXConnectedPosition; coords: { top: number; left: number } } {\n for (const position of positions) {\n const coords = calculateAnchorPosition(anchorRect, overlayRect, position);\n\n if (fitsInViewport(coords, overlayRect, viewportWidth, viewportHeight)) {\n return { position, coords };\n }\n }\n\n // Fallback: anchor to the side with the most vertical room; do not slide over the anchor.\n let bestPosition = positions[0];\n let bestSpace = verticalFreeSpaceForPosition(anchorRect, bestPosition, viewportHeight);\n for (let i = 1; i < positions.length; i++) {\n const space = verticalFreeSpaceForPosition(anchorRect, positions[i], viewportHeight);\n if (space > bestSpace) {\n bestSpace = space;\n bestPosition = positions[i];\n }\n }\n\n const fallbackCoords = calculateAnchorPosition(anchorRect, overlayRect, bestPosition);\n const clampedCoords = isVerticalAnchorPlacement(bestPosition)\n ? clampHorizontalToViewport(fallbackCoords, overlayRect, viewportWidth)\n : clampToViewport(fallbackCoords, overlayRect, viewportWidth, viewportHeight);\n return { position: bestPosition, coords: clampedCoords };\n}\n","import { convertToPlacement } from '@acorex/cdk/common';\nimport { AXComponentContent, AXComponentService } from '@acorex/core/components';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXZIndexService, AXZToken } from '@acorex/core/z-index';\nimport { DOCUMENT } from '@angular/common';\nimport { ComponentRef, ElementRef, EmbeddedViewRef, inject, Injectable, TemplateRef } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport {\n applyOverlayAnimationClasses,\n getOverlayAnimationTarget,\n playOverlayLeaveAnimation,\n prefersReducedMotion,\n resolveOverlayAnimation,\n} from './overlay-animation';\nimport { applyVisualContext, resolveContextElement, resolveVisualContext } from './overlay-visual-context';\nimport { AXOverlayOptions, AXOverlayRef, findBestPosition } from './overlay.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXOverlayService {\n private componentService = inject(AXComponentService);\n private document = inject(DOCUMENT);\n private zIndexService = inject(AXZIndexService);\n private _platform: AXPlatform = inject(AXPlatform);\n private router = inject(Router, { optional: true });\n\n /**\n * Creates an overlay with optional anchor-based positioning.\n * @param content - Component or template to display\n * @param options - Configuration options for the overlay\n * @returns Promise<AXOverlayRef> - Reference to the created overlay\n */\n async create<T = unknown>(content: AXComponentContent<T>, options?: AXOverlayOptions): Promise<AXOverlayRef<T>> {\n let instance: EmbeddedViewRef<T> | ComponentRef<T>;\n let overlayContainer: HTMLElement | null = null;\n let backdropElement: HTMLElement | null = null;\n let isDisposed = false;\n let navigationSubscription: Subscription | null = null;\n\n // Acquire a z-index token for this overlay\n let zToken: AXZToken | null = this.zIndexService.acquire(options?.zIndexBase);\n\n if (content instanceof TemplateRef) {\n instance = this.componentService.createFromTemplate<T>(content);\n } else {\n instance = this.componentService.createFromComponent<T>(content);\n if (options?.inputs) {\n Object.entries(options.inputs).forEach((c) => {\n (instance as ComponentRef<T>).setInput(c[0], c[1]);\n });\n }\n }\n\n // Get the host element\n const hostElement = this.getHostElement(instance);\n\n // Create backdrop if enabled. Mobile action sheets also get one: their dimming\n // used to be a box-shadow spread, which paints the scrim but does not hit-test,\n // so controls behind the sheet stayed clickable.\n if (options?.backdrop?.enabled || this.needsActionSheetBackdrop(options)) {\n backdropElement = this.createBackdrop(this.withActionSheetBackdrop(options), zToken.zIndex);\n }\n\n // If anchor options are provided, set up positioned overlay (for tooltips, popovers)\n if (options?.anchorOptions?.anchor) {\n overlayContainer = this.createOverlayContainer(hostElement, options, zToken.zIndex);\n this.positionOverlay(overlayContainer, options);\n } else if (options?.centered === false) {\n // Non-centered positioned overlay (for toasts, notifications)\n overlayContainer = this.createOverlayContainer(hostElement, options, zToken.zIndex);\n } else {\n // No anchor - create centered overlay (for modals, popups)\n overlayContainer = this.createCenteredOverlayContainer(hostElement, options, zToken.zIndex);\n }\n\n const updatePosition = () => {\n if (overlayContainer && options?.anchorOptions?.anchor) {\n this.positionOverlay(overlayContainer, options);\n }\n };\n\n const animation = resolveOverlayAnimation(options?.animation);\n const reduceMotion = prefersReducedMotion(this.document);\n\n const dispose = () => {\n if (isDisposed) return;\n isDisposed = true;\n\n navigationSubscription?.unsubscribe();\n navigationSubscription = null;\n\n const finish = () => {\n backdropElement?.remove();\n overlayContainer?.remove();\n instance.destroy();\n this.zIndexService.release(zToken);\n zToken = null;\n options?.onDispose?.();\n };\n\n const animationTarget = overlayContainer ? getOverlayAnimationTarget(overlayContainer) : null;\n if (!animationTarget || !animation.leave.length || reduceMotion) {\n finish();\n return;\n }\n\n if (overlayContainer) {\n overlayContainer.style.pointerEvents = 'none';\n }\n if (backdropElement) {\n backdropElement.style.pointerEvents = 'none';\n }\n\n void playOverlayLeaveAnimation(animationTarget, animation.enter, animation.leave, this.document).finally(finish);\n };\n\n const bringToFront = () => {\n if (!zToken || isDisposed) return;\n zToken = this.zIndexService.bringToFront(zToken);\n if (backdropElement) {\n backdropElement.style.zIndex = String(zToken.zIndex);\n }\n if (overlayContainer) {\n overlayContainer.style.zIndex = String(zToken.zIndex);\n }\n };\n\n // Set up backdrop click handler\n if (backdropElement && options?.backdrop?.closeOnClick) {\n backdropElement.addEventListener('click', () => {\n dispose();\n });\n }\n\n if (options?.closeOnNavigation !== false && this.router) {\n navigationSubscription = this.router.events\n .pipe(filter((event): event is NavigationStart => event instanceof NavigationStart))\n .subscribe(() => {\n dispose();\n });\n }\n\n this.applyOverlayVisualContext(options, overlayContainer);\n\n const animationTarget = overlayContainer ? getOverlayAnimationTarget(overlayContainer) : null;\n if (animationTarget && animation.enter.length && !reduceMotion) {\n applyOverlayAnimationClasses(animationTarget, animation.enter);\n }\n\n return {\n instance,\n updatePosition,\n dispose,\n overlayElement: overlayContainer,\n backdropElement,\n zToken,\n bringToFront,\n };\n }\n\n /**\n * Mobile action sheets need a hit-testable scrim even when the caller did not\n * ask for a backdrop. An explicit `backdrop.enabled: false` opts out.\n */\n private needsActionSheetBackdrop(options: AXOverlayOptions | undefined): boolean {\n return !!options?.actionSheetStyle && this._platform.is('SM') && options?.backdrop?.enabled !== false;\n }\n\n /**\n * Fills in the action-sheet scrim when the caller did not configure a backdrop.\n * Outside-click closing stays with the popover (`clickOut`); this layer only\n * intercepts hits so the page behind the sheet cannot be clicked.\n */\n private withActionSheetBackdrop(options: AXOverlayOptions | undefined): AXOverlayOptions | undefined {\n if (!this.needsActionSheetBackdrop(options) || options?.backdrop?.enabled) {\n return options;\n }\n return {\n ...options,\n backdrop: {\n enabled: true,\n background: true,\n },\n };\n }\n\n /**\n * Creates a backdrop element.\n */\n private createBackdrop(options: AXOverlayOptions | undefined, zIndex: number): HTMLElement {\n const backdrop = this.document.createElement('div');\n backdrop.classList.add('ax-overlay-backdrop');\n\n if (options?.backdrop?.backdropClass) {\n backdrop.classList.add(options.backdrop.backdropClass);\n }\n\n // Style the backdrop\n backdrop.style.position = 'fixed';\n backdrop.style.top = '0';\n backdrop.style.left = '0';\n backdrop.style.width = '100%';\n backdrop.style.height = '100%';\n backdrop.style.zIndex = String(zIndex);\n backdrop.style.pointerEvents = 'auto';\n backdrop.style.touchAction = 'none';\n\n if (options?.backdrop?.background) {\n backdrop.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';\n }\n\n this.document.body.appendChild(backdrop);\n return backdrop;\n }\n\n /**\n * Creates a centered overlay container (for modals/popups).\n */\n private createCenteredOverlayContainer(\n content: HTMLElement,\n options: AXOverlayOptions | undefined,\n zIndex: number,\n ): HTMLElement {\n const container = this.document.createElement('div');\n container.classList.add('ax-overlay-container', 'ax-overlay-centered');\n\n // Add custom panel classes\n if (options?.panelClass) {\n const classes = Array.isArray(options.panelClass) ? options.panelClass : [options.panelClass];\n classes.forEach((cls) => {\n if (cls) {\n container.classList.add(cls);\n }\n });\n }\n\n // Set styles for centered positioning\n container.style.position = 'fixed';\n container.style.top = '0';\n container.style.left = '0';\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.display = 'flex';\n container.style.alignItems = 'center';\n container.style.justifyContent = 'center';\n container.style.zIndex = String(zIndex);\n\n // Create inner wrapper for the content\n const contentWrapper = this.document.createElement('div');\n contentWrapper.classList.add('ax-overlay-content');\n\n // Apply width if provided\n if (options?.width) {\n contentWrapper.style.width = options.width;\n } else if (this.hasPanelClass(options?.panelClass, 'ax-popup-overlay')) {\n contentWrapper.style.width = 'auto';\n contentWrapper.style.maxWidth = '100%';\n }\n\n // Move content into wrapper\n contentWrapper.appendChild(content);\n container.appendChild(contentWrapper);\n\n // Append to body\n this.document.body.appendChild(container);\n\n return container;\n }\n\n /**\n * Gets the host element from a ComponentRef or EmbeddedViewRef.\n */\n private hasPanelClass(panelClass: string | string[] | undefined, className: string): boolean {\n if (!panelClass) return false;\n const classes = Array.isArray(panelClass) ? panelClass : [panelClass];\n return classes.some((cls) => cls === className);\n }\n\n /**\n * Gets the host element from a ComponentRef or EmbeddedViewRef.\n */\n private getHostElement<T>(instance: EmbeddedViewRef<T> | ComponentRef<T>): HTMLElement {\n if (instance instanceof ComponentRef) {\n return instance.location.nativeElement;\n } else {\n // EmbeddedViewRef - get the first root node\n return instance.rootNodes[0] as HTMLElement;\n }\n }\n\n /**\n * Creates an overlay container element and appends the content to it.\n */\n private createOverlayContainer(\n content: HTMLElement,\n options: AXOverlayOptions | undefined,\n zIndex: number,\n ): HTMLElement {\n const container = this.document.createElement('div');\n const pane = this.document.createElement('div');\n container.classList.add('ax-overlay-container');\n\n if (Array.isArray(options.panelClass)) {\n const check = options.panelClass.some((element) => {\n return element === 'ax-action-sheet-panel';\n });\n if (!check) pane.classList.add('ax-overlay-pane');\n }\n\n if (options.actionSheetStyle && this._platform.is('SM')) pane.classList.add('ax-overlay-actionsheet');\n\n // Add custom panel classes\n if (options?.panelClass) {\n const classes = Array.isArray(options.panelClass) ? options.panelClass : [options.panelClass];\n classes.forEach((cls) => {\n if (cls) {\n container.classList.add(cls);\n }\n });\n }\n\n // Set initial styles for positioning\n container.style.position = 'fixed';\n container.style.zIndex = String(zIndex);\n container.style.maxWidth = '100%';\n container.style.maxHeight = '100%';\n\n if (options?.actionSheetStyle) {\n container.style.width = this._platform.is('SM') ? '100%' : 'fit-content';\n } else {\n container.style.width = options?.width || 'fit-content';\n }\n\n // Move content into container\n pane.appendChild(content);\n container.appendChild(pane);\n\n // Append to body\n this.document.body.appendChild(container);\n\n return container;\n }\n\n /**\n * Positions the overlay container relative to the anchor element.\n */\n private positionOverlay(container: HTMLElement, options: AXOverlayOptions): void {\n if (options.actionSheetStyle && this._platform.is('SM')) {\n container.style.bottom = `0px`;\n container.style.left = `0px`;\n container.style.right = `0px`;\n container.style.width = 'auto';\n return;\n }\n\n const anchorOptions = options.anchorOptions;\n if (!anchorOptions?.anchor) return;\n\n const anchorElement =\n anchorOptions.anchor instanceof ElementRef ? anchorOptions.anchor.nativeElement : anchorOptions.anchor;\n\n const anchorRect = anchorElement.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const viewportWidth = this.document.documentElement.clientWidth;\n const viewportHeight = this.document.documentElement.clientHeight;\n\n // Get positions from placement\n let positions = convertToPlacement(anchorOptions.placement ?? 'bottom');\n if (positions.length === 0) {\n positions = convertToPlacement('bottom');\n }\n\n // Apply custom offsets to positions with direction-aware inversion\n // When position flips, the offset should also be inverted to maintain the intended gap\n if (anchorOptions.offsetX || anchorOptions.offsetY) {\n const primaryPosition = positions[0];\n positions = positions.map((p) => {\n let adjustedOffsetX = anchorOptions.offsetX ?? 0;\n let adjustedOffsetY = anchorOptions.offsetY ?? 0;\n\n // Invert offsetY when vertical direction flips\n // (from bottom to top or vice versa)\n if (primaryPosition.originY !== p.originY) {\n adjustedOffsetY = -adjustedOffsetY;\n }\n\n // Invert offsetX when horizontal direction flips\n // (from end to start or vice versa)\n if (primaryPosition.originX !== p.originX) {\n adjustedOffsetX = -adjustedOffsetX;\n }\n\n return {\n ...p,\n offsetX: (p.offsetX ?? 0) + adjustedOffsetX,\n offsetY: (p.offsetY ?? 0) + adjustedOffsetY,\n };\n });\n }\n\n // Find the best position that fits in viewport\n const { coords } = anchorOptions.autoFlip\n ? findBestPosition(anchorRect, containerRect, positions, viewportWidth, viewportHeight)\n : {\n coords: {\n top:\n positions[0].originY === 'bottom'\n ? anchorRect.bottom + (positions[0].offsetY ?? 0)\n : anchorRect.top - containerRect.height + (positions[0].offsetY ?? 0),\n left: anchorRect.left + (positions[0].offsetX ?? 0),\n },\n };\n\n // Apply position\n container.style.top = `${coords.top}px`;\n container.style.left = `${coords.left}px`;\n }\n\n private applyOverlayVisualContext(options: AXOverlayOptions | undefined, targetElement: HTMLElement | null): void {\n if (!targetElement) return;\n\n const fallbackRoot = this.document.documentElement;\n const source = resolveContextElement(options?.contextElement, options?.anchorOptions?.anchor, fallbackRoot);\n const context = resolveVisualContext(source, fallbackRoot);\n const scope = options?.visualContextScope ?? 'full';\n applyVisualContext(targetElement, context, scope);\n\n const pane = targetElement.querySelector('.ax-overlay-pane');\n // Pane is a separate stacking context; mirror context classes so portaled content\n // inherits the same CSS variables when the pane is not a descendant of the container.\n if (pane instanceof HTMLElement) {\n applyVisualContext(pane, context, scope);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}