@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
package/fesm2022/tabs.mjs CHANGED
@@ -1,26 +1,27 @@
1
- import * as i1 from '@angular/aria/deferred-content';
2
- import { DeferredContentAware, DeferredContent } from '@angular/aria/deferred-content';
3
1
  import { _IdGenerator } from '@angular/cdk/a11y';
4
2
  import { Directionality } from '@angular/cdk/bidi';
5
3
  import * as i0 from '@angular/core';
6
- import { signal, computed, Directive, inject, ElementRef, linkedSignal, input, booleanAttribute, model, afterRenderEffect } from '@angular/core';
7
- import { TabListPattern, TabPattern, TabPanelPattern } from '@angular/aria/private';
4
+ import { inject, ElementRef, signal, computed, Directive, input, booleanAttribute, model, afterRenderEffect } from '@angular/core';
5
+ import * as i1 from '@angular/aria/private';
6
+ import { TabListPattern, TabPattern, DeferredContentAware, TabPanelPattern, DeferredContent } from '@angular/aria/private';
8
7
 
9
8
  function sortDirectives(a, b) {
10
- return (a.element().compareDocumentPosition(b.element()) & Node.DOCUMENT_POSITION_PRECEDING) > 0 ? 1 : -1;
9
+ return (a.element.compareDocumentPosition(b.element) & Node.DOCUMENT_POSITION_PRECEDING) > 0 ? 1 : -1;
11
10
  }
