@angular/aria 21.0.0-next.9 → 21.0.0-rc.1

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.
Files changed (49) hide show
  1. package/_adev_assets/aria-accordion.json +373 -0
  2. package/_adev_assets/aria-combobox.json +383 -0
  3. package/_adev_assets/aria-grid.json +647 -0
  4. package/_adev_assets/aria-listbox.json +511 -0
  5. package/_adev_assets/aria-menu.json +852 -0
  6. package/_adev_assets/aria-tabs.json +987 -0
  7. package/_adev_assets/aria-toolbar.json +696 -0
  8. package/_adev_assets/aria-tree.json +1071 -0
  9. package/fesm2022/_widget-chunk.mjs +949 -0
  10. package/fesm2022/_widget-chunk.mjs.map +1 -0
  11. package/fesm2022/accordion.mjs +372 -174
  12. package/fesm2022/accordion.mjs.map +1 -1
  13. package/fesm2022/aria.mjs +1 -2
  14. package/fesm2022/aria.mjs.map +1 -1
  15. package/fesm2022/combobox.mjs +308 -116
  16. package/fesm2022/combobox.mjs.map +1 -1
  17. package/fesm2022/grid.mjs +566 -0
  18. package/fesm2022/grid.mjs.map +1 -0
  19. package/fesm2022/listbox.mjs +384 -184
  20. package/fesm2022/listbox.mjs.map +1 -1
  21. package/fesm2022/menu.mjs +591 -0
  22. package/fesm2022/menu.mjs.map +1 -0
  23. package/fesm2022/private.mjs +2338 -0
  24. package/fesm2022/private.mjs.map +1 -0
  25. package/fesm2022/tabs.mjs +484 -276
  26. package/fesm2022/tabs.mjs.map +1 -1
  27. package/fesm2022/toolbar.mjs +366 -200
  28. package/fesm2022/toolbar.mjs.map +1 -1
  29. package/fesm2022/tree.mjs +515 -267
  30. package/fesm2022/tree.mjs.map +1 -1
  31. package/package.json +12 -12
  32. package/types/_grid-chunk.d.ts +608 -0
  33. package/types/accordion.d.ts +8 -8
  34. package/types/combobox.d.ts +20 -7
  35. package/types/grid.d.ts +120 -0
  36. package/types/listbox.d.ts +9 -7
  37. package/types/menu.d.ts +170 -0
  38. package/types/{ui-patterns.d.ts → private.d.ts} +555 -433
  39. package/types/tabs.d.ts +8 -8
  40. package/types/toolbar.d.ts +31 -28
  41. package/types/tree.d.ts +11 -9
  42. package/fesm2022/deferred-content.mjs +0 -60
  43. package/fesm2022/deferred-content.mjs.map +0 -1
  44. package/fesm2022/radio-group.mjs +0 -197
  45. package/fesm2022/radio-group.mjs.map +0 -1
  46. package/fesm2022/ui-patterns.mjs +0 -2504
  47. package/fesm2022/ui-patterns.mjs.map +0 -1
  48. package/types/deferred-content.d.ts +0 -38
  49. package/types/radio-group.d.ts +0 -82
package/fesm2022/tree.mjs CHANGED
@@ -1,285 +1,533 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, computed, ElementRef, signal, input, booleanAttribute, model, afterRenderEffect, untracked, Directive } from '@angular/core';
2
+ import { inject, computed, ElementRef, signal, input, booleanAttribute, model, afterRenderEffect, untracked, Directive, afterNextRender } from '@angular/core';
3
3
  import { _IdGenerator } from '@angular/cdk/a11y';
4
4
  import { Directionality } from '@angular/cdk/bidi';
5
- import * as i1 from '@angular/aria/deferred-content';
6
- import { DeferredContentAware, DeferredContent } from '@angular/aria/deferred-content';
7
- import { ComboboxTreePattern, TreePattern, TreeItemPattern } from '@angular/aria/ui-patterns';
5
+ import * as i1 from '@angular/aria/private';
6
+ import { ComboboxTreePattern, TreePattern, DeferredContentAware, TreeItemPattern, DeferredContent } from '@angular/aria/private';
8
7
  import { ComboboxPopup } from './combobox.mjs';
8
+ import '@angular/core/rxjs-interop';
9
9
 
10
- /**
11
- * Sort directives by their document order.
12
- */
13
10
  function sortDirectives(a, b) {
14
- return (a.element().compareDocumentPosition(b.element()) & Node.DOCUMENT_POSITION_PRECEDING) > 0
15
- ? 1
16
- : -1;
11
+ return (a.element().compareDocumentPosition(b.element()) & Node.DOCUMENT_POSITION_PRECEDING) > 0 ? 1 : -1;
17
12
  }
