@angular/aria 22.0.0-next.5 → 22.0.0-next.7

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 (56) hide show
  1. package/fesm2022/_combobox-chunk.mjs +51 -2
  2. package/fesm2022/_combobox-chunk.mjs.map +1 -1
  3. package/fesm2022/_combobox-listbox-chunk.mjs +3 -0
  4. package/fesm2022/_combobox-listbox-chunk.mjs.map +1 -1
  5. package/fesm2022/_combobox-tree-chunk.mjs.map +1 -1
  6. package/fesm2022/_deferred-content-chunk.mjs +16 -14
  7. package/fesm2022/_deferred-content-chunk.mjs.map +1 -1
  8. package/fesm2022/_list-navigation-chunk.mjs +3 -1
  9. package/fesm2022/_list-navigation-chunk.mjs.map +1 -1
  10. package/fesm2022/_signal-like-chunk.mjs +0 -1
  11. package/fesm2022/_signal-like-chunk.mjs.map +1 -1
  12. package/fesm2022/_tabs-chunk.mjs +22 -47
  13. package/fesm2022/_tabs-chunk.mjs.map +1 -1
  14. package/fesm2022/_widget-chunk.mjs +55 -13
  15. package/fesm2022/_widget-chunk.mjs.map +1 -1
  16. package/fesm2022/accordion.mjs +16 -14
  17. package/fesm2022/accordion.mjs.map +1 -1
  18. package/fesm2022/aria.mjs +1 -1
  19. package/fesm2022/aria.mjs.map +1 -1
  20. package/fesm2022/combobox.mjs +59 -34
  21. package/fesm2022/combobox.mjs.map +1 -1
  22. package/fesm2022/grid-testing.mjs +72 -0
  23. package/fesm2022/grid-testing.mjs.map +1 -0
  24. package/fesm2022/grid.mjs +83 -37
  25. package/fesm2022/grid.mjs.map +1 -1
  26. package/fesm2022/listbox.mjs +58 -31
  27. package/fesm2022/listbox.mjs.map +1 -1
  28. package/fesm2022/menu.mjs +41 -35
  29. package/fesm2022/menu.mjs.map +1 -1
  30. package/fesm2022/private.mjs +156 -5
  31. package/fesm2022/private.mjs.map +1 -1
  32. package/fesm2022/simple-combobox.mjs +443 -0
  33. package/fesm2022/simple-combobox.mjs.map +1 -0
  34. package/fesm2022/tabs.mjs +243 -218
  35. package/fesm2022/tabs.mjs.map +1 -1
  36. package/fesm2022/toolbar.mjs +11 -11
  37. package/fesm2022/toolbar.mjs.map +1 -1
  38. package/fesm2022/tree.mjs +65 -33
  39. package/fesm2022/tree.mjs.map +1 -1
  40. package/package.json +10 -2
  41. package/types/_combobox-chunk.d.ts +32 -2
  42. package/types/_grid-chunk.d.ts +16 -8
  43. package/types/_tabs-chunk.d.ts +7 -42
  44. package/types/combobox.d.ts +4 -3
  45. package/types/grid-testing.d.ts +79 -0
  46. package/types/grid.d.ts +14 -6
  47. package/types/listbox.d.ts +8 -6
  48. package/types/menu.d.ts +7 -4
  49. package/types/private.d.ts +106 -10
  50. package/types/simple-combobox.d.ts +124 -0
  51. package/types/tabs.d.ts +79 -74
  52. package/types/tree.d.ts +5 -2
  53. package/fesm2022/_pointer-event-manager-chunk.mjs +0 -54
  54. package/fesm2022/_pointer-event-manager-chunk.mjs.map +0 -1
  55. package/resources/code-examples.db +0 -0
  56. package/types/_pointer-event-manager-chunk.d.ts +0 -34
