@filip.mazev/blocks 1.4.7 → 1.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/styles/themes/_high-contrast-theme.scss +18 -20
- package/fesm2022/filip.mazev-blocks-core.mjs +10 -5
- package/fesm2022/filip.mazev-blocks-core.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-effects-runtime.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-forms.mjs +53 -15
- package/fesm2022/filip.mazev-blocks-forms.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-icons.mjs +564 -564
- package/fesm2022/filip.mazev-blocks-icons.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-primitives.mjs +163 -10
- package/fesm2022/filip.mazev-blocks-primitives.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks.mjs +1 -1
- package/fesm2022/filip.mazev-blocks.mjs.map +1 -1
- package/package.json +1 -1
- package/types/filip.mazev-blocks-core.d.ts +4 -1
- package/types/filip.mazev-blocks-forms.d.ts +8 -1
- package/types/filip.mazev-blocks-icons.d.ts +1 -1
- package/types/filip.mazev-blocks-primitives.d.ts +19 -2
- package/types/filip.mazev-blocks.d.ts +1 -1
|
@@ -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, InjectionToken, NgZone, PLATFORM_ID, ViewContainerRef, computed, effect, forwardRef, inject, input, output, signal } from "@angular/core";
|
|
3
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, Directive, ElementRef, HostListener, InjectionToken, NgZone, PLATFORM_ID, ViewContainerRef, booleanAttribute, 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";
|
|
@@ -709,10 +709,11 @@ var DropdownDirective = class DropdownDirective {
|
|
|
709
709
|
const pane = this.overlayRef?.overlayElement;
|
|
710
710
|
if (!pane) return [];
|
|
711
711
|
return Array.from(pane.querySelectorAll("button, a[href], [role=\"menuitem\"]")).filter((item) => {
|
|
712
|
-
if (item.matches(":disabled, [disabled], [aria-disabled=\"true\"]
|
|
712
|
+
if (item.matches(":disabled, [disabled], [aria-disabled=\"true\"]") || item.closest("[aria-disabled=\"true\"]")) return false;
|
|
713
713
|
if (item.closest("[hidden], [inert], [aria-hidden=\"true\"]")) return false;
|
|
714
|
+
if (item.tabIndex < 0 && !item.hasAttribute("tabindex")) return false;
|
|
714
715
|
const style = item.ownerDocument.defaultView?.getComputedStyle(item);
|
|
715
|
-
return style
|
|
716
|
+
return !!style && style.display !== "none" && style.visibility !== "hidden" && item.getClientRects().length > 0;
|
|
716
717
|
});
|
|
717
718
|
}
|
|
718
719
|
navigateMenu(event) {
|
|
@@ -872,6 +873,49 @@ var ContextMenuDirective = class ContextMenuDirective {
|
|
|
872
873
|
zone = inject(NgZone);
|
|
873
874
|
vcr = inject(ViewContainerRef);
|
|
874
875
|
bxContextMenu = input.required(...ngDevMode ? [{ debugName: "bxContextMenu" }] : /* istanbul ignore next */ []);
|
|
876
|
+
bxContextMenuLongPress = input(true, {
|
|
877
|
+
...ngDevMode ? { debugName: "bxContextMenuLongPress" } : /* istanbul ignore next */ {},
|
|
878
|
+
transform: booleanAttribute
|
|
879
|
+
});
|
|
880
|
+
onPointerDown = (event) => {
|
|
881
|
+
this.lastPointerType = event.pointerType;
|
|
882
|
+
this.cancelTouchPress();
|
|
883
|
+
if (event.isPrimary) this.clearTouchGuard();
|
|
884
|
+
if (event.pointerType !== "touch" || !event.isPrimary || event.button !== 0 || !this.bxContextMenuLongPress() || this.hasNativeTouchAction(event)) return;
|
|
885
|
+
const doc = this.elementRef.nativeElement.ownerDocument;
|
|
886
|
+
const win = doc.defaultView;
|
|
887
|
+
if (!win || this.hasTextSelection()) return;
|
|
888
|
+
const press = {
|
|
889
|
+
pointerId: event.pointerId,
|
|
890
|
+
x: event.clientX,
|
|
891
|
+
y: event.clientY,
|
|
892
|
+
timer: 0,
|
|
893
|
+
opened: false,
|
|
894
|
+
events: new AbortController()
|
|
895
|
+
};
|
|
896
|
+
this.touchPress = press;
|
|
897
|
+
const options = {
|
|
898
|
+
capture: true,
|
|
899
|
+
passive: true,
|
|
900
|
+
signal: press.events.signal
|
|
901
|
+
};
|
|
902
|
+
const finish = () => this.cancelTouchPress();
|
|
903
|
+
doc.addEventListener("pointermove", (move) => {
|
|
904
|
+
if (move.pointerId === press.pointerId && !press.opened && Math.hypot(move.clientX - press.x, move.clientY - press.y) > 10) finish();
|
|
905
|
+
}, options);
|
|
906
|
+
for (const type of ["pointerup", "pointercancel"]) doc.addEventListener(type, (end) => {
|
|
907
|
+
if (end.pointerId === press.pointerId) finish();
|
|
908
|
+
}, options);
|
|
909
|
+
doc.addEventListener("pointerdown", (next) => {
|
|
910
|
+
if (next.pointerId !== press.pointerId) finish();
|
|
911
|
+
}, options);
|
|
912
|
+
doc.addEventListener("scroll", finish, options);
|
|
913
|
+
doc.addEventListener("visibilitychange", () => {
|
|
914
|
+
if (doc.hidden) finish();
|
|
915
|
+
}, options);
|
|
916
|
+
win.addEventListener("blur", finish, { signal: press.events.signal });
|
|
917
|
+
press.timer = win.setTimeout(() => this.zone.run(() => this.openTouchMenu(press)), 500);
|
|
918
|
+
};
|
|
875
919
|
overlayRef = null;
|
|
876
920
|
transition;
|
|
877
921
|
point;
|
|
@@ -879,14 +923,36 @@ var ContextMenuDirective = class ContextMenuDirective {
|
|
|
879
923
|
disconnectLighting;
|
|
880
924
|
subscriptions = new Subscription();
|
|
881
925
|
revision = 0;
|
|
926
|
+
touchPress;
|
|
927
|
+
touchGuard;
|
|
928
|
+
touchGuardTimer;
|
|
929
|
+
lastPointerType = "";
|
|
882
930
|
constructor() {
|
|
931
|
+
const source = this.elementRef.nativeElement;
|
|
932
|
+
if (source.ownerDocument.defaultView) this.zone.runOutsideAngular(() => source.addEventListener("pointerdown", this.onPointerDown, { passive: true }));
|
|
883
933
|
inject(DestroyRef).onDestroy(() => {
|
|
884
934
|
++this.revision;
|
|
935
|
+
source.removeEventListener("pointerdown", this.onPointerDown);
|
|
936
|
+
this.cancelTouchPress();
|
|
937
|
+
this.clearTouchGuard();
|
|
885
938
|
this.dispose();
|
|
886
939
|
});
|
|
887
940
|
}
|
|
888
941
|
open(event) {
|
|
942
|
+
if (event.type === "contextmenu" && this.lastPointerType === "touch") {
|
|
943
|
+
const press = this.touchPress;
|
|
944
|
+
if (!press) return;
|
|
945
|
+
if (!this.bxContextMenuLongPress() || this.hasNativeTouchAction(event) || this.hasTextSelection()) {
|
|
946
|
+
this.cancelTouchPress();
|
|
947
|
+
return;
|
|
948
|
+
}
|
|
949
|
+
event.preventDefault();
|
|
950
|
+
this.openTouchMenu(press);
|
|
951
|
+
return;
|
|
952
|
+
}
|
|
889
953
|
event.preventDefault();
|
|
954
|
+
this.cancelTouchPress();
|
|
955
|
+
this.clearTouchGuard();
|
|
890
956
|
this.openAt(event.clientX, event.clientY);
|
|
891
957
|
}
|
|
892
958
|
close(restoreFocus = false) {
|
|
@@ -905,6 +971,9 @@ var ContextMenuDirective = class ContextMenuDirective {
|
|
|
905
971
|
onKey(event) {
|
|
906
972
|
if (event.key !== "ContextMenu" && !(event.shiftKey && event.key === "F10")) return;
|
|
907
973
|
event.preventDefault();
|
|
974
|
+
this.lastPointerType = "";
|
|
975
|
+
this.cancelTouchPress();
|
|
976
|
+
this.clearTouchGuard();
|
|
908
977
|
const rect = this.elementRef.nativeElement.getBoundingClientRect();
|
|
909
978
|
this.openAt(rect.left + Math.min(24, rect.width / 2), rect.bottom);
|
|
910
979
|
this.items()[0]?.focus();
|
|
@@ -913,6 +982,73 @@ var ContextMenuDirective = class ContextMenuDirective {
|
|
|
913
982
|
const target = event.target;
|
|
914
983
|
if (target && this.overlayRef?.overlayElement.contains(target) && target.closest("button, a, [role=\"menuitem\"]")) this.close();
|
|
915
984
|
}
|
|
985
|
+
hasNativeTouchAction(event) {
|
|
986
|
+
const source = this.elementRef.nativeElement;
|
|
987
|
+
for (const node of event.composedPath()) if (node instanceof HTMLElement) {
|
|
988
|
+
if (node.isContentEditable || node.matches("input, textarea, select, :disabled, [aria-disabled=\"true\"], [inert]")) return true;
|
|
989
|
+
if (node === source) break;
|
|
990
|
+
}
|
|
991
|
+
return !!source.closest(":disabled, [aria-disabled=\"true\"], [inert]");
|
|
992
|
+
}
|
|
993
|
+
hasTextSelection() {
|
|
994
|
+
const source = this.elementRef.nativeElement;
|
|
995
|
+
const selection = source.ownerDocument.getSelection();
|
|
996
|
+
return !!selection && !selection.isCollapsed && (source.contains(selection.anchorNode) || source.contains(selection.focusNode));
|
|
997
|
+
}
|
|
998
|
+
openTouchMenu(press) {
|
|
999
|
+
if (this.touchPress !== press || press.opened) return;
|
|
1000
|
+
const source = this.elementRef.nativeElement;
|
|
1001
|
+
if (!this.bxContextMenuLongPress() || !source.isConnected || source.isContentEditable || source.closest(":disabled, [aria-disabled=\"true\"], [inert]") || this.hasTextSelection()) {
|
|
1002
|
+
this.cancelTouchPress();
|
|
1003
|
+
return;
|
|
1004
|
+
}
|
|
1005
|
+
press.opened = true;
|
|
1006
|
+
this.elementRef.nativeElement.ownerDocument.defaultView?.clearTimeout(press.timer);
|
|
1007
|
+
this.guardTouchRelease();
|
|
1008
|
+
this.openAt(press.x, press.y + 12);
|
|
1009
|
+
}
|
|
1010
|
+
cancelTouchPress() {
|
|
1011
|
+
const press = this.touchPress;
|
|
1012
|
+
if (!press) return;
|
|
1013
|
+
this.touchPress = void 0;
|
|
1014
|
+
const win = this.elementRef.nativeElement.ownerDocument.defaultView;
|
|
1015
|
+
win?.clearTimeout(press.timer);
|
|
1016
|
+
press.events.abort();
|
|
1017
|
+
if (press.opened && win) this.touchGuardTimer = win.setTimeout(() => this.clearTouchGuard(), 800);
|
|
1018
|
+
}
|
|
1019
|
+
guardTouchRelease() {
|
|
1020
|
+
this.clearTouchGuard();
|
|
1021
|
+
const doc = this.elementRef.nativeElement.ownerDocument;
|
|
1022
|
+
const guard = new AbortController();
|
|
1023
|
+
this.touchGuard = guard;
|
|
1024
|
+
const options = {
|
|
1025
|
+
capture: true,
|
|
1026
|
+
signal: guard.signal
|
|
1027
|
+
};
|
|
1028
|
+
doc.addEventListener("click", (event) => {
|
|
1029
|
+
if (event.detail === 0) return;
|
|
1030
|
+
event.preventDefault();
|
|
1031
|
+
event.stopImmediatePropagation();
|
|
1032
|
+
this.clearTouchGuard();
|
|
1033
|
+
}, options);
|
|
1034
|
+
doc.addEventListener("contextmenu", (event) => {
|
|
1035
|
+
event.preventDefault();
|
|
1036
|
+
event.stopImmediatePropagation();
|
|
1037
|
+
}, options);
|
|
1038
|
+
doc.addEventListener("pointerdown", (event) => {
|
|
1039
|
+
if (event.isPrimary) this.clearTouchGuard();
|
|
1040
|
+
}, {
|
|
1041
|
+
...options,
|
|
1042
|
+
passive: true
|
|
1043
|
+
});
|
|
1044
|
+
doc.addEventListener("keydown", () => this.clearTouchGuard(), options);
|
|
1045
|
+
}
|
|
1046
|
+
clearTouchGuard() {
|
|
1047
|
+
this.touchGuard?.abort();
|
|
1048
|
+
this.touchGuard = void 0;
|
|
1049
|
+
this.elementRef.nativeElement.ownerDocument.defaultView?.clearTimeout(this.touchGuardTimer);
|
|
1050
|
+
this.touchGuardTimer = void 0;
|
|
1051
|
+
}
|
|
916
1052
|
openAt(x, y) {
|
|
917
1053
|
this.dispose();
|
|
918
1054
|
++this.revision;
|
|
@@ -1018,13 +1154,22 @@ var ContextMenuDirective = class ContextMenuDirective {
|
|
|
1018
1154
|
type: ContextMenuDirective,
|
|
1019
1155
|
isStandalone: true,
|
|
1020
1156
|
selector: "[bxContextMenu]",
|
|
1021
|
-
inputs: {
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1157
|
+
inputs: {
|
|
1158
|
+
bxContextMenu: {
|
|
1159
|
+
classPropertyName: "bxContextMenu",
|
|
1160
|
+
publicName: "bxContextMenu",
|
|
1161
|
+
isSignal: true,
|
|
1162
|
+
isRequired: true,
|
|
1163
|
+
transformFunction: null
|
|
1164
|
+
},
|
|
1165
|
+
bxContextMenuLongPress: {
|
|
1166
|
+
classPropertyName: "bxContextMenuLongPress",
|
|
1167
|
+
publicName: "bxContextMenuLongPress",
|
|
1168
|
+
isSignal: true,
|
|
1169
|
+
isRequired: false,
|
|
1170
|
+
transformFunction: null
|
|
1171
|
+
}
|
|
1172
|
+
},
|
|
1028
1173
|
host: { listeners: {
|
|
1029
1174
|
"contextmenu": "open($event)",
|
|
1030
1175
|
"keydown": "onKey($event)",
|
|
@@ -1052,6 +1197,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1052
1197
|
required: true
|
|
1053
1198
|
}]
|
|
1054
1199
|
}],
|
|
1200
|
+
bxContextMenuLongPress: [{
|
|
1201
|
+
type: i0.Input,
|
|
1202
|
+
args: [{
|
|
1203
|
+
isSignal: true,
|
|
1204
|
+
alias: "bxContextMenuLongPress",
|
|
1205
|
+
required: false
|
|
1206
|
+
}]
|
|
1207
|
+
}],
|
|
1055
1208
|
open: [{
|
|
1056
1209
|
type: HostListener,
|
|
1057
1210
|
args: ["contextmenu", ["$event"]]
|
|
@@ -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":"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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 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 +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.
|
|
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.9';\n"],"mappings":"AAIA,MAAa,iBAAiB"}
|
package/package.json
CHANGED
|
@@ -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'
|
|
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>;
|