@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,16 +1,9 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { Directive, HostBinding,
|
|
2
|
+
import { Directive, HostBinding, input, numberAttribute } from '@angular/core';
|
|
3
|
+
import { coerceTngInputNullableBoolean, TngInput } from '../input/tng-input';
|
|
4
|
+
/** @deprecated Use `coerceTngInputNullableBoolean` from `tng-input`. */
|
|
3
5
|
export function coerceTngTextareaNullableBoolean(value) {
|
|
4
|
-
|
|
5
|
-
return null;
|
|
6
|
-
}
|
|
7
|
-
if (value === '' || value === true || value === 'true') {
|
|
8
|
-
return true;
|
|
9
|
-
}
|
|
10
|
-
if (value === false || value === 'false') {
|
|
11
|
-
return false;
|
|
12
|
-
}
|
|
13
|
-
return null;
|
|
6
|
+
return coerceTngInputNullableBoolean(value);
|
|
14
7
|
}
|
|
15
8
|
export function normalizeTngTextareaRows(value) {
|
|
16
9
|
if (!Number.isFinite(value)) {
|
|
@@ -18,101 +11,65 @@ export function normalizeTngTextareaRows(value) {
|
|
|
18
11
|
}
|
|
19
12
|
return Math.max(1, Math.trunc(value));
|
|
20
13
|
}
|
|
21
|
-
function
|
|
22
|
-
if (
|
|
23
|
-
return
|
|
14
|
+
export function normalizeTngTextareaResize(value) {
|
|
15
|
+
if (typeof value !== 'string') {
|
|
16
|
+
return 'vertical';
|
|
24
17
|
}
|
|
25
|
-
const normalized = value.trim();
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return
|
|
18
|
+
const normalized = value.trim().toLowerCase();
|
|
19
|
+
if (normalized === 'none' ||
|
|
20
|
+
normalized === 'vertical' ||
|
|
21
|
+
normalized === 'horizontal' ||
|
|
22
|
+
normalized === 'both') {
|
|
23
|
+
return normalized;
|
|
31
24
|
}
|
|
32
|
-
return
|
|
25
|
+
return 'vertical';
|
|
33
26
|
}
|
|
34
27
|
let TngTextarea = class TngTextarea {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
transform: coerceTngTextareaNullableBoolean,
|
|
38
|
-
});
|
|
39
|
-
ariaRequired = input(null, {
|
|
40
|
-
transform: coerceTngTextareaNullableBoolean,
|
|
41
|
-
});
|
|
42
|
-
disabled = input(false, {
|
|
43
|
-
transform: booleanAttribute,
|
|
44
|
-
});
|
|
45
|
-
readonly = input(false, {
|
|
46
|
-
transform: booleanAttribute,
|
|
47
|
-
});
|
|
48
|
-
required = input(false, {
|
|
49
|
-
transform: booleanAttribute,
|
|
28
|
+
resize = input('vertical', {
|
|
29
|
+
transform: normalizeTngTextareaResize,
|
|
50
30
|
});
|
|
51
31
|
rows = input(3, {
|
|
52
32
|
transform: (value) => normalizeTngTextareaRows(numberAttribute(value)),
|
|
53
33
|
});
|
|
54
|
-
get
|
|
55
|
-
return
|
|
56
|
-
}
|
|
57
|
-
get ariaInvalidAttr() {
|
|
58
|
-
return toAriaBoolean(this.ariaInvalid());
|
|
59
|
-
}
|
|
60
|
-
get ariaRequiredAttr() {
|
|
61
|
-
if (this.required()) {
|
|
62
|
-
return 'true';
|
|
63
|
-
}
|
|
64
|
-
return toAriaBoolean(this.ariaRequired());
|
|
65
|
-
}
|
|
66
|
-
get dataDisabledAttr() {
|
|
67
|
-
return this.disabled() ? '' : null;
|
|
68
|
-
}
|
|
69
|
-
get dataInvalidAttr() {
|
|
70
|
-
return this.ariaInvalid() === true ? '' : null;
|
|
71
|
-
}
|
|
72
|
-
get disabledAttr() {
|
|
73
|
-
return this.disabled() ? '' : null;
|
|
74
|
-
}
|
|
75
|
-
get readonlyAttr() {
|
|
76
|
-
return this.readonly() ? '' : null;
|
|
77
|
-
}
|
|
78
|
-
get requiredAttr() {
|
|
79
|
-
return this.required() ? '' : null;
|
|
34
|
+
get dataResizeAttr() {
|
|
35
|
+
return this.resize();
|
|
80
36
|
}
|
|
81
37
|
get rowsAttr() {
|
|
82
38
|
return this.rows();
|
|
83
39
|
}
|
|
40
|
+
get resizeStyle() {
|
|
41
|
+
return this.resize();
|
|
42
|
+
}
|
|
84
43
|
};
|
|
85
44
|
__decorate([
|
|
86
|
-
HostBinding('attr.
|
|
87
|
-
], TngTextarea.prototype, "
|
|
88
|
-
__decorate([
|
|
89
|
-
HostBinding('attr.aria-invalid')
|
|
90
|
-
], TngTextarea.prototype, "ariaInvalidAttr", null);
|
|
91
|
-
__decorate([
|
|
92
|
-
HostBinding('attr.aria-required')
|
|
93
|
-
], TngTextarea.prototype, "ariaRequiredAttr", null);
|
|
94
|
-
__decorate([
|
|
95
|
-
HostBinding('attr.data-disabled')
|
|
96
|
-
], TngTextarea.prototype, "dataDisabledAttr", null);
|
|
97
|
-
__decorate([
|
|
98
|
-
HostBinding('attr.data-invalid')
|
|
99
|
-
], TngTextarea.prototype, "dataInvalidAttr", null);
|
|
100
|
-
__decorate([
|
|
101
|
-
HostBinding('attr.disabled')
|
|
102
|
-
], TngTextarea.prototype, "disabledAttr", null);
|
|
103
|
-
__decorate([
|
|
104
|
-
HostBinding('attr.readonly')
|
|
105
|
-
], TngTextarea.prototype, "readonlyAttr", null);
|
|
106
|
-
__decorate([
|
|
107
|
-
HostBinding('attr.required')
|
|
108
|
-
], TngTextarea.prototype, "requiredAttr", null);
|
|
45
|
+
HostBinding('attr.data-resize')
|
|
46
|
+
], TngTextarea.prototype, "dataResizeAttr", null);
|
|
109
47
|
__decorate([
|
|
110
48
|
HostBinding('attr.rows')
|
|
111
49
|
], TngTextarea.prototype, "rowsAttr", null);
|
|
50
|
+
__decorate([
|
|
51
|
+
HostBinding('style.resize')
|
|
52
|
+
], TngTextarea.prototype, "resizeStyle", null);
|
|
112
53
|
TngTextarea = __decorate([
|
|
113
54
|
Directive({
|
|
114
55
|
selector: 'textarea[tngTextarea]',
|
|
115
56
|
exportAs: 'tngTextarea',
|
|
57
|
+
standalone: true,
|
|
58
|
+
hostDirectives: [
|
|
59
|
+
{
|
|
60
|
+
directive: TngInput,
|
|
61
|
+
inputs: [
|
|
62
|
+
'ariaDescribedBy',
|
|
63
|
+
'ariaInvalid',
|
|
64
|
+
'ariaLabel',
|
|
65
|
+
'ariaLabelledby',
|
|
66
|
+
'ariaRequired',
|
|
67
|
+
'disabled',
|
|
68
|
+
'readonly',
|
|
69
|
+
'required',
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
],
|
|
116
73
|
})
|
|
117
74
|
], TngTextarea);
|
|
118
75
|
export { TngTextarea };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-textarea.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/textarea/tng-textarea.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"tng-textarea.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/textarea/tng-textarea.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAK7E,wEAAwE;AACxE,MAAM,UAAU,gCAAgC,CAAC,KAA2B;IAC1E,OAAO,6BAA6B,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IACE,UAAU,KAAK,MAAM;QACrB,UAAU,KAAK,UAAU;QACzB,UAAU,KAAK,YAAY;QAC3B,UAAU,KAAK,MAAM,EACrB,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAsBM,IAAM,WAAW,GAAjB,MAAM,WAAW;IACN,MAAM,GAAG,KAAK,CAAgD,UAAU,EAAE;QACxF,SAAS,EAAE,0BAA0B;KACtC,CAAC,CAAC;IACa,IAAI,GAAG,KAAK,CAA0B,CAAC,EAAE;QACvD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAAC,wBAAwB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;KAChG,CAAC,CAAC;IAGH,IAAc,cAAc;QAC1B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAGD,IAAc,QAAQ;QACpB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAGD,IAAc,WAAW;QACvB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AAbC;IADC,WAAW,CAAC,kBAAkB,CAAC;iDAG/B;AAGD;IADC,WAAW,CAAC,WAAW,CAAC;2CAGxB;AAGD;IADC,WAAW,CAAC,cAAc,CAAC;8CAG3B;AArBU,WAAW;IApBvB,SAAS,CAAC;QACT,QAAQ,EAAE,uBAAuB;QACjC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE;YACd;gBACE,SAAS,EAAE,QAAQ;gBACnB,MAAM,EAAE;oBACN,iBAAiB;oBACjB,aAAa;oBACb,WAAW;oBACX,gBAAgB;oBAChB,cAAc;oBACd,UAAU;oBACV,UAAU;oBACV,UAAU;iBACX;aACF;SACF;KACF,CAAC;GACW,WAAW,CAsBvB","sourcesContent":["import { Directive, HostBinding, input, numberAttribute } from '@angular/core';\nimport { coerceTngInputNullableBoolean, TngInput } from '../input/tng-input';\n\ntype NullableBooleanInput = boolean | null | string | undefined;\nexport type TngTextareaResize = 'both' | 'horizontal' | 'none' | 'vertical';\n\n/** @deprecated Use `coerceTngInputNullableBoolean` from `tng-input`. */\nexport function coerceTngTextareaNullableBoolean(value: NullableBooleanInput): boolean | null {\n return coerceTngInputNullableBoolean(value);\n}\n\nexport function normalizeTngTextareaRows(value: number): number {\n if (!Number.isFinite(value)) {\n return 3;\n }\n\n return Math.max(1, Math.trunc(value));\n}\n\nexport function normalizeTngTextareaResize(value: unknown): TngTextareaResize {\n if (typeof value !== 'string') {\n return 'vertical';\n }\n\n const normalized = value.trim().toLowerCase();\n if (\n normalized === 'none' ||\n normalized === 'vertical' ||\n normalized === 'horizontal' ||\n normalized === 'both'\n ) {\n return normalized;\n }\n\n return 'vertical';\n}\n\n@Directive({\n selector: 'textarea[tngTextarea]',\n exportAs: 'tngTextarea',\n standalone: true,\n hostDirectives: [\n {\n directive: TngInput,\n inputs: [\n 'ariaDescribedBy',\n 'ariaInvalid',\n 'ariaLabel',\n 'ariaLabelledby',\n 'ariaRequired',\n 'disabled',\n 'readonly',\n 'required',\n ],\n },\n ],\n})\nexport class TngTextarea {\n public readonly resize = input<TngTextareaResize, TngTextareaResize | string>('vertical', {\n transform: normalizeTngTextareaResize,\n });\n public readonly rows = input<number, number | string>(3, {\n transform: (value: number | string): number => normalizeTngTextareaRows(numberAttribute(value)),\n });\n\n @HostBinding('attr.data-resize')\n protected get dataResizeAttr(): TngTextareaResize {\n return this.resize();\n }\n\n @HostBinding('attr.rows')\n protected get rowsAttr(): number {\n return this.rows();\n }\n\n @HostBinding('style.resize')\n protected get resizeStyle(): TngTextareaResize {\n return this.resize();\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-toggle.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/toggle/tng-toggle.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,MAAM,EAOP,MAAM,eAAe,CAAC;AAGvB,KAAK,oBAAoB,GAAG,EAAE,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAW/E,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,GAAG,IAAI,CAc1F;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAE9E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI,CAExE;AAED,
|
|
1
|
+
{"version":3,"file":"tng-toggle.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/toggle/tng-toggle.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,MAAM,EAOP,MAAM,eAAe,CAAC;AAGvB,KAAK,oBAAoB,GAAG,EAAE,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAW/E,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,GAAG,IAAI,CAc1F;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAE9E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI,CAExE;AAED,qBAKa,SAAU,YAAW,MAAM;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqD;IAChF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8C;IACpE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,6BAA6B,CAAS;IAC9C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;IAE7B,SAAgB,SAAS,qDAA8B;IACvD,SAAgB,cAAc,qDAA8B;IAC5D,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,KAAK,qDAA2D;IAEhF,SAAgB,OAAO,yFAEpB;IACH,SAAgB,cAAc,8EAE3B;IACH,SAAgB,QAAQ,8EAErB;IAEH,SAAgB,aAAa,oDAAqB;IAElD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAE9B;IAEH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAY7B;IAEI,QAAQ,IAAI,IAAI;IAKvB,SAAS,KAAK,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEjD;IAGD,SAAS,KAAK,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,aAAa,IAAI,MAAM,GAAG,IAAI,CAE3C;IAGD,SAAS,KAAK,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAEhD;IAGD,SAAS,KAAK,eAAe,IAAI,OAAO,GAAG,MAAM,CAEhD;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,oBAAoB,IAAI,EAAE,GAAG,IAAI,CAE9C;IAGD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAU;IAGhD,SAAS,KAAK,aAAa,IAAI,KAAK,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAU;IAGzC,MAAM,IAAI,IAAI;IAMd,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAiBhC,OAAO,IAAI,IAAI;IAMf,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAc5C,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,qBAAqB;CAe9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-toggle.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/toggle/tng-toggle.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,YAAY,EAEZ,gBAAgB,EAChB,QAAQ,EACR,MAAM,EACN,KAAK,EACL,MAAM,EACN,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAIlE,SAAS,oBAAoB,CAAC,KAAgC;IAC5D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAA2B;IACxE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAC1D,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AAChC,CAAC;AAMM,IAAM,SAAS,GAAf,MAAM,SAAS;IACH,UAAU,GAAG,MAAM,CAAgC,UAAU,CAAC,CAAC;IAC/D,KAAK,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,6BAA6B,GAAG,KAAK,CAAC;IACtC,OAAO,GAAG,KAAK,CAAC;IAChB,YAAY,GAAG,KAAK,CAAC;IAEb,SAAS,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IACvC,cAAc,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAC5C,eAAe,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAC7C,KAAK,GAAG,KAAK,CAAgB,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAEhE,OAAO,GAAG,KAAK,CAAuC,IAAI,EAAE;QAC1E,SAAS,EAAE,8BAA8B;KAC1C,CAAC,CAAC;IACa,cAAc,GAAG,KAAK,CAA4B,KAAK,EAAE;QACvE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IAEa,aAAa,GAAG,MAAM,EAAW,CAAC;IAEjC,gBAAgB,GAAG,QAAQ,CAAC,GAAG,EAAE;QAChD,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IACnE,CAAC,CAAC,CAAC;IAEc,eAAe,GAAG,QAAQ,CAAC,GAAG,EAAE;QAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7C,IAAI,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACzC,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;YAC/B,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEI,QAAQ;QACb,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IAClD,CAAC;IAGD,IAAc,mBAAmB;QAC/B,OAAO,oBAAoB,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IACtD,CAAC;IAGD,IAAc,gBAAgB;QAC5B,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IAGD,IAAc,aAAa;QACzB,OAAO,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAChD,CAAC;IAGD,IAAc,kBAAkB;QAC9B,OAAO,oBAAoB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IACrD,CAAC;IAGD,IAAc,eAAe;QAC3B,OAAO,2BAA2B,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IAC7D,CAAC;IAGD,IAAc,gBAAgB;QAC5B,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC;IAGD,IAAc,eAAe;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAClC,CAAC;IAGD,IAAc,oBAAoB;QAChC,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IAGkB,QAAQ,GAAG,QAAiB,CAAC;IAGhD,IAAc,aAAa;QACzB,OAAO,yBAAyB,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IAC3D,CAAC;IAGD,IAAc,YAAY;QACxB,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC;IAGkB,QAAQ,GAAG,QAAiB,CAAC;IAGzC,MAAM;QACX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAGM,OAAO,CAAC,KAAiB;QAC9B,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,6BAA6B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,6BAA6B,GAAG,KAAK,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,6BAA6B,GAAG,KAAK,CAAC;QAC3C,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAGM,OAAO;QACZ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9E,CAAC;IAGM,SAAS,CAAC,KAAoB;QACnC,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;QAC1C,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAEO,cAAc;QACpB,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IAEO,qBAAqB;QAC3B,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7C,IAAI,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACnD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YACxD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;CACF,CAAA;AAtHC;IADC,WAAW,CAAC,uBAAuB,CAAC;oDAGpC;AAGD;IADC,WAAW,CAAC,oBAAoB,CAAC;iDAGjC;AAGD;IADC,WAAW,CAAC,iBAAiB,CAAC;8CAG9B;AAGD;IADC,WAAW,CAAC,sBAAsB,CAAC;mDAGnC;AAGD;IADC,WAAW,CAAC,mBAAmB,CAAC;gDAGhC;AAGD;IADC,WAAW,CAAC,oBAAoB,CAAC;iDAGjC;AAGD;IADC,WAAW,CAAC,mBAAmB,CAAC;gDAGhC;AAGD;IADC,WAAW,CAAC,yBAAyB,CAAC;qDAGtC;AAGkB;IADlB,WAAW,CAAC,gBAAgB,CAAC;2CACkB;AAGhD;IADC,WAAW,CAAC,iBAAiB,CAAC;8CAG9B;AAGD;IADC,WAAW,CAAC,eAAe,CAAC;6CAG5B;AAGkB;IADlB,WAAW,CAAC,WAAW,CAAC;2CACuB;AAGzC;IADN,YAAY,CAAC,MAAM,CAAC;uCAIpB;AAGM;IADN,YAAY,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;wCAejC;AAGM;IADN,YAAY,CAAC,OAAO,CAAC;wCAIrB;AAGM;IADN,YAAY,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC;0CAanC;AAjJU,SAAS;IAJrB,SAAS,CAAC;QACT,QAAQ,EAAE,mBAAmB;QAC7B,QAAQ,EAAE,WAAW;KACtB,CAAC;GACW,SAAS,CAsKrB","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n OnInit,\n booleanAttribute,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { TngToggleGroup } from '../toggle-group/tng-toggle-group';\n\ntype NullableBooleanInput = '' | 'false' | 'true' | boolean | null | undefined;\n\nfunction normalizeStringValue(value: string | null | undefined): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nexport function coerceTngToggleNullableBoolean(value: NullableBooleanInput): boolean | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n if (value === '' || value === true || value === 'true') {\n return true;\n }\n\n if (value === false || value === 'false') {\n return false;\n }\n\n return null;\n}\n\nexport function resolveTngToggleAriaPressed(pressed: boolean): 'false' | 'true' {\n return pressed ? 'true' : 'false';\n}\n\nexport function resolveTngToggleDataState(pressed: boolean): 'off' | 'on' {\n return pressed ? 'on' : 'off';\n}\n\n@Directive({\n selector: 'button[tngToggle]',\n exportAs: 'tngToggle',\n})\nexport class TngToggle implements OnInit {\n private readonly elementRef = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n private readonly group = inject(TngToggleGroup, { optional: true });\n private readonly internalPressed = signal(false);\n private suppressNextClickFromKeyboard = false;\n private focused = false;\n private focusVisible = false;\n\n public readonly ariaLabel = input<string | null>(null);\n public readonly ariaLabelledby = input<string | null>(null);\n public readonly ariaDescribedBy = input<string | null>(null);\n public readonly value = input<string | null>(null, { alias: 'tngToggleValue' });\n\n public readonly pressed = input<boolean | null, NullableBooleanInput>(null, {\n transform: coerceTngToggleNullableBoolean,\n });\n public readonly defaultPressed = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n\n public readonly pressedChange = output<boolean>();\n\n private readonly resolvedDisabled = computed(() => {\n return this.disabled() || this.group?.isGroupDisabled() === true;\n });\n\n private readonly resolvedPressed = computed(() => {\n const groupItemValue = this.groupItemValue();\n if (groupItemValue !== null && this.group !== null) {\n return this.group.isItemSelected(groupItemValue);\n }\n\n const controlledPressed = this.pressed();\n if (controlledPressed !== null) {\n return controlledPressed;\n }\n\n return this.internalPressed();\n });\n\n public ngOnInit(): void {\n this.internalPressed.set(this.defaultPressed());\n }\n\n @HostBinding('attr.aria-describedby')\n protected get ariaDescribedByAttr(): string | null {\n return normalizeStringValue(this.ariaDescribedBy());\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabledAttr(): 'true' | null {\n return this.resolvedDisabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-label')\n protected get ariaLabelAttr(): string | null {\n return normalizeStringValue(this.ariaLabel());\n }\n\n @HostBinding('attr.aria-labelledby')\n protected get ariaLabelledbyAttr(): string | null {\n return normalizeStringValue(this.ariaLabelledby());\n }\n\n @HostBinding('attr.aria-pressed')\n protected get ariaPressedAttr(): 'false' | 'true' {\n return resolveTngToggleAriaPressed(this.resolvedPressed());\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.resolvedDisabled() ? '' : null;\n }\n\n @HostBinding('attr.data-focused')\n protected get dataFocusedAttr(): '' | null {\n return this.focused ? '' : null;\n }\n\n @HostBinding('attr.data-focus-visible')\n protected get dataFocusVisibleAttr(): '' | null {\n return this.focusVisible ? '' : null;\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'toggle' as const;\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'off' | 'on' {\n return resolveTngToggleDataState(this.resolvedPressed());\n }\n\n @HostBinding('attr.disabled')\n protected get disabledAttr(): '' | null {\n return this.resolvedDisabled() ? '' : null;\n }\n\n @HostBinding('attr.type')\n protected readonly typeAttr = 'button' as const;\n\n @HostListener('blur')\n public onBlur(): void {\n this.focused = false;\n this.focusVisible = false;\n }\n\n @HostListener('click', ['$event'])\n public onClick(event: MouseEvent): void {\n if (this.resolvedDisabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n if (this.suppressNextClickFromKeyboard && event.detail === 0) {\n this.suppressNextClickFromKeyboard = false;\n return;\n }\n\n this.suppressNextClickFromKeyboard = false;\n this.toggleFromInteraction();\n }\n\n @HostListener('focus')\n public onFocus(): void {\n this.focused = true;\n this.focusVisible = this.elementRef.nativeElement.matches(':focus-visible');\n }\n\n @HostListener('keydown', ['$event'])\n public onKeydown(event: KeyboardEvent): void {\n if (this.resolvedDisabled()) {\n return;\n }\n\n if (event.key !== ' ' && event.key !== 'Enter') {\n return;\n }\n\n event.preventDefault();\n this.suppressNextClickFromKeyboard = true;\n this.toggleFromInteraction();\n }\n\n private groupItemValue(): string | null {\n return normalizeStringValue(this.value());\n }\n\n private toggleFromInteraction(): void {\n const groupItemValue = this.groupItemValue();\n if (groupItemValue !== null && this.group !== null) {\n const nextValue = this.group.toggleItem(groupItemValue);\n this.pressedChange.emit(nextValue);\n return;\n }\n\n const nextValue = !this.resolvedPressed();\n if (this.pressed() === null) {\n this.internalPressed.set(nextValue);\n }\n\n this.pressedChange.emit(nextValue);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tng-toggle.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/toggle/tng-toggle.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n OnInit,\n booleanAttribute,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { TngToggleGroup } from '../toggle-group/tng-toggle-group';\n\ntype NullableBooleanInput = '' | 'false' | 'true' | boolean | null | undefined;\n\nfunction normalizeStringValue(value: string | null | undefined): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nexport function coerceTngToggleNullableBoolean(value: NullableBooleanInput): boolean | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n if (value === '' || value === true || value === 'true') {\n return true;\n }\n\n if (value === false || value === 'false') {\n return false;\n }\n\n return null;\n}\n\nexport function resolveTngToggleAriaPressed(pressed: boolean): 'false' | 'true' {\n return pressed ? 'true' : 'false';\n}\n\nexport function resolveTngToggleDataState(pressed: boolean): 'off' | 'on' {\n return pressed ? 'on' : 'off';\n}\n\n@Directive({\n selector: 'button[tngToggle]',\n exportAs: 'tngToggle',\n standalone: true,\n})\nexport class TngToggle implements OnInit {\n private readonly elementRef = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n private readonly group = inject(TngToggleGroup, { optional: true });\n private readonly internalPressed = signal(false);\n private suppressNextClickFromKeyboard = false;\n private focused = false;\n private focusVisible = false;\n\n public readonly ariaLabel = input<string | null>(null);\n public readonly ariaLabelledby = input<string | null>(null);\n public readonly ariaDescribedBy = input<string | null>(null);\n public readonly value = input<string | null>(null, { alias: 'tngToggleValue' });\n\n public readonly pressed = input<boolean | null, NullableBooleanInput>(null, {\n transform: coerceTngToggleNullableBoolean,\n });\n public readonly defaultPressed = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n\n public readonly pressedChange = output<boolean>();\n\n private readonly resolvedDisabled = computed(() => {\n return this.disabled() || this.group?.isGroupDisabled() === true;\n });\n\n private readonly resolvedPressed = computed(() => {\n const groupItemValue = this.groupItemValue();\n if (groupItemValue !== null && this.group !== null) {\n return this.group.isItemSelected(groupItemValue);\n }\n\n const controlledPressed = this.pressed();\n if (controlledPressed !== null) {\n return controlledPressed;\n }\n\n return this.internalPressed();\n });\n\n public ngOnInit(): void {\n this.internalPressed.set(this.defaultPressed());\n }\n\n @HostBinding('attr.aria-describedby')\n protected get ariaDescribedByAttr(): string | null {\n return normalizeStringValue(this.ariaDescribedBy());\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabledAttr(): 'true' | null {\n return this.resolvedDisabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-label')\n protected get ariaLabelAttr(): string | null {\n return normalizeStringValue(this.ariaLabel());\n }\n\n @HostBinding('attr.aria-labelledby')\n protected get ariaLabelledbyAttr(): string | null {\n return normalizeStringValue(this.ariaLabelledby());\n }\n\n @HostBinding('attr.aria-pressed')\n protected get ariaPressedAttr(): 'false' | 'true' {\n return resolveTngToggleAriaPressed(this.resolvedPressed());\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.resolvedDisabled() ? '' : null;\n }\n\n @HostBinding('attr.data-focused')\n protected get dataFocusedAttr(): '' | null {\n return this.focused ? '' : null;\n }\n\n @HostBinding('attr.data-focus-visible')\n protected get dataFocusVisibleAttr(): '' | null {\n return this.focusVisible ? '' : null;\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'toggle' as const;\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'off' | 'on' {\n return resolveTngToggleDataState(this.resolvedPressed());\n }\n\n @HostBinding('attr.disabled')\n protected get disabledAttr(): '' | null {\n return this.resolvedDisabled() ? '' : null;\n }\n\n @HostBinding('attr.type')\n protected readonly typeAttr = 'button' as const;\n\n @HostListener('blur')\n public onBlur(): void {\n this.focused = false;\n this.focusVisible = false;\n }\n\n @HostListener('click', ['$event'])\n public onClick(event: MouseEvent): void {\n if (this.resolvedDisabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n if (this.suppressNextClickFromKeyboard && event.detail === 0) {\n this.suppressNextClickFromKeyboard = false;\n return;\n }\n\n this.suppressNextClickFromKeyboard = false;\n this.toggleFromInteraction();\n }\n\n @HostListener('focus')\n public onFocus(): void {\n this.focused = true;\n this.focusVisible = this.elementRef.nativeElement.matches(':focus-visible');\n }\n\n @HostListener('keydown', ['$event'])\n public onKeydown(event: KeyboardEvent): void {\n if (this.resolvedDisabled()) {\n return;\n }\n\n if (event.key !== ' ' && event.key !== 'Enter') {\n return;\n }\n\n event.preventDefault();\n this.suppressNextClickFromKeyboard = true;\n this.toggleFromInteraction();\n }\n\n private groupItemValue(): string | null {\n return normalizeStringValue(this.value());\n }\n\n private toggleFromInteraction(): void {\n const groupItemValue = this.groupItemValue();\n if (groupItemValue !== null && this.group !== null) {\n const nextValue = this.group.toggleItem(groupItemValue);\n this.pressedChange.emit(nextValue);\n return;\n }\n\n const nextValue = !this.resolvedPressed();\n if (this.pressed() === null) {\n this.internalPressed.set(nextValue);\n }\n\n this.pressedChange.emit(nextValue);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-toggle-group.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/toggle-group/tng-toggle-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,MAAM,EAKP,MAAM,eAAe,CAAC;AAEvB,KAAK,2BAA2B,GAAG,UAAU,GAAG,QAAQ,CAAC;AAiCzD,
|
|
1
|
+
{"version":3,"file":"tng-toggle-group.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/toggle-group/tng-toggle-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,MAAM,EAKP,MAAM,eAAe,CAAC;AAEvB,KAAK,2BAA2B,GAAG,UAAU,GAAG,QAAQ,CAAC;AAiCzD,qBAKa,cAAe,YAAW,MAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA+B;IACnE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAiC;IAExE,SAAgB,SAAS,qDAA8B;IACvD,SAAgB,cAAc,qDAA8B;IAC5D,SAAgB,WAAW,iEAAkD;IAC7E,SAAgB,aAAa,yFAE1B;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,iEAA+C;IACpE,SAAgB,MAAM,qEAAmD;IACzE,SAAgB,YAAY,qDAA8B;IAC1D,SAAgB,aAAa,yDAAgC;IAE7D,SAAgB,WAAW,0DAA2B;IACtD,SAAgB,YAAY,8DAA+B;IAEpD,QAAQ,IAAI,IAAI;IAKhB,eAAe,IAAI,OAAO;IAI1B,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAQ1C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAqC7C,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,qBAAqB;IAS7B,SAAS,KAAK,aAAa,IAAI,MAAM,GAAG,IAAI,CAE3C;IAGD,SAAS,KAAK,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAEhD;IAGD,SAAS,KAAK,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,mBAAmB,IAAI,YAAY,GAAG,UAAU,CAE7D;IAGD,SAAS,KAAK,qBAAqB,IAAI,2BAA2B,CAEjE;IAGD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,cAAc,CAAU;IAGtD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,OAAO,CAAU;CAChD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-toggle-group.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/toggle-group/tng-toggle-group.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n HostBinding,\n OnInit,\n booleanAttribute,\n input,\n output,\n signal,\n} from '@angular/core';\n\ntype TngToggleGroupSelectionMode = 'multiple' | 'single';\n\nfunction coerceSelectionMode(value: unknown): TngToggleGroupSelectionMode {\n return value === 'single' ? 'single' : 'multiple';\n}\n\nfunction normalizeStringValue(value: string | null | undefined): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nfunction normalizeStringArray(value: readonly string[] | null | undefined): readonly string[] {\n if (!Array.isArray(value) || value.length === 0) {\n return [];\n }\n\n const normalized: string[] = [];\n for (const item of value) {\n const normalizedItem = normalizeStringValue(item);\n if (normalizedItem === null || normalized.includes(normalizedItem)) {\n continue;\n }\n\n normalized.push(normalizedItem);\n }\n\n return normalized;\n}\n\n@Directive({\n selector: '[tngToggleGroup]',\n exportAs: 'tngToggleGroup',\n})\nexport class TngToggleGroup implements OnInit {\n private readonly internalSingleValue = signal<string | null>(null);\n private readonly internalMultipleValues = signal<readonly string[]>([]);\n\n public readonly ariaLabel = input<string | null>(null);\n public readonly ariaLabelledby = input<string | null>(null);\n public readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n public readonly selectionMode = input<TngToggleGroupSelectionMode, unknown>('multiple', {\n transform: coerceSelectionMode,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly value = input<string | null | undefined>(undefined);\n public readonly values = input<readonly string[] | undefined>(undefined);\n public readonly defaultValue = input<string | null>(null);\n public readonly defaultValues = input<readonly string[]>([]);\n\n public readonly valueChange = output<string | null>();\n public readonly valuesChange = output<readonly string[]>();\n\n public ngOnInit(): void {\n this.internalSingleValue.set(normalizeStringValue(this.defaultValue()));\n this.internalMultipleValues.set(normalizeStringArray(this.defaultValues()));\n }\n\n public isGroupDisabled(): boolean {\n return this.disabled();\n }\n\n public isItemSelected(itemValue: string): boolean {\n if (this.selectionMode() === 'single') {\n return this.resolveSingleValue() === itemValue;\n }\n\n return this.resolveMultipleValues().includes(itemValue);\n }\n\n public toggleItem(itemValue: string): boolean {\n if (this.disabled()) {\n return this.isItemSelected(itemValue);\n }\n\n if (this.selectionMode() === 'single') {\n const currentValue = this.resolveSingleValue();\n const nextValue = currentValue === itemValue ? null : itemValue;\n\n if (!this.isSingleControlled()) {\n this.internalSingleValue.set(nextValue);\n }\n\n if (nextValue !== currentValue) {\n this.valueChange.emit(nextValue);\n }\n\n return nextValue === itemValue;\n }\n\n const currentValues = this.resolveMultipleValues();\n const isSelected = currentValues.includes(itemValue);\n const nextValues = isSelected\n ? currentValues.filter((value) => value !== itemValue)\n : [...currentValues, itemValue];\n\n if (!this.isMultipleControlled()) {\n this.internalMultipleValues.set(nextValues);\n }\n\n if (nextValues.length !== currentValues.length || !isSelected) {\n this.valuesChange.emit(nextValues);\n }\n\n return !isSelected;\n }\n\n private isSingleControlled(): boolean {\n return this.value() !== undefined;\n }\n\n private isMultipleControlled(): boolean {\n return this.values() !== undefined;\n }\n\n private resolveSingleValue(): string | null {\n if (this.isSingleControlled()) {\n return normalizeStringValue(this.value() ?? null);\n }\n\n return this.internalSingleValue();\n }\n\n private resolveMultipleValues(): readonly string[] {\n if (this.isMultipleControlled()) {\n return normalizeStringArray(this.values());\n }\n\n return this.internalMultipleValues();\n }\n\n @HostBinding('attr.aria-label')\n protected get ariaLabelAttr(): string | null {\n return normalizeStringValue(this.ariaLabel());\n }\n\n @HostBinding('attr.aria-labelledby')\n protected get ariaLabelledbyAttr(): string | null {\n return normalizeStringValue(this.ariaLabelledby());\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabledAttr(): 'true' | null {\n return this.disabled() ? 'true' : null;\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-orientation')\n protected get dataOrientationAttr(): 'horizontal' | 'vertical' {\n return this.orientation();\n }\n\n @HostBinding('attr.data-selection-mode')\n protected get dataSelectionModeAttr(): TngToggleGroupSelectionMode {\n return this.selectionMode();\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'toggle-group' as const;\n\n @HostBinding('attr.role')\n protected readonly roleAttr = 'group' as const;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tng-toggle-group.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/toggle-group/tng-toggle-group.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n HostBinding,\n OnInit,\n booleanAttribute,\n input,\n output,\n signal,\n} from '@angular/core';\n\ntype TngToggleGroupSelectionMode = 'multiple' | 'single';\n\nfunction coerceSelectionMode(value: unknown): TngToggleGroupSelectionMode {\n return value === 'single' ? 'single' : 'multiple';\n}\n\nfunction normalizeStringValue(value: string | null | undefined): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nfunction normalizeStringArray(value: readonly string[] | null | undefined): readonly string[] {\n if (!Array.isArray(value) || value.length === 0) {\n return [];\n }\n\n const normalized: string[] = [];\n for (const item of value) {\n const normalizedItem = normalizeStringValue(item);\n if (normalizedItem === null || normalized.includes(normalizedItem)) {\n continue;\n }\n\n normalized.push(normalizedItem);\n }\n\n return normalized;\n}\n\n@Directive({\n selector: '[tngToggleGroup]',\n exportAs: 'tngToggleGroup',\n standalone: true,\n})\nexport class TngToggleGroup implements OnInit {\n private readonly internalSingleValue = signal<string | null>(null);\n private readonly internalMultipleValues = signal<readonly string[]>([]);\n\n public readonly ariaLabel = input<string | null>(null);\n public readonly ariaLabelledby = input<string | null>(null);\n public readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n public readonly selectionMode = input<TngToggleGroupSelectionMode, unknown>('multiple', {\n transform: coerceSelectionMode,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly value = input<string | null | undefined>(undefined);\n public readonly values = input<readonly string[] | undefined>(undefined);\n public readonly defaultValue = input<string | null>(null);\n public readonly defaultValues = input<readonly string[]>([]);\n\n public readonly valueChange = output<string | null>();\n public readonly valuesChange = output<readonly string[]>();\n\n public ngOnInit(): void {\n this.internalSingleValue.set(normalizeStringValue(this.defaultValue()));\n this.internalMultipleValues.set(normalizeStringArray(this.defaultValues()));\n }\n\n public isGroupDisabled(): boolean {\n return this.disabled();\n }\n\n public isItemSelected(itemValue: string): boolean {\n if (this.selectionMode() === 'single') {\n return this.resolveSingleValue() === itemValue;\n }\n\n return this.resolveMultipleValues().includes(itemValue);\n }\n\n public toggleItem(itemValue: string): boolean {\n if (this.disabled()) {\n return this.isItemSelected(itemValue);\n }\n\n if (this.selectionMode() === 'single') {\n const currentValue = this.resolveSingleValue();\n const nextValue = currentValue === itemValue ? null : itemValue;\n\n if (!this.isSingleControlled()) {\n this.internalSingleValue.set(nextValue);\n }\n\n if (nextValue !== currentValue) {\n this.valueChange.emit(nextValue);\n }\n\n return nextValue === itemValue;\n }\n\n const currentValues = this.resolveMultipleValues();\n const isSelected = currentValues.includes(itemValue);\n const nextValues = isSelected\n ? currentValues.filter((value) => value !== itemValue)\n : [...currentValues, itemValue];\n\n if (!this.isMultipleControlled()) {\n this.internalMultipleValues.set(nextValues);\n }\n\n if (nextValues.length !== currentValues.length || !isSelected) {\n this.valuesChange.emit(nextValues);\n }\n\n return !isSelected;\n }\n\n private isSingleControlled(): boolean {\n return this.value() !== undefined;\n }\n\n private isMultipleControlled(): boolean {\n return this.values() !== undefined;\n }\n\n private resolveSingleValue(): string | null {\n if (this.isSingleControlled()) {\n return normalizeStringValue(this.value() ?? null);\n }\n\n return this.internalSingleValue();\n }\n\n private resolveMultipleValues(): readonly string[] {\n if (this.isMultipleControlled()) {\n return normalizeStringArray(this.values());\n }\n\n return this.internalMultipleValues();\n }\n\n @HostBinding('attr.aria-label')\n protected get ariaLabelAttr(): string | null {\n return normalizeStringValue(this.ariaLabel());\n }\n\n @HostBinding('attr.aria-labelledby')\n protected get ariaLabelledbyAttr(): string | null {\n return normalizeStringValue(this.ariaLabelledby());\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabledAttr(): 'true' | null {\n return this.disabled() ? 'true' : null;\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-orientation')\n protected get dataOrientationAttr(): 'horizontal' | 'vertical' {\n return this.orientation();\n }\n\n @HostBinding('attr.data-selection-mode')\n protected get dataSelectionModeAttr(): TngToggleGroupSelectionMode {\n return this.selectionMode();\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'toggle-group' as const;\n\n @HostBinding('attr.role')\n protected readonly roleAttr = 'group' as const;\n}\n"]}
|
|
@@ -42,6 +42,7 @@ export declare class TngAccordion {
|
|
|
42
42
|
protected get dataType(): TngAccordionType;
|
|
43
43
|
protected get dataDisabled(): 'true' | 'false';
|
|
44
44
|
ngDoCheck(): void;
|
|
45
|
+
protected onHostKeydown(event: KeyboardEvent): void;
|
|
45
46
|
ngOnDestroy(): void;
|
|
46
47
|
registerItem(item: TngAccordionItem): void;
|
|
47
48
|
unregisterItem(item: TngAccordionItem): void;
|
|
@@ -52,6 +53,7 @@ export declare class TngAccordion {
|
|
|
52
53
|
onTriggerFocused(item: TngAccordionItem): void;
|
|
53
54
|
onTriggerClicked(item: TngAccordionItem): void;
|
|
54
55
|
onTriggerKeydown(item: TngAccordionItem, event: KeyboardEvent): void;
|
|
56
|
+
onTabWithinAccordion(source: HTMLElement, shiftKey: boolean): boolean;
|
|
55
57
|
isPanelMounted(item: TngAccordionItem): boolean;
|
|
56
58
|
open(value: TngAccordionValue): void;
|
|
57
59
|
close(value: TngAccordionValue): void;
|
|
@@ -73,6 +75,11 @@ export declare class TngAccordion {
|
|
|
73
75
|
private mapSetToOrderedValues;
|
|
74
76
|
private getOrderedItems;
|
|
75
77
|
private getEnabledItems;
|
|
78
|
+
private shouldHandleCustomTabNavigation;
|
|
79
|
+
private getCustomTabSequence;
|
|
80
|
+
private findSequenceIndex;
|
|
81
|
+
private isInHiddenSubtree;
|
|
82
|
+
private isNaturallyTabbable;
|
|
76
83
|
private resolveCurrentFocusableItem;
|
|
77
84
|
getHostElement(): HTMLElement;
|
|
78
85
|
}
|
|
@@ -102,6 +109,7 @@ export declare class TngAccordionItem {
|
|
|
102
109
|
unregisterPanel(panel: TngAccordionPanel): void;
|
|
103
110
|
focusTrigger(): void;
|
|
104
111
|
getTriggerId(): string | null;
|
|
112
|
+
getTriggerElement(): HTMLElement | null;
|
|
105
113
|
getPanelId(): string | null;
|
|
106
114
|
markExpandedOnce(): void;
|
|
107
115
|
hasExpandedOnce(): boolean;
|
|
@@ -125,6 +133,7 @@ export declare class TngAccordionTrigger {
|
|
|
125
133
|
ngOnDestroy(): void;
|
|
126
134
|
getTriggerId(): string;
|
|
127
135
|
focusSelf(): void;
|
|
136
|
+
getHostElement(): HTMLElement;
|
|
128
137
|
private resolveTriggerId;
|
|
129
138
|
protected onFocus(): void;
|
|
130
139
|
protected onClick(event: MouseEvent): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-accordion.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/accordion/tng-accordion.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,CAAC;AACrD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;AAChD,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,CAAC;AAEhF,MAAM,MAAM,+BAA+B,GAAG,QAAQ,CAAC;IACrD,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC7C,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACrC,OAAO,EAAE,yBAAyB,CAAC;CACpC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"tng-accordion.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/accordion/tng-accordion.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,6 +79,19 @@ function setsEqual(a, b) {
|
|
|
79
79
|
}
|
|
80
80
|
return true;
|
|
81
81
|
}
|
|
82
|
+
function compareElementsByDomPosition(a, b) {
|
|
83
|
+
if (a === b) {
|
|
84
|
+
return 0;
|
|
85
|
+
}
|
|
86
|
+
const relativePosition = a.compareDocumentPosition(b);
|
|
87
|
+
if (relativePosition & Node.DOCUMENT_POSITION_FOLLOWING) {
|
|
88
|
+
return -1;
|
|
89
|
+
}
|
|
90
|
+
if (relativePosition & Node.DOCUMENT_POSITION_PRECEDING) {
|
|
91
|
+
return 1;
|
|
92
|
+
}
|
|
93
|
+
return 0;
|
|
94
|
+
}
|
|
82
95
|
let TngAccordion = class TngAccordion {
|
|
83
96
|
hostRef = inject(ElementRef);
|
|
84
97
|
items = new Set();
|
|
@@ -129,6 +142,21 @@ let TngAccordion = class TngAccordion {
|
|
|
129
142
|
ngDoCheck() {
|
|
130
143
|
this.syncStateFromInputs('check');
|
|
131
144
|
}
|
|
145
|
+
onHostKeydown(event) {
|
|
146
|
+
if (event.key !== 'Tab' || event.altKey || event.ctrlKey || event.metaKey) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const eventTarget = event.target;
|
|
150
|
+
if (!(eventTarget instanceof HTMLElement)) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (!this.getHostElement().contains(eventTarget)) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (this.onTabWithinAccordion(eventTarget, event.shiftKey)) {
|
|
157
|
+
event.preventDefault();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
132
160
|
ngOnDestroy() {
|
|
133
161
|
this.items.clear();
|
|
134
162
|
}
|
|
@@ -195,6 +223,26 @@ let TngAccordion = class TngAccordion {
|
|
|
195
223
|
event.preventDefault();
|
|
196
224
|
}
|
|
197
225
|
}
|
|
226
|
+
onTabWithinAccordion(source, shiftKey) {
|
|
227
|
+
if (!this.shouldHandleCustomTabNavigation()) {
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
const sequence = this.getCustomTabSequence();
|
|
231
|
+
if (sequence.length === 0) {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
const currentIndex = this.findSequenceIndex(sequence, source);
|
|
235
|
+
if (currentIndex < 0) {
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
const nextIndex = shiftKey ? currentIndex - 1 : currentIndex + 1;
|
|
239
|
+
const target = sequence[nextIndex] ?? null;
|
|
240
|
+
if (target === null) {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
target.focus();
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
198
246
|
isPanelMounted(item) {
|
|
199
247
|
if (this.isItemExpanded(item)) {
|
|
200
248
|
item.markExpandedOnce();
|
|
@@ -488,6 +536,62 @@ let TngAccordion = class TngAccordion {
|
|
|
488
536
|
getEnabledItems() {
|
|
489
537
|
return this.getOrderedItems().filter((item) => !this.isItemDisabled(item));
|
|
490
538
|
}
|
|
539
|
+
shouldHandleCustomTabNavigation() {
|
|
540
|
+
return this.getEnabledItems().some((item) => {
|
|
541
|
+
const triggerElement = item.getTriggerElement();
|
|
542
|
+
return triggerElement !== null && !(triggerElement instanceof HTMLButtonElement);
|
|
543
|
+
});
|
|
544
|
+
}
|
|
545
|
+
getCustomTabSequence() {
|
|
546
|
+
const host = this.getHostElement();
|
|
547
|
+
const sequence = new Set();
|
|
548
|
+
for (const item of this.getEnabledItems()) {
|
|
549
|
+
const triggerElement = item.getTriggerElement();
|
|
550
|
+
if (triggerElement === null || this.isInHiddenSubtree(triggerElement)) {
|
|
551
|
+
continue;
|
|
552
|
+
}
|
|
553
|
+
sequence.add(triggerElement);
|
|
554
|
+
}
|
|
555
|
+
const candidates = host.querySelectorAll('a[href],area[href],button,input,select,textarea,[tabindex],[contenteditable="true"]');
|
|
556
|
+
for (let index = 0; index < candidates.length; index += 1) {
|
|
557
|
+
const candidate = candidates.item(index);
|
|
558
|
+
if (candidate === null) {
|
|
559
|
+
continue;
|
|
560
|
+
}
|
|
561
|
+
if (!host.contains(candidate) || this.isInHiddenSubtree(candidate) || !this.isNaturallyTabbable(candidate)) {
|
|
562
|
+
continue;
|
|
563
|
+
}
|
|
564
|
+
sequence.add(candidate);
|
|
565
|
+
}
|
|
566
|
+
return Array.from(sequence).sort(compareElementsByDomPosition);
|
|
567
|
+
}
|
|
568
|
+
findSequenceIndex(sequence, source) {
|
|
569
|
+
const directIndex = sequence.indexOf(source);
|
|
570
|
+
if (directIndex >= 0) {
|
|
571
|
+
return directIndex;
|
|
572
|
+
}
|
|
573
|
+
return sequence.findIndex((candidate) => candidate.contains(source));
|
|
574
|
+
}
|
|
575
|
+
isInHiddenSubtree(element) {
|
|
576
|
+
return element.closest('[hidden]') !== null;
|
|
577
|
+
}
|
|
578
|
+
isNaturallyTabbable(element) {
|
|
579
|
+
if (element.hasAttribute('disabled')) {
|
|
580
|
+
return false;
|
|
581
|
+
}
|
|
582
|
+
const tabIndexAttr = element.getAttribute('tabindex');
|
|
583
|
+
if (tabIndexAttr !== null) {
|
|
584
|
+
const parsed = Number(tabIndexAttr);
|
|
585
|
+
return Number.isFinite(parsed) && parsed >= 0;
|
|
586
|
+
}
|
|
587
|
+
if (element instanceof HTMLAnchorElement || element instanceof HTMLAreaElement) {
|
|
588
|
+
return element.hasAttribute('href');
|
|
589
|
+
}
|
|
590
|
+
return (element instanceof HTMLButtonElement ||
|
|
591
|
+
element instanceof HTMLInputElement ||
|
|
592
|
+
element instanceof HTMLSelectElement ||
|
|
593
|
+
element instanceof HTMLTextAreaElement);
|
|
594
|
+
}
|
|
491
595
|
resolveCurrentFocusableItem() {
|
|
492
596
|
const enabledItems = this.getEnabledItems();
|
|
493
597
|
if (enabledItems.length === 0) {
|
|
@@ -519,6 +623,9 @@ __decorate([
|
|
|
519
623
|
__decorate([
|
|
520
624
|
HostBinding('attr.data-disabled')
|
|
521
625
|
], TngAccordion.prototype, "dataDisabled", null);
|
|
626
|
+
__decorate([
|
|
627
|
+
HostListener('keydown', ['$event'])
|
|
628
|
+
], TngAccordion.prototype, "onHostKeydown", null);
|
|
522
629
|
TngAccordion = __decorate([
|
|
523
630
|
Directive({
|
|
524
631
|
selector: '[tngAccordion]',
|
|
@@ -591,6 +698,9 @@ let TngAccordionItem = class TngAccordionItem {
|
|
|
591
698
|
getTriggerId() {
|
|
592
699
|
return this.trigger?.getTriggerId() ?? null;
|
|
593
700
|
}
|
|
701
|
+
getTriggerElement() {
|
|
702
|
+
return this.trigger?.getHostElement() ?? null;
|
|
703
|
+
}
|
|
594
704
|
getPanelId() {
|
|
595
705
|
return this.panel?.getPanelId() ?? null;
|
|
596
706
|
}
|
|
@@ -682,6 +792,9 @@ let TngAccordionTrigger = class TngAccordionTrigger {
|
|
|
682
792
|
focusSelf() {
|
|
683
793
|
this.hostRef.nativeElement.focus();
|
|
684
794
|
}
|
|
795
|
+
getHostElement() {
|
|
796
|
+
return this.hostRef.nativeElement;
|
|
797
|
+
}
|
|
685
798
|
resolveTriggerId() {
|
|
686
799
|
const explicitId = this.hostRef.nativeElement.getAttribute('id');
|
|
687
800
|
if (explicitId !== null && explicitId.length > 0) {
|