12
11
  class Tabs {
12
+ _elementRef = inject(ElementRef);
13
+ element = this._elementRef.nativeElement;
13
14
  _tablist = signal(undefined, ...(ngDevMode ? [{
14
15
  debugName: "_tablist"
15
16
  }] : []));
16
17
  _unorderedPanels = signal(new Set(), ...(ngDevMode ? [{
17
18
  debugName: "_unorderedPanels"
18
19
  }] : []));
19
- tabs = computed(() => this._tablist()?.tabs(), ...(ngDevMode ? [{
20
- debugName: "tabs"
20
+ _tabPatterns = computed(() => this._tablist()?._tabPatterns(), ...(ngDevMode ? [{
21
+ debugName: "_tabPatterns"
21
22
  }] : []));
22
- unorderedTabpanels = computed(() => [...this._unorderedPanels()].map(tabpanel => tabpanel._pattern), ...(ngDevMode ? [{
23
- debugName: "unorderedTabpanels"
23
+ _unorderedTabpanelPatterns = computed(() => [...this._unorderedPanels()].map(tabpanel => tabpanel._pattern), ...(ngDevMode ? [{
24
+ debugName: "_unorderedTabpanelPatterns"
24
25
  }] : []));
25
26
  register(child) {
26
27
  if (child instanceof TabList) {
@@ -54,9 +55,6 @@ class Tabs {
54
55
  type: Tabs,
55
56
  isStandalone: true,
56
57
  selector: "[ngTabs]",
57
- host: {
58
- classAttribute: "ng-tabs"
59
- },
60
58
  exportAs: ["ngTabs"],
61
59
  ngImport: i0
62
60
  });
@@ -70,23 +68,20 @@ i0.ɵɵngDeclareClassMetadata({
70
68
  type: Directive,
71
69
  args: [{
72
70
  selector: '[ngTabs]',
73
- exportAs: 'ngTabs',
74
- host: {
75
- 'class': 'ng-tabs'
76
- }
71
+ exportAs: 'ngTabs'
77
72
  }]
78
73
  }]
79
74
  });
80
75
  class TabList {
81
76
  _elementRef = inject(ElementRef);
77
+ element = this._elementRef.nativeElement;
82
78
  _tabs = inject(Tabs);
83
79
  _unorderedTabs = signal(new Set(), ...(ngDevMode ? [{
84
80
  debugName: "_unorderedTabs"
85
81
  }] : []));
86
- _selection = linkedSignal(() => this.selectedTab() ? [this.selectedTab()] : []);
87
82
  textDirection = inject(Directionality).valueSignal;
88
- tabs = computed(() => [...this._unorderedTabs()].sort(sortDirectives).map(tab => tab._pattern), ...(ngDevMode ? [{
89
- debugName: "tabs"
83
+ _tabPatterns = computed(() => [...this._unorderedTabs()].sort(sortDirectives).map(tab => tab._pattern), ...(ngDevMode ? [{
84
+ debugName: "_tabPatterns"
90
85
  }] : []));
91
86
  orientation = input('horizontal', ...(ngDevMode ? [{
92
87
  debugName: "orientation"
@@ -97,8 +92,8 @@ class TabList {
97
92
  }] : [{
98
93
  transform: booleanAttribute
99
94
  }]));
100
- skipDisabled = input(true, ...(ngDevMode ? [{
101
- debugName: "skipDisabled",
95
+ softDisabled = input(true, ...(ngDevMode ? [{
96
+ debugName: "softDisabled",
102
97
  transform: booleanAttribute
103
98
  }] : [{
104
99
  transform: booleanAttribute
@@ -109,19 +104,18 @@ class TabList {
109
104
  selectionMode = input('follow', ...(ngDevMode ? [{
110
105
  debugName: "selectionMode"
111
106
  }] : []));
107
+ selectedTab = model(...(ngDevMode ? [undefined, {
108
+ debugName: "selectedTab"
109
+ }] : []));
112
110
  disabled = input(false, ...(ngDevMode ? [{
113
111
  debugName: "disabled",
114
112
  transform: booleanAttribute
115
113
  }] : [{
116
114
  transform: booleanAttribute
117
115
  }]));
118
- selectedTab = model(...(ngDevMode ? [undefined, {
119
- debugName: "selectedTab"
120
- }] : []));
121
116
  _pattern = new TabListPattern({
122
117
  ...this,
123
- items: this.tabs,
124
- value: this._selection,
118
+ items: this._tabPatterns,
125
119
  activeItem: signal(undefined),
126
120
  element: () => this._elementRef.nativeElement
127
121
  });
@@ -129,12 +123,23 @@ class TabList {
129
123
  debugName: "_hasFocused"
130
124
  }] : []));
131
125
  constructor() {
132
- afterRenderEffect(() => this.selectedTab.set(this._selection()[0]));
133
126
  afterRenderEffect(() => {
134
127
  if (!this._hasFocused()) {
135
128
  this._pattern.setDefaultState();
136
129
  }
137
130
  });
131
+ afterRenderEffect(() => {
132
+ const tab = this._pattern.selectedTab();
133
+ if (tab) {
134
+ this.selectedTab.set(tab.value());
135
+ }
136
+ });
137
+ afterRenderEffect(() => {
138
+ const value = this.selectedTab();
139
+ if (value) {
140
+ this._pattern.open(value);
141
+ }
142
+ });
138
143
  }
139
144
  onFocus() {
140
145
  this._hasFocused.set(true);
@@ -153,6 +158,9 @@ class TabList {
153
158
  this._unorderedTabs().delete(child);
154
159
  this._unorderedTabs.set(new Set(this._unorderedTabs()));
155
160
  }
161
+ open(value) {
162
+ return this._pattern.open(value);
163
+ }
156
164
  static ɵfac = i0.ɵɵngDeclareFactory({
157
165
  minVersion: "12.0.0",
158
166
  version: "20.2.0-next.2",
@@ -182,9 +190,9 @@ class TabList {
182
190
  isRequired: false,
183
191
  transformFunction: null
184
192
  },
185
- skipDisabled: {
186
- classPropertyName: "skipDisabled",
187
- publicName: "skipDisabled",
193
+ softDisabled: {
194
+ classPropertyName: "softDisabled",
195
+ publicName: "softDisabled",
188
196
  isSignal: true,
189
197
  isRequired: false,
190
198
  transformFunction: null
@@ -203,16 +211,16 @@ class TabList {
203
211
  isRequired: false,
204
212
  transformFunction: null
205
213
  },
206
- disabled: {
207
- classPropertyName: "disabled",
208
- publicName: "disabled",
214
+ selectedTab: {
215
+ classPropertyName: "selectedTab",
216
+ publicName: "selectedTab",
209
217
  isSignal: true,
210
218
  isRequired: false,
211
219
  transformFunction: null
212
220
  },
213
- selectedTab: {
214
- classPropertyName: "selectedTab",
215
- publicName: "selectedTab",
221
+ disabled: {
222
+ classPropertyName: "disabled",
223
+ publicName: "disabled",
216
224
  isSignal: true,
217
225
  isRequired: false,
218
226
  transformFunction: null
@@ -231,12 +239,11 @@ class TabList {
231
239
  "focusin": "onFocus()"
232
240
  },
233
241
  properties: {
234
- "attr.tabindex": "_pattern.tabindex()",
242
+ "attr.tabindex": "_pattern.tabIndex()",
235
243
  "attr.aria-disabled": "_pattern.disabled()",
236
244
  "attr.aria-orientation": "_pattern.orientation()",
237
- "attr.aria-activedescendant": "_pattern.activedescendant()"
238
- },
239
- classAttribute: "ng-tablist"
245
+ "attr.aria-activedescendant": "_pattern.activeDescendant()"
246
+ }
240
247
  },
241
248
  exportAs: ["ngTabList"],
242
249
  ngImport: i0
@@ -254,11 +261,10 @@ i0.ɵɵngDeclareClassMetadata({
254
261
  exportAs: 'ngTabList',
255
262
  host: {
256
263
  'role': 'tablist',
257
- 'class': 'ng-tablist',
258
- '[attr.tabindex]': '_pattern.tabindex()',
264
+ '[attr.tabindex]': '_pattern.tabIndex()',
259
265
  '[attr.aria-disabled]': '_pattern.disabled()',
260
266
  '[attr.aria-orientation]': '_pattern.orientation()',
261
- '[attr.aria-activedescendant]': '_pattern.activedescendant()',
267
+ '[attr.aria-activedescendant]': '_pattern.activeDescendant()',
262
268
  '(keydown)': '_pattern.onKeydown($event)',
263
269
  '(pointerdown)': '_pattern.onPointerdown($event)',
264
270
  '(focusin)': 'onFocus()'
@@ -269,16 +275,16 @@ i0.ɵɵngDeclareClassMetadata({
269
275
  });
270
276
  class Tab {
271
277
  _elementRef = inject(ElementRef);
278
+ element = this._elementRef.nativeElement;
272
279
  _tabs = inject(Tabs);
273
280
  _tabList = inject(TabList);
274
- _id = inject(_IdGenerator).getId('ng-tab-');
275
- element = computed(() => this._elementRef.nativeElement, ...(ngDevMode ? [{
276
- debugName: "element"
281
+ id = input(inject(_IdGenerator).getId('ng-tab-', true), ...(ngDevMode ? [{
282
+ debugName: "id"
277
283
  }] : []));
278
284
  tablist = computed(() => this._tabList._pattern, ...(ngDevMode ? [{
279
285
  debugName: "tablist"
280
286
  }] : []));
281
- tabpanel = computed(() => this._tabs.unorderedTabpanels().find(tabpanel => tabpanel.value() === this.value()), ...(ngDevMode ? [{
287
+ tabpanel = computed(() => this._tabs._unorderedTabpanelPatterns().find(tabpanel => tabpanel.value() === this.value()), ...(ngDevMode ? [{
282
288
  debugName: "tabpanel"
283
289
  }] : []));
284
290
  disabled = input(false, ...(ngDevMode ? [{
@@ -290,13 +296,22 @@ class Tab {
290
296
  value = input.required(...(ngDevMode ? [{
291
297
  debugName: "value"
292
298
  }] : []));
299
+ active = computed(() => this._pattern.active(), ...(ngDevMode ? [{
300
+ debugName: "active"
301
+ }] : []));
302
+ selected = computed(() => this._pattern.selected(), ...(ngDevMode ? [{
303
+ debugName: "selected"
304
+ }] : []));
293
305
  _pattern = new TabPattern({
294
306
  ...this,
295
- id: () => this._id,
296
307
  tablist: this.tablist,
297
308
  tabpanel: this.tabpanel,
298
- value: this.value
309
+ expanded: signal(false),
310
+ element: () => this.element
299
311
  });
312
+ open() {
313
+ this._pattern.open();
314
+ }
300
315
  ngOnInit() {
301
316
  this._tabList.register(this);
302
317
  }
@@ -318,6 +333,13 @@ class Tab {
318
333
  isStandalone: true,
319
334
  selector: "[ngTab]",
320
335
  inputs: {
336
+ id: {
337
+ classPropertyName: "id",
338
+ publicName: "id",
339
+ isSignal: true,
340
+ isRequired: false,
341
+ transformFunction: null
342
+ },
321
343
  disabled: {
322
344
  classPropertyName: "disabled",
323
345
  publicName: "disabled",
@@ -338,14 +360,13 @@ class Tab {
338
360
  "role": "tab"
339
361
  },
340
362
  properties: {
341
- "attr.data-active": "_pattern.active()",
363
+ "attr.data-active": "active()",
342
364
  "attr.id": "_pattern.id()",
343
- "attr.tabindex": "_pattern.tabindex()",
344
- "attr.aria-selected": "_pattern.selected()",
365
+ "attr.tabindex": "_pattern.tabIndex()",
366
+ "attr.aria-selected": "selected()",
345
367
  "attr.aria-disabled": "_pattern.disabled()",
346
368
  "attr.aria-controls": "_pattern.controls()"
347
- },
348
- classAttribute: "ng-tab"
369
+ }
349
370
  },
350
371
  exportAs: ["ngTab"],
351
372
  ngImport: i0
@@ -363,11 +384,10 @@ i0.ɵɵngDeclareClassMetadata({
363
384
  exportAs: 'ngTab',
364
385
  host: {
365
386
  'role': 'tab',
366
- 'class': 'ng-tab',
367
- '[attr.data-active]': '_pattern.active()',
387
+ '[attr.data-active]': 'active()',
368
388
  '[attr.id]': '_pattern.id()',
369
- '[attr.tabindex]': '_pattern.tabindex()',
370
- '[attr.aria-selected]': '_pattern.selected()',
389
+ '[attr.tabindex]': '_pattern.tabIndex()',
390
+ '[attr.aria-selected]': 'selected()',
371
391
  '[attr.aria-disabled]': '_pattern.disabled()',
372
392
  '[attr.aria-controls]': '_pattern.controls()'
373
393
  }
@@ -375,22 +395,27 @@ i0.ɵɵngDeclareClassMetadata({
375
395
  }]
376
396
  });
377
397
  class TabPanel {
398
+ _elementRef = inject(ElementRef);
399
+ element = this._elementRef.nativeElement;
378
400
  _deferredContentAware = inject(DeferredContentAware);
379
401
  _Tabs = inject(Tabs);
380
- _id = inject(_IdGenerator).getId('ng-tabpanel-');
381
- tab = computed(() => this._Tabs.tabs()?.find(tab => tab.value() === this.value()), ...(ngDevMode ? [{
402
+ id = input(inject(_IdGenerator).getId('ng-tabpanel-', true), ...(ngDevMode ? [{
403
+ debugName: "id"
404
+ }] : []));
405
+ tab = computed(() => this._Tabs._tabPatterns()?.find(tab => tab.value() === this.value()), ...(ngDevMode ? [{
382
406
  debugName: "tab"
383
407
  }] : []));
384
408
  value = input.required(...(ngDevMode ? [{
385
409
  debugName: "value"
386
410
  }] : []));
411
+ visible = computed(() => !this._pattern.hidden(), ...(ngDevMode ? [{
412
+ debugName: "visible"
413
+ }] : []));
387
414
  _pattern = new TabPanelPattern({
388
- ...this,
389
- id: () => this._id,
390
- tab: this.tab
415
+ ...this
391
416
  });
392
417
  constructor() {
393
- afterRenderEffect(() => this._deferredContentAware.contentVisible.set(!this._pattern.hidden()));
418
+ afterRenderEffect(() => this._deferredContentAware.contentVisible.set(this.visible()));
394
419
  }
395
420
  ngOnInit() {
396
421
  this._Tabs.register(this);
@@ -413,6 +438,13 @@ class TabPanel {
413
438
  isStandalone: true,
414
439
  selector: "[ngTabPanel]",
415
440
  inputs: {
441
+ id: {
442
+ classPropertyName: "id",
443
+ publicName: "id",
444
+ isSignal: true,
445
+ isRequired: false,
446
+ transformFunction: null
447
+ },
416
448
  value: {
417
449
  classPropertyName: "value",
418
450
  publicName: "value",
@@ -427,11 +459,10 @@ class TabPanel {
427
459
  },
428
460
  properties: {
429
461
  "attr.id": "_pattern.id()",
430
- "attr.tabindex": "_pattern.tabindex()",
431
- "attr.inert": "_pattern.hidden() ? true : null",
462
+ "attr.tabindex": "_pattern.tabIndex()",
463
+ "attr.inert": "!visible() ? true : null",
432
464
  "attr.aria-labelledby": "_pattern.labelledBy()"
433
- },
434
- classAttribute: "ng-tabpanel"
465
+ }
435
466
  },
436
467
  exportAs: ["ngTabPanel"],
437
468
  hostDirectives: [{
@@ -453,10 +484,9 @@ i0.ɵɵngDeclareClassMetadata({
453
484
  exportAs: 'ngTabPanel',
454
485
  host: {
455
486
  'role': 'tabpanel',
456
- 'class': 'ng-tabpanel',
457
487
  '[attr.id]': '_pattern.id()',
458
- '[attr.tabindex]': '_pattern.tabindex()',
459
- '[attr.inert]': '_pattern.hidden() ? true : null',
488
+ '[attr.tabindex]': '_pattern.tabIndex()',
489
+ '[attr.inert]': '!visible() ? true : null',
460
490
  '[attr.aria-labelledby]': '_pattern.labelledBy()'
461
491
  },
462
492
  hostDirectives: [{
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/aria/tabs/tabs.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 {DeferredContent, DeferredContentAware} from '@angular/aria/deferred-content';\nimport {_IdGenerator} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n model,\n linkedSignal,\n signal,\n Signal,\n afterRenderEffect,\n OnInit,\n OnDestroy,\n} from '@angular/core';\nimport {TabListPattern, TabPanelPattern, TabPattern} from '@angular/aria/private';\n\ninterface HasElement {\n element: Signal<HTMLElement>;\n}\n\n/**\n * Sort directives by their document order.\n */\nfunction sortDirectives(a: HasElement, b: HasElement) {\n return (a.element().compareDocumentPosition(b.element()) & Node.DOCUMENT_POSITION_PRECEDING) > 0\n ? 1\n : -1;\n}\n\n/**\n * A Tabs container.\n *\n * Represents a set of layered sections of content. The Tabs is a container meant to be used with\n * TabList, Tab, and TabPanel as follows:\n *\n * ```html\n * <div ngTabs>\n * <ul ngTabList>\n * <li ngTab value=\"tab1\">Tab 1</li>\n * <li ngTab value=\"tab2\">Tab 2</li>\n * <li ngTab value=\"tab3\">Tab 3</li>\n * </ul>\n *\n * <div ngTabPanel value=\"tab1\">\n * <ng-template ngTabContent>Tab content 1</ng-template>\n * </div>\n * <div ngTabPanel value=\"tab2\">\n * <ng-template ngTabContent>Tab content 2</ng-template>\n * </div>\n * <div ngTabPanel value=\"tab3\">\n * <ng-template ngTabContent>Tab content 3</ng-template>\n * </div>\n * ```\n */\n@Directive({\n selector: '[ngTabs]',\n exportAs: 'ngTabs',\n host: {\n 'class': 'ng-tabs',\n },\n})\nexport class Tabs {\n /** The TabList nested inside of the container. */\n private readonly _tablist = signal<TabList | undefined>(undefined);\n\n /** The TabPanels nested inside of the container. */\n private readonly _unorderedPanels = signal(new Set<TabPanel>());\n\n /** The Tab UIPattern of the child Tabs. */\n tabs = computed(() => this._tablist()?.tabs());\n\n /** The TabPanel UIPattern of the child TabPanels. */\n unorderedTabpanels = computed(() =>\n [...this._unorderedPanels()].map(tabpanel => tabpanel._pattern),\n );\n\n register(child: TabList | TabPanel) {\n if (child instanceof TabList) {\n this._tablist.set(child);\n }\n\n if (child instanceof TabPanel) {\n this._unorderedPanels().add(child);\n this._unorderedPanels.set(new Set(this._unorderedPanels()));\n }\n }\n\n deregister(child: TabList | TabPanel) {\n if (child instanceof TabList) {\n this._tablist.set(undefined);\n }\n\n if (child instanceof TabPanel) {\n this._unorderedPanels().delete(child);\n this._unorderedPanels.set(new Set(this._unorderedPanels()));\n }\n }\n}\n\n/**\n * A TabList container.\n *\n * Controls a list of Tab(s).\n */\n@Directive({\n selector: '[ngTabList]',\n exportAs: 'ngTabList',\n host: {\n 'role': 'tablist',\n 'class': 'ng-tablist',\n '[attr.tabindex]': '_pattern.tabindex()',\n '[attr.aria-disabled]': '_pattern.disabled()',\n '[attr.aria-orientation]': '_pattern.orientation()',\n '[attr.aria-activedescendant]': '_pattern.activedescendant()',\n '(keydown)': '_pattern.onKeydown($event)',\n '(pointerdown)': '_pattern.onPointerdown($event)',\n '(focusin)': 'onFocus()',\n },\n})\nexport class TabList implements OnInit, OnDestroy {\n /** A reference to the tab list element. */\n private readonly _elementRef = inject(ElementRef);\n\n /** The parent Tabs. */\n private readonly _tabs = inject(Tabs);\n\n /** The Tabs nested inside of the TabList. */\n private readonly _unorderedTabs = signal(new Set<Tab>());\n\n /** The internal tab selection state. */\n private readonly _selection = linkedSignal(() =>\n this.selectedTab() ? [this.selectedTab()!] : [],\n );\n\n /** Text direction. */\n readonly textDirection = inject(Directionality).valueSignal;\n\n /** The Tab UIPatterns of the child Tabs. */\n readonly tabs = computed(() =>\n [...this._unorderedTabs()].sort(sortDirectives).map(tab => tab._pattern),\n );\n\n /** Whether the tablist is vertically or horizontally oriented. */\n readonly orientation = input<'vertical' | 'horizontal'>('horizontal');\n\n /** Whether focus should wrap when navigating. */\n readonly wrap = input(true, {transform: booleanAttribute});\n\n /** Whether disabled items in the list should be skipped when navigating. */\n readonly skipDisabled = input(true, {transform: booleanAttribute});\n\n /** The focus strategy used by the tablist. */\n readonly focusMode = input<'roving' | 'activedescendant'>('roving');\n\n /** The selection strategy used by the tablist. */\n readonly selectionMode = input<'follow' | 'explicit'>('follow');\n\n /** Whether the tablist is disabled. */\n readonly disabled = input(false, {transform: booleanAttribute});\n\n /** The current selected tab. */\n readonly selectedTab = model<string | undefined>();\n\n /** The TabList UIPattern. */\n readonly _pattern: TabListPattern = new TabListPattern({\n ...this,\n items: this.tabs,\n value: this._selection,\n activeItem: signal(undefined),\n element: () => this._elementRef.nativeElement,\n });\n\n /** Whether the tree has received focus yet. */\n private _hasFocused = signal(false);\n\n constructor() {\n afterRenderEffect(() => this.selectedTab.set(this._selection()[0]));\n\n afterRenderEffect(() => {\n if (!this._hasFocused()) {\n this._pattern.setDefaultState();\n }\n });\n }\n\n onFocus() {\n this._hasFocused.set(true);\n }\n\n ngOnInit() {\n this._tabs.register(this);\n }\n\n ngOnDestroy() {\n this._tabs.deregister(this);\n }\n\n register(child: Tab) {\n this._unorderedTabs().add(child);\n this._unorderedTabs.set(new Set(this._unorderedTabs()));\n }\n\n deregister(child: Tab) {\n this._unorderedTabs().delete(child);\n this._unorderedTabs.set(new Set(this._unorderedTabs()));\n }\n}\n\n/** A selectable tab in a TabList. */\n@Directive({\n selector: '[ngTab]',\n exportAs: 'ngTab',\n host: {\n 'role': 'tab',\n 'class': 'ng-tab',\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 '[attr.aria-controls]': '_pattern.controls()',\n },\n})\nexport class Tab implements HasElement, OnInit, OnDestroy {\n /** A reference to the tab element. */\n private readonly _elementRef = inject(ElementRef);\n\n /** The parent Tabs. */\n private readonly _tabs = inject(Tabs);\n\n /** The parent TabList. */\n private readonly _tabList = inject(TabList);\n\n /** A global unique identifier for the tab. */\n private readonly _id = inject(_IdGenerator).getId('ng-tab-');\n\n /** The host native element. */\n readonly element = computed(() => this._elementRef.nativeElement);\n\n /** The parent TabList UIPattern. */\n readonly tablist = computed(() => this._tabList._pattern);\n\n /** The TabPanel UIPattern associated with the tab */\n readonly tabpanel = computed(() =>\n this._tabs.unorderedTabpanels().find(tabpanel => tabpanel.value() === this.value()),\n );\n\n /** Whether a tab is disabled. */\n readonly disabled = input(false, {transform: booleanAttribute});\n\n /** A local unique identifier for the tab. */\n readonly value = input.required<string>();\n\n /** The Tab UIPattern. */\n readonly _pattern: TabPattern = new TabPattern({\n ...this,\n id: () => this._id,\n tablist: this.tablist,\n tabpanel: this.tabpanel,\n value: this.value,\n });\n\n ngOnInit() {\n this._tabList.register(this);\n }\n\n ngOnDestroy() {\n this._tabList.deregister(this);\n }\n}\n\n/**\n * A TabPanel container for the resources of layered content associated with a tab.\n *\n * If a tabpanel is hidden due to its corresponding tab is not activated, the `inert` attribute\n * will be applied to the tabpanel element to remove it from the accessibility tree and stop\n * all the keyboard and pointer interactions. Note that this does not visually hide the tabpenl\n * and a proper styling is required.\n */\n@Directive({\n selector: '[ngTabPanel]',\n exportAs: 'ngTabPanel',\n host: {\n 'role': 'tabpanel',\n 'class': 'ng-tabpanel',\n '[attr.id]': '_pattern.id()',\n '[attr.tabindex]': '_pattern.tabindex()',\n '[attr.inert]': '_pattern.hidden() ? true : null',\n '[attr.aria-labelledby]': '_pattern.labelledBy()',\n },\n hostDirectives: [\n {\n directive: DeferredContentAware,\n inputs: ['preserveContent'],\n },\n ],\n})\nexport class TabPanel implements OnInit, OnDestroy {\n /** The DeferredContentAware host directive. */\n private readonly _deferredContentAware = inject(DeferredContentAware);\n\n /** The parent Tabs. */\n private readonly _Tabs = inject(Tabs);\n\n /** A global unique identifier for the tab. */\n private readonly _id = inject(_IdGenerator).getId('ng-tabpanel-');\n\n /** The Tab UIPattern associated with the tabpanel */\n readonly tab = computed(() => this._Tabs.tabs()?.find(tab => tab.value() === this.value()));\n\n /** A local unique identifier for the tabpanel. */\n readonly value = input.required<string>();\n\n /** The TabPanel UIPattern. */\n readonly _pattern: TabPanelPattern = new TabPanelPattern({\n ...this,\n id: () => this._id,\n tab: this.tab,\n });\n\n constructor() {\n afterRenderEffect(() => this._deferredContentAware.contentVisible.set(!this._pattern.hidden()));\n }\n\n ngOnInit() {\n this._Tabs.register(this);\n }\n\n ngOnDestroy() {\n this._Tabs.deregister(this);\n }\n}\n\n/**\n * A TabContent container for the lazy-loaded content.\n */\n@Directive({\n selector: 'ng-template[ngTabContent]',\n exportAs: 'ngTabContent',\n hostDirectives: [DeferredContent],\n})\nexport class TabContent {}\n"],"names":["sortDirectives","a","unorderedTabpanels","computed","_unorderedPanels","map","tabpanel","_pattern","ngDevMode","debugName","register","child","TabList","_tablist","set","Set","deregister","undefined","TabPanel","delete","i0","ɵɵngDeclareFactory","ɵdir","ɵɵngDeclareDirective","minVersion","version","type","Tabs","isStandalone","selector","host","classAttribute","exportAs","ngImport","Directive","args","selectedTab","Directionality","valueSignal","sort","tab","orientation","input","transform","booleanAttribute","focusMode","selectionMode","disabled","model","TabListPattern","items","tabs","value","_selection","element","_elementRef","nativeElement","signal","constructor","afterRenderEffect","_hasFocused","setDefaultState","onFocus","ngOnDestroy","_tabs","_unorderedTabs","add","ɵfac","deps","target","ɵɵFactoryTarget","inputs","classPropertyName","publicName","isSignal","isRequired","transformFunction","wrap","skipDisabled","outputs","attributes","listeners","properties","decorators","ElementRef","_tabList","inject","find","required","TabPattern","tablist","ngOnInit","Tab","_id","_IdGenerator","getId"],"mappings":";;;;;;;;AAoCE,SACEA,cAAAA,CAAAC,CAAE;;;;;;;;;;;;;AA+BJC,EAAAA,kBAAA,GAAAC,QAAA,CAAAC,MAAAA,CAAAA,GAAAA,IAAAA,CAAAA,gBAAkB,EAAAC,CAAAA,CAAAA,GAAA,CAAAC,QAAA,IAAAA,QAAA,CAAAC,QAAA,OAAAC,SAAA,GAAA,CAAA;IAAAC,SAAA,EAAA;AAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;AAClBC,EAAAA,QAAMA,CAAAC,KAAA,EAAA;IAEL,IAAAA,KAAA,YAAAC,OAAA,EAAA;AACF,MAAA,IAAA,CAAAC,QAAA,CAAAC,GAAA,CAAAH,KAAA,CAAA;AAuCD;;;MAIG,IAAAP,CAAAA,gBAAA,CAAAU,GAAA,CAAA,IAgBHC,IAAa,IAAA,CAAAX,gBAAO,EAAA,CAAA,CAAA;;;AAO2BY,EAAAA,UAAAA,CAAAL,KAAA,EAAA;IAC5B,IAAAA,KAAA,YAAAC,OAAA,EAAA;AAGU,MAAA,IAAA,CAAAC,QAAA,CAAAC,GAAe,CAAAG,SAAM,CAC9C;;QAION,KAAA,YAAAO;AAEmC,MAAA,IAAA,CAAAd,gBAAA,EAAA,CAAAe,MAAA,CAAAR,KAAA,CAAA;AACnC,MAAA,IAAA,CAAAP,gBAAA,CAAAU,GAAA,CAAAC,IAAAA,GAAA,MAAAX,gBAAA,EAAA,CAAA,CAAA;AAKA;;aAGA,GAAOgB,EAAA,CAAAC;;;;;;;;SAE4DC,IAAA,GAAAF,EAAA,CAAAG,oBAAA,CAAA;IAAAC,UAAA,EAAA,QAAA;IAAAC,OAAA,EAAA,eAAA;AAAAC,IAAAA,IAAA,EAAAC,IAAA;IAAAC,YAAA,EAAA,IAAA;IAAAC,QAAA,EAAA,UAAA;IAAAC,IAAA,EAAA;MAAAC,cAAA,EAAA;AAAA,KAAA;IAAAC,QAAA,EAAA,CAAA,QAAA,CAAA;AAAAC,IAAAA,QAAA,EAAAb;AAAA,GAAA,CAAA;;AAInE,EAAA,CAAA,wBAAA,CAAA;AAAAI,EAAAA,UAAyD;;;;;AAEhBE,IAAAA,IAAA,EAAAQ,SAAA;IACzCC,IAAA,EAAA,CAAA;;;;;;;;;AArGA,MAAA,OAAA,CAAA;;;;;;kDAqIT,WAAAC,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA;yBAIAC,cAAA,EAAAC,WAAA;+CAIA,EAAA,CAAA,CAAAC,IAAA,CAAAvC,cAAA,CAAAK,CAAAA,GAAA,CAAAmC,GAAA,IAAAA,GAAA,CAAAjC,QAAA,OAAAC,SAAA,GAAA,CAAA;IAAAC,SAAA,EAAA;AAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;EAIEgC,WAAA,GAAAC,KAAA,CAAA,YAAA,EAAA,IAAAlC,SAAgC,GAAA,CAAA;IAAAC,SAAA,EAAA;AAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;yBAMlCD,SAAA,GAAA,CAAA;IAAAC,SAAA,EAAA,MAAA;AAAAkC,IAAAA,SAAA,EAAAC;AAAA,GAAA,CAAA,GAAA,CAAA;AAAAD,IAAAA,SAAA,EAAAC;AAAA,GAAA,CAAA,CAAA,CAAA;;;;;;;EAnGAC,SAAA,GAAAH,KAAA,CAAA,QAAA,EAAA,IAAAlC,SAAA,GAAA,CAAA;IAAAC,SAAA,EAAA;AAAqB,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;AAGnBqC,EAAAA,aAAA,GAAAJ,KAAA,CAAAlC,QAAAA,EAAAA,IAAAA,SAAA,GAAqB,CAAA;IAAAC,SAAA,EAAA;AAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;EAGrBsC,QAAA,GAAAL,KAAA,CAAA,KAAA,EAAA,IAAAlC,SAAA,GAAA,CAAA;IAAAC,SAAA,EAAA,UAAA;AAAAkC,IAAAA,SAAA,EAAmDC;AAAA,GAAA,CAAA,GAAA,CAAA;AAAAD,IAAAA,SAAA,EAAAC;AAAA,GAAA,CAAA,CAAA,CAAA;AAGnDR,EAAAA,WAAA,GAAAY,KAAA,CAAAxC,IAAAA,SAAA,IAAAS,SAAiD,EAAA;IAAAR,SAAA,EAAA;AAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;AAGpDF,EAAAA,QAAA,OAAA0C,cAAA,CAAA;;AAyGDC,IAAAA,KAAA,OAAAC,IAAA;IACwCC,KAAA,EAAA,KAAAC,UAAA;gCAGf,CAAA;AACEC,IAAAA,OAAO,EAAAA,MAAK,IAAA,CAAAC,WAAA,CAAAC;AAGpB,GAAA,CAAA;aAGY,GAAAC,MAAA,YAAAjD,SAAA,GAAA,CAAA;IAAAC,SAAA,EAAA;AAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;aAEEiD,GAAA;AACtBC,IAAAA,iBAAU,OAAY,IAAAvB,CAAAA,WAAA,CAAAtB,GAAA,MAAAuC,UAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAE/BM,IAAAA,iBAAoC,CAAA,MAAA;MAC3B,IAAO,CAAG,IAAA,CAAAC,WAAS,EAAA,EAAA;QAEyB,IAAArD,CAAAA,QAAA,CAAAsD,eAAA,EAAA;;AAM5C,KAAA,CAAA;AAGA;SAETC,GAAA;AAEE,IAAA,IAAA,CAAAF,WAAA,CAAO9C,GAAA,CAAA,IAAA,CAAA;;;;;AAKRiD,EAAAA,WAAAA,GAAA;IAGC,IAAA,CAAAC,KAAA,CAAAhD,UAAA,CAAA,IAAA,CAAA;;;QAKF,CAAAiD,cAAA,EAAAC,CAAAA,GAAA,CAAAvD,KAAA,CAAA;;;;yBA3DQ,CAAAQ,MAAA,CAAAR,KAAA,CAAA;AAAC,IAAA,IAAA,CAAAsD,cAAA,CAAAnD,GAAA,CAAAC,IAAAA,GAAA,MAAAkD,cAAA,EAAA,CAAA,CAAA;AAET;AACAE,EAAAA,OAAAA,IAAA,GAAA/C,EAAA,CAAAC,kBAAM,CAAA;IAAAG,UAAA,EAAA,QAAA;IAAAC,OAAA,EAAA,eAAA;AAAAQ,IAAAA,QAAA,EAAAb,EAAA;AAAAM,IAAAA,IAAA,EAAAd,OAAA;IAAAwD,IAAA,EAAA,EAAA;AAAAC,IAAAA,MAAA,EAAAjD,EAAA,CAAAkD,eAAA,CAAApC;AAAA,GAAA,CAAA;SACJZ,IAAA,GAAAF,EAAA,CAAAG,oBAAa,CAAA;AAAAC,IAAAA,UAAA,EAAA,QAAA;IAAAC,OAAA,EAAA,eAAA;AAAAC,IAAAA,IAAA,EAAAd,OAAA;IAAAgB,YAAA,EAAA,IAAA;IAAAC,QAAA,EAAA,aAAA;IAAA0C,MAAA,EAAA;MAAA9B,WAAA,EAAA;QAAA+B,iBAAA,EAAA,aAAA;QAAAC,UAAA,EAAA,aAAA;QAAAC,QAAA,EAAA,IAAA;QAAAC,UAAA,EAAA,KAAA;QAAAC,iBAAA,EAAA;AAAA,OAAA;MAAAC,IAAA,EAAA;QAAAL,iBAAA,EAAA,MAAA;QAAAC,UAAA,EAAA,MAAA;QAAAC,QAAA,EAAA,IAAA;QAAAC,UAAA,EAAA,KAAA;QAAAC,iBAAA,EAAA;AAAA,OAAA;MAAAE,YAAA,EAAA;QAAAN,iBAAA,EAAA,cAAA;QAAAC,UAAA,EAAA,cAAA;QAAAC,QAAA,EAAA,IAAA;QAAAC,UAAA,EAAA,KAAA;QAAAC,iBAAA,EAAA;AAAA,OAAA;MAAA/B,SAAA,EAAA;QAAA2B,iBAAA,EAAA,WAAA;QAAAC,UAAA,EAAA,WAAA;QAAAC,QAAA,EAAA,IAAA;QAAAC,UAAA,EAAA,KAAA;QAAAC,iBAAA,EAAA;AAAA,OAAA;MAAA9B,aAAA,EAAA;QAAA0B,iBAAA,EAAA,eAAA;QAAAC,UAAA,EAAA,eAAA;QAAAC,QAAA,EAAA,IAAA;QAAAC,UAAA,EAAA,KAAA;QAAAC,iBAAA,EAAA;AAAA,OAAA;MAAA7B,QAAA,EAAA;QAAAyB,iBAAA,EAAA,UAAA;QAAAC,UAAA,EAAA,UAAA;QAAAC,QAAA,EAAA,IAAA;QAAAC,UAAA,EAAA,KAAA;QAAAC,iBAAA,EAAA;AAAA,OAAA;MAAAxC,WAAA,EAAA;QAAAoC,iBAAA,EAAA,aAAA;QAAAC,UAAA,EAAA,aAAA;QAAAC,QAAA,EAAA,IAAA;QAAAC,UAAA,EAAA,KAAA;QAAAC,iBAAA,EAAA;AAAA;AAAA,KAAA;IAAAG,OAAA,EAAA;MAAA3C,WAAA,EAAA;AAAA,KAAA;IAAAN,IAAA,EAAA;MAAAkD,UAAA,EAAA;AAAA,QAAA,MAAA,EAAA;AAAA,OAAA;MAAAC,SAAA,EAAA;AAAA,QAAA,SAAA,EAAA,4BAAA;AAAA,QAAA,aAAA,EAAA,gCAAA;AAAA,QAAA,SAAA,EAAA;AAAA,OAAA;MAAAC,UAAA,EAAA;AAAA,QAAA,eAAA,EAAA,qBAAA;AAAA,QAAA,oBAAA,EAAA,qBAAA;AAAA,QAAA,uBAAA,EAAA,wBAAA;AAAA,QAAA,4BAAA,EAAA;AAAA,OAAA;MAAAnD,cAAA,EAAA;AAAA,KAAA;IAAAC,QAAA,EAAA,CAAA,WAAA,CAAA;AAAAC,IAAAA,QAAA,EAAAb;AAAA,GAAA,CAAA;;AAGb,EAAA,CAAA,wBAAA,CAAA;EAAAI,UAAA,EAAA,QAAA;EAAAC,OAAA,EAAA,eAAA;AAAAQ,EAAAA,QAAA,EAAAb,EAAA;AAAAM,EAAAA,IAAA,EAAAd,OAAA;EAAAuE,UAAA,EAAA,CAAA;AACAzD,IAAAA,IAAA,EAAAQ,SAAA;IACAC,IAAA,EAAA,CAAA;MACAN,QAAA,EAAA,aAAA;;;;;yBApDK,EAAA,qBAAA;AAAA,QAAA,sBAAA,EAAA,qBAAA;QACL,yBAAY,EAAA,wBAAA;sCACG,EAAA,6BAAA;QACf,WAAA,EAAA,4BAAA;AAEF,QAAA,eAA+C,EAAA,gCAAA;QACvC,WAAA,EAAA;;;;;;;AASN,EAAA,WAAA,GAAA,MAAA,CAAAuD,UAAE,CAAA;;EAwCLC,QAAA,GAAAC,MAAA,CAAA1E,OAAA,CAAA;mCAmFiE,SAAA,CAAA;qBAKd,MAAA,IAAA,CAAA2C,WAAA,CAAAC,aAAA,MAAAhD,SAAA,GAAA,CAAA;IAAAC,SAAA,EAAA;AAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;qBAIT,MAAA,IAAA,CAAA4E,QAAA,CAAA9E,QAAA,MAAAC,SAAA,GAAA,CAAA;IAAAC,SAAA,EAAA;AAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;yDAG1B,EAAA8E,CAAAA,IAAA,CAAAjF,QAAA,IAAAA,QAAA,CAAA8C,KAAA,EAAAA,KAAAA,IAAAA,CAAAA,KAAA,SAAA5C,SAAA,GAAA,CAAA;IAAAC,SAAA,EAAA;AAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;;;;;;;AAQb2C,EAAAA,KAAA,GAAAV,KAAA,CAAA8C,QAAA,KAAAhF,SAAyB,GAAA,CAAA;IAAAC,SAAA,EAAA;AAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA;AAIzBF,EAAAA,QAAA,OAAAkF,UAAA,CAAA;IACF,GAAA,IAAA;;WAnDQ,EAAA,IAAA,CAAAC,OAAA;AACRpF,IAAAA,QAAA,OAAAA,QAAA;AACA8C,IAAAA,KAAA,MAAA,CAAAA;AAEE,GAAA,CAAA;AACAuC,EAAAA,QAAAA,GAAsB;IACtB,IAAA,CAAAN,QAAA,CAAA3E,QAAA,CAAA,IAAA,CAAA;;AAEAqD,EAAAA,WAAAA,GAAA;IACA,IAAAsB,CAAAA,QAAA,CAAArE,UAAA,CAAA,IAAA,CAAA;;SAEFmD,IAAA,GAAA/C,EAAA,CAAAC,kBAAA,CAAA;IAAAG,UAAA,EAAA,QAAA;IAAAC,OAAA,EAAA,eAAA;AAAAQ,IAAAA,QAAA,EAAAb,EAAA;AAAAM,IAAAA,IAAA,EAAAkE,GAAA;IAAAxB,IAAA,EAAA,EAAA;AAAAC,IAAAA,MAAA,EAAAjD,EAAA,CAAAkD,eAAA,CAAApC;AAAA,GAAA,CAAA;AAEI,EAAA,OAAAZ,IAAA,GAAAF,EAAA,CAAAG,oBAAA,CAAA;IAAAC,UAAA,EAAA,QAAA;IAAAC,OAAA,EAAA,eAAA;AAAAC,IAAAA,IAAA,EAAAkE,GAAA;IAAAhE,YAAA,EAAA,IAAA;IAAAC,QAAA,EAAA,SAAA;IAAA0C,MAAA,EAAA;MAAAxB,QAAA,EAAA;QAAAyB,iBAAA,EAAA,UAAA;QAAAC,UAAA,EAAA,UAAA;QAAAC,QAAA,EAAA,IAAA;QAAAC,UAAA,EAAA,KAAA;QAAAC,iBAAA,EAAA;AAAA,OAAA;MAAAxB,KAAA,EAAA;QAAAoB,iBAAA,EAAA,OAAA;QAAAC,UAAA,EAAA,OAAA;QAAAC,QAAA,EAAA,IAAA;QAAAC,UAAA,EAAA,IAAA;QAAAC,iBAAA,EAAA;AAAA;AAAA,KAAA;IAAA9C,IAAA,EAAA;MAAAkD,UAAA,EAAA;AAAA,QAAA,MAAA,EAAA;AAAA,OAAA;MAAAE,UAAA,EAAA;AAAA,QAAA,kBAAA,EAAA,mBAAA;AAAA,QAAA,SAAA,EAAA,eAAA;AAAA,QAAA,eAAA,EAAA,qBAAA;AAAA,QAAA,oBAAA,EAAA,qBAAA;AAAA,QAAA,oBAAA,EAAA,qBAAA;AAAA,QAAA,oBAAA,EAAA;AAAA,OAAA;MAAAnD,cAAA,EAAA;AAAA,KAAA;IAAAC,QAAA,EAAA,CAAA,OAAA,CAAA;AAAAC,IAAAA,QAAA,EAAAb;AAAA,GAAA,CAAA;;AAED,EAAA,CAAA,wBAAA,CAAA;EAAAI,UAAA,EAAA,QAAA;EAAAC,OAAA,EAAA,eAAA;AAAAQ,EAAAA,QAAA,EAAAb,EAAA;AAAAM,EAAAA,IAAA,EAAAkE,GAAA;EAAAT,UAAA,EAAA,CAAA;AAEJzD,IAAAA,IAAA,EAAAQ,SAAA;;MAqCDL,QAAA,EAAA,SAAA;;;;;;;QA9DA,iBAAA,EAAA,qBAAA;;;;;;;;;;;AAkEEgE,EAAAA,GAAA,GAAAP,MAAA,CAAAQ,YAAA,EAAAC,KAAA,CAAA,cAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QACA,WAAA,EAAA,eAAA;AAAA,QAAA,iBAAA,EAAA,qBAAA;wBACc,iCAAA;QACf,wBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"tabs.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/aria/tabs/tabs.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 {_IdGenerator} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n model,\n signal,\n afterRenderEffect,\n OnInit,\n OnDestroy,\n} from '@angular/core';\nimport {\n TabListPattern,\n TabPanelPattern,\n TabPattern,\n DeferredContent,\n DeferredContentAware,\n} from '@angular/aria/private';\n\ninterface HasElement {\n element: HTMLElement;\n}\n\n/**\n * Sort directives by their document order.\n */\nfunction sortDirectives(a: HasElement, b: HasElement) {\n return (a.element.compareDocumentPosition(b.element) & Node.DOCUMENT_POSITION_PRECEDING) > 0\n ? 1\n : -1;\n}\n\n/**\n * A Tabs container.\n *\n * The `ngTabs` directive represents a set of layered sections of content. It acts as the\n * overarching container for a tabbed interface, coordinating the behavior of `ngTabList`,\n * `ngTab`, and `ngTabPanel` directives.\n *\n * ```html\n * <div ngTabs>\n * <ul ngTabList [(selectedTab)]=\"selectedTabValue\">\n * <li ngTab value=\"tab1\">Tab 1</li>\n * <li ngTab value=\"tab2\">Tab 2</li>\n * <li ngTab value=\"tab3\">Tab 3</li>\n * </ul>\n *\n * <div ngTabPanel value=\"tab1\">\n * <ng-template ngTabContent>Content for Tab 1</ng-template>\n * </div>\n * <div ngTabPanel value=\"tab2\">\n * <ng-template ngTabContent>Content for Tab 2</ng-template>\n * </div>\n * <div ngTabPanel value=\"tab3\">\n * <ng-template ngTabContent>Content for Tab 3</ng-template>\n * </div>\n * </div>\n * ```\n *\n * @developerPreview 21.0\n */\n@Directive({\n selector: '[ngTabs]',\n exportAs: 'ngTabs',\n})\nexport class Tabs {\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 TabList nested inside of the container. */\n private readonly _tablist = signal<TabList | undefined>(undefined);\n\n /** The TabPanels nested inside of the container. */\n private readonly _unorderedPanels = signal(new Set<TabPanel>());\n\n /** The Tab UIPattern of the child Tabs. */\n readonly _tabPatterns = computed(() => this._tablist()?._tabPatterns());\n\n /** The TabPanel UIPattern of the child TabPanels. */\n readonly _unorderedTabpanelPatterns = computed(() =>\n [...this._unorderedPanels()].map(tabpanel => tabpanel._pattern),\n );\n\n register(child: TabList | TabPanel) {\n if (child instanceof TabList) {\n this._tablist.set(child);\n }\n\n if (child instanceof TabPanel) {\n this._unorderedPanels().add(child);\n this._unorderedPanels.set(new Set(this._unorderedPanels()));\n }\n }\n\n deregister(child: TabList | TabPanel) {\n if (child instanceof TabList) {\n this._tablist.set(undefined);\n }\n\n if (child instanceof TabPanel) {\n this._unorderedPanels().delete(child);\n this._unorderedPanels.set(new Set(this._unorderedPanels()));\n }\n }\n}\n\n/**\n * A TabList container.\n *\n * The `ngTabList` directive controls a list of `ngTab` elements. It manages keyboard\n * navigation, selection, and the overall orientation of the tabs. It should be placed\n * within an `ngTabs` container.\n *\n * ```html\n * <ul ngTabList [(selectedTab)]=\"mySelectedTab\" orientation=\"horizontal\" selectionMode=\"explicit\">\n * <li ngTab value=\"first\">First Tab</li>\n * <li ngTab value=\"second\">Second Tab</li>\n * </ul>\n * ```\n *\n * @developerPreview 21.0\n */\n@Directive({\n selector: '[ngTabList]',\n exportAs: 'ngTabList',\n host: {\n 'role': 'tablist',\n '[attr.tabindex]': '_pattern.tabIndex()',\n '[attr.aria-disabled]': '_pattern.disabled()',\n '[attr.aria-orientation]': '_pattern.orientation()',\n '[attr.aria-activedescendant]': '_pattern.activeDescendant()',\n '(keydown)': '_pattern.onKeydown($event)',\n '(pointerdown)': '_pattern.onPointerdown($event)',\n '(focusin)': 'onFocus()',\n },\n})\nexport class TabList implements OnInit, OnDestroy {\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 parent Tabs. */\n private readonly _tabs = inject(Tabs);\n\n /** The Tabs nested inside of the TabList. */\n private readonly _unorderedTabs = signal(new Set<Tab>());\n\n /** Text direction. */\n readonly textDirection = inject(Directionality).valueSignal;\n\n /** The Tab UIPatterns of the child Tabs. */\n readonly _tabPatterns = computed(() =>\n [...this._unorderedTabs()].sort(sortDirectives).map(tab => tab._pattern),\n );\n\n /** Whether the tablist is vertically or horizontally oriented. */\n readonly orientation = input<'vertical' | 'horizontal'>('horizontal');\n\n /** Whether focus should wrap when navigating. */\n readonly wrap = input(true, {transform: booleanAttribute});\n\n /**\n * Whether to allow disabled items to receive focus. When `true`, disabled items are\n * focusable but not interactive. When `false`, disabled items are skipped during navigation.\n */\n readonly softDisabled = input(true, {transform: booleanAttribute});\n\n /**\n * The focus strategy used by the tablist.\n * - `roving`: Focus is moved to the active tab using `tabindex`.\n * - `activedescendant`: Focus remains on the tablist container, and `aria-activedescendant` is used to indicate the active tab.\n */\n readonly focusMode = input<'roving' | 'activedescendant'>('roving');\n\n /**\n * The selection strategy used by the tablist.\n * - `follow`: The focused tab is automatically selected.\n * - `explicit`: Tabs are selected explicitly by the user (e.g., via click or spacebar).\n */\n readonly selectionMode = input<'follow' | 'explicit'>('follow');\n\n /** The current selected tab. */\n readonly selectedTab = model<string | undefined>();\n\n /** Whether the tablist is disabled. */\n readonly disabled = input(false, {transform: booleanAttribute});\n\n /** The TabList UIPattern. */\n readonly _pattern: TabListPattern = new TabListPattern({\n ...this,\n items: this._tabPatterns,\n activeItem: signal(undefined),\n element: () => this._elementRef.nativeElement,\n });\n\n /** Whether the tree has received focus yet. */\n private _hasFocused = signal(false);\n\n constructor() {\n afterRenderEffect(() => {\n if (!this._hasFocused()) {\n this._pattern.setDefaultState();\n }\n });\n\n afterRenderEffect(() => {\n const tab = this._pattern.selectedTab();\n if (tab) {\n this.selectedTab.set(tab.value());\n }\n });\n\n afterRenderEffect(() => {\n const value = this.selectedTab();\n if (value) {\n this._pattern.open(value);\n }\n });\n }\n\n onFocus() {\n this._hasFocused.set(true);\n }\n\n ngOnInit() {\n this._tabs.register(this);\n }\n\n ngOnDestroy() {\n this._tabs.deregister(this);\n }\n\n register(child: Tab) {\n this._unorderedTabs().add(child);\n this._unorderedTabs.set(new Set(this._unorderedTabs()));\n }\n\n deregister(child: Tab) {\n this._unorderedTabs().delete(child);\n this._unorderedTabs.set(new Set(this._unorderedTabs()));\n }\n\n /** Opens the tab panel with the specified value. */\n open(value: string): boolean {\n return this._pattern.open(value);\n }\n}\n\n/**\n * A selectable tab in a TabList.\n *\n * The `ngTab` directive represents an individual tab control within an `ngTabList`. It\n * requires a `value` that uniquely identifies it and links it to a corresponding `ngTabPanel`.\n *\n * ```html\n * <li ngTab value=\"myTabId\" [disabled]=\"isTabDisabled\">\n * My Tab Label\n * </li>\n * ```\n *\n * @developerPreview 21.0\n */\n@Directive({\n selector: '[ngTab]',\n exportAs: 'ngTab',\n host: {\n 'role': 'tab',\n '[attr.data-active]': 'active()',\n '[attr.id]': '_pattern.id()',\n '[attr.tabindex]': '_pattern.tabIndex()',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-disabled]': '_pattern.disabled()',\n '[attr.aria-controls]': '_pattern.controls()',\n },\n})\nexport class Tab implements HasElement, OnInit, OnDestroy {\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 parent Tabs. */\n private readonly _tabs = inject(Tabs);\n\n /** The parent TabList. */\n private readonly _tabList = inject(TabList);\n\n /** A unique identifier for the widget. */\n readonly id = input(inject(_IdGenerator).getId('ng-tab-', true));\n\n /** The parent TabList UIPattern. */\n readonly tablist = computed(() => this._tabList._pattern);\n\n /** The TabPanel UIPattern associated with the tab */\n readonly tabpanel = computed(() =>\n this._tabs._unorderedTabpanelPatterns().find(tabpanel => tabpanel.value() === this.value()),\n );\n\n /** Whether a tab is disabled. */\n readonly disabled = input(false, {transform: booleanAttribute});\n\n /** The remote tabpanel unique identifier. */\n readonly value = input.required<string>();\n\n /** Whether the tab is active. */\n readonly active = computed(() => this._pattern.active());\n\n /** Whether the tab is selected. */\n readonly selected = computed(() => this._pattern.selected());\n\n /** The Tab UIPattern. */\n readonly _pattern: TabPattern = new TabPattern({\n ...this,\n tablist: this.tablist,\n tabpanel: this.tabpanel,\n expanded: signal(false),\n element: () => this.element,\n });\n\n /** Opens this tab panel. */\n open() {\n this._pattern.open();\n }\n\n ngOnInit() {\n this._tabList.register(this);\n }\n\n ngOnDestroy() {\n this._tabList.deregister(this);\n }\n}\n\n/**\n * A TabPanel container for the resources of layered content associated with a tab.\n *\n * The `ngTabPanel` directive holds the content for a specific tab. It is linked to an\n * `ngTab` by a matching `value`. If a tab panel is hidden, the `inert` attribute will be\n * applied to remove it from the accessibility tree. Proper styling is required for visual hiding.\n *\n * ```html\n * <div ngTabPanel value=\"myTabId\">\n * <ng-template ngTabContent>\n * <!-- Content for the tab panel -->\n * </ng-template>\n * </div>\n * ```\n *\n * @developerPreview 21.0\n */\n@Directive({\n selector: '[ngTabPanel]',\n exportAs: 'ngTabPanel',\n host: {\n 'role': 'tabpanel',\n '[attr.id]': '_pattern.id()',\n '[attr.tabindex]': '_pattern.tabIndex()',\n '[attr.inert]': '!visible() ? true : null',\n '[attr.aria-labelledby]': '_pattern.labelledBy()',\n },\n hostDirectives: [\n {\n directive: DeferredContentAware,\n inputs: ['preserveContent'],\n },\n ],\n})\nexport class TabPanel implements OnInit, OnDestroy {\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 DeferredContentAware host directive. */\n private readonly _deferredContentAware = inject(DeferredContentAware);\n\n /** The parent Tabs. */\n private readonly _Tabs = inject(Tabs);\n\n /** A global unique identifier for the tab. */\n readonly id = input(inject(_IdGenerator).getId('ng-tabpanel-', true));\n\n /** The Tab UIPattern associated with the tabpanel */\n readonly tab = computed(() =>\n this._Tabs._tabPatterns()?.find(tab => tab.value() === this.value()),\n );\n\n /** A local unique identifier for the tabpanel. */\n readonly value = input.required<string>();\n\n /** Whether the tab panel is visible. */\n readonly visible = computed(() => !this._pattern.hidden());\n\n /** The TabPanel UIPattern. */\n readonly _pattern: TabPanelPattern = new TabPanelPattern({\n ...this,\n });\n\n constructor() {\n afterRenderEffect(() => this._deferredContentAware.contentVisible.set(this.visible()));\n }\n\n ngOnInit() {\n this._Tabs.register(this);\n }\n\n ngOnDestroy() {\n this._Tabs.deregister(this);\n }\n}\n\n/**\n * A TabContent container for the lazy-loaded content.\n *\n * This structural directive should be applied to an `ng-template` within an `ngTabPanel`.\n * It enables lazy loading of the tab's content, meaning the content is only rendered\n * when the tab is activated for the first time.\n *\n * ```html\n * <div ngTabPanel value=\"myTabId\">\n * <ng-template ngTabContent>\n * <p>This content will be loaded when 'myTabId' is selected.</p>\n * </ng-template>\n * </div>\n * ```\n *\n * @developerPreview 21.0\n */\n@Directive({\n selector: 'ng-template[ngTabContent]',\n exportAs: 'ngTabContent',\n hostDirectives: [DeferredContent],\n})\nexport class TabContent {}\n"],"names":["sortDirectives","a","b","element","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","Tabs","_elementRef","inject","ElementRef","nativeElement","_tablist","signal","undefined","_unorderedPanels","Set","_tabPatterns","computed","_unorderedTabpanelPatterns","map","tabpanel","_pattern","ngDevMode","debugName","register","child","TabList","set","TabPanel","add","deregister","delete","deps","target","i0","ɵɵFactoryTarget","Directive","isStandalone","selector","exportAs","ngImport","decorators","args","_tabs","_unorderedTabs","textDirection","Directionality","valueSignal","sort","tab","orientation","input","wrap","transform","booleanAttribute","softDisabled","focusMode","selectionMode","selectedTab","model","disabled","TabListPattern","items","activeItem","_hasFocused","constructor","afterRenderEffect","setDefaultState","value","open","onFocus","ngOnInit","ngOnDestroy","inputs","classPropertyName","publicName","isSignal","isRequired","transformFunction","outputs","host","attributes","listeners","properties","Tab","_tabList","id","_IdGenerator","getId","tablist","find","required","active","selected","TabPattern","expanded","_deferredContentAware","DeferredContentAware","_Tabs","visible","hidden","TabPanelPattern","contentVisible","hostDirectives","directive","i1","TabContent","DeferredContent"],"mappings":"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"}