@angular/aria 22.0.0-next.7 → 22.0.0-next.8
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/fesm2022/_accordion-chunk.mjs +1 -1
- package/fesm2022/_click-event-manager-chunk.mjs +1 -1
- package/fesm2022/{_signal-like-chunk.mjs → _collection-chunk.mjs} +51 -2
- package/fesm2022/_collection-chunk.mjs.map +1 -0
- package/fesm2022/_deferred-content-chunk.mjs +6 -6
- package/fesm2022/_list-chunk.mjs +4 -1
- package/fesm2022/_list-chunk.mjs.map +1 -1
- package/fesm2022/_list-navigation-chunk.mjs +1 -1
- package/fesm2022/_list-typeahead-chunk.mjs +1 -1
- package/fesm2022/_menu-chunk.mjs +1 -1
- package/fesm2022/{_combobox-listbox-chunk.mjs → _option-chunk.mjs} +3 -50
- package/fesm2022/_option-chunk.mjs.map +1 -0
- package/fesm2022/_tabs-chunk.mjs +1 -1
- package/fesm2022/_toolbar-widget-group-chunk.mjs +1 -1
- package/fesm2022/_transforms-chunk.mjs +8 -0
- package/fesm2022/_transforms-chunk.mjs.map +1 -0
- package/fesm2022/{_combobox-tree-chunk.mjs → _tree-chunk.mjs} +3 -48
- package/fesm2022/_tree-chunk.mjs.map +1 -0
- package/fesm2022/_widget-chunk.mjs +36 -15
- package/fesm2022/_widget-chunk.mjs.map +1 -1
- package/fesm2022/accordion.mjs +28 -55
- package/fesm2022/accordion.mjs.map +1 -1
- package/fesm2022/aria.mjs +1 -1
- package/fesm2022/aria.mjs.map +1 -1
- package/fesm2022/combobox-testing.mjs +79 -0
- package/fesm2022/combobox-testing.mjs.map +1 -0
- package/fesm2022/combobox.mjs +273 -307
- package/fesm2022/combobox.mjs.map +1 -1
- package/fesm2022/grid-testing.mjs +8 -0
- package/fesm2022/grid-testing.mjs.map +1 -1
- package/fesm2022/grid.mjs +68 -87
- package/fesm2022/grid.mjs.map +1 -1
- package/fesm2022/listbox-testing.mjs +4 -0
- package/fesm2022/listbox-testing.mjs.map +1 -1
- package/fesm2022/listbox.mjs +184 -205
- package/fesm2022/listbox.mjs.map +1 -1
- package/fesm2022/menu-testing.mjs +11 -0
- package/fesm2022/menu-testing.mjs.map +1 -1
- package/fesm2022/menu.mjs +42 -66
- package/fesm2022/menu.mjs.map +1 -1
- package/fesm2022/private.mjs +19 -13
- package/fesm2022/private.mjs.map +1 -1
- package/fesm2022/tabs.mjs +78 -84
- package/fesm2022/tabs.mjs.map +1 -1
- package/fesm2022/toolbar-testing.mjs +5 -1
- package/fesm2022/toolbar-testing.mjs.map +1 -1
- package/fesm2022/toolbar.mjs +21 -31
- package/fesm2022/toolbar.mjs.map +1 -1
- package/fesm2022/tree-testing.mjs +12 -0
- package/fesm2022/tree-testing.mjs.map +1 -1
- package/fesm2022/tree.mjs +118 -146
- package/fesm2022/tree.mjs.map +1 -1
- package/package.json +6 -6
- package/types/_accordion-chunk.d.ts +2 -2
- package/types/_collection-chunk.d.ts +42 -0
- package/types/_expansion-chunk.d.ts +1 -1
- package/types/_grid-chunk.d.ts +9 -3
- package/types/_keyboard-event-manager-chunk.d.ts +1 -1
- package/types/_list-chunk.d.ts +1 -1
- package/types/_list-navigation-chunk.d.ts +1 -1
- package/types/_listbox-chunk.d.ts +1 -1
- package/types/_menu-chunk.d.ts +1 -1
- package/types/_tabs-chunk.d.ts +1 -1
- package/types/_toolbar-chunk.d.ts +1 -1
- package/types/_tree-chunk.d.ts +1 -1
- package/types/accordion.d.ts +7 -13
- package/types/combobox-testing.d.ts +63 -0
- package/types/combobox.d.ts +96 -193
- package/types/grid-testing.d.ts +4 -0
- package/types/grid.d.ts +101 -97
- package/types/listbox-testing.d.ts +25 -0
- package/types/listbox.d.ts +55 -60
- package/types/menu-testing.d.ts +6 -0
- package/types/menu.d.ts +17 -13
- package/types/private.d.ts +24 -138
- package/types/tabs.d.ts +69 -72
- package/types/toolbar-testing.d.ts +4 -0
- package/types/toolbar.d.ts +5 -6
- package/types/tree-testing.d.ts +8 -0
- package/types/tree.d.ts +7 -14
- package/fesm2022/_combobox-chunk.mjs +0 -478
- package/fesm2022/_combobox-chunk.mjs.map +0 -1
- package/fesm2022/_combobox-listbox-chunk.mjs.map +0 -1
- package/fesm2022/_combobox-tree-chunk.mjs.map +0 -1
- package/fesm2022/_element-chunk.mjs +0 -6
- package/fesm2022/_element-chunk.mjs.map +0 -1
- package/fesm2022/_signal-like-chunk.mjs.map +0 -1
- package/fesm2022/simple-combobox.mjs +0 -443
- package/fesm2022/simple-combobox.mjs.map +0 -1
- package/types/_combobox-chunk.d.ts +0 -224
- package/types/_element-chunk.d.ts +0 -10
- package/types/_signal-like-chunk.d.ts +0 -14
- package/types/simple-combobox.d.ts +0 -124
package/fesm2022/listbox.mjs
CHANGED
|
@@ -1,191 +1,26 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, ElementRef,
|
|
2
|
+
import { InjectionToken, input, inject, ElementRef, booleanAttribute, model, computed, signal, afterNextRender, afterRenderEffect, untracked, Directive } from '@angular/core';
|
|
3
3
|
import { Directionality } from '@angular/cdk/bidi';
|
|
4
4
|
import { _IdGenerator } from '@angular/cdk/a11y';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
import './_signal-like-chunk.mjs';
|
|
9
|
-
import '@angular/core/primitives/signals';
|
|
5
|
+
import { ListboxPattern, OptionPattern } from './_option-chunk.mjs';
|
|
6
|
+
import { SortedCollection } from './_collection-chunk.mjs';
|
|
7
|
+
import { tabIndexTransform } from './_transforms-chunk.mjs';
|
|
10
8
|
import './_list-chunk.mjs';
|
|
11
9
|
import './_list-navigation-chunk.mjs';
|
|
12
10
|
import './_list-typeahead-chunk.mjs';
|
|
13
11
|
import './_click-event-manager-chunk.mjs';
|
|
14
|
-
import '
|
|
15
|
-
import './_combobox-chunk.mjs';
|
|
12
|
+
import '@angular/core/primitives/signals';
|
|
16
13
|
|
|
17
14
|
const LISTBOX = new InjectionToken('LISTBOX');
|
|
18
15
|
|
|
19
|
-
class Option {
|
|
20
|
-
element = inject(ElementRef).nativeElement;
|
|
21
|
-
active = computed(() => this._pattern.active(), ...(ngDevMode ? [{
|
|
22
|
-
debugName: "active"
|
|
23
|
-
}] : []));
|
|
24
|
-
_listbox = inject(LISTBOX);
|
|
25
|
-
id = input(inject(_IdGenerator).getId('ng-option-', true), ...(ngDevMode ? [{
|
|
26
|
-
debugName: "id"
|
|
27
|
-
}] : []));
|
|
28
|
-
_listboxPattern = computed(() => this._listbox._pattern, ...(ngDevMode ? [{
|
|
29
|
-
debugName: "_listboxPattern"
|
|
30
|
-
}] : []));
|
|
31
|
-
value = input.required(...(ngDevMode ? [{
|
|
32
|
-
debugName: "value"
|
|
33
|
-
}] : []));
|
|
34
|
-
disabled = input(false, {
|
|
35
|
-
...(ngDevMode ? {
|
|
36
|
-
debugName: "disabled"
|
|
37
|
-
} : {}),
|
|
38
|
-
transform: booleanAttribute
|
|
39
|
-
});
|
|
40
|
-
label = input(...(ngDevMode ? [undefined, {
|
|
41
|
-
debugName: "label"
|
|
42
|
-
}] : []));
|
|
43
|
-
selected = computed(() => this._pattern.selected(), ...(ngDevMode ? [{
|
|
44
|
-
debugName: "selected"
|
|
45
|
-
}] : []));
|
|
46
|
-
_pattern = new OptionPattern({
|
|
47
|
-
...this,
|
|
48
|
-
id: this.id,
|
|
49
|
-
value: this.value,
|
|
50
|
-
listbox: this._listboxPattern,
|
|
51
|
-
element: () => this.element,
|
|
52
|
-
searchTerm: () => this.label() ?? ''
|
|
53
|
-
});
|
|
54
|
-
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
55
|
-
minVersion: "12.0.0",
|
|
56
|
-
version: "22.0.0-next.9",
|
|
57
|
-
ngImport: i0,
|
|
58
|
-
type: Option,
|
|
59
|
-
deps: [],
|
|
60
|
-
target: i0.ɵɵFactoryTarget.Directive
|
|
61
|
-
});
|
|
62
|
-
static ɵdir = i0.ɵɵngDeclareDirective({
|
|
63
|
-
minVersion: "17.1.0",
|
|
64
|
-
version: "22.0.0-next.9",
|
|
65
|
-
type: Option,
|
|
66
|
-
isStandalone: true,
|
|
67
|
-
selector: "[ngOption]",
|
|
68
|
-
inputs: {
|
|
69
|
-
id: {
|
|
70
|
-
classPropertyName: "id",
|
|
71
|
-
publicName: "id",
|
|
72
|
-
isSignal: true,
|
|
73
|
-
isRequired: false,
|
|
74
|
-
transformFunction: null
|
|
75
|
-
},
|
|
76
|
-
value: {
|
|
77
|
-
classPropertyName: "value",
|
|
78
|
-
publicName: "value",
|
|
79
|
-
isSignal: true,
|
|
80
|
-
isRequired: true,
|
|
81
|
-
transformFunction: null
|
|
82
|
-
},
|
|
83
|
-
disabled: {
|
|
84
|
-
classPropertyName: "disabled",
|
|
85
|
-
publicName: "disabled",
|
|
86
|
-
isSignal: true,
|
|
87
|
-
isRequired: false,
|
|
88
|
-
transformFunction: null
|
|
89
|
-
},
|
|
90
|
-
label: {
|
|
91
|
-
classPropertyName: "label",
|
|
92
|
-
publicName: "label",
|
|
93
|
-
isSignal: true,
|
|
94
|
-
isRequired: false,
|
|
95
|
-
transformFunction: null
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
host: {
|
|
99
|
-
attributes: {
|
|
100
|
-
"role": "option"
|
|
101
|
-
},
|
|
102
|
-
properties: {
|
|
103
|
-
"attr.data-active": "active()",
|
|
104
|
-
"attr.id": "_pattern.id()",
|
|
105
|
-
"attr.tabindex": "_pattern.tabIndex()",
|
|
106
|
-
"attr.aria-selected": "_pattern.selected()",
|
|
107
|
-
"attr.aria-disabled": "_pattern.disabled()"
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
exportAs: ["ngOption"],
|
|
111
|
-
ngImport: i0
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
i0.ɵɵngDeclareClassMetadata({
|
|
115
|
-
minVersion: "12.0.0",
|
|
116
|
-
version: "22.0.0-next.9",
|
|
117
|
-
ngImport: i0,
|
|
118
|
-
type: Option,
|
|
119
|
-
decorators: [{
|
|
120
|
-
type: Directive,
|
|
121
|
-
args: [{
|
|
122
|
-
selector: '[ngOption]',
|
|
123
|
-
exportAs: 'ngOption',
|
|
124
|
-
host: {
|
|
125
|
-
'role': 'option',
|
|
126
|
-
'[attr.data-active]': 'active()',
|
|
127
|
-
'[attr.id]': '_pattern.id()',
|
|
128
|
-
'[attr.tabindex]': '_pattern.tabIndex()',
|
|
129
|
-
'[attr.aria-selected]': '_pattern.selected()',
|
|
130
|
-
'[attr.aria-disabled]': '_pattern.disabled()'
|
|
131
|
-
}
|
|
132
|
-
}]
|
|
133
|
-
}],
|
|
134
|
-
propDecorators: {
|
|
135
|
-
id: [{
|
|
136
|
-
type: i0.Input,
|
|
137
|
-
args: [{
|
|
138
|
-
isSignal: true,
|
|
139
|
-
alias: "id",
|
|
140
|
-
required: false
|
|
141
|
-
}]
|
|
142
|
-
}],
|
|
143
|
-
value: [{
|
|
144
|
-
type: i0.Input,
|
|
145
|
-
args: [{
|
|
146
|
-
isSignal: true,
|
|
147
|
-
alias: "value",
|
|
148
|
-
required: true
|
|
149
|
-
}]
|
|
150
|
-
}],
|
|
151
|
-
disabled: [{
|
|
152
|
-
type: i0.Input,
|
|
153
|
-
args: [{
|
|
154
|
-
isSignal: true,
|
|
155
|
-
alias: "disabled",
|
|
156
|
-
required: false
|
|
157
|
-
}]
|
|
158
|
-
}],
|
|
159
|
-
label: [{
|
|
160
|
-
type: i0.Input,
|
|
161
|
-
args: [{
|
|
162
|
-
isSignal: true,
|
|
163
|
-
alias: "label",
|
|
164
|
-
required: false
|
|
165
|
-
}]
|
|
166
|
-
}]
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
|
|
170
16
|
class Listbox {
|
|
171
17
|
id = input(inject(_IdGenerator).getId('ng-listbox-', true), ...(ngDevMode ? [{
|
|
172
18
|
debugName: "id"
|
|
173
19
|
}] : []));
|
|
174
|
-
_popup = inject(ComboboxPopup, {
|
|
175
|
-
optional: true
|
|
176
|
-
});
|
|
177
20
|
_elementRef = inject(ElementRef);
|
|
178
21
|
element = this._elementRef.nativeElement;
|
|
179
|
-
|
|
180
|
-
...(ngDevMode ? {
|
|
181
|
-
debugName: "_options"
|
|
182
|
-
} : {}),
|
|
183
|
-
descendants: true
|
|
184
|
-
});
|
|
22
|
+
_collection = new SortedCollection();
|
|
185
23
|
textDirection = inject(Directionality).valueSignal.asReadonly();
|
|
186
|
-
items = computed(() => this._options().map(option => option._pattern), ...(ngDevMode ? [{
|
|
187
|
-
debugName: "items"
|
|
188
|
-
}] : []));
|
|
189
24
|
orientation = input('vertical', ...(ngDevMode ? [{
|
|
190
25
|
debugName: "orientation"
|
|
191
26
|
}] : []));
|
|
@@ -232,7 +67,8 @@ class Listbox {
|
|
|
232
67
|
...(ngDevMode ? {
|
|
233
68
|
debugName: "tabIndex"
|
|
234
69
|
} : {}),
|
|
235
|
-
|
|
70
|
+
alias: 'tabindex',
|
|
71
|
+
transform: tabIndexTransform
|
|
236
72
|
});
|
|
237
73
|
value = model([], ...(ngDevMode ? [{
|
|
238
74
|
debugName: "value"
|
|
@@ -240,22 +76,24 @@ class Listbox {
|
|
|
240
76
|
_pattern;
|
|
241
77
|
activeDescendant;
|
|
242
78
|
constructor() {
|
|
79
|
+
const orderedItemPatterns = computed(() => this._collection.orderedItems().map(option => option._pattern), ...(ngDevMode ? [{
|
|
80
|
+
debugName: "orderedItemPatterns"
|
|
81
|
+
}] : []));
|
|
243
82
|
const inputs = {
|
|
244
83
|
...this,
|
|
245
84
|
id: this.id,
|
|
246
|
-
items:
|
|
85
|
+
items: orderedItemPatterns,
|
|
247
86
|
activeItem: signal(undefined),
|
|
248
87
|
textDirection: this.textDirection,
|
|
249
|
-
element: () => this._elementRef.nativeElement
|
|
250
|
-
combobox: () => this._popup?.combobox?._pattern
|
|
88
|
+
element: () => this._elementRef.nativeElement
|
|
251
89
|
};
|
|
252
|
-
this._pattern =
|
|
90
|
+
this._pattern = new ListboxPattern(inputs);
|
|
253
91
|
this.activeDescendant = computed(() => this._pattern.activeDescendant(), ...(ngDevMode ? [{
|
|
254
92
|
debugName: "activeDescendant"
|
|
255
93
|
}] : []));
|
|
256
|
-
|
|
257
|
-
this.
|
|
258
|
-
}
|
|
94
|
+
afterNextRender(() => {
|
|
95
|
+
this._collection.startObserving(this.element);
|
|
96
|
+
});
|
|
259
97
|
afterRenderEffect({
|
|
260
98
|
read: () => {
|
|
261
99
|
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
@@ -288,6 +126,9 @@ class Listbox {
|
|
|
288
126
|
}
|
|
289
127
|
});
|
|
290
128
|
}
|
|
129
|
+
ngOnDestroy() {
|
|
130
|
+
this._collection.stopObserving();
|
|
131
|
+
}
|
|
291
132
|
scrollActiveItemIntoView(options = {
|
|
292
133
|
block: 'nearest'
|
|
293
134
|
}) {
|
|
@@ -298,15 +139,15 @@ class Listbox {
|
|
|
298
139
|
}
|
|
299
140
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
300
141
|
minVersion: "12.0.0",
|
|
301
|
-
version: "22.0.0-next.
|
|
142
|
+
version: "22.0.0-next.10",
|
|
302
143
|
ngImport: i0,
|
|
303
144
|
type: Listbox,
|
|
304
145
|
deps: [],
|
|
305
146
|
target: i0.ɵɵFactoryTarget.Directive
|
|
306
147
|
});
|
|
307
148
|
static ɵdir = i0.ɵɵngDeclareDirective({
|
|
308
|
-
minVersion: "17.
|
|
309
|
-
version: "22.0.0-next.
|
|
149
|
+
minVersion: "17.1.0",
|
|
150
|
+
version: "22.0.0-next.10",
|
|
310
151
|
type: Listbox,
|
|
311
152
|
isStandalone: true,
|
|
312
153
|
selector: "[ngListbox]",
|
|
@@ -383,7 +224,7 @@ class Listbox {
|
|
|
383
224
|
},
|
|
384
225
|
tabIndex: {
|
|
385
226
|
classPropertyName: "tabIndex",
|
|
386
|
-
publicName: "
|
|
227
|
+
publicName: "tabindex",
|
|
387
228
|
isSignal: true,
|
|
388
229
|
isRequired: false,
|
|
389
230
|
transformFunction: null
|
|
@@ -422,22 +263,13 @@ class Listbox {
|
|
|
422
263
|
provide: LISTBOX,
|
|
423
264
|
useExisting: Listbox
|
|
424
265
|
}],
|
|
425
|
-
queries: [{
|
|
426
|
-
propertyName: "_options",
|
|
427
|
-
predicate: Option,
|
|
428
|
-
descendants: true,
|
|
429
|
-
isSignal: true
|
|
430
|
-
}],
|
|
431
266
|
exportAs: ["ngListbox"],
|
|
432
|
-
hostDirectives: [{
|
|
433
|
-
directive: ComboboxPopup
|
|
434
|
-
}],
|
|
435
267
|
ngImport: i0
|
|
436
268
|
});
|
|
437
269
|
}
|
|
438
270
|
i0.ɵɵngDeclareClassMetadata({
|
|
439
271
|
minVersion: "12.0.0",
|
|
440
|
-
version: "22.0.0-next.
|
|
272
|
+
version: "22.0.0-next.10",
|
|
441
273
|
ngImport: i0,
|
|
442
274
|
type: Listbox,
|
|
443
275
|
decorators: [{
|
|
@@ -458,7 +290,6 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
458
290
|
'(click)': '_pattern.onClick($event)',
|
|
459
291
|
'(focusin)': '_pattern.onFocusIn()'
|
|
460
292
|
},
|
|
461
|
-
hostDirectives: [ComboboxPopup],
|
|
462
293
|
providers: [{
|
|
463
294
|
provide: LISTBOX,
|
|
464
295
|
useExisting: Listbox
|
|
@@ -475,15 +306,6 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
475
306
|
required: false
|
|
476
307
|
}]
|
|
477
308
|
}],
|
|
478
|
-
_options: [{
|
|
479
|
-
type: i0.ContentChildren,
|
|
480
|
-
args: [i0.forwardRef(() => Option), {
|
|
481
|
-
...{
|
|
482
|
-
descendants: true
|
|
483
|
-
},
|
|
484
|
-
isSignal: true
|
|
485
|
-
}]
|
|
486
|
-
}],
|
|
487
309
|
orientation: [{
|
|
488
310
|
type: i0.Input,
|
|
489
311
|
args: [{
|
|
@@ -560,7 +382,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
560
382
|
type: i0.Input,
|
|
561
383
|
args: [{
|
|
562
384
|
isSignal: true,
|
|
563
|
-
alias: "
|
|
385
|
+
alias: "tabindex",
|
|
564
386
|
required: false
|
|
565
387
|
}]
|
|
566
388
|
}],
|
|
@@ -578,5 +400,162 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
578
400
|
}
|
|
579
401
|
});
|
|
580
402
|
|
|
581
|
-
|
|
403
|
+
class Option {
|
|
404
|
+
element = inject(ElementRef).nativeElement;
|
|
405
|
+
active = computed(() => this._pattern.active(), ...(ngDevMode ? [{
|
|
406
|
+
debugName: "active"
|
|
407
|
+
}] : []));
|
|
408
|
+
_listbox = inject(LISTBOX);
|
|
409
|
+
id = input(inject(_IdGenerator).getId('ng-option-', true), ...(ngDevMode ? [{
|
|
410
|
+
debugName: "id"
|
|
411
|
+
}] : []));
|
|
412
|
+
_listboxPattern = computed(() => this._listbox._pattern, ...(ngDevMode ? [{
|
|
413
|
+
debugName: "_listboxPattern"
|
|
414
|
+
}] : []));
|
|
415
|
+
value = input.required(...(ngDevMode ? [{
|
|
416
|
+
debugName: "value"
|
|
417
|
+
}] : []));
|
|
418
|
+
disabled = input(false, {
|
|
419
|
+
...(ngDevMode ? {
|
|
420
|
+
debugName: "disabled"
|
|
421
|
+
} : {}),
|
|
422
|
+
transform: booleanAttribute
|
|
423
|
+
});
|
|
424
|
+
label = input(...(ngDevMode ? [undefined, {
|
|
425
|
+
debugName: "label"
|
|
426
|
+
}] : []));
|
|
427
|
+
selected = computed(() => this._pattern.selected(), ...(ngDevMode ? [{
|
|
428
|
+
debugName: "selected"
|
|
429
|
+
}] : []));
|
|
430
|
+
_pattern = new OptionPattern({
|
|
431
|
+
...this,
|
|
432
|
+
id: this.id,
|
|
433
|
+
value: this.value,
|
|
434
|
+
listbox: this._listboxPattern,
|
|
435
|
+
element: () => this.element,
|
|
436
|
+
searchTerm: () => this.label() ?? ''
|
|
437
|
+
});
|
|
438
|
+
ngOnInit() {
|
|
439
|
+
this._listbox._collection.register(this);
|
|
440
|
+
}
|
|
441
|
+
ngOnDestroy() {
|
|
442
|
+
this._listbox._collection.unregister(this);
|
|
443
|
+
}
|
|
444
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
445
|
+
minVersion: "12.0.0",
|
|
446
|
+
version: "22.0.0-next.10",
|
|
447
|
+
ngImport: i0,
|
|
448
|
+
type: Option,
|
|
449
|
+
deps: [],
|
|
450
|
+
target: i0.ɵɵFactoryTarget.Directive
|
|
451
|
+
});
|
|
452
|
+
static ɵdir = i0.ɵɵngDeclareDirective({
|
|
453
|
+
minVersion: "17.1.0",
|
|
454
|
+
version: "22.0.0-next.10",
|
|
455
|
+
type: Option,
|
|
456
|
+
isStandalone: true,
|
|
457
|
+
selector: "[ngOption]",
|
|
458
|
+
inputs: {
|
|
459
|
+
id: {
|
|
460
|
+
classPropertyName: "id",
|
|
461
|
+
publicName: "id",
|
|
462
|
+
isSignal: true,
|
|
463
|
+
isRequired: false,
|
|
464
|
+
transformFunction: null
|
|
465
|
+
},
|
|
466
|
+
value: {
|
|
467
|
+
classPropertyName: "value",
|
|
468
|
+
publicName: "value",
|
|
469
|
+
isSignal: true,
|
|
470
|
+
isRequired: true,
|
|
471
|
+
transformFunction: null
|
|
472
|
+
},
|
|
473
|
+
disabled: {
|
|
474
|
+
classPropertyName: "disabled",
|
|
475
|
+
publicName: "disabled",
|
|
476
|
+
isSignal: true,
|
|
477
|
+
isRequired: false,
|
|
478
|
+
transformFunction: null
|
|
479
|
+
},
|
|
480
|
+
label: {
|
|
481
|
+
classPropertyName: "label",
|
|
482
|
+
publicName: "label",
|
|
483
|
+
isSignal: true,
|
|
484
|
+
isRequired: false,
|
|
485
|
+
transformFunction: null
|
|
486
|
+
}
|
|
487
|
+
},
|
|
488
|
+
host: {
|
|
489
|
+
attributes: {
|
|
490
|
+
"role": "option"
|
|
491
|
+
},
|
|
492
|
+
properties: {
|
|
493
|
+
"attr.data-active": "active()",
|
|
494
|
+
"attr.id": "_pattern.id()",
|
|
495
|
+
"attr.tabindex": "_pattern.tabIndex()",
|
|
496
|
+
"attr.aria-selected": "_pattern.selected()",
|
|
497
|
+
"attr.aria-disabled": "_pattern.disabled()"
|
|
498
|
+
}
|
|
499
|
+
},
|
|
500
|
+
exportAs: ["ngOption"],
|
|
501
|
+
ngImport: i0
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
505
|
+
minVersion: "12.0.0",
|
|
506
|
+
version: "22.0.0-next.10",
|
|
507
|
+
ngImport: i0,
|
|
508
|
+
type: Option,
|
|
509
|
+
decorators: [{
|
|
510
|
+
type: Directive,
|
|
511
|
+
args: [{
|
|
512
|
+
selector: '[ngOption]',
|
|
513
|
+
exportAs: 'ngOption',
|
|
514
|
+
host: {
|
|
515
|
+
'role': 'option',
|
|
516
|
+
'[attr.data-active]': 'active()',
|
|
517
|
+
'[attr.id]': '_pattern.id()',
|
|
518
|
+
'[attr.tabindex]': '_pattern.tabIndex()',
|
|
519
|
+
'[attr.aria-selected]': '_pattern.selected()',
|
|
520
|
+
'[attr.aria-disabled]': '_pattern.disabled()'
|
|
521
|
+
}
|
|
522
|
+
}]
|
|
523
|
+
}],
|
|
524
|
+
propDecorators: {
|
|
525
|
+
id: [{
|
|
526
|
+
type: i0.Input,
|
|
527
|
+
args: [{
|
|
528
|
+
isSignal: true,
|
|
529
|
+
alias: "id",
|
|
530
|
+
required: false
|
|
531
|
+
}]
|
|
532
|
+
}],
|
|
533
|
+
value: [{
|
|
534
|
+
type: i0.Input,
|
|
535
|
+
args: [{
|
|
536
|
+
isSignal: true,
|
|
537
|
+
alias: "value",
|
|
538
|
+
required: true
|
|
539
|
+
}]
|
|
540
|
+
}],
|
|
541
|
+
disabled: [{
|
|
542
|
+
type: i0.Input,
|
|
543
|
+
args: [{
|
|
544
|
+
isSignal: true,
|
|
545
|
+
alias: "disabled",
|
|
546
|
+
required: false
|
|
547
|
+
}]
|
|
548
|
+
}],
|
|
549
|
+
label: [{
|
|
550
|
+
type: i0.Input,
|
|
551
|
+
args: [{
|
|
552
|
+
isSignal: true,
|
|
553
|
+
alias: "label",
|
|
554
|
+
required: false
|
|
555
|
+
}]
|
|
556
|
+
}]
|
|
557
|
+
}
|
|
558
|
+
});
|
|
559
|
+
|
|
560
|
+
export { Listbox, Option };
|
|
582
561
|
//# sourceMappingURL=listbox.mjs.map
|
package/fesm2022/listbox.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listbox.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/listbox/tokens.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/listbox/option.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/listbox/listbox.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {InjectionToken} from '@angular/core';\nimport type {Listbox} from './listbox';\n\nexport const LISTBOX = new InjectionToken<Listbox<any>>('LISTBOX');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {booleanAttribute, computed, Directive, ElementRef, inject, input} from '@angular/core';\nimport {_IdGenerator} from '@angular/cdk/a11y';\nimport {OptionPattern} from '../private';\nimport {LISTBOX} from './tokens';\n\n/**\n * A selectable option in an `ngListbox`.\n *\n * This directive should be applied to an element (e.g., `<li>`, `<div>`) within an\n * `ngListbox`. The `value` input is used to identify the option, and the `label` input provides\n * the accessible name for the option.\n *\n * ```html\n * <li ngOption value=\"item-id\" label=\"Item Name\">\n * Item Name\n * </li>\n * ```\n *\n * @developerPreview 21.0\n *\n * @see [Listbox](guide/aria/listbox)\n * @see [Autocomplete](guide/aria/autocomplete)\n * @see [Select](guide/aria/select)\n * @see [Multiselect](guide/aria/multiselect)\n */\n@Directive({\n selector: '[ngOption]',\n exportAs: 'ngOption',\n host: {\n 'role': 'option',\n '[attr.data-active]': 'active()',\n '[attr.id]': '_pattern.id()',\n '[attr.tabindex]': '_pattern.tabIndex()',\n '[attr.aria-selected]': '_pattern.selected()',\n '[attr.aria-disabled]': '_pattern.disabled()',\n },\n})\nexport class Option<V> {\n /** A reference to the host element. */\n readonly element = inject(ElementRef).nativeElement as HTMLElement;\n\n /** Whether the option is currently active (focused). */\n readonly active = computed(() => this._pattern.active());\n\n /** The parent Listbox. */\n private readonly _listbox = inject(LISTBOX);\n\n /** A unique identifier for the option. */\n readonly id = input(inject(_IdGenerator).getId('ng-option-', true));\n\n /** The parent Listbox UIPattern. */\n private readonly _listboxPattern = computed(() => this._listbox._pattern);\n\n /** The value of the option. */\n readonly value = input.required<V>();\n\n /** Whether an item is disabled. */\n readonly disabled = input(false, {transform: booleanAttribute});\n\n /** The text used by the typeahead search. */\n readonly label = input<string>();\n\n /** Whether the option is selected. */\n readonly selected = computed(() => this._pattern.selected());\n\n /** The Option UIPattern. */\n readonly _pattern = new OptionPattern<V>({\n ...this,\n id: this.id,\n value: this.value,\n listbox: this._listboxPattern,\n element: () => this.element,\n searchTerm: () => this.label() ?? '',\n });\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n afterRenderEffect,\n booleanAttribute,\n computed,\n contentChildren,\n Directive,\n ElementRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n Signal,\n untracked,\n} from '@angular/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {_IdGenerator} from '@angular/cdk/a11y';\nimport {ComboboxListboxPattern, ListboxPattern, OptionPattern} from '../private';\nimport {ComboboxPopup} from '../combobox';\nimport {Option} from './option';\nimport {LISTBOX} from './tokens';\n\n/**\n * Represents a container used to display a list of items for a user to select from.\n *\n * The `ngListbox` is meant to be used in conjunction with `ngOption` directives to create a\n * selectable list. It supports single and multiple selection modes, as well as various focus and\n * orientation strategies.\n *\n * ```html\n * <ul ngListbox [(value)]=\"selectedItems\" [multi]=\"true\" orientation=\"vertical\">\n * @for (item of items; track item.id) {\n * <li ngOption [value]=\"item.id\" [label]=\"item.name\" [disabled]=\"item.disabled\">\n * {{item.name}}\n * </li>\n * }\n * </ul>\n * ```\n *\n * @developerPreview 21.0\n *\n * @see [Listbox](guide/aria/listbox)\n * @see [Autocomplete](guide/aria/autocomplete)\n * @see [Select](guide/aria/select)\n * @see [Multiselect](guide/aria/multiselect)\n */\n@Directive({\n selector: '[ngListbox]',\n exportAs: 'ngListbox',\n host: {\n 'role': 'listbox',\n '[attr.id]': 'id()',\n '[attr.tabindex]': 'tabIndex() !== undefined ? tabIndex() : _pattern.tabIndex()',\n '[attr.aria-readonly]': '_pattern.readonly()',\n '[attr.aria-disabled]': '_pattern.disabled()',\n '[attr.aria-orientation]': '_pattern.orientation()',\n '[attr.aria-multiselectable]': '_pattern.multi()',\n '[attr.aria-activedescendant]': '_pattern.activeDescendant()',\n '(keydown)': '_pattern.onKeydown($event)',\n '(click)': '_pattern.onClick($event)',\n '(focusin)': '_pattern.onFocusIn()',\n },\n hostDirectives: [ComboboxPopup],\n providers: [{provide: LISTBOX, useExisting: Listbox}],\n})\nexport class Listbox<V> {\n /** A unique identifier for the listbox. */\n readonly id = input(inject(_IdGenerator).getId('ng-listbox-', true));\n\n /** A reference to the parent combobox popup, if one exists. */\n private readonly _popup = inject<ComboboxPopup<V>>(ComboboxPopup, {\n optional: true,\n });\n\n /** A reference to the host element. */\n private readonly _elementRef = inject(ElementRef);\n\n /** A reference to the host element. */\n readonly element = this._elementRef.nativeElement as HTMLElement;\n\n /** The Options nested inside of the Listbox. */\n private readonly _options = contentChildren(Option, {descendants: true});\n\n /** A signal wrapper for directionality. */\n protected readonly textDirection = inject(Directionality).valueSignal.asReadonly();\n\n /** The Option UIPatterns of the child Options. */\n protected readonly items = computed<OptionPattern<V>[]>(() =>\n this._options().map((option: Option<V>) => option._pattern),\n );\n\n /** Whether the list is vertically or horizontally oriented. */\n readonly orientation = input<'vertical' | 'horizontal'>('vertical');\n\n /** Whether multiple items in the list can be selected at once. */\n readonly multi = input(false, {transform: booleanAttribute});\n\n /** Whether focus should wrap when navigating. */\n readonly wrap = input(true, {transform: booleanAttribute});\n\n /**\n * Whether to allow disabled items to receive focus. When `true`, disabled items are\n * focusable but not interactive. When `false`, disabled items are skipped during navigation.\n */\n readonly softDisabled = input(true, {transform: booleanAttribute});\n\n /**\n * The focus strategy used by the list.\n * - `roving`: Focus is moved to the active item using `tabindex`.\n * - `activedescendant`: Focus remains on the listbox container, and `aria-activedescendant` is used to indicate the active item.\n */\n readonly focusMode = input<'roving' | 'activedescendant'>('roving');\n\n /**\n * The selection strategy used by the list.\n * - `follow`: The focused item is automatically selected.\n * - `explicit`: Items are selected explicitly by the user (e.g., via click or spacebar).\n */\n readonly selectionMode = input<'follow' | 'explicit'>('follow');\n\n /** The amount of time before the typeahead search is reset. */\n readonly typeaheadDelay = input<number>(500); // Picked arbitrarily.\n\n /** Whether the listbox is disabled. */\n readonly disabled = input(false, {transform: booleanAttribute});\n\n /** Whether the listbox is readonly. */\n readonly readonly = input(false, {transform: booleanAttribute});\n\n /** The tabindex of the listbox. */\n readonly tabIndex = input(undefined, {\n transform: (v: string | number | undefined) =>\n v === undefined ? undefined : numberAttribute(v),\n });\n\n /** The values of the currently selected items. */\n readonly value = model<V[]>([]);\n\n /** The Listbox UIPattern. */\n readonly _pattern: ListboxPattern<V>;\n\n /** The ID of the active descendant in the listbox. */\n readonly activeDescendant: Signal<string | undefined>;\n\n constructor() {\n const inputs = {\n ...this,\n id: this.id,\n items: this.items,\n activeItem: signal(undefined),\n textDirection: this.textDirection,\n element: () => this._elementRef.nativeElement,\n combobox: () => this._popup?.combobox?._pattern,\n };\n\n this._pattern = this._popup?.combobox\n ? new ComboboxListboxPattern<V>(inputs)\n : new ListboxPattern<V>(inputs);\n\n this.activeDescendant = computed(() => this._pattern.activeDescendant());\n\n if (this._popup) {\n this._popup._controls.set(this._pattern as ComboboxListboxPattern<V>);\n }\n\n // Check for any violationns after the DOM has been updated.\n afterRenderEffect({\n read: () => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const violations = this._pattern.validate();\n for (const violation of violations) {\n console.error(violation);\n }\n }\n },\n });\n\n afterRenderEffect({write: () => this._pattern.setDefaultStateEffect()});\n\n // Ensure that if the active item is removed from\n // the list, the listbox updates it's focus state.\n afterRenderEffect({\n write: () => {\n const items = inputs.items();\n const activeItem = untracked(() => inputs.activeItem());\n\n if (!items.some(i => i === activeItem) && activeItem) {\n this._pattern.listBehavior.unfocus();\n }\n },\n });\n\n // Ensure that the value is always in sync with the available options.\n // This needs to be after the render for the value to always be available.\n afterRenderEffect({\n write: () => {\n const items = inputs.items();\n const value = untracked(() => this.value());\n\n if (items && value.some(v => !items.some(i => i.value() === v))) {\n this.value.set(value.filter(v => items.some(i => i.value() === v)));\n }\n },\n });\n }\n\n scrollActiveItemIntoView(options: ScrollIntoViewOptions = {block: 'nearest'}) {\n this._pattern.inputs.activeItem()?.element()?.scrollIntoView(options);\n }\n\n /** Navigates to the first item in the listbox. */\n gotoFirst() {\n this._pattern.listBehavior.first();\n }\n}\n"],"names":["LISTBOX","InjectionToken","Option","element","inject","ElementRef","nativeElement","active","computed","_pattern","_listbox","id","input","_IdGenerator","getId","_listboxPattern","value","required","disabled","transform","booleanAttribute","label","selected","OptionPattern","listbox","searchTerm","deps","target","i0","ɵɵFactoryTarget","Directive","isStandalone","selector","inputs","classPropertyName","publicName","isSignal","isRequired","transformFunction","host","attributes","properties","exportAs","ngImport","decorators","args","Listbox","_popup","ComboboxPopup","optional","_elementRef","_options","contentChildren","descendants","textDirection","Directionality","valueSignal","asReadonly","items","map","option","orientation","multi","wrap","softDisabled","focusMode","selectionMode","typeaheadDelay","ngDevMode","debugName","readonly","tabIndex","undefined","v","numberAttribute","model","activeDescendant","constructor","activeItem","signal","combobox","ComboboxListboxPattern","ListboxPattern","_controls","set","afterRenderEffect","read","violations","validate","violation","console","error","write","setDefaultStateEffect","untracked","some","i","listBehavior","unfocus","filter","scrollActiveItemIntoView","options","block","scrollIntoView","gotoFirst","first","ɵdir","ɵɵngDeclareDirective","minVersion","version","type","outputs","listeners","providers","provide","useExisting","hostDirectives","directive","i1","ctorParameters","propDecorators","Input","alias","ContentChildren","forwardRef","Output"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"listbox.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/listbox/tokens.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/listbox/listbox.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/listbox/option.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {InjectionToken} from '@angular/core';\nimport type {Listbox} from './listbox';\n\nexport const LISTBOX = new InjectionToken<Listbox<any>>('LISTBOX');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n afterRenderEffect,\n afterNextRender,\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n model,\n OnDestroy,\n signal,\n Signal,\n untracked,\n} from '@angular/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {_IdGenerator} from '@angular/cdk/a11y';\nimport {ListboxPattern, SortedCollection, tabIndexTransform} from '../private';\nimport {Option} from './option';\nimport {LISTBOX} from './tokens';\n\n/**\n * Represents a container used to display a list of items for a user to select from.\n *\n * The `ngListbox` is meant to be used in conjunction with `ngOption` directives to create a\n * selectable list. It supports single and multiple selection modes, as well as various focus and\n * orientation strategies.\n *\n * ```html\n * <ul ngListbox [(value)]=\"selectedItems\" [multi]=\"true\" orientation=\"vertical\">\n * @for (item of items; track item.id) {\n * <li ngOption [value]=\"item.id\" [label]=\"item.name\" [disabled]=\"item.disabled\">\n * {{item.name}}\n * </li>\n * }\n * </ul>\n * ```\n *\n * @developerPreview 21.0\n *\n * @see [Listbox](guide/aria/listbox)\n * @see [Autocomplete](guide/aria/autocomplete)\n * @see [Select](guide/aria/select)\n * @see [Multiselect](guide/aria/multiselect)\n */\n@Directive({\n selector: '[ngListbox]',\n exportAs: 'ngListbox',\n host: {\n 'role': 'listbox',\n '[attr.id]': 'id()',\n '[attr.tabindex]': 'tabIndex() !== undefined ? tabIndex() : _pattern.tabIndex()',\n '[attr.aria-readonly]': '_pattern.readonly()',\n '[attr.aria-disabled]': '_pattern.disabled()',\n '[attr.aria-orientation]': '_pattern.orientation()',\n '[attr.aria-multiselectable]': '_pattern.multi()',\n '[attr.aria-activedescendant]': '_pattern.activeDescendant()',\n '(keydown)': '_pattern.onKeydown($event)',\n '(click)': '_pattern.onClick($event)',\n '(focusin)': '_pattern.onFocusIn()',\n },\n providers: [{provide: LISTBOX, useExisting: Listbox}],\n})\nexport class Listbox<V> implements OnDestroy {\n /** A unique identifier for the listbox. */\n readonly id = input(inject(_IdGenerator).getId('ng-listbox-', true));\n\n /** A reference to the host element. */\n private readonly _elementRef = inject(ElementRef);\n\n /** A reference to the host element. */\n readonly element = this._elementRef.nativeElement as HTMLElement;\n\n /** The collection of Options. */\n readonly _collection = new SortedCollection<Option<V>>();\n\n /** A signal wrapper for directionality. */\n protected readonly textDirection = inject(Directionality).valueSignal.asReadonly();\n\n /** Whether the list is vertically or horizontally oriented. */\n readonly orientation = input<'vertical' | 'horizontal'>('vertical');\n\n /** Whether multiple items in the list can be selected at once. */\n readonly multi = input(false, {transform: booleanAttribute});\n\n /** Whether focus should wrap when navigating. */\n readonly wrap = input(true, {transform: booleanAttribute});\n\n /**\n * Whether to allow disabled items to receive focus. When `true`, disabled items are\n * focusable but not interactive. When `false`, disabled items are skipped during navigation.\n */\n readonly softDisabled = input(true, {transform: booleanAttribute});\n\n /**\n * The focus strategy used by the list.\n * - `roving`: Focus is moved to the active item using `tabindex`.\n * - `activedescendant`: Focus remains on the listbox container, and `aria-activedescendant` is used to indicate the active item.\n */\n readonly focusMode = input<'roving' | 'activedescendant'>('roving');\n\n /**\n * The selection strategy used by the list.\n * - `follow`: The focused item is automatically selected.\n * - `explicit`: Items are selected explicitly by the user (e.g., via click or spacebar).\n */\n readonly selectionMode = input<'follow' | 'explicit'>('follow');\n\n /** The amount of time before the typeahead search is reset. */\n readonly typeaheadDelay = input<number>(500); // Picked arbitrarily.\n\n /** Whether the listbox is disabled. */\n readonly disabled = input(false, {transform: booleanAttribute});\n\n /** Whether the listbox is readonly. */\n readonly readonly = input(false, {transform: booleanAttribute});\n\n /** The tabindex of the listbox. */\n readonly tabIndex = input(undefined, {\n alias: 'tabindex',\n transform: tabIndexTransform,\n });\n\n /** The values of the currently selected items. */\n readonly value = model<V[]>([]);\n\n /** The Listbox UIPattern. */\n readonly _pattern: ListboxPattern<V>;\n\n /** The ID of the active descendant in the listbox. */\n readonly activeDescendant: Signal<string | undefined>;\n\n constructor() {\n // Map directives to their patterns for the ListboxPattern\n const orderedItemPatterns = computed(() =>\n this._collection.orderedItems().map(option => option._pattern),\n );\n\n const inputs = {\n ...this,\n id: this.id,\n items: orderedItemPatterns,\n activeItem: signal(undefined),\n textDirection: this.textDirection,\n element: () => this._elementRef.nativeElement,\n };\n\n this._pattern = new ListboxPattern<V>(inputs);\n\n this.activeDescendant = computed(() => this._pattern.activeDescendant());\n\n afterNextRender(() => {\n this._collection.startObserving(this.element);\n });\n\n // Check for any violationns after the DOM has been updated.\n afterRenderEffect({\n read: () => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const violations = this._pattern.validate();\n for (const violation of violations) {\n console.error(violation);\n }\n }\n },\n });\n\n afterRenderEffect({write: () => this._pattern.setDefaultStateEffect()});\n\n // Ensure that if the active item is removed from\n // the list, the listbox updates it's focus state.\n afterRenderEffect({\n write: () => {\n const items = inputs.items();\n const activeItem = untracked(() => inputs.activeItem());\n\n if (!items.some(i => i === activeItem) && activeItem) {\n this._pattern.listBehavior.unfocus();\n }\n },\n });\n\n // Ensure that the value is always in sync with the available options.\n // This needs to be after the render for the value to always be available.\n afterRenderEffect({\n write: () => {\n const items = inputs.items();\n const value = untracked(() => this.value());\n\n if (items && value.some(v => !items.some(i => i.value() === v))) {\n this.value.set(value.filter(v => items.some(i => i.value() === v)));\n }\n },\n });\n }\n\n ngOnDestroy() {\n this._collection.stopObserving();\n }\n\n scrollActiveItemIntoView(options: ScrollIntoViewOptions = {block: 'nearest'}) {\n this._pattern.inputs.activeItem()?.element()?.scrollIntoView(options);\n }\n\n /** Navigates to the first item in the listbox. */\n gotoFirst() {\n this._pattern.listBehavior.first();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n OnInit,\n OnDestroy,\n} from '@angular/core';\nimport {_IdGenerator} from '@angular/cdk/a11y';\nimport {OptionPattern} from '../private';\nimport {LISTBOX} from './tokens';\n\n/**\n * A selectable option in an `ngListbox`.\n *\n * This directive should be applied to an element (e.g., `<li>`, `<div>`) within an\n * `ngListbox`. The `value` input is used to identify the option, and the `label` input provides\n * the accessible name for the option.\n *\n * ```html\n * <li ngOption value=\"item-id\" label=\"Item Name\">\n * Item Name\n * </li>\n * ```\n *\n * @developerPreview 21.0\n *\n * @see [Listbox](guide/aria/listbox)\n * @see [Autocomplete](guide/aria/autocomplete)\n * @see [Select](guide/aria/select)\n * @see [Multiselect](guide/aria/multiselect)\n */\n@Directive({\n selector: '[ngOption]',\n exportAs: 'ngOption',\n host: {\n 'role': 'option',\n '[attr.data-active]': 'active()',\n '[attr.id]': '_pattern.id()',\n '[attr.tabindex]': '_pattern.tabIndex()',\n '[attr.aria-selected]': '_pattern.selected()',\n '[attr.aria-disabled]': '_pattern.disabled()',\n },\n})\nexport class Option<V> implements OnInit, OnDestroy {\n /** A reference to the host element. */\n readonly element = inject(ElementRef).nativeElement as HTMLElement;\n\n /** Whether the option is currently active (focused). */\n readonly active = computed(() => this._pattern.active());\n\n /** The parent Listbox. */\n private readonly _listbox = inject(LISTBOX);\n\n /** A unique identifier for the option. */\n readonly id = input(inject(_IdGenerator).getId('ng-option-', true));\n\n /** The parent Listbox UIPattern. */\n private readonly _listboxPattern = computed(() => this._listbox._pattern);\n\n /** The value of the option. */\n readonly value = input.required<V>();\n\n /** Whether an item is disabled. */\n readonly disabled = input(false, {transform: booleanAttribute});\n\n /** The text used by the typeahead search. */\n readonly label = input<string>();\n\n /** Whether the option is selected. */\n readonly selected = computed(() => this._pattern.selected());\n\n /** The Option UIPattern. */\n readonly _pattern = new OptionPattern<V>({\n ...this,\n id: this.id,\n value: this.value,\n listbox: this._listboxPattern,\n element: () => this.element,\n searchTerm: () => this.label() ?? '',\n });\n\n ngOnInit() {\n this._listbox._collection.register(this);\n }\n\n ngOnDestroy() {\n this._listbox._collection.unregister(this);\n }\n}\n"],"names":["LISTBOX","InjectionToken","Listbox","id","input","inject","_IdGenerator","getId","_elementRef","ElementRef","element","nativeElement","_collection","SortedCollection","textDirection","Directionality","valueSignal","asReadonly","orientation","multi","transform","booleanAttribute","wrap","softDisabled","focusMode","selectionMode","typeaheadDelay","ngDevMode","debugName","disabled","readonly","tabIndex","undefined","alias","tabIndexTransform","value","model","_pattern","activeDescendant","constructor","orderedItemPatterns","computed","orderedItems","map","option","inputs","items","activeItem","signal","ListboxPattern","afterNextRender","startObserving","afterRenderEffect","read","violations","validate","violation","console","error","write","setDefaultStateEffect","untracked","some","i","listBehavior","unfocus","v","set","filter","ngOnDestroy","stopObserving","scrollActiveItemIntoView","options","block","scrollIntoView","gotoFirst","first","deps","target","i0","ɵɵFactoryTarget","Directive","isStandalone","selector","classPropertyName","publicName","isSignal","isRequired","transformFunction","outputs","host","attributes","listeners","properties","providers","provide","useExisting","exportAs","ngImport","decorators","args","Option","active","_listbox","_listboxPattern","required","label","selected","OptionPattern","listbox","searchTerm","ngOnInit","register","unregister"],"mappings":"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"}
|
|
@@ -28,6 +28,13 @@ class MenuItemHarness extends ComponentHarness {
|
|
|
28
28
|
}
|
|
29
29
|
return null;
|
|
30
30
|
}
|
|
31
|
+
async isFocused() {
|
|
32
|
+
return (await this.host()).isFocused();
|
|
33
|
+
}
|
|
34
|
+
async hasSubmenu() {
|
|
35
|
+
const host = await this.host();
|
|
36
|
+
return (await host.getAttribute('aria-haspopup')) === 'true' || !!(await host.getAttribute('aria-controls'));
|
|
37
|
+
}
|
|
31
38
|
}
|
|
32
39
|
class MenuHarness extends ComponentHarness {
|
|
33
40
|
static hostSelector = '[ngMenu], [ngMenuBar]';
|
|
@@ -50,6 +57,10 @@ class MenuHarness extends ComponentHarness {
|
|
|
50
57
|
}
|
|
51
58
|
return (await host.getAttribute('data-visible')) === 'true';
|
|
52
59
|
}
|
|
60
|
+
async isMenuBar() {
|
|
61
|
+
const host = await this.host();
|
|
62
|
+
return host.matchesSelector('[ngMenuBar]');
|
|
63
|
+
}
|
|
53
64
|
async open() {
|
|
54
65
|
if (!(await this.isOpen())) {
|
|
55
66
|
const trigger = await this._getTrigger();
|