18
- /**
19
- * A Tree container.
20
- *
21
- * Transforms nested lists into an accessible, ARIA-compliant tree structure.
22
- *
23
- * ```html
24
- * <ul ngTree [(value)]="selectedItems" [multi]="true">
25
- * <li ngTreeItem [value]="'leaf1'">Leaf Item 1</li>
26
- * <li ngTreeItem [value]="'parent1'">
27
- * Parent Item 1
28
- * <ul ngTreeItemGroup [value]="'parent1'">
29
- * <ng-template ngTreeItemGroupContent>
30
- * <li ngTreeItem [value]="'child1.1'">Child Item 1.1</li>
31
- * <li ngTreeItem [value]="'child1.2'">Child Item 1.2</li>
32
- * </ng-template>
33
- * </ul>
34
- * </li>
35
- * <li ngTreeItem [value]="'leaf2'" [disabled]="true">Disabled Leaf Item 2</li>
36
- * </ul>
37
- * ```
38
- */
39
13
  class Tree {
40
- /** A unique identifier for the tree. */
41
- _generatedId = inject(_IdGenerator).getId('ng-tree-');
42
- // TODO(wagnermaciel): https://github.com/angular/components/pull/30495#discussion_r1972601144.
43
- /** A unique identifier for the tree. */
44
- id = computed(() => this._generatedId, ...(ngDevMode ? [{ debugName: "id" }] : []));
45
- /** A reference to the parent combobox popup, if one exists. */
46
- _popup = inject(ComboboxPopup, {
47
- optional: true,
48
- });
49
- /** A reference to the tree element. */
50
- _elementRef = inject(ElementRef);
51
- /** All TreeItem instances within this tree. */
52
- _unorderedItems = signal(new Set(), ...(ngDevMode ? [{ debugName: "_unorderedItems" }] : []));
53
- /** Orientation of the tree. */
54
- orientation = input('vertical', ...(ngDevMode ? [{ debugName: "orientation" }] : []));
55
- /** Whether multi-selection is allowed. */
56
- multi = input(false, ...(ngDevMode ? [{ debugName: "multi", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
57
- /** Whether the tree is disabled. */
58
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
59
- /** The selection strategy used by the tree. */
60
- selectionMode = input('explicit', ...(ngDevMode ? [{ debugName: "selectionMode" }] : []));
61
- /** The focus strategy used by the tree. */
62
- focusMode = input('roving', ...(ngDevMode ? [{ debugName: "focusMode" }] : []));
63
- /** Whether navigation wraps. */
64
- wrap = input(true, ...(ngDevMode ? [{ debugName: "wrap", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
65
- /** Whether to skip disabled items during navigation. */
66
- skipDisabled = input(true, ...(ngDevMode ? [{ debugName: "skipDisabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
67
- /** Typeahead delay. */
68
- typeaheadDelay = input(0.5, ...(ngDevMode ? [{ debugName: "typeaheadDelay" }] : []));
69
- /** Selected item values. */
70
- value = model([], ...(ngDevMode ? [{ debugName: "value" }] : []));
71
- /** Text direction. */
72
- textDirection = inject(Directionality).valueSignal;
73
- /** Whether the tree is in navigation mode. */
74
- nav = input(false, ...(ngDevMode ? [{ debugName: "nav" }] : []));
75
- /** The aria-current type. */
76
- currentType = input('page', ...(ngDevMode ? [{ debugName: "currentType" }] : []));
77
- /** The UI pattern for the tree. */
78
- pattern;
79
- /** Whether the tree has received focus yet. */
80
- _hasFocused = signal(false, ...(ngDevMode ? [{ debugName: "_hasFocused" }] : []));
81
- constructor() {
82
- const inputs = {
83
- ...this,
84
- id: this.id,
85
- allItems: computed(() => [...this._unorderedItems()].sort(sortDirectives).map(item => item.pattern)),
86
- activeItem: signal(undefined),
87
- element: () => this._elementRef.nativeElement,
88
- combobox: () => this._popup?.combobox?.pattern,
89
- };
90
- this.pattern = this._popup?.combobox
91
- ? new ComboboxTreePattern(inputs)
92
- : new TreePattern(inputs);
93
- if (this._popup?.combobox) {
94
- this._popup?.controls?.set(this.pattern);
95
- }
96
- afterRenderEffect(() => {
97
- if (!this._hasFocused()) {
98
- this.pattern.setDefaultState();
99
- }
100
- });
101
- afterRenderEffect(() => {
102
- const items = inputs.allItems();
103
- const activeItem = untracked(() => inputs.activeItem());
104
- if (!items.some(i => i === activeItem) && activeItem) {
105
- this.pattern.listBehavior.unfocus();
106
- }
107
- });
108
- afterRenderEffect(() => {
109
- const items = inputs.allItems();
110
- const value = untracked(() => this.value());
111
- if (items && value.some(v => !items.some(i => i.value() === v))) {
112
- this.value.set(value.filter(v => items.some(i => i.value() === v)));
113
- }
114
- });
115
- }
116
- onFocus() {
117
- this._hasFocused.set(true);
118
- }
119
- register(child) {
120
- this._unorderedItems().add(child);
121
- this._unorderedItems.set(new Set(this._unorderedItems()));
14
+ _generatedId = inject(_IdGenerator).getId('ng-tree-', true);
15
+ id = computed(() => this._generatedId, ...(ngDevMode ? [{
16
+ debugName: "id"
17
+ }] : []));
18
+ _popup = inject(ComboboxPopup, {
19
+ optional: true
20
+ });
21
+ _elementRef = inject(ElementRef);
22
+ _unorderedItems = signal(new Set(), ...(ngDevMode ? [{
23
+ debugName: "_unorderedItems"
24
+ }] : []));
25
+ orientation = input('vertical', ...(ngDevMode ? [{
26
+ debugName: "orientation"
27
+ }] : []));
28
+ multi = input(false, ...(ngDevMode ? [{
29
+ debugName: "multi",
30
+ transform: booleanAttribute
31
+ }] : [{
32
+ transform: booleanAttribute
33
+ }]));
34
+ disabled = input(false, ...(ngDevMode ? [{
35
+ debugName: "disabled",
36
+ transform: booleanAttribute
37
+ }] : [{
38
+ transform: booleanAttribute
39
+ }]));
40
+ selectionMode = input('explicit', ...(ngDevMode ? [{
41
+ debugName: "selectionMode"
42
+ }] : []));
43
+ focusMode = input('roving', ...(ngDevMode ? [{
44
+ debugName: "focusMode"
45
+ }] : []));
46
+ wrap = input(true, ...(ngDevMode ? [{
47
+ debugName: "wrap",
48
+ transform: booleanAttribute
49
+ }] : [{
50
+ transform: booleanAttribute
51
+ }]));
52
+ softDisabled = input(true, ...(ngDevMode ? [{
53
+ debugName: "softDisabled",
54
+ transform: booleanAttribute
55
+ }] : [{
56
+ transform: booleanAttribute
57
+ }]));
58
+ typeaheadDelay = input(0.5, ...(ngDevMode ? [{
59
+ debugName: "typeaheadDelay"
60
+ }] : []));
61
+ value = model([], ...(ngDevMode ? [{
62
+ debugName: "value"
63
+ }] : []));
64
+ textDirection = inject(Directionality).valueSignal;
65
+ nav = input(false, ...(ngDevMode ? [{
66
+ debugName: "nav"
67
+ }] : []));
68
+ currentType = input('page', ...(ngDevMode ? [{
69
+ debugName: "currentType"
70
+ }] : []));
71
+ _pattern;
72
+ _hasFocused = signal(false, ...(ngDevMode ? [{
73
+ debugName: "_hasFocused"
74
+ }] : []));
75
+ constructor() {
76
+ const inputs = {
77
+ ...this,
78
+ id: this.id,
79
+ allItems: computed(() => [...this._unorderedItems()].sort(sortDirectives).map(item => item._pattern)),
80
+ activeItem: signal(undefined),
81
+ element: () => this._elementRef.nativeElement,
82
+ combobox: () => this._popup?.combobox?._pattern
83
+ };
84
+ this._pattern = this._popup?.combobox ? new ComboboxTreePattern(inputs) : new TreePattern(inputs);
85
+ if (this._popup?.combobox) {
86
+ this._popup?.controls?.set(this._pattern);
122
87
  }
123
- unregister(child) {
124
- this._unorderedItems().delete(child);
125
- this._unorderedItems.set(new Set(this._unorderedItems()));
126
- }
127
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0-next.2", ngImport: i0, type: Tree, deps: [], target: i0.ɵɵFactoryTarget.Directive });
128
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0-next.2", type: Tree, isStandalone: true, selector: "[ngTree]", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, multi: { classPropertyName: "multi", publicName: "multi", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, focusMode: { classPropertyName: "focusMode", publicName: "focusMode", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null }, skipDisabled: { classPropertyName: "skipDisabled", publicName: "skipDisabled", isSignal: true, isRequired: false, transformFunction: null }, typeaheadDelay: { classPropertyName: "typeaheadDelay", publicName: "typeaheadDelay", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, nav: { classPropertyName: "nav", publicName: "nav", isSignal: true, isRequired: false, transformFunction: null }, currentType: { classPropertyName: "currentType", publicName: "currentType", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "role": "tree" }, listeners: { "keydown": "pattern.onKeydown($event)", "pointerdown": "pattern.onPointerdown($event)", "focusin": "onFocus()" }, properties: { "attr.id": "id()", "attr.aria-orientation": "pattern.orientation()", "attr.aria-multiselectable": "pattern.multi()", "attr.aria-disabled": "pattern.disabled()", "attr.aria-activedescendant": "pattern.activedescendant()", "tabindex": "pattern.tabindex()" }, classAttribute: "ng-tree" }, exportAs: ["ngTree"], hostDirectives: [{ directive: ComboboxPopup }], ngImport: i0 });
88
+ afterRenderEffect(() => {
89
+ if (!this._hasFocused()) {
90
+ this._pattern.setDefaultState();
91
+ }
92
+ });
93
+ afterRenderEffect(() => {
94
+ const items = inputs.allItems();
95
+ const activeItem = untracked(() => inputs.activeItem());
96
+ if (!items.some(i => i === activeItem) && activeItem) {
97
+ this._pattern.listBehavior.unfocus();
98
+ }
99
+ });
100
+ afterRenderEffect(() => {
101
+ const items = inputs.allItems();
102
+ const value = untracked(() => this.value());
103
+ if (items && value.some(v => !items.some(i => i.value() === v))) {
104
+ this.value.set(value.filter(v => items.some(i => i.value() === v)));
105
+ }
106
+ });
107
+ }
108
+ onFocus() {
109
+ this._hasFocused.set(true);
110
+ }
111
+ register(child) {
112
+ this._unorderedItems().add(child);
113
+ this._unorderedItems.set(new Set(this._unorderedItems()));
114
+ }
115
+ unregister(child) {
116
+ this._unorderedItems().delete(child);
117
+ this._unorderedItems.set(new Set(this._unorderedItems()));
118
+ }
119
+ scrollActiveItemIntoView(options = {
120
+ block: 'nearest'
121
+ }) {
122
+ this._pattern.inputs.activeItem()?.element()?.scrollIntoView(options);
123
+ }
124
+ static ɵfac = i0.ɵɵngDeclareFactory({
125
+ minVersion: "12.0.0",
126
+ version: "20.2.0-next.2",
127
+ ngImport: i0,
128
+ type: Tree,
129
+ deps: [],
130
+ target: i0.ɵɵFactoryTarget.Directive
131
+ });
132
+ static ɵdir = i0.ɵɵngDeclareDirective({
133
+ minVersion: "17.1.0",
134
+ version: "20.2.0-next.2",
135
+ type: Tree,
136
+ isStandalone: true,
137
+ selector: "[ngTree]",
138
+ inputs: {
139
+ orientation: {
140
+ classPropertyName: "orientation",
141
+ publicName: "orientation",
142
+ isSignal: true,
143
+ isRequired: false,
144
+ transformFunction: null
145
+ },
146
+ multi: {
147
+ classPropertyName: "multi",
148
+ publicName: "multi",
149
+ isSignal: true,
150
+ isRequired: false,
151
+ transformFunction: null
152
+ },
153
+ disabled: {
154
+ classPropertyName: "disabled",
155
+ publicName: "disabled",
156
+ isSignal: true,
157
+ isRequired: false,
158
+ transformFunction: null
159
+ },
160
+ selectionMode: {
161
+ classPropertyName: "selectionMode",
162
+ publicName: "selectionMode",
163
+ isSignal: true,
164
+ isRequired: false,
165
+ transformFunction: null
166
+ },
167
+ focusMode: {
168
+ classPropertyName: "focusMode",
169
+ publicName: "focusMode",
170
+ isSignal: true,
171
+ isRequired: false,
172
+ transformFunction: null
173
+ },
174
+ wrap: {
175
+ classPropertyName: "wrap",
176
+ publicName: "wrap",
177
+ isSignal: true,
178
+ isRequired: false,
179
+ transformFunction: null
180
+ },
181
+ softDisabled: {
182
+ classPropertyName: "softDisabled",
183
+ publicName: "softDisabled",
184
+ isSignal: true,
185
+ isRequired: false,
186
+ transformFunction: null
187
+ },
188
+ typeaheadDelay: {
189
+ classPropertyName: "typeaheadDelay",
190
+ publicName: "typeaheadDelay",
191
+ isSignal: true,
192
+ isRequired: false,
193
+ transformFunction: null
194
+ },
195
+ value: {
196
+ classPropertyName: "value",
197
+ publicName: "value",
198
+ isSignal: true,
199
+ isRequired: false,
200
+ transformFunction: null
201
+ },
202
+ nav: {
203
+ classPropertyName: "nav",
204
+ publicName: "nav",
205
+ isSignal: true,
206
+ isRequired: false,
207
+ transformFunction: null
208
+ },
209
+ currentType: {
210
+ classPropertyName: "currentType",
211
+ publicName: "currentType",
212
+ isSignal: true,
213
+ isRequired: false,
214
+ transformFunction: null
215
+ }
216
+ },
217
+ outputs: {
218
+ value: "valueChange"
219
+ },
220
+ host: {
221
+ attributes: {
222
+ "role": "tree"
223
+ },
224
+ listeners: {
225
+ "keydown": "_pattern.onKeydown($event)",
226
+ "pointerdown": "_pattern.onPointerdown($event)",
227
+ "focusin": "onFocus()"
228
+ },
229
+ properties: {
230
+ "attr.id": "id()",
231
+ "attr.aria-orientation": "_pattern.orientation()",
232
+ "attr.aria-multiselectable": "_pattern.multi()",
233
+ "attr.aria-disabled": "_pattern.disabled()",
234
+ "attr.aria-activedescendant": "_pattern.activeDescendant()",
235
+ "tabindex": "_pattern.tabIndex()"
236
+ },
237
+ classAttribute: "ng-tree"
238
+ },
239
+ exportAs: ["ngTree"],
240
+ hostDirectives: [{
241
+ directive: ComboboxPopup
242
+ }],
243
+ ngImport: i0
244
+ });
129
245
  }
130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0-next.2", ngImport: i0, type: Tree, decorators: [{
131
- type: Directive,
132
- args: [{
133
- selector: '[ngTree]',
134
- exportAs: 'ngTree',
135
- host: {
136
- 'class': 'ng-tree',
137
- 'role': 'tree',
138
- '[attr.id]': 'id()',
139
- '[attr.aria-orientation]': 'pattern.orientation()',
140
- '[attr.aria-multiselectable]': 'pattern.multi()',
141
- '[attr.aria-disabled]': 'pattern.disabled()',
142
- '[attr.aria-activedescendant]': 'pattern.activedescendant()',
143
- '[tabindex]': 'pattern.tabindex()',
144
- '(keydown)': 'pattern.onKeydown($event)',
145
- '(pointerdown)': 'pattern.onPointerdown($event)',
146
- '(focusin)': 'onFocus()',
147
- },
148
- hostDirectives: [{ directive: ComboboxPopup }],
149
- }]
150
- }], ctorParameters: () => [] });
151
- /**
152
- * A selectable and expandable Tree Item in a Tree.
153
- */
246
+ i0.ɵɵngDeclareClassMetadata({
247
+ minVersion: "12.0.0",
248
+ version: "20.2.0-next.2",
249
+ ngImport: i0,
250
+ type: Tree,
251
+ decorators: [{
252
+ type: Directive,
253
+ args: [{
254
+ selector: '[ngTree]',
255
+ exportAs: 'ngTree',
256
+ host: {
257
+ 'class': 'ng-tree',
258
+ 'role': 'tree',
259
+ '[attr.id]': 'id()',
260
+ '[attr.aria-orientation]': '_pattern.orientation()',
261
+ '[attr.aria-multiselectable]': '_pattern.multi()',
262
+ '[attr.aria-disabled]': '_pattern.disabled()',
263
+ '[attr.aria-activedescendant]': '_pattern.activeDescendant()',
264
+ '[tabindex]': '_pattern.tabIndex()',
265
+ '(keydown)': '_pattern.onKeydown($event)',
266
+ '(pointerdown)': '_pattern.onPointerdown($event)',
267
+ '(focusin)': 'onFocus()'
268
+ },
269
+ hostDirectives: [{
270
+ directive: ComboboxPopup
271
+ }]
272
+ }]
273
+ }],
274
+ ctorParameters: () => []
275
+ });
154
276
  class TreeItem extends DeferredContentAware {
155
- /** A reference to the tree item element. */
156
- _elementRef = inject(ElementRef);
157
- /** A unique identifier for the tree item. */
158
- _id = inject(_IdGenerator).getId('ng-tree-item-');
159
- /** The owned tree item group. */
160
- _group = signal(undefined, ...(ngDevMode ? [{ debugName: "_group" }] : []));
161
- /** The host native element. */
162
- element = computed(() => this._elementRef.nativeElement, ...(ngDevMode ? [{ debugName: "element" }] : []));
163
- /** The value of the tree item. */
164
- value = input.required(...(ngDevMode ? [{ debugName: "value" }] : []));
165
- /** The parent tree root or tree item group. */
166
- parent = input.required(...(ngDevMode ? [{ debugName: "parent" }] : []));
167
- /** Whether the tree item is disabled. */
168
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
169
- /** Optional label for typeahead. Defaults to the element's textContent. */
170
- label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
171
- /** Search term for typeahead. */
172
- searchTerm = computed(() => this.label() ?? this.element().textContent, ...(ngDevMode ? [{ debugName: "searchTerm" }] : []));
173
- /** The tree root. */
174
- tree = computed(() => {
175
- if (this.parent() instanceof Tree) {
176
- return this.parent();
177
- }
178
- return this.parent().ownedBy().tree();
179
- }, ...(ngDevMode ? [{ debugName: "tree" }] : []));
180
- /** The UI pattern for this item. */
181
- pattern;
182
- constructor() {
183
- super();
184
- this.preserveContent.set(true);
185
- // Connect the group's hidden state to the DeferredContentAware's visibility.
186
- afterRenderEffect(() => {
187
- this.tree().pattern instanceof ComboboxTreePattern
188
- ? this.contentVisible.set(true)
189
- : this.contentVisible.set(this.pattern.expanded());
190
- });
191
- }
192
- ngOnInit() {
193
- this.parent().register(this);
194
- this.tree().register(this);
195
- const treePattern = computed(() => this.tree().pattern, ...(ngDevMode ? [{ debugName: "treePattern" }] : []));
196
- const parentPattern = computed(() => {
197
- if (this.parent() instanceof Tree) {
198
- return treePattern();
199
- }
200
- return this.parent().ownedBy().pattern;
201
- }, ...(ngDevMode ? [{ debugName: "parentPattern" }] : []));
202
- this.pattern = new TreeItemPattern({
203
- ...this,
204
- id: () => this._id,
205
- tree: treePattern,
206
- parent: parentPattern,
207
- children: computed(() => this._group()?.children() ?? []),
208
- hasChildren: computed(() => !!this._group()),
209
- });
210
- }
211
- ngOnDestroy() {
212
- this.parent().unregister(this);
213
- this.tree().unregister(this);
277
+ _elementRef = inject(ElementRef);
278
+ _id = inject(_IdGenerator).getId('ng-tree-item-', true);
279
+ _group = signal(undefined, ...(ngDevMode ? [{
280
+ debugName: "_group"
281
+ }] : []));
282
+ element = computed(() => this._elementRef.nativeElement, ...(ngDevMode ? [{
283
+ debugName: "element"
284
+ }] : []));
285
+ value = input.required(...(ngDevMode ? [{
286
+ debugName: "value"
287
+ }] : []));
288
+ parent = input.required(...(ngDevMode ? [{
289
+ debugName: "parent"
290
+ }] : []));
291
+ disabled = input(false, ...(ngDevMode ? [{
292
+ debugName: "disabled",
293
+ transform: booleanAttribute
294
+ }] : [{
295
+ transform: booleanAttribute
296
+ }]));
297
+ selectable = input(true, ...(ngDevMode ? [{
298
+ debugName: "selectable"
299
+ }] : []));
300
+ label = input(...(ngDevMode ? [undefined, {
301
+ debugName: "label"
302
+ }] : []));
303
+ searchTerm = computed(() => this.label() ?? this.element().textContent, ...(ngDevMode ? [{
304
+ debugName: "searchTerm"
305
+ }] : []));
306
+ tree = computed(() => {
307
+ if (this.parent() instanceof Tree) {
308
+ return this.parent();
214
309
  }
215
- register(group) {
216
- this._group.set(group);
217
- }
218
- unregister() {
219
- this._group.set(undefined);
220
- }
221
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0-next.2", ngImport: i0, type: TreeItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
222
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0-next.2", type: TreeItem, isStandalone: true, selector: "[ngTreeItem]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, parent: { classPropertyName: "parent", publicName: "parent", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "treeitem" }, properties: { "attr.data-active": "pattern.active()", "id": "pattern.id()", "attr.aria-expanded": "pattern.expandable() ? pattern.expanded() : null", "attr.aria-selected": "pattern.selected()", "attr.aria-current": "pattern.current()", "attr.aria-disabled": "pattern.disabled()", "attr.aria-level": "pattern.level()", "attr.aria-setsize": "pattern.setsize()", "attr.aria-posinset": "pattern.posinset()", "attr.tabindex": "pattern.tabindex()" }, classAttribute: "ng-treeitem" }, exportAs: ["ngTreeItem"], usesInheritance: true, ngImport: i0 });
310
+ return this.parent().ownedBy().tree();
311
+ }, ...(ngDevMode ? [{
312
+ debugName: "tree"
313
+ }] : []));
314
+ _pattern;
315
+ constructor() {
316
+ super();
317
+ afterNextRender(() => {
318
+ if (this.tree()._pattern instanceof ComboboxTreePattern) {
319
+ this.preserveContent.set(true);
320
+ }
321
+ });
322
+ afterRenderEffect(() => {
323
+ this.tree()._pattern instanceof ComboboxTreePattern ? this.contentVisible.set(true) : this.contentVisible.set(this._pattern.expanded());
324
+ });
325
+ }
326
+ ngOnInit() {
327
+ this.parent().register(this);
328
+ this.tree().register(this);
329
+ const treePattern = computed(() => this.tree()._pattern, ...(ngDevMode ? [{
330
+ debugName: "treePattern"
331
+ }] : []));
332
+ const parentPattern = computed(() => {
333
+ if (this.parent() instanceof Tree) {
334
+ return treePattern();
335
+ }
336
+ return this.parent().ownedBy()._pattern;
337
+ }, ...(ngDevMode ? [{
338
+ debugName: "parentPattern"
339
+ }] : []));
340
+ this._pattern = new TreeItemPattern({
341
+ ...this,
342
+ id: () => this._id,
343
+ tree: treePattern,
344
+ parent: parentPattern,
345
+ children: computed(() => this._group()?.children() ?? []),
346
+ hasChildren: computed(() => !!this._group())
347
+ });
348
+ }
349
+ ngOnDestroy() {
350
+ this.parent().unregister(this);
351
+ this.tree().unregister(this);
352
+ }
353
+ register(group) {
354
+ this._group.set(group);
355
+ }
356
+ unregister() {
357
+ this._group.set(undefined);
358
+ }
359
+ static ɵfac = i0.ɵɵngDeclareFactory({
360
+ minVersion: "12.0.0",
361
+ version: "20.2.0-next.2",
362
+ ngImport: i0,
363
+ type: TreeItem,
364
+ deps: [],
365
+ target: i0.ɵɵFactoryTarget.Directive
366
+ });
367
+ static ɵdir = i0.ɵɵngDeclareDirective({
368
+ minVersion: "17.1.0",
369
+ version: "20.2.0-next.2",
370
+ type: TreeItem,
371
+ isStandalone: true,
372
+ selector: "[ngTreeItem]",
373
+ inputs: {
374
+ value: {
375
+ classPropertyName: "value",
376
+ publicName: "value",
377
+ isSignal: true,
378
+ isRequired: true,
379
+ transformFunction: null
380
+ },
381
+ parent: {
382
+ classPropertyName: "parent",
383
+ publicName: "parent",
384
+ isSignal: true,
385
+ isRequired: true,
386
+ transformFunction: null
387
+ },
388
+ disabled: {
389
+ classPropertyName: "disabled",
390
+ publicName: "disabled",
391
+ isSignal: true,
392
+ isRequired: false,
393
+ transformFunction: null
394
+ },
395
+ selectable: {
396
+ classPropertyName: "selectable",
397
+ publicName: "selectable",
398
+ isSignal: true,
399
+ isRequired: false,
400
+ transformFunction: null
401
+ },
402
+ label: {
403
+ classPropertyName: "label",
404
+ publicName: "label",
405
+ isSignal: true,
406
+ isRequired: false,
407
+ transformFunction: null
408
+ }
409
+ },
410
+ host: {
411
+ attributes: {
412
+ "role": "treeitem"
413
+ },
414
+ properties: {
415
+ "attr.data-active": "_pattern.active()",
416
+ "id": "_pattern.id()",
417
+ "attr.aria-expanded": "_pattern.expandable() ? _pattern.expanded() : null",
418
+ "attr.aria-selected": "_pattern.selected()",
419
+ "attr.aria-current": "_pattern.current()",
420
+ "attr.aria-disabled": "_pattern.disabled()",
421
+ "attr.aria-level": "_pattern.level()",
422
+ "attr.aria-setsize": "_pattern.setsize()",
423
+ "attr.aria-posinset": "_pattern.posinset()",
424
+ "attr.tabindex": "_pattern.tabIndex()"
425
+ },
426
+ classAttribute: "ng-treeitem"
427
+ },
428
+ exportAs: ["ngTreeItem"],
429
+ usesInheritance: true,
430
+ ngImport: i0
431
+ });
223
432
  }
224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0-next.2", ngImport: i0, type: TreeItem, decorators: [{
225
- type: Directive,
226
- args: [{
227
- selector: '[ngTreeItem]',
228
- exportAs: 'ngTreeItem',
229
- host: {
230
- 'class': 'ng-treeitem',
231
- '[attr.data-active]': 'pattern.active()',
232
- 'role': 'treeitem',
233
- '[id]': 'pattern.id()',
234
- '[attr.aria-expanded]': 'pattern.expandable() ? pattern.expanded() : null',
235
- '[attr.aria-selected]': 'pattern.selected()',
236
- '[attr.aria-current]': 'pattern.current()',
237
- '[attr.aria-disabled]': 'pattern.disabled()',
238
- '[attr.aria-level]': 'pattern.level()',
239
- '[attr.aria-setsize]': 'pattern.setsize()',
240
- '[attr.aria-posinset]': 'pattern.posinset()',
241
- '[attr.tabindex]': 'pattern.tabindex()',
242
- },
243
- }]
244
- }], ctorParameters: () => [] });
245
- /**
246
- * Contains children tree itmes.
247
- */
433
+ i0.ɵɵngDeclareClassMetadata({
434
+ minVersion: "12.0.0",
435
+ version: "20.2.0-next.2",
436
+ ngImport: i0,
437
+ type: TreeItem,
438
+ decorators: [{
439
+ type: Directive,
440
+ args: [{
441
+ selector: '[ngTreeItem]',
442
+ exportAs: 'ngTreeItem',
443
+ host: {
444
+ 'class': 'ng-treeitem',
445
+ '[attr.data-active]': '_pattern.active()',
446
+ 'role': 'treeitem',
447
+ '[id]': '_pattern.id()',
448
+ '[attr.aria-expanded]': '_pattern.expandable() ? _pattern.expanded() : null',
449
+ '[attr.aria-selected]': '_pattern.selected()',
450
+ '[attr.aria-current]': '_pattern.current()',
451
+ '[attr.aria-disabled]': '_pattern.disabled()',
452
+ '[attr.aria-level]': '_pattern.level()',
453
+ '[attr.aria-setsize]': '_pattern.setsize()',
454
+ '[attr.aria-posinset]': '_pattern.posinset()',
455
+ '[attr.tabindex]': '_pattern.tabIndex()'
456
+ }
457
+ }]
458
+ }],
459
+ ctorParameters: () => []
460
+ });
248
461
  class TreeItemGroup {
249
- /** The DeferredContent host directive. */
250
- _deferredContent = inject(DeferredContent);
251
- /** All groupable items that are descendants of the group. */
252
- _unorderedItems = signal(new Set(), ...(ngDevMode ? [{ debugName: "_unorderedItems" }] : []));
253
- /** Child items within this group. */
254
- children = computed(() => [...this._unorderedItems()].sort(sortDirectives).map(c => c.pattern), ...(ngDevMode ? [{ debugName: "children" }] : []));
255
- /** Tree item that owns the group. */
256
- ownedBy = input.required(...(ngDevMode ? [{ debugName: "ownedBy" }] : []));
257
- ngOnInit() {
258
- this._deferredContent.deferredContentAware.set(this.ownedBy());
259
- this.ownedBy().register(this);
260
- }
261
- ngOnDestroy() {
262
- this.ownedBy().unregister();
263
- }
264
- register(child) {
265
- this._unorderedItems().add(child);
266
- this._unorderedItems.set(new Set(this._unorderedItems()));
267
- }
268
- unregister(child) {
269
- this._unorderedItems().delete(child);
270
- this._unorderedItems.set(new Set(this._unorderedItems()));
271
- }
272
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0-next.2", ngImport: i0, type: TreeItemGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
273
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0-next.2", type: TreeItemGroup, isStandalone: true, selector: "ng-template[ngTreeItemGroup]", inputs: { ownedBy: { classPropertyName: "ownedBy", publicName: "ownedBy", isSignal: true, isRequired: true, transformFunction: null } }, exportAs: ["ngTreeItemGroup"], hostDirectives: [{ directive: i1.DeferredContent }], ngImport: i0 });
462
+ _deferredContent = inject(DeferredContent);
463
+ _unorderedItems = signal(new Set(), ...(ngDevMode ? [{
464
+ debugName: "_unorderedItems"
465
+ }] : []));
466
+ children = computed(() => [...this._unorderedItems()].sort(sortDirectives).map(c => c._pattern), ...(ngDevMode ? [{
467
+ debugName: "children"
468
+ }] : []));
469
+ ownedBy = input.required(...(ngDevMode ? [{
470
+ debugName: "ownedBy"
471
+ }] : []));
472
+ ngOnInit() {
473
+ this._deferredContent.deferredContentAware.set(this.ownedBy());
474
+ this.ownedBy().register(this);
475
+ }
476
+ ngOnDestroy() {
477
+ this.ownedBy().unregister();
478
+ }
479
+ register(child) {
480
+ this._unorderedItems().add(child);
481
+ this._unorderedItems.set(new Set(this._unorderedItems()));
482
+ }
483
+ unregister(child) {
484
+ this._unorderedItems().delete(child);
485
+ this._unorderedItems.set(new Set(this._unorderedItems()));
486
+ }
487
+ static ɵfac = i0.ɵɵngDeclareFactory({
488
+ minVersion: "12.0.0",
489
+ version: "20.2.0-next.2",
490
+ ngImport: i0,
491
+ type: TreeItemGroup,
492
+ deps: [],
493
+ target: i0.ɵɵFactoryTarget.Directive
494
+ });
495
+ static ɵdir = i0.ɵɵngDeclareDirective({
496
+ minVersion: "17.1.0",
497
+ version: "20.2.0-next.2",
498
+ type: TreeItemGroup,
499
+ isStandalone: true,
500
+ selector: "ng-template[ngTreeItemGroup]",
501
+ inputs: {
502
+ ownedBy: {
503
+ classPropertyName: "ownedBy",
504
+ publicName: "ownedBy",
505
+ isSignal: true,
506
+ isRequired: true,
507
+ transformFunction: null
508
+ }
509
+ },
510
+ exportAs: ["ngTreeItemGroup"],
511
+ hostDirectives: [{
512
+ directive: i1.DeferredContent
513
+ }],
514
+ ngImport: i0
515
+ });
274
516
  }
275
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0-next.2", ngImport: i0, type: TreeItemGroup, decorators: [{
276
- type: Directive,
277
- args: [{
278
- selector: 'ng-template[ngTreeItemGroup]',
279
- exportAs: 'ngTreeItemGroup',
280
- hostDirectives: [DeferredContent],
281
- }]
282
- }] });
517
+ i0.ɵɵngDeclareClassMetadata({
518
+ minVersion: "12.0.0",
519
+ version: "20.2.0-next.2",
520
+ ngImport: i0,
521
+ type: TreeItemGroup,
522
+ decorators: [{
523
+ type: Directive,
524
+ args: [{
525
+ selector: 'ng-template[ngTreeItemGroup]',
526
+ exportAs: 'ngTreeItemGroup',
527
+ hostDirectives: [DeferredContent]
528
+ }]
529
+ }]
530
+ });
283
531
 
284
532
  export { Tree, TreeItem, TreeItemGroup };
285
533
  //# sourceMappingURL=tree.mjs.map