@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.
Files changed (48) hide show
  1. package/_adev_assets/aria-accordion.json +443 -59
  2. package/_adev_assets/aria-combobox.json +345 -37
  3. package/_adev_assets/aria-grid.json +408 -71
  4. package/_adev_assets/aria-listbox.json +115 -35
  5. package/_adev_assets/aria-menu.json +492 -167
  6. package/_adev_assets/aria-tabs.json +272 -88
  7. package/_adev_assets/aria-toolbar.json +151 -133
  8. package/_adev_assets/aria-tree.json +182 -35
  9. package/fesm2022/_widget-chunk.mjs +643 -190
  10. package/fesm2022/_widget-chunk.mjs.map +1 -1
  11. package/fesm2022/accordion.mjs +129 -77
  12. package/fesm2022/accordion.mjs.map +1 -1
  13. package/fesm2022/aria.mjs +1 -1
  14. package/fesm2022/aria.mjs.map +1 -1
  15. package/fesm2022/combobox.mjs +140 -27
  16. package/fesm2022/combobox.mjs.map +1 -1
  17. package/fesm2022/grid.mjs +254 -68
  18. package/fesm2022/grid.mjs.map +1 -1
  19. package/fesm2022/listbox.mjs +54 -44
  20. package/fesm2022/listbox.mjs.map +1 -1
  21. package/fesm2022/menu.mjs +270 -108
  22. package/fesm2022/menu.mjs.map +1 -1
  23. package/fesm2022/private.mjs +752 -785
  24. package/fesm2022/private.mjs.map +1 -1
  25. package/fesm2022/tabs.mjs +101 -71
  26. package/fesm2022/tabs.mjs.map +1 -1
  27. package/fesm2022/toolbar.mjs +87 -64
  28. package/fesm2022/toolbar.mjs.map +1 -1
  29. package/fesm2022/tree.mjs +105 -60
  30. package/fesm2022/tree.mjs.map +1 -1
  31. package/package.json +2 -10
  32. package/types/_grid-chunk.d.ts +326 -83
  33. package/types/accordion.d.ts +134 -35
  34. package/types/combobox.d.ts +146 -13
  35. package/types/grid.d.ts +159 -32
  36. package/types/listbox.d.ts +59 -28
  37. package/types/menu.d.ts +151 -55
  38. package/types/private.d.ts +449 -567
  39. package/types/tabs.d.ts +121 -41
  40. package/types/toolbar.d.ts +74 -51
  41. package/types/tree.d.ts +116 -45
  42. package/_adev_assets/aria-radio-group.json +0 -389
  43. package/fesm2022/deferred-content.mjs +0 -99
  44. package/fesm2022/deferred-content.mjs.map +0 -1
  45. package/fesm2022/radio-group.mjs +0 -338
  46. package/fesm2022/radio-group.mjs.map +0 -1
  47. package/types/deferred-content.d.ts +0 -38
  48. package/types/radio-group.d.ts +0 -84
@@ -1,21 +1,20 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, computed, ElementRef, contentChildren, input, booleanAttribute, model, signal, afterRenderEffect, untracked, Directive } from '@angular/core';
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
- _generatedId = inject(_IdGenerator).getId('ng-listbox-');
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
- skipDisabled = input(true, ...(ngDevMode ? [{
48
- debugName: "skipDisabled",
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(0.5, ...(ngDevMode ? [{
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
- value = model([], ...(ngDevMode ? [{
75
- debugName: "value"
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 value = untracked(() => this.value());
118
- if (items && value.some(v => !items.some(i => i.value() === v))) {
119
- this.value.set(value.filter(v => items.some(i => i.value() === v)));
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().scrollIntoView(options);
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
- skipDisabled: {
168
- classPropertyName: "skipDisabled",
169
- publicName: "skipDisabled",
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
- value: {
210
- classPropertyName: "value",
211
- publicName: "value",
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
- value: "valueChange"
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.tabindex()",
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.activedescendant()"
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.tabindex()',
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.activedescendant()',
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
- _generatedId = inject(_IdGenerator).getId('ng-option-');
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().textContent, ...(ngDevMode ? [{
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": "_pattern.active()",
377
+ "attr.data-active": "active()",
366
378
  "attr.id": "_pattern.id()",
367
- "attr.tabindex": "_pattern.tabindex()",
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
- 'class': 'ng-option',
390
- '[attr.data-active]': '_pattern.active()',
400
+ '[attr.data-active]': 'active()',
391
401
  '[attr.id]': '_pattern.id()',
392
- '[attr.tabindex]': '_pattern.tabindex()',
402
+ '[attr.tabindex]': '_pattern.tabIndex()',
393
403
  '[attr.aria-selected]': '_pattern.selected()',
394
404
  '[attr.aria-disabled]': '_pattern.disabled()'
395
405
  }
@@ -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":"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"}
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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"}