@tailng-ui/primitives 0.1.0 → 0.12.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/README.md +97 -11
- package/package.json +9 -3
- package/src/index.d.ts +5 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +5 -0
- package/src/index.js.map +1 -1
- package/src/lib/feedback/empty/tng-empty.d.ts.map +1 -1
- package/src/lib/feedback/empty/tng-empty.js +5 -0
- package/src/lib/feedback/empty/tng-empty.js.map +1 -1
- package/src/lib/feedback/progress-bar/tng-progress-bar.d.ts.map +1 -1
- package/src/lib/feedback/progress-bar/tng-progress-bar.js +4 -1
- package/src/lib/feedback/progress-bar/tng-progress-bar.js.map +1 -1
- package/src/lib/feedback/progress-spinner/tng-progress-spinner.d.ts.map +1 -1
- package/src/lib/feedback/progress-spinner/tng-progress-spinner.js +3 -1
- package/src/lib/feedback/progress-spinner/tng-progress-spinner.js.map +1 -1
- package/src/lib/feedback/skeleton/tng-skeleton.d.ts +1 -0
- package/src/lib/feedback/skeleton/tng-skeleton.d.ts.map +1 -1
- package/src/lib/feedback/skeleton/tng-skeleton.js +5 -0
- package/src/lib/feedback/skeleton/tng-skeleton.js.map +1 -1
- package/src/lib/feedback/toast/tng-toast.d.ts.map +1 -1
- package/src/lib/feedback/toast/tng-toast.js +2 -0
- package/src/lib/feedback/toast/tng-toast.js.map +1 -1
- package/src/lib/form/checkbox/tng-checkbox.d.ts.map +1 -1
- package/src/lib/form/checkbox/tng-checkbox.js +1 -0
- package/src/lib/form/checkbox/tng-checkbox.js.map +1 -1
- package/src/lib/form/chips/tng-chips.d.ts +53 -1
- package/src/lib/form/chips/tng-chips.d.ts.map +1 -1
- package/src/lib/form/chips/tng-chips.js +284 -1
- package/src/lib/form/chips/tng-chips.js.map +1 -1
- package/src/lib/form/combobox/tng-combobox.d.ts.map +1 -1
- package/src/lib/form/combobox/tng-combobox.js +1 -0
- package/src/lib/form/combobox/tng-combobox.js.map +1 -1
- package/src/lib/form/input-otp/tng-input-otp.d.ts +22 -0
- package/src/lib/form/input-otp/tng-input-otp.d.ts.map +1 -1
- package/src/lib/form/input-otp/tng-input-otp.js +106 -1
- package/src/lib/form/input-otp/tng-input-otp.js.map +1 -1
- package/src/lib/form/label/tng-label.d.ts +2 -0
- package/src/lib/form/label/tng-label.d.ts.map +1 -1
- package/src/lib/form/label/tng-label.js +10 -0
- package/src/lib/form/label/tng-label.js.map +1 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.d.ts +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.d.ts.map +1 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js +26 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js.map +1 -1
- package/src/lib/form/multiselect/tng-multiselect.d.ts.map +1 -1
- package/src/lib/form/multiselect/tng-multiselect.js +1 -0
- package/src/lib/form/multiselect/tng-multiselect.js.map +1 -1
- package/src/lib/form/radio/tng-radio.d.ts +26 -0
- package/src/lib/form/radio/tng-radio.d.ts.map +1 -1
- package/src/lib/form/radio/tng-radio.js +130 -1
- package/src/lib/form/radio/tng-radio.js.map +1 -1
- package/src/lib/form/slider/tng-slider.d.ts.map +1 -1
- package/src/lib/form/slider/tng-slider.js +1 -0
- package/src/lib/form/slider/tng-slider.js.map +1 -1
- package/src/lib/form/switch/tng-switch.d.ts.map +1 -1
- package/src/lib/form/switch/tng-switch.js +1 -0
- package/src/lib/form/switch/tng-switch.js.map +1 -1
- package/src/lib/form/textarea/tng-textarea.d.ts +6 -14
- package/src/lib/form/textarea/tng-textarea.d.ts.map +1 -1
- package/src/lib/form/textarea/tng-textarea.js +42 -85
- package/src/lib/form/textarea/tng-textarea.js.map +1 -1
- package/src/lib/form/toggle/tng-toggle.d.ts.map +1 -1
- package/src/lib/form/toggle/tng-toggle.js +1 -0
- package/src/lib/form/toggle/tng-toggle.js.map +1 -1
- package/src/lib/form/toggle-group/tng-toggle-group.d.ts.map +1 -1
- package/src/lib/form/toggle-group/tng-toggle-group.js +1 -0
- package/src/lib/form/toggle-group/tng-toggle-group.js.map +1 -1
- package/src/lib/layout/accordion/tng-accordion.d.ts +9 -0
- package/src/lib/layout/accordion/tng-accordion.d.ts.map +1 -1
- package/src/lib/layout/accordion/tng-accordion.js +113 -0
- package/src/lib/layout/accordion/tng-accordion.js.map +1 -1
- package/src/lib/layout/bottom-sheet/tng-bottom-sheet.d.ts.map +1 -1
- package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js +1 -0
- package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js.map +1 -1
- package/src/lib/layout/card/tng-card.d.ts.map +1 -1
- package/src/lib/layout/card/tng-card.js +10 -0
- package/src/lib/layout/card/tng-card.js.map +1 -1
- package/src/lib/layout/collapsible/tng-collapsible.d.ts.map +1 -1
- package/src/lib/layout/collapsible/tng-collapsible.js +3 -0
- package/src/lib/layout/collapsible/tng-collapsible.js.map +1 -1
- package/src/lib/layout/grid/tng-grid.d.ts.map +1 -1
- package/src/lib/layout/grid/tng-grid.js +1 -0
- package/src/lib/layout/grid/tng-grid.js.map +1 -1
- package/src/lib/layout/separator/tng-separator.d.ts.map +1 -1
- package/src/lib/layout/separator/tng-separator.js +1 -0
- package/src/lib/layout/separator/tng-separator.js.map +1 -1
- package/src/lib/layout/stepper/tng-stepper.d.ts.map +1 -1
- package/src/lib/layout/stepper/tng-stepper.js +1 -0
- package/src/lib/layout/stepper/tng-stepper.js.map +1 -1
- package/src/lib/layout/tree/__tests__/tng-tree.test-harness.d.ts +20 -0
- package/src/lib/layout/tree/__tests__/tng-tree.test-harness.d.ts.map +1 -0
- package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js +106 -0
- package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js.map +1 -0
- package/src/lib/layout/tree/index.d.ts +5 -0
- package/src/lib/layout/tree/index.d.ts.map +1 -0
- package/src/lib/layout/tree/index.js +5 -0
- package/src/lib/layout/tree/index.js.map +1 -0
- package/src/lib/layout/tree/tng-tree-group.d.ts +10 -0
- package/src/lib/layout/tree/tng-tree-group.d.ts.map +1 -0
- package/src/lib/layout/tree/tng-tree-group.js +29 -0
- package/src/lib/layout/tree/tng-tree-group.js.map +1 -0
- package/src/lib/layout/tree/tng-tree-indicator.d.ts +8 -0
- package/src/lib/layout/tree/tng-tree-indicator.d.ts.map +1 -0
- package/src/lib/layout/tree/tng-tree-indicator.js +36 -0
- package/src/lib/layout/tree/tng-tree-indicator.js.map +1 -0
- package/src/lib/layout/tree/tng-tree-item.d.ts +36 -0
- package/src/lib/layout/tree/tng-tree-item.d.ts.map +1 -0
- package/src/lib/layout/tree/tng-tree-item.js +139 -0
- package/src/lib/layout/tree/tng-tree-item.js.map +1 -0
- package/src/lib/layout/tree/tng-tree.d.ts +64 -1
- package/src/lib/layout/tree/tng-tree.d.ts.map +1 -1
- package/src/lib/layout/tree/tng-tree.js +536 -1
- package/src/lib/layout/tree/tng-tree.js.map +1 -1
- package/src/lib/layout/tree/tng-tree.transforms.d.ts +10 -0
- package/src/lib/layout/tree/tng-tree.transforms.d.ts.map +1 -0
- package/src/lib/layout/tree/tng-tree.transforms.js +46 -0
- package/src/lib/layout/tree/tng-tree.transforms.js.map +1 -0
- package/src/lib/navigation/breadcrumb/tng-breadcrumb.d.ts.map +1 -1
- package/src/lib/navigation/breadcrumb/tng-breadcrumb.js +5 -0
- package/src/lib/navigation/breadcrumb/tng-breadcrumb.js.map +1 -1
- package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.d.ts.map +1 -1
- package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js +1 -0
- package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js.map +1 -1
- package/src/lib/navigation/navigation-menu/tng-navigation-menu.d.ts.map +1 -1
- package/src/lib/navigation/navigation-menu/tng-navigation-menu.js +1 -0
- package/src/lib/navigation/navigation-menu/tng-navigation-menu.js.map +1 -1
- package/src/lib/navigation/toolbar/tng-toolbar.d.ts.map +1 -1
- package/src/lib/navigation/toolbar/tng-toolbar.js +1 -0
- package/src/lib/navigation/toolbar/tng-toolbar.js.map +1 -1
- package/src/lib/overlay/dialog/tng-dialog.d.ts +158 -0
- package/src/lib/overlay/dialog/tng-dialog.d.ts.map +1 -0
- package/src/lib/overlay/dialog/tng-dialog.js +854 -0
- package/src/lib/overlay/dialog/tng-dialog.js.map +1 -0
- package/src/lib/overlay/popover/tng-popover.d.ts +121 -0
- package/src/lib/overlay/popover/tng-popover.d.ts.map +1 -0
- package/src/lib/overlay/popover/tng-popover.js +614 -0
- package/src/lib/overlay/popover/tng-popover.js.map +1 -0
- package/src/lib/overlay/tng-overlay-runtime.d.ts +11 -0
- package/src/lib/overlay/tng-overlay-runtime.d.ts.map +1 -0
- package/src/lib/overlay/tng-overlay-runtime.js +6 -0
- package/src/lib/overlay/tng-overlay-runtime.js.map +1 -0
- package/src/lib/overlay/tooltip/tng-tooltip.d.ts +92 -3
- package/src/lib/overlay/tooltip/tng-tooltip.d.ts.map +1 -1
- package/src/lib/overlay/tooltip/tng-tooltip.js +477 -3
- package/src/lib/overlay/tooltip/tng-tooltip.js.map +1 -1
- package/src/lib/utility/avatar/tng-avatar.d.ts.map +1 -1
- package/src/lib/utility/avatar/tng-avatar.js +3 -0
- package/src/lib/utility/avatar/tng-avatar.js.map +1 -1
- package/src/lib/utility/badge/tng-badge.d.ts +6 -0
- package/src/lib/utility/badge/tng-badge.d.ts.map +1 -1
- package/src/lib/utility/badge/tng-badge.js +66 -0
- package/src/lib/utility/badge/tng-badge.js.map +1 -1
- package/src/lib/utility/code-block/tng-code-block.d.ts.map +1 -1
- package/src/lib/utility/code-block/tng-code-block.js +5 -0
- package/src/lib/utility/code-block/tng-code-block.js.map +1 -1
- package/src/lib/utility/copy/tng-copy.d.ts +21 -10
- package/src/lib/utility/copy/tng-copy.d.ts.map +1 -1
- package/src/lib/utility/copy/tng-copy.js +118 -88
- package/src/lib/utility/copy/tng-copy.js.map +1 -1
- package/src/lib/utility/press/tng-press.d.ts.map +1 -1
- package/src/lib/utility/press/tng-press.js +1 -0
- package/src/lib/utility/press/tng-press.js.map +1 -1
- package/src/lib/utility/tag/tng-tag.d.ts +37 -0
- package/src/lib/utility/tag/tng-tag.d.ts.map +1 -1
- package/src/lib/utility/tag/tng-tag.js +198 -1
- package/src/lib/utility/tag/tng-tag.js.map +1 -1
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { Directive, HostBinding, booleanAttribute, input } from '@angular/core';
|
|
2
|
+
import { Directive, ElementRef, HostBinding, HostListener, booleanAttribute, effect, inject, input, output, signal, } from '@angular/core';
|
|
3
|
+
import { computeOverlayPosition, createOverlayOpenCloseDelayController, createTngIdFactory, normalizeOverlayOpenCloseDelay, } from '@tailng-ui/cdk';
|
|
4
|
+
import { tngPrimitiveOverlayRuntime } from '../tng-overlay-runtime';
|
|
5
|
+
const createTooltipContentId = createTngIdFactory('tng-tooltip-content');
|
|
6
|
+
const createTooltipId = createTngIdFactory('tng-tooltip');
|
|
7
|
+
const tooltipCollisionPadding = 8;
|
|
8
|
+
const tooltipSideOffset = 8;
|
|
9
|
+
const tooltipGlobalDocument = typeof document === 'undefined' ? null : document;
|
|
10
|
+
function normalizeOptionalBooleanInput(value) {
|
|
11
|
+
if (value === null || value === undefined) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
return booleanAttribute(value);
|
|
15
|
+
}
|
|
16
|
+
function normalizeRect(rect) {
|
|
17
|
+
return {
|
|
18
|
+
height: rect.height,
|
|
19
|
+
left: rect.left,
|
|
20
|
+
top: rect.top,
|
|
21
|
+
width: rect.width,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function resolveTooltipViewportRect(win) {
|
|
25
|
+
return {
|
|
26
|
+
height: win.innerHeight || 0,
|
|
27
|
+
left: 0,
|
|
28
|
+
top: 0,
|
|
29
|
+
width: win.innerWidth || 0,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
3
32
|
export function resolveTngTooltipAriaDescribedBy(open, tooltipId) {
|
|
4
33
|
if (!open) {
|
|
5
34
|
return null;
|
|
@@ -12,7 +41,357 @@ export function resolveTngTooltipDataState(open) {
|
|
|
12
41
|
export function resolveTngTooltipHidden(open) {
|
|
13
42
|
return open ? null : '';
|
|
14
43
|
}
|
|
44
|
+
export function normalizeTngTooltipDelay(value) {
|
|
45
|
+
return normalizeOverlayOpenCloseDelay(value);
|
|
46
|
+
}
|
|
47
|
+
export function shouldCloseTngTooltipForKey(key) {
|
|
48
|
+
return key === 'Escape';
|
|
49
|
+
}
|
|
50
|
+
let TngTooltip = class TngTooltip {
|
|
51
|
+
generatedContentId = createTooltipContentId();
|
|
52
|
+
hostRef = inject(ElementRef);
|
|
53
|
+
instanceId = createTooltipId();
|
|
54
|
+
closeDelay = input(60);
|
|
55
|
+
defaultOpen = input(false, {
|
|
56
|
+
transform: booleanAttribute,
|
|
57
|
+
});
|
|
58
|
+
disabled = input(false, {
|
|
59
|
+
transform: booleanAttribute,
|
|
60
|
+
});
|
|
61
|
+
openDelay = input(120);
|
|
62
|
+
openInput = input(undefined, {
|
|
63
|
+
alias: 'open',
|
|
64
|
+
transform: normalizeOptionalBooleanInput,
|
|
65
|
+
});
|
|
66
|
+
side = input('top');
|
|
67
|
+
openChange = output();
|
|
68
|
+
win = typeof window === 'undefined' ? null : window;
|
|
69
|
+
uncontrolledOpen = signal(false);
|
|
70
|
+
animationFrameId = null;
|
|
71
|
+
contentElement = null;
|
|
72
|
+
contentId = null;
|
|
73
|
+
removeResizeListener = null;
|
|
74
|
+
removeScrollListener = null;
|
|
75
|
+
resizeObserver = null;
|
|
76
|
+
triggerElement = null;
|
|
77
|
+
openCloseDelayController = createOverlayOpenCloseDelayController({
|
|
78
|
+
onStateChange: (nextOpen) => this.setOpenState(nextOpen),
|
|
79
|
+
});
|
|
80
|
+
isOverlayLayerRegistered = false;
|
|
81
|
+
initialized = false;
|
|
82
|
+
positionX = signal(null);
|
|
83
|
+
positionY = signal(null);
|
|
84
|
+
positionedSide = signal('top');
|
|
85
|
+
syncDisabledState = effect(() => {
|
|
86
|
+
if (this.disabled()) {
|
|
87
|
+
this.openCloseDelayController.cancelAll();
|
|
88
|
+
if (this.isOpen()) {
|
|
89
|
+
this.setOpenState(false);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
syncPositioning = effect(() => {
|
|
94
|
+
if (!this.initialized) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (!this.isOpen()) {
|
|
98
|
+
this.resetPosition();
|
|
99
|
+
this.positionedSide.set(this.side());
|
|
100
|
+
this.teardownRepositionListeners();
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
this.setupRepositionListeners();
|
|
104
|
+
this.scheduleReposition();
|
|
105
|
+
});
|
|
106
|
+
syncOverlayLayer = effect(() => {
|
|
107
|
+
if (!this.initialized) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (this.isOpen()) {
|
|
111
|
+
this.registerOverlayLayer();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
this.unregisterOverlayLayer();
|
|
115
|
+
});
|
|
116
|
+
syncSide = effect(() => {
|
|
117
|
+
const requestedSide = this.side();
|
|
118
|
+
if (!this.initialized || !this.isOpen()) {
|
|
119
|
+
this.positionedSide.set(requestedSide);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
this.scheduleReposition();
|
|
123
|
+
});
|
|
124
|
+
dataSlot = 'tooltip';
|
|
125
|
+
get dataStateAttr() {
|
|
126
|
+
return resolveTngTooltipDataState(this.isOpen());
|
|
127
|
+
}
|
|
128
|
+
get dataOpenAttr() {
|
|
129
|
+
return this.isOpen() ? 'true' : 'false';
|
|
130
|
+
}
|
|
131
|
+
get dataDisabledAttr() {
|
|
132
|
+
return this.disabled() ? '' : null;
|
|
133
|
+
}
|
|
134
|
+
ngOnInit() {
|
|
135
|
+
if (!this.isControlled()) {
|
|
136
|
+
this.uncontrolledOpen.set(this.defaultOpen());
|
|
137
|
+
}
|
|
138
|
+
this.initialized = true;
|
|
139
|
+
if (this.isOpen()) {
|
|
140
|
+
this.setupRepositionListeners();
|
|
141
|
+
this.scheduleReposition();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
ngOnDestroy() {
|
|
145
|
+
this.syncDisabledState.destroy();
|
|
146
|
+
this.syncPositioning.destroy();
|
|
147
|
+
this.syncOverlayLayer.destroy();
|
|
148
|
+
this.syncSide.destroy();
|
|
149
|
+
this.openCloseDelayController.destroy();
|
|
150
|
+
this.unregisterOverlayLayer();
|
|
151
|
+
this.clearAnimationFrame();
|
|
152
|
+
this.teardownRepositionListeners();
|
|
153
|
+
}
|
|
154
|
+
isOpen() {
|
|
155
|
+
return this.openInput() ?? this.uncontrolledOpen();
|
|
156
|
+
}
|
|
157
|
+
getContentId() {
|
|
158
|
+
return this.contentId;
|
|
159
|
+
}
|
|
160
|
+
resolveContentId(id) {
|
|
161
|
+
const candidate = id?.trim() ?? '';
|
|
162
|
+
return candidate.length > 0 ? candidate : this.generatedContentId;
|
|
163
|
+
}
|
|
164
|
+
getPositionedSide() {
|
|
165
|
+
return this.positionedSide();
|
|
166
|
+
}
|
|
167
|
+
getPositionX() {
|
|
168
|
+
return this.positionX();
|
|
169
|
+
}
|
|
170
|
+
getPositionY() {
|
|
171
|
+
return this.positionY();
|
|
172
|
+
}
|
|
173
|
+
registerContent(content, id) {
|
|
174
|
+
this.contentElement = content;
|
|
175
|
+
this.contentId = id;
|
|
176
|
+
if (this.resizeObserver !== null) {
|
|
177
|
+
this.resizeObserver.observe(content);
|
|
178
|
+
}
|
|
179
|
+
if (this.isOpen()) {
|
|
180
|
+
this.scheduleReposition();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
unregisterContent(content) {
|
|
184
|
+
if (this.resizeObserver !== null) {
|
|
185
|
+
this.resizeObserver.unobserve(content);
|
|
186
|
+
}
|
|
187
|
+
if (this.contentElement === content) {
|
|
188
|
+
this.contentElement = null;
|
|
189
|
+
this.contentId = null;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
registerTrigger(trigger) {
|
|
193
|
+
this.triggerElement = trigger;
|
|
194
|
+
if (this.resizeObserver !== null) {
|
|
195
|
+
this.resizeObserver.observe(trigger);
|
|
196
|
+
}
|
|
197
|
+
if (this.isOpen()) {
|
|
198
|
+
this.scheduleReposition();
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
unregisterTrigger(trigger) {
|
|
202
|
+
if (this.resizeObserver !== null) {
|
|
203
|
+
this.resizeObserver.unobserve(trigger);
|
|
204
|
+
}
|
|
205
|
+
if (this.triggerElement === trigger) {
|
|
206
|
+
this.triggerElement = null;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
onTriggerCloseIntent() {
|
|
210
|
+
if (this.disabled()) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
this.openCloseDelayController.requestClose(this.closeDelay());
|
|
214
|
+
}
|
|
215
|
+
onTriggerOpenIntent() {
|
|
216
|
+
if (this.disabled()) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
this.openCloseDelayController.requestOpen(this.openDelay());
|
|
220
|
+
}
|
|
221
|
+
onTriggerKeydown(event) {
|
|
222
|
+
if (this.disabled() || !shouldCloseTngTooltipForKey(event.key)) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
if (tooltipGlobalDocument === null) {
|
|
226
|
+
event.preventDefault();
|
|
227
|
+
this.openCloseDelayController.cancelAll();
|
|
228
|
+
this.setOpenState(false);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
clearAnimationFrame() {
|
|
232
|
+
if (this.animationFrameId === null || this.win === null) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
this.win.cancelAnimationFrame(this.animationFrameId);
|
|
236
|
+
this.animationFrameId = null;
|
|
237
|
+
}
|
|
238
|
+
isControlled() {
|
|
239
|
+
return this.openInput() !== undefined;
|
|
240
|
+
}
|
|
241
|
+
reposition() {
|
|
242
|
+
if (!this.isOpen() || this.win === null || this.triggerElement === null || this.contentElement === null) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
const result = computeOverlayPosition({
|
|
246
|
+
anchorRect: normalizeRect(this.triggerElement.getBoundingClientRect()),
|
|
247
|
+
collision: {
|
|
248
|
+
flip: true,
|
|
249
|
+
padding: tooltipCollisionPadding,
|
|
250
|
+
shift: true,
|
|
251
|
+
},
|
|
252
|
+
offset: {
|
|
253
|
+
side: tooltipSideOffset,
|
|
254
|
+
},
|
|
255
|
+
overlayRect: normalizeRect(this.contentElement.getBoundingClientRect()),
|
|
256
|
+
placement: {
|
|
257
|
+
align: 'center',
|
|
258
|
+
side: this.side(),
|
|
259
|
+
},
|
|
260
|
+
viewportRect: resolveTooltipViewportRect(this.win),
|
|
261
|
+
});
|
|
262
|
+
this.positionX.set(result.x);
|
|
263
|
+
this.positionY.set(result.y);
|
|
264
|
+
this.positionedSide.set(result.side);
|
|
265
|
+
}
|
|
266
|
+
resetPosition() {
|
|
267
|
+
this.positionX.set(null);
|
|
268
|
+
this.positionY.set(null);
|
|
269
|
+
}
|
|
270
|
+
scheduleReposition() {
|
|
271
|
+
if (this.win === null || this.animationFrameId !== null) {
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
this.animationFrameId = this.win.requestAnimationFrame(() => {
|
|
275
|
+
this.animationFrameId = null;
|
|
276
|
+
this.reposition();
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
setOpenState(nextOpen) {
|
|
280
|
+
if (this.isOpen() === nextOpen) {
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
if (!this.isControlled()) {
|
|
284
|
+
this.uncontrolledOpen.set(nextOpen);
|
|
285
|
+
}
|
|
286
|
+
if (!nextOpen) {
|
|
287
|
+
this.resetPosition();
|
|
288
|
+
}
|
|
289
|
+
if (nextOpen) {
|
|
290
|
+
this.scheduleReposition();
|
|
291
|
+
}
|
|
292
|
+
this.openChange.emit(nextOpen);
|
|
293
|
+
}
|
|
294
|
+
shouldCloseFromEscape() {
|
|
295
|
+
return this.isOpen();
|
|
296
|
+
}
|
|
297
|
+
shouldCloseFromOutsidePointer() {
|
|
298
|
+
return this.isOpen();
|
|
299
|
+
}
|
|
300
|
+
registerOverlayLayer() {
|
|
301
|
+
const hostElement = this.hostRef.nativeElement;
|
|
302
|
+
tngPrimitiveOverlayRuntime.registerLayer({
|
|
303
|
+
containsTarget: (target, path) => {
|
|
304
|
+
if (target instanceof Node && hostElement.contains(target)) {
|
|
305
|
+
return true;
|
|
306
|
+
}
|
|
307
|
+
return path.includes(hostElement);
|
|
308
|
+
},
|
|
309
|
+
dismissOnEscape: this.shouldCloseFromEscape(),
|
|
310
|
+
dismissOnOutsidePointer: this.shouldCloseFromOutsidePointer(),
|
|
311
|
+
id: this.instanceId,
|
|
312
|
+
onDismiss: (reason) => {
|
|
313
|
+
if (reason === 'escape-key' && !this.shouldCloseFromEscape()) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
if (reason === 'outside-pointer' && !this.shouldCloseFromOutsidePointer()) {
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
this.openCloseDelayController.cancelAll();
|
|
320
|
+
this.setOpenState(false);
|
|
321
|
+
},
|
|
322
|
+
});
|
|
323
|
+
this.isOverlayLayerRegistered = true;
|
|
324
|
+
}
|
|
325
|
+
unregisterOverlayLayer() {
|
|
326
|
+
if (!this.isOverlayLayerRegistered) {
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
tngPrimitiveOverlayRuntime.unregisterLayer(this.instanceId);
|
|
330
|
+
this.isOverlayLayerRegistered = false;
|
|
331
|
+
}
|
|
332
|
+
setupRepositionListeners() {
|
|
333
|
+
if (this.win === null || this.removeResizeListener !== null || this.removeScrollListener !== null) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
const onResize = () => {
|
|
337
|
+
this.scheduleReposition();
|
|
338
|
+
};
|
|
339
|
+
const onScroll = () => {
|
|
340
|
+
this.scheduleReposition();
|
|
341
|
+
};
|
|
342
|
+
this.win.addEventListener('resize', onResize);
|
|
343
|
+
this.win.addEventListener('scroll', onScroll, true);
|
|
344
|
+
this.removeResizeListener = () => {
|
|
345
|
+
this.win?.removeEventListener('resize', onResize);
|
|
346
|
+
};
|
|
347
|
+
this.removeScrollListener = () => {
|
|
348
|
+
this.win?.removeEventListener('scroll', onScroll, true);
|
|
349
|
+
};
|
|
350
|
+
if (typeof ResizeObserver === 'undefined') {
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
354
|
+
this.scheduleReposition();
|
|
355
|
+
});
|
|
356
|
+
if (this.triggerElement !== null) {
|
|
357
|
+
this.resizeObserver.observe(this.triggerElement);
|
|
358
|
+
}
|
|
359
|
+
if (this.contentElement !== null) {
|
|
360
|
+
this.resizeObserver.observe(this.contentElement);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
teardownRepositionListeners() {
|
|
364
|
+
this.removeResizeListener?.();
|
|
365
|
+
this.removeScrollListener?.();
|
|
366
|
+
this.removeResizeListener = null;
|
|
367
|
+
this.removeScrollListener = null;
|
|
368
|
+
this.resizeObserver?.disconnect();
|
|
369
|
+
this.resizeObserver = null;
|
|
370
|
+
}
|
|
371
|
+
};
|
|
372
|
+
__decorate([
|
|
373
|
+
HostBinding('attr.data-slot')
|
|
374
|
+
], TngTooltip.prototype, "dataSlot", void 0);
|
|
375
|
+
__decorate([
|
|
376
|
+
HostBinding('attr.data-state')
|
|
377
|
+
], TngTooltip.prototype, "dataStateAttr", null);
|
|
378
|
+
__decorate([
|
|
379
|
+
HostBinding('attr.data-open')
|
|
380
|
+
], TngTooltip.prototype, "dataOpenAttr", null);
|
|
381
|
+
__decorate([
|
|
382
|
+
HostBinding('attr.data-disabled')
|
|
383
|
+
], TngTooltip.prototype, "dataDisabledAttr", null);
|
|
384
|
+
TngTooltip = __decorate([
|
|
385
|
+
Directive({
|
|
386
|
+
selector: '[tngTooltip]',
|
|
387
|
+
exportAs: 'tngTooltip',
|
|
388
|
+
standalone: true,
|
|
389
|
+
})
|
|
390
|
+
], TngTooltip);
|
|
391
|
+
export { TngTooltip };
|
|
15
392
|
let TngTooltipTrigger = class TngTooltipTrigger {
|
|
393
|
+
hostRef = inject(ElementRef);
|
|
394
|
+
tooltip = inject(TngTooltip, { optional: true });
|
|
16
395
|
describedBy = input(null);
|
|
17
396
|
disabled = input(false, {
|
|
18
397
|
transform: booleanAttribute,
|
|
@@ -21,15 +400,45 @@ let TngTooltipTrigger = class TngTooltipTrigger {
|
|
|
21
400
|
transform: booleanAttribute,
|
|
22
401
|
});
|
|
23
402
|
get ariaDescribedByAttr() {
|
|
403
|
+
if (this.tooltip !== null) {
|
|
404
|
+
return resolveTngTooltipAriaDescribedBy(this.tooltip.isOpen(), this.tooltip.getContentId());
|
|
405
|
+
}
|
|
24
406
|
return resolveTngTooltipAriaDescribedBy(this.open(), this.describedBy());
|
|
25
407
|
}
|
|
26
408
|
get dataDisabledAttr() {
|
|
409
|
+
if (this.tooltip !== null) {
|
|
410
|
+
return this.tooltip.disabled() ? '' : null;
|
|
411
|
+
}
|
|
27
412
|
return this.disabled() ? '' : null;
|
|
28
413
|
}
|
|
29
414
|
dataSlot = 'tooltip-trigger';
|
|
30
415
|
get dataStateAttr() {
|
|
416
|
+
if (this.tooltip !== null) {
|
|
417
|
+
return resolveTngTooltipDataState(this.tooltip.isOpen());
|
|
418
|
+
}
|
|
31
419
|
return resolveTngTooltipDataState(this.open());
|
|
32
420
|
}
|
|
421
|
+
ngOnInit() {
|
|
422
|
+
this.tooltip?.registerTrigger(this.hostRef.nativeElement);
|
|
423
|
+
}
|
|
424
|
+
ngOnDestroy() {
|
|
425
|
+
this.tooltip?.unregisterTrigger(this.hostRef.nativeElement);
|
|
426
|
+
}
|
|
427
|
+
onBlur() {
|
|
428
|
+
this.tooltip?.onTriggerCloseIntent();
|
|
429
|
+
}
|
|
430
|
+
onFocus() {
|
|
431
|
+
this.tooltip?.onTriggerOpenIntent();
|
|
432
|
+
}
|
|
433
|
+
onKeydown(event) {
|
|
434
|
+
this.tooltip?.onTriggerKeydown(event);
|
|
435
|
+
}
|
|
436
|
+
onMouseLeave() {
|
|
437
|
+
this.tooltip?.onTriggerCloseIntent();
|
|
438
|
+
}
|
|
439
|
+
onMouseEnter() {
|
|
440
|
+
this.tooltip?.onTriggerOpenIntent();
|
|
441
|
+
}
|
|
33
442
|
};
|
|
34
443
|
__decorate([
|
|
35
444
|
HostBinding('attr.aria-describedby')
|
|
@@ -43,33 +452,88 @@ __decorate([
|
|
|
43
452
|
__decorate([
|
|
44
453
|
HostBinding('attr.data-state')
|
|
45
454
|
], TngTooltipTrigger.prototype, "dataStateAttr", null);
|
|
455
|
+
__decorate([
|
|
456
|
+
HostListener('blur')
|
|
457
|
+
], TngTooltipTrigger.prototype, "onBlur", null);
|
|
458
|
+
__decorate([
|
|
459
|
+
HostListener('focus')
|
|
460
|
+
], TngTooltipTrigger.prototype, "onFocus", null);
|
|
461
|
+
__decorate([
|
|
462
|
+
HostListener('keydown', ['$event'])
|
|
463
|
+
], TngTooltipTrigger.prototype, "onKeydown", null);
|
|
464
|
+
__decorate([
|
|
465
|
+
HostListener('mouseleave')
|
|
466
|
+
], TngTooltipTrigger.prototype, "onMouseLeave", null);
|
|
467
|
+
__decorate([
|
|
468
|
+
HostListener('mouseenter')
|
|
469
|
+
], TngTooltipTrigger.prototype, "onMouseEnter", null);
|
|
46
470
|
TngTooltipTrigger = __decorate([
|
|
47
471
|
Directive({
|
|
48
472
|
selector: '[tngTooltipTrigger]',
|
|
49
473
|
exportAs: 'tngTooltipTrigger',
|
|
474
|
+
standalone: true,
|
|
50
475
|
})
|
|
51
476
|
], TngTooltipTrigger);
|
|
52
477
|
export { TngTooltipTrigger };
|
|
53
478
|
let TngTooltipContent = class TngTooltipContent {
|
|
54
|
-
|
|
479
|
+
generatedId = createTooltipContentId();
|
|
480
|
+
hostRef = inject(ElementRef);
|
|
481
|
+
tooltip = inject(TngTooltip, { optional: true });
|
|
482
|
+
resolvedId = '';
|
|
483
|
+
id = input(null);
|
|
55
484
|
open = input(false, {
|
|
56
485
|
transform: booleanAttribute,
|
|
57
486
|
});
|
|
58
487
|
side = input('top');
|
|
59
488
|
get dataSideAttr() {
|
|
489
|
+
if (this.tooltip !== null) {
|
|
490
|
+
return this.tooltip.getPositionedSide();
|
|
491
|
+
}
|
|
60
492
|
return this.side();
|
|
61
493
|
}
|
|
62
494
|
dataSlot = 'tooltip-content';
|
|
63
495
|
get dataStateAttr() {
|
|
496
|
+
if (this.tooltip !== null) {
|
|
497
|
+
return resolveTngTooltipDataState(this.tooltip.isOpen());
|
|
498
|
+
}
|
|
64
499
|
return resolveTngTooltipDataState(this.open());
|
|
65
500
|
}
|
|
66
501
|
get hiddenAttr() {
|
|
502
|
+
if (this.tooltip !== null) {
|
|
503
|
+
return resolveTngTooltipHidden(this.tooltip.isOpen());
|
|
504
|
+
}
|
|
67
505
|
return resolveTngTooltipHidden(this.open());
|
|
68
506
|
}
|
|
69
507
|
get idAttr() {
|
|
70
|
-
return this.
|
|
508
|
+
return this.resolvedId;
|
|
71
509
|
}
|
|
72
510
|
roleAttr = 'tooltip';
|
|
511
|
+
get positionStyle() {
|
|
512
|
+
return this.tooltip === null ? null : 'fixed';
|
|
513
|
+
}
|
|
514
|
+
get leftStyle() {
|
|
515
|
+
if (this.tooltip === null) {
|
|
516
|
+
return null;
|
|
517
|
+
}
|
|
518
|
+
return this.tooltip.getPositionX();
|
|
519
|
+
}
|
|
520
|
+
get topStyle() {
|
|
521
|
+
if (this.tooltip === null) {
|
|
522
|
+
return null;
|
|
523
|
+
}
|
|
524
|
+
return this.tooltip.getPositionY();
|
|
525
|
+
}
|
|
526
|
+
ngOnInit() {
|
|
527
|
+
this.resolvedId = this.tooltip?.resolveContentId(this.id()) ?? this.resolveContentId(this.id());
|
|
528
|
+
this.tooltip?.registerContent(this.hostRef.nativeElement, this.resolvedId);
|
|
529
|
+
}
|
|
530
|
+
ngOnDestroy() {
|
|
531
|
+
this.tooltip?.unregisterContent(this.hostRef.nativeElement);
|
|
532
|
+
}
|
|
533
|
+
resolveContentId(value) {
|
|
534
|
+
const candidate = value?.trim() ?? '';
|
|
535
|
+
return candidate.length > 0 ? candidate : this.generatedId;
|
|
536
|
+
}
|
|
73
537
|
};
|
|
74
538
|
__decorate([
|
|
75
539
|
HostBinding('attr.data-side')
|
|
@@ -89,10 +553,20 @@ __decorate([
|
|
|
89
553
|
__decorate([
|
|
90
554
|
HostBinding('attr.role')
|
|
91
555
|
], TngTooltipContent.prototype, "roleAttr", void 0);
|
|
556
|
+
__decorate([
|
|
557
|
+
HostBinding('style.position')
|
|
558
|
+
], TngTooltipContent.prototype, "positionStyle", null);
|
|
559
|
+
__decorate([
|
|
560
|
+
HostBinding('style.left.px')
|
|
561
|
+
], TngTooltipContent.prototype, "leftStyle", null);
|
|
562
|
+
__decorate([
|
|
563
|
+
HostBinding('style.top.px')
|
|
564
|
+
], TngTooltipContent.prototype, "topStyle", null);
|
|
92
565
|
TngTooltipContent = __decorate([
|
|
93
566
|
Directive({
|
|
94
567
|
selector: '[tngTooltipContent]',
|
|
95
568
|
exportAs: 'tngTooltipContent',
|
|
569
|
+
standalone: true,
|
|
96
570
|
})
|
|
97
571
|
], TngTooltipContent);
|
|
98
572
|
export { TngTooltipContent };
|
|
@@ -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 { Directive, HostBinding, booleanAttribute, input } from '@angular/core';\n\nexport type TngTooltipSide = 'bottom' | 'left' | 'right' | 'top';\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\n@Directive({\n selector: '[tngTooltipTrigger]',\n exportAs: 'tngTooltipTrigger',\n})\nexport class TngTooltipTrigger {\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 return resolveTngTooltipAriaDescribedBy(this.open(), this.describedBy());\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\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 return resolveTngTooltipDataState(this.open());\n }\n}\n\n@Directive({\n selector: '[tngTooltipContent]',\n exportAs: 'tngTooltipContent',\n})\nexport class TngTooltipContent {\n public readonly id = input.required<string>();\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 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 return resolveTngTooltipDataState(this.open());\n }\n\n @HostBinding('attr.hidden')\n protected get hiddenAttr(): '' | null {\n return resolveTngTooltipHidden(this.open());\n }\n\n @HostBinding('attr.id')\n protected get idAttr(): string {\n return this.id();\n }\n\n @HostBinding('attr.role')\n protected readonly roleAttr = 'tooltip' as const;\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 {\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 standalone: true,\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 standalone: true,\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 standalone: true,\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-avatar.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/utility/avatar/tng-avatar.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"tng-avatar.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/utility/avatar/tng-avatar.ts"],"names":[],"mappings":"AAEA,qBAKa,SAAS;IAEpB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAU;CACjD;AAED,qBAKa,cAAc;IAEzB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,cAAc,CAAU;CACvD;AAED,qBAKa,iBAAiB;IAE5B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,iBAAiB,CAAU;CAC1D"}
|
|
@@ -10,6 +10,7 @@ TngAvatar = __decorate([
|
|
|
10
10
|
Directive({
|
|
11
11
|
selector: '[tngAvatar]',
|
|
12
12
|
exportAs: 'tngAvatar',
|
|
13
|
+
standalone: true,
|
|
13
14
|
})
|
|
14
15
|
], TngAvatar);
|
|
15
16
|
export { TngAvatar };
|
|
@@ -23,6 +24,7 @@ TngAvatarImage = __decorate([
|
|
|
23
24
|
Directive({
|
|
24
25
|
selector: 'img[tngAvatarImage]',
|
|
25
26
|
exportAs: 'tngAvatarImage',
|
|
27
|
+
standalone: true,
|
|
26
28
|
})
|
|
27
29
|
], TngAvatarImage);
|
|
28
30
|
export { TngAvatarImage };
|
|
@@ -36,6 +38,7 @@ TngAvatarFallback = __decorate([
|
|
|
36
38
|
Directive({
|
|
37
39
|
selector: '[tngAvatarFallback]',
|
|
38
40
|
exportAs: 'tngAvatarFallback',
|
|
41
|
+
standalone: true,
|
|
39
42
|
})
|
|
40
43
|
], TngAvatarFallback);
|
|
41
44
|
export { TngAvatarFallback };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-avatar.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/utility/avatar/tng-avatar.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"tng-avatar.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/utility/avatar/tng-avatar.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAOhD,IAAM,SAAS,GAAf,MAAM,SAAS;IAED,QAAQ,GAAG,QAAiB,CAAC;CACjD,CAAA;AADoB;IADlB,WAAW,CAAC,gBAAgB,CAAC;2CACkB;AAFrC,SAAS;IALrB,SAAS,CAAC;QACT,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,IAAI;KACjB,CAAC;GACW,SAAS,CAGrB;;AAOM,IAAM,cAAc,GAApB,MAAM,cAAc;IAEN,QAAQ,GAAG,cAAuB,CAAC;CACvD,CAAA;AADoB;IADlB,WAAW,CAAC,gBAAgB,CAAC;gDACwB;AAF3C,cAAc;IAL1B,SAAS,CAAC;QACT,QAAQ,EAAE,qBAAqB;QAC/B,QAAQ,EAAE,gBAAgB;QAC1B,UAAU,EAAE,IAAI;KACjB,CAAC;GACW,cAAc,CAG1B;;AAOM,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAET,QAAQ,GAAG,iBAA0B,CAAC;CAC1D,CAAA;AADoB;IADlB,WAAW,CAAC,gBAAgB,CAAC;mDAC2B;AAF9C,iBAAiB;IAL7B,SAAS,CAAC;QACT,QAAQ,EAAE,qBAAqB;QAC/B,QAAQ,EAAE,mBAAmB;QAC7B,UAAU,EAAE,IAAI;KACjB,CAAC;GACW,iBAAiB,CAG7B","sourcesContent":["import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tngAvatar]',\n exportAs: 'tngAvatar',\n standalone: true,\n})\nexport class TngAvatar {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'avatar' as const;\n}\n\n@Directive({\n selector: 'img[tngAvatarImage]',\n exportAs: 'tngAvatarImage',\n standalone: true,\n})\nexport class TngAvatarImage {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'avatar-image' as const;\n}\n\n@Directive({\n selector: '[tngAvatarFallback]',\n exportAs: 'tngAvatarFallback',\n standalone: true,\n})\nexport class TngAvatarFallback {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'avatar-fallback' as const;\n}\n"]}
|