@tailng-ui/primitives 0.46.0 → 0.48.0
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/package.json +2 -2
- package/src/lib/form/_shared/select/tng-select.overlay.shared.d.ts +3 -2
- package/src/lib/form/_shared/select/tng-select.overlay.shared.d.ts.map +1 -1
- package/src/lib/form/_shared/select/tng-select.overlay.shared.js +9 -8
- package/src/lib/form/_shared/select/tng-select.overlay.shared.js.map +1 -1
- package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts +2 -1
- package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts.map +1 -1
- package/src/lib/form/datepicker/tng-datepicker.overlay.js +13 -9
- package/src/lib/form/datepicker/tng-datepicker.overlay.js.map +1 -1
- package/src/lib/overlay/popover/tng-popover.d.ts +3 -0
- package/src/lib/overlay/popover/tng-popover.d.ts.map +1 -1
- package/src/lib/overlay/popover/tng-popover.js +21 -0
- package/src/lib/overlay/popover/tng-popover.js.map +1 -1
- package/src/lib/overlay/tooltip/tng-tooltip.d.ts +1 -1
- package/src/lib/overlay/tooltip/tng-tooltip.d.ts.map +1 -1
- package/src/lib/overlay/tooltip/tng-tooltip.js +2 -1
- package/src/lib/overlay/tooltip/tng-tooltip.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tailng-ui/primitives",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.48.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
19
|
"@angular/core": "^21.1.0",
|
|
20
|
-
"@tailng-ui/cdk": "^0.
|
|
20
|
+
"@tailng-ui/cdk": "^0.34.0",
|
|
21
21
|
"tslib": "^2.3.0"
|
|
22
22
|
},
|
|
23
23
|
"sideEffects": false
|
|
@@ -3,9 +3,10 @@ export declare class TngSelectOverlay {
|
|
|
3
3
|
private readonly host;
|
|
4
4
|
private readonly elRef;
|
|
5
5
|
private readonly destroyRef;
|
|
6
|
+
private readonly instanceId;
|
|
7
|
+
private readonly scrollLock;
|
|
6
8
|
private lastFocusedBeforeOpen;
|
|
7
9
|
private removeResizeListener;
|
|
8
|
-
private removeScrollListener;
|
|
9
10
|
private resizeObserver;
|
|
10
11
|
readonly placement: import("@angular/core").InputSignal<Readonly<{
|
|
11
12
|
align?: import("@tailng-ui/cdk").TngOverlayAlign;
|
|
@@ -20,7 +21,7 @@ export declare class TngSelectOverlay {
|
|
|
20
21
|
padding?: number;
|
|
21
22
|
shift?: boolean;
|
|
22
23
|
}> | undefined>;
|
|
23
|
-
protected readonly dataSlot:
|
|
24
|
+
protected readonly dataSlot: "select-overlay";
|
|
24
25
|
protected get hidden(): '' | null;
|
|
25
26
|
private placeholder;
|
|
26
27
|
private originalParent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-select.overlay.shared.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/select/tng-select.overlay.shared.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"tng-select.overlay.shared.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/select/tng-select.overlay.shared.ts"],"names":[],"mappings":";AAkHA,qBAIa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6C;IAClE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+C;IACrE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;IAC1D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAExB;IAEH,OAAO,CAAC,qBAAqB,CAA4B;IACzD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,cAAc,CAA+B;IAErD,SAAgB,SAAS;;;oBAAqD;IAC9E,SAAgB,MAAM;;;oBAAkD;IACxE,SAAgB,SAAS;;;;oBAA4D;IAGrF,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,gBAAgB,CAAU;IAGxD,SAAS,KAAK,MAAM,IAAI,EAAE,GAAG,IAAI,CAEhC;IAED,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,wBAAwB,CAA6B;;IAsB7D,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,wBAAwB;IAsBhC,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,sBAAsB;IAqB9B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,sBAAsB;IAiD9B,OAAO,CAAC,oBAAoB;IAuC5B,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,mBAAmB;yCArQhB,gBAAgB;2CAAhB,gBAAgB;CAkR5B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DestroyRef, Directive, ElementRef, HostBinding, inject, input, effect, } from '@angular/core';
|
|
2
|
-
import { computeOverlayPosition } from '@tailng-ui/cdk';
|
|
2
|
+
import { computeOverlayPosition, createTngIdFactory, getGlobalScrollLockManager, } from '@tailng-ui/cdk';
|
|
3
3
|
import { TNG_SELECT_HOST } from './tng-select.tokens.shared';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
const PORTALLED_SELECT_THEME_VARS = [
|
|
@@ -67,6 +67,7 @@ const PORTALLED_SELECT_THEME_VARS = [
|
|
|
67
67
|
];
|
|
68
68
|
const TNG_OVERLAY_LAYER_ID_ATTR = 'data-tng-overlay-layer-id';
|
|
69
69
|
const TNG_OVERLAY_OWNER_ID_ATTR = 'data-tng-overlay-owner-id';
|
|
70
|
+
const createSelectOverlayLockId = createTngIdFactory('tng-select-overlay-lock');
|
|
70
71
|
function rectFromClientRect(r) {
|
|
71
72
|
return { left: r.left, top: r.top, width: r.width, height: r.height };
|
|
72
73
|
}
|
|
@@ -81,11 +82,14 @@ function resolveOverlayOwnerId(host) {
|
|
|
81
82
|
}
|
|
82
83
|
export class TngSelectOverlay {
|
|
83
84
|
host = inject(TNG_SELECT_HOST);
|
|
84
|
-
elRef = inject(
|
|
85
|
+
elRef = inject(ElementRef);
|
|
85
86
|
destroyRef = inject(DestroyRef);
|
|
87
|
+
instanceId = createSelectOverlayLockId();
|
|
88
|
+
scrollLock = getGlobalScrollLockManager({
|
|
89
|
+
documentRef: this.elRef.nativeElement.ownerDocument,
|
|
90
|
+
});
|
|
86
91
|
lastFocusedBeforeOpen = null;
|
|
87
92
|
removeResizeListener = null;
|
|
88
|
-
removeScrollListener = null;
|
|
89
93
|
resizeObserver = null;
|
|
90
94
|
placement = input(undefined, ...(ngDevMode ? [{ debugName: "placement" }] : []));
|
|
91
95
|
offset = input(undefined, ...(ngDevMode ? [{ debugName: "offset" }] : []));
|
|
@@ -148,11 +152,8 @@ export class TngSelectOverlay {
|
|
|
148
152
|
});
|
|
149
153
|
};
|
|
150
154
|
const onResize = () => schedule();
|
|
151
|
-
const onScroll = () => schedule();
|
|
152
155
|
window.addEventListener('resize', onResize);
|
|
153
|
-
window.addEventListener('scroll', onScroll, true);
|
|
154
156
|
this.removeResizeListener = () => window.removeEventListener('resize', onResize);
|
|
155
|
-
this.removeScrollListener = () => window.removeEventListener('scroll', onScroll, true);
|
|
156
157
|
if ('ResizeObserver' in window) {
|
|
157
158
|
this.resizeObserver = new ResizeObserver(() => schedule());
|
|
158
159
|
const trigger = this.findTriggerEl();
|
|
@@ -163,9 +164,7 @@ export class TngSelectOverlay {
|
|
|
163
164
|
}
|
|
164
165
|
teardownRepositionListeners() {
|
|
165
166
|
this.removeResizeListener?.();
|
|
166
|
-
this.removeScrollListener?.();
|
|
167
167
|
this.removeResizeListener = null;
|
|
168
|
-
this.removeScrollListener = null;
|
|
169
168
|
this.resizeObserver?.disconnect();
|
|
170
169
|
this.resizeObserver = null;
|
|
171
170
|
}
|
|
@@ -206,6 +205,7 @@ export class TngSelectOverlay {
|
|
|
206
205
|
}
|
|
207
206
|
mountToBodyAndPosition() {
|
|
208
207
|
this.lastFocusedBeforeOpen = document.activeElement;
|
|
208
|
+
this.scrollLock.acquire(this.instanceId);
|
|
209
209
|
this.setupRepositionListeners();
|
|
210
210
|
const panel = this.elRef.nativeElement;
|
|
211
211
|
const ownerId = resolveOverlayOwnerId(this.host.hostElement);
|
|
@@ -259,6 +259,7 @@ export class TngSelectOverlay {
|
|
|
259
259
|
this.originalParent.appendChild(panel);
|
|
260
260
|
}
|
|
261
261
|
this.teardownRepositionListeners();
|
|
262
|
+
this.scrollLock.release(this.instanceId);
|
|
262
263
|
if (this.lastFocusedBeforeOpen &&
|
|
263
264
|
document.contains(this.lastFocusedBeforeOpen)) {
|
|
264
265
|
const active = document.activeElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-select.overlay.shared.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/select/tng-select.overlay.shared.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,MAAM,EACN,KAAK,EACL,MAAM,GACP,MAAM,eAAe,CAAC;AAMvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;;AAU7D,MAAM,2BAA2B,GAAG;IAClC,qBAAqB;IACrB,4BAA4B;IAC5B,iCAAiC;IACjC,yBAAyB;IACzB,yBAAyB;IACzB,0BAA0B;IAC1B,wBAAwB;IACxB,2BAA2B;IAC3B,uCAAuC;IACvC,8BAA8B;IAC9B,6BAA6B;IAC7B,6BAA6B;IAC7B,gCAAgC;IAChC,wBAAwB;IACxB,8BAA8B;IAC9B,iBAAiB;IACjB,6BAA6B;IAC7B,yBAAyB;IACzB,iCAAiC;IACjC,0BAA0B;IAC1B,gCAAgC;IAChC,wBAAwB;IACxB,wBAAwB;IACxB,4BAA4B;IAC5B,+BAA+B;IAC/B,mCAAmC;IACnC,iCAAiC;IACjC,qCAAqC;IACrC,iCAAiC;IACjC,wCAAwC;IACxC,4CAA4C;IAC5C,4CAA4C;IAC5C,sCAAsC;IACtC,iCAAiC;IACjC,8BAA8B;IAC9B,gCAAgC;IAChC,0BAA0B;IAC1B,qCAAqC;IACrC,qBAAqB;IACrB,4BAA4B;IAC5B,2BAA2B;IAC3B,iBAAiB;IACjB,sBAAsB;IACtB,iBAAiB;IACjB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,yBAAyB;IACzB,mBAAmB;IACnB,qBAAqB;IACrB,2BAA2B;IAC3B,gCAAgC;IAChC,mCAAmC;IACnC,8BAA8B;IAC9B,8BAA8B;IAC9B,mCAAmC;IACnC,qCAAqC;IACrC,iCAAiC;IACjC,6BAA6B;IAC7B,8BAA8B;IAC9B,2BAA2B;CACnB,CAAC;AAEX,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AAC9D,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AAE9D,SAAS,kBAAkB,CAAC,CAAuB;IACjD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,IAAI,GAAG,EAAE,CAAC;AAClG,CAAC;AAED,SAAS,QAAQ,CAAC,MAA0B,EAAE,SAAsB;IAClE,OAAO,CAAC,CAAC,MAAM,IAAI,MAAM,YAAY,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAiB;IAC9C,OAAO,IAAI,CAAC,OAAO,CAAc,IAAI,yBAAyB,GAAG,CAAC,EAAE,YAAY,CAAC,yBAAyB,CAAC,IAAI,IAAI,CAAC;AACtH,CAAC;AAMD,MAAM,OAAO,gBAAgB;IACV,IAAI,GAAG,MAAM,CAAmB,eAAe,CAAC,CAAC;IACjD,KAAK,GAAG,MAAM,CAAC,CAAA,UAAuB,CAAA,CAAC,CAAC;IACxC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEzC,qBAAqB,GAAuB,IAAI,CAAC;IACjD,oBAAoB,GAAwB,IAAI,CAAC;IACjD,oBAAoB,GAAwB,IAAI,CAAC;IACjD,cAAc,GAA0B,IAAI,CAAC;IAE5C,SAAS,GAAG,KAAK,CAAkC,SAAS,qDAAC,CAAC;IAC9D,MAAM,GAAG,KAAK,CAA+B,SAAS,kDAAC,CAAC;IACxD,SAAS,GAAG,KAAK,CAAyC,SAAS,qDAAC,CAAC;IAG3D,QAAQ,GAAqB,gBAAgB,CAAC;IAEjE,IACc,MAAM;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,CAAC;IAEO,WAAW,GAAmB,IAAI,CAAC;IACnC,cAAc,GAAgB,IAAI,CAAC;IACnC,wBAAwB,GAAwB,IAAI,CAAC;IAE7D;QACE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAE5D,MAAM,CAAC,GAAG,EAAE;YACV,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,IAAI;gBAAE,IAAI,CAAC,sBAAsB,EAAE,CAAC;;gBACnC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE;YAC7B,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAEhC,MAAM,MAAM,GAAG,sBAAsB,CAAC;YACpC,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,OAAO;YACpB,YAAY,EAAE,QAAQ;YACtB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;SAC5B,CAAC,CAAC;QAEH,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;QACnC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;IACpC,CAAC;IAEO,wBAAwB;QAC9B,IAAI,KAAK,GAAkB,IAAI,CAAC;QAChC,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO;YAC3B,KAAK,GAAG,qBAAqB,CAAC,GAAG,EAAE;gBACjC,KAAK,GAAG,IAAI,CAAC;gBACb,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,oBAAoB,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjF,IAAI,CAAC,oBAAoB,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEvF,IAAI,gBAAgB,IAAI,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,IAAI,OAAO;gBAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAEO,2BAA2B;QACjC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC9B,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC9B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAEO,aAAa;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QACnC,OAAO,IAAI,CAAC,aAAa,CAAC,8BAA8B,CAAuB,CAAC;IAClF,CAAC;IAEO,sBAAsB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACvC,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE3D,KAAK,MAAM,MAAM,IAAI,2BAA2B,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,UAAU,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACzD,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;QACnD,IAAI,WAAW,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC5C,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAEO,sBAAsB;QAC5B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM;YACnC,yFAAyF,CAAC;IAC9F,CAAC;IAEO,uBAAuB;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QAEvC,KAAK,MAAM,MAAM,IAAI,2BAA2B,EAAE,CAAC;YACjD,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC;IAEO,sBAAsB;QAC5B,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,aAAmC,CAAC;QAC1E,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACvC,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,KAAK,CAAC,YAAY,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC/B,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACzB,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,cAAc,CAAC,GAAG,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;YACnE,MAAM,aAAa,GAAG,YAAY,EAAE,CAAC,KAAK,CAAC;YAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC;YAC3E,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,UAAU,IAAI,CAAC;YACtC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,UAAU,IAAI,CAAC;YAEzC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,sBAAsB,CAAC;gBACpC,UAAU,EAAE,MAAM;gBAClB,WAAW,EAAE,OAAO;gBACpB,YAAY,EAAE,QAAQ;gBACtB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;gBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;aAC5B,CAAC,CAAC;YAEH,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;YACnC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAEO,oBAAoB,CAAC,KAAK,GAAG,KAAK;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACvC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjD,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACpE,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,2BAA2B,EAAE,CAAC;QAEnC,IACE,IAAI,CAAC,qBAAqB;YAC1B,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAC7C,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAmC,CAAC;YAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YACzC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;YACrC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;QAC1B,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;QACtB,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;QACrB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QACvB,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;QAC1B,KAAK,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAC;QACjD,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAChC,CAAC;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,wBAAwB;YAAE,OAAO;QAE1C,MAAM,aAAa,GAAG,CAAC,EAAgB,EAAE,EAAE;YACzC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,IAAI,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;gBAAE,OAAO;YACvC,IAAI,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;gBAAE,OAAO;YACpD,IACE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACpB,EAAE,CAAC,MAAM;gBACR,EAAE,CAAC,MAAkB,CAAC,OAAO,EAAE,CAC9B,gEAAgE,CACjE;gBAED,OAAO;YACT,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC,CAAC;QAEF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,wBAAwB,GAAG,GAAG,EAAE;YACnC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QACnE,CAAC,CAAC;IACJ,CAAC;IAEO,sBAAsB;QAC5B,IAAI,CAAC,wBAAwB,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;IACvC,CAAC;IAEO,mBAAmB;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAmC,CAAC;QAC5D,IAAI,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,OAAO,EAAE,KAAK,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,CAAC,aAAa,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;uGAjRU,gBAAgB;2FAAhB,gBAAgB;;2FAAhB,gBAAgB;kBAJ5B,SAAS;mBAAC;oBACT,QAAQ,EAAE,oBAAoB;oBAC9B,QAAQ,EAAE,kBAAkB;iBAC7B;;sBAeE,WAAW;uBAAC,gBAAgB;;sBAG5B,WAAW;uBAAC,aAAa","sourcesContent":["import {\n DestroyRef,\n Directive,\n ElementRef,\n HostBinding,\n inject,\n input,\n effect,\n} from '@angular/core';\nimport type {\n TngOverlayCollisionOptions,\n TngOverlayOffset,\n TngOverlayPlacement,\n} from '@tailng-ui/cdk';\nimport { computeOverlayPosition } from '@tailng-ui/cdk';\n\nimport { TNG_SELECT_HOST } from './tng-select.tokens.shared';\nimport type { TngSelectHostApi } from './tng-select.host-api';\n\ntype MaybeRect = Readonly<{\n left: number;\n top: number;\n width: number;\n height: number;\n}>;\n\nconst PORTALLED_SELECT_THEME_VARS = [\n '--tng-select-radius',\n '--tng-select-trigger-width',\n '--tng-select-trigger-min-height',\n '--tng-select-trigger-py',\n '--tng-select-trigger-px',\n '--tng-select-trigger-gap',\n '--tng-select-icon-size',\n '--tng-select-icon-opacity',\n '--tng-select-icon-margin-inline-start',\n '--tng-select-overlay-padding',\n '--tng-select-overlay-radius',\n '--tng-select-overlay-shadow',\n '--tng-select-overlay-max-width',\n '--tng-select-z-overlay',\n '--tng-select-overlay-z-index',\n '--tng-z-overlay',\n '--tng-select-overlay-border',\n '--tng-select-overlay-bg',\n '--tng-select-overlay-max-height',\n '--tng-select-listbox-gap',\n '--tng-select-option-min-height',\n '--tng-select-option-py',\n '--tng-select-option-px',\n '--tng-select-option-radius',\n '--tng-select-option-bg-active',\n '--tng-select-option-border-active',\n '--tng-select-option-bg-selected',\n '--tng-select-option-border-selected',\n '--tng-select-option-fg-selected',\n '--tng-select-option-bg-selected-active',\n '--tng-select-option-border-selected-active',\n '--tng-select-option-shadow-selected-active',\n '--tng-select-option-disabled-opacity',\n '--tng-select-option-font-weight',\n '--tng-select-value-font-size',\n '--tng-select-value-font-weight',\n '--tng-select-value-color',\n '--tng-select-icon-margin-inline-end',\n '--tng-select-border',\n '--tng-select-border-strong',\n '--tng-select-border-hover',\n '--tng-select-bg',\n '--tng-select-surface',\n '--tng-select-fg',\n '--tng-select-muted',\n '--tng-select-brand',\n '--tng-select-danger',\n '--tng-select-focus-ring',\n '--tng-select-ease',\n '--tng-select-shadow',\n '--tng-select-shadow-focus',\n '--tng-semantic-background-base',\n '--tng-semantic-background-surface',\n '--tng-semantic-border-subtle',\n '--tng-semantic-border-strong',\n '--tng-semantic-foreground-primary',\n '--tng-semantic-foreground-secondary',\n '--tng-semantic-foreground-muted',\n '--tng-semantic-accent-brand',\n '--tng-semantic-accent-danger',\n '--tng-semantic-focus-ring',\n] as const;\n\nconst TNG_OVERLAY_LAYER_ID_ATTR = 'data-tng-overlay-layer-id';\nconst TNG_OVERLAY_OWNER_ID_ATTR = 'data-tng-overlay-owner-id';\n\nfunction rectFromClientRect(r: DOMRect | ClientRect): MaybeRect {\n return { left: r.left, top: r.top, width: r.width, height: r.height };\n}\n\nfunction viewportRect(): MaybeRect {\n return { left: 0, top: 0, width: window.innerWidth || 1024, height: window.innerHeight || 768 };\n}\n\nfunction isInside(target: EventTarget | null, container: HTMLElement): boolean {\n return !!target && target instanceof Node && container.contains(target);\n}\n\nfunction resolveOverlayOwnerId(host: HTMLElement): string | null {\n return host.closest<HTMLElement>(`[${TNG_OVERLAY_LAYER_ID_ATTR}]`)?.getAttribute(TNG_OVERLAY_LAYER_ID_ATTR) ?? null;\n}\n\n@Directive({\n selector: '[tngSelectOverlay]',\n exportAs: 'tngSelectOverlay',\n})\nexport class TngSelectOverlay {\n private readonly host = inject<TngSelectHostApi>(TNG_SELECT_HOST);\n private readonly elRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n private lastFocusedBeforeOpen: HTMLElement | null = null;\n private removeResizeListener: (() => void) | null = null;\n private removeScrollListener: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n\n readonly placement = input<TngOverlayPlacement | undefined>(undefined);\n readonly offset = input<TngOverlayOffset | undefined>(undefined);\n readonly collision = input<TngOverlayCollisionOptions | undefined>(undefined);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'select-overlay' = 'select-overlay';\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n return this.host.open() ? null : '';\n }\n\n private placeholder: Comment | null = null;\n private originalParent: Node | null = null;\n private removeDocPointerListener: (() => void) | null = null;\n\n constructor() {\n this.placeholder = document.createComment('tng-select-overlay-anchor');\n const hostEl = this.elRef.nativeElement;\n this.originalParent = hostEl.parentNode;\n this.originalParent?.insertBefore(this.placeholder, hostEl);\n\n effect(() => {\n const open = this.host.open();\n if (open) this.mountToBodyAndPosition();\n else this.restoreToPlaceholder();\n });\n\n this.destroyRef.onDestroy(() => {\n this.teardownOutsidePointer();\n this.restoreToPlaceholder(true);\n this.placeholder = null;\n this.originalParent = null;\n });\n }\n\n private reposition(): void {\n if (!this.host.open()) return;\n const panel = this.elRef.nativeElement;\n const trigger = this.findTriggerEl();\n if (!trigger) return;\n\n const anchor = rectFromClientRect(trigger.getBoundingClientRect());\n const overlay = rectFromClientRect(panel.getBoundingClientRect());\n const viewport = viewportRect();\n\n const result = computeOverlayPosition({\n anchorRect: anchor,\n overlayRect: overlay,\n viewportRect: viewport,\n placement: this.placement(),\n offset: this.offset(),\n collision: this.collision(),\n });\n\n panel.style.left = `${result.x}px`;\n panel.style.top = `${result.y}px`;\n }\n\n private setupRepositionListeners(): void {\n let rafId: number | null = null;\n const schedule = () => {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n this.reposition();\n });\n };\n\n const onResize = () => schedule();\n const onScroll = () => schedule();\n window.addEventListener('resize', onResize);\n window.addEventListener('scroll', onScroll, true);\n this.removeResizeListener = () => window.removeEventListener('resize', onResize);\n this.removeScrollListener = () => window.removeEventListener('scroll', onScroll, true);\n\n if ('ResizeObserver' in window) {\n this.resizeObserver = new ResizeObserver(() => schedule());\n const trigger = this.findTriggerEl();\n if (trigger) this.resizeObserver.observe(trigger);\n this.resizeObserver.observe(this.elRef.nativeElement);\n }\n }\n\n private teardownRepositionListeners(): void {\n this.removeResizeListener?.();\n this.removeScrollListener?.();\n this.removeResizeListener = null;\n this.removeScrollListener = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n private findTriggerEl(): HTMLElement | null {\n const root = this.host.hostElement;\n return root.querySelector('[data-slot=\"select-trigger\"]') as HTMLElement | null;\n }\n\n private syncPortalledThemeVars(): void {\n const panel = this.elRef.nativeElement;\n const hostStyles = getComputedStyle(this.host.hostElement);\n\n for (const cssVar of PORTALLED_SELECT_THEME_VARS) {\n const value = hostStyles.getPropertyValue(cssVar).trim();\n if (value) {\n panel.style.setProperty(cssVar, value);\n } else {\n panel.style.removeProperty(cssVar);\n }\n }\n\n const colorScheme = hostStyles.colorScheme?.trim();\n if (colorScheme && colorScheme !== 'normal') {\n panel.style.colorScheme = colorScheme;\n } else {\n panel.style.removeProperty('color-scheme');\n }\n }\n\n private applyPortalledStacking(): void {\n this.elRef.nativeElement.style.zIndex =\n 'var(--tng-select-z-overlay, var(--tng-select-overlay-z-index, var(--tng-z-overlay, 2)))';\n }\n\n private clearPortalledThemeVars(): void {\n const panel = this.elRef.nativeElement;\n\n for (const cssVar of PORTALLED_SELECT_THEME_VARS) {\n panel.style.removeProperty(cssVar);\n }\n\n panel.style.removeProperty('color-scheme');\n }\n\n private mountToBodyAndPosition(): void {\n this.lastFocusedBeforeOpen = document.activeElement as HTMLElement | null;\n this.setupRepositionListeners();\n const panel = this.elRef.nativeElement;\n const ownerId = resolveOverlayOwnerId(this.host.hostElement);\n if (ownerId !== null) {\n panel.setAttribute(TNG_OVERLAY_OWNER_ID_ATTR, ownerId);\n }\n\n if (panel.parentNode !== document.body) {\n document.body.appendChild(panel);\n }\n\n panel.style.position = 'fixed';\n panel.style.left = '0px';\n panel.style.top = '0px';\n this.syncPortalledThemeVars();\n this.applyPortalledStacking();\n\n queueMicrotask(() => {\n if (!this.host.open()) return;\n const trigger = this.findTriggerEl();\n if (!trigger) return;\n\n const anchor = rectFromClientRect(trigger.getBoundingClientRect());\n const viewportWidth = viewportRect().width;\n const inlineSize = Math.max(0, Math.min(anchor.width, viewportWidth - 16));\n panel.style.width = `${inlineSize}px`;\n panel.style.minWidth = `${inlineSize}px`;\n\n const overlay = rectFromClientRect(panel.getBoundingClientRect());\n const viewport = viewportRect();\n const result = computeOverlayPosition({\n anchorRect: anchor,\n overlayRect: overlay,\n viewportRect: viewport,\n placement: this.placement(),\n offset: this.offset(),\n collision: this.collision(),\n });\n\n panel.style.left = `${result.x}px`;\n panel.style.top = `${result.y}px`;\n });\n\n this.setupOutsidePointer();\n }\n\n private restoreToPlaceholder(force = false): void {\n const panel = this.elRef.nativeElement;\n if (!force && panel.parentNode !== document.body) {\n this.teardownOutsidePointer();\n return;\n }\n\n if (this.placeholder?.parentNode) {\n this.placeholder.parentNode.insertBefore(panel, this.placeholder);\n } else if (this.originalParent) {\n this.originalParent.appendChild(panel);\n }\n\n this.teardownRepositionListeners();\n\n if (\n this.lastFocusedBeforeOpen &&\n document.contains(this.lastFocusedBeforeOpen)\n ) {\n const active = document.activeElement as HTMLElement | null;\n const panelEl = this.elRef.nativeElement;\n if (!active || panelEl.contains(active)) {\n this.lastFocusedBeforeOpen.focus();\n }\n }\n\n this.restoreFocusOnClose();\n panel.style.position = '';\n panel.style.left = '';\n panel.style.top = '';\n panel.style.zIndex = '';\n panel.style.width = '';\n panel.style.minWidth = '';\n panel.removeAttribute(TNG_OVERLAY_OWNER_ID_ATTR);\n this.clearPortalledThemeVars();\n this.teardownOutsidePointer();\n }\n\n private setupOutsidePointer(): void {\n if (this.removeDocPointerListener) return;\n\n const onPointerDown = (ev: PointerEvent) => {\n if (!this.host.open()) return;\n const panel = this.elRef.nativeElement;\n const trigger = this.findTriggerEl();\n if (isInside(ev.target, panel)) return;\n if (trigger && isInside(ev.target, trigger)) return;\n if (\n this.host.multiple() &&\n ev.target &&\n (ev.target as Element).closest?.(\n '[data-slot=\"select-option\"], [data-slot=\"multi-select-option\"]'\n )\n )\n return;\n this.host.close();\n };\n\n document.addEventListener('pointerdown', onPointerDown, true);\n this.removeDocPointerListener = () => {\n document.removeEventListener('pointerdown', onPointerDown, true);\n };\n }\n\n private teardownOutsidePointer(): void {\n this.removeDocPointerListener?.();\n this.removeDocPointerListener = null;\n }\n\n private restoreFocusOnClose(): void {\n const panel = this.elRef.nativeElement;\n const active = document.activeElement as HTMLElement | null;\n if (active && panel.contains(active)) {\n const trigger = this.findTriggerEl();\n trigger?.focus();\n return;\n }\n if (document.activeElement === document.body) {\n const trigger = this.findTriggerEl();\n trigger?.focus();\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tng-select.overlay.shared.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/select/tng-select.overlay.shared.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DestroyRef,\n Directive,\n ElementRef,\n HostBinding,\n inject,\n input,\n effect,\n} from '@angular/core';\nimport type {\n TngOverlayCollisionOptions,\n TngOverlayOffset,\n TngOverlayPlacement,\n} from '@tailng-ui/cdk';\nimport {\n computeOverlayPosition,\n createTngIdFactory,\n getGlobalScrollLockManager,\n} from '@tailng-ui/cdk';\n\nimport type { TngSelectHostApi } from './tng-select.host-api';\nimport { TNG_SELECT_HOST } from './tng-select.tokens.shared';\n\ntype MaybeRect = Readonly<{\n left: number;\n top: number;\n width: number;\n height: number;\n}>;\n\nconst PORTALLED_SELECT_THEME_VARS = [\n '--tng-select-radius',\n '--tng-select-trigger-width',\n '--tng-select-trigger-min-height',\n '--tng-select-trigger-py',\n '--tng-select-trigger-px',\n '--tng-select-trigger-gap',\n '--tng-select-icon-size',\n '--tng-select-icon-opacity',\n '--tng-select-icon-margin-inline-start',\n '--tng-select-overlay-padding',\n '--tng-select-overlay-radius',\n '--tng-select-overlay-shadow',\n '--tng-select-overlay-max-width',\n '--tng-select-z-overlay',\n '--tng-select-overlay-z-index',\n '--tng-z-overlay',\n '--tng-select-overlay-border',\n '--tng-select-overlay-bg',\n '--tng-select-overlay-max-height',\n '--tng-select-listbox-gap',\n '--tng-select-option-min-height',\n '--tng-select-option-py',\n '--tng-select-option-px',\n '--tng-select-option-radius',\n '--tng-select-option-bg-active',\n '--tng-select-option-border-active',\n '--tng-select-option-bg-selected',\n '--tng-select-option-border-selected',\n '--tng-select-option-fg-selected',\n '--tng-select-option-bg-selected-active',\n '--tng-select-option-border-selected-active',\n '--tng-select-option-shadow-selected-active',\n '--tng-select-option-disabled-opacity',\n '--tng-select-option-font-weight',\n '--tng-select-value-font-size',\n '--tng-select-value-font-weight',\n '--tng-select-value-color',\n '--tng-select-icon-margin-inline-end',\n '--tng-select-border',\n '--tng-select-border-strong',\n '--tng-select-border-hover',\n '--tng-select-bg',\n '--tng-select-surface',\n '--tng-select-fg',\n '--tng-select-muted',\n '--tng-select-brand',\n '--tng-select-danger',\n '--tng-select-focus-ring',\n '--tng-select-ease',\n '--tng-select-shadow',\n '--tng-select-shadow-focus',\n '--tng-semantic-background-base',\n '--tng-semantic-background-surface',\n '--tng-semantic-border-subtle',\n '--tng-semantic-border-strong',\n '--tng-semantic-foreground-primary',\n '--tng-semantic-foreground-secondary',\n '--tng-semantic-foreground-muted',\n '--tng-semantic-accent-brand',\n '--tng-semantic-accent-danger',\n '--tng-semantic-focus-ring',\n] as const;\n\nconst TNG_OVERLAY_LAYER_ID_ATTR = 'data-tng-overlay-layer-id';\nconst TNG_OVERLAY_OWNER_ID_ATTR = 'data-tng-overlay-owner-id';\nconst createSelectOverlayLockId = createTngIdFactory('tng-select-overlay-lock');\n\nfunction rectFromClientRect(r: DOMRect | ClientRect): MaybeRect {\n return { left: r.left, top: r.top, width: r.width, height: r.height };\n}\n\nfunction viewportRect(): MaybeRect {\n return { left: 0, top: 0, width: window.innerWidth || 1024, height: window.innerHeight || 768 };\n}\n\nfunction isInside(target: EventTarget | null, container: HTMLElement): boolean {\n return !!target && target instanceof Node && container.contains(target);\n}\n\nfunction resolveOverlayOwnerId(host: HTMLElement): string | null {\n return host.closest<HTMLElement>(`[${TNG_OVERLAY_LAYER_ID_ATTR}]`)?.getAttribute(TNG_OVERLAY_LAYER_ID_ATTR) ?? null;\n}\n\n@Directive({\n selector: '[tngSelectOverlay]',\n exportAs: 'tngSelectOverlay',\n})\nexport class TngSelectOverlay {\n private readonly host = inject<TngSelectHostApi>(TNG_SELECT_HOST);\n private readonly elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly instanceId = createSelectOverlayLockId();\n private readonly scrollLock = getGlobalScrollLockManager({\n documentRef: this.elRef.nativeElement.ownerDocument,\n });\n\n private lastFocusedBeforeOpen: HTMLElement | null = null;\n private removeResizeListener: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n\n public readonly placement = input<TngOverlayPlacement | undefined>(undefined);\n public readonly offset = input<TngOverlayOffset | undefined>(undefined);\n public readonly collision = input<TngOverlayCollisionOptions | undefined>(undefined);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'select-overlay' as const;\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n return this.host.open() ? null : '';\n }\n\n private placeholder: Comment | null = null;\n private originalParent: Node | null = null;\n private removeDocPointerListener: (() => void) | null = null;\n\n public constructor() {\n this.placeholder = document.createComment('tng-select-overlay-anchor');\n const hostEl = this.elRef.nativeElement;\n this.originalParent = hostEl.parentNode;\n this.originalParent?.insertBefore(this.placeholder, hostEl);\n\n effect(() => {\n const open = this.host.open();\n if (open) this.mountToBodyAndPosition();\n else this.restoreToPlaceholder();\n });\n\n this.destroyRef.onDestroy(() => {\n this.teardownOutsidePointer();\n this.restoreToPlaceholder(true);\n this.placeholder = null;\n this.originalParent = null;\n });\n }\n\n private reposition(): void {\n if (!this.host.open()) return;\n const panel = this.elRef.nativeElement;\n const trigger = this.findTriggerEl();\n if (!trigger) return;\n\n const anchor = rectFromClientRect(trigger.getBoundingClientRect());\n const overlay = rectFromClientRect(panel.getBoundingClientRect());\n const viewport = viewportRect();\n\n const result = computeOverlayPosition({\n anchorRect: anchor,\n overlayRect: overlay,\n viewportRect: viewport,\n placement: this.placement(),\n offset: this.offset(),\n collision: this.collision(),\n });\n\n panel.style.left = `${result.x}px`;\n panel.style.top = `${result.y}px`;\n }\n\n private setupRepositionListeners(): void {\n let rafId: number | null = null;\n const schedule = (): void => {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n this.reposition();\n });\n };\n\n const onResize = (): void => schedule();\n window.addEventListener('resize', onResize);\n this.removeResizeListener = (): void => window.removeEventListener('resize', onResize);\n\n if ('ResizeObserver' in window) {\n this.resizeObserver = new ResizeObserver(() => schedule());\n const trigger = this.findTriggerEl();\n if (trigger) this.resizeObserver.observe(trigger);\n this.resizeObserver.observe(this.elRef.nativeElement);\n }\n }\n\n private teardownRepositionListeners(): void {\n this.removeResizeListener?.();\n this.removeResizeListener = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n private findTriggerEl(): HTMLElement | null {\n const root = this.host.hostElement;\n return root.querySelector('[data-slot=\"select-trigger\"]') as HTMLElement | null;\n }\n\n private syncPortalledThemeVars(): void {\n const panel = this.elRef.nativeElement;\n const hostStyles = getComputedStyle(this.host.hostElement);\n\n for (const cssVar of PORTALLED_SELECT_THEME_VARS) {\n const value = hostStyles.getPropertyValue(cssVar).trim();\n if (value) {\n panel.style.setProperty(cssVar, value);\n } else {\n panel.style.removeProperty(cssVar);\n }\n }\n\n const colorScheme = hostStyles.colorScheme?.trim();\n if (colorScheme && colorScheme !== 'normal') {\n panel.style.colorScheme = colorScheme;\n } else {\n panel.style.removeProperty('color-scheme');\n }\n }\n\n private applyPortalledStacking(): void {\n this.elRef.nativeElement.style.zIndex =\n 'var(--tng-select-z-overlay, var(--tng-select-overlay-z-index, var(--tng-z-overlay, 2)))';\n }\n\n private clearPortalledThemeVars(): void {\n const panel = this.elRef.nativeElement;\n\n for (const cssVar of PORTALLED_SELECT_THEME_VARS) {\n panel.style.removeProperty(cssVar);\n }\n\n panel.style.removeProperty('color-scheme');\n }\n\n private mountToBodyAndPosition(): void {\n this.lastFocusedBeforeOpen = document.activeElement as HTMLElement | null;\n this.scrollLock.acquire(this.instanceId);\n this.setupRepositionListeners();\n const panel = this.elRef.nativeElement;\n const ownerId = resolveOverlayOwnerId(this.host.hostElement);\n if (ownerId !== null) {\n panel.setAttribute(TNG_OVERLAY_OWNER_ID_ATTR, ownerId);\n }\n\n if (panel.parentNode !== document.body) {\n document.body.appendChild(panel);\n }\n\n panel.style.position = 'fixed';\n panel.style.left = '0px';\n panel.style.top = '0px';\n this.syncPortalledThemeVars();\n this.applyPortalledStacking();\n\n queueMicrotask(() => {\n if (!this.host.open()) return;\n const trigger = this.findTriggerEl();\n if (!trigger) return;\n\n const anchor = rectFromClientRect(trigger.getBoundingClientRect());\n const viewportWidth = viewportRect().width;\n const inlineSize = Math.max(0, Math.min(anchor.width, viewportWidth - 16));\n panel.style.width = `${inlineSize}px`;\n panel.style.minWidth = `${inlineSize}px`;\n\n const overlay = rectFromClientRect(panel.getBoundingClientRect());\n const viewport = viewportRect();\n const result = computeOverlayPosition({\n anchorRect: anchor,\n overlayRect: overlay,\n viewportRect: viewport,\n placement: this.placement(),\n offset: this.offset(),\n collision: this.collision(),\n });\n\n panel.style.left = `${result.x}px`;\n panel.style.top = `${result.y}px`;\n });\n\n this.setupOutsidePointer();\n }\n\n private restoreToPlaceholder(force = false): void {\n const panel = this.elRef.nativeElement;\n if (!force && panel.parentNode !== document.body) {\n this.teardownOutsidePointer();\n return;\n }\n\n if (this.placeholder?.parentNode) {\n this.placeholder.parentNode.insertBefore(panel, this.placeholder);\n } else if (this.originalParent) {\n this.originalParent.appendChild(panel);\n }\n\n this.teardownRepositionListeners();\n this.scrollLock.release(this.instanceId);\n\n if (\n this.lastFocusedBeforeOpen &&\n document.contains(this.lastFocusedBeforeOpen)\n ) {\n const active = document.activeElement as HTMLElement | null;\n const panelEl = this.elRef.nativeElement;\n if (!active || panelEl.contains(active)) {\n this.lastFocusedBeforeOpen.focus();\n }\n }\n\n this.restoreFocusOnClose();\n panel.style.position = '';\n panel.style.left = '';\n panel.style.top = '';\n panel.style.zIndex = '';\n panel.style.width = '';\n panel.style.minWidth = '';\n panel.removeAttribute(TNG_OVERLAY_OWNER_ID_ATTR);\n this.clearPortalledThemeVars();\n this.teardownOutsidePointer();\n }\n\n private setupOutsidePointer(): void {\n if (this.removeDocPointerListener) return;\n\n const onPointerDown = (ev: PointerEvent): void => {\n if (!this.host.open()) return;\n const panel = this.elRef.nativeElement;\n const trigger = this.findTriggerEl();\n if (isInside(ev.target, panel)) return;\n if (trigger && isInside(ev.target, trigger)) return;\n if (\n this.host.multiple() &&\n ev.target &&\n (ev.target as Element).closest?.(\n '[data-slot=\"select-option\"], [data-slot=\"multi-select-option\"]'\n )\n )\n return;\n this.host.close();\n };\n\n document.addEventListener('pointerdown', onPointerDown, true);\n this.removeDocPointerListener = (): void => {\n document.removeEventListener('pointerdown', onPointerDown, true);\n };\n }\n\n private teardownOutsidePointer(): void {\n this.removeDocPointerListener?.();\n this.removeDocPointerListener = null;\n }\n\n private restoreFocusOnClose(): void {\n const panel = this.elRef.nativeElement;\n const active = document.activeElement as HTMLElement | null;\n if (active && panel.contains(active)) {\n const trigger = this.findTriggerEl();\n trigger?.focus();\n return;\n }\n if (document.activeElement === document.body) {\n const trigger = this.findTriggerEl();\n trigger?.focus();\n }\n }\n}\n"]}
|
|
@@ -9,11 +9,12 @@ export declare class TngDatepickerOverlay {
|
|
|
9
9
|
private readonly ownerWindow;
|
|
10
10
|
private readonly renderVersion;
|
|
11
11
|
private readonly resolvedPlacement;
|
|
12
|
+
private readonly instanceId;
|
|
13
|
+
private readonly scrollLock;
|
|
12
14
|
private overlayPlaceholder;
|
|
13
15
|
private overlayOriginalParent;
|
|
14
16
|
private overlayLayoutFrame;
|
|
15
17
|
private removeResizeListener;
|
|
16
|
-
private removeScrollListener;
|
|
17
18
|
private resizeObserver;
|
|
18
19
|
readonly controller: import("@angular/core").InputSignal<Readonly<{
|
|
19
20
|
handleOverlayKeyDown: (event: KeyboardEvent) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-datepicker.overlay.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/tng-datepicker.overlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EAOX,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"tng-datepicker.overlay.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/tng-datepicker.overlay.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DestroyRef, Directive, ElementRef, HostBinding, HostListener, effect, inject, input, signal, } from '@angular/core';
|
|
2
|
-
import { applyFixedPortalledOverlayBaseStyles, clearFixedPortalledOverlayBaseStyles, clearPortalledThemeVars, positionFixedAnchoredOverlay, resolveCssCustomPropertyPx, syncPortalledThemeVars, } from '@tailng-ui/cdk';
|
|
2
|
+
import { applyFixedPortalledOverlayBaseStyles, clearFixedPortalledOverlayBaseStyles, clearPortalledThemeVars, createTngIdFactory, getGlobalScrollLockManager, positionFixedAnchoredOverlay, resolveCssCustomPropertyPx, syncPortalledThemeVars, } from '@tailng-ui/cdk';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
const PORTALLED_DATEPICKER_THEME_VARS = [
|
|
5
5
|
'--tng-datepicker-radius',
|
|
@@ -40,6 +40,7 @@ const PORTALLED_DATEPICKER_THEME_VARS = [
|
|
|
40
40
|
const OVERLAY_VIEWPORT_MARGIN = 12;
|
|
41
41
|
const OVERLAY_OFFSET = 9;
|
|
42
42
|
const OVERLAY_Z_INDEX = 'var(--tng-datepicker-z-overlay, var(--tng-z-overlay, 1000))';
|
|
43
|
+
const createDatepickerOverlayLockId = createTngIdFactory('tng-datepicker-overlay-lock');
|
|
43
44
|
function resolveAnchorElement(anchor) {
|
|
44
45
|
if (anchor instanceof ElementRef) {
|
|
45
46
|
return anchor.nativeElement;
|
|
@@ -50,17 +51,20 @@ function resolveThemeSourceElement(source) {
|
|
|
50
51
|
return resolveAnchorElement(source);
|
|
51
52
|
}
|
|
52
53
|
export class TngDatepickerOverlay {
|
|
53
|
-
elRef = inject(
|
|
54
|
+
elRef = inject(ElementRef);
|
|
54
55
|
destroyRef = inject(DestroyRef);
|
|
55
56
|
ownerDocument = this.elRef.nativeElement.ownerDocument ?? null;
|
|
56
57
|
ownerWindow = this.ownerDocument?.defaultView ?? null;
|
|
57
58
|
renderVersion = signal(0, ...(ngDevMode ? [{ debugName: "renderVersion" }] : []));
|
|
58
59
|
resolvedPlacement = signal('bottom', ...(ngDevMode ? [{ debugName: "resolvedPlacement" }] : []));
|
|
60
|
+
instanceId = createDatepickerOverlayLockId();
|
|
61
|
+
scrollLock = getGlobalScrollLockManager({
|
|
62
|
+
documentRef: this.ownerDocument,
|
|
63
|
+
});
|
|
59
64
|
overlayPlaceholder = null;
|
|
60
65
|
overlayOriginalParent = null;
|
|
61
66
|
overlayLayoutFrame = null;
|
|
62
67
|
removeResizeListener = null;
|
|
63
|
-
removeScrollListener = null;
|
|
64
68
|
resizeObserver = null;
|
|
65
69
|
controller = input.required({ ...(ngDevMode ? { debugName: "controller" } : {}), alias: 'tngDatepickerOverlay' });
|
|
66
70
|
anchor = input(undefined, { ...(ngDevMode ? { debugName: "anchor" } : {}), alias: 'tngDatepickerOverlayAnchor' });
|
|
@@ -213,16 +217,16 @@ export class TngDatepickerOverlay {
|
|
|
213
217
|
overlay.style.visibility = '';
|
|
214
218
|
}
|
|
215
219
|
setupRepositionListeners() {
|
|
216
|
-
if (this.ownerWindow === null || this.removeResizeListener !== null
|
|
220
|
+
if (this.ownerWindow === null || this.removeResizeListener !== null) {
|
|
217
221
|
return;
|
|
218
222
|
}
|
|
219
223
|
const schedule = () => {
|
|
220
224
|
this.scheduleReposition();
|
|
221
225
|
};
|
|
222
226
|
this.ownerWindow.addEventListener('resize', schedule);
|
|
223
|
-
this.
|
|
224
|
-
|
|
225
|
-
|
|
227
|
+
this.removeResizeListener = () => {
|
|
228
|
+
this.ownerWindow?.removeEventListener('resize', schedule);
|
|
229
|
+
};
|
|
226
230
|
if ('ResizeObserver' in this.ownerWindow) {
|
|
227
231
|
const ResizeObserverCtor = this.ownerWindow.ResizeObserver;
|
|
228
232
|
this.resizeObserver = new ResizeObserverCtor(() => {
|
|
@@ -237,9 +241,7 @@ export class TngDatepickerOverlay {
|
|
|
237
241
|
}
|
|
238
242
|
teardownRepositionListeners() {
|
|
239
243
|
this.removeResizeListener?.();
|
|
240
|
-
this.removeScrollListener?.();
|
|
241
244
|
this.removeResizeListener = null;
|
|
242
|
-
this.removeScrollListener = null;
|
|
243
245
|
this.resizeObserver?.disconnect();
|
|
244
246
|
this.resizeObserver = null;
|
|
245
247
|
}
|
|
@@ -264,6 +266,7 @@ export class TngDatepickerOverlay {
|
|
|
264
266
|
return;
|
|
265
267
|
}
|
|
266
268
|
this.setupRepositionListeners();
|
|
269
|
+
this.scrollLock.acquire(this.instanceId);
|
|
267
270
|
if (overlay.parentNode !== this.ownerDocument.body) {
|
|
268
271
|
this.ownerDocument.body.appendChild(overlay);
|
|
269
272
|
}
|
|
@@ -289,6 +292,7 @@ export class TngDatepickerOverlay {
|
|
|
289
292
|
this.overlayOriginalParent.appendChild(overlay);
|
|
290
293
|
}
|
|
291
294
|
this.teardownRepositionListeners();
|
|
295
|
+
this.scrollLock.release(this.instanceId);
|
|
292
296
|
this.resolvedPlacement.set(this.resolvePlacement().side === 'top' ? 'top' : 'bottom');
|
|
293
297
|
this.clearPortalledThemeVars();
|
|
294
298
|
clearFixedPortalledOverlayBaseStyles(overlay);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-datepicker.overlay.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/tng-datepicker.overlay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DestroyRef,\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {\n applyFixedPortalledOverlayBaseStyles,\n clearFixedPortalledOverlayBaseStyles,\n clearPortalledThemeVars,\n positionFixedAnchoredOverlay,\n resolveCssCustomPropertyPx,\n syncPortalledThemeVars,\n type TngOverlayCollisionOptions,\n type TngOverlayOffset,\n type TngOverlayPlacement,\n} from '@tailng-ui/cdk';\nimport type {\n TngDatepickerAttributeMap,\n} from './datepicker.types';\n\ntype TngDatepickerOverlayController = Readonly<{\n handleOverlayKeyDown: (event: KeyboardEvent) => void;\n getOutputs: () => Readonly<{\n getHostAttributes: () => TngDatepickerAttributeMap;\n getOverlayAttributes: () => TngDatepickerAttributeMap;\n open: boolean;\n }>;\n registerOverlay: (element: HTMLElement | null) => void;\n subscribe: (listener: (event: unknown) => void) => () => void;\n}>;\n\ntype OverlayAnchorInput =\n | ElementRef<HTMLElement>\n | HTMLElement\n | null\n | undefined;\ntype OverlayThemeSourceInput = OverlayAnchorInput;\n\nconst PORTALLED_DATEPICKER_THEME_VARS = [\n '--tng-datepicker-radius',\n '--tng-datepicker-field-height',\n '--tng-datepicker-overlay-gap',\n '--tng-datepicker-day-cell-size',\n '--tng-datepicker-picker-cell-size',\n '--tng-datepicker-grid-gap',\n '--tng-datepicker-inline-gap',\n '--tng-datepicker-overlay-padding',\n '--tng-datepicker-nav-size',\n '--tng-datepicker-border',\n '--tng-datepicker-border-strong',\n '--tng-datepicker-bg',\n '--tng-datepicker-surface',\n '--tng-datepicker-canvas',\n '--tng-datepicker-fg',\n '--tng-datepicker-muted',\n '--tng-datepicker-brand',\n '--tng-datepicker-danger',\n '--tng-datepicker-focus',\n '--tng-datepicker-shadow',\n '--tng-datepicker-focus-shadow',\n '--tng-datepicker-ease',\n '--tng-semantic-background-base',\n '--tng-semantic-background-surface',\n '--tng-semantic-background-canvas',\n '--tng-semantic-border-subtle',\n '--tng-semantic-border-strong',\n '--tng-semantic-foreground-primary',\n '--tng-semantic-foreground-secondary',\n '--tng-semantic-accent-brand',\n '--tng-semantic-accent-danger',\n '--tng-semantic-focus-ring',\n '--tng-datepicker-z-overlay',\n '--tng-z-overlay',\n] as const;\n\nconst OVERLAY_VIEWPORT_MARGIN = 12;\nconst OVERLAY_OFFSET = 9;\nconst OVERLAY_Z_INDEX = 'var(--tng-datepicker-z-overlay, var(--tng-z-overlay, 1000))';\n\nfunction resolveAnchorElement(anchor: OverlayAnchorInput): HTMLElement | null {\n if (anchor instanceof ElementRef) {\n return anchor.nativeElement;\n }\n\n return anchor instanceof HTMLElement ? anchor : null;\n}\n\nfunction resolveThemeSourceElement(source: OverlayThemeSourceInput): HTMLElement | null {\n return resolveAnchorElement(source);\n}\n\n@Directive({\n selector: '[tngDatepickerOverlay]',\n exportAs: 'tngDatepickerOverlay',\n})\nexport class TngDatepickerOverlay {\n private readonly elRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly ownerDocument = this.elRef.nativeElement.ownerDocument ?? null;\n private readonly ownerWindow = this.ownerDocument?.defaultView ?? null;\n private readonly renderVersion = signal(0);\n private readonly resolvedPlacement = signal<'bottom' | 'top'>('bottom');\n\n private overlayPlaceholder: Comment | null = null;\n private overlayOriginalParent: Node | null = null;\n private overlayLayoutFrame: number | null = null;\n private removeResizeListener: (() => void) | null = null;\n private removeScrollListener: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n\n public readonly controller = input.required<TngDatepickerOverlayController>({\n alias: 'tngDatepickerOverlay',\n });\n public readonly anchor = input<OverlayAnchorInput>(undefined, {\n alias: 'tngDatepickerOverlayAnchor',\n });\n public readonly placement = input<TngOverlayPlacement | undefined>(undefined, {\n alias: 'tngDatepickerOverlayPlacement',\n });\n public readonly offset = input<TngOverlayOffset | undefined>(undefined, {\n alias: 'tngDatepickerOverlayOffset',\n });\n public readonly collision = input<TngOverlayCollisionOptions | undefined>(undefined, {\n alias: 'tngDatepickerOverlayCollision',\n });\n public readonly themeSource = input<OverlayThemeSourceInput>(undefined, {\n alias: 'tngDatepickerOverlayThemeSource',\n });\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n this.renderVersion();\n return this.controller().getOutputs().open ? null : '';\n }\n\n @HostBinding('style.display')\n protected get display(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().open ? null : 'none';\n }\n\n @HostBinding('attr.data-placement')\n protected get dataPlacement(): 'bottom' | 'top' {\n this.renderVersion();\n return this.resolvedPlacement();\n }\n\n @HostBinding('attr.aria-describedby')\n protected get ariaDescribedby(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['aria-describedby'] ?? null;\n }\n\n @HostBinding('attr.aria-label')\n protected get ariaLabel(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['aria-label'] ?? null;\n }\n\n @HostBinding('attr.aria-labelledby')\n protected get ariaLabelledby(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['aria-labelledby'] ?? null;\n }\n\n @HostBinding('attr.aria-modal')\n protected get ariaModal(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['aria-modal'] ?? null;\n }\n\n @HostBinding('attr.data-open')\n protected get dataOpen(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['data-open'] ?? null;\n }\n\n @HostBinding('attr.data-position')\n protected get dataPosition(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['data-position'] ?? null;\n }\n\n @HostBinding('attr.data-slot')\n protected get dataSlot(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['data-slot'] ?? null;\n }\n\n @HostBinding('attr.id')\n protected get id(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['id'] ?? null;\n }\n\n @HostBinding('attr.role')\n protected get role(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['role'] ?? null;\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n this.controller().handleOverlayKeyDown(event);\n }\n\n public constructor() {\n this.initializeOverlayPortal();\n\n effect((onCleanup) => {\n const controller = this.controller();\n controller.registerOverlay(this.elRef.nativeElement);\n const unsubscribe = controller.subscribe(() => {\n this.renderVersion.update((value) => value + 1);\n });\n\n onCleanup(() => {\n unsubscribe();\n controller.registerOverlay(null);\n });\n });\n\n effect(() => {\n const open = this.controller().getOutputs().open;\n this.renderVersion();\n this.placement();\n this.offset();\n this.collision();\n this.themeSource();\n this.anchor();\n\n if (open) {\n this.mountToBodyAndPosition();\n return;\n }\n\n this.restoreToPlaceholder();\n });\n\n this.destroyRef.onDestroy(() => {\n if (this.overlayLayoutFrame !== null && this.ownerWindow !== null) {\n this.ownerWindow.cancelAnimationFrame(this.overlayLayoutFrame);\n this.overlayLayoutFrame = null;\n }\n\n this.teardownRepositionListeners();\n this.restoreToPlaceholder(true);\n });\n }\n\n private initializeOverlayPortal(): void {\n if (this.overlayPlaceholder !== null) {\n return;\n }\n\n const placeholderDocument = this.ownerDocument ?? document;\n const overlay = this.elRef.nativeElement;\n this.overlayPlaceholder = placeholderDocument.createComment('tng-datepicker-overlay-anchor');\n this.overlayOriginalParent = overlay.parentNode;\n const placeholder = this.overlayPlaceholder;\n if (this.overlayOriginalParent !== null && placeholder !== null) {\n this.overlayOriginalParent.insertBefore(placeholder, overlay);\n }\n }\n\n private findAnchorEl(): HTMLElement | null {\n const explicitAnchor = resolveAnchorElement(this.anchor());\n if (explicitAnchor !== null) {\n return explicitAnchor;\n }\n\n const scope =\n this.overlayPlaceholder?.parentNode instanceof HTMLElement\n ? this.overlayPlaceholder.parentNode\n : this.overlayOriginalParent instanceof HTMLElement\n ? this.overlayOriginalParent\n : null;\n\n return (\n scope?.querySelector('[data-slot=\"datepicker-input-shell\"]') ??\n scope?.querySelector('[data-slot=\"datepicker-trigger\"]')\n ) as HTMLElement | null;\n }\n\n private scheduleReposition(): void {\n if (!this.controller().getOutputs().open || this.ownerWindow === null) {\n return;\n }\n\n if (this.overlayLayoutFrame !== null) {\n this.ownerWindow.cancelAnimationFrame(this.overlayLayoutFrame);\n }\n\n this.overlayLayoutFrame = this.ownerWindow.requestAnimationFrame(() => {\n this.overlayLayoutFrame = null;\n this.positionOverlay();\n });\n }\n\n private positionOverlay(): void {\n const overlay = this.elRef.nativeElement;\n const anchor = this.findAnchorEl();\n if (anchor === null || this.ownerWindow === null) {\n return;\n }\n\n const result = positionFixedAnchoredOverlay({\n anchor,\n collision: this.resolveCollision(),\n direction: this.resolveDirection(),\n offset: this.resolveOffset(),\n overlay,\n placement: this.resolvePlacement(),\n viewportMargin: OVERLAY_VIEWPORT_MARGIN,\n windowRef: this.ownerWindow,\n });\n this.resolvedPlacement.set(result.side === 'top' ? 'top' : 'bottom');\n overlay.style.visibility = '';\n }\n\n private setupRepositionListeners(): void {\n if (this.ownerWindow === null || this.removeResizeListener !== null || this.removeScrollListener !== null) {\n return;\n }\n\n const schedule = (): void => {\n this.scheduleReposition();\n };\n\n this.ownerWindow.addEventListener('resize', schedule);\n this.ownerWindow.addEventListener('scroll', schedule, true);\n this.removeResizeListener = () => this.ownerWindow?.removeEventListener('resize', schedule);\n this.removeScrollListener = () => this.ownerWindow?.removeEventListener('scroll', schedule, true);\n\n if ('ResizeObserver' in this.ownerWindow) {\n const ResizeObserverCtor = this.ownerWindow.ResizeObserver;\n this.resizeObserver = new ResizeObserverCtor(() => {\n this.scheduleReposition();\n });\n\n const anchor = this.findAnchorEl();\n if (anchor !== null && this.resizeObserver !== null) {\n this.resizeObserver.observe(anchor);\n }\n\n this.resizeObserver?.observe(this.elRef.nativeElement);\n }\n }\n\n private teardownRepositionListeners(): void {\n this.removeResizeListener?.();\n this.removeScrollListener?.();\n this.removeResizeListener = null;\n this.removeScrollListener = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n private syncPortalledThemeVars(): void {\n const overlay = this.elRef.nativeElement;\n const themeSource = resolveThemeSourceElement(this.themeSource()) ?? this.findAnchorEl();\n if (themeSource === null) {\n return;\n }\n\n syncPortalledThemeVars({\n cssVars: PORTALLED_DATEPICKER_THEME_VARS,\n panel: overlay,\n source: themeSource,\n });\n }\n\n private clearPortalledThemeVars(): void {\n clearPortalledThemeVars(this.elRef.nativeElement, PORTALLED_DATEPICKER_THEME_VARS);\n }\n\n private mountToBodyAndPosition(): void {\n const overlay = this.elRef.nativeElement;\n if (this.ownerDocument === null) {\n return;\n }\n\n this.setupRepositionListeners();\n\n if (overlay.parentNode !== this.ownerDocument.body) {\n this.ownerDocument.body.appendChild(overlay);\n }\n\n applyFixedPortalledOverlayBaseStyles(overlay, OVERLAY_Z_INDEX);\n this.syncPortalledThemeVars();\n\n queueMicrotask(() => {\n if (!this.controller().getOutputs().open) {\n return;\n }\n\n this.positionOverlay();\n });\n }\n\n private restoreToPlaceholder(force = false): void {\n const overlay = this.elRef.nativeElement;\n if (!force && overlay.parentNode !== this.ownerDocument?.body) {\n return;\n }\n\n const placeholder = this.overlayPlaceholder;\n if (placeholder?.parentNode !== null && placeholder !== null) {\n placeholder.parentNode.insertBefore(overlay, placeholder);\n } else if (this.overlayOriginalParent !== null) {\n this.overlayOriginalParent.appendChild(overlay);\n }\n\n this.teardownRepositionListeners();\n this.resolvedPlacement.set(this.resolvePlacement().side === 'top' ? 'top' : 'bottom');\n this.clearPortalledThemeVars();\n clearFixedPortalledOverlayBaseStyles(overlay);\n overlay.style.maxHeight = '';\n overlay.style.maxWidth = '';\n overlay.style.width = '';\n }\n\n private resolvePlacement(): TngOverlayPlacement {\n return this.placement() ?? { align: 'start', side: 'bottom' };\n }\n\n private resolveOffset(): TngOverlayOffset {\n const explicitOffset = this.offset();\n if (explicitOffset !== undefined) {\n return explicitOffset;\n }\n\n const themeSource = this.findAnchorEl();\n return {\n side:\n themeSource === null\n ? OVERLAY_OFFSET\n : resolveCssCustomPropertyPx(\n themeSource,\n '--tng-datepicker-overlay-gap',\n OVERLAY_OFFSET,\n ),\n };\n }\n\n private resolveCollision(): TngOverlayCollisionOptions {\n return this.collision() ?? {\n flip: true,\n padding: OVERLAY_VIEWPORT_MARGIN,\n shift: false,\n };\n }\n\n private resolveDirection(): 'ltr' | 'rtl' {\n return this.controller().getOutputs().getHostAttributes()['dir'] === 'rtl' ? 'rtl' : 'ltr';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tng-datepicker.overlay.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/tng-datepicker.overlay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DestroyRef,\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {\n applyFixedPortalledOverlayBaseStyles,\n clearFixedPortalledOverlayBaseStyles,\n clearPortalledThemeVars,\n createTngIdFactory,\n getGlobalScrollLockManager,\n positionFixedAnchoredOverlay,\n resolveCssCustomPropertyPx,\n syncPortalledThemeVars,\n type TngOverlayCollisionOptions,\n type TngOverlayOffset,\n type TngOverlayPlacement,\n} from '@tailng-ui/cdk';\nimport type {\n TngDatepickerAttributeMap,\n} from './datepicker.types';\n\ntype TngDatepickerOverlayController = Readonly<{\n handleOverlayKeyDown: (event: KeyboardEvent) => void;\n getOutputs: () => Readonly<{\n getHostAttributes: () => TngDatepickerAttributeMap;\n getOverlayAttributes: () => TngDatepickerAttributeMap;\n open: boolean;\n }>;\n registerOverlay: (element: HTMLElement | null) => void;\n subscribe: (listener: (event: unknown) => void) => () => void;\n}>;\n\ntype OverlayAnchorInput =\n | ElementRef<HTMLElement>\n | HTMLElement\n | null\n | undefined;\ntype OverlayThemeSourceInput = OverlayAnchorInput;\n\nconst PORTALLED_DATEPICKER_THEME_VARS = [\n '--tng-datepicker-radius',\n '--tng-datepicker-field-height',\n '--tng-datepicker-overlay-gap',\n '--tng-datepicker-day-cell-size',\n '--tng-datepicker-picker-cell-size',\n '--tng-datepicker-grid-gap',\n '--tng-datepicker-inline-gap',\n '--tng-datepicker-overlay-padding',\n '--tng-datepicker-nav-size',\n '--tng-datepicker-border',\n '--tng-datepicker-border-strong',\n '--tng-datepicker-bg',\n '--tng-datepicker-surface',\n '--tng-datepicker-canvas',\n '--tng-datepicker-fg',\n '--tng-datepicker-muted',\n '--tng-datepicker-brand',\n '--tng-datepicker-danger',\n '--tng-datepicker-focus',\n '--tng-datepicker-shadow',\n '--tng-datepicker-focus-shadow',\n '--tng-datepicker-ease',\n '--tng-semantic-background-base',\n '--tng-semantic-background-surface',\n '--tng-semantic-background-canvas',\n '--tng-semantic-border-subtle',\n '--tng-semantic-border-strong',\n '--tng-semantic-foreground-primary',\n '--tng-semantic-foreground-secondary',\n '--tng-semantic-accent-brand',\n '--tng-semantic-accent-danger',\n '--tng-semantic-focus-ring',\n '--tng-datepicker-z-overlay',\n '--tng-z-overlay',\n] as const;\n\nconst OVERLAY_VIEWPORT_MARGIN = 12;\nconst OVERLAY_OFFSET = 9;\nconst OVERLAY_Z_INDEX = 'var(--tng-datepicker-z-overlay, var(--tng-z-overlay, 1000))';\nconst createDatepickerOverlayLockId = createTngIdFactory('tng-datepicker-overlay-lock');\n\nfunction resolveAnchorElement(anchor: OverlayAnchorInput): HTMLElement | null {\n if (anchor instanceof ElementRef) {\n return anchor.nativeElement;\n }\n\n return anchor instanceof HTMLElement ? anchor : null;\n}\n\nfunction resolveThemeSourceElement(source: OverlayThemeSourceInput): HTMLElement | null {\n return resolveAnchorElement(source);\n}\n\n@Directive({\n selector: '[tngDatepickerOverlay]',\n exportAs: 'tngDatepickerOverlay',\n})\nexport class TngDatepickerOverlay {\n private readonly elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly ownerDocument = this.elRef.nativeElement.ownerDocument ?? null;\n private readonly ownerWindow = this.ownerDocument?.defaultView ?? null;\n private readonly renderVersion = signal(0);\n private readonly resolvedPlacement = signal<'bottom' | 'top'>('bottom');\n private readonly instanceId = createDatepickerOverlayLockId();\n private readonly scrollLock = getGlobalScrollLockManager({\n documentRef: this.ownerDocument,\n });\n\n private overlayPlaceholder: Comment | null = null;\n private overlayOriginalParent: Node | null = null;\n private overlayLayoutFrame: number | null = null;\n private removeResizeListener: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n\n public readonly controller = input.required<TngDatepickerOverlayController>({\n alias: 'tngDatepickerOverlay',\n });\n public readonly anchor = input<OverlayAnchorInput>(undefined, {\n alias: 'tngDatepickerOverlayAnchor',\n });\n public readonly placement = input<TngOverlayPlacement | undefined>(undefined, {\n alias: 'tngDatepickerOverlayPlacement',\n });\n public readonly offset = input<TngOverlayOffset | undefined>(undefined, {\n alias: 'tngDatepickerOverlayOffset',\n });\n public readonly collision = input<TngOverlayCollisionOptions | undefined>(undefined, {\n alias: 'tngDatepickerOverlayCollision',\n });\n public readonly themeSource = input<OverlayThemeSourceInput>(undefined, {\n alias: 'tngDatepickerOverlayThemeSource',\n });\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n this.renderVersion();\n return this.controller().getOutputs().open ? null : '';\n }\n\n @HostBinding('style.display')\n protected get display(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().open ? null : 'none';\n }\n\n @HostBinding('attr.data-placement')\n protected get dataPlacement(): 'bottom' | 'top' {\n this.renderVersion();\n return this.resolvedPlacement();\n }\n\n @HostBinding('attr.aria-describedby')\n protected get ariaDescribedby(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['aria-describedby'] ?? null;\n }\n\n @HostBinding('attr.aria-label')\n protected get ariaLabel(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['aria-label'] ?? null;\n }\n\n @HostBinding('attr.aria-labelledby')\n protected get ariaLabelledby(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['aria-labelledby'] ?? null;\n }\n\n @HostBinding('attr.aria-modal')\n protected get ariaModal(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['aria-modal'] ?? null;\n }\n\n @HostBinding('attr.data-open')\n protected get dataOpen(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['data-open'] ?? null;\n }\n\n @HostBinding('attr.data-position')\n protected get dataPosition(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['data-position'] ?? null;\n }\n\n @HostBinding('attr.data-slot')\n protected get dataSlot(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['data-slot'] ?? null;\n }\n\n @HostBinding('attr.id')\n protected get id(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['id'] ?? null;\n }\n\n @HostBinding('attr.role')\n protected get role(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().getOverlayAttributes()['role'] ?? null;\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n this.controller().handleOverlayKeyDown(event);\n }\n\n public constructor() {\n this.initializeOverlayPortal();\n\n effect((onCleanup) => {\n const controller = this.controller();\n controller.registerOverlay(this.elRef.nativeElement);\n const unsubscribe = controller.subscribe(() => {\n this.renderVersion.update((value) => value + 1);\n });\n\n onCleanup(() => {\n unsubscribe();\n controller.registerOverlay(null);\n });\n });\n\n effect(() => {\n const open = this.controller().getOutputs().open;\n this.renderVersion();\n this.placement();\n this.offset();\n this.collision();\n this.themeSource();\n this.anchor();\n\n if (open) {\n this.mountToBodyAndPosition();\n return;\n }\n\n this.restoreToPlaceholder();\n });\n\n this.destroyRef.onDestroy(() => {\n if (this.overlayLayoutFrame !== null && this.ownerWindow !== null) {\n this.ownerWindow.cancelAnimationFrame(this.overlayLayoutFrame);\n this.overlayLayoutFrame = null;\n }\n\n this.teardownRepositionListeners();\n this.restoreToPlaceholder(true);\n });\n }\n\n private initializeOverlayPortal(): void {\n if (this.overlayPlaceholder !== null) {\n return;\n }\n\n const placeholderDocument = this.ownerDocument ?? document;\n const overlay = this.elRef.nativeElement;\n this.overlayPlaceholder = placeholderDocument.createComment('tng-datepicker-overlay-anchor');\n this.overlayOriginalParent = overlay.parentNode;\n const placeholder = this.overlayPlaceholder;\n if (this.overlayOriginalParent !== null && placeholder !== null) {\n this.overlayOriginalParent.insertBefore(placeholder, overlay);\n }\n }\n\n private findAnchorEl(): HTMLElement | null {\n const explicitAnchor = resolveAnchorElement(this.anchor());\n if (explicitAnchor !== null) {\n return explicitAnchor;\n }\n\n const scope =\n this.overlayPlaceholder?.parentNode instanceof HTMLElement\n ? this.overlayPlaceholder.parentNode\n : this.overlayOriginalParent instanceof HTMLElement\n ? this.overlayOriginalParent\n : null;\n\n return (\n scope?.querySelector('[data-slot=\"datepicker-input-shell\"]') ??\n scope?.querySelector('[data-slot=\"datepicker-trigger\"]')\n ) as HTMLElement | null;\n }\n\n private scheduleReposition(): void {\n if (!this.controller().getOutputs().open || this.ownerWindow === null) {\n return;\n }\n\n if (this.overlayLayoutFrame !== null) {\n this.ownerWindow.cancelAnimationFrame(this.overlayLayoutFrame);\n }\n\n this.overlayLayoutFrame = this.ownerWindow.requestAnimationFrame(() => {\n this.overlayLayoutFrame = null;\n this.positionOverlay();\n });\n }\n\n private positionOverlay(): void {\n const overlay = this.elRef.nativeElement;\n const anchor = this.findAnchorEl();\n if (anchor === null || this.ownerWindow === null) {\n return;\n }\n\n const result = positionFixedAnchoredOverlay({\n anchor,\n collision: this.resolveCollision(),\n direction: this.resolveDirection(),\n offset: this.resolveOffset(),\n overlay,\n placement: this.resolvePlacement(),\n viewportMargin: OVERLAY_VIEWPORT_MARGIN,\n windowRef: this.ownerWindow,\n });\n this.resolvedPlacement.set(result.side === 'top' ? 'top' : 'bottom');\n overlay.style.visibility = '';\n }\n\n private setupRepositionListeners(): void {\n if (this.ownerWindow === null || this.removeResizeListener !== null) {\n return;\n }\n\n const schedule = (): void => {\n this.scheduleReposition();\n };\n\n this.ownerWindow.addEventListener('resize', schedule);\n this.removeResizeListener = (): void => {\n this.ownerWindow?.removeEventListener('resize', schedule);\n };\n\n if ('ResizeObserver' in this.ownerWindow) {\n const ResizeObserverCtor = this.ownerWindow.ResizeObserver;\n this.resizeObserver = new ResizeObserverCtor(() => {\n this.scheduleReposition();\n });\n\n const anchor = this.findAnchorEl();\n if (anchor !== null && this.resizeObserver !== null) {\n this.resizeObserver.observe(anchor);\n }\n\n this.resizeObserver?.observe(this.elRef.nativeElement);\n }\n }\n\n private teardownRepositionListeners(): void {\n this.removeResizeListener?.();\n this.removeResizeListener = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n private syncPortalledThemeVars(): void {\n const overlay = this.elRef.nativeElement;\n const themeSource = resolveThemeSourceElement(this.themeSource()) ?? this.findAnchorEl();\n if (themeSource === null) {\n return;\n }\n\n syncPortalledThemeVars({\n cssVars: PORTALLED_DATEPICKER_THEME_VARS,\n panel: overlay,\n source: themeSource,\n });\n }\n\n private clearPortalledThemeVars(): void {\n clearPortalledThemeVars(this.elRef.nativeElement, PORTALLED_DATEPICKER_THEME_VARS);\n }\n\n private mountToBodyAndPosition(): void {\n const overlay = this.elRef.nativeElement;\n if (this.ownerDocument === null) {\n return;\n }\n\n this.setupRepositionListeners();\n this.scrollLock.acquire(this.instanceId);\n\n if (overlay.parentNode !== this.ownerDocument.body) {\n this.ownerDocument.body.appendChild(overlay);\n }\n\n applyFixedPortalledOverlayBaseStyles(overlay, OVERLAY_Z_INDEX);\n this.syncPortalledThemeVars();\n\n queueMicrotask(() => {\n if (!this.controller().getOutputs().open) {\n return;\n }\n\n this.positionOverlay();\n });\n }\n\n private restoreToPlaceholder(force = false): void {\n const overlay = this.elRef.nativeElement;\n if (!force && overlay.parentNode !== this.ownerDocument?.body) {\n return;\n }\n\n const placeholder = this.overlayPlaceholder;\n if (placeholder?.parentNode !== null && placeholder !== null) {\n placeholder.parentNode.insertBefore(overlay, placeholder);\n } else if (this.overlayOriginalParent !== null) {\n this.overlayOriginalParent.appendChild(overlay);\n }\n\n this.teardownRepositionListeners();\n this.scrollLock.release(this.instanceId);\n this.resolvedPlacement.set(this.resolvePlacement().side === 'top' ? 'top' : 'bottom');\n this.clearPortalledThemeVars();\n clearFixedPortalledOverlayBaseStyles(overlay);\n overlay.style.maxHeight = '';\n overlay.style.maxWidth = '';\n overlay.style.width = '';\n }\n\n private resolvePlacement(): TngOverlayPlacement {\n return this.placement() ?? { align: 'start', side: 'bottom' };\n }\n\n private resolveOffset(): TngOverlayOffset {\n const explicitOffset = this.offset();\n if (explicitOffset !== undefined) {\n return explicitOffset;\n }\n\n const themeSource = this.findAnchorEl();\n return {\n side:\n themeSource === null\n ? OVERLAY_OFFSET\n : resolveCssCustomPropertyPx(\n themeSource,\n '--tng-datepicker-overlay-gap',\n OVERLAY_OFFSET,\n ),\n };\n }\n\n private resolveCollision(): TngOverlayCollisionOptions {\n return this.collision() ?? {\n flip: true,\n padding: OVERLAY_VIEWPORT_MARGIN,\n shift: false,\n };\n }\n\n private resolveDirection(): 'ltr' | 'rtl' {\n return this.controller().getOutputs().getHostAttributes()['dir'] === 'rtl' ? 'rtl' : 'ltr';\n }\n}\n"]}
|
|
@@ -38,6 +38,7 @@ export declare class TngPopover implements OnDestroy, OnInit {
|
|
|
38
38
|
private panelElement;
|
|
39
39
|
private panelElementId;
|
|
40
40
|
private triggerElement;
|
|
41
|
+
private removeScrollListener;
|
|
41
42
|
protected readonly dataSlot = "popover";
|
|
42
43
|
protected get overlayLayerIdAttr(): string;
|
|
43
44
|
protected get dataOpenAttr(): 'false' | 'true';
|
|
@@ -72,6 +73,8 @@ export declare class TngPopover implements OnDestroy, OnInit {
|
|
|
72
73
|
private unregisterFocusLayer;
|
|
73
74
|
private registerOverlayLayer;
|
|
74
75
|
private unregisterOverlayLayer;
|
|
76
|
+
private setupScrollCloseListener;
|
|
77
|
+
private teardownScrollCloseListener;
|
|
75
78
|
private focusElement;
|
|
76
79
|
private resolveFocusableMemberIds;
|
|
77
80
|
private ensureElementId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-popover.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/overlay/popover/tng-popover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,MAAM,
|
|
1
|
+
{"version":3,"file":"tng-popover.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/overlay/popover/tng-popover.ts"],"names":[],"mappings":"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"}
|
|
@@ -107,6 +107,7 @@ export class TngPopover {
|
|
|
107
107
|
panelElement = null;
|
|
108
108
|
panelElementId = null;
|
|
109
109
|
triggerElement = null;
|
|
110
|
+
removeScrollListener = null;
|
|
110
111
|
dataSlot = 'popover';
|
|
111
112
|
get overlayLayerIdAttr() {
|
|
112
113
|
return this.instanceId;
|
|
@@ -206,6 +207,7 @@ export class TngPopover {
|
|
|
206
207
|
this.registerFocusLayer();
|
|
207
208
|
this.activateFocusLayer();
|
|
208
209
|
this.registerOverlayLayer();
|
|
210
|
+
this.setupScrollCloseListener();
|
|
209
211
|
this.focusInitialElement();
|
|
210
212
|
}
|
|
211
213
|
deactivatePopover() {
|
|
@@ -216,6 +218,7 @@ export class TngPopover {
|
|
|
216
218
|
this.deactivateFocusLayer();
|
|
217
219
|
this.unregisterFocusLayer();
|
|
218
220
|
this.unregisterOverlayLayer();
|
|
221
|
+
this.teardownScrollCloseListener();
|
|
219
222
|
}
|
|
220
223
|
focusInitialElement() {
|
|
221
224
|
if (this.autoFocus() === 'none') {
|
|
@@ -340,6 +343,24 @@ export class TngPopover {
|
|
|
340
343
|
tngPrimitiveOverlayRuntime.unregisterLayer(this.instanceId);
|
|
341
344
|
this.isOverlayLayerRegistered = false;
|
|
342
345
|
}
|
|
346
|
+
setupScrollCloseListener() {
|
|
347
|
+
if (this.removeScrollListener !== null || this.documentRef === null) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
const win = this.documentRef.defaultView;
|
|
351
|
+
if (win === null) {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
const onScroll = () => {
|
|
355
|
+
this.requestClose('outside-pointer');
|
|
356
|
+
};
|
|
357
|
+
win.addEventListener('scroll', onScroll, true);
|
|
358
|
+
this.removeScrollListener = () => win.removeEventListener('scroll', onScroll, true);
|
|
359
|
+
}
|
|
360
|
+
teardownScrollCloseListener() {
|
|
361
|
+
this.removeScrollListener?.();
|
|
362
|
+
this.removeScrollListener = null;
|
|
363
|
+
}
|
|
343
364
|
focusElement(target) {
|
|
344
365
|
const targetId = this.ensureElementId(target);
|
|
345
366
|
const resolvedTargetId = popoverFocusHandoff.resolveFocusCandidate(this.instanceId, targetId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-popover.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/overlay/popover/tng-popover.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n OnDestroy,\n OnInit} from '@angular/core';\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n afterNextRender,\n booleanAttribute,\n effect,\n inject,\n Injector,\n input,\n output,\n signal,\n} from '@angular/core';\nimport {\n createOverlayFocusHandoffController,\n resolveFocusableElements,\n createTngIdFactory,\n} from '@tailng-ui/cdk';\nimport type { TngOverlayDismissReason } from '@tailng-ui/cdk/overlay';\nimport { tngPrimitiveOverlayRuntime } from '../tng-overlay-runtime';\n\nconst createPopoverId = createTngIdFactory('tng-popover');\nconst createPopoverPanelId = createTngIdFactory('tng-popover-panel');\nconst createPopoverFocusableId = createTngIdFactory('tng-popover-focusable');\nconst TNG_OVERLAY_LAYER_ID_ATTR = 'data-tng-overlay-layer-id';\nconst TNG_OVERLAY_OWNER_ID_ATTR = 'data-tng-overlay-owner-id';\n\ntype OptionalBooleanInput = boolean | null | string | undefined;\n\nexport type TngPopoverAutoFocus = 'first-focusable' | 'none' | 'panel';\nexport type TngPopoverSide = 'bottom' | 'left' | 'right' | 'top';\nexport type TngPopoverAlign = 'center' | 'end' | 'start';\nexport type TngPopoverPanelRole = 'dialog' | 'listbox' | 'menu' | 'none' | 'region';\nexport type TngPopoverAriaHasPopup = 'dialog' | 'grid' | 'listbox' | 'menu' | 'tree' | 'true';\nexport type TngPopoverCloseReason = 'escape' | 'outside-pointer' | 'programmatic' | 'trigger-toggle';\n\nfunction normalizeOptionalBooleanInput(value: OptionalBooleanInput): boolean | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n return booleanAttribute(value);\n}\n\nfunction isPopoverCloseReason(value: string): value is TngPopoverCloseReason {\n return value === 'escape' || value === 'outside-pointer' || value === 'programmatic' || value === 'trigger-toggle';\n}\n\nfunction mapOverlayDismissReason(reason: TngOverlayDismissReason): TngPopoverCloseReason {\n if (reason === 'escape-key') {\n return 'escape';\n }\n\n if (reason === 'outside-pointer') {\n return 'outside-pointer';\n }\n\n return 'programmatic';\n}\n\nconst popoverGlobalDocument = typeof document === 'undefined' ? null : document;\nconst popoverFocusHandoff = createOverlayFocusHandoffController();\n\nexport function resolvePopoverActiveElement(documentRef: unknown): HTMLElement | null {\n if (!(documentRef instanceof Document)) {\n return null;\n }\n\n const active = documentRef.activeElement;\n return active instanceof HTMLElement ? active : null;\n}\n\nexport function resolvePopoverFocusableElements(container: unknown): readonly HTMLElement[] {\n return resolveFocusableElements(container);\n}\n\nexport function resolvePopoverMarkedInitialElement(container: unknown): HTMLElement | null {\n if (!(container instanceof HTMLElement)) {\n return null;\n }\n\n const markedInitial = container.querySelector<HTMLElement>('[data-tng-popover-initial-focus]');\n if (markedInitial === null) {\n return null;\n }\n\n if (resolvePopoverFocusableElements(container).includes(markedInitial)) {\n return markedInitial;\n }\n\n return resolvePopoverFocusableElements(markedInitial)[0] ?? null;\n}\n\n@Directive({\n selector: '[tngPopover]',\n exportAs: 'tngPopover',\n})\nexport class TngPopover implements OnDestroy, OnInit {\n public readonly openInput = input<boolean | undefined, OptionalBooleanInput>(undefined, {\n alias: 'open',\n transform: normalizeOptionalBooleanInput,\n });\n public readonly defaultOpen = input<boolean, OptionalBooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, OptionalBooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly closeOnEscape = input<boolean, OptionalBooleanInput>(true, {\n transform: booleanAttribute,\n });\n public readonly closeOnOutsidePointer = input<boolean, OptionalBooleanInput>(true, {\n transform: booleanAttribute,\n });\n public readonly restoreFocus = input<boolean, OptionalBooleanInput>(true, {\n transform: booleanAttribute,\n });\n public readonly autoFocus = input<TngPopoverAutoFocus, string | TngPopoverAutoFocus>('first-focusable', {\n transform: (value: string | TngPopoverAutoFocus): TngPopoverAutoFocus => {\n return value === 'none' || value === 'panel' || value === 'first-focusable' ? value : 'first-focusable';\n },\n });\n public readonly side = input<TngPopoverSide, string | TngPopoverSide>('bottom', {\n transform: (value: string | TngPopoverSide): TngPopoverSide => {\n return value === 'top' || value === 'right' || value === 'bottom' || value === 'left' ? value : 'bottom';\n },\n });\n public readonly align = input<TngPopoverAlign, string | TngPopoverAlign>('start', {\n transform: (value: string | TngPopoverAlign): TngPopoverAlign => {\n return value === 'start' || value === 'center' || value === 'end' ? value : 'start';\n },\n });\n public readonly panelRole = input<TngPopoverPanelRole, string | TngPopoverPanelRole>('dialog', {\n transform: (value: string | TngPopoverPanelRole): TngPopoverPanelRole => {\n return value === 'dialog' || value === 'menu' || value === 'listbox' || value === 'region' || value === 'none'\n ? value\n : 'dialog';\n },\n });\n public readonly ariaHasPopup = input<TngPopoverAriaHasPopup, string | TngPopoverAriaHasPopup>('dialog', {\n transform: (value: string | TngPopoverAriaHasPopup): TngPopoverAriaHasPopup => {\n return value === 'dialog'\n || value === 'menu'\n || value === 'listbox'\n || value === 'tree'\n || value === 'grid'\n || value === 'true'\n ? value\n : 'dialog';\n },\n });\n public readonly ariaLabel = input<string | null>(null);\n\n public readonly openChange = output<boolean>();\n public readonly closed = output<TngPopoverCloseReason>();\n\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly documentRef = popoverGlobalDocument;\n private readonly instanceId = createPopoverId();\n private readonly uncontrolledOpen = signal(false);\n private readonly openStateEffect = effect((): void => {\n if (!this.initialized) {\n return;\n }\n\n if (this.isOpen()) {\n this.activatePopover();\n return;\n }\n\n this.deactivatePopover();\n });\n\n private initialized = false;\n private isActive = false;\n private isFocusLayerRegistered = false;\n private isOverlayLayerRegistered = false;\n private panelElement: HTMLElement | null = null;\n private panelElementId: string | null = null;\n private triggerElement: HTMLElement | null = null;\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'popover';\n\n @HostBinding(`attr.${TNG_OVERLAY_LAYER_ID_ATTR}`)\n protected get overlayLayerIdAttr(): string {\n return this.instanceId;\n }\n\n @HostBinding('attr.data-open')\n protected get dataOpenAttr(): 'false' | 'true' {\n return this.isOpen() ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'closed' | 'open' {\n return this.isOpen() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-side')\n protected get dataSideAttr(): TngPopoverSide {\n return this.side();\n }\n\n @HostBinding('attr.data-align')\n protected get dataAlignAttr(): TngPopoverAlign {\n return this.align();\n }\n\n public ngOnInit(): void {\n if (!this.isControlled()) {\n this.uncontrolledOpen.set(this.defaultOpen());\n }\n\n this.initialized = true;\n if (this.isOpen()) {\n this.activatePopover();\n }\n }\n\n public ngOnDestroy(): void {\n this.openStateEffect.destroy();\n this.deactivatePopover();\n }\n\n public isOpen(): boolean {\n return this.openInput() ?? this.uncontrolledOpen();\n }\n\n public openPopover(): void {\n if (this.disabled() || this.isOpen()) {\n return;\n }\n\n this.setOpenState(true);\n }\n\n public closePopover(reason: TngPopoverCloseReason = 'programmatic'): void {\n this.requestClose(reason);\n }\n\n public togglePopover(force?: boolean): void {\n if (force === true) {\n this.openPopover();\n return;\n }\n\n if (force === false) {\n this.closePopover('programmatic');\n return;\n }\n\n if (this.isOpen()) {\n this.requestClose('trigger-toggle');\n return;\n }\n\n this.openPopover();\n }\n\n public requestClose(reason: TngPopoverCloseReason): void {\n if (!this.isOpen()) {\n return;\n }\n\n this.closed.emit(reason);\n this.setOpenState(false);\n }\n\n public registerTrigger(trigger: HTMLElement): void {\n this.triggerElement = trigger;\n }\n\n public unregisterTrigger(trigger: HTMLElement): void {\n if (this.triggerElement === trigger) {\n this.triggerElement = null;\n }\n }\n\n public registerPanel(panel: HTMLElement, id: string): void {\n this.panelElement = panel;\n this.panelElementId = id;\n }\n\n public unregisterPanel(panel: HTMLElement): void {\n if (this.panelElement === panel) {\n this.panelElement = null;\n this.panelElementId = null;\n }\n }\n\n public getPanelId(): string | null {\n return this.panelElementId;\n }\n\n public resolvePanelRole(): Exclude<TngPopoverPanelRole, 'none'> | null {\n const role = this.panelRole();\n return role === 'none' ? null : role;\n }\n\n private activatePopover(): void {\n if (this.isActive) {\n return;\n }\n\n this.isActive = true;\n this.registerFocusLayer();\n this.activateFocusLayer();\n this.registerOverlayLayer();\n this.focusInitialElement();\n }\n\n private deactivatePopover(): void {\n if (!this.isActive) {\n return;\n }\n\n this.isActive = false;\n this.deactivateFocusLayer();\n this.unregisterFocusLayer();\n this.unregisterOverlayLayer();\n }\n\n private focusInitialElement(): void {\n if (this.autoFocus() === 'none') {\n return;\n }\n\n afterNextRender(\n (): void => {\n if (!this.isOpen()) {\n return;\n }\n\n const panel = this.panelElement;\n if (panel === null) {\n return;\n }\n\n if (this.autoFocus() === 'panel') {\n this.focusElement(panel);\n return;\n }\n\n const focusTarget = resolvePopoverMarkedInitialElement(panel) ?? resolvePopoverFocusableElements(panel)[0] ?? panel;\n this.focusElement(focusTarget);\n },\n { injector: this.injector },\n );\n }\n\n public recordFocusedElement(target: unknown): void {\n if (!(target instanceof HTMLElement) || !this.isOpen()) {\n return;\n }\n\n const panel = this.panelElement;\n if (!panel?.contains(target)) {\n return;\n }\n\n const targetId = this.ensureElementId(target);\n popoverFocusHandoff.recordFocus(this.instanceId, targetId);\n }\n\n private setOpenState(next: boolean): void {\n if (this.isOpen() === next) {\n return;\n }\n\n if (!this.isControlled()) {\n this.uncontrolledOpen.set(next);\n }\n\n this.openChange.emit(next);\n }\n\n private isControlled(): boolean {\n return this.openInput() !== undefined;\n }\n\n private shouldCloseFromEscape(): boolean {\n return this.isOpen() && this.closeOnEscape();\n }\n\n private shouldCloseFromOutsidePointer(): boolean {\n return this.isOpen() && this.closeOnOutsidePointer();\n }\n\n private activateFocusLayer(): void {\n const activeElement = resolvePopoverActiveElement(this.documentRef);\n const restoreFocusTargetId = activeElement === null ? null : this.ensureElementId(activeElement);\n popoverFocusHandoff.activateLayer(this.instanceId, restoreFocusTargetId);\n }\n\n private deactivateFocusLayer(): void {\n const restoreFocusTargetId = popoverFocusHandoff.deactivateLayer(this.instanceId);\n if (!this.restoreFocus() || restoreFocusTargetId === null) {\n return;\n }\n\n const restoreFocusTarget = this.resolveElementById(restoreFocusTargetId) ?? this.triggerElement;\n restoreFocusTarget?.focus();\n }\n\n private registerFocusLayer(): void {\n if (this.isFocusLayerRegistered) {\n return;\n }\n\n popoverFocusHandoff.registerLayer({\n layerId: this.instanceId,\n members: (): readonly string[] => {\n const panel = this.panelElement;\n if (panel === null) {\n return [];\n }\n\n return this.resolveFocusableMemberIds(panel);\n },\n restoreFocus: this.restoreFocus(),\n trapFocus: false,\n });\n this.isFocusLayerRegistered = true;\n }\n\n private unregisterFocusLayer(): void {\n if (!this.isFocusLayerRegistered) {\n return;\n }\n\n popoverFocusHandoff.unregisterLayer(this.instanceId);\n this.isFocusLayerRegistered = false;\n }\n\n private registerOverlayLayer(): void {\n const hostElement = this.hostRef.nativeElement;\n tngPrimitiveOverlayRuntime.registerLayer({\n containsTarget: (target: unknown, path: readonly unknown[]): boolean => {\n if (target instanceof Node && hostElement.contains(target)) {\n return true;\n }\n\n if (path.includes(hostElement)) {\n return true;\n }\n\n return path.some((entry): boolean => {\n return entry instanceof Element && entry.getAttribute(TNG_OVERLAY_OWNER_ID_ATTR) === this.instanceId;\n });\n },\n dismissOnEscape: this.shouldCloseFromEscape(),\n dismissOnOutsidePointer: this.shouldCloseFromOutsidePointer(),\n id: this.instanceId,\n onDismiss: (reason: TngOverlayDismissReason): void => {\n if (reason === 'escape-key' && !this.shouldCloseFromEscape()) {\n return;\n }\n\n if (reason === 'outside-pointer' && !this.shouldCloseFromOutsidePointer()) {\n return;\n }\n\n this.requestClose(mapOverlayDismissReason(reason));\n },\n });\n\n this.isOverlayLayerRegistered = true;\n }\n\n private unregisterOverlayLayer(): void {\n if (!this.isOverlayLayerRegistered) {\n return;\n }\n\n tngPrimitiveOverlayRuntime.unregisterLayer(this.instanceId);\n this.isOverlayLayerRegistered = false;\n }\n\n private focusElement(target: HTMLElement): void {\n const targetId = this.ensureElementId(target);\n const resolvedTargetId = popoverFocusHandoff.resolveFocusCandidate(this.instanceId, targetId);\n if (resolvedTargetId === null) {\n return;\n }\n\n const resolvedTarget = this.resolveElementById(resolvedTargetId);\n if (resolvedTarget === null) {\n return;\n }\n\n resolvedTarget.focus();\n popoverFocusHandoff.recordFocus(this.instanceId, resolvedTargetId);\n }\n\n private resolveFocusableMemberIds(panel: HTMLElement): readonly string[] {\n const focusableElements = resolvePopoverFocusableElements(panel);\n const memberIds: string[] = [];\n const seenIds = new Set<string>();\n\n const registerMember = (element: HTMLElement): void => {\n const id = this.ensureElementId(element);\n if (seenIds.has(id)) {\n return;\n }\n\n seenIds.add(id);\n memberIds.push(id);\n };\n\n registerMember(panel);\n for (const element of focusableElements) {\n registerMember(element);\n }\n\n return memberIds;\n }\n\n private ensureElementId(element: HTMLElement): string {\n const existingId = element.id.trim();\n if (existingId.length > 0) {\n return existingId;\n }\n\n const generatedId = createPopoverFocusableId();\n element.id = generatedId;\n return generatedId;\n }\n\n private resolveElementById(id: string): HTMLElement | null {\n if (this.documentRef === null) {\n return null;\n }\n\n const element = this.documentRef.getElementById(id);\n return element instanceof HTMLElement ? element : null;\n }\n}\n\n@Directive({\n selector: '[tngPopoverTrigger]',\n exportAs: 'tngPopoverTrigger',\n})\nexport class TngPopoverTrigger implements OnDestroy, OnInit {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly parentPopover = inject(TngPopover, { optional: true });\n\n public readonly popoverFor = input<TngPopover | null>(null, {\n alias: 'tngPopoverTrigger',\n });\n\n @HostBinding('attr.aria-haspopup')\n protected get ariaHasPopupAttr(): TngPopoverAriaHasPopup {\n return this.resolvePopover()?.ariaHasPopup() ?? 'dialog';\n }\n\n @HostBinding('attr.aria-controls')\n protected get ariaControlsAttr(): string | null {\n return this.resolvePopover()?.getPanelId() ?? null;\n }\n\n @HostBinding('attr.aria-expanded')\n protected get ariaExpandedAttr(): 'false' | 'true' {\n return this.resolvePopover()?.isOpen() ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'popover-trigger';\n\n @HostBinding('attr.data-open')\n protected get dataOpenAttr(): 'false' | 'true' {\n return this.resolvePopover()?.isOpen() ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'closed' | 'open' {\n return this.resolvePopover()?.isOpen() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.resolvePopover()?.disabled() ? '' : null;\n }\n\n public ngOnInit(): void {\n this.resolvePopover()?.registerTrigger(this.hostRef.nativeElement);\n }\n\n public ngOnDestroy(): void {\n this.resolvePopover()?.unregisterTrigger(this.hostRef.nativeElement);\n }\n\n @HostListener('click')\n protected onClick(): void {\n this.resolvePopover()?.togglePopover();\n }\n\n private resolvePopover(): TngPopover | null {\n return this.popoverFor() ?? this.parentPopover;\n }\n}\n\n@Directive({\n selector: '[tngPopoverPanel], [tngPopoverContent]',\n exportAs: 'tngPopoverPanel',\n})\nexport class TngPopoverPanel implements OnDestroy, OnInit {\n private readonly popover = inject(TngPopover);\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly generatedId = createPopoverPanelId();\n private resolvedId = '';\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'popover-panel';\n\n @HostBinding('attr.data-open')\n protected get dataOpenAttr(): 'false' | 'true' {\n return this.popover.isOpen() ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'closed' | 'open' {\n return this.popover.isOpen() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-side')\n protected get dataSideAttr(): TngPopoverSide {\n return this.popover.side();\n }\n\n @HostBinding('attr.data-align')\n protected get dataAlignAttr(): TngPopoverAlign {\n return this.popover.align();\n }\n\n @HostBinding('attr.hidden')\n protected get hiddenAttr(): '' | null {\n return this.popover.isOpen() ? null : '';\n }\n\n @HostBinding('attr.id')\n protected get idAttr(): string {\n return this.resolvedId;\n }\n\n @HostBinding('attr.role')\n protected get roleAttr(): Exclude<TngPopoverPanelRole, 'none'> | null {\n return this.popover.resolvePanelRole();\n }\n\n @HostBinding('attr.aria-label')\n protected get ariaLabelAttr(): string | null {\n return this.popover.ariaLabel();\n }\n\n @HostBinding('attr.tabindex')\n protected readonly tabIndexAttr = '-1';\n\n public ngOnInit(): void {\n const hostId = this.hostRef.nativeElement.id.trim();\n this.resolvedId = hostId.length > 0 ? hostId : this.generatedId;\n this.popover.registerPanel(this.hostRef.nativeElement, this.resolvedId);\n }\n\n public ngOnDestroy(): void {\n this.popover.unregisterPanel(this.hostRef.nativeElement);\n }\n\n @HostListener('focusin', ['$event.target'])\n protected onFocusIn(target: EventTarget | null): void {\n this.popover.recordFocusedElement(target);\n }\n}\n\n@Directive({\n selector: '[tngPopoverClose]',\n exportAs: 'tngPopoverClose',\n})\nexport class TngPopoverClose {\n private readonly popover = inject(TngPopover);\n\n public readonly closeReason = input<string | null>(null, {\n alias: 'tngPopoverClose',\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'popover-close';\n\n @HostListener('click')\n protected onClick(): void {\n this.popover.requestClose(this.resolveCloseReason());\n }\n\n private resolveCloseReason(): TngPopoverCloseReason {\n const raw = this.closeReason()?.trim();\n if (raw === undefined || raw.length === 0) {\n return 'programmatic';\n }\n\n return isPopoverCloseReason(raw) ? raw : 'programmatic';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tng-popover.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/overlay/popover/tng-popover.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n afterNextRender,\n booleanAttribute,\n effect,\n inject,\n Injector,\n input,\n output,\n signal,\n} from '@angular/core';\nimport {\n createOverlayFocusHandoffController,\n resolveFocusableElements,\n createTngIdFactory,\n} from '@tailng-ui/cdk';\nimport type { TngOverlayDismissReason } from '@tailng-ui/cdk/overlay';\nimport { tngPrimitiveOverlayRuntime } from '../tng-overlay-runtime';\n\nconst createPopoverId = createTngIdFactory('tng-popover');\nconst createPopoverPanelId = createTngIdFactory('tng-popover-panel');\nconst createPopoverFocusableId = createTngIdFactory('tng-popover-focusable');\nconst TNG_OVERLAY_LAYER_ID_ATTR = 'data-tng-overlay-layer-id';\nconst TNG_OVERLAY_OWNER_ID_ATTR = 'data-tng-overlay-owner-id';\n\ntype OptionalBooleanInput = boolean | null | string | undefined;\n\nexport type TngPopoverAutoFocus = 'first-focusable' | 'none' | 'panel';\nexport type TngPopoverSide = 'bottom' | 'left' | 'right' | 'top';\nexport type TngPopoverAlign = 'center' | 'end' | 'start';\nexport type TngPopoverPanelRole = 'dialog' | 'listbox' | 'menu' | 'none' | 'region';\nexport type TngPopoverAriaHasPopup = 'dialog' | 'grid' | 'listbox' | 'menu' | 'tree' | 'true';\nexport type TngPopoverCloseReason = 'escape' | 'outside-pointer' | 'programmatic' | 'trigger-toggle';\n\nfunction normalizeOptionalBooleanInput(value: OptionalBooleanInput): boolean | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n return booleanAttribute(value);\n}\n\nfunction isPopoverCloseReason(value: string): value is TngPopoverCloseReason {\n return value === 'escape' || value === 'outside-pointer' || value === 'programmatic' || value === 'trigger-toggle';\n}\n\nfunction mapOverlayDismissReason(reason: TngOverlayDismissReason): TngPopoverCloseReason {\n if (reason === 'escape-key') {\n return 'escape';\n }\n\n if (reason === 'outside-pointer') {\n return 'outside-pointer';\n }\n\n return 'programmatic';\n}\n\nconst popoverGlobalDocument = typeof document === 'undefined' ? null : document;\nconst popoverFocusHandoff = createOverlayFocusHandoffController();\n\nexport function resolvePopoverActiveElement(documentRef: unknown): HTMLElement | null {\n if (!(documentRef instanceof Document)) {\n return null;\n }\n\n const active = documentRef.activeElement;\n return active instanceof HTMLElement ? active : null;\n}\n\nexport function resolvePopoverFocusableElements(container: unknown): readonly HTMLElement[] {\n return resolveFocusableElements(container);\n}\n\nexport function resolvePopoverMarkedInitialElement(container: unknown): HTMLElement | null {\n if (!(container instanceof HTMLElement)) {\n return null;\n }\n\n const markedInitial = container.querySelector<HTMLElement>('[data-tng-popover-initial-focus]');\n if (markedInitial === null) {\n return null;\n }\n\n if (resolvePopoverFocusableElements(container).includes(markedInitial)) {\n return markedInitial;\n }\n\n return resolvePopoverFocusableElements(markedInitial)[0] ?? null;\n}\n\n@Directive({\n selector: '[tngPopover]',\n exportAs: 'tngPopover',\n})\nexport class TngPopover implements OnDestroy, OnInit {\n public readonly openInput = input<boolean | undefined, OptionalBooleanInput>(undefined, {\n alias: 'open',\n transform: normalizeOptionalBooleanInput,\n });\n public readonly defaultOpen = input<boolean, OptionalBooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, OptionalBooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly closeOnEscape = input<boolean, OptionalBooleanInput>(true, {\n transform: booleanAttribute,\n });\n public readonly closeOnOutsidePointer = input<boolean, OptionalBooleanInput>(true, {\n transform: booleanAttribute,\n });\n public readonly restoreFocus = input<boolean, OptionalBooleanInput>(true, {\n transform: booleanAttribute,\n });\n public readonly autoFocus = input<TngPopoverAutoFocus, string | TngPopoverAutoFocus>('first-focusable', {\n transform: (value: string | TngPopoverAutoFocus): TngPopoverAutoFocus => {\n return value === 'none' || value === 'panel' || value === 'first-focusable' ? value : 'first-focusable';\n },\n });\n public readonly side = input<TngPopoverSide, string | TngPopoverSide>('bottom', {\n transform: (value: string | TngPopoverSide): TngPopoverSide => {\n return value === 'top' || value === 'right' || value === 'bottom' || value === 'left' ? value : 'bottom';\n },\n });\n public readonly align = input<TngPopoverAlign, string | TngPopoverAlign>('start', {\n transform: (value: string | TngPopoverAlign): TngPopoverAlign => {\n return value === 'start' || value === 'center' || value === 'end' ? value : 'start';\n },\n });\n public readonly panelRole = input<TngPopoverPanelRole, string | TngPopoverPanelRole>('dialog', {\n transform: (value: string | TngPopoverPanelRole): TngPopoverPanelRole => {\n return value === 'dialog' || value === 'menu' || value === 'listbox' || value === 'region' || value === 'none'\n ? value\n : 'dialog';\n },\n });\n public readonly ariaHasPopup = input<TngPopoverAriaHasPopup, string | TngPopoverAriaHasPopup>('dialog', {\n transform: (value: string | TngPopoverAriaHasPopup): TngPopoverAriaHasPopup => {\n return value === 'dialog'\n || value === 'menu'\n || value === 'listbox'\n || value === 'tree'\n || value === 'grid'\n || value === 'true'\n ? value\n : 'dialog';\n },\n });\n public readonly ariaLabel = input<string | null>(null);\n\n public readonly openChange = output<boolean>();\n public readonly closed = output<TngPopoverCloseReason>();\n\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly documentRef = popoverGlobalDocument;\n private readonly instanceId = createPopoverId();\n private readonly uncontrolledOpen = signal(false);\n private readonly openStateEffect = effect((): void => {\n if (!this.initialized) {\n return;\n }\n\n if (this.isOpen()) {\n this.activatePopover();\n return;\n }\n\n this.deactivatePopover();\n });\n\n private initialized = false;\n private isActive = false;\n private isFocusLayerRegistered = false;\n private isOverlayLayerRegistered = false;\n private panelElement: HTMLElement | null = null;\n private panelElementId: string | null = null;\n private triggerElement: HTMLElement | null = null;\n private removeScrollListener: (() => void) | null = null;\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'popover';\n\n @HostBinding(`attr.${TNG_OVERLAY_LAYER_ID_ATTR}`)\n protected get overlayLayerIdAttr(): string {\n return this.instanceId;\n }\n\n @HostBinding('attr.data-open')\n protected get dataOpenAttr(): 'false' | 'true' {\n return this.isOpen() ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'closed' | 'open' {\n return this.isOpen() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-side')\n protected get dataSideAttr(): TngPopoverSide {\n return this.side();\n }\n\n @HostBinding('attr.data-align')\n protected get dataAlignAttr(): TngPopoverAlign {\n return this.align();\n }\n\n public ngOnInit(): void {\n if (!this.isControlled()) {\n this.uncontrolledOpen.set(this.defaultOpen());\n }\n\n this.initialized = true;\n if (this.isOpen()) {\n this.activatePopover();\n }\n }\n\n public ngOnDestroy(): void {\n this.openStateEffect.destroy();\n this.deactivatePopover();\n }\n\n public isOpen(): boolean {\n return this.openInput() ?? this.uncontrolledOpen();\n }\n\n public openPopover(): void {\n if (this.disabled() || this.isOpen()) {\n return;\n }\n\n this.setOpenState(true);\n }\n\n public closePopover(reason: TngPopoverCloseReason = 'programmatic'): void {\n this.requestClose(reason);\n }\n\n public togglePopover(force?: boolean): void {\n if (force === true) {\n this.openPopover();\n return;\n }\n\n if (force === false) {\n this.closePopover('programmatic');\n return;\n }\n\n if (this.isOpen()) {\n this.requestClose('trigger-toggle');\n return;\n }\n\n this.openPopover();\n }\n\n public requestClose(reason: TngPopoverCloseReason): void {\n if (!this.isOpen()) {\n return;\n }\n\n this.closed.emit(reason);\n this.setOpenState(false);\n }\n\n public registerTrigger(trigger: HTMLElement): void {\n this.triggerElement = trigger;\n }\n\n public unregisterTrigger(trigger: HTMLElement): void {\n if (this.triggerElement === trigger) {\n this.triggerElement = null;\n }\n }\n\n public registerPanel(panel: HTMLElement, id: string): void {\n this.panelElement = panel;\n this.panelElementId = id;\n }\n\n public unregisterPanel(panel: HTMLElement): void {\n if (this.panelElement === panel) {\n this.panelElement = null;\n this.panelElementId = null;\n }\n }\n\n public getPanelId(): string | null {\n return this.panelElementId;\n }\n\n public resolvePanelRole(): Exclude<TngPopoverPanelRole, 'none'> | null {\n const role = this.panelRole();\n return role === 'none' ? null : role;\n }\n\n private activatePopover(): void {\n if (this.isActive) {\n return;\n }\n\n this.isActive = true;\n this.registerFocusLayer();\n this.activateFocusLayer();\n this.registerOverlayLayer();\n this.setupScrollCloseListener();\n this.focusInitialElement();\n }\n\n private deactivatePopover(): void {\n if (!this.isActive) {\n return;\n }\n\n this.isActive = false;\n this.deactivateFocusLayer();\n this.unregisterFocusLayer();\n this.unregisterOverlayLayer();\n this.teardownScrollCloseListener();\n }\n\n private focusInitialElement(): void {\n if (this.autoFocus() === 'none') {\n return;\n }\n\n afterNextRender(\n (): void => {\n if (!this.isOpen()) {\n return;\n }\n\n const panel = this.panelElement;\n if (panel === null) {\n return;\n }\n\n if (this.autoFocus() === 'panel') {\n this.focusElement(panel);\n return;\n }\n\n const focusTarget = resolvePopoverMarkedInitialElement(panel) ?? resolvePopoverFocusableElements(panel)[0] ?? panel;\n this.focusElement(focusTarget);\n },\n { injector: this.injector },\n );\n }\n\n public recordFocusedElement(target: unknown): void {\n if (!(target instanceof HTMLElement) || !this.isOpen()) {\n return;\n }\n\n const panel = this.panelElement;\n if (!panel?.contains(target)) {\n return;\n }\n\n const targetId = this.ensureElementId(target);\n popoverFocusHandoff.recordFocus(this.instanceId, targetId);\n }\n\n private setOpenState(next: boolean): void {\n if (this.isOpen() === next) {\n return;\n }\n\n if (!this.isControlled()) {\n this.uncontrolledOpen.set(next);\n }\n\n this.openChange.emit(next);\n }\n\n private isControlled(): boolean {\n return this.openInput() !== undefined;\n }\n\n private shouldCloseFromEscape(): boolean {\n return this.isOpen() && this.closeOnEscape();\n }\n\n private shouldCloseFromOutsidePointer(): boolean {\n return this.isOpen() && this.closeOnOutsidePointer();\n }\n\n private activateFocusLayer(): void {\n const activeElement = resolvePopoverActiveElement(this.documentRef);\n const restoreFocusTargetId = activeElement === null ? null : this.ensureElementId(activeElement);\n popoverFocusHandoff.activateLayer(this.instanceId, restoreFocusTargetId);\n }\n\n private deactivateFocusLayer(): void {\n const restoreFocusTargetId = popoverFocusHandoff.deactivateLayer(this.instanceId);\n if (!this.restoreFocus() || restoreFocusTargetId === null) {\n return;\n }\n\n const restoreFocusTarget = this.resolveElementById(restoreFocusTargetId) ?? this.triggerElement;\n restoreFocusTarget?.focus();\n }\n\n private registerFocusLayer(): void {\n if (this.isFocusLayerRegistered) {\n return;\n }\n\n popoverFocusHandoff.registerLayer({\n layerId: this.instanceId,\n members: (): readonly string[] => {\n const panel = this.panelElement;\n if (panel === null) {\n return [];\n }\n\n return this.resolveFocusableMemberIds(panel);\n },\n restoreFocus: this.restoreFocus(),\n trapFocus: false,\n });\n this.isFocusLayerRegistered = true;\n }\n\n private unregisterFocusLayer(): void {\n if (!this.isFocusLayerRegistered) {\n return;\n }\n\n popoverFocusHandoff.unregisterLayer(this.instanceId);\n this.isFocusLayerRegistered = false;\n }\n\n private registerOverlayLayer(): void {\n const hostElement = this.hostRef.nativeElement;\n tngPrimitiveOverlayRuntime.registerLayer({\n containsTarget: (target: unknown, path: readonly unknown[]): boolean => {\n if (target instanceof Node && hostElement.contains(target)) {\n return true;\n }\n\n if (path.includes(hostElement)) {\n return true;\n }\n\n return path.some((entry): boolean => {\n return entry instanceof Element && entry.getAttribute(TNG_OVERLAY_OWNER_ID_ATTR) === this.instanceId;\n });\n },\n dismissOnEscape: this.shouldCloseFromEscape(),\n dismissOnOutsidePointer: this.shouldCloseFromOutsidePointer(),\n id: this.instanceId,\n onDismiss: (reason: TngOverlayDismissReason): void => {\n if (reason === 'escape-key' && !this.shouldCloseFromEscape()) {\n return;\n }\n\n if (reason === 'outside-pointer' && !this.shouldCloseFromOutsidePointer()) {\n return;\n }\n\n this.requestClose(mapOverlayDismissReason(reason));\n },\n });\n\n this.isOverlayLayerRegistered = true;\n }\n\n private unregisterOverlayLayer(): void {\n if (!this.isOverlayLayerRegistered) {\n return;\n }\n\n tngPrimitiveOverlayRuntime.unregisterLayer(this.instanceId);\n this.isOverlayLayerRegistered = false;\n }\n\n private setupScrollCloseListener(): void {\n if (this.removeScrollListener !== null || this.documentRef === null) {\n return;\n }\n\n const win = this.documentRef.defaultView;\n if (win === null) {\n return;\n }\n\n const onScroll = (): void => {\n this.requestClose('outside-pointer');\n };\n win.addEventListener('scroll', onScroll, true);\n this.removeScrollListener = (): void => win.removeEventListener('scroll', onScroll, true);\n }\n\n private teardownScrollCloseListener(): void {\n this.removeScrollListener?.();\n this.removeScrollListener = null;\n }\n\n private focusElement(target: HTMLElement): void {\n const targetId = this.ensureElementId(target);\n const resolvedTargetId = popoverFocusHandoff.resolveFocusCandidate(this.instanceId, targetId);\n if (resolvedTargetId === null) {\n return;\n }\n\n const resolvedTarget = this.resolveElementById(resolvedTargetId);\n if (resolvedTarget === null) {\n return;\n }\n\n resolvedTarget.focus();\n popoverFocusHandoff.recordFocus(this.instanceId, resolvedTargetId);\n }\n\n private resolveFocusableMemberIds(panel: HTMLElement): readonly string[] {\n const focusableElements = resolvePopoverFocusableElements(panel);\n const memberIds: string[] = [];\n const seenIds = new Set<string>();\n\n const registerMember = (element: HTMLElement): void => {\n const id = this.ensureElementId(element);\n if (seenIds.has(id)) {\n return;\n }\n\n seenIds.add(id);\n memberIds.push(id);\n };\n\n registerMember(panel);\n for (const element of focusableElements) {\n registerMember(element);\n }\n\n return memberIds;\n }\n\n private ensureElementId(element: HTMLElement): string {\n const existingId = element.id.trim();\n if (existingId.length > 0) {\n return existingId;\n }\n\n const generatedId = createPopoverFocusableId();\n element.id = generatedId;\n return generatedId;\n }\n\n private resolveElementById(id: string): HTMLElement | null {\n if (this.documentRef === null) {\n return null;\n }\n\n const element = this.documentRef.getElementById(id);\n return element instanceof HTMLElement ? element : null;\n }\n}\n\n@Directive({\n selector: '[tngPopoverTrigger]',\n exportAs: 'tngPopoverTrigger',\n})\nexport class TngPopoverTrigger implements OnDestroy, OnInit {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly parentPopover = inject(TngPopover, { optional: true });\n\n public readonly popoverFor = input<TngPopover | null>(null, {\n alias: 'tngPopoverTrigger',\n });\n\n @HostBinding('attr.aria-haspopup')\n protected get ariaHasPopupAttr(): TngPopoverAriaHasPopup {\n return this.resolvePopover()?.ariaHasPopup() ?? 'dialog';\n }\n\n @HostBinding('attr.aria-controls')\n protected get ariaControlsAttr(): string | null {\n return this.resolvePopover()?.getPanelId() ?? null;\n }\n\n @HostBinding('attr.aria-expanded')\n protected get ariaExpandedAttr(): 'false' | 'true' {\n return this.resolvePopover()?.isOpen() ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'popover-trigger';\n\n @HostBinding('attr.data-open')\n protected get dataOpenAttr(): 'false' | 'true' {\n return this.resolvePopover()?.isOpen() ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'closed' | 'open' {\n return this.resolvePopover()?.isOpen() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.resolvePopover()?.disabled() ? '' : null;\n }\n\n public ngOnInit(): void {\n this.resolvePopover()?.registerTrigger(this.hostRef.nativeElement);\n }\n\n public ngOnDestroy(): void {\n this.resolvePopover()?.unregisterTrigger(this.hostRef.nativeElement);\n }\n\n @HostListener('click')\n protected onClick(): void {\n this.resolvePopover()?.togglePopover();\n }\n\n private resolvePopover(): TngPopover | null {\n return this.popoverFor() ?? this.parentPopover;\n }\n}\n\n@Directive({\n selector: '[tngPopoverPanel], [tngPopoverContent]',\n exportAs: 'tngPopoverPanel',\n})\nexport class TngPopoverPanel implements OnDestroy, OnInit {\n private readonly popover = inject(TngPopover);\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly generatedId = createPopoverPanelId();\n private resolvedId = '';\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'popover-panel';\n\n @HostBinding('attr.data-open')\n protected get dataOpenAttr(): 'false' | 'true' {\n return this.popover.isOpen() ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'closed' | 'open' {\n return this.popover.isOpen() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-side')\n protected get dataSideAttr(): TngPopoverSide {\n return this.popover.side();\n }\n\n @HostBinding('attr.data-align')\n protected get dataAlignAttr(): TngPopoverAlign {\n return this.popover.align();\n }\n\n @HostBinding('attr.hidden')\n protected get hiddenAttr(): '' | null {\n return this.popover.isOpen() ? null : '';\n }\n\n @HostBinding('attr.id')\n protected get idAttr(): string {\n return this.resolvedId;\n }\n\n @HostBinding('attr.role')\n protected get roleAttr(): Exclude<TngPopoverPanelRole, 'none'> | null {\n return this.popover.resolvePanelRole();\n }\n\n @HostBinding('attr.aria-label')\n protected get ariaLabelAttr(): string | null {\n return this.popover.ariaLabel();\n }\n\n @HostBinding('attr.tabindex')\n protected readonly tabIndexAttr = '-1';\n\n public ngOnInit(): void {\n const hostId = this.hostRef.nativeElement.id.trim();\n this.resolvedId = hostId.length > 0 ? hostId : this.generatedId;\n this.popover.registerPanel(this.hostRef.nativeElement, this.resolvedId);\n }\n\n public ngOnDestroy(): void {\n this.popover.unregisterPanel(this.hostRef.nativeElement);\n }\n\n @HostListener('focusin', ['$event.target'])\n protected onFocusIn(target: EventTarget | null): void {\n this.popover.recordFocusedElement(target);\n }\n}\n\n@Directive({\n selector: '[tngPopoverClose]',\n exportAs: 'tngPopoverClose',\n})\nexport class TngPopoverClose {\n private readonly popover = inject(TngPopover);\n\n public readonly closeReason = input<string | null>(null, {\n alias: 'tngPopoverClose',\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'popover-close';\n\n @HostListener('click')\n protected onClick(): void {\n this.popover.requestClose(this.resolveCloseReason());\n }\n\n private resolveCloseReason(): TngPopoverCloseReason {\n const raw = this.closeReason()?.trim();\n if (raw === undefined || raw.length === 0) {\n return 'programmatic';\n }\n\n return isPopoverCloseReason(raw) ? raw : 'programmatic';\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { OnDestroy, OnInit } from '@angular/core';
|
|
1
|
+
import type { OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export type TngTooltipSide = 'bottom' | 'left' | 'right' | 'top';
|
|
4
4
|
type OptionalBooleanInput = boolean | null | string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-tooltip.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/overlay/tooltip/tng-tooltip.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"tng-tooltip.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/overlay/tooltip/tng-tooltip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,MAAM,EACP,MAAM,eAAe,CAAC;;AAuBvB,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAEjE,KAAK,oBAAoB,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAQhE,KAAK,uBAAuB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,GACjE,QAAQ,CAAC;IAAE,cAAc,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CAAC;AA4B3C,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,MAAM,GAAG,IAAI,CAMf;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAE3E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,EAAE,GAAG,IAAI,CAEhE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,qBAIa,UAAW,YAAW,SAAS,EAAE,MAAM;IAClD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4B;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IACvE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,SAAgB,UAAU,8CAAqB;IAC/C,SAAgB,WAAW,kFAExB;IACH,SAAgB,QAAQ,kFAErB;IACH,SAAgB,SAAS,8CAAsB;IAC/C,SAAgB,SAAS,8FAGtB;IACH,SAAgB,IAAI,sDAAgC;IAEpD,SAAgB,UAAU,oDAAqB;IAE/C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiD;IACrE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IAElD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAEtC;IACH,OAAO,CAAC,wBAAwB,CAAS;IAEzC,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiC;IAEhE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAO/B;IAEH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAc7B;IAEH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAW9B;IAEH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAQtB;IAGH,SAAS,CAAC,QAAQ,CAAC,QAAQ,aAAa;IAGxC,SAAS,KAAK,aAAa,IAAI,QAAQ,GAAG,MAAM,CAE/C;IAGD,SAAS,KAAK,YAAY,IAAI,OAAO,GAAG,MAAM,CAE7C;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAEM,QAAQ,IAAI,IAAI;IAYhB,WAAW,IAAI,IAAI;IAWnB,MAAM,IAAI,OAAO;IAIjB,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;IAK3C,iBAAiB,IAAI,cAAc;IAInC,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAW9D,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAW7C,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAU3C,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAU7C,oBAAoB,IAAI,IAAI;IAQ5B,mBAAmB,IAAI,IAAI;IAQ3B,gBAAgB,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI;IAY7D,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IA4BlB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,6BAA6B;IAIrC,OAAO,CAAC,oBAAoB;IA6B5B,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,wBAAwB;IAqChC,OAAO,CAAC,2BAA2B;yCA/XxB,UAAU;2CAAV,UAAU;CAuYtB;AAED,qBAIa,iBAAkB,YAAW,SAAS,EAAE,MAAM;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IACvE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0C;IAElE,SAAgB,WAAW,qDAA8B;IACzD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,8EAEjB;IAGH,SAAS,KAAK,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAMjD;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAM1C;IAGD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,iBAAiB,CAAU;IAGzD,SAAS,KAAK,aAAa,IAAI,QAAQ,GAAG,MAAM,CAM/C;IAEM,QAAQ,IAAI,IAAI;IAIhB,WAAW,IAAI,IAAI;IAK1B,SAAS,CAAC,MAAM,IAAI,IAAI;IAKxB,SAAS,CAAC,OAAO,IAAI,IAAI;IAKzB,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAK/C,SAAS,CAAC,YAAY,IAAI,IAAI;IAK9B,SAAS,CAAC,YAAY,IAAI,IAAI;yCAvEnB,iBAAiB;2CAAjB,iBAAiB;CA0E7B;AAED,qBAIa,iBAAkB,YAAW,SAAS,EAAE,MAAM;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IACvE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0C;IAClE,OAAO,CAAC,UAAU,CAAM;IAExB,SAAgB,EAAE,qDAA8B;IAChD,SAAgB,IAAI,8EAEjB;IACH,SAAgB,IAAI,sDAAgC;IAGpD,SAAS,KAAK,YAAY,IAAI,cAAc,CAM3C;IAGD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,iBAAiB,CAAU;IAGzD,SAAS,KAAK,aAAa,IAAI,QAAQ,GAAG,MAAM,CAM/C;IAGD,SAAS,KAAK,UAAU,IAAI,EAAE,GAAG,IAAI,CAMpC;IAGD,SAAS,KAAK,MAAM,IAAI,MAAM,CAE7B;IAGD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,SAAS,CAAU;IAGjD,SAAS,KAAK,aAAa,IAAI,MAAM,GAAG,IAAI,CAE3C;IAGD,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,IAAI,CAMvC;IAGD,SAAS,KAAK,QAAQ,IAAI,MAAM,GAAG,IAAI,CAMtC;IAEM,QAAQ,IAAI,IAAI;IAKhB,WAAW,IAAI,IAAI;IAI1B,OAAO,CAAC,gBAAgB;yCAlFb,iBAAiB;2CAAjB,iBAAiB;CAsF7B"}
|
|
@@ -331,7 +331,8 @@ export class TngTooltip {
|
|
|
331
331
|
this.scheduleReposition();
|
|
332
332
|
};
|
|
333
333
|
const onScroll = () => {
|
|
334
|
-
this.
|
|
334
|
+
this.openCloseDelayController.cancelAll();
|
|
335
|
+
this.setOpenState(false);
|
|
335
336
|
};
|
|
336
337
|
this.win.addEventListener('resize', onResize);
|
|
337
338
|
this.win.addEventListener('scroll', onScroll, true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-tooltip.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/overlay/tooltip/tng-tooltip.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n OnDestroy,\n OnInit,\n booleanAttribute,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport {\n computeOverlayPosition,\n createOverlayOpenCloseDelayController,\n createTngIdFactory,\n normalizeOverlayOpenCloseDelay,\n type TngOverlayRect,\n} from '@tailng-ui/cdk';\nimport type { TngOverlayDismissReason } from '@tailng-ui/cdk/overlay';\nimport { tngPrimitiveOverlayRuntime } from '../tng-overlay-runtime';\n\nexport type TngTooltipSide = 'bottom' | 'left' | 'right' | 'top';\n\ntype OptionalBooleanInput = boolean | null | string | undefined;\n\nconst createTooltipContentId = createTngIdFactory('tng-tooltip-content');\nconst createTooltipId = createTngIdFactory('tng-tooltip');\nconst tooltipCollisionPadding = 8;\nconst tooltipSideOffset = 8;\nconst tooltipGlobalDocument = typeof document === 'undefined' ? null : document;\n\ntype TngTooltipKeyboardEvent = Readonly<Pick<KeyboardEvent, 'key'>> &\n Readonly<{ preventDefault: () => void }>;\n\nfunction normalizeOptionalBooleanInput(value: OptionalBooleanInput): boolean | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n return booleanAttribute(value);\n}\n\nfunction normalizeRect(rect: DOMRect | ClientRect): TngOverlayRect {\n return {\n height: rect.height,\n left: rect.left,\n top: rect.top,\n width: rect.width,\n };\n}\n\nfunction resolveTooltipViewportRect(win: Window): TngOverlayRect {\n return {\n height: win.innerHeight || 0,\n left: 0,\n top: 0,\n width: win.innerWidth || 0,\n };\n}\n\nexport function resolveTngTooltipAriaDescribedBy(\n open: boolean,\n tooltipId: string | null,\n): string | null {\n if (!open) {\n return null;\n }\n\n return tooltipId === null || tooltipId.trim().length === 0 ? null : tooltipId;\n}\n\nexport function resolveTngTooltipDataState(open: boolean): 'closed' | 'open' {\n return open ? 'open' : 'closed';\n}\n\nexport function resolveTngTooltipHidden(open: boolean): '' | null {\n return open ? null : '';\n}\n\nexport function normalizeTngTooltipDelay(value: number): number {\n return normalizeOverlayOpenCloseDelay(value);\n}\n\nexport function shouldCloseTngTooltipForKey(key: string): boolean {\n return key === 'Escape';\n}\n\n@Directive({\n selector: '[tngTooltip]',\n exportAs: 'tngTooltip',\n})\nexport class TngTooltip implements OnDestroy, OnInit {\n private readonly generatedContentId = createTooltipContentId();\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly instanceId = createTooltipId();\n public readonly closeDelay = input<number>(60);\n public readonly defaultOpen = input<boolean, OptionalBooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, OptionalBooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly openDelay = input<number>(120);\n public readonly openInput = input<boolean | undefined, OptionalBooleanInput>(undefined, {\n alias: 'open',\n transform: normalizeOptionalBooleanInput,\n });\n public readonly side = input<TngTooltipSide>('top');\n\n public readonly openChange = output<boolean>();\n\n private readonly win = typeof window === 'undefined' ? null : window;\n private readonly uncontrolledOpen = signal(false);\n\n private animationFrameId: number | null = null;\n private contentElement: HTMLElement | null = null;\n private contentId: string | null = null;\n private removeResizeListener: (() => void) | null = null;\n private removeScrollListener: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private triggerElement: HTMLElement | null = null;\n private readonly openCloseDelayController = createOverlayOpenCloseDelayController({\n onStateChange: (nextOpen) => this.setOpenState(nextOpen),\n });\n private isOverlayLayerRegistered = false;\n\n private initialized = false;\n\n private readonly positionX = signal<number | null>(null);\n private readonly positionY = signal<number | null>(null);\n private readonly positionedSide = signal<TngTooltipSide>('top');\n\n private readonly syncDisabledState = effect(() => {\n if (this.disabled()) {\n this.openCloseDelayController.cancelAll();\n if (this.isOpen()) {\n this.setOpenState(false);\n }\n }\n });\n\n private readonly syncPositioning = effect(() => {\n if (!this.initialized) {\n return;\n }\n\n if (!this.isOpen()) {\n this.resetPosition();\n this.positionedSide.set(this.side());\n this.teardownRepositionListeners();\n return;\n }\n\n this.setupRepositionListeners();\n this.scheduleReposition();\n });\n\n private readonly syncOverlayLayer = effect(() => {\n if (!this.initialized) {\n return;\n }\n\n if (this.isOpen()) {\n this.registerOverlayLayer();\n return;\n }\n\n this.unregisterOverlayLayer();\n });\n\n private readonly syncSide = effect(() => {\n const requestedSide = this.side();\n if (!this.initialized || !this.isOpen()) {\n this.positionedSide.set(requestedSide);\n return;\n }\n\n this.scheduleReposition();\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tooltip';\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'closed' | 'open' {\n return resolveTngTooltipDataState(this.isOpen());\n }\n\n @HostBinding('attr.data-open')\n protected get dataOpenAttr(): 'false' | 'true' {\n return this.isOpen() ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n public ngOnInit(): void {\n if (!this.isControlled()) {\n this.uncontrolledOpen.set(this.defaultOpen());\n }\n\n this.initialized = true;\n if (this.isOpen()) {\n this.setupRepositionListeners();\n this.scheduleReposition();\n }\n }\n\n public ngOnDestroy(): void {\n this.syncDisabledState.destroy();\n this.syncPositioning.destroy();\n this.syncOverlayLayer.destroy();\n this.syncSide.destroy();\n this.openCloseDelayController.destroy();\n this.unregisterOverlayLayer();\n this.clearAnimationFrame();\n this.teardownRepositionListeners();\n }\n\n public isOpen(): boolean {\n return this.openInput() ?? this.uncontrolledOpen();\n }\n\n public getContentId(): string | null {\n return this.contentId;\n }\n\n public resolveContentId(id: string | null): string {\n const candidate = id?.trim() ?? '';\n return candidate.length > 0 ? candidate : this.generatedContentId;\n }\n\n public getPositionedSide(): TngTooltipSide {\n return this.positionedSide();\n }\n\n public getPositionX(): number | null {\n return this.positionX();\n }\n\n public getPositionY(): number | null {\n return this.positionY();\n }\n\n public registerContent(content: HTMLElement, id: string | null): void {\n this.contentElement = content;\n this.contentId = id;\n if (this.resizeObserver !== null) {\n this.resizeObserver.observe(content);\n }\n if (this.isOpen()) {\n this.scheduleReposition();\n }\n }\n\n public unregisterContent(content: HTMLElement): void {\n if (this.resizeObserver !== null) {\n this.resizeObserver.unobserve(content);\n }\n\n if (this.contentElement === content) {\n this.contentElement = null;\n this.contentId = null;\n }\n }\n\n public registerTrigger(trigger: HTMLElement): void {\n this.triggerElement = trigger;\n if (this.resizeObserver !== null) {\n this.resizeObserver.observe(trigger);\n }\n if (this.isOpen()) {\n this.scheduleReposition();\n }\n }\n\n public unregisterTrigger(trigger: HTMLElement): void {\n if (this.resizeObserver !== null) {\n this.resizeObserver.unobserve(trigger);\n }\n\n if (this.triggerElement === trigger) {\n this.triggerElement = null;\n }\n }\n\n public onTriggerCloseIntent(): void {\n if (this.disabled()) {\n return;\n }\n\n this.openCloseDelayController.requestClose(this.closeDelay());\n }\n\n public onTriggerOpenIntent(): void {\n if (this.disabled()) {\n return;\n }\n\n this.openCloseDelayController.requestOpen(this.openDelay());\n }\n\n public onTriggerKeydown(event: TngTooltipKeyboardEvent): void {\n if (this.disabled() || !shouldCloseTngTooltipForKey(event.key)) {\n return;\n }\n\n if (tooltipGlobalDocument === null) {\n event.preventDefault();\n this.openCloseDelayController.cancelAll();\n this.setOpenState(false);\n }\n }\n\n private clearAnimationFrame(): void {\n if (this.animationFrameId === null || this.win === null) {\n return;\n }\n\n this.win.cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n\n private isControlled(): boolean {\n return this.openInput() !== undefined;\n }\n\n private reposition(): void {\n if (!this.isOpen() || this.win === null || this.triggerElement === null || this.contentElement === null) {\n return;\n }\n\n const result = computeOverlayPosition({\n anchorRect: normalizeRect(this.triggerElement.getBoundingClientRect()),\n collision: {\n flip: true,\n padding: tooltipCollisionPadding,\n shift: true,\n },\n offset: {\n side: tooltipSideOffset,\n },\n overlayRect: normalizeRect(this.contentElement.getBoundingClientRect()),\n placement: {\n align: 'center',\n side: this.side(),\n },\n viewportRect: resolveTooltipViewportRect(this.win),\n });\n\n this.positionX.set(result.x);\n this.positionY.set(result.y);\n this.positionedSide.set(result.side as TngTooltipSide);\n }\n\n private resetPosition(): void {\n this.positionX.set(null);\n this.positionY.set(null);\n }\n\n private scheduleReposition(): void {\n if (this.win === null || this.animationFrameId !== null) {\n return;\n }\n\n this.animationFrameId = this.win.requestAnimationFrame(() => {\n this.animationFrameId = null;\n this.reposition();\n });\n }\n\n private setOpenState(nextOpen: boolean): void {\n if (this.isOpen() === nextOpen) {\n return;\n }\n\n if (!this.isControlled()) {\n this.uncontrolledOpen.set(nextOpen);\n }\n if (!nextOpen) {\n this.resetPosition();\n }\n if (nextOpen) {\n this.scheduleReposition();\n }\n\n this.openChange.emit(nextOpen);\n }\n\n private shouldCloseFromEscape(): boolean {\n return this.isOpen();\n }\n\n private shouldCloseFromOutsidePointer(): boolean {\n return this.isOpen();\n }\n\n private registerOverlayLayer(): void {\n const hostElement = this.hostRef.nativeElement;\n tngPrimitiveOverlayRuntime.registerLayer({\n containsTarget: (target: unknown, path: readonly unknown[]): boolean => {\n if (target instanceof Node && hostElement.contains(target)) {\n return true;\n }\n\n return path.includes(hostElement);\n },\n dismissOnEscape: this.shouldCloseFromEscape(),\n dismissOnOutsidePointer: this.shouldCloseFromOutsidePointer(),\n id: this.instanceId,\n onDismiss: (reason: TngOverlayDismissReason): void => {\n if (reason === 'escape-key' && !this.shouldCloseFromEscape()) {\n return;\n }\n\n if (reason === 'outside-pointer' && !this.shouldCloseFromOutsidePointer()) {\n return;\n }\n\n this.openCloseDelayController.cancelAll();\n this.setOpenState(false);\n },\n });\n this.isOverlayLayerRegistered = true;\n }\n\n private unregisterOverlayLayer(): void {\n if (!this.isOverlayLayerRegistered) {\n return;\n }\n\n tngPrimitiveOverlayRuntime.unregisterLayer(this.instanceId);\n this.isOverlayLayerRegistered = false;\n }\n\n private setupRepositionListeners(): void {\n if (this.win === null || this.removeResizeListener !== null || this.removeScrollListener !== null) {\n return;\n }\n\n const onResize = (): void => {\n this.scheduleReposition();\n };\n const onScroll = (): void => {\n this.scheduleReposition();\n };\n\n this.win.addEventListener('resize', onResize);\n this.win.addEventListener('scroll', onScroll, true);\n this.removeResizeListener = (): void => {\n this.win?.removeEventListener('resize', onResize);\n };\n this.removeScrollListener = (): void => {\n this.win?.removeEventListener('scroll', onScroll, true);\n };\n\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.resizeObserver = new ResizeObserver(() => {\n this.scheduleReposition();\n });\n if (this.triggerElement !== null) {\n this.resizeObserver.observe(this.triggerElement);\n }\n if (this.contentElement !== null) {\n this.resizeObserver.observe(this.contentElement);\n }\n }\n\n private teardownRepositionListeners(): void {\n this.removeResizeListener?.();\n this.removeScrollListener?.();\n this.removeResizeListener = null;\n this.removeScrollListener = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n}\n\n@Directive({\n selector: '[tngTooltipTrigger]',\n exportAs: 'tngTooltipTrigger',\n})\nexport class TngTooltipTrigger implements OnDestroy, OnInit {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tooltip = inject(TngTooltip, { optional: true });\n\n public readonly describedBy = input<string | null>(null);\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly open = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n\n @HostBinding('attr.aria-describedby')\n protected get ariaDescribedByAttr(): string | null {\n if (this.tooltip !== null) {\n return resolveTngTooltipAriaDescribedBy(this.tooltip.isOpen(), this.tooltip.getContentId());\n }\n\n return resolveTngTooltipAriaDescribedBy(this.open(), this.describedBy());\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n if (this.tooltip !== null) {\n return this.tooltip.disabled() ? '' : null;\n }\n\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tooltip-trigger' as const;\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'closed' | 'open' {\n if (this.tooltip !== null) {\n return resolveTngTooltipDataState(this.tooltip.isOpen());\n }\n\n return resolveTngTooltipDataState(this.open());\n }\n\n public ngOnInit(): void {\n this.tooltip?.registerTrigger(this.hostRef.nativeElement);\n }\n\n public ngOnDestroy(): void {\n this.tooltip?.unregisterTrigger(this.hostRef.nativeElement);\n }\n\n @HostListener('blur')\n protected onBlur(): void {\n this.tooltip?.onTriggerCloseIntent();\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n this.tooltip?.onTriggerOpenIntent();\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n this.tooltip?.onTriggerKeydown(event);\n }\n\n @HostListener('mouseleave')\n protected onMouseLeave(): void {\n this.tooltip?.onTriggerCloseIntent();\n }\n\n @HostListener('mouseenter')\n protected onMouseEnter(): void {\n this.tooltip?.onTriggerOpenIntent();\n }\n}\n\n@Directive({\n selector: '[tngTooltipContent]',\n exportAs: 'tngTooltipContent',\n})\nexport class TngTooltipContent implements OnDestroy, OnInit {\n private readonly generatedId = createTooltipContentId();\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tooltip = inject(TngTooltip, { optional: true });\n private resolvedId = '';\n\n public readonly id = input<string | null>(null);\n public readonly open = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly side = input<TngTooltipSide>('top');\n\n @HostBinding('attr.data-side')\n protected get dataSideAttr(): TngTooltipSide {\n if (this.tooltip !== null) {\n return this.tooltip.getPositionedSide();\n }\n\n return this.side();\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tooltip-content' as const;\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'closed' | 'open' {\n if (this.tooltip !== null) {\n return resolveTngTooltipDataState(this.tooltip.isOpen());\n }\n\n return resolveTngTooltipDataState(this.open());\n }\n\n @HostBinding('attr.hidden')\n protected get hiddenAttr(): '' | null {\n if (this.tooltip !== null) {\n return resolveTngTooltipHidden(this.tooltip.isOpen());\n }\n\n return resolveTngTooltipHidden(this.open());\n }\n\n @HostBinding('attr.id')\n protected get idAttr(): string {\n return this.resolvedId;\n }\n\n @HostBinding('attr.role')\n protected readonly roleAttr = 'tooltip' as const;\n\n @HostBinding('style.position')\n protected get positionStyle(): string | null {\n return this.tooltip === null ? null : 'fixed';\n }\n\n @HostBinding('style.left.px')\n protected get leftStyle(): number | null {\n if (this.tooltip === null) {\n return null;\n }\n\n return this.tooltip.getPositionX();\n }\n\n @HostBinding('style.top.px')\n protected get topStyle(): number | null {\n if (this.tooltip === null) {\n return null;\n }\n\n return this.tooltip.getPositionY();\n }\n\n public ngOnInit(): void {\n this.resolvedId = this.tooltip?.resolveContentId(this.id()) ?? this.resolveContentId(this.id());\n this.tooltip?.registerContent(this.hostRef.nativeElement, this.resolvedId);\n }\n\n public ngOnDestroy(): void {\n this.tooltip?.unregisterContent(this.hostRef.nativeElement);\n }\n\n private resolveContentId(value: string | null): string {\n const candidate = value?.trim() ?? '';\n return candidate.length > 0 ? candidate : this.generatedId;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tng-tooltip.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/overlay/tooltip/tng-tooltip.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n booleanAttribute,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport {\n computeOverlayPosition,\n createOverlayOpenCloseDelayController,\n createTngIdFactory,\n normalizeOverlayOpenCloseDelay,\n type TngOverlayRect,\n} from '@tailng-ui/cdk';\nimport type { TngOverlayDismissReason } from '@tailng-ui/cdk/overlay';\nimport { tngPrimitiveOverlayRuntime } from '../tng-overlay-runtime';\n\nexport type TngTooltipSide = 'bottom' | 'left' | 'right' | 'top';\n\ntype OptionalBooleanInput = boolean | null | string | undefined;\n\nconst createTooltipContentId = createTngIdFactory('tng-tooltip-content');\nconst createTooltipId = createTngIdFactory('tng-tooltip');\nconst tooltipCollisionPadding = 8;\nconst tooltipSideOffset = 8;\nconst tooltipGlobalDocument = typeof document === 'undefined' ? null : document;\n\ntype TngTooltipKeyboardEvent = Readonly<Pick<KeyboardEvent, 'key'>> &\n Readonly<{ preventDefault: () => void }>;\n\nfunction normalizeOptionalBooleanInput(value: OptionalBooleanInput): boolean | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n return booleanAttribute(value);\n}\n\nfunction normalizeRect(rect: DOMRect | ClientRect): TngOverlayRect {\n return {\n height: rect.height,\n left: rect.left,\n top: rect.top,\n width: rect.width,\n };\n}\n\nfunction resolveTooltipViewportRect(win: Window): TngOverlayRect {\n return {\n height: win.innerHeight || 0,\n left: 0,\n top: 0,\n width: win.innerWidth || 0,\n };\n}\n\nexport function resolveTngTooltipAriaDescribedBy(\n open: boolean,\n tooltipId: string | null,\n): string | null {\n if (!open) {\n return null;\n }\n\n return tooltipId === null || tooltipId.trim().length === 0 ? null : tooltipId;\n}\n\nexport function resolveTngTooltipDataState(open: boolean): 'closed' | 'open' {\n return open ? 'open' : 'closed';\n}\n\nexport function resolveTngTooltipHidden(open: boolean): '' | null {\n return open ? null : '';\n}\n\nexport function normalizeTngTooltipDelay(value: number): number {\n return normalizeOverlayOpenCloseDelay(value);\n}\n\nexport function shouldCloseTngTooltipForKey(key: string): boolean {\n return key === 'Escape';\n}\n\n@Directive({\n selector: '[tngTooltip]',\n exportAs: 'tngTooltip',\n})\nexport class TngTooltip implements OnDestroy, OnInit {\n private readonly generatedContentId = createTooltipContentId();\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly instanceId = createTooltipId();\n public readonly closeDelay = input<number>(60);\n public readonly defaultOpen = input<boolean, OptionalBooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, OptionalBooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly openDelay = input<number>(120);\n public readonly openInput = input<boolean | undefined, OptionalBooleanInput>(undefined, {\n alias: 'open',\n transform: normalizeOptionalBooleanInput,\n });\n public readonly side = input<TngTooltipSide>('top');\n\n public readonly openChange = output<boolean>();\n\n private readonly win = typeof window === 'undefined' ? null : window;\n private readonly uncontrolledOpen = signal(false);\n\n private animationFrameId: number | null = null;\n private contentElement: HTMLElement | null = null;\n private contentId: string | null = null;\n private removeResizeListener: (() => void) | null = null;\n private removeScrollListener: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private triggerElement: HTMLElement | null = null;\n private readonly openCloseDelayController = createOverlayOpenCloseDelayController({\n onStateChange: (nextOpen) => this.setOpenState(nextOpen),\n });\n private isOverlayLayerRegistered = false;\n\n private initialized = false;\n\n private readonly positionX = signal<number | null>(null);\n private readonly positionY = signal<number | null>(null);\n private readonly positionedSide = signal<TngTooltipSide>('top');\n\n private readonly syncDisabledState = effect(() => {\n if (this.disabled()) {\n this.openCloseDelayController.cancelAll();\n if (this.isOpen()) {\n this.setOpenState(false);\n }\n }\n });\n\n private readonly syncPositioning = effect(() => {\n if (!this.initialized) {\n return;\n }\n\n if (!this.isOpen()) {\n this.resetPosition();\n this.positionedSide.set(this.side());\n this.teardownRepositionListeners();\n return;\n }\n\n this.setupRepositionListeners();\n this.scheduleReposition();\n });\n\n private readonly syncOverlayLayer = effect(() => {\n if (!this.initialized) {\n return;\n }\n\n if (this.isOpen()) {\n this.registerOverlayLayer();\n return;\n }\n\n this.unregisterOverlayLayer();\n });\n\n private readonly syncSide = effect(() => {\n const requestedSide = this.side();\n if (!this.initialized || !this.isOpen()) {\n this.positionedSide.set(requestedSide);\n return;\n }\n\n this.scheduleReposition();\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tooltip';\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'closed' | 'open' {\n return resolveTngTooltipDataState(this.isOpen());\n }\n\n @HostBinding('attr.data-open')\n protected get dataOpenAttr(): 'false' | 'true' {\n return this.isOpen() ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n public ngOnInit(): void {\n if (!this.isControlled()) {\n this.uncontrolledOpen.set(this.defaultOpen());\n }\n\n this.initialized = true;\n if (this.isOpen()) {\n this.setupRepositionListeners();\n this.scheduleReposition();\n }\n }\n\n public ngOnDestroy(): void {\n this.syncDisabledState.destroy();\n this.syncPositioning.destroy();\n this.syncOverlayLayer.destroy();\n this.syncSide.destroy();\n this.openCloseDelayController.destroy();\n this.unregisterOverlayLayer();\n this.clearAnimationFrame();\n this.teardownRepositionListeners();\n }\n\n public isOpen(): boolean {\n return this.openInput() ?? this.uncontrolledOpen();\n }\n\n public getContentId(): string | null {\n return this.contentId;\n }\n\n public resolveContentId(id: string | null): string {\n const candidate = id?.trim() ?? '';\n return candidate.length > 0 ? candidate : this.generatedContentId;\n }\n\n public getPositionedSide(): TngTooltipSide {\n return this.positionedSide();\n }\n\n public getPositionX(): number | null {\n return this.positionX();\n }\n\n public getPositionY(): number | null {\n return this.positionY();\n }\n\n public registerContent(content: HTMLElement, id: string | null): void {\n this.contentElement = content;\n this.contentId = id;\n if (this.resizeObserver !== null) {\n this.resizeObserver.observe(content);\n }\n if (this.isOpen()) {\n this.scheduleReposition();\n }\n }\n\n public unregisterContent(content: HTMLElement): void {\n if (this.resizeObserver !== null) {\n this.resizeObserver.unobserve(content);\n }\n\n if (this.contentElement === content) {\n this.contentElement = null;\n this.contentId = null;\n }\n }\n\n public registerTrigger(trigger: HTMLElement): void {\n this.triggerElement = trigger;\n if (this.resizeObserver !== null) {\n this.resizeObserver.observe(trigger);\n }\n if (this.isOpen()) {\n this.scheduleReposition();\n }\n }\n\n public unregisterTrigger(trigger: HTMLElement): void {\n if (this.resizeObserver !== null) {\n this.resizeObserver.unobserve(trigger);\n }\n\n if (this.triggerElement === trigger) {\n this.triggerElement = null;\n }\n }\n\n public onTriggerCloseIntent(): void {\n if (this.disabled()) {\n return;\n }\n\n this.openCloseDelayController.requestClose(this.closeDelay());\n }\n\n public onTriggerOpenIntent(): void {\n if (this.disabled()) {\n return;\n }\n\n this.openCloseDelayController.requestOpen(this.openDelay());\n }\n\n public onTriggerKeydown(event: TngTooltipKeyboardEvent): void {\n if (this.disabled() || !shouldCloseTngTooltipForKey(event.key)) {\n return;\n }\n\n if (tooltipGlobalDocument === null) {\n event.preventDefault();\n this.openCloseDelayController.cancelAll();\n this.setOpenState(false);\n }\n }\n\n private clearAnimationFrame(): void {\n if (this.animationFrameId === null || this.win === null) {\n return;\n }\n\n this.win.cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n\n private isControlled(): boolean {\n return this.openInput() !== undefined;\n }\n\n private reposition(): void {\n if (!this.isOpen() || this.win === null || this.triggerElement === null || this.contentElement === null) {\n return;\n }\n\n const result = computeOverlayPosition({\n anchorRect: normalizeRect(this.triggerElement.getBoundingClientRect()),\n collision: {\n flip: true,\n padding: tooltipCollisionPadding,\n shift: true,\n },\n offset: {\n side: tooltipSideOffset,\n },\n overlayRect: normalizeRect(this.contentElement.getBoundingClientRect()),\n placement: {\n align: 'center',\n side: this.side(),\n },\n viewportRect: resolveTooltipViewportRect(this.win),\n });\n\n this.positionX.set(result.x);\n this.positionY.set(result.y);\n this.positionedSide.set(result.side as TngTooltipSide);\n }\n\n private resetPosition(): void {\n this.positionX.set(null);\n this.positionY.set(null);\n }\n\n private scheduleReposition(): void {\n if (this.win === null || this.animationFrameId !== null) {\n return;\n }\n\n this.animationFrameId = this.win.requestAnimationFrame(() => {\n this.animationFrameId = null;\n this.reposition();\n });\n }\n\n private setOpenState(nextOpen: boolean): void {\n if (this.isOpen() === nextOpen) {\n return;\n }\n\n if (!this.isControlled()) {\n this.uncontrolledOpen.set(nextOpen);\n }\n if (!nextOpen) {\n this.resetPosition();\n }\n if (nextOpen) {\n this.scheduleReposition();\n }\n\n this.openChange.emit(nextOpen);\n }\n\n private shouldCloseFromEscape(): boolean {\n return this.isOpen();\n }\n\n private shouldCloseFromOutsidePointer(): boolean {\n return this.isOpen();\n }\n\n private registerOverlayLayer(): void {\n const hostElement = this.hostRef.nativeElement;\n tngPrimitiveOverlayRuntime.registerLayer({\n containsTarget: (target: unknown, path: readonly unknown[]): boolean => {\n if (target instanceof Node && hostElement.contains(target)) {\n return true;\n }\n\n return path.includes(hostElement);\n },\n dismissOnEscape: this.shouldCloseFromEscape(),\n dismissOnOutsidePointer: this.shouldCloseFromOutsidePointer(),\n id: this.instanceId,\n onDismiss: (reason: TngOverlayDismissReason): void => {\n if (reason === 'escape-key' && !this.shouldCloseFromEscape()) {\n return;\n }\n\n if (reason === 'outside-pointer' && !this.shouldCloseFromOutsidePointer()) {\n return;\n }\n\n this.openCloseDelayController.cancelAll();\n this.setOpenState(false);\n },\n });\n this.isOverlayLayerRegistered = true;\n }\n\n private unregisterOverlayLayer(): void {\n if (!this.isOverlayLayerRegistered) {\n return;\n }\n\n tngPrimitiveOverlayRuntime.unregisterLayer(this.instanceId);\n this.isOverlayLayerRegistered = false;\n }\n\n private setupRepositionListeners(): void {\n if (this.win === null || this.removeResizeListener !== null || this.removeScrollListener !== null) {\n return;\n }\n\n const onResize = (): void => {\n this.scheduleReposition();\n };\n const onScroll = (): void => {\n this.openCloseDelayController.cancelAll();\n this.setOpenState(false);\n };\n\n this.win.addEventListener('resize', onResize);\n this.win.addEventListener('scroll', onScroll, true);\n this.removeResizeListener = (): void => {\n this.win?.removeEventListener('resize', onResize);\n };\n this.removeScrollListener = (): void => {\n this.win?.removeEventListener('scroll', onScroll, true);\n };\n\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.resizeObserver = new ResizeObserver(() => {\n this.scheduleReposition();\n });\n if (this.triggerElement !== null) {\n this.resizeObserver.observe(this.triggerElement);\n }\n if (this.contentElement !== null) {\n this.resizeObserver.observe(this.contentElement);\n }\n }\n\n private teardownRepositionListeners(): void {\n this.removeResizeListener?.();\n this.removeScrollListener?.();\n this.removeResizeListener = null;\n this.removeScrollListener = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n}\n\n@Directive({\n selector: '[tngTooltipTrigger]',\n exportAs: 'tngTooltipTrigger',\n})\nexport class TngTooltipTrigger implements OnDestroy, OnInit {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tooltip = inject(TngTooltip, { optional: true });\n\n public readonly describedBy = input<string | null>(null);\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly open = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n\n @HostBinding('attr.aria-describedby')\n protected get ariaDescribedByAttr(): string | null {\n if (this.tooltip !== null) {\n return resolveTngTooltipAriaDescribedBy(this.tooltip.isOpen(), this.tooltip.getContentId());\n }\n\n return resolveTngTooltipAriaDescribedBy(this.open(), this.describedBy());\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n if (this.tooltip !== null) {\n return this.tooltip.disabled() ? '' : null;\n }\n\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tooltip-trigger' as const;\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'closed' | 'open' {\n if (this.tooltip !== null) {\n return resolveTngTooltipDataState(this.tooltip.isOpen());\n }\n\n return resolveTngTooltipDataState(this.open());\n }\n\n public ngOnInit(): void {\n this.tooltip?.registerTrigger(this.hostRef.nativeElement);\n }\n\n public ngOnDestroy(): void {\n this.tooltip?.unregisterTrigger(this.hostRef.nativeElement);\n }\n\n @HostListener('blur')\n protected onBlur(): void {\n this.tooltip?.onTriggerCloseIntent();\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n this.tooltip?.onTriggerOpenIntent();\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n this.tooltip?.onTriggerKeydown(event);\n }\n\n @HostListener('mouseleave')\n protected onMouseLeave(): void {\n this.tooltip?.onTriggerCloseIntent();\n }\n\n @HostListener('mouseenter')\n protected onMouseEnter(): void {\n this.tooltip?.onTriggerOpenIntent();\n }\n}\n\n@Directive({\n selector: '[tngTooltipContent]',\n exportAs: 'tngTooltipContent',\n})\nexport class TngTooltipContent implements OnDestroy, OnInit {\n private readonly generatedId = createTooltipContentId();\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tooltip = inject(TngTooltip, { optional: true });\n private resolvedId = '';\n\n public readonly id = input<string | null>(null);\n public readonly open = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly side = input<TngTooltipSide>('top');\n\n @HostBinding('attr.data-side')\n protected get dataSideAttr(): TngTooltipSide {\n if (this.tooltip !== null) {\n return this.tooltip.getPositionedSide();\n }\n\n return this.side();\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tooltip-content' as const;\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'closed' | 'open' {\n if (this.tooltip !== null) {\n return resolveTngTooltipDataState(this.tooltip.isOpen());\n }\n\n return resolveTngTooltipDataState(this.open());\n }\n\n @HostBinding('attr.hidden')\n protected get hiddenAttr(): '' | null {\n if (this.tooltip !== null) {\n return resolveTngTooltipHidden(this.tooltip.isOpen());\n }\n\n return resolveTngTooltipHidden(this.open());\n }\n\n @HostBinding('attr.id')\n protected get idAttr(): string {\n return this.resolvedId;\n }\n\n @HostBinding('attr.role')\n protected readonly roleAttr = 'tooltip' as const;\n\n @HostBinding('style.position')\n protected get positionStyle(): string | null {\n return this.tooltip === null ? null : 'fixed';\n }\n\n @HostBinding('style.left.px')\n protected get leftStyle(): number | null {\n if (this.tooltip === null) {\n return null;\n }\n\n return this.tooltip.getPositionX();\n }\n\n @HostBinding('style.top.px')\n protected get topStyle(): number | null {\n if (this.tooltip === null) {\n return null;\n }\n\n return this.tooltip.getPositionY();\n }\n\n public ngOnInit(): void {\n this.resolvedId = this.tooltip?.resolveContentId(this.id()) ?? this.resolveContentId(this.id());\n this.tooltip?.registerContent(this.hostRef.nativeElement, this.resolvedId);\n }\n\n public ngOnDestroy(): void {\n this.tooltip?.unregisterContent(this.hostRef.nativeElement);\n }\n\n private resolveContentId(value: string | null): string {\n const candidate = value?.trim() ?? '';\n return candidate.length > 0 ? candidate : this.generatedId;\n }\n}\n"]}
|