@filip.mazev/blocks 1.4.4 → 1.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import { BxSurfaceDirective } from "@filip.mazev/blocks/effects";
2
2
  import * as i0 from "@angular/core";
3
- import { ChangeDetectionStrategy, Component, DestroyRef, Directive, ElementRef, HostListener, NgZone, PLATFORM_ID, ViewContainerRef, computed, effect, inject, input, output, signal } from "@angular/core";
3
+ import { ChangeDetectionStrategy, Component, DestroyRef, Directive, ElementRef, HostListener, InjectionToken, NgZone, PLATFORM_ID, ViewContainerRef, computed, effect, forwardRef, inject, input, output, signal } from "@angular/core";
4
4
  import { BX_I18N, BxA11yService, BxOverlayPositionService, BxShortcutService, inheritOverlayTheme, isTextWithKey, uuidv4 } from "@filip.mazev/blocks/core";
5
5
  import { Icon } from "@filip.mazev/blocks/icons";
6
6
  import { Overlay } from "@angular/cdk/overlay";
@@ -552,10 +552,12 @@ i0.ɵɵngDeclareClassMetadata({
552
552
  }]
553
553
  }
554
554
  });
555
+ const BX_OVERLAY_CONTEXT = new InjectionToken("BX_OVERLAY_CONTEXT");
555
556
  var DropdownDirective = class DropdownDirective {
556
557
  elementRef = inject(ElementRef);
557
558
  overlay = inject(Overlay);
558
559
  positionBuilder = inject(BxOverlayPositionService);
560
+ overlayContext = inject(BX_OVERLAY_CONTEXT, { optional: true });
559
561
  a11y = inject(BxA11yService);
560
562
  zone = inject(NgZone);
561
563
  vcr = inject(ViewContainerRef);
@@ -656,7 +658,7 @@ var DropdownDirective = class DropdownDirective {
656
658
  const overlay = this.overlay.create({
657
659
  positionStrategy,
658
660
  scrollStrategy: this.overlay.scrollStrategies.noop(),
659
- usePopover: !!this.elementRef.nativeElement.closest("dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]"),
661
+ usePopover: !!this.overlayContext?.useTopLayer || !!this.elementRef.nativeElement.closest("dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]"),
660
662
  hasBackdrop: this.bxTransition() === "none",
661
663
  backdropClass: "cdk-overlay-transparent-backdrop"
662
664
  });
@@ -864,6 +866,7 @@ i0.ɵɵngDeclareClassMetadata({
864
866
  var ContextMenuDirective = class ContextMenuDirective {
865
867
  overlay = inject(Overlay);
866
868
  positionBuilder = inject(BxOverlayPositionService);
869
+ overlayContext = inject(BX_OVERLAY_CONTEXT, { optional: true });
867
870
  elementRef = inject(ElementRef);
868
871
  a11y = inject(BxA11yService);
869
872
  zone = inject(NgZone);
@@ -917,7 +920,7 @@ var ContextMenuDirective = class ContextMenuDirective {
917
920
  this.overlayRef = this.overlay.create({
918
921
  positionStrategy: this.positionBuilder.getCoordinateStrategy(x, y),
919
922
  scrollStrategy: this.overlay.scrollStrategies.noop(),
920
- usePopover: !!source.closest("dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]"),
923
+ usePopover: !!this.overlayContext?.useTopLayer || !!source.closest("dialog, [role=\"dialog\"], [role=\"alertdialog\"], bx-modal, bx-modal-core, [popover]"),
921
924
  hasBackdrop: true,
922
925
  backdropClass: "cdk-overlay-transparent-backdrop"
923
926
  });
@@ -1063,6 +1066,64 @@ i0.ɵɵngDeclareClassMetadata({
1063
1066
  }]
1064
1067
  }
1065
1068
  });
1066
- export { ContextMenuDirective, DropdownDirective, Menu, MenuItem, Tooltip, TooltipDirective };
1069
+ var BxOverlayContextDirective = class BxOverlayContextDirective {
1070
+ bxOverlayContext = input({}, ...ngDevMode ? [{ debugName: "bxOverlayContext" }] : /* istanbul ignore next */ []);
1071
+ get useTopLayer() {
1072
+ return this.bxOverlayContext().useTopLayer;
1073
+ }
1074
+ static ɵfac = i0.ɵɵngDeclareFactory({
1075
+ minVersion: "12.0.0",
1076
+ version: "22.2.3",
1077
+ ngImport: i0,
1078
+ type: BxOverlayContextDirective,
1079
+ deps: [],
1080
+ target: i0.ɵɵFactoryTarget.Directive
1081
+ });
1082
+ static ɵdir = i0.ɵɵngDeclareDirective({
1083
+ minVersion: "17.1.0",
1084
+ version: "22.2.3",
1085
+ type: BxOverlayContextDirective,
1086
+ isStandalone: true,
1087
+ selector: "[bxOverlayContext]",
1088
+ inputs: { bxOverlayContext: {
1089
+ classPropertyName: "bxOverlayContext",
1090
+ publicName: "bxOverlayContext",
1091
+ isSignal: true,
1092
+ isRequired: false,
1093
+ transformFunction: null
1094
+ } },
1095
+ providers: [{
1096
+ provide: BX_OVERLAY_CONTEXT,
1097
+ useExisting: forwardRef(() => BxOverlayContextDirective)
1098
+ }],
1099
+ ngImport: i0
1100
+ });
1101
+ };
1102
+ i0.ɵɵngDeclareClassMetadata({
1103
+ minVersion: "12.0.0",
1104
+ version: "22.2.3",
1105
+ ngImport: i0,
1106
+ type: BxOverlayContextDirective,
1107
+ decorators: [{
1108
+ type: Directive,
1109
+ args: [{
1110
+ selector: "[bxOverlayContext]",
1111
+ standalone: true,
1112
+ providers: [{
1113
+ provide: BX_OVERLAY_CONTEXT,
1114
+ useExisting: forwardRef(() => BxOverlayContextDirective)
1115
+ }]
1116
+ }]
1117
+ }],
1118
+ propDecorators: { bxOverlayContext: [{
1119
+ type: i0.Input,
1120
+ args: [{
1121
+ isSignal: true,
1122
+ alias: "bxOverlayContext",
1123
+ required: false
1124
+ }]
1125
+ }] }
1126
+ });
1127
+ export { BX_OVERLAY_CONTEXT, BxOverlayContextDirective, ContextMenuDirective, DropdownDirective, Menu, MenuItem, Tooltip, TooltipDirective };
1067
1128
 
1068
1129
  //# sourceMappingURL=filip.mazev-blocks-primitives.mjs.map
@@ -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/dropdown.directive.ts","../../../projects/blocks/primitives/directives/context-menu.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 { 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 { 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 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 // Page menus follow application z-index; dialog menus still escape their container.\n usePopover: !!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 { 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 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: !!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"],"mappings":"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"}
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:\n !!this.overlayContext?.useTopLayer ||\n !!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.4";
1
+ const BLOCKS_VERSION = "1.4.6";
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.4';\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.6';\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.4",
3
+ "version": "1.4.6",
4
4
  "license": "MIT",
5
5
  "schematics": "./schematics/collection.json",
6
6
  "exports": {