@angular/aria 21.0.0-rc.0 → 21.0.0-rc.2
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/_adev_assets/aria-accordion.json +443 -59
- package/_adev_assets/aria-combobox.json +345 -37
- package/_adev_assets/aria-grid.json +408 -71
- package/_adev_assets/aria-listbox.json +115 -35
- package/_adev_assets/aria-menu.json +492 -167
- package/_adev_assets/aria-tabs.json +272 -88
- package/_adev_assets/aria-toolbar.json +151 -133
- package/_adev_assets/aria-tree.json +182 -35
- package/fesm2022/_widget-chunk.mjs +643 -190
- package/fesm2022/_widget-chunk.mjs.map +1 -1
- package/fesm2022/accordion.mjs +129 -77
- package/fesm2022/accordion.mjs.map +1 -1
- package/fesm2022/aria.mjs +1 -1
- package/fesm2022/aria.mjs.map +1 -1
- package/fesm2022/combobox.mjs +140 -27
- package/fesm2022/combobox.mjs.map +1 -1
- package/fesm2022/grid.mjs +254 -68
- package/fesm2022/grid.mjs.map +1 -1
- package/fesm2022/listbox.mjs +54 -44
- package/fesm2022/listbox.mjs.map +1 -1
- package/fesm2022/menu.mjs +270 -108
- package/fesm2022/menu.mjs.map +1 -1
- package/fesm2022/private.mjs +752 -785
- package/fesm2022/private.mjs.map +1 -1
- package/fesm2022/tabs.mjs +101 -71
- package/fesm2022/tabs.mjs.map +1 -1
- package/fesm2022/toolbar.mjs +87 -64
- package/fesm2022/toolbar.mjs.map +1 -1
- package/fesm2022/tree.mjs +105 -60
- package/fesm2022/tree.mjs.map +1 -1
- package/package.json +2 -10
- package/types/_grid-chunk.d.ts +326 -83
- package/types/accordion.d.ts +134 -35
- package/types/combobox.d.ts +146 -13
- package/types/grid.d.ts +159 -32
- package/types/listbox.d.ts +59 -28
- package/types/menu.d.ts +151 -55
- package/types/private.d.ts +449 -567
- package/types/tabs.d.ts +121 -41
- package/types/toolbar.d.ts +74 -51
- package/types/tree.d.ts +116 -45
- package/_adev_assets/aria-radio-group.json +0 -389
- package/fesm2022/deferred-content.mjs +0 -99
- package/fesm2022/deferred-content.mjs.map +0 -1
- package/fesm2022/radio-group.mjs +0 -338
- package/fesm2022/radio-group.mjs.map +0 -1
- package/types/deferred-content.d.ts +0 -38
- package/types/radio-group.d.ts +0 -84
package/fesm2022/listbox.mjs
CHANGED
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { input, inject, ElementRef, contentChildren, computed, booleanAttribute, model, signal, afterRenderEffect, untracked, Directive } from '@angular/core';
|
|
3
3
|
import { ComboboxListboxPattern, ListboxPattern, OptionPattern } from '@angular/aria/private';
|
|
4
4
|
import { Directionality } from '@angular/cdk/bidi';
|
|
5
5
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
6
6
|
import { _IdGenerator } from '@angular/cdk/a11y';
|
|
7
7
|
import { ComboboxPopup } from './combobox.mjs';
|
|
8
|
-
import '@angular/aria/deferred-content';
|
|
9
8
|
|
|
10
9
|
class Listbox {
|
|
11
|
-
|
|
12
|
-
id = computed(() => this._generatedId, ...(ngDevMode ? [{
|
|
10
|
+
id = input(inject(_IdGenerator).getId('ng-listbox-', true), ...(ngDevMode ? [{
|
|
13
11
|
debugName: "id"
|
|
14
12
|
}] : []));
|
|
15
13
|
_popup = inject(ComboboxPopup, {
|
|
16
14
|
optional: true
|
|
17
15
|
});
|
|
18
16
|
_elementRef = inject(ElementRef);
|
|
17
|
+
element = this._elementRef.nativeElement;
|
|
19
18
|
_directionality = inject(Directionality);
|
|
20
19
|
_options = contentChildren(Option, ...(ngDevMode ? [{
|
|
21
20
|
debugName: "_options",
|
|
@@ -44,8 +43,8 @@ class Listbox {
|
|
|
44
43
|
}] : [{
|
|
45
44
|
transform: booleanAttribute
|
|
46
45
|
}]));
|
|
47
|
-
|
|
48
|
-
debugName: "
|
|
46
|
+
softDisabled = input(true, ...(ngDevMode ? [{
|
|
47
|
+
debugName: "softDisabled",
|
|
49
48
|
transform: booleanAttribute
|
|
50
49
|
}] : [{
|
|
51
50
|
transform: booleanAttribute
|
|
@@ -56,7 +55,7 @@ class Listbox {
|
|
|
56
55
|
selectionMode = input('follow', ...(ngDevMode ? [{
|
|
57
56
|
debugName: "selectionMode"
|
|
58
57
|
}] : []));
|
|
59
|
-
typeaheadDelay = input(
|
|
58
|
+
typeaheadDelay = input(500, ...(ngDevMode ? [{
|
|
60
59
|
debugName: "typeaheadDelay"
|
|
61
60
|
}] : []));
|
|
62
61
|
disabled = input(false, ...(ngDevMode ? [{
|
|
@@ -71,8 +70,8 @@ class Listbox {
|
|
|
71
70
|
}] : [{
|
|
72
71
|
transform: booleanAttribute
|
|
73
72
|
}]));
|
|
74
|
-
|
|
75
|
-
debugName: "
|
|
73
|
+
values = model([], ...(ngDevMode ? [{
|
|
74
|
+
debugName: "values"
|
|
76
75
|
}] : []));
|
|
77
76
|
_pattern;
|
|
78
77
|
_hasFocused = signal(false, ...(ngDevMode ? [{
|
|
@@ -114,9 +113,9 @@ class Listbox {
|
|
|
114
113
|
});
|
|
115
114
|
afterRenderEffect(() => {
|
|
116
115
|
const items = inputs.items();
|
|
117
|
-
const
|
|
118
|
-
if (items &&
|
|
119
|
-
this.
|
|
116
|
+
const values = untracked(() => this.values());
|
|
117
|
+
if (items && values.some(v => !items.some(i => i.value() === v))) {
|
|
118
|
+
this.values.set(values.filter(v => items.some(i => i.value() === v)));
|
|
120
119
|
}
|
|
121
120
|
});
|
|
122
121
|
}
|
|
@@ -126,7 +125,10 @@ class Listbox {
|
|
|
126
125
|
scrollActiveItemIntoView(options = {
|
|
127
126
|
block: 'nearest'
|
|
128
127
|
}) {
|
|
129
|
-
this._pattern.inputs.activeItem()?.element()
|
|
128
|
+
this._pattern.inputs.activeItem()?.element()?.scrollIntoView(options);
|
|
129
|
+
}
|
|
130
|
+
gotoFirst() {
|
|
131
|
+
this._pattern.listBehavior.first();
|
|
130
132
|
}
|
|
131
133
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
132
134
|
minVersion: "12.0.0",
|
|
@@ -143,6 +145,13 @@ class Listbox {
|
|
|
143
145
|
isStandalone: true,
|
|
144
146
|
selector: "[ngListbox]",
|
|
145
147
|
inputs: {
|
|
148
|
+
id: {
|
|
149
|
+
classPropertyName: "id",
|
|
150
|
+
publicName: "id",
|
|
151
|
+
isSignal: true,
|
|
152
|
+
isRequired: false,
|
|
153
|
+
transformFunction: null
|
|
154
|
+
},
|
|
146
155
|
orientation: {
|
|
147
156
|
classPropertyName: "orientation",
|
|
148
157
|
publicName: "orientation",
|
|
@@ -164,9 +173,9 @@ class Listbox {
|
|
|
164
173
|
isRequired: false,
|
|
165
174
|
transformFunction: null
|
|
166
175
|
},
|
|
167
|
-
|
|
168
|
-
classPropertyName: "
|
|
169
|
-
publicName: "
|
|
176
|
+
softDisabled: {
|
|
177
|
+
classPropertyName: "softDisabled",
|
|
178
|
+
publicName: "softDisabled",
|
|
170
179
|
isSignal: true,
|
|
171
180
|
isRequired: false,
|
|
172
181
|
transformFunction: null
|
|
@@ -206,16 +215,16 @@ class Listbox {
|
|
|
206
215
|
isRequired: false,
|
|
207
216
|
transformFunction: null
|
|
208
217
|
},
|
|
209
|
-
|
|
210
|
-
classPropertyName: "
|
|
211
|
-
publicName: "
|
|
218
|
+
values: {
|
|
219
|
+
classPropertyName: "values",
|
|
220
|
+
publicName: "values",
|
|
212
221
|
isSignal: true,
|
|
213
222
|
isRequired: false,
|
|
214
223
|
transformFunction: null
|
|
215
224
|
}
|
|
216
225
|
},
|
|
217
226
|
outputs: {
|
|
218
|
-
|
|
227
|
+
values: "valuesChange"
|
|
219
228
|
},
|
|
220
229
|
host: {
|
|
221
230
|
attributes: {
|
|
@@ -228,14 +237,13 @@ class Listbox {
|
|
|
228
237
|
},
|
|
229
238
|
properties: {
|
|
230
239
|
"attr.id": "id()",
|
|
231
|
-
"attr.tabindex": "_pattern.
|
|
240
|
+
"attr.tabindex": "_pattern.tabIndex()",
|
|
232
241
|
"attr.aria-readonly": "_pattern.readonly()",
|
|
233
242
|
"attr.aria-disabled": "_pattern.disabled()",
|
|
234
243
|
"attr.aria-orientation": "_pattern.orientation()",
|
|
235
244
|
"attr.aria-multiselectable": "_pattern.multi()",
|
|
236
|
-
"attr.aria-activedescendant": "_pattern.
|
|
237
|
-
}
|
|
238
|
-
classAttribute: "ng-listbox"
|
|
245
|
+
"attr.aria-activedescendant": "_pattern.activeDescendant()"
|
|
246
|
+
}
|
|
239
247
|
},
|
|
240
248
|
queries: [{
|
|
241
249
|
propertyName: "_options",
|
|
@@ -262,41 +270,38 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
262
270
|
exportAs: 'ngListbox',
|
|
263
271
|
host: {
|
|
264
272
|
'role': 'listbox',
|
|
265
|
-
'class': 'ng-listbox',
|
|
266
273
|
'[attr.id]': 'id()',
|
|
267
|
-
'[attr.tabindex]': '_pattern.
|
|
274
|
+
'[attr.tabindex]': '_pattern.tabIndex()',
|
|
268
275
|
'[attr.aria-readonly]': '_pattern.readonly()',
|
|
269
276
|
'[attr.aria-disabled]': '_pattern.disabled()',
|
|
270
277
|
'[attr.aria-orientation]': '_pattern.orientation()',
|
|
271
278
|
'[attr.aria-multiselectable]': '_pattern.multi()',
|
|
272
|
-
'[attr.aria-activedescendant]': '_pattern.
|
|
279
|
+
'[attr.aria-activedescendant]': '_pattern.activeDescendant()',
|
|
273
280
|
'(keydown)': '_pattern.onKeydown($event)',
|
|
274
281
|
'(pointerdown)': '_pattern.onPointerdown($event)',
|
|
275
282
|
'(focusin)': 'onFocus()'
|
|
276
283
|
},
|
|
277
|
-
hostDirectives: [
|
|
278
|
-
directive: ComboboxPopup
|
|
279
|
-
}]
|
|
284
|
+
hostDirectives: [ComboboxPopup]
|
|
280
285
|
}]
|
|
281
286
|
}],
|
|
282
287
|
ctorParameters: () => []
|
|
283
288
|
});
|
|
284
289
|
class Option {
|
|
285
290
|
_elementRef = inject(ElementRef);
|
|
291
|
+
element = this._elementRef.nativeElement;
|
|
292
|
+
active = computed(() => this._pattern.active(), ...(ngDevMode ? [{
|
|
293
|
+
debugName: "active"
|
|
294
|
+
}] : []));
|
|
286
295
|
_listbox = inject(Listbox);
|
|
287
|
-
|
|
288
|
-
id = computed(() => this._generatedId, ...(ngDevMode ? [{
|
|
296
|
+
id = input(inject(_IdGenerator).getId('ng-option-', true), ...(ngDevMode ? [{
|
|
289
297
|
debugName: "id"
|
|
290
298
|
}] : []));
|
|
291
|
-
searchTerm = computed(() => this.label() ?? this.element
|
|
299
|
+
searchTerm = computed(() => this.label() ?? this.element.textContent, ...(ngDevMode ? [{
|
|
292
300
|
debugName: "searchTerm"
|
|
293
301
|
}] : []));
|
|
294
302
|
listbox = computed(() => this._listbox._pattern, ...(ngDevMode ? [{
|
|
295
303
|
debugName: "listbox"
|
|
296
304
|
}] : []));
|
|
297
|
-
element = computed(() => this._elementRef.nativeElement, ...(ngDevMode ? [{
|
|
298
|
-
debugName: "element"
|
|
299
|
-
}] : []));
|
|
300
305
|
value = input.required(...(ngDevMode ? [{
|
|
301
306
|
debugName: "value"
|
|
302
307
|
}] : []));
|
|
@@ -317,7 +322,7 @@ class Option {
|
|
|
317
322
|
id: this.id,
|
|
318
323
|
value: this.value,
|
|
319
324
|
listbox: this.listbox,
|
|
320
|
-
element: this.element,
|
|
325
|
+
element: () => this.element,
|
|
321
326
|
searchTerm: this.searchTerm
|
|
322
327
|
});
|
|
323
328
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
@@ -335,6 +340,13 @@ class Option {
|
|
|
335
340
|
isStandalone: true,
|
|
336
341
|
selector: "[ngOption]",
|
|
337
342
|
inputs: {
|
|
343
|
+
id: {
|
|
344
|
+
classPropertyName: "id",
|
|
345
|
+
publicName: "id",
|
|
346
|
+
isSignal: true,
|
|
347
|
+
isRequired: false,
|
|
348
|
+
transformFunction: null
|
|
349
|
+
},
|
|
338
350
|
value: {
|
|
339
351
|
classPropertyName: "value",
|
|
340
352
|
publicName: "value",
|
|
@@ -362,13 +374,12 @@ class Option {
|
|
|
362
374
|
"role": "option"
|
|
363
375
|
},
|
|
364
376
|
properties: {
|
|
365
|
-
"attr.data-active": "
|
|
377
|
+
"attr.data-active": "active()",
|
|
366
378
|
"attr.id": "_pattern.id()",
|
|
367
|
-
"attr.tabindex": "_pattern.
|
|
379
|
+
"attr.tabindex": "_pattern.tabIndex()",
|
|
368
380
|
"attr.aria-selected": "_pattern.selected()",
|
|
369
381
|
"attr.aria-disabled": "_pattern.disabled()"
|
|
370
|
-
}
|
|
371
|
-
classAttribute: "ng-option"
|
|
382
|
+
}
|
|
372
383
|
},
|
|
373
384
|
exportAs: ["ngOption"],
|
|
374
385
|
ngImport: i0
|
|
@@ -386,10 +397,9 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
386
397
|
exportAs: 'ngOption',
|
|
387
398
|
host: {
|
|
388
399
|
'role': 'option',
|
|
389
|
-
'
|
|
390
|
-
'[attr.data-active]': '_pattern.active()',
|
|
400
|
+
'[attr.data-active]': 'active()',
|
|
391
401
|
'[attr.id]': '_pattern.id()',
|
|
392
|
-
'[attr.tabindex]': '_pattern.
|
|
402
|
+
'[attr.tabindex]': '_pattern.tabIndex()',
|
|
393
403
|
'[attr.aria-selected]': '_pattern.selected()',
|
|
394
404
|
'[attr.aria-disabled]': '_pattern.disabled()'
|
|
395
405
|
}
|
package/fesm2022/listbox.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listbox.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/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 {\n afterRenderEffect,\n booleanAttribute,\n computed,\n contentChildren,\n Directive,\n ElementRef,\n inject,\n input,\n model,\n signal,\n untracked,\n} from '@angular/core';\nimport {ComboboxListboxPattern, ListboxPattern, OptionPattern} from '@angular/aria/private';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {_IdGenerator} from '@angular/cdk/a11y';\nimport {ComboboxPopup} from '../combobox';\n\n/**\n * A listbox container.\n *\n * Listboxes are used to display a list of items for a user to select from. The Listbox is meant\n * to be used in conjunction with Option as follows:\n *\n * ```html\n * <ul ngListbox>\n * <li [value]=\"1\" ngOption>Item 1</li>\n * <li [value]=\"2\" ngOption>Item 2</li>\n * <li [value]=\"3\" ngOption>Item 3</li>\n * </ul>\n * ```\n */\n@Directive({\n selector: '[ngListbox]',\n exportAs: 'ngListbox',\n host: {\n 'role': 'listbox',\n 'class': 'ng-listbox',\n '[attr.id]': 'id()',\n '[attr.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 '(pointerdown)': '_pattern.onPointerdown($event)',\n '(focusin)': 'onFocus()',\n },\n hostDirectives: [{directive: ComboboxPopup}],\n})\nexport class Listbox<V> {\n /** A unique identifier for the listbox. */\n private readonly _generatedId = inject(_IdGenerator).getId('ng-listbox-');\n\n // TODO(wagnermaciel): https://github.com/angular/components/pull/30495#discussion_r1972601144.\n /** A unique identifier for the listbox. */\n protected id = computed(() => this._generatedId);\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 listbox element. */\n private readonly _elementRef = inject(ElementRef);\n\n /** The directionality (LTR / RTL) context for the application (or a subtree of it). */\n private readonly _directionality = inject(Directionality);\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 textDirection = toSignal(this._directionality.change, {\n initialValue: this._directionality.value,\n });\n\n /** The Option UIPatterns of the child Options. */\n protected items = computed(() => this._options().map(option => option._pattern));\n\n /** Whether the list is vertically or horizontally oriented. */\n orientation = input<'vertical' | 'horizontal'>('vertical');\n\n /** Whether multiple items in the list can be selected at once. */\n multi = input(false, {transform: booleanAttribute});\n\n /** Whether focus should wrap when navigating. */\n wrap = input(true, {transform: booleanAttribute});\n\n /** Whether disabled items in the list should be skipped when navigating. */\n skipDisabled = input(true, {transform: booleanAttribute});\n\n /** The focus strategy used by the list. */\n focusMode = input<'roving' | 'activedescendant'>('roving');\n\n /** The selection strategy used by the list. */\n selectionMode = input<'follow' | 'explicit'>('follow');\n\n /** The amount of time before the typeahead search is reset. */\n typeaheadDelay = input<number>(0.5); // Picked arbitrarily.\n\n /** Whether the listbox is disabled. */\n disabled = input(false, {transform: booleanAttribute});\n\n /** Whether the listbox is readonly. */\n readonly = input(false, {transform: booleanAttribute});\n\n /** The values of the current selected items. */\n value = model<V[]>([]);\n\n /** The Listbox UIPattern. */\n readonly _pattern: ListboxPattern<V>;\n\n /** Whether the listbox has received focus yet. */\n private _hasFocused = signal(false);\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 if (this._popup) {\n this._popup.controls.set(this._pattern as ComboboxListboxPattern<V>);\n }\n\n afterRenderEffect(() => {\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 afterRenderEffect(() => {\n if (!this._hasFocused()) {\n this._pattern.setDefaultState();\n }\n });\n\n // Ensure that if the active item is removed from\n // the list, the listbox updates it's focus state.\n afterRenderEffect(() => {\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 // Ensure that the value is always in sync with the available options.\n afterRenderEffect(() => {\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 onFocus() {\n this._hasFocused.set(true);\n }\n\n scrollActiveItemIntoView(options: ScrollIntoViewOptions = {block: 'nearest'}) {\n this._pattern.inputs.activeItem()?.element().scrollIntoView(options);\n }\n}\n\n/** A selectable option in a Listbox. */\n@Directive({\n selector: '[ngOption]',\n exportAs: 'ngOption',\n host: {\n 'role': 'option',\n 'class': 'ng-option',\n '[attr.data-active]': '_pattern.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 option element. */\n private readonly _elementRef = inject(ElementRef);\n\n /** The parent Listbox. */\n private readonly _listbox = inject(Listbox);\n\n /** A unique identifier for the option. */\n private readonly _generatedId = inject(_IdGenerator).getId('ng-option-');\n\n // TODO(wagnermaciel): https://github.com/angular/components/pull/30495#discussion_r1972601144.\n /** A unique identifier for the option. */\n protected id = computed(() => this._generatedId);\n\n // TODO(wagnermaciel): See if we want to change how we handle this since textContent is not\n // reactive. See https://github.com/angular/components/pull/30495#discussion_r1961260216.\n /** The text used by the typeahead search. */\n protected searchTerm = computed(() => this.label() ?? this.element().textContent);\n\n /** The parent Listbox UIPattern. */\n protected listbox = computed(() => this._listbox._pattern);\n\n /** A reference to the option element to be focused on navigation. */\n protected element = computed(() => this._elementRef.nativeElement);\n\n /** The value of the option. */\n value = input.required<V>();\n\n /** Whether an item is disabled. */\n disabled = input(false, {transform: booleanAttribute});\n\n /** The text used by the typeahead search. */\n 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.listbox,\n element: this.element,\n searchTerm: this.searchTerm,\n });\n}\n"],"names":["inject","ComboboxPopup","optional","_elementRef","ElementRef","_directionality","Directionality","contentChildren","Option","ngDevMode","debugName","descendants","textDirection","toSignal","change","initialValue","value","items","computed","_options","map","option","_pattern","transform","booleanAttribute","wrap","input","focusMode","selectionMode","disabled","readonly","model","constructor","element","nativeElement","combobox","_popup","ComboboxListboxPattern","inputs","ListboxPattern","controls","set","violations","validate","violation","console","error","_hasFocused","setDefaultState","afterRenderEffect","activeItem","untracked","some","i","listBehavior","unfocus","v","filter","scrollActiveItemIntoView","options","block","args","selector","directive","ctorParameters","Listbox","_generatedId","_IdGenerator","getId"],"mappings":";;;;;;;;;;;;;;QAkHyC,GAAAA,MAAA,CAAAC,aAAA,EAAA;IACvCC,QAAA,EAAA;AAEgD,GAAA,CAAA;EAIvCC,WAAA,GAAAH,MAAA,CAAAI,UAAA,CAAA;EAKTC,eAAA,GAAAL,MAAA,CAAAM,cAAA,CAAA;AAEI,EAAA,QAAA,GAAAC,eAAO,CAAAC,MAAA,EAAA,IAAAC,SAAA,GAAA,CAAA;IAAAC,SAAA,EAAA,UAAA;IAAAC,WAAA,EAAA;AAAA,GAAA,CAAA,GAAA,CAAA;IAAAA,WAAA,EAAA;AAAA,GAAA,CAAA,CAAA,CAAA;AAGPC,EAAAA,aAAA,GAAAC,QAAA,CAAAR,IAAAA,CAAAA,eAA6B,CAAAS,MAAA,EAAA;IAChBC,YAAoB,EAAA,IAAA,CAAAV,eAAA,CAAAW;;AAMjCC,EAAAA,KAAA,GAAAC,QAAA,CAAAC,MAAAA,IAAAA,CAAAA,QAAA,EAAAC,CAAAA,GAAA,CAAAC,MAAsC,IAAAA,MAAA,CAAAC,QAAA,OAAAb,SAAA,GAAA,CAAA;IAAAC,SAAA,EAAA;AAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;+CAI6B,GAAA,CAAA;IAAAA,SAAA,EAAA;AAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;qBAGpD,EAAAD,IAAAA,SAAA,GAAM,CAAA;IAAAC,SAAA,EAAA,OAAA;AAAAa,IAAAA,SAAA,EAAAC;AAAA,GAAA,CAAA,GAAA,CAAA;AAAAD,IAAAA,SAAA,EAAAC;AAAA,GAAA,CAAA,CAAA,CAAA;EAGnBC,IAAA,GAAAC,KAAA,CAAA,IAAA,EAAA,IAAAjB,SAAA,GAAA,CAAA;AAAAC,IAAAA,SAAA,EAAoC,MAAA;AAAAa,IAAAA,SAAA,EAAAC;AAAA,GAAA,CAAA,GAAA,CAAA;AAAAD,IAAAA,SAAA,EAAAC;AAAA,GAAA,CAAA,CAAA,CAAA;;eAGtC,cAAA;AAAAD,IAAAA,SAAA,EAAAC;AAAA,GAAA,CAAA,GAAA,CAAA;AAAAD,IAAAA,SAAA,EAAAC;AAAA,GAAA,CAAA,CAAA,CAAA;EAIAG,SAAA,GAAAD,KAAA,CAAA,QAAA,EAAA,IAAAjB,SAAA,GAAA,CAAA;IAAAC,SAAA,EAAA;AAAyB,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;AAG3BkB,EAAAA,aAAA,GAAAF,KAAA,CAAAjB,QAAAA,EAAAA,IAAAA,SAAA,GAAE,CAAA;IAAAC,SAAA,EAAA;AAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;;;GAIqB,CAAA,GAAA,EAAA,CAAA,CAAA;EAIrBmB,QAAA,GAAAH,KAAA,CAAA,KAAA,EAAA,IAAAjB,SAAA,GAAA,CAAA;IAAqCC,SAAA,EAAA,UAAA;AAAAa,IAAAA,SAAA,EAAAC;AAAA,GAAA,CAAA,GAAA,CAAA;AAAAD,IAAAA,SAAA,EAAAC;AAAA,GAAA,CAAA,CAAA,CAAA;EAGvCM,QAAA,GAAAJ,KAAA,CAAA,KAAA,EAAA,IAAAjB,SAAA,GAAA,CAAA;IAAAC,SAAE,EAAA,UAAA;AAAAa,IAAAA,SAAA,EAAAC;AAAA,GAAA,CAAA,GAAA,CAAA;AAAAD,IAAAA,SAAA,EAAAC;AAAA,GAAA,CAAA,CAAA,CAAA;EAIAR,KAAA,GAAAe,KAAA,CAAA,EAAA,EAAA,IAAAtB,SAAA,GAAA,CAAA;IAAAC,SAAA,EAAA;GAA4B,CAAA,GAAA,EAAA,CAAA,CAAA;EAI1BY,QAAA;2CAGN,GAAA,CAAA;IAAAZ,SAAA,EAAA;AAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;aAEOsB,GAAA;;MAIP,GAAA,IAAA;;;;;AAjJSC,MAAAA,OAAA,EAAAA,MAAA9B,IAAAA,CAAAA,WAAA,CAAA+B,aAAA;AACTC,MAAAA,QAAA,EAAAA,MAAA,KAAAC,MAAA,EAAAD,QAAA,EAAAb;;AAEA,IAAA,IAAA,CAAAA,QAAA,GAAA,IAAA,CAAAc,MAAA,EAAAD,QAAA,GACE,IAAAE,sBAAA,CAAAC,MAAA,CACA,GAAA,IAAAC,cAAA,CAAAD,MAAA,CAAqB;AACrB,IAAA,IAAA,IAAA,CAAAF,MAAA,EAAA;AACA,MAAA,IAAA,CAAAA,MAAA,CAAAI,QAAA,CAAAC,GAAA,MAAAnB,QAAA,CAAA;;AAEA,IAAA,iBAAA,CAAA,MAAA;AAEA,MAAA,IAAA,OAAAb,SAAA,KAAA,WAAA,IAAAA,SAAA,EAAA;AACA,QAAA,MAAAiC,UAAA,GAAA,IAAA,CAAApB,QAAA,CAAAqB,QAAA,EAAA;QACA,KAAA,MAAAC,SAAA,IAAaF,UAA4B,EAAA;UAEzCG,OAAA,CAAAC,KAAA,CAAAF,SAAA,CAAA;AACD;AACD;;qBAqIsC,CAAA,MAAA;gBAcrBG,WAAA,EAAA,EAAA;QACwB,IAAAzB,CAAAA,QAAA,CAAA0B,eAAA,EAAA;;;AASzCC,IAAAA,iBAA+F,CAAA,MAAA;AACrD,MAAA,MAAAhC,KAAA,GAAAqB,MAAA,CAAArB,KAAA,EAAA;AAC9BiC,MAAAA,MAAAA,UAAW,GAAIC,SAAA,CAAoBb,MAAAA,MAAA,CAAAY,UAAA,EAAA,CAAA;MAE4C,IAAA,CAAAjC,KAAA,CAAAmC,IAAA,CAAAC,CAAA,IAAAA,CAAA,KAAAH,UAAA,CAAA,IAAAA,UAAA,EAAA;AACF,QAAA,IAAA,CAAA5B,QAAA,CAAAgC,YAAA,CAAAC,OAAA,EAAA;AAE/E;AAEV,KAAA,CAAA;AAGqE,IAAA,iBAAA,CAAA,MAAA;AAC3D,MAAA,MAAUtC,KAAA,GAAAqB,MAAS,CAAArB,KAAA,EAAW;AAGxC,MAAA,MAAQD,KAAK,GAAAmC;AAEsBlC,MAAAA,IAAAA,KAAA,IAAAD,KAAA,CAAAoC,IAAA,CAAAI,CAAA,IAAAvC,CAAAA,KAAA,CAAAmC,IAAA,CAAAC,CAAA,IAAAA,CAAA,CAAArC,KAAA,OAAAwC,CAAA,CAAA,CAAA,EAAA;QACnC,IAAAxC,CAAAA,KAAA,CAAAyB,GAAA,CAAAzB,KAAA,CAAAyC,MAAA,CAAAD,CAAA,IAAAvC,KAAA,CAAAmC,IAAA,CAAAC,CAAA,IAAAA,CAAA,CAAArC,KAAA,OAAAwC,CAAA,CAAA,CAAA,CAAA;AAE6C;AAG7C,KAAA,CAAA;;AAG4B,EAAA,OAAA,GAAA;QACX,CAAAT,WAAO,CAAAN,GAAA,CAAA,IAAA,CAAA;;AAGXiB,EAAAA,wBAAAA,CAAAC,OAAM,GAAA;AAAAC,IAAAA,KAAA,EAAA;AAAA,GAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAtDVC,IAAA,EAAA,CAAA;MACTC,QAAA,EAAA,aAAA;;;;;QA5GC,WAAC,EAAA,MAAA;AAAA,QAAA,iBAAA,EAAA,qBAAA;8BAEgD,EAAA,qBAAA;8BACvB,EAAA,qBAAA;QAEoC,yBAAA,EAAA,wBAAA;QAC/D,6BAAc,EAAA,kBAAA;QAEd,8BAAkE,EAAA,6BAAA;AAClE,QAAA,WAAQ,EAAK,4BAAM;AAEnB,QAAA,eAAA,EAAiD,gCAAA;AACjD,QAAA,WAAA,EAAA;;AAGA,MAAA,cAAA,EAAA,CAAA;AAAAC,QAAAA,SAAA,EAAyB9D;;;;AAGzB,EAAA,cAAA,EAAA+D,MAAA;AAAA,CAAA,CAAA;;AAMA,EAAA,WAAA,GAAA,MAAA,CAAA5D,UAAA,CAAA;AAGA,EAAA,QAAA,GAAA,MAAA,CAAA6D,OAAA,CAAA;AAoFEC,EAAAA,YAAA,GAAAlE,MAAA,CAAAmE,YAAA,EAAgBC,KAAA,CAAA,YAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAChB,oBAAA,EAAA,mBAAA;AAAA,QAAA,WAAA,EAAA,eAAA;AACA,QAAA,iBAAA,EAAA,qBAAA;QACA,sBAAA,EAAA,qBAAA;QACA,sBAAA,EAAA;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"listbox.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/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 {\n afterRenderEffect,\n booleanAttribute,\n computed,\n contentChildren,\n Directive,\n ElementRef,\n inject,\n input,\n model,\n signal,\n untracked,\n} from '@angular/core';\nimport {ComboboxListboxPattern, ListboxPattern, OptionPattern} from '@angular/aria/private';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {_IdGenerator} from '@angular/cdk/a11y';\nimport {ComboboxPopup} from '../combobox';\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@Directive({\n selector: '[ngListbox]',\n exportAs: 'ngListbox',\n host: {\n 'role': 'listbox',\n '[attr.id]': 'id()',\n '[attr.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 '(pointerdown)': '_pattern.onPointerdown($event)',\n '(focusin)': 'onFocus()',\n },\n hostDirectives: [ComboboxPopup],\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 directionality (LTR / RTL) context for the application (or a subtree of it). */\n private readonly _directionality = inject(Directionality);\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 textDirection = toSignal(this._directionality.change, {\n initialValue: this._directionality.value,\n });\n\n /** The Option UIPatterns of the child Options. */\n protected items = computed(() => this._options().map(option => option._pattern));\n\n /** Whether the list is vertically or horizontally oriented. */\n orientation = input<'vertical' | 'horizontal'>('vertical');\n\n /** Whether multiple items in the list can be selected at once. */\n multi = input(false, {transform: booleanAttribute});\n\n /** Whether focus should wrap when navigating. */\n 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 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 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 selectionMode = input<'follow' | 'explicit'>('follow');\n\n /** The amount of time before the typeahead search is reset. */\n typeaheadDelay = input<number>(500); // Picked arbitrarily.\n\n /** Whether the listbox is disabled. */\n disabled = input(false, {transform: booleanAttribute});\n\n /** Whether the listbox is readonly. */\n readonly = input(false, {transform: booleanAttribute});\n\n /** The values of the currently selected items. */\n values = model<V[]>([]);\n\n /** The Listbox UIPattern. */\n readonly _pattern: ListboxPattern<V>;\n\n /** Whether the listbox has received focus yet. */\n private _hasFocused = signal(false);\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 if (this._popup) {\n this._popup.controls.set(this._pattern as ComboboxListboxPattern<V>);\n }\n\n afterRenderEffect(() => {\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 afterRenderEffect(() => {\n if (!this._hasFocused()) {\n this._pattern.setDefaultState();\n }\n });\n\n // Ensure that if the active item is removed from\n // the list, the listbox updates it's focus state.\n afterRenderEffect(() => {\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 // Ensure that the values are always in sync with the available options.\n afterRenderEffect(() => {\n const items = inputs.items();\n const values = untracked(() => this.values());\n\n if (items && values.some(v => !items.some(i => i.value() === v))) {\n this.values.set(values.filter(v => items.some(i => i.value() === v)));\n }\n });\n }\n\n onFocus() {\n this._hasFocused.set(true);\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/**\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@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 private readonly _elementRef = inject(ElementRef);\n\n /** A reference to the host element. */\n readonly element = this._elementRef.nativeElement as HTMLElement;\n\n /** Whether the option is currently active (focused). */\n 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 // TODO(wagnermaciel): See if we want to change how we handle this since textContent is not\n // reactive. See https://github.com/angular/components/pull/30495#discussion_r1961260216.\n /** The text used by the typeahead search. */\n protected searchTerm = computed(() => this.label() ?? this.element.textContent);\n\n /** The parent Listbox UIPattern. */\n protected listbox = computed(() => this._listbox._pattern);\n\n /** The value of the option. */\n value = input.required<V>();\n\n /** Whether an item is disabled. */\n disabled = input(false, {transform: booleanAttribute});\n\n /** The text used by the typeahead search. */\n 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.listbox,\n element: () => this.element,\n searchTerm: this.searchTerm,\n });\n}\n"],"names":["Listbox","id","input","inject","_IdGenerator","getId","_popup","ComboboxPopup","optional","_elementRef","ElementRef","element","nativeElement","_directionality","Directionality","_options","contentChildren","Option","descendants","textDirection","toSignal","change","initialValue","value","items","computed","map","option","_pattern","ngDevMode","debugName","orientation","multi","transform","booleanAttribute","wrap","softDisabled","focusMode","selectionMode","typeaheadDelay","disabled","readonly","values","model","_hasFocused","signal","constructor","inputs","activeItem","undefined","combobox","ComboboxListboxPattern","ListboxPattern","controls","set","afterRenderEffect","violations","validate","violation","console","error","setDefaultState","untracked","some","i","listBehavior","unfocus","v","filter","onFocus","scrollActiveItemIntoView","options","block","scrollIntoView","gotoFirst","first","deps","target","i0","ɵɵFactoryTarget","Directive","ɵdir","ɵɵngDeclareDirective","minVersion","version","type","isSignal","exportAs","hostDirectives","directive","i1","ngImport","decorators","args","selector","host","active","_listbox","searchTerm","label","textContent","listbox","required","selected","OptionPattern","isStandalone","classPropertyName","publicName","isRequired","transformFunction","attributes","properties"],"mappings":"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"}
|