@@ -0,0 +1,443 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Renderer2, ElementRef, signal, input, booleanAttribute, model, computed, afterRenderEffect, Directive, InjectionToken } from '@angular/core';
3
+ import * as i1 from '@angular/aria/private';
4
+ import { DeferredContentAware, SimpleComboboxPattern, DeferredContent, SimpleComboboxPopupPattern } from '@angular/aria/private';
5
+ export { DeferredContent as ɵɵDeferredContent, DeferredContentAware as ɵɵDeferredContentAware } from './_deferred-content-chunk.mjs';
6
+
7
+ class Combobox extends DeferredContentAware {
8
+ _renderer = inject(Renderer2);
9
+ _elementRef = inject(ElementRef);
10
+ element = this._elementRef.nativeElement;
11
+ _popup = signal(undefined, ...(ngDevMode ? [{
12
+ debugName: "_popup"
13
+ }] : []));
14
+ disabled = input(false, {
15
+ ...(ngDevMode ? {
16
+ debugName: "disabled"
17
+ } : {}),
18
+ transform: booleanAttribute
19
+ });
20
+ alwaysExpanded = input(false, {
21
+ ...(ngDevMode ? {
22
+ debugName: "alwaysExpanded"
23
+ } : {}),
24
+ transform: booleanAttribute
25
+ });
26
+ expanded = model(false, ...(ngDevMode ? [{
27
+ debugName: "expanded"
28
+ }] : []));
29
+ value = model('', ...(ngDevMode ? [{
30
+ debugName: "value"
31
+ }] : []));
32
+ inlineSuggestion = input(undefined, ...(ngDevMode ? [{
33
+ debugName: "inlineSuggestion"
34
+ }] : []));
35
+ _pattern = new SimpleComboboxPattern({
36
+ ...this,
37
+ element: () => this.element,
38
+ expandable: () => true,
39
+ popup: computed(() => this._popup()?._pattern)
40
+ });
41
+ constructor() {
42
+ super();
43
+ afterRenderEffect(() => this._pattern.keyboardEventRelayEffect());
44
+ afterRenderEffect(() => this._pattern.closePopupOnBlurEffect());
45
+ afterRenderEffect(() => {
46
+ this.contentVisible.set(this._pattern.isExpanded());
47
+ });
48
+ if (this._pattern.isEditable()) {
49
+ afterRenderEffect(() => {
50
+ this._renderer.setProperty(this.element, 'value', this.value());
51
+ });
52
+ afterRenderEffect(() => {
53
+ this._pattern.highlightEffect();
54
+ });
55
+ }
56
+ }
57
+ ngOnInit() {
58
+ if (this.alwaysExpanded()) {
59
+ this.expanded.set(true);
60
+ }
61
+ }
62
+ _registerPopup(popup) {
63
+ this._popup.set(popup);
64
+ }
65
+ _unregisterPopup() {
66
+ this._popup.set(undefined);
67
+ }
68
+ static ɵfac = i0.ɵɵngDeclareFactory({
69
+ minVersion: "12.0.0",
70
+ version: "22.0.0-next.9",
71
+ ngImport: i0,
72
+ type: Combobox,
73
+ deps: [],
74
+ target: i0.ɵɵFactoryTarget.Directive
75
+ });
76
+ static ɵdir = i0.ɵɵngDeclareDirective({
77
+ minVersion: "17.1.0",
78
+ version: "22.0.0-next.9",
79
+ type: Combobox,
80
+ isStandalone: true,
81
+ selector: "[ngCombobox]",
82
+ inputs: {
83
+ disabled: {
84
+ classPropertyName: "disabled",
85
+ publicName: "disabled",
86
+ isSignal: true,
87
+ isRequired: false,
88
+ transformFunction: null
89
+ },
90
+ alwaysExpanded: {
91
+ classPropertyName: "alwaysExpanded",
92
+ publicName: "alwaysExpanded",
93
+ isSignal: true,
94
+ isRequired: false,
95
+ transformFunction: null
96
+ },
97
+ expanded: {
98
+ classPropertyName: "expanded",
99
+ publicName: "expanded",
100
+ isSignal: true,
101
+ isRequired: false,
102
+ transformFunction: null
103
+ },
104
+ value: {
105
+ classPropertyName: "value",
106
+ publicName: "value",
107
+ isSignal: true,
108
+ isRequired: false,
109
+ transformFunction: null
110
+ },
111
+ inlineSuggestion: {
112
+ classPropertyName: "inlineSuggestion",
113
+ publicName: "inlineSuggestion",
114
+ isSignal: true,
115
+ isRequired: false,
116
+ transformFunction: null
117
+ }
118
+ },
119
+ outputs: {
120
+ expanded: "expandedChange",
121
+ value: "valueChange"
122
+ },
123
+ host: {
124
+ attributes: {
125
+ "role": "combobox"
126
+ },
127
+ listeners: {
128
+ "keydown": "_pattern.onKeydown($event)",
129
+ "focusin": "_pattern.onFocusin()",
130
+ "focusout": "_pattern.onFocusout($event)",
131
+ "click": "_pattern.onClick($event)",
132
+ "input": "_pattern.onInput($event)"
133
+ },
134
+ properties: {
135
+ "attr.aria-autocomplete": "_pattern.autocomplete()",
136
+ "attr.aria-disabled": "_pattern.disabled()",
137
+ "attr.aria-expanded": "_pattern.isExpanded()",
138
+ "attr.aria-activedescendant": "_pattern.activeDescendant()",
139
+ "attr.aria-controls": "_pattern.popupId()",
140
+ "attr.aria-haspopup": "_pattern.popupType()"
141
+ }
142
+ },
143
+ exportAs: ["ngCombobox"],
144
+ usesInheritance: true,
145
+ ngImport: i0
146
+ });
147
+ }
148
+ i0.ɵɵngDeclareClassMetadata({
149
+ minVersion: "12.0.0",
150
+ version: "22.0.0-next.9",
151
+ ngImport: i0,
152
+ type: Combobox,
153
+ decorators: [{
154
+ type: Directive,
155
+ args: [{
156
+ selector: '[ngCombobox]',
157
+ exportAs: 'ngCombobox',
158
+ host: {
159
+ 'role': 'combobox',
160
+ '[attr.aria-autocomplete]': '_pattern.autocomplete()',
161
+ '[attr.aria-disabled]': '_pattern.disabled()',
162
+ '[attr.aria-expanded]': '_pattern.isExpanded()',
163
+ '[attr.aria-activedescendant]': '_pattern.activeDescendant()',
164
+ '[attr.aria-controls]': '_pattern.popupId()',
165
+ '[attr.aria-haspopup]': '_pattern.popupType()',
166
+ '(keydown)': '_pattern.onKeydown($event)',
167
+ '(focusin)': '_pattern.onFocusin()',
168
+ '(focusout)': '_pattern.onFocusout($event)',
169
+ '(click)': '_pattern.onClick($event)',
170
+ '(input)': '_pattern.onInput($event)'
171
+ }
172
+ }]
173
+ }],
174
+ ctorParameters: () => [],
175
+ propDecorators: {
176
+ disabled: [{
177
+ type: i0.Input,
178
+ args: [{
179
+ isSignal: true,
180
+ alias: "disabled",
181
+ required: false
182
+ }]
183
+ }],
184
+ alwaysExpanded: [{
185
+ type: i0.Input,
186
+ args: [{
187
+ isSignal: true,
188
+ alias: "alwaysExpanded",
189
+ required: false
190
+ }]
191
+ }],
192
+ expanded: [{
193
+ type: i0.Input,
194
+ args: [{
195
+ isSignal: true,
196
+ alias: "expanded",
197
+ required: false
198
+ }]
199
+ }, {
200
+ type: i0.Output,
201
+ args: ["expandedChange"]
202
+ }],
203
+ value: [{
204
+ type: i0.Input,
205
+ args: [{
206
+ isSignal: true,
207
+ alias: "value",
208
+ required: false
209
+ }]
210
+ }, {
211
+ type: i0.Output,
212
+ args: ["valueChange"]
213
+ }],
214
+ inlineSuggestion: [{
215
+ type: i0.Input,
216
+ args: [{
217
+ isSignal: true,
218
+ alias: "inlineSuggestion",
219
+ required: false
220
+ }]
221
+ }]
222
+ }
223
+ });
224
+
225
+ const SIMPLE_COMBOBOX_POPUP = new InjectionToken('SIMPLE_COMBOBOX_POPUP');
226
+
227
+ class ComboboxPopup {
228
+ _deferredContent = inject(DeferredContent);
229
+ combobox = input.required(...(ngDevMode ? [{
230
+ debugName: "combobox"
231
+ }] : []));
232
+ _widget = signal(undefined, ...(ngDevMode ? [{
233
+ debugName: "_widget"
234
+ }] : []));
235
+ controlTarget = computed(() => this._widget()?.element, ...(ngDevMode ? [{
236
+ debugName: "controlTarget"
237
+ }] : []));
238
+ popupId = computed(() => this._widget()?.popupId(), ...(ngDevMode ? [{
239
+ debugName: "popupId"
240
+ }] : []));
241
+ activeDescendant = computed(() => this._widget()?.activeDescendant(), ...(ngDevMode ? [{
242
+ debugName: "activeDescendant"
243
+ }] : []));
244
+ popupType = input('listbox', ...(ngDevMode ? [{
245
+ debugName: "popupType"
246
+ }] : []));
247
+ _pattern = new SimpleComboboxPopupPattern({
248
+ ...this
249
+ });
250
+ ngOnInit() {
251
+ this.combobox()._registerPopup(this);
252
+ this._deferredContent.deferredContentAware.set(this.combobox());
253
+ }
254
+ ngOnDestroy() {
255
+ this.combobox()._unregisterPopup();
256
+ }
257
+ _registerWidget(widget) {
258
+ this._widget.set(widget);
259
+ }
260
+ _unregisterWidget() {
261
+ this._widget.set(undefined);
262
+ }
263
+ static ɵfac = i0.ɵɵngDeclareFactory({
264
+ minVersion: "12.0.0",
265
+ version: "22.0.0-next.9",
266
+ ngImport: i0,
267
+ type: ComboboxPopup,
268
+ deps: [],
269
+ target: i0.ɵɵFactoryTarget.Directive
270
+ });
271
+ static ɵdir = i0.ɵɵngDeclareDirective({
272
+ minVersion: "17.1.0",
273
+ version: "22.0.0-next.9",
274
+ type: ComboboxPopup,
275
+ isStandalone: true,
276
+ selector: "ng-template[ngComboboxPopup]",
277
+ inputs: {
278
+ combobox: {
279
+ classPropertyName: "combobox",
280
+ publicName: "combobox",
281
+ isSignal: true,
282
+ isRequired: true,
283
+ transformFunction: null
284
+ },
285
+ popupType: {
286
+ classPropertyName: "popupType",
287
+ publicName: "popupType",
288
+ isSignal: true,
289
+ isRequired: false,
290
+ transformFunction: null
291
+ }
292
+ },
293
+ providers: [{
294
+ provide: SIMPLE_COMBOBOX_POPUP,
295
+ useExisting: ComboboxPopup
296
+ }],
297
+ exportAs: ["ngComboboxPopup"],
298
+ hostDirectives: [{
299
+ directive: i1.DeferredContent
300
+ }],
301
+ ngImport: i0
302
+ });
303
+ }
304
+ i0.ɵɵngDeclareClassMetadata({
305
+ minVersion: "12.0.0",
306
+ version: "22.0.0-next.9",
307
+ ngImport: i0,
308
+ type: ComboboxPopup,
309
+ decorators: [{
310
+ type: Directive,
311
+ args: [{
312
+ selector: 'ng-template[ngComboboxPopup]',
313
+ exportAs: 'ngComboboxPopup',
314
+ hostDirectives: [DeferredContent],
315
+ providers: [{
316
+ provide: SIMPLE_COMBOBOX_POPUP,
317
+ useExisting: ComboboxPopup
318
+ }]
319
+ }]
320
+ }],
321
+ propDecorators: {
322
+ combobox: [{
323
+ type: i0.Input,
324
+ args: [{
325
+ isSignal: true,
326
+ alias: "combobox",
327
+ required: true
328
+ }]
329
+ }],
330
+ popupType: [{
331
+ type: i0.Input,
332
+ args: [{
333
+ isSignal: true,
334
+ alias: "popupType",
335
+ required: false
336
+ }]
337
+ }]
338
+ }
339
+ });
340
+
341
+ class ComboboxWidget {
342
+ _elementRef = inject(ElementRef);
343
+ _popup = inject(SIMPLE_COMBOBOX_POPUP);
344
+ element = this._elementRef.nativeElement;
345
+ popupId = signal(undefined, ...(ngDevMode ? [{
346
+ debugName: "popupId"
347
+ }] : []));
348
+ activeDescendant = input(undefined, ...(ngDevMode ? [{
349
+ debugName: "activeDescendant"
350
+ }] : []));
351
+ _observer;
352
+ constructor() {
353
+ const el = this.element;
354
+ this._observer = new MutationObserver(mutations => {
355
+ for (const mutation of mutations) {
356
+ if (mutation.attributeName === 'id') {
357
+ this.popupId.set(el.id);
358
+ }
359
+ }
360
+ });
361
+ this._observer.observe(el, {
362
+ attributes: true,
363
+ attributeFilter: ['id']
364
+ });
365
+ }
366
+ ngOnInit() {
367
+ this.popupId.set(this.element.id);
368
+ this._popup._registerWidget(this);
369
+ }
370
+ ngOnDestroy() {
371
+ this._observer?.disconnect();
372
+ this._popup._unregisterWidget();
373
+ }
374
+ onFocusin() {
375
+ this._popup._pattern.onFocusin();
376
+ }
377
+ onFocusout(event) {
378
+ this._popup._pattern.onFocusout(event);
379
+ }
380
+ static ɵfac = i0.ɵɵngDeclareFactory({
381
+ minVersion: "12.0.0",
382
+ version: "22.0.0-next.9",
383
+ ngImport: i0,
384
+ type: ComboboxWidget,
385
+ deps: [],
386
+ target: i0.ɵɵFactoryTarget.Directive
387
+ });
388
+ static ɵdir = i0.ɵɵngDeclareDirective({
389
+ minVersion: "17.1.0",
390
+ version: "22.0.0-next.9",
391
+ type: ComboboxWidget,
392
+ isStandalone: true,
393
+ selector: "[ngComboboxWidget]",
394
+ inputs: {
395
+ activeDescendant: {
396
+ classPropertyName: "activeDescendant",
397
+ publicName: "activeDescendant",
398
+ isSignal: true,
399
+ isRequired: false,
400
+ transformFunction: null
401
+ }
402
+ },
403
+ host: {
404
+ listeners: {
405
+ "focusin": "onFocusin()",
406
+ "focusout": "onFocusout($event)"
407
+ }
408
+ },
409
+ exportAs: ["ngComboboxWidget"],
410
+ ngImport: i0
411
+ });
412
+ }
413
+ i0.ɵɵngDeclareClassMetadata({
414
+ minVersion: "12.0.0",
415
+ version: "22.0.0-next.9",
416
+ ngImport: i0,
417
+ type: ComboboxWidget,
418
+ decorators: [{
419
+ type: Directive,
420
+ args: [{
421
+ selector: '[ngComboboxWidget]',
422
+ exportAs: 'ngComboboxWidget',
423
+ host: {
424
+ '(focusin)': 'onFocusin()',
425
+ '(focusout)': 'onFocusout($event)'
426
+ }
427
+ }]
428
+ }],
429
+ ctorParameters: () => [],
430
+ propDecorators: {
431
+ activeDescendant: [{
432
+ type: i0.Input,
433
+ args: [{
434
+ isSignal: true,
435
+ alias: "activeDescendant",
436
+ required: false
437
+ }]
438
+ }]
439
+ }
440
+ });
441
+
442
+ export { Combobox, ComboboxPopup, ComboboxWidget };
443
+ //# sourceMappingURL=simple-combobox.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-combobox.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/simple-combobox/simple-combobox.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/simple-combobox/simple-combobox-tokens.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/simple-combobox/simple-combobox-popup.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/simple-combobox/simple-combobox-widget.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 Directive,\n ElementRef,\n inject,\n input,\n model,\n OnInit,\n signal,\n Renderer2,\n} from '@angular/core';\nimport {DeferredContentAware, SimpleComboboxPattern} from '@angular/aria/private';\nimport type {ComboboxPopup} from './simple-combobox-popup';\n\n/**\n * The container element that wraps a combobox input and popup, and orchestrates its behavior.\n *\n * The `ngCombobox` directive is the main entry point for creating a combobox and customizing its\n * behavior. It coordinates the interactions between the input and the popup.\n *\n * ```html\n * <div ngCombobox [(expanded)]=\"expanded\">\n * <input ngComboboxInput />\n *\n * <ng-template ngComboboxPopup>\n * <div ngComboboxWidget>\n * <!-- ... options ... -->\n * </div>\n * </ng-template>\n * </div>\n * ```\n */\n@Directive({\n selector: '[ngCombobox]',\n exportAs: 'ngCombobox',\n host: {\n 'role': 'combobox',\n '[attr.aria-autocomplete]': '_pattern.autocomplete()',\n '[attr.aria-disabled]': '_pattern.disabled()',\n '[attr.aria-expanded]': '_pattern.isExpanded()',\n '[attr.aria-activedescendant]': '_pattern.activeDescendant()',\n '[attr.aria-controls]': '_pattern.popupId()',\n '[attr.aria-haspopup]': '_pattern.popupType()',\n '(keydown)': '_pattern.onKeydown($event)',\n '(focusin)': '_pattern.onFocusin()',\n '(focusout)': '_pattern.onFocusout($event)',\n '(click)': '_pattern.onClick($event)',\n '(input)': '_pattern.onInput($event)',\n },\n})\nexport class Combobox extends DeferredContentAware implements OnInit {\n private readonly _renderer = inject(Renderer2);\n\n /** The element that the combobox is attached to. */\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** A reference to the input element. */\n readonly element = this._elementRef.nativeElement;\n\n /** The popup associated with the combobox. */\n readonly _popup = signal<ComboboxPopup | undefined>(undefined);\n\n /** Whether the combobox is disabled. */\n readonly disabled = input(false, {transform: booleanAttribute});\n\n /** Whether the combobox should always remain expanded. */\n readonly alwaysExpanded = input(false, {transform: booleanAttribute});\n\n /** Whether the combobox is expanded. */\n readonly expanded = model<boolean>(false);\n\n /** The value of the combobox input. */\n readonly value = model<string>('');\n\n /** An inline suggestion to be displayed in the input. */\n readonly inlineSuggestion = input<string | undefined>(undefined);\n\n /** The combobox ui pattern. */\n readonly _pattern = new SimpleComboboxPattern({\n ...this,\n element: () => this.element,\n expandable: () => true,\n popup: computed(() => this._popup()?._pattern),\n });\n\n constructor() {\n super();\n\n afterRenderEffect(() => this._pattern.keyboardEventRelayEffect());\n afterRenderEffect(() => this._pattern.closePopupOnBlurEffect());\n afterRenderEffect(() => {\n this.contentVisible.set(this._pattern.isExpanded());\n });\n\n if (this._pattern.isEditable()) {\n afterRenderEffect(() => {\n this._renderer.setProperty(this.element, 'value', this.value());\n });\n afterRenderEffect(() => {\n this._pattern.highlightEffect();\n });\n }\n }\n\n ngOnInit() {\n if (this.alwaysExpanded()) {\n this.expanded.set(true);\n }\n }\n\n /** Registers a popup with the combobox. */\n _registerPopup(popup: ComboboxPopup) {\n this._popup.set(popup);\n }\n\n /** Unregisters the popup from the combobox. */\n _unregisterPopup() {\n this._popup.set(undefined);\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 {InjectionToken} from '@angular/core';\nimport type {ComboboxPopup} from './simple-combobox-popup';\n\n/** Token used to expose the combobox popup. */\nexport const SIMPLE_COMBOBOX_POPUP = new InjectionToken<ComboboxPopup>('SIMPLE_COMBOBOX_POPUP');\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 {computed, Directive, inject, input, OnDestroy, OnInit, signal} from '@angular/core';\nimport {DeferredContent, SimpleComboboxPopupPattern} from '@angular/aria/private';\nimport type {Combobox} from './simple-combobox';\nimport type {ComboboxWidget} from './simple-combobox-widget';\nimport {SIMPLE_COMBOBOX_POPUP} from './simple-combobox-tokens';\n\n/**\n * A structural directive that marks the `ng-template` to be used as the popup\n * for a combobox. This content is conditionally rendered.\n *\n * The content of the popup can be any element with the `ngComboboxWidget` directive.\n *\n * ```html\n * <ng-template ngComboboxPopup>\n * <div ngComboboxWidget>\n * <!-- ... options ... -->\n * </div>\n * </ng-template>\n * ```\n */\n@Directive({\n selector: 'ng-template[ngComboboxPopup]',\n exportAs: 'ngComboboxPopup',\n hostDirectives: [DeferredContent],\n providers: [{provide: SIMPLE_COMBOBOX_POPUP, useExisting: ComboboxPopup}],\n})\nexport class ComboboxPopup implements OnInit, OnDestroy {\n private readonly _deferredContent = inject(DeferredContent);\n\n /** The combobox that the popup belongs to. */\n readonly combobox = input.required<Combobox>();\n\n /** The widget contained within the popup. */\n readonly _widget = signal<ComboboxWidget | undefined>(undefined);\n\n /** The element that serves as the control target for the popup. */\n readonly controlTarget = computed(() => this._widget()?.element);\n\n /** The ID of the popup. */\n readonly popupId = computed(() => this._widget()?.popupId());\n\n /** The ID of the active descendant in the popup. */\n readonly activeDescendant = computed(() => this._widget()?.activeDescendant());\n\n /** The type of the popup (e.g., listbox, tree, grid, dialog). */\n readonly popupType = input<'listbox' | 'tree' | 'grid' | 'dialog'>('listbox');\n\n /** The popup pattern. */\n readonly _pattern = new SimpleComboboxPopupPattern({\n ...this,\n });\n\n ngOnInit() {\n this.combobox()._registerPopup(this);\n this._deferredContent.deferredContentAware.set(this.combobox());\n }\n\n ngOnDestroy() {\n this.combobox()._unregisterPopup();\n }\n\n /** Registers a widget with the popup. */\n _registerWidget(widget: ComboboxWidget) {\n this._widget.set(widget);\n }\n\n /** Unregisters the widget from the popup. */\n _unregisterWidget() {\n this._widget.set(undefined);\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 {Directive, ElementRef, inject, input, OnDestroy, OnInit, signal} from '@angular/core';\nimport {SIMPLE_COMBOBOX_POPUP} from './simple-combobox-tokens';\n\n/**\n * Identifies an element as a widget within a combobox popup.\n *\n * This directive should be applied to the element that contains the options or content\n * of the popup. It handles the communication of ID and active descendant information\n * to the combobox.\n */\n@Directive({\n selector: '[ngComboboxWidget]',\n exportAs: 'ngComboboxWidget',\n host: {\n '(focusin)': 'onFocusin()',\n '(focusout)': 'onFocusout($event)',\n },\n})\nexport class ComboboxWidget implements OnInit, OnDestroy {\n /** The element that the popup widget is attached to. */\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _popup = inject(SIMPLE_COMBOBOX_POPUP);\n\n /** A reference to the popup widget element. */\n readonly element = this._elementRef.nativeElement;\n\n /** The ID of the popup widget. */\n readonly popupId = signal<string | undefined>(undefined);\n\n /** The ID of the active descendant in the widget. */\n readonly activeDescendant = input<string | undefined>(undefined);\n\n private _observer: MutationObserver | undefined;\n\n constructor() {\n const el = this.element;\n this._observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.attributeName === 'id') {\n this.popupId.set(el.id);\n }\n }\n });\n\n this._observer.observe(el, {\n attributes: true,\n attributeFilter: ['id'],\n });\n }\n\n ngOnInit() {\n this.popupId.set(this.element.id);\n this._popup._registerWidget(this);\n }\n\n ngOnDestroy(): void {\n this._observer?.disconnect();\n this._popup._unregisterWidget();\n }\n\n /** Handles focus in events for the widget. */\n onFocusin() {\n this._popup._pattern.onFocusin();\n }\n\n /** Handles focus out events for the widget. */\n onFocusout(event: FocusEvent) {\n this._popup._pattern.onFocusout(event);\n }\n}\n"],"names":["Combobox","DeferredContentAware","_renderer","inject","Renderer2","_elementRef","ElementRef","element","nativeElement","_popup","signal","undefined","disabled","input","transform","booleanAttribute","alwaysExpanded","expanded","model","value","inlineSuggestion","_pattern","SimpleComboboxPattern","expandable","popup","computed","constructor","afterRenderEffect","keyboardEventRelayEffect","closePopupOnBlurEffect","contentVisible","set","isExpanded","isEditable","setProperty","highlightEffect","ngOnInit","_registerPopup","_unregisterPopup","deps","target","i0","ɵɵFactoryTarget","Directive","isStandalone","selector","inputs","classPropertyName","publicName","isSignal","isRequired","transformFunction","outputs","host","attributes","listeners","properties","exportAs","usesInheritance","ngImport","decorators","args","SIMPLE_COMBOBOX_POPUP","InjectionToken","ComboboxPopup","_deferredContent","DeferredContent","combobox","required","_widget","controlTarget","popupId","activeDescendant","popupType","SimpleComboboxPopupPattern","deferredContentAware","ngOnDestroy","_registerWidget","widget","_unregisterWidget","providers","provide","useExisting","hostDirectives","directive","i1","ComboboxWidget","_observer","el","MutationObserver","mutations","mutation","attributeName","id","observe","attributeFilter","disconnect","onFocusin","onFocusout","event"],"mappings":"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"}