@filip.mazev/blocks 1.4.7 → 1.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"filip.mazev-blocks-primitives.mjs","names":[],"sources":["../../../projects/blocks/primitives/components/tooltip/tooltip.ts","../../../projects/blocks/primitives/components/tooltip/tooltip.html","../../../projects/blocks/primitives/components/menu/menu.ts","../../../projects/blocks/primitives/components/menu/menu.html","../../../projects/blocks/primitives/components/menu-item/menu-item.ts","../../../projects/blocks/primitives/components/menu-item/menu-item.html","../../../projects/blocks/primitives/directives/tooltip.directive.ts","../../../projects/blocks/primitives/directives/overlay-context.token.ts","../../../projects/blocks/primitives/directives/dropdown.directive.ts","../../../projects/blocks/primitives/directives/context-menu.directive.ts","../../../projects/blocks/primitives/directives/overlay-context.directive.ts"],"sourcesContent":["import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, input, ChangeDetectionStrategy } from '@angular/core';\nimport { BX_I18N, BxA11yService, isTextWithKey, ResolvableText } from '@filip.mazev/blocks/core';\n\n@Component({\n selector: 'bx-tooltip',\n imports: [BxSurfaceDirective],\n templateUrl: './tooltip.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './tooltip.scss'\n})\nexport class Tooltip {\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly a11y = inject(BxA11yService);\n\n protected readonly resolvedText = computed(() => {\n this.i18n?.version?.();\n\n const textData = this.text();\n if (!textData) return undefined;\n\n if (isTextWithKey(textData)) {\n return this.i18n?.translate(textData.key) ?? textData.key;\n }\n\n return textData;\n });\n\n public readonly isAnimated = computed(() => !this.a11y.isReducedMotion());\n public readonly text = input.required<ResolvableText>();\n}\n","<div class=\"bx-tooltip-surface\" bxSurface [class.bx-tooltip-animated]=\"isAnimated()\">\n @if (resolvedText()) {\n {{ resolvedText() }}\n }\n</div>","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { BxA11yService } from '@filip.mazev/blocks/core';\n\n@Component({\n selector: 'bx-menu',\n imports: [BxSurfaceDirective],\n templateUrl: './menu.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './menu.scss'\n})\nexport class Menu {\n private readonly a11y = inject(BxA11yService);\n\n public readonly isAnimated = computed(() => {\n return !this.a11y.isReducedMotion();\n });\n}\n","<div bxSurface role=\"menu\" class=\"bx-menu-wrapper\" [class.bx-menu-animated]=\"isAnimated()\">\n <ng-content></ng-content>\n</div>\n","import { BX_I18N, BxA11yService, BxShortcutService, isTextWithKey, ResolvableShortcut, ResolvableText } from '@filip.mazev/blocks/core';\nimport { Component, computed, inject, input, output, ChangeDetectionStrategy } from '@angular/core';\nimport { Icon, IconName } from '@filip.mazev/blocks/icons';\nimport { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\n\n@Component({\n selector: 'bx-menu-item',\n imports: [Icon, BxSurfaceDirective],\n templateUrl: './menu-item.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './menu-item.scss'\n})\nexport class MenuItem {\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly a11y = inject(BxA11yService);\n private readonly bxShortcutService = inject(BxShortcutService);\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n\n const label = this.label();\n if (!label) return undefined;\n\n if (isTextWithKey(label)) {\n return this.i18n?.translate(label.key) ?? label.key;\n }\n return label;\n });\n\n protected readonly resolvedShortcut = computed(() => {\n return this.bxShortcutService.resolve(this.shortcut());\n });\n\n public readonly isAnimated = computed(() => !this.a11y.isReducedMotion());\n\n public readonly icon = input<IconName | undefined>(undefined);\n public readonly endIcon = input<IconName | undefined>(undefined);\n public readonly label = input<ResolvableText | undefined>(undefined);\n public readonly wrapLabel = input(false);\n public readonly disabled = input(false);\n public readonly danger = input(false);\n\n public readonly shortcut = input<ResolvableShortcut | undefined>(undefined);\n\n public readonly action = output<MouseEvent>();\n\n protected onClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.action.emit(event);\n }\n}\n","<button bxSurface [bxSurfaceEmission]=\"danger() ? 'var(--bx-text-danger)' : 'var(--bx-primary)'\" type=\"button\" role=\"menuitem\" [disabled]=\"disabled()\" class=\"bx-menu-item-btn\" [class.is-disabled]=\"disabled()\" [class.is-danger]=\"danger()\"\n [class.bx-menu-item-animated]=\"isAnimated()\" (click)=\"onClick($event)\">\n\n @if (icon()) {\n <bx-icon class=\"bx-icon-pos-start\" [name]=\"icon()!\" size=\"20\" />\n }\n\n <span class=\"bx-menu-item-content\" [class.bx-menu-item-content-wrapped]=\"wrapLabel()\">\n @if (resolvedLabel()) {\n {{ resolvedLabel() }}\n } @else {\n <ng-content></ng-content>\n }\n </span>\n\n @if (resolvedShortcut()) {\n <span class=\"bx-menu-item-shortcut\">\n @for (key of resolvedShortcut(); track $index) {\n <kbd>{{ key }}</kbd>\n }\n </span>\n }\n\n @if (endIcon()) {\n <bx-icon class=\"bx-icon-pos-end\" [name]=\"endIcon()!\" size=\"20\" />\n }\n</button>\n","import { DestroyRef, Directive, ElementRef, HostListener, inject, input, NgZone } from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { BxA11yService, BxPlacement, BxOverlayPositionService, inheritOverlayTheme, ResolvableText, uuidv4 } from '@filip.mazev/blocks/core';\nimport { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { Tooltip } from '../components/tooltip/tooltip';\n\n@Directive({ selector: '[bxTooltip]' })\nexport class TooltipDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly positionBuilder = inject(BxOverlayPositionService);\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly id = `bx-tooltip-${uuidv4()}`;\n public readonly bxTooltip = input.required<ResolvableText>();\n public readonly placement = input<BxPlacement>('bottom');\n private overlayRef: OverlayRef | null = null;\n private transition?: ReturnType<typeof createGlassTransition>;\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n private positionSubscription?: { unsubscribe(): void };\n private keyboardSubscription?: { unsubscribe(): void };\n private revision = 0;\n private hovered = false;\n private focused = false;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.dispose());\n }\n\n public show(): void {\n if (!this.bxTooltip()) return;\n const revision = ++this.revision;\n if (!this.overlayRef) {\n const strategy = this.positionBuilder.getElementStrategy(this.elementRef.nativeElement, this.placement()).withFlexibleDimensions(false);\n this.overlayRef = this.overlay.create({\n positionStrategy: strategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: false,\n panelClass: 'bx-tooltip-pane'\n });\n\n const pane = this.overlayRef.overlayElement;\n pane.id = this.id;\n pane.setAttribute('role', 'tooltip');\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(this.elementRef.nativeElement, pane));\n this.disconnectLighting = inheritGlassLighting(pane, this.elementRef.nativeElement);\n\n const component = this.overlayRef.attach(new ComponentPortal(Tooltip));\n // CDK enables pane pointer events during attach. Reset afterwards so the\n // emerging tooltip cannot steal hover from small or nested triggers.\n pane.style.pointerEvents = 'none';\n this.keyboardSubscription = this.overlayRef.keydownEvents().subscribe((event) => this.onEscape(event));\n component.setInput('text', this.bxTooltip());\n component.changeDetectorRef.detectChanges();\n const positionArrow = () => {\n const trigger = this.elementRef.nativeElement.getBoundingClientRect();\n const bounds = pane.getBoundingClientRect();\n pane.style.setProperty('--bx-tooltip-arrow-x', `${trigger.left + trigger.width / 2 - bounds.left}px`);\n pane.style.setProperty('--bx-tooltip-arrow-y', `${trigger.top + trigger.height / 2 - bounds.top}px`);\n this.transition?.refresh();\n };\n this.positionSubscription = strategy.positionChanges.subscribe(positionArrow);\n this.overlayRef.updatePosition();\n positionArrow();\n\n if (!this.a11y.isReducedMotion()) {\n this.transition = this.zone.runOutsideAngular(() => createGlassTransition(this.elementRef.nativeElement, pane));\n }\n }\n\n const source = this.elementRef.nativeElement;\n const ids = new Set((source.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean));\n\n ids.add(this.id);\n source.setAttribute('aria-describedby', [...ids].join(' '));\n\n void Promise.resolve(this.zone.runOutsideAngular(() => this.transition?.enter())).catch(() => {\n if (revision === this.revision) {\n this.transition?.destroy();\n this.transition = undefined;\n }\n });\n }\n\n public hide(): void {\n const revision = ++this.revision;\n this.removeDescription();\n if (!this.overlayRef) return;\n const transition = this.transition;\n if (transition && !this.a11y.isReducedMotion()) {\n void this.zone\n .runOutsideAngular(() => transition.exit())\n .then(() => {\n if (revision === this.revision) this.dispose();\n })\n .catch(() => {\n if (revision === this.revision) this.dispose();\n });\n } else this.dispose();\n }\n\n @HostListener('mouseenter')\n protected onEnter(): void {\n this.hovered = true;\n this.show();\n }\n\n @HostListener('mouseleave')\n protected onLeave(): void {\n this.hovered = false;\n if (!this.focused) this.hide();\n }\n\n @HostListener('focusin')\n protected onFocus(): void {\n this.focused = true;\n this.show();\n }\n\n @HostListener('focusout', ['$event'])\n protected onBlur(event: FocusEvent): void {\n if (event.relatedTarget instanceof Node && this.elementRef.nativeElement.contains(event.relatedTarget)) return;\n this.focused = false;\n if (!this.hovered) this.hide();\n }\n\n protected onEscape(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.overlayRef) {\n event.stopPropagation();\n this.hovered = false;\n this.focused = false;\n this.hide();\n }\n }\n\n private removeDescription(): void {\n const source = this.elementRef.nativeElement;\n const ids = (source.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter((id) => id && id !== this.id);\n if (ids.length) source.setAttribute('aria-describedby', ids.join(' '));\n else source.removeAttribute('aria-describedby');\n }\n\n private dispose(): void {\n this.removeDescription();\n this.keyboardSubscription?.unsubscribe();\n this.keyboardSubscription = undefined;\n this.positionSubscription?.unsubscribe();\n this.positionSubscription = undefined;\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.transition?.destroy();\n this.transition = undefined;\n this.overlayRef?.dispose();\n this.overlayRef = null;\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface IBxOverlayContext {\n useTopLayer?: boolean;\n}\n\nexport const BX_OVERLAY_CONTEXT = new InjectionToken<IBxOverlayContext>('BX_OVERLAY_CONTEXT');\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n DestroyRef,\n Directive,\n ElementRef,\n HostListener,\n NgZone,\n PLATFORM_ID,\n effect,\n inject,\n input,\n signal,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\nimport { FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { BxA11yService, BxPlacement, BxOverlayPositionService, inheritOverlayTheme } from '@filip.mazev/blocks/core';\nimport { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { BX_OVERLAY_CONTEXT } from './overlay-context.token';\nimport { Subscription } from 'rxjs';\n\nexport type DropdownTransition = 'none' | 'fade' | 'emerge';\nexport type DropdownState = 'closed' | 'opening' | 'open' | 'closing';\n\n@Directive({\n selector: '[bxDropdown]',\n exportAs: 'bxDropdown',\n standalone: true,\n host: {\n '[attr.aria-expanded]': 'isOpen()',\n '[attr.aria-haspopup]': '\"menu\"',\n '[attr.aria-controls]': 'overlayId()'\n }\n})\nexport class DropdownDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly positionBuilder = inject(BxOverlayPositionService);\n private readonly overlayContext = inject(BX_OVERLAY_CONTEXT, { optional: true });\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly vcr = inject(ViewContainerRef);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private readonly _isOpen = signal(false);\n protected readonly overlayId = signal<string | null>(null);\n public readonly isOpen = this._isOpen.asReadonly();\n private readonly _state = signal<DropdownState>('closed');\n public readonly state = this._state.asReadonly();\n\n public readonly bxDropdown = input.required<TemplateRef<unknown>>();\n public readonly placement = input<BxPlacement>('bottom');\n public readonly bxTransition = input<DropdownTransition>('fade');\n\n private overlayRef: OverlayRef | null = null;\n private transition: ReturnType<typeof createGlassTransition> | null = null;\n private subscriptions = new Subscription();\n private revision = 0;\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n ++this.revision;\n this.dispose();\n });\n\n effect(() => {\n if (this.a11y.isReducedMotion() && this.transition) {\n ++this.revision;\n this.transition.destroy();\n this.transition = null;\n if (this.isOpen()) this._state.set('open');\n else this.dispose();\n }\n });\n }\n\n @HostListener('click', ['$event'])\n public toggle(event?: MouseEvent): void {\n if (this.isDisabled()) return;\n event?.stopPropagation();\n if (this.isOpen()) this.close();\n else this.open();\n }\n\n @HostListener('keydown', ['$event'])\n public onTriggerKeydown(event: KeyboardEvent): void {\n if (this.bxTransition() === 'none' || this.isDisabled() || this.isEditing(event.target)) return;\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\n event.preventDefault();\n event.stopPropagation();\n this.open();\n const items = this.menuItems();\n const item = event.key === 'ArrowUp' ? items[items.length - 1] : items[0];\n item?.focus({ preventScroll: true });\n }\n\n public open(): void {\n if (!this.isBrowser || this.isOpen() || this.isDisabled()) return;\n const revision = ++this.revision;\n this._isOpen.set(true);\n this._state.set('opening');\n\n if (!this.overlayRef) this.attachOverlay();\n const overlay = this.overlayRef;\n if (!overlay) return;\n overlay.overlayElement.inert = false;\n overlay.overlayElement.style.removeProperty('pointer-events');\n\n if (this.bxTransition() !== 'none' && !this.a11y.isReducedMotion()) {\n const transition = (this.transition ??= this.zone.runOutsideAngular(() => createGlassTransition(this.elementRef.nativeElement, overlay.overlayElement)));\n void this.zone\n .runOutsideAngular(() => transition.enter())\n .then(() => {\n if (revision === this.revision && this.isOpen()) this.zone.run(() => this._state.set('open'));\n })\n .catch(() => {\n if (revision === this.revision && this.isOpen()) {\n this.transition?.destroy();\n this.transition = null;\n this._state.set('open');\n }\n });\n } else {\n this._state.set('open');\n }\n }\n\n public close(restoreFocus = false): void {\n if (!this.overlayRef || !this.isOpen()) return;\n const revision = ++this.revision;\n const overlay = this.overlayRef;\n this._isOpen.set(false);\n this._state.set('closing');\n\n const source = this.elementRef.nativeElement;\n if (restoreFocus || overlay.overlayElement.contains(source.ownerDocument.activeElement)) {\n source.focus({ preventScroll: true });\n }\n overlay.overlayElement.inert = true;\n overlay.overlayElement.style.pointerEvents = 'none';\n\n const transition = this.transition;\n if (transition && !this.a11y.isReducedMotion()) {\n void this.zone\n .runOutsideAngular(() => transition.exit())\n .then(() => {\n if (revision === this.revision && !this.isOpen()) this.zone.run(() => this.dispose());\n })\n .catch(() => {\n if (revision === this.revision && !this.isOpen()) this.dispose();\n });\n } else {\n this.dispose();\n }\n }\n\n @HostListener('document:click', ['$event'])\n public onDocumentClick(event: MouseEvent): void {\n if (!this.overlayRef?.hasAttached() || !this.isOpen()) return;\n const target = event.target as Node | null;\n if (!target || this.elementRef.nativeElement.contains(target)) return;\n const inside = this.overlayRef.overlayElement.contains(target);\n // Preserve existing menu item click-to-close behavior; embedded inputs can stay open.\n if (!inside || this.bxTransition() === 'none' || (target instanceof Element && target.closest('button, a, [role=\"menuitem\"]'))) {\n this.close();\n }\n }\n\n private attachOverlay(): void {\n const positionStrategy = this.positionBuilder.getElementStrategy(this.elementRef.nativeElement, this.placement(), 4);\n const overlay = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n usePopover:\n !!this.overlayContext?.useTopLayer ||\n !!this.elementRef.nativeElement.closest('dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]'),\n // A fading surface keeps its trigger reachable while it opens/closes.\n hasBackdrop: this.bxTransition() === 'none',\n backdropClass: 'cdk-overlay-transparent-backdrop'\n });\n this.overlayRef = overlay;\n this.overlayId.set(overlay.overlayElement.id || null);\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(this.elementRef.nativeElement, overlay.overlayElement));\n this.disconnectLighting = inheritGlassLighting(overlay.overlayElement, this.elementRef.nativeElement);\n this.subscriptions = new Subscription();\n this.trackScroll(overlay, positionStrategy);\n this.subscriptions.add(overlay.backdropClick().subscribe(() => this.close()));\n this.subscriptions.add(\n overlay.outsidePointerEvents().subscribe((event) => {\n if (!this.elementRef.nativeElement.contains(event.target as Node)) this.close();\n })\n );\n this.subscriptions.add(\n overlay.keydownEvents().subscribe((event) => {\n if (event.key === 'Escape' && this.isOpen()) {\n event.preventDefault();\n event.stopPropagation();\n this.close(true);\n } else if (!event.defaultPrevented && this.bxTransition() !== 'none' && this.isOpen()) {\n this.navigateMenu(event);\n }\n })\n );\n this.subscriptions.add(\n positionStrategy.positionChanges.subscribe(() => {\n this.zone.runOutsideAngular(() => this.transition?.refresh());\n })\n );\n const view = overlay.attach(new TemplatePortal(this.bxDropdown(), this.vcr));\n view.detectChanges();\n overlay.updatePosition();\n }\n\n private trackScroll(overlay: OverlayRef, positionStrategy: FlexibleConnectedPositionStrategy): void {\n const source = this.elementRef.nativeElement;\n const view = source.ownerDocument.defaultView;\n if (!view) return;\n this.zone.runOutsideAngular(() => {\n const reposition = (event: Event) => {\n const target = event.target;\n // Capture viewport and ancestor scrolling before document-level effects.\n // Nested scrollers do not need to register with CDK's ScrollDispatcher.\n // Reuse the selected placement without resetting styles and measuring\n // all fallback positions on every scroll event. Resize still recalculates.\n if (overlay.hasAttached() && (target === view || (target instanceof Node && target.contains(source)))) positionStrategy.reapplyLastPosition();\n };\n view.addEventListener('scroll', reposition, { capture: true, passive: true });\n this.subscriptions.add(() => view.removeEventListener('scroll', reposition, true));\n });\n }\n\n private isDisabled(): boolean {\n const element = this.elementRef.nativeElement;\n return element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true';\n }\n\n private menuItems(): HTMLElement[] {\n const pane = this.overlayRef?.overlayElement;\n if (!pane) return [];\n return Array.from(pane.querySelectorAll<HTMLElement>('button, a[href], [role=\"menuitem\"]')).filter((item) => {\n if (item.matches(':disabled, [disabled], [aria-disabled=\"true\"], .is-disabled')) return false;\n if (item.closest('[hidden], [inert], [aria-hidden=\"true\"]')) return false;\n const style = item.ownerDocument.defaultView?.getComputedStyle(item);\n return style?.display !== 'none' && style?.visibility !== 'hidden' && item.getClientRects().length > 0;\n });\n }\n\n private navigateMenu(event: KeyboardEvent): void {\n if (this.isEditing(event.target) || !(event.target instanceof Node) || !this.overlayRef?.overlayElement.contains(event.target)) return;\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n const items = this.menuItems();\n if (!items.length) return;\n const current = items.indexOf(this.elementRef.nativeElement.ownerDocument.activeElement as HTMLElement);\n let index: number;\n if (event.key === 'Home') index = 0;\n else if (event.key === 'End') index = items.length - 1;\n else if (event.key === 'ArrowDown') index = current < 0 ? 0 : (current + 1) % items.length;\n else index = current < 0 ? items.length - 1 : (current - 1 + items.length) % items.length;\n event.preventDefault();\n event.stopPropagation();\n items[index].focus({ preventScroll: true });\n }\n\n private isEditing(target: EventTarget | null): boolean {\n return target instanceof Element && !!target.closest('input, textarea, select, [contenteditable]:not([contenteditable=\"false\"]), [role=\"textbox\"]');\n }\n\n private dispose(): void {\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.transition?.destroy();\n this.transition = null;\n this.subscriptions.unsubscribe();\n this.overlayRef?.dispose();\n this.overlayRef = null;\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n this.overlayId.set(null);\n this._isOpen.set(false);\n this._state.set('closed');\n }\n}\n","import { DestroyRef, Directive, ElementRef, HostListener, inject, input, NgZone, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { BxA11yService, BxOverlayPositionService, inheritOverlayTheme } from '@filip.mazev/blocks/core';\nimport { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { BX_OVERLAY_CONTEXT } from './overlay-context.token';\nimport { Subscription } from 'rxjs';\n\n@Directive({ selector: '[bxContextMenu]' })\nexport class ContextMenuDirective {\n private readonly overlay = inject(Overlay);\n private readonly positionBuilder = inject(BxOverlayPositionService);\n private readonly overlayContext = inject(BX_OVERLAY_CONTEXT, { optional: true });\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly vcr = inject(ViewContainerRef);\n public readonly bxContextMenu = input.required<TemplateRef<unknown>>();\n private overlayRef: OverlayRef | null = null;\n private transition?: ReturnType<typeof createGlassTransition>;\n private point?: HTMLElement;\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n private subscriptions = new Subscription();\n private revision = 0;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n ++this.revision;\n this.dispose();\n });\n }\n\n @HostListener('contextmenu', ['$event'])\n public open(event: MouseEvent): void {\n event.preventDefault();\n this.openAt(event.clientX, event.clientY);\n }\n\n public close(restoreFocus = false): void {\n if (!this.overlayRef) return;\n const revision = ++this.revision;\n if (restoreFocus || this.overlayRef.overlayElement.contains(this.elementRef.nativeElement.ownerDocument.activeElement)) {\n this.elementRef.nativeElement.focus({ preventScroll: true });\n }\n this.overlayRef.overlayElement.inert = true;\n const transition = this.transition;\n if (transition && !this.a11y.isReducedMotion()) {\n void this.zone\n .runOutsideAngular(() => transition.exit())\n .then(() => {\n if (revision === this.revision) this.dispose();\n })\n .catch(() => {\n if (revision === this.revision) this.dispose();\n });\n } else this.dispose();\n }\n\n @HostListener('keydown', ['$event'])\n protected onKey(event: KeyboardEvent): void {\n if (event.key !== 'ContextMenu' && !(event.shiftKey && event.key === 'F10')) return;\n event.preventDefault();\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n this.openAt(rect.left + Math.min(24, rect.width / 2), rect.bottom);\n this.items()[0]?.focus();\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement | null;\n if (target && this.overlayRef?.overlayElement.contains(target) && target.closest('button, a, [role=\"menuitem\"]')) this.close();\n }\n\n private openAt(x: number, y: number): void {\n this.dispose();\n ++this.revision;\n const source = this.elementRef.nativeElement;\n this.overlayRef = this.overlay.create({\n positionStrategy: this.positionBuilder.getCoordinateStrategy(x, y),\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n usePopover: !!this.overlayContext?.useTopLayer || !!source.closest('dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]'),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop'\n });\n this.subscriptions = new Subscription();\n const win = source.ownerDocument.defaultView;\n if (win) {\n this.zone.runOutsideAngular(() => {\n const closeOnScroll = (event: Event) => {\n const target = event.target;\n if (this.overlayRef?.overlayElement.inert) return;\n if (target === win || (target instanceof Node && target.contains(source))) this.zone.run(() => this.close());\n };\n win.addEventListener('scroll', closeOnScroll, { capture: true, passive: true });\n this.subscriptions.add(() => win.removeEventListener('scroll', closeOnScroll, true));\n });\n }\n this.subscriptions.add(this.overlayRef.backdropClick().subscribe(() => this.close()));\n this.subscriptions.add(this.overlayRef.detachments().subscribe(() => this.dispose()));\n this.subscriptions.add(this.overlayRef.keydownEvents().subscribe((event) => this.onMenuKey(event)));\n const pane = this.overlayRef.overlayElement;\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(source, pane));\n this.disconnectLighting = inheritGlassLighting(pane, source);\n const view = this.overlayRef.attach(new TemplatePortal(this.bxContextMenu(), this.vcr));\n view.detectChanges();\n this.overlayRef.updatePosition();\n if (!this.a11y.isReducedMotion()) {\n const point = source.ownerDocument.createElement('span');\n point.setAttribute('aria-hidden', 'true');\n Object.assign(point.style, { position: 'fixed', left: `${x}px`, top: `${y}px`, width: '1px', height: '1px', pointerEvents: 'none' });\n source.ownerDocument.body.append(point);\n this.point = point;\n const transition = this.zone.runOutsideAngular(() => createGlassTransition(point, pane));\n this.transition = transition;\n void this.zone\n .runOutsideAngular(() => transition.enter())\n .catch(() => {\n this.transition?.destroy();\n this.transition = undefined;\n });\n }\n }\n\n private items(): HTMLElement[] {\n return Array.from(this.overlayRef?.overlayElement.querySelectorAll<HTMLElement>('button:not(:disabled), a[href], [role=\"menuitem\"]') ?? []).filter(\n (item) => !item.matches('[disabled], [aria-disabled=\"true\"]') && !item.closest('[hidden], [inert]')\n );\n }\n\n private onMenuKey(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.close(true);\n return;\n }\n if ((event.target as HTMLElement)?.closest('input,textarea,[contenteditable=\"true\"]')) return;\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n const items = this.items();\n if (!items.length) return;\n event.preventDefault();\n const current = items.indexOf(this.elementRef.nativeElement.ownerDocument.activeElement as HTMLElement);\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? items.length - 1\n : event.key === 'ArrowDown'\n ? (current + 1) % items.length\n : current < 0\n ? items.length - 1\n : (current - 1 + items.length) % items.length;\n items[next].focus();\n }\n\n private dispose(): void {\n this.subscriptions.unsubscribe();\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.transition?.destroy();\n this.transition = undefined;\n this.point?.remove();\n this.point = undefined;\n const overlay = this.overlayRef;\n this.overlayRef = null;\n overlay?.dispose();\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n }\n}\n","import { Directive, forwardRef, input } from '@angular/core';\nimport { BX_OVERLAY_CONTEXT, IBxOverlayContext } from './overlay-context.token';\n\n@Directive({\n selector: '[bxOverlayContext]',\n standalone: true,\n providers: [{ provide: BX_OVERLAY_CONTEXT, useExisting: forwardRef(() => BxOverlayContextDirective) }]\n})\nexport class BxOverlayContextDirective implements IBxOverlayContext {\n public readonly bxOverlayContext = input<IBxOverlayContext>({});\n\n public get useTopLayer(): boolean | undefined {\n return this.bxOverlayContext().useTopLayer;\n }\n}\n"],"mappings":";;;;;;;;;;AAWA,IAAa,UAAb,MAAa,QAAO;CACD,OAAO,OAAO,SAAS,EAAE,UAAU,KAAI,CAAE;CACzC,OAAO,OAAO,aAAa;CAEzB,eAAe,eAAc;EAC9C,KAAK,MAAM,UAAS;EAEpB,MAAM,WAAW,KAAK,KAAI;EAC1B,IAAI,CAAC,UAAU,OAAO;EAEtB,IAAI,cAAc,QAAQ,GACxB,OAAO,KAAK,MAAM,UAAU,SAAS,GAAG,KAAK,SAAS;EAGxD,OAAO;CACT,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAEc,aAAa,eAAe,CAAC,KAAK,KAAK,gBAAe,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CACzD,OAAO,MAAM,SAA0B,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAlB5C,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAO,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAP,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAO,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,MAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,UAAA;EAAA,UCXpB;EAIM,QAAA,CAAA,mlFAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MDEM;GAAkB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,UAAA,CAAA,WAAA;EAAA,CAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKjB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAO,YAAA,CAAA;EAPnB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAY,SACb,CAAC,kBAAkB;GAAC,iBAEZ,wBAAwB;GAAM,UAAA;GAAA,QAAA,CAAA,mlFAAA;EAAA,CAAA;;;;;;;;;;;AEGjD,IAAa,OAAb,MAAa,KAAI;CACE,OAAO,OAAO,aAAa;CAE5B,aAAa,eAAc;EACzC,OAAO,CAAC,KAAK,KAAK,gBAAe;CACnC,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CALS,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAI,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAJ,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAI,cAAA;EAAA,UAAA;EAAA,UAAA;EAAA,UCXjB;EAGA,QAAA,CAAA,uqCAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MDGY;GAAkB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,UAAA,CAAA,WAAA;EAAA,CAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKjB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAI,YAAA,CAAA;EAPhB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAS,SACV,CAAC,kBAAkB;GAAC,iBAEZ,wBAAwB;GAAM,UAAA;GAAA,QAAA,CAAA,uqCAAA;EAAA,CAAA;;;AEIjD,IAAa,WAAb,MAAa,SAAQ;CACF,OAAO,OAAO,SAAS,EAAE,UAAU,KAAI,CAAE;CACzC,OAAO,OAAO,aAAa;CAC3B,oBAAoB,OAAO,iBAAiB;CAE1C,gBAAgB,eAAc;EAC/C,KAAK,MAAM,UAAS;EAEpB,MAAM,QAAQ,KAAK,MAAK;EACxB,IAAI,CAAC,OAAO,OAAO;EAEnB,IAAI,cAAc,KAAK,GACrB,OAAO,KAAK,MAAM,UAAU,MAAM,GAAG,KAAK,MAAM;EAElD,OAAO;CACT,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAEiB,mBAAmB,eAAc;EAClD,OAAO,KAAK,kBAAkB,QAAQ,KAAK,SAAQ,CAAE;CACvD,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;CAEc,aAAa,eAAe,CAAC,KAAK,KAAK,gBAAe,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAEzD,OAAO,MAA4B,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAC7C,UAAU,MAA4B,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAChD,QAAQ,MAAkC,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACpD,YAAY,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CACxB,WAAW,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CACvB,SAAS,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAErB,WAAW,MAAsC,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAE3D,SAAS,OAAM;CAErB,QAAQ,OAAiB;EACjC,IAAI,KAAK,SAAQ,GAAI;GACnB,MAAM,eAAc;GACpB,MAAM,gBAAe;GACrB;EACF;EACA,KAAK,OAAO,KAAK,KAAK;CACxB;CAzCW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAQ,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAR,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAQ,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA,EAAA,QAAA,SAAA;EAAA,UAAA;EAAA,UCZrB;EA2BA,QAAA,CAAA,khEAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MDpBY;GAAI,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAkB,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,UAAA,CAAA,WAAA;EAAA,CAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKvB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAQ,YAAA,CAAA;EAPpB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAc,SACf,CAAC,MAAM,kBAAkB;GAAC,iBAElB,wBAAwB;GAAM,UAAA;GAAA,QAAA,CAAA,khEAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEDjD,IAAa,mBAAb,MAAa,iBAAgB;CACV,aAAa,OAAgC,UAAU;CACvD,UAAU,OAAO,OAAO;CACxB,kBAAkB,OAAO,wBAAwB;CACjD,OAAO,OAAO,aAAa;CAC3B,OAAO,OAAO,MAAM;CACpB,KAAK,cAAc,OAAM;CAC1B,YAAY,MAAM,SAA0B,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAC5C,YAAY,MAAmB,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAChD,aAAgC;CAChC;CACA;CACA;CACA;CACA;CACA,WAAW;CACX,UAAU;CACV,UAAU;CAElB,cAAA;EACE,OAAO,UAAU,CAAC,CAAC,gBAAgB,KAAK,QAAO,CAAE;CACnD;CAEO,OAAI;EACT,IAAI,CAAC,KAAK,UAAS,GAAI;EACvB,MAAM,WAAW,EAAE,KAAK;EACxB,IAAI,CAAC,KAAK,YAAY;GACpB,MAAM,WAAW,KAAK,gBAAgB,mBAAmB,KAAK,WAAW,eAAe,KAAK,UAAS,CAAE,CAAC,CAAC,uBAAuB,KAAK;GACtI,KAAK,aAAa,KAAK,QAAQ,OAAO;IACpC,kBAAkB;IAClB,gBAAgB,KAAK,QAAQ,iBAAiB,WAAU;IACxD,aAAa;IACb,YAAY;GACb,CAAA;GAED,MAAM,OAAO,KAAK,WAAW;GAC7B,KAAK,KAAK,KAAK;GACf,KAAK,aAAa,QAAQ,SAAS;GACnC,KAAK,kBAAkB,KAAK,KAAK,wBAAwB,oBAAoB,KAAK,WAAW,eAAe,IAAI,CAAC;GACjH,KAAK,qBAAqB,qBAAqB,MAAM,KAAK,WAAW,aAAa;GAElF,MAAM,YAAY,KAAK,WAAW,OAAO,IAAI,gBAAgB,OAAO,CAAC;GAGrE,KAAK,MAAM,gBAAgB;GAC3B,KAAK,uBAAuB,KAAK,WAAW,cAAa,CAAE,CAAC,WAAW,UAAU,KAAK,SAAS,KAAK,CAAC;GACrG,UAAU,SAAS,QAAQ,KAAK,UAAS,CAAE;GAC3C,UAAU,kBAAkB,cAAa;GACzC,MAAM,sBAAqB;IACzB,MAAM,UAAU,KAAK,WAAW,cAAc,sBAAqB;IACnE,MAAM,SAAS,KAAK,sBAAqB;IACzC,KAAK,MAAM,YAAY,wBAAwB,GAAG,QAAQ,OAAO,QAAQ,QAAQ,IAAI,OAAO,KAAI,GAAI;IACpG,KAAK,MAAM,YAAY,wBAAwB,GAAG,QAAQ,MAAM,QAAQ,SAAS,IAAI,OAAO,IAAG,GAAI;IACnG,KAAK,YAAY,QAAO;GAC1B;GACA,KAAK,uBAAuB,SAAS,gBAAgB,UAAU,aAAa;GAC5E,KAAK,WAAW,eAAc;GAC9B,cAAa;GAEb,IAAI,CAAC,KAAK,KAAK,gBAAe,GAC5B,KAAK,aAAa,KAAK,KAAK,wBAAwB,sBAAsB,KAAK,WAAW,eAAe,IAAI,CAAC;EAElH;EAEA,MAAM,SAAS,KAAK,WAAW;EAC/B,MAAM,MAAM,IAAI,KAAK,OAAO,aAAa,kBAAkB,KAAK,GAAA,CAAI,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO,CAAC;EAEhG,IAAI,IAAI,KAAK,EAAE;EACf,OAAO,aAAa,oBAAoB,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;EAE1D,AAAK,QAAQ,QAAQ,KAAK,KAAK,wBAAwB,KAAK,YAAY,MAAK,CAAE,CAAC,CAAC,CAAC,YAAW;GAC3F,IAAI,aAAa,KAAK,UAAU;IAC9B,KAAK,YAAY,QAAO;IACxB,KAAK,aAAa;GACpB;EACF,CAAC;CACH;CAEO,OAAI;EACT,MAAM,WAAW,EAAE,KAAK;EACxB,KAAK,kBAAiB;EACtB,IAAI,CAAC,KAAK,YAAY;EACtB,MAAM,aAAa,KAAK;EACxB,IAAI,cAAc,CAAC,KAAK,KAAK,gBAAe,GAC1C,AAAK,KAAK,KACP,wBAAwB,WAAW,KAAI,CAAE,CAAC,CAC1C,WAAU;GACT,IAAI,aAAa,KAAK,UAAU,KAAK,QAAO;EAC9C,CAAC,CAAC,CACD,YAAW;GACV,IAAI,aAAa,KAAK,UAAU,KAAK,QAAO;EAC9C,CAAC;OACE,KAAK,QAAO;CACrB;CAGU,UAAO;EACf,KAAK,UAAU;EACf,KAAK,KAAI;CACX;CAGU,UAAO;EACf,KAAK,UAAU;EACf,IAAI,CAAC,KAAK,SAAS,KAAK,KAAI;CAC9B;CAGU,UAAO;EACf,KAAK,UAAU;EACf,KAAK,KAAI;CACX;CAGU,OAAO,OAAiB;EAChC,IAAI,MAAM,yBAAyB,QAAQ,KAAK,WAAW,cAAc,SAAS,MAAM,aAAa,GAAG;EACxG,KAAK,UAAU;EACf,IAAI,CAAC,KAAK,SAAS,KAAK,KAAI;CAC9B;CAEU,SAAS,OAAoB;EACrC,IAAI,MAAM,QAAQ,YAAY,KAAK,YAAY;GAC7C,MAAM,gBAAe;GACrB,KAAK,UAAU;GACf,KAAK,UAAU;GACf,KAAK,KAAI;EACX;CACF;CAEQ,oBAAiB;EACvB,MAAM,SAAS,KAAK,WAAW;EAC/B,MAAM,OAAO,OAAO,aAAa,kBAAkB,KAAK,GAAA,CAAI,MAAM,KAAK,CAAC,CAAC,QAAQ,OAAO,MAAM,OAAO,KAAK,EAAE;EAC5G,IAAI,IAAI,QAAQ,OAAO,aAAa,oBAAoB,IAAI,KAAK,GAAG,CAAC;OAChE,OAAO,gBAAgB,kBAAkB;CAChD;CAEQ,UAAO;EACb,KAAK,kBAAiB;EACtB,KAAK,sBAAsB,YAAW;EACtC,KAAK,uBAAuB;EAC5B,KAAK,sBAAsB,YAAW;EACtC,KAAK,uBAAuB;EAC5B,KAAK,kBAAiB;EACtB,KAAK,kBAAkB;EACvB,KAAK,YAAY,QAAO;EACxB,KAAK,aAAa;EAClB,KAAK,YAAY,QAAO;EACxB,KAAK,aAAa;EAClB,KAAK,qBAAoB;EACzB,KAAK,qBAAqB;CAC5B;CAtJW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAgB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAhB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAgB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA,EAAA,WAAA;GAAA,cAAA;GAAA,cAAA;GAAA,WAAA;GAAA,YAAA;EAAA,EAAA;EAAA,UAAA;CAAA,CAAA;;AAAhB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAgB,YAAA,CAAA;EAD5B,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,cAAa,CAAE;;;;;;;;;;;;;;;;;;;;;GAgGnC,MAAA;GAAa,MAAA,CAAA,YAAY;;;GAMzB,MAAA;GAAa,MAAA,CAAA,YAAY;;;GAMzB,MAAA;GAAa,MAAA,CAAA,SAAS;;;GAMtB,MAAA;GAAa,MAAA,CAAA,YAAY,CAAC,QAAQ,CAAC;;;;ACnHtC,MAAa,qBAAqB,IAAI,eAAkC,oBAAoB;AC6B5F,IAAa,oBAAb,MAAa,kBAAiB;CACX,aAAa,OAAgC,UAAU;CACvD,UAAU,OAAO,OAAO;CACxB,kBAAkB,OAAO,wBAAwB;CACjD,iBAAiB,OAAO,oBAAoB,EAAE,UAAU,KAAI,CAAE;CAC9D,OAAO,OAAO,aAAa;CAC3B,OAAO,OAAO,MAAM;CACpB,MAAM,OAAO,gBAAgB;CAC7B,YAAY,kBAAkB,OAAO,WAAW,CAAC;CAEjD,UAAU,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CACrB,YAAY,OAAsB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAC1C,SAAS,KAAK,QAAQ,WAAU;CAC/B,SAAS,OAAsB,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CACzC,QAAQ,KAAK,OAAO,WAAU;CAE9B,aAAa,MAAM,SAAgC,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CACnD,YAAY,MAAmB,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CACxC,eAAe,MAA0B,QAAO,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAExD,aAAgC;CAChC,aAA8D;CAC9D,gBAAgB,IAAI,aAAY;CAChC,WAAW;CACX;CACA;CAER,cAAA;EACE,OAAO,UAAU,CAAC,CAAC,gBAAe;GAChC,EAAE,KAAK;GACP,KAAK,QAAO;EACd,CAAC;EAED,aAAY;GACV,IAAI,KAAK,KAAK,gBAAe,KAAM,KAAK,YAAY;IAClD,EAAE,KAAK;IACP,KAAK,WAAW,QAAO;IACvB,KAAK,aAAa;IAClB,IAAI,KAAK,OAAM,GAAI,KAAK,OAAO,IAAI,MAAM;SACpC,KAAK,QAAO;GACnB;EACF,CAAC;CACH;CAGO,OAAO,OAAkB;EAC9B,IAAI,KAAK,WAAU,GAAI;EACvB,OAAO,gBAAe;EACtB,IAAI,KAAK,OAAM,GAAI,KAAK,MAAK;OACxB,KAAK,KAAI;CAChB;CAGO,iBAAiB,OAAoB;EAC1C,IAAI,KAAK,aAAY,MAAO,UAAU,KAAK,WAAU,KAAM,KAAK,UAAU,MAAM,MAAM,GAAG;EACzF,IAAI,MAAM,QAAQ,eAAe,MAAM,QAAQ,WAAW;EAC1D,MAAM,eAAc;EACpB,MAAM,gBAAe;EACrB,KAAK,KAAI;EACT,MAAM,QAAQ,KAAK,UAAS;EAE5B,CADa,MAAM,QAAQ,YAAY,MAAM,MAAM,SAAS,KAAK,MAAM,GACvE,EAAM,MAAM,EAAE,eAAe,KAAI,CAAE;CACrC;CAEO,OAAI;EACT,IAAI,CAAC,KAAK,aAAa,KAAK,OAAM,KAAM,KAAK,WAAU,GAAI;EAC3D,MAAM,WAAW,EAAE,KAAK;EACxB,KAAK,QAAQ,IAAI,IAAI;EACrB,KAAK,OAAO,IAAI,SAAS;EAEzB,IAAI,CAAC,KAAK,YAAY,KAAK,cAAa;EACxC,MAAM,UAAU,KAAK;EACrB,IAAI,CAAC,SAAS;EACd,QAAQ,eAAe,QAAQ;EAC/B,QAAQ,eAAe,MAAM,eAAe,gBAAgB;EAE5D,IAAI,KAAK,aAAY,MAAO,UAAU,CAAC,KAAK,KAAK,gBAAe,GAAI;GAClE,MAAM,aAAc,KAAK,eAAe,KAAK,KAAK,wBAAwB,sBAAsB,KAAK,WAAW,eAAe,QAAQ,cAAc,CAAC;GACtJ,AAAK,KAAK,KACP,wBAAwB,WAAW,MAAK,CAAE,CAAC,CAC3C,WAAU;IACT,IAAI,aAAa,KAAK,YAAY,KAAK,OAAM,GAAI,KAAK,KAAK,UAAU,KAAK,OAAO,IAAI,MAAM,CAAC;GAC9F,CAAC,CAAC,CACD,YAAW;IACV,IAAI,aAAa,KAAK,YAAY,KAAK,OAAM,GAAI;KAC/C,KAAK,YAAY,QAAO;KACxB,KAAK,aAAa;KAClB,KAAK,OAAO,IAAI,MAAM;IACxB;GACF,CAAC;EACL,OACE,KAAK,OAAO,IAAI,MAAM;CAE1B;CAEO,MAAM,eAAe,OAAK;EAC/B,IAAI,CAAC,KAAK,cAAc,CAAC,KAAK,OAAM,GAAI;EACxC,MAAM,WAAW,EAAE,KAAK;EACxB,MAAM,UAAU,KAAK;EACrB,KAAK,QAAQ,IAAI,KAAK;EACtB,KAAK,OAAO,IAAI,SAAS;EAEzB,MAAM,SAAS,KAAK,WAAW;EAC/B,IAAI,gBAAgB,QAAQ,eAAe,SAAS,OAAO,cAAc,aAAa,GACpF,OAAO,MAAM,EAAE,eAAe,KAAI,CAAE;EAEtC,QAAQ,eAAe,QAAQ;EAC/B,QAAQ,eAAe,MAAM,gBAAgB;EAE7C,MAAM,aAAa,KAAK;EACxB,IAAI,cAAc,CAAC,KAAK,KAAK,gBAAe,GAC1C,AAAK,KAAK,KACP,wBAAwB,WAAW,KAAI,CAAE,CAAC,CAC1C,WAAU;GACT,IAAI,aAAa,KAAK,YAAY,CAAC,KAAK,OAAM,GAAI,KAAK,KAAK,UAAU,KAAK,QAAO,CAAE;EACtF,CAAC,CAAC,CACD,YAAW;GACV,IAAI,aAAa,KAAK,YAAY,CAAC,KAAK,OAAM,GAAI,KAAK,QAAO;EAChE,CAAC;OAEH,KAAK,QAAO;CAEhB;CAGO,gBAAgB,OAAiB;EACtC,IAAI,CAAC,KAAK,YAAY,YAAW,KAAM,CAAC,KAAK,OAAM,GAAI;EACvD,MAAM,SAAS,MAAM;EACrB,IAAI,CAAC,UAAU,KAAK,WAAW,cAAc,SAAS,MAAM,GAAG;EAG/D,IAAI,CAFW,KAAK,WAAW,eAAe,SAAS,MAElD,KAAU,KAAK,aAAY,MAAO,UAAW,kBAAkB,WAAW,OAAO,QAAQ,gCAA8B,GAC1H,KAAK,MAAK;CAEd;CAEQ,gBAAa;EACnB,MAAM,mBAAmB,KAAK,gBAAgB,mBAAmB,KAAK,WAAW,eAAe,KAAK,UAAS,GAAI,CAAC;EACnH,MAAM,UAAU,KAAK,QAAQ,OAAO;GAClC;GACA,gBAAgB,KAAK,QAAQ,iBAAiB,KAAI;GAClD,YACE,CAAC,CAAC,KAAK,gBAAgB,eACvB,CAAC,CAAC,KAAK,WAAW,cAAc,QAAQ,uFAAmF;GAE7H,aAAa,KAAK,aAAY,MAAO;GACrC,eAAe;EAChB,CAAA;EACD,KAAK,aAAa;EAClB,KAAK,UAAU,IAAI,QAAQ,eAAe,MAAM,IAAI;EACpD,KAAK,kBAAkB,KAAK,KAAK,wBAAwB,oBAAoB,KAAK,WAAW,eAAe,QAAQ,cAAc,CAAC;EACnI,KAAK,qBAAqB,qBAAqB,QAAQ,gBAAgB,KAAK,WAAW,aAAa;EACpG,KAAK,gBAAgB,IAAI,aAAY;EACrC,KAAK,YAAY,SAAS,gBAAgB;EAC1C,KAAK,cAAc,IAAI,QAAQ,cAAa,CAAE,CAAC,gBAAgB,KAAK,MAAK,CAAE,CAAC;EAC5E,KAAK,cAAc,IACjB,QAAQ,qBAAoB,CAAE,CAAC,WAAW,UAAS;GACjD,IAAI,CAAC,KAAK,WAAW,cAAc,SAAS,MAAM,MAAc,GAAG,KAAK,MAAK;EAC/E,CAAC,CAAC;EAEJ,KAAK,cAAc,IACjB,QAAQ,cAAa,CAAE,CAAC,WAAW,UAAS;GAC1C,IAAI,MAAM,QAAQ,YAAY,KAAK,OAAM,GAAI;IAC3C,MAAM,eAAc;IACpB,MAAM,gBAAe;IACrB,KAAK,MAAM,IAAI;GACjB,OAAO,IAAI,CAAC,MAAM,oBAAoB,KAAK,aAAY,MAAO,UAAU,KAAK,OAAM,GACjF,KAAK,aAAa,KAAK;EAE3B,CAAC,CAAC;EAEJ,KAAK,cAAc,IACjB,iBAAiB,gBAAgB,gBAAe;GAC9C,KAAK,KAAK,wBAAwB,KAAK,YAAY,QAAO,CAAE;EAC9D,CAAC,CAAC;EAGJ,AADa,QAAQ,OAAO,IAAI,eAAe,KAAK,WAAU,GAAI,KAAK,GAAG,CAC1E,CAAA,CAAK,cAAa;EAClB,QAAQ,eAAc;CACxB;CAEQ,YAAY,SAAqB,kBAAmD;EAC1F,MAAM,SAAS,KAAK,WAAW;EAC/B,MAAM,OAAO,OAAO,cAAc;EAClC,IAAI,CAAC,MAAM;EACX,KAAK,KAAK,wBAAuB;GAC/B,MAAM,cAAc,UAAgB;IAClC,MAAM,SAAS,MAAM;IAKrB,IAAI,QAAQ,YAAW,MAAO,WAAW,QAAS,kBAAkB,QAAQ,OAAO,SAAS,MAAM,IAAK,iBAAiB,oBAAmB;GAC7I;GACA,KAAK,iBAAiB,UAAU,YAAY;IAAE,SAAS;IAAM,SAAS;GAAI,CAAE;GAC5E,KAAK,cAAc,UAAU,KAAK,oBAAoB,UAAU,YAAY,IAAI,CAAC;EACnF,CAAC;CACH;CAEQ,aAAU;EAChB,MAAM,UAAU,KAAK,WAAW;EAChC,OAAO,QAAQ,aAAa,UAAU,KAAK,QAAQ,aAAa,eAAe,MAAM;CACvF;CAEQ,YAAS;EACf,MAAM,OAAO,KAAK,YAAY;EAC9B,IAAI,CAAC,MAAM,OAAO,CAAA;EAClB,OAAO,MAAM,KAAK,KAAK,iBAA8B,sCAAoC,CAAC,CAAC,CAAC,QAAQ,SAAQ;GAC1G,IAAI,KAAK,QAAQ,+DAA6D,GAAG,OAAO;GACxF,IAAI,KAAK,QAAQ,2CAAyC,GAAG,OAAO;GACpE,MAAM,QAAQ,KAAK,cAAc,aAAa,iBAAiB,IAAI;GACnE,OAAO,OAAO,YAAY,UAAU,OAAO,eAAe,YAAY,KAAK,eAAc,CAAE,CAAC,SAAS;EACvG,CAAC;CACH;CAEQ,aAAa,OAAoB;EACvC,IAAI,KAAK,UAAU,MAAM,MAAM,KAAK,EAAE,MAAM,kBAAkB,SAAS,CAAC,KAAK,YAAY,eAAe,SAAS,MAAM,MAAM,GAAG;EAChI,IAAI,CAAC;GAAC;GAAa;GAAW;GAAQ;EAAK,CAAC,CAAC,SAAS,MAAM,GAAG,GAAG;EAClE,MAAM,QAAQ,KAAK,UAAS;EAC5B,IAAI,CAAC,MAAM,QAAQ;EACnB,MAAM,UAAU,MAAM,QAAQ,KAAK,WAAW,cAAc,cAAc,aAA4B;EACtG,IAAI;EACJ,IAAI,MAAM,QAAQ,QAAQ,QAAQ;OAC7B,IAAI,MAAM,QAAQ,OAAO,QAAQ,MAAM,SAAS;OAChD,IAAI,MAAM,QAAQ,aAAa,QAAQ,UAAU,IAAI,KAAK,UAAU,KAAK,MAAM;OAC/E,QAAQ,UAAU,IAAI,MAAM,SAAS,KAAK,UAAU,IAAI,MAAM,UAAU,MAAM;EACnF,MAAM,eAAc;EACpB,MAAM,gBAAe;EACrB,MAAM,MAAM,CAAC,MAAM,EAAE,eAAe,KAAI,CAAE;CAC5C;CAEQ,UAAU,QAA0B;EAC1C,OAAO,kBAAkB,WAAW,CAAC,CAAC,OAAO,QAAQ,iGAA6F;CACpJ;CAEQ,UAAO;EACb,KAAK,kBAAiB;EACtB,KAAK,kBAAkB;EACvB,KAAK,YAAY,QAAO;EACxB,KAAK,aAAa;EAClB,KAAK,cAAc,YAAW;EAC9B,KAAK,YAAY,QAAO;EACxB,KAAK,aAAa;EAClB,KAAK,qBAAoB;EACzB,KAAK,qBAAqB;EAC1B,KAAK,UAAU,IAAI,IAAI;EACvB,KAAK,QAAQ,IAAI,KAAK;EACtB,KAAK,OAAO,IAAI,QAAQ;CAC1B;CAxPW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA;GAAA,WAAA;IAAA,SAAA;IAAA,WAAA;IAAA,kBAAA;GAAA;GAAA,YAAA;IAAA,sBAAA;IAAA,sBAAA;IAAA,sBAAA;GAAA;EAAA;EAAA,UAAA,CAAA,YAAA;EAAA,UAAA;CAAA,CAAA;;AAAjB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EAV7B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,UAAU;GACV,YAAY;GACZ,MAAM;IACJ,wBAAwB;IACxB,wBAAwB;IACxB,wBAAwB;GACzB;EACF,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CE,MAAA;GAAa,MAAA,CAAA,SAAS,CAAC,QAAQ,CAAC;;;GAQhC,MAAA;GAAa,MAAA,CAAA,WAAW,CAAC,QAAQ,CAAC;;;GAwElC,MAAA;GAAa,MAAA,CAAA,kBAAkB,CAAC,QAAQ,CAAC;;;;ACtJ5C,IAAa,uBAAb,MAAa,qBAAoB;CACd,UAAU,OAAO,OAAO;CACxB,kBAAkB,OAAO,wBAAwB;CACjD,iBAAiB,OAAO,oBAAoB,EAAE,UAAU,KAAI,CAAE;CAC9D,aAAa,OAAgC,UAAU;CACvD,OAAO,OAAO,aAAa;CAC3B,OAAO,OAAO,MAAM;CACpB,MAAM,OAAO,gBAAgB;CAC9B,gBAAgB,MAAM,SAAgC,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAC9D,aAAgC;CAChC;CACA;CACA;CACA;CACA,gBAAgB,IAAI,aAAY;CAChC,WAAW;CAEnB,cAAA;EACE,OAAO,UAAU,CAAC,CAAC,gBAAe;GAChC,EAAE,KAAK;GACP,KAAK,QAAO;EACd,CAAC;CACH;CAGO,KAAK,OAAiB;EAC3B,MAAM,eAAc;EACpB,KAAK,OAAO,MAAM,SAAS,MAAM,OAAO;CAC1C;CAEO,MAAM,eAAe,OAAK;EAC/B,IAAI,CAAC,KAAK,YAAY;EACtB,MAAM,WAAW,EAAE,KAAK;EACxB,IAAI,gBAAgB,KAAK,WAAW,eAAe,SAAS,KAAK,WAAW,cAAc,cAAc,aAAa,GACnH,KAAK,WAAW,cAAc,MAAM,EAAE,eAAe,KAAI,CAAE;EAE7D,KAAK,WAAW,eAAe,QAAQ;EACvC,MAAM,aAAa,KAAK;EACxB,IAAI,cAAc,CAAC,KAAK,KAAK,gBAAe,GAC1C,AAAK,KAAK,KACP,wBAAwB,WAAW,KAAI,CAAE,CAAC,CAC1C,WAAU;GACT,IAAI,aAAa,KAAK,UAAU,KAAK,QAAO;EAC9C,CAAC,CAAC,CACD,YAAW;GACV,IAAI,aAAa,KAAK,UAAU,KAAK,QAAO;EAC9C,CAAC;OACE,KAAK,QAAO;CACrB;CAGU,MAAM,OAAoB;EAClC,IAAI,MAAM,QAAQ,iBAAiB,EAAE,MAAM,YAAY,MAAM,QAAQ,QAAQ;EAC7E,MAAM,eAAc;EACpB,MAAM,OAAO,KAAK,WAAW,cAAc,sBAAqB;EAChE,KAAK,OAAO,KAAK,OAAO,KAAK,IAAI,IAAI,KAAK,QAAQ,CAAC,GAAG,KAAK,MAAM;EACjE,KAAK,MAAK,CAAE,CAAC,EAAE,EAAE,MAAK;CACxB;CAGU,gBAAgB,OAAiB;EACzC,MAAM,SAAS,MAAM;EACrB,IAAI,UAAU,KAAK,YAAY,eAAe,SAAS,MAAM,KAAK,OAAO,QAAQ,gCAA8B,GAAG,KAAK,MAAK;CAC9H;CAEQ,OAAO,GAAW,GAAS;EACjC,KAAK,QAAO;EACZ,EAAE,KAAK;EACP,MAAM,SAAS,KAAK,WAAW;EAC/B,KAAK,aAAa,KAAK,QAAQ,OAAO;GACpC,kBAAkB,KAAK,gBAAgB,sBAAsB,GAAG,CAAC;GACjE,gBAAgB,KAAK,QAAQ,iBAAiB,KAAI;GAClD,YAAY,CAAC,CAAC,KAAK,gBAAgB,eAAe,CAAC,CAAC,OAAO,QAAQ,uFAAmF;GACtJ,aAAa;GACb,eAAe;EAChB,CAAA;EACD,KAAK,gBAAgB,IAAI,aAAY;EACrC,MAAM,MAAM,OAAO,cAAc;EACjC,IAAI,KACF,KAAK,KAAK,wBAAuB;GAC/B,MAAM,iBAAiB,UAAgB;IACrC,MAAM,SAAS,MAAM;IACrB,IAAI,KAAK,YAAY,eAAe,OAAO;IAC3C,IAAI,WAAW,OAAQ,kBAAkB,QAAQ,OAAO,SAAS,MAAM,GAAI,KAAK,KAAK,UAAU,KAAK,MAAK,CAAE;GAC7G;GACA,IAAI,iBAAiB,UAAU,eAAe;IAAE,SAAS;IAAM,SAAS;GAAI,CAAE;GAC9E,KAAK,cAAc,UAAU,IAAI,oBAAoB,UAAU,eAAe,IAAI,CAAC;EACrF,CAAC;EAEH,KAAK,cAAc,IAAI,KAAK,WAAW,cAAa,CAAE,CAAC,gBAAgB,KAAK,MAAK,CAAE,CAAC;EACpF,KAAK,cAAc,IAAI,KAAK,WAAW,YAAW,CAAE,CAAC,gBAAgB,KAAK,QAAO,CAAE,CAAC;EACpF,KAAK,cAAc,IAAI,KAAK,WAAW,cAAa,CAAE,CAAC,WAAW,UAAU,KAAK,UAAU,KAAK,CAAC,CAAC;EAClG,MAAM,OAAO,KAAK,WAAW;EAC7B,KAAK,kBAAkB,KAAK,KAAK,wBAAwB,oBAAoB,QAAQ,IAAI,CAAC;EAC1F,KAAK,qBAAqB,qBAAqB,MAAM,MAAM;EAE3D,AADa,KAAK,WAAW,OAAO,IAAI,eAAe,KAAK,cAAa,GAAI,KAAK,GAAG,CACrF,CAAA,CAAK,cAAa;EAClB,KAAK,WAAW,eAAc;EAC9B,IAAI,CAAC,KAAK,KAAK,gBAAe,GAAI;GAChC,MAAM,QAAQ,OAAO,cAAc,cAAc,MAAM;GACvD,MAAM,aAAa,eAAe,MAAM;GACxC,OAAO,OAAO,MAAM,OAAO;IAAE,UAAU;IAAS,MAAM,GAAG,EAAC;IAAM,KAAK,GAAG,EAAC;IAAM,OAAO;IAAO,QAAQ;IAAO,eAAe;GAAM,CAAE;GACnI,OAAO,cAAc,KAAK,OAAO,KAAK;GACtC,KAAK,QAAQ;GACb,MAAM,aAAa,KAAK,KAAK,wBAAwB,sBAAsB,OAAO,IAAI,CAAC;GACvF,KAAK,aAAa;GAClB,AAAK,KAAK,KACP,wBAAwB,WAAW,MAAK,CAAE,CAAC,CAC3C,YAAW;IACV,KAAK,YAAY,QAAO;IACxB,KAAK,aAAa;GACpB,CAAC;EACL;CACF;CAEQ,QAAK;EACX,OAAO,MAAM,KAAK,KAAK,YAAY,eAAe,iBAA8B,qDAAmD,KAAK,CAAA,CAAE,CAAC,CAAC,QACzI,SAAS,CAAC,KAAK,QAAQ,sCAAoC,KAAK,CAAC,KAAK,QAAQ,mBAAmB,CAAC;CAEvG;CAEQ,UAAU,OAAoB;EACpC,IAAI,MAAM,QAAQ,UAAU;GAC1B,MAAM,eAAc;GACpB,MAAM,gBAAe;GACrB,KAAK,MAAM,IAAI;GACf;EACF;EACA,IAAK,MAAM,QAAwB,QAAQ,2CAAyC,GAAG;EACvF,IAAI,CAAC;GAAC;GAAa;GAAW;GAAQ;EAAK,CAAC,CAAC,SAAS,MAAM,GAAG,GAAG;EAClE,MAAM,QAAQ,KAAK,MAAK;EACxB,IAAI,CAAC,MAAM,QAAQ;EACnB,MAAM,eAAc;EACpB,MAAM,UAAU,MAAM,QAAQ,KAAK,WAAW,cAAc,cAAc,aAA4B;EAWtG,MATE,MAAM,QAAQ,SACV,IACA,MAAM,QAAQ,QACZ,MAAM,SAAS,IACf,MAAM,QAAQ,eACX,UAAU,KAAK,MAAM,SACtB,UAAU,IACR,MAAM,SAAS,KACd,UAAU,IAAI,MAAM,UAAU,MAAM,OACtC,CAAC,MAAK;CACnB;CAEQ,UAAO;EACb,KAAK,cAAc,YAAW;EAC9B,KAAK,kBAAiB;EACtB,KAAK,kBAAkB;EACvB,KAAK,YAAY,QAAO;EACxB,KAAK,aAAa;EAClB,KAAK,OAAO,OAAM;EAClB,KAAK,QAAQ;EACb,MAAM,UAAU,KAAK;EACrB,KAAK,aAAa;EAClB,SAAS,QAAO;EAChB,KAAK,qBAAoB;EACzB,KAAK,qBAAqB;CAC5B;CAhKW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAoB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAApB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAoB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,eAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,MAAA,EAAA,WAAA;GAAA,eAAA;GAAA,WAAA;GAAA,kBAAA;EAAA,EAAA;EAAA,UAAA;CAAA,CAAA;;AAApB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAoB,YAAA,CAAA;EADhC,MAAA;EAAU,MAAA,CAAA,EAAE,UAAU,kBAAiB,CAAE;;;;;;;;;;;;;GAyBvC,MAAA;GAAa,MAAA,CAAA,eAAe,CAAC,QAAQ,CAAC;;;GA0BtC,MAAA;GAAa,MAAA,CAAA,WAAW,CAAC,QAAQ,CAAC;;;GASlC,MAAA;GAAa,MAAA,CAAA,kBAAkB,CAAC,QAAQ,CAAC;;;;AC5D5C,IAAa,4BAAb,MAAa,0BAAyB;CACpB,mBAAmB,MAAyB,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;CAE/D,IAAW,cAAW;EACpB,OAAO,KAAK,iBAAgB,CAAE,CAAC;CACjC;CALW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAyB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAzB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAyB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,kBAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,WAFzB,CAAC;GAAE,SAAS;GAAoB,aAAa,iBAAiB,yBAAyB;EAAC,CAAE;EAAC,UAAA;CAAA,CAAA;;AAE3F,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAyB,YAAA,CAAA;EALrC,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,YAAY;GACZ,WAAW,CAAC;IAAE,SAAS;IAAoB,aAAa,iBAAgB,yBAA0B;GAAC,CAAE;EACtG,CAAA"}
1
+ {"version":3,"file":"filip.mazev-blocks-primitives.mjs","names":[],"sources":["../../../projects/blocks/primitives/components/tooltip/tooltip.ts","../../../projects/blocks/primitives/components/tooltip/tooltip.html","../../../projects/blocks/primitives/components/menu/menu.ts","../../../projects/blocks/primitives/components/menu/menu.html","../../../projects/blocks/primitives/components/menu-item/menu-item.ts","../../../projects/blocks/primitives/components/menu-item/menu-item.html","../../../projects/blocks/primitives/directives/tooltip.directive.ts","../../../projects/blocks/primitives/directives/overlay-context.token.ts","../../../projects/blocks/primitives/directives/dropdown.directive.ts","../../../projects/blocks/primitives/directives/context-menu.directive.ts","../../../projects/blocks/primitives/directives/overlay-context.directive.ts"],"sourcesContent":["import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, input, ChangeDetectionStrategy } from '@angular/core';\nimport { BX_I18N, BxA11yService, isTextWithKey, ResolvableText } from '@filip.mazev/blocks/core';\n\n@Component({\n selector: 'bx-tooltip',\n imports: [BxSurfaceDirective],\n templateUrl: './tooltip.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './tooltip.scss'\n})\nexport class Tooltip {\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly a11y = inject(BxA11yService);\n\n protected readonly resolvedText = computed(() => {\n this.i18n?.version?.();\n\n const textData = this.text();\n if (!textData) return undefined;\n\n if (isTextWithKey(textData)) {\n return this.i18n?.translate(textData.key) ?? textData.key;\n }\n\n return textData;\n });\n\n public readonly isAnimated = computed(() => !this.a11y.isReducedMotion());\n public readonly text = input.required<ResolvableText>();\n}\n","<div class=\"bx-tooltip-surface\" bxSurface [class.bx-tooltip-animated]=\"isAnimated()\">\n @if (resolvedText()) {\n {{ resolvedText() }}\n }\n</div>","import { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\nimport { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { BxA11yService } from '@filip.mazev/blocks/core';\n\n@Component({\n selector: 'bx-menu',\n imports: [BxSurfaceDirective],\n templateUrl: './menu.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './menu.scss'\n})\nexport class Menu {\n private readonly a11y = inject(BxA11yService);\n\n public readonly isAnimated = computed(() => {\n return !this.a11y.isReducedMotion();\n });\n}\n","<div bxSurface role=\"menu\" class=\"bx-menu-wrapper\" [class.bx-menu-animated]=\"isAnimated()\">\n <ng-content></ng-content>\n</div>\n","import { BX_I18N, BxA11yService, BxShortcutService, isTextWithKey, ResolvableShortcut, ResolvableText } from '@filip.mazev/blocks/core';\nimport { Component, computed, inject, input, output, ChangeDetectionStrategy } from '@angular/core';\nimport { Icon, IconName } from '@filip.mazev/blocks/icons';\nimport { BxSurfaceDirective } from '@filip.mazev/blocks/effects';\n\n@Component({\n selector: 'bx-menu-item',\n imports: [Icon, BxSurfaceDirective],\n templateUrl: './menu-item.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './menu-item.scss'\n})\nexport class MenuItem {\n private readonly i18n = inject(BX_I18N, { optional: true });\n private readonly a11y = inject(BxA11yService);\n private readonly bxShortcutService = inject(BxShortcutService);\n\n protected readonly resolvedLabel = computed(() => {\n this.i18n?.version?.();\n\n const label = this.label();\n if (!label) return undefined;\n\n if (isTextWithKey(label)) {\n return this.i18n?.translate(label.key) ?? label.key;\n }\n return label;\n });\n\n protected readonly resolvedShortcut = computed(() => {\n return this.bxShortcutService.resolve(this.shortcut());\n });\n\n public readonly isAnimated = computed(() => !this.a11y.isReducedMotion());\n\n public readonly icon = input<IconName | undefined>(undefined);\n public readonly endIcon = input<IconName | undefined>(undefined);\n public readonly label = input<ResolvableText | undefined>(undefined);\n public readonly wrapLabel = input(false);\n public readonly disabled = input(false);\n public readonly danger = input(false);\n\n public readonly shortcut = input<ResolvableShortcut | undefined>(undefined);\n\n public readonly action = output<MouseEvent>();\n\n protected onClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.action.emit(event);\n }\n}\n","<button bxSurface [bxSurfaceEmission]=\"danger() ? 'var(--bx-text-danger)' : 'var(--bx-primary)'\" type=\"button\" role=\"menuitem\" [disabled]=\"disabled()\" class=\"bx-menu-item-btn\" [class.is-disabled]=\"disabled()\" [class.is-danger]=\"danger()\"\n [class.bx-menu-item-animated]=\"isAnimated()\" (click)=\"onClick($event)\">\n\n @if (icon()) {\n <bx-icon class=\"bx-icon-pos-start\" [name]=\"icon()!\" size=\"20\" />\n }\n\n <span class=\"bx-menu-item-content\" [class.bx-menu-item-content-wrapped]=\"wrapLabel()\">\n @if (resolvedLabel()) {\n {{ resolvedLabel() }}\n } @else {\n <ng-content></ng-content>\n }\n </span>\n\n @if (resolvedShortcut()) {\n <span class=\"bx-menu-item-shortcut\">\n @for (key of resolvedShortcut(); track $index) {\n <kbd>{{ key }}</kbd>\n }\n </span>\n }\n\n @if (endIcon()) {\n <bx-icon class=\"bx-icon-pos-end\" [name]=\"endIcon()!\" size=\"20\" />\n }\n</button>\n","import { DestroyRef, Directive, ElementRef, HostListener, inject, input, NgZone } from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { BxA11yService, BxPlacement, BxOverlayPositionService, inheritOverlayTheme, ResolvableText, uuidv4 } from '@filip.mazev/blocks/core';\nimport { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { Tooltip } from '../components/tooltip/tooltip';\n\n@Directive({ selector: '[bxTooltip]' })\nexport class TooltipDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly positionBuilder = inject(BxOverlayPositionService);\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly id = `bx-tooltip-${uuidv4()}`;\n public readonly bxTooltip = input.required<ResolvableText>();\n public readonly placement = input<BxPlacement>('bottom');\n private overlayRef: OverlayRef | null = null;\n private transition?: ReturnType<typeof createGlassTransition>;\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n private positionSubscription?: { unsubscribe(): void };\n private keyboardSubscription?: { unsubscribe(): void };\n private revision = 0;\n private hovered = false;\n private focused = false;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.dispose());\n }\n\n public show(): void {\n if (!this.bxTooltip()) return;\n const revision = ++this.revision;\n if (!this.overlayRef) {\n const strategy = this.positionBuilder.getElementStrategy(this.elementRef.nativeElement, this.placement()).withFlexibleDimensions(false);\n this.overlayRef = this.overlay.create({\n positionStrategy: strategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: false,\n panelClass: 'bx-tooltip-pane'\n });\n\n const pane = this.overlayRef.overlayElement;\n pane.id = this.id;\n pane.setAttribute('role', 'tooltip');\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(this.elementRef.nativeElement, pane));\n this.disconnectLighting = inheritGlassLighting(pane, this.elementRef.nativeElement);\n\n const component = this.overlayRef.attach(new ComponentPortal(Tooltip));\n // CDK enables pane pointer events during attach. Reset afterwards so the\n // emerging tooltip cannot steal hover from small or nested triggers.\n pane.style.pointerEvents = 'none';\n this.keyboardSubscription = this.overlayRef.keydownEvents().subscribe((event) => this.onEscape(event));\n component.setInput('text', this.bxTooltip());\n component.changeDetectorRef.detectChanges();\n const positionArrow = () => {\n const trigger = this.elementRef.nativeElement.getBoundingClientRect();\n const bounds = pane.getBoundingClientRect();\n pane.style.setProperty('--bx-tooltip-arrow-x', `${trigger.left + trigger.width / 2 - bounds.left}px`);\n pane.style.setProperty('--bx-tooltip-arrow-y', `${trigger.top + trigger.height / 2 - bounds.top}px`);\n this.transition?.refresh();\n };\n this.positionSubscription = strategy.positionChanges.subscribe(positionArrow);\n this.overlayRef.updatePosition();\n positionArrow();\n\n if (!this.a11y.isReducedMotion()) {\n this.transition = this.zone.runOutsideAngular(() => createGlassTransition(this.elementRef.nativeElement, pane));\n }\n }\n\n const source = this.elementRef.nativeElement;\n const ids = new Set((source.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean));\n\n ids.add(this.id);\n source.setAttribute('aria-describedby', [...ids].join(' '));\n\n void Promise.resolve(this.zone.runOutsideAngular(() => this.transition?.enter())).catch(() => {\n if (revision === this.revision) {\n this.transition?.destroy();\n this.transition = undefined;\n }\n });\n }\n\n public hide(): void {\n const revision = ++this.revision;\n this.removeDescription();\n if (!this.overlayRef) return;\n const transition = this.transition;\n if (transition && !this.a11y.isReducedMotion()) {\n void this.zone\n .runOutsideAngular(() => transition.exit())\n .then(() => {\n if (revision === this.revision) this.dispose();\n })\n .catch(() => {\n if (revision === this.revision) this.dispose();\n });\n } else this.dispose();\n }\n\n @HostListener('mouseenter')\n protected onEnter(): void {\n this.hovered = true;\n this.show();\n }\n\n @HostListener('mouseleave')\n protected onLeave(): void {\n this.hovered = false;\n if (!this.focused) this.hide();\n }\n\n @HostListener('focusin')\n protected onFocus(): void {\n this.focused = true;\n this.show();\n }\n\n @HostListener('focusout', ['$event'])\n protected onBlur(event: FocusEvent): void {\n if (event.relatedTarget instanceof Node && this.elementRef.nativeElement.contains(event.relatedTarget)) return;\n this.focused = false;\n if (!this.hovered) this.hide();\n }\n\n protected onEscape(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.overlayRef) {\n event.stopPropagation();\n this.hovered = false;\n this.focused = false;\n this.hide();\n }\n }\n\n private removeDescription(): void {\n const source = this.elementRef.nativeElement;\n const ids = (source.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter((id) => id && id !== this.id);\n if (ids.length) source.setAttribute('aria-describedby', ids.join(' '));\n else source.removeAttribute('aria-describedby');\n }\n\n private dispose(): void {\n this.removeDescription();\n this.keyboardSubscription?.unsubscribe();\n this.keyboardSubscription = undefined;\n this.positionSubscription?.unsubscribe();\n this.positionSubscription = undefined;\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.transition?.destroy();\n this.transition = undefined;\n this.overlayRef?.dispose();\n this.overlayRef = null;\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface IBxOverlayContext {\n useTopLayer?: boolean;\n}\n\nexport const BX_OVERLAY_CONTEXT = new InjectionToken<IBxOverlayContext>('BX_OVERLAY_CONTEXT');\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n DestroyRef,\n Directive,\n ElementRef,\n HostListener,\n NgZone,\n PLATFORM_ID,\n effect,\n inject,\n input,\n signal,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\nimport { FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { BxA11yService, BxPlacement, BxOverlayPositionService, inheritOverlayTheme } from '@filip.mazev/blocks/core';\nimport { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { BX_OVERLAY_CONTEXT } from './overlay-context.token';\nimport { Subscription } from 'rxjs';\n\nexport type DropdownTransition = 'none' | 'fade' | 'emerge';\nexport type DropdownState = 'closed' | 'opening' | 'open' | 'closing';\n\n@Directive({\n selector: '[bxDropdown]',\n exportAs: 'bxDropdown',\n standalone: true,\n host: {\n '[attr.aria-expanded]': 'isOpen()',\n '[attr.aria-haspopup]': '\"menu\"',\n '[attr.aria-controls]': 'overlayId()'\n }\n})\nexport class DropdownDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly positionBuilder = inject(BxOverlayPositionService);\n private readonly overlayContext = inject(BX_OVERLAY_CONTEXT, { optional: true });\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly vcr = inject(ViewContainerRef);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private readonly _isOpen = signal(false);\n protected readonly overlayId = signal<string | null>(null);\n public readonly isOpen = this._isOpen.asReadonly();\n private readonly _state = signal<DropdownState>('closed');\n public readonly state = this._state.asReadonly();\n\n public readonly bxDropdown = input.required<TemplateRef<unknown>>();\n public readonly placement = input<BxPlacement>('bottom');\n public readonly bxTransition = input<DropdownTransition>('fade');\n\n private overlayRef: OverlayRef | null = null;\n private transition: ReturnType<typeof createGlassTransition> | null = null;\n private subscriptions = new Subscription();\n private revision = 0;\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n ++this.revision;\n this.dispose();\n });\n\n effect(() => {\n if (this.a11y.isReducedMotion() && this.transition) {\n ++this.revision;\n this.transition.destroy();\n this.transition = null;\n if (this.isOpen()) this._state.set('open');\n else this.dispose();\n }\n });\n }\n\n @HostListener('click', ['$event'])\n public toggle(event?: MouseEvent): void {\n if (this.isDisabled()) return;\n event?.stopPropagation();\n if (this.isOpen()) this.close();\n else this.open();\n }\n\n @HostListener('keydown', ['$event'])\n public onTriggerKeydown(event: KeyboardEvent): void {\n if (this.bxTransition() === 'none' || this.isDisabled() || this.isEditing(event.target)) return;\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\n event.preventDefault();\n event.stopPropagation();\n this.open();\n const items = this.menuItems();\n const item = event.key === 'ArrowUp' ? items[items.length - 1] : items[0];\n item?.focus({ preventScroll: true });\n }\n\n public open(): void {\n if (!this.isBrowser || this.isOpen() || this.isDisabled()) return;\n const revision = ++this.revision;\n this._isOpen.set(true);\n this._state.set('opening');\n\n if (!this.overlayRef) this.attachOverlay();\n const overlay = this.overlayRef;\n if (!overlay) return;\n overlay.overlayElement.inert = false;\n overlay.overlayElement.style.removeProperty('pointer-events');\n\n if (this.bxTransition() !== 'none' && !this.a11y.isReducedMotion()) {\n const transition = (this.transition ??= this.zone.runOutsideAngular(() => createGlassTransition(this.elementRef.nativeElement, overlay.overlayElement)));\n void this.zone\n .runOutsideAngular(() => transition.enter())\n .then(() => {\n if (revision === this.revision && this.isOpen()) this.zone.run(() => this._state.set('open'));\n })\n .catch(() => {\n if (revision === this.revision && this.isOpen()) {\n this.transition?.destroy();\n this.transition = null;\n this._state.set('open');\n }\n });\n } else {\n this._state.set('open');\n }\n }\n\n public close(restoreFocus = false): void {\n if (!this.overlayRef || !this.isOpen()) return;\n const revision = ++this.revision;\n const overlay = this.overlayRef;\n this._isOpen.set(false);\n this._state.set('closing');\n\n const source = this.elementRef.nativeElement;\n if (restoreFocus || overlay.overlayElement.contains(source.ownerDocument.activeElement)) {\n source.focus({ preventScroll: true });\n }\n overlay.overlayElement.inert = true;\n overlay.overlayElement.style.pointerEvents = 'none';\n\n const transition = this.transition;\n if (transition && !this.a11y.isReducedMotion()) {\n void this.zone\n .runOutsideAngular(() => transition.exit())\n .then(() => {\n if (revision === this.revision && !this.isOpen()) this.zone.run(() => this.dispose());\n })\n .catch(() => {\n if (revision === this.revision && !this.isOpen()) this.dispose();\n });\n } else {\n this.dispose();\n }\n }\n\n @HostListener('document:click', ['$event'])\n public onDocumentClick(event: MouseEvent): void {\n if (!this.overlayRef?.hasAttached() || !this.isOpen()) return;\n const target = event.target as Node | null;\n if (!target || this.elementRef.nativeElement.contains(target)) return;\n const inside = this.overlayRef.overlayElement.contains(target);\n // Preserve existing menu item click-to-close behavior; embedded inputs can stay open.\n if (!inside || this.bxTransition() === 'none' || (target instanceof Element && target.closest('button, a, [role=\"menuitem\"]'))) {\n this.close();\n }\n }\n\n private attachOverlay(): void {\n const positionStrategy = this.positionBuilder.getElementStrategy(this.elementRef.nativeElement, this.placement(), 4);\n const overlay = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n usePopover:\n !!this.overlayContext?.useTopLayer ||\n !!this.elementRef.nativeElement.closest('dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]'),\n // A fading surface keeps its trigger reachable while it opens/closes.\n hasBackdrop: this.bxTransition() === 'none',\n backdropClass: 'cdk-overlay-transparent-backdrop'\n });\n this.overlayRef = overlay;\n this.overlayId.set(overlay.overlayElement.id || null);\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(this.elementRef.nativeElement, overlay.overlayElement));\n this.disconnectLighting = inheritGlassLighting(overlay.overlayElement, this.elementRef.nativeElement);\n this.subscriptions = new Subscription();\n this.trackScroll(overlay, positionStrategy);\n this.subscriptions.add(overlay.backdropClick().subscribe(() => this.close()));\n this.subscriptions.add(\n overlay.outsidePointerEvents().subscribe((event) => {\n if (!this.elementRef.nativeElement.contains(event.target as Node)) this.close();\n })\n );\n this.subscriptions.add(\n overlay.keydownEvents().subscribe((event) => {\n if (event.key === 'Escape' && this.isOpen()) {\n event.preventDefault();\n event.stopPropagation();\n this.close(true);\n } else if (!event.defaultPrevented && this.bxTransition() !== 'none' && this.isOpen()) {\n this.navigateMenu(event);\n }\n })\n );\n this.subscriptions.add(\n positionStrategy.positionChanges.subscribe(() => {\n this.zone.runOutsideAngular(() => this.transition?.refresh());\n })\n );\n const view = overlay.attach(new TemplatePortal(this.bxDropdown(), this.vcr));\n view.detectChanges();\n overlay.updatePosition();\n }\n\n private trackScroll(overlay: OverlayRef, positionStrategy: FlexibleConnectedPositionStrategy): void {\n const source = this.elementRef.nativeElement;\n const view = source.ownerDocument.defaultView;\n if (!view) return;\n this.zone.runOutsideAngular(() => {\n const reposition = (event: Event) => {\n const target = event.target;\n if (overlay.hasAttached() && (target === view || (target instanceof Node && target.contains(source)))) positionStrategy.reapplyLastPosition();\n };\n view.addEventListener('scroll', reposition, { capture: true, passive: true });\n this.subscriptions.add(() => view.removeEventListener('scroll', reposition, true));\n });\n }\n\n private isDisabled(): boolean {\n const element = this.elementRef.nativeElement;\n return element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true';\n }\n\n private menuItems(): HTMLElement[] {\n const pane = this.overlayRef?.overlayElement;\n if (!pane) return [];\n return Array.from(pane.querySelectorAll<HTMLElement>('button, a[href], [role=\"menuitem\"]')).filter((item) => {\n if (item.matches(':disabled, [disabled], [aria-disabled=\"true\"]') || item.closest('[aria-disabled=\"true\"]')) return false;\n if (item.closest('[hidden], [inert], [aria-hidden=\"true\"]')) return false;\n if (item.tabIndex < 0 && !item.hasAttribute('tabindex')) return false;\n const style = item.ownerDocument.defaultView?.getComputedStyle(item);\n return !!style && style.display !== 'none' && style.visibility !== 'hidden' && item.getClientRects().length > 0;\n });\n }\n\n private navigateMenu(event: KeyboardEvent): void {\n if (this.isEditing(event.target) || !(event.target instanceof Node) || !this.overlayRef?.overlayElement.contains(event.target)) return;\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n const items = this.menuItems();\n if (!items.length) return;\n const current = items.indexOf(this.elementRef.nativeElement.ownerDocument.activeElement as HTMLElement);\n let index: number;\n if (event.key === 'Home') index = 0;\n else if (event.key === 'End') index = items.length - 1;\n else if (event.key === 'ArrowDown') index = current < 0 ? 0 : (current + 1) % items.length;\n else index = current < 0 ? items.length - 1 : (current - 1 + items.length) % items.length;\n event.preventDefault();\n event.stopPropagation();\n items[index].focus({ preventScroll: true });\n }\n\n private isEditing(target: EventTarget | null): boolean {\n return target instanceof Element && !!target.closest('input, textarea, select, [contenteditable]:not([contenteditable=\"false\"]), [role=\"textbox\"]');\n }\n\n private dispose(): void {\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.transition?.destroy();\n this.transition = null;\n this.subscriptions.unsubscribe();\n this.overlayRef?.dispose();\n this.overlayRef = null;\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n this.overlayId.set(null);\n this._isOpen.set(false);\n this._state.set('closed');\n }\n}\n","import { booleanAttribute, DestroyRef, Directive, ElementRef, HostListener, inject, input, NgZone, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { BxA11yService, BxOverlayPositionService, inheritOverlayTheme } from '@filip.mazev/blocks/core';\nimport { createGlassTransition, inheritGlassLighting } from '@filip.mazev/blocks/effects/runtime';\nimport { BX_OVERLAY_CONTEXT } from './overlay-context.token';\nimport { Subscription } from 'rxjs';\n\ninterface TouchPress {\n pointerId: number;\n x: number;\n y: number;\n timer: number;\n opened: boolean;\n events: AbortController;\n}\n\n@Directive({ selector: '[bxContextMenu]' })\nexport class ContextMenuDirective {\n private readonly overlay = inject(Overlay);\n private readonly positionBuilder = inject(BxOverlayPositionService);\n private readonly overlayContext = inject(BX_OVERLAY_CONTEXT, { optional: true });\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly vcr = inject(ViewContainerRef);\n public readonly bxContextMenu = input.required<TemplateRef<unknown>>();\n public readonly bxContextMenuLongPress = input(true, { transform: booleanAttribute });\n private readonly onPointerDown = (event: PointerEvent): void => {\n this.lastPointerType = event.pointerType;\n this.cancelTouchPress();\n if (event.isPrimary) this.clearTouchGuard();\n if (event.pointerType !== 'touch' || !event.isPrimary || event.button !== 0 || !this.bxContextMenuLongPress() || this.hasNativeTouchAction(event)) return;\n const source = this.elementRef.nativeElement;\n const doc = source.ownerDocument;\n const win = doc.defaultView;\n if (!win || this.hasTextSelection()) return;\n const press: TouchPress = { pointerId: event.pointerId, x: event.clientX, y: event.clientY, timer: 0, opened: false, events: new AbortController() };\n this.touchPress = press;\n const options = { capture: true, passive: true, signal: press.events.signal };\n const finish = () => this.cancelTouchPress();\n doc.addEventListener(\n 'pointermove',\n (move) => {\n if (move.pointerId === press.pointerId && !press.opened && Math.hypot(move.clientX - press.x, move.clientY - press.y) > 10) finish();\n },\n options\n );\n for (const type of ['pointerup', 'pointercancel'] as const) {\n doc.addEventListener(\n type,\n (end) => {\n if (end.pointerId === press.pointerId) finish();\n },\n options\n );\n }\n doc.addEventListener(\n 'pointerdown',\n (next) => {\n if (next.pointerId !== press.pointerId) finish();\n },\n options\n );\n doc.addEventListener('scroll', finish, options);\n doc.addEventListener(\n 'visibilitychange',\n () => {\n if (doc.hidden) finish();\n },\n options\n );\n win.addEventListener('blur', finish, { signal: press.events.signal });\n press.timer = win.setTimeout(() => this.zone.run(() => this.openTouchMenu(press)), 500);\n };\n\n private overlayRef: OverlayRef | null = null;\n private transition?: ReturnType<typeof createGlassTransition>;\n private point?: HTMLElement;\n private disconnectTheme?: () => void;\n private disconnectLighting?: () => void;\n private subscriptions = new Subscription();\n private revision = 0;\n private touchPress?: TouchPress;\n private touchGuard?: AbortController;\n private touchGuardTimer?: number;\n private lastPointerType = '';\n\n constructor() {\n const source = this.elementRef.nativeElement;\n if (source.ownerDocument.defaultView) {\n this.zone.runOutsideAngular(() => source.addEventListener('pointerdown', this.onPointerDown, { passive: true }));\n }\n inject(DestroyRef).onDestroy(() => {\n ++this.revision;\n source.removeEventListener('pointerdown', this.onPointerDown);\n this.cancelTouchPress();\n this.clearTouchGuard();\n this.dispose();\n });\n }\n\n @HostListener('contextmenu', ['$event'])\n public open(event: MouseEvent): void {\n if (event.type === 'contextmenu' && this.lastPointerType === 'touch') {\n const press = this.touchPress;\n if (!press) return;\n if (!this.bxContextMenuLongPress() || this.hasNativeTouchAction(event) || this.hasTextSelection()) {\n this.cancelTouchPress();\n return;\n }\n event.preventDefault();\n this.openTouchMenu(press);\n return;\n }\n event.preventDefault();\n this.cancelTouchPress();\n this.clearTouchGuard();\n this.openAt(event.clientX, event.clientY);\n }\n\n public close(restoreFocus = false): void {\n if (!this.overlayRef) return;\n const revision = ++this.revision;\n if (restoreFocus || this.overlayRef.overlayElement.contains(this.elementRef.nativeElement.ownerDocument.activeElement)) {\n this.elementRef.nativeElement.focus({ preventScroll: true });\n }\n this.overlayRef.overlayElement.inert = true;\n const transition = this.transition;\n if (transition && !this.a11y.isReducedMotion()) {\n void this.zone\n .runOutsideAngular(() => transition.exit())\n .then(() => {\n if (revision === this.revision) this.dispose();\n })\n .catch(() => {\n if (revision === this.revision) this.dispose();\n });\n } else this.dispose();\n }\n\n @HostListener('keydown', ['$event'])\n protected onKey(event: KeyboardEvent): void {\n if (event.key !== 'ContextMenu' && !(event.shiftKey && event.key === 'F10')) return;\n event.preventDefault();\n this.lastPointerType = '';\n this.cancelTouchPress();\n this.clearTouchGuard();\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n this.openAt(rect.left + Math.min(24, rect.width / 2), rect.bottom);\n this.items()[0]?.focus();\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement | null;\n if (target && this.overlayRef?.overlayElement.contains(target) && target.closest('button, a, [role=\"menuitem\"]')) this.close();\n }\n\n private hasNativeTouchAction(event: Event): boolean {\n const source = this.elementRef.nativeElement;\n for (const node of event.composedPath()) {\n if (node instanceof HTMLElement) {\n if (node.isContentEditable || node.matches('input, textarea, select, :disabled, [aria-disabled=\"true\"], [inert]')) return true;\n if (node === source) break;\n }\n }\n return !!source.closest(':disabled, [aria-disabled=\"true\"], [inert]');\n }\n\n private hasTextSelection(): boolean {\n const source = this.elementRef.nativeElement;\n const selection = source.ownerDocument.getSelection();\n return !!selection && !selection.isCollapsed && (source.contains(selection.anchorNode) || source.contains(selection.focusNode));\n }\n\n private openTouchMenu(press: TouchPress): void {\n if (this.touchPress !== press || press.opened) return;\n const source = this.elementRef.nativeElement;\n if (\n !this.bxContextMenuLongPress() ||\n !source.isConnected ||\n source.isContentEditable ||\n source.closest(':disabled, [aria-disabled=\"true\"], [inert]') ||\n this.hasTextSelection()\n ) {\n this.cancelTouchPress();\n return;\n }\n press.opened = true;\n this.elementRef.nativeElement.ownerDocument.defaultView?.clearTimeout(press.timer);\n this.guardTouchRelease();\n this.openAt(press.x, press.y + 12);\n }\n\n private cancelTouchPress(): void {\n const press = this.touchPress;\n if (!press) return;\n this.touchPress = undefined;\n const win = this.elementRef.nativeElement.ownerDocument.defaultView;\n win?.clearTimeout(press.timer);\n press.events.abort();\n if (press.opened && win) this.touchGuardTimer = win.setTimeout(() => this.clearTouchGuard(), 800);\n }\n\n private guardTouchRelease(): void {\n this.clearTouchGuard();\n const doc = this.elementRef.nativeElement.ownerDocument;\n const guard = new AbortController();\n this.touchGuard = guard;\n const options = { capture: true, signal: guard.signal };\n // Consume only the hold's compatibility click; a fresh press can select or dismiss normally.\n doc.addEventListener(\n 'click',\n (event) => {\n if (event.detail === 0) return;\n event.preventDefault();\n event.stopImmediatePropagation();\n this.clearTouchGuard();\n },\n options\n );\n doc.addEventListener(\n 'contextmenu',\n (event) => {\n event.preventDefault();\n event.stopImmediatePropagation();\n },\n options\n );\n doc.addEventListener(\n 'pointerdown',\n (event) => {\n if (event.isPrimary) this.clearTouchGuard();\n },\n { ...options, passive: true }\n );\n doc.addEventListener('keydown', () => this.clearTouchGuard(), options);\n }\n\n private clearTouchGuard(): void {\n this.touchGuard?.abort();\n this.touchGuard = undefined;\n this.elementRef.nativeElement.ownerDocument.defaultView?.clearTimeout(this.touchGuardTimer);\n this.touchGuardTimer = undefined;\n }\n\n private openAt(x: number, y: number): void {\n this.dispose();\n ++this.revision;\n const source = this.elementRef.nativeElement;\n this.overlayRef = this.overlay.create({\n positionStrategy: this.positionBuilder.getCoordinateStrategy(x, y),\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n usePopover: !!this.overlayContext?.useTopLayer || !!source.closest('dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]'),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop'\n });\n this.subscriptions = new Subscription();\n const win = source.ownerDocument.defaultView;\n if (win) {\n this.zone.runOutsideAngular(() => {\n const closeOnScroll = (event: Event) => {\n const target = event.target;\n if (this.overlayRef?.overlayElement.inert) return;\n if (target === win || (target instanceof Node && target.contains(source))) this.zone.run(() => this.close());\n };\n win.addEventListener('scroll', closeOnScroll, { capture: true, passive: true });\n this.subscriptions.add(() => win.removeEventListener('scroll', closeOnScroll, true));\n });\n }\n this.subscriptions.add(this.overlayRef.backdropClick().subscribe(() => this.close()));\n this.subscriptions.add(this.overlayRef.detachments().subscribe(() => this.dispose()));\n this.subscriptions.add(this.overlayRef.keydownEvents().subscribe((event) => this.onMenuKey(event)));\n const pane = this.overlayRef.overlayElement;\n this.disconnectTheme = this.zone.runOutsideAngular(() => inheritOverlayTheme(source, pane));\n this.disconnectLighting = inheritGlassLighting(pane, source);\n const view = this.overlayRef.attach(new TemplatePortal(this.bxContextMenu(), this.vcr));\n view.detectChanges();\n this.overlayRef.updatePosition();\n if (!this.a11y.isReducedMotion()) {\n const point = source.ownerDocument.createElement('span');\n point.setAttribute('aria-hidden', 'true');\n Object.assign(point.style, { position: 'fixed', left: `${x}px`, top: `${y}px`, width: '1px', height: '1px', pointerEvents: 'none' });\n source.ownerDocument.body.append(point);\n this.point = point;\n const transition = this.zone.runOutsideAngular(() => createGlassTransition(point, pane));\n this.transition = transition;\n void this.zone\n .runOutsideAngular(() => transition.enter())\n .catch(() => {\n this.transition?.destroy();\n this.transition = undefined;\n });\n }\n }\n\n private items(): HTMLElement[] {\n return Array.from(this.overlayRef?.overlayElement.querySelectorAll<HTMLElement>('button:not(:disabled), a[href], [role=\"menuitem\"]') ?? []).filter(\n (item) => !item.matches('[disabled], [aria-disabled=\"true\"]') && !item.closest('[hidden], [inert]')\n );\n }\n\n private onMenuKey(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.close(true);\n return;\n }\n if ((event.target as HTMLElement)?.closest('input,textarea,[contenteditable=\"true\"]')) return;\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n const items = this.items();\n if (!items.length) return;\n event.preventDefault();\n const current = items.indexOf(this.elementRef.nativeElement.ownerDocument.activeElement as HTMLElement);\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? items.length - 1\n : event.key === 'ArrowDown'\n ? (current + 1) % items.length\n : current < 0\n ? items.length - 1\n : (current - 1 + items.length) % items.length;\n items[next].focus();\n }\n\n private dispose(): void {\n this.subscriptions.unsubscribe();\n this.disconnectTheme?.();\n this.disconnectTheme = undefined;\n this.transition?.destroy();\n this.transition = undefined;\n this.point?.remove();\n this.point = undefined;\n const overlay = this.overlayRef;\n this.overlayRef = null;\n overlay?.dispose();\n this.disconnectLighting?.();\n this.disconnectLighting = undefined;\n }\n}\n","import { Directive, forwardRef, input } from '@angular/core';\nimport { BX_OVERLAY_CONTEXT, IBxOverlayContext } from './overlay-context.token';\n\n@Directive({\n selector: '[bxOverlayContext]',\n standalone: true,\n providers: [{ provide: BX_OVERLAY_CONTEXT, useExisting: forwardRef(() => BxOverlayContextDirective) }]\n})\nexport class BxOverlayContextDirective implements IBxOverlayContext {\n public readonly bxOverlayContext = input<IBxOverlayContext>({});\n\n public get useTopLayer(): boolean | undefined {\n return this.bxOverlayContext().useTopLayer;\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const BLOCKS_VERSION = "1.4.7";
1
+ const BLOCKS_VERSION = "1.4.8";
2
2
  export { BLOCKS_VERSION };
3
3
 
4
4
  //# sourceMappingURL=filip.mazev-blocks.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"filip.mazev-blocks.mjs","names":[],"sources":["../../../projects/blocks/src/public-api.ts"],"sourcesContent":["/* * Public API Surface of blocks\n * This file is auto-generated. Do not edit directly.\n */\n\nexport const BLOCKS_VERSION = '1.4.7';\n"],"mappings":"AAIA,MAAa,iBAAiB"}
1
+ {"version":3,"file":"filip.mazev-blocks.mjs","names":[],"sources":["../../../projects/blocks/src/public-api.ts"],"sourcesContent":["/* * Public API Surface of blocks\n * This file is auto-generated. Do not edit directly.\n */\n\nexport const BLOCKS_VERSION = '1.4.8';\n"],"mappings":"AAIA,MAAa,iBAAiB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@filip.mazev/blocks",
3
- "version": "1.4.7",
3
+ "version": "1.4.8",
4
4
  "license": "MIT",
5
5
  "schematics": "./schematics/collection.json",
6
6
  "exports": {
@@ -136,7 +136,7 @@ export interface BxAppearanceConfig {
136
136
  reducedTransparency: boolean;
137
137
  }
138
138
  export declare const DEFAULT_APPEARANCE_CONFIG: Readonly<BxAppearanceConfig>;
139
- export type BxThemeId = 'white' | 'purple' | 'orange' | 'red' | 'green' | 'cyberpunk' | 'high-contrast';
139
+ export type BxThemeId = 'white' | 'purple' | 'orange' | 'red' | 'green' | 'cyberpunk';
140
140
  export declare const THEME_PALETTES: ReadonlyArray<{
141
141
  id: BxThemeId;
142
142
  label: string;
@@ -155,6 +155,8 @@ export declare class ThemingService implements OnDestroy {
155
155
  private readonly _palette;
156
156
  readonly palette: import("@angular/core").Signal<BxThemeId>;
157
157
  readonly paletteLabel: import("@angular/core").Signal<string>;
158
+ private readonly _highContrast;
159
+ readonly highContrast: import("@angular/core").Signal<boolean>;
158
160
  private readonly platformId;
159
161
  private readonly isBrowser;
160
162
  private readonly _systemTheme;
@@ -171,6 +173,7 @@ export declare class ThemingService implements OnDestroy {
171
173
  ngOnDestroy(): void;
172
174
  setApplicationTheme(theme: DeviceTheme): void;
173
175
  setPalette(palette: BxThemeId): void;
176
+ setHighContrast(enabled: boolean): void;
174
177
  setAppearance(settings: Partial<BxAppearanceConfig>): void;
175
178
  resetAppearance(): void;
176
179
  getSystemTheme$(): import("rxjs").Observable<DeviceTheme>;
@@ -1,7 +1,7 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import { ElementRef, OnDestroy, OnInit } from "@angular/core";
3
3
  import { BxBaseControl, ResolvableText } from "@filip.mazev/blocks/core";
4
- import { ConnectionPositionPair } from "@angular/cdk/overlay";
4
+ import { CdkConnectedOverlay, ConnectionPositionPair } from "@angular/cdk/overlay";
5
5
  import { IconName } from "@filip.mazev/blocks/icons";
6
6
  export type ButtonVariant = 'text' | 'filled' | 'tonal' | 'icon' | 'fab' | 'mini-fab' | 'extended-fab';
7
7
  export type ButtonColor = 'primary' | 'success' | 'danger' | 'info' | 'warn' | 'grayscale';
@@ -217,6 +217,9 @@ export interface BxSelectOption<T> {
217
217
  export declare class Select<T> extends BxBaseControl<T> implements OnInit, OnDestroy {
218
218
  private readonly a11y;
219
219
  private readonly zone;
220
+ private readonly overlay;
221
+ private readonly overlayContext;
222
+ protected readonly panelScrollStrategy: import("@angular/cdk/overlay").NoopScrollStrategy;
220
223
  protected readonly isPanelAttached: import("@angular/core").WritableSignal<boolean>;
221
224
  private readonly i18n;
222
225
  protected readonly searchTerm: import("@angular/core").WritableSignal<string>;
@@ -251,6 +254,8 @@ export declare class Select<T> extends BxBaseControl<T> implements OnInit, OnDes
251
254
  readonly isOpen: import("@angular/core").WritableSignal<boolean>;
252
255
  private transition?;
253
256
  private disconnectTheme?;
257
+ private disconnectLighting?;
258
+ private disconnectScroll?;
254
259
  private transitionRevision;
255
260
  private focusOnOpen;
256
261
  private connectedOverlay?;
@@ -265,12 +270,14 @@ export declare class Select<T> extends BxBaseControl<T> implements OnInit, OnDes
265
270
  close(): void;
266
271
  protected onPanelAttach(): void;
267
272
  protected onPanelDetach(): void;
273
+ protected overlayPopoverLocation(origin: HTMLElement): CdkConnectedOverlay['usePopover'];
268
274
  protected refreshPanel(): void;
269
275
  protected onTriggerKey(event: KeyboardEvent): void;
270
276
  protected onPanelKey(event: KeyboardEvent): void;
271
277
  protected onOutsideClick(event: MouseEvent): void;
272
278
  protected selectOption(option: BxSelectOption<T>): void;
273
279
  protected onSearchChange(value: string): void;
280
+ private trackPanelScroll;
274
281
  private panelItems;
275
282
  private resolveText;
276
283
  static ɵfac: i0.ɵɵFactoryDeclaration<Select<any>, never>;