@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
package/fesm2022/tabs.mjs CHANGED
@@ -1,10 +1,10 @@
1
1
  import { _IdGenerator } from '@angular/cdk/a11y';
2
2
  import * as i0 from '@angular/core';
3
- import { InjectionToken, inject, ElementRef, signal, computed, input, booleanAttribute, model, afterRenderEffect, Directive } from '@angular/core';
3
+ import { InjectionToken, inject, ElementRef, signal, computed, afterRenderEffect, Directive, input, booleanAttribute, model, linkedSignal } from '@angular/core';
4
+ import { TabListPattern, TabPattern, TabPanelPattern } from './_tabs-chunk.mjs';
5
+ import { DeferredContentAware, DeferredContent } from './_deferred-content-chunk.mjs';
4
6
  import { Directionality } from '@angular/cdk/bidi';
5
- import { TabListPattern, TabPanelPattern, TabPattern } from './_tabs-chunk.mjs';
6
7
  import { sortDirectives } from './_element-chunk.mjs';
7
- import { DeferredContentAware, DeferredContent } from './_deferred-content-chunk.mjs';
8
8
  import './_expansion-chunk.mjs';
9
9
  import './_signal-like-chunk.mjs';
10
10
  import '@angular/core/primitives/signals';
@@ -12,21 +12,109 @@ import './_list-navigation-chunk.mjs';
12
12
  import './_click-event-manager-chunk.mjs';
13
13
 
14
14
  const TABS = new InjectionToken('TABS');
15
+ const TAB_LIST = new InjectionToken('TAB_LIST');
16
+
17
+ class Tabs {
18
+ _elementRef = inject(ElementRef);
19
+ element = this._elementRef.nativeElement;
20
+ _tabList = signal(undefined, ...(ngDevMode ? [{
21
+ debugName: "_tabList"
22
+ }] : []));
23
+ _tabPanels = signal(new Set(), ...(ngDevMode ? [{
24
+ debugName: "_tabPanels"
25
+ }] : []));
26
+ _tabPanelsList = computed(() => [...this._tabPanels()], ...(ngDevMode ? [{
27
+ debugName: "_tabPanelsList"
28
+ }] : []));
29
+ constructor() {
30
+ afterRenderEffect({
31
+ write: () => {
32
+ if (this._tabList()) {
33
+ for (const tab of this._tabList()._sortedTabs()) {
34
+ const panel = this._tabPanelsList().find(panel => panel === tab.panel());
35
+ if (panel) {
36
+ panel._tabPattern.set(tab._pattern);
37
+ }
38
+ }
39
+ }
40
+ }
41
+ });
42
+ }
43
+ _registerList(list) {
44
+ this._tabList.set(list);
45
+ }
46
+ _unregisterList(list) {
47
+ this._tabList.set(undefined);
48
+ }
49
+ _registerPanel(panel) {
50
+ this._tabPanels().add(panel);
51
+ this._tabPanels.set(new Set(this._tabPanels()));
52
+ }
53
+ _unregisterPanel(panel) {
54
+ this._tabPanels().delete(panel);
55
+ this._tabPanels.set(new Set(this._tabPanels()));
56
+ }
57
+ findTabPanel(value) {
58
+ return value ? this._tabPanelsList().find(panel => panel.value() === value) : undefined;
59
+ }
60
+ static ɵfac = i0.ɵɵngDeclareFactory({
61
+ minVersion: "12.0.0",
62
+ version: "22.0.0-next.9",
63
+ ngImport: i0,
64
+ type: Tabs,
65
+ deps: [],
66
+ target: i0.ɵɵFactoryTarget.Directive
67
+ });
68
+ static ɵdir = i0.ɵɵngDeclareDirective({
69
+ minVersion: "14.0.0",
70
+ version: "22.0.0-next.9",
71
+ type: Tabs,
72
+ isStandalone: true,
73
+ selector: "[ngTabs]",
74
+ providers: [{
75
+ provide: TABS,
76
+ useExisting: Tabs
77
+ }],
78
+ exportAs: ["ngTabs"],
79
+ ngImport: i0
80
+ });
81
+ }
82
+ i0.ɵɵngDeclareClassMetadata({
83
+ minVersion: "12.0.0",
84
+ version: "22.0.0-next.9",
85
+ ngImport: i0,
86
+ type: Tabs,
87
+ decorators: [{
88
+ type: Directive,
89
+ args: [{
90
+ selector: '[ngTabs]',
91
+ exportAs: 'ngTabs',
92
+ providers: [{
93
+ provide: TABS,
94
+ useExisting: Tabs
95
+ }]
96
+ }]
97
+ }],
98
+ ctorParameters: () => []
99
+ });
15
100
 
16
101
  class TabList {
17
102
  _elementRef = inject(ElementRef);
18
103
  element = this._elementRef.nativeElement;
19
- _tabs = inject(TABS);
20
- _unorderedTabs = signal(new Set(), ...(ngDevMode ? [{
21
- debugName: "_unorderedTabs"
104
+ _tabsParent = inject(TABS);
105
+ _tabs = signal(new Set(), ...(ngDevMode ? [{
106
+ debugName: "_tabs"
22
107
  }] : []));
23
- textDirection = inject(Directionality).valueSignal;
24
- _tabPatterns = computed(() => [...this._unorderedTabs()].sort(sortDirectives).map(tab => tab._pattern), ...(ngDevMode ? [{
108
+ _sortedTabs = computed(() => [...this._tabs()].sort(sortDirectives), ...(ngDevMode ? [{
109
+ debugName: "_sortedTabs"
110
+ }] : []));
111
+ _tabPatterns = computed(() => [...this._sortedTabs()].map(tab => tab._pattern), ...(ngDevMode ? [{
25
112
  debugName: "_tabPatterns"
26
113
  }] : []));
27
114
  orientation = input('horizontal', ...(ngDevMode ? [{
28
115
  debugName: "orientation"
29
116
  }] : []));
117
+ textDirection = inject(Directionality).valueSignal;
30
118
  wrap = input(true, {
31
119
  ...(ngDevMode ? {
32
120
  debugName: "wrap"
@@ -48,6 +136,12 @@ class TabList {
48
136
  selectedTab = model(...(ngDevMode ? [undefined, {
49
137
  debugName: "selectedTab"
50
138
  }] : []));
139
+ _selectedTabPattern = linkedSignal(() => {
140
+ const tab = this.findTab(this.selectedTab());
141
+ return tab?._pattern;
142
+ }, ...(ngDevMode ? [{
143
+ debugName: "_selectedTabPattern"
144
+ }] : []));
51
145
  disabled = input(false, {
52
146
  ...(ngDevMode ? {
53
147
  debugName: "disabled"
@@ -56,50 +150,46 @@ class TabList {
56
150
  });
57
151
  _pattern = new TabListPattern({
58
152
  ...this,
59
- items: this._tabPatterns,
153
+ element: () => this._elementRef.nativeElement,
60
154
  activeItem: signal(undefined),
61
- element: () => this._elementRef.nativeElement
155
+ items: this._tabPatterns,
156
+ selectedTab: this._selectedTabPattern
62
157
  });
63
158
  constructor() {
64
- afterRenderEffect(() => {
65
- this._pattern.setDefaultStateEffect();
66
- });
67
- afterRenderEffect(() => {
68
- const tab = this._pattern.selectedTab();
69
- if (tab) {
70
- this.selectedTab.set(tab.value());
159
+ afterRenderEffect({
160
+ write: () => {
161
+ const pattern = this._selectedTabPattern();
162
+ const tab = this._sortedTabs().find(tab => tab._pattern == pattern);
163
+ this.selectedTab.set(tab?.value());
71
164
  }
72
165
  });
73
- afterRenderEffect(() => {
74
- const value = this.selectedTab();
75
- if (value) {
76
- this._tabPatterns().forEach(tab => tab.expanded.set(false));
77
- const tab = this._tabPatterns().find(t => t.value() === value);
78
- this._pattern.selectedTab.set(tab);
79
- tab?.expanded.set(true);
80
- }
166
+ afterRenderEffect({
167
+ write: () => this._pattern.setDefaultStateEffect()
81
168
  });
82
169
  }
83
170
  ngOnInit() {
84
- this._tabs._register(this);
171
+ this._tabsParent._registerList(this);
85
172
  }
86
173
  ngOnDestroy() {
87
- this._tabs._unregister(this);
174
+ this._tabsParent._registerList(this);
88
175
  }
89
- _register(child) {
90
- this._unorderedTabs().add(child);
91
- this._unorderedTabs.set(new Set(this._unorderedTabs()));
176
+ _registerTab(child) {
177
+ this._tabs().add(child);
178
+ this._tabs.set(new Set(this._tabs()));
92
179
  }
93
- _unregister(child) {
94
- this._unorderedTabs().delete(child);
95
- this._unorderedTabs.set(new Set(this._unorderedTabs()));
180
+ _unregisterTab(child) {
181
+ this._tabs().delete(child);
182
+ this._tabs.set(new Set(this._tabs()));
96
183
  }
97
184
  open(value) {
98
- return this._pattern.open(value);
185
+ return this._pattern.open(this.findTab(value)?._pattern);
186
+ }
187
+ findTab(value) {
188
+ return value ? this._sortedTabs().find(tab => tab.value() === value) : undefined;
99
189
  }
100
190
  static ɵfac = i0.ɵɵngDeclareFactory({
101
191
  minVersion: "12.0.0",
102
- version: "22.0.0-next.6",
192
+ version: "22.0.0-next.9",
103
193
  ngImport: i0,
104
194
  type: TabList,
105
195
  deps: [],
@@ -107,7 +197,7 @@ class TabList {
107
197
  });
108
198
  static ɵdir = i0.ɵɵngDeclareDirective({
109
199
  minVersion: "17.1.0",
110
- version: "22.0.0-next.6",
200
+ version: "22.0.0-next.9",
111
201
  type: TabList,
112
202
  isStandalone: true,
113
203
  selector: "[ngTabList]",
@@ -181,13 +271,17 @@ class TabList {
181
271
  "attr.aria-activedescendant": "_pattern.activeDescendant()"
182
272
  }
183
273
  },
274
+ providers: [{
275
+ provide: TAB_LIST,
276
+ useExisting: TabList
277
+ }],
184
278
  exportAs: ["ngTabList"],
185
279
  ngImport: i0
186
280
  });
187
281
  }
188
282
  i0.ɵɵngDeclareClassMetadata({
189
283
  minVersion: "12.0.0",
190
- version: "22.0.0-next.6",
284
+ version: "22.0.0-next.9",
191
285
  ngImport: i0,
192
286
  type: TabList,
193
287
  decorators: [{
@@ -204,7 +298,11 @@ i0.ɵɵngDeclareClassMetadata({
204
298
  '(keydown)': '_pattern.onKeydown($event)',
205
299
  '(click)': '_pattern.onClick($event)',
206
300
  '(focusin)': '_pattern.onFocusIn()'
207
- }
301
+ },
302
+ providers: [{
303
+ provide: TAB_LIST,
304
+ useExisting: TabList
305
+ }]
208
306
  }]
209
307
  }],
210
308
  ctorParameters: () => [],
@@ -271,50 +369,61 @@ i0.ɵɵngDeclareClassMetadata({
271
369
  }
272
370
  });
273
371
 
274
- class TabPanel {
372
+ class Tab {
275
373
  _elementRef = inject(ElementRef);
276
374
  element = this._elementRef.nativeElement;
277
- _deferredContentAware = inject(DeferredContentAware);
278
- _tabs = inject(TABS);
279
- id = input(inject(_IdGenerator).getId('ng-tabpanel-', true), ...(ngDevMode ? [{
375
+ _tabsWrapper = inject(TABS);
376
+ _tabList = inject(TAB_LIST);
377
+ id = input(inject(_IdGenerator).getId('ng-tab-', true), ...(ngDevMode ? [{
280
378
  debugName: "id"
281
379
  }] : []));
282
- _tabPattern = computed(() => this._tabs._tabPatterns()?.find(tab => tab.value() === this.value()), ...(ngDevMode ? [{
283
- debugName: "_tabPattern"
380
+ panel = computed(() => this._tabsWrapper.findTabPanel(this.value()), ...(ngDevMode ? [{
381
+ debugName: "panel"
284
382
  }] : []));
383
+ disabled = input(false, {
384
+ ...(ngDevMode ? {
385
+ debugName: "disabled"
386
+ } : {}),
387
+ transform: booleanAttribute
388
+ });
285
389
  value = input.required(...(ngDevMode ? [{
286
390
  debugName: "value"
287
391
  }] : []));
288
- visible = computed(() => !this._pattern.hidden(), ...(ngDevMode ? [{
289
- debugName: "visible"
392
+ active = computed(() => this._pattern.active(), ...(ngDevMode ? [{
393
+ debugName: "active"
290
394
  }] : []));
291
- _pattern = new TabPanelPattern({
395
+ selected = computed(() => this._pattern.selected(), ...(ngDevMode ? [{
396
+ debugName: "selected"
397
+ }] : []));
398
+ _pattern = new TabPattern({
292
399
  ...this,
293
- tab: this._tabPattern
400
+ element: () => this.element,
401
+ tabList: () => this._tabList._pattern,
402
+ tabPanel: computed(() => this.panel()?._pattern)
294
403
  });
295
- constructor() {
296
- afterRenderEffect(() => this._deferredContentAware.contentVisible.set(this.visible()));
404
+ open() {
405
+ this._pattern.open();
297
406
  }
298
407
  ngOnInit() {
299
- this._tabs._register(this);
408
+ this._tabList._registerTab(this);
300
409
  }
301
410
  ngOnDestroy() {
302
- this._tabs._unregister(this);
411
+ this._tabList._unregisterTab(this);
303
412
  }
304
413
  static ɵfac = i0.ɵɵngDeclareFactory({
305
414
  minVersion: "12.0.0",
306
- version: "22.0.0-next.6",
415
+ version: "22.0.0-next.9",
307
416
  ngImport: i0,
308
- type: TabPanel,
417
+ type: Tab,
309
418
  deps: [],
310
419
  target: i0.ɵɵFactoryTarget.Directive
311
420
  });
312
421
  static ɵdir = i0.ɵɵngDeclareDirective({
313
422
  minVersion: "17.1.0",
314
- version: "22.0.0-next.6",
315
- type: TabPanel,
423
+ version: "22.0.0-next.9",
424
+ type: Tab,
316
425
  isStandalone: true,
317
- selector: "[ngTabPanel]",
426
+ selector: "[ngTab]",
318
427
  inputs: {
319
428
  id: {
320
429
  classPropertyName: "id",
@@ -323,6 +432,13 @@ class TabPanel {
323
432
  isRequired: false,
324
433
  transformFunction: null
325
434
  },
435
+ disabled: {
436
+ classPropertyName: "disabled",
437
+ publicName: "disabled",
438
+ isSignal: true,
439
+ isRequired: false,
440
+ transformFunction: null
441
+ },
326
442
  value: {
327
443
  classPropertyName: "value",
328
444
  publicName: "value",
@@ -333,47 +449,42 @@ class TabPanel {
333
449
  },
334
450
  host: {
335
451
  attributes: {
336
- "role": "tabpanel"
452
+ "role": "tab"
337
453
  },
338
454
  properties: {
455
+ "attr.data-active": "active()",
339
456
  "attr.id": "_pattern.id()",
340
457
  "attr.tabindex": "_pattern.tabIndex()",
341
- "attr.inert": "!visible() ? true : null",
342
- "attr.aria-labelledby": "_pattern.labelledBy()"
458
+ "attr.aria-selected": "selected()",
459
+ "attr.aria-disabled": "_pattern.disabled()",
460
+ "attr.aria-controls": "_pattern.controls()"
343
461
  }
344
462
  },
345
- exportAs: ["ngTabPanel"],
346
- hostDirectives: [{
347
- directive: DeferredContentAware,
348
- inputs: ["preserveContent", "preserveContent"]
349
- }],
463
+ exportAs: ["ngTab"],
350
464
  ngImport: i0
351
465
  });
352
466
  }
353
467
  i0.ɵɵngDeclareClassMetadata({
354
468
  minVersion: "12.0.0",
355
- version: "22.0.0-next.6",
469
+ version: "22.0.0-next.9",
356
470
  ngImport: i0,
357
- type: TabPanel,
471
+ type: Tab,
358
472
  decorators: [{
359
473
  type: Directive,
360
474
  args: [{
361
- selector: '[ngTabPanel]',
362
- exportAs: 'ngTabPanel',
475
+ selector: '[ngTab]',
476
+ exportAs: 'ngTab',
363
477
  host: {
364
- 'role': 'tabpanel',
478
+ 'role': 'tab',
479
+ '[attr.data-active]': 'active()',
365
480
  '[attr.id]': '_pattern.id()',
366
481
  '[attr.tabindex]': '_pattern.tabIndex()',
367
- '[attr.inert]': '!visible() ? true : null',
368
- '[attr.aria-labelledby]': '_pattern.labelledBy()'
369
- },
370
- hostDirectives: [{
371
- directive: DeferredContentAware,
372
- inputs: ['preserveContent']
373
- }]
482
+ '[attr.aria-selected]': 'selected()',
483
+ '[attr.aria-disabled]': '_pattern.disabled()',
484
+ '[attr.aria-controls]': '_pattern.controls()'
485
+ }
374
486
  }]
375
487
  }],
376
- ctorParameters: () => [],
377
488
  propDecorators: {
378
489
  id: [{
379
490
  type: i0.Input,
@@ -383,6 +494,14 @@ i0.ɵɵngDeclareClassMetadata({
383
494
  required: false
384
495
  }]
385
496
  }],
497
+ disabled: [{
498
+ type: i0.Input,
499
+ args: [{
500
+ isSignal: true,
501
+ alias: "disabled",
502
+ required: false
503
+ }]
504
+ }],
386
505
  value: [{
387
506
  type: i0.Input,
388
507
  args: [{
@@ -394,138 +513,54 @@ i0.ɵɵngDeclareClassMetadata({
394
513
  }
395
514
  });
396
515
 
397
- class Tabs {
398
- _elementRef = inject(ElementRef);
399
- element = this._elementRef.nativeElement;
400
- _tablist = signal(undefined, ...(ngDevMode ? [{
401
- debugName: "_tablist"
402
- }] : []));
403
- _unorderedPanels = signal(new Set(), ...(ngDevMode ? [{
404
- debugName: "_unorderedPanels"
405
- }] : []));
406
- _tabPatterns = computed(() => this._tablist()?._tabPatterns(), ...(ngDevMode ? [{
407
- debugName: "_tabPatterns"
408
- }] : []));
409
- _unorderedTabpanelPatterns = computed(() => [...this._unorderedPanels()].map(tabpanel => tabpanel._pattern), ...(ngDevMode ? [{
410
- debugName: "_unorderedTabpanelPatterns"
411
- }] : []));
412
- _register(child) {
413
- if (child instanceof TabList) {
414
- this._tablist.set(child);
415
- }
416
- if (child instanceof TabPanel) {
417
- this._unorderedPanels().add(child);
418
- this._unorderedPanels.set(new Set(this._unorderedPanels()));
419
- }
420
- }
421
- _unregister(child) {
422
- if (child instanceof TabList) {
423
- this._tablist.set(undefined);
424
- }
425
- if (child instanceof TabPanel) {
426
- this._unorderedPanels().delete(child);
427
- this._unorderedPanels.set(new Set(this._unorderedPanels()));
428
- }
429
- }
430
- static ɵfac = i0.ɵɵngDeclareFactory({
431
- minVersion: "12.0.0",
432
- version: "22.0.0-next.6",
433
- ngImport: i0,
434
- type: Tabs,
435
- deps: [],
436
- target: i0.ɵɵFactoryTarget.Directive
437
- });
438
- static ɵdir = i0.ɵɵngDeclareDirective({
439
- minVersion: "14.0.0",
440
- version: "22.0.0-next.6",
441
- type: Tabs,
442
- isStandalone: true,
443
- selector: "[ngTabs]",
444
- providers: [{
445
- provide: TABS,
446
- useExisting: Tabs
447
- }],
448
- exportAs: ["ngTabs"],
449
- ngImport: i0
450
- });
451
- }
452
- i0.ɵɵngDeclareClassMetadata({
453
- minVersion: "12.0.0",
454
- version: "22.0.0-next.6",
455
- ngImport: i0,
456
- type: Tabs,
457
- decorators: [{
458
- type: Directive,
459
- args: [{
460
- selector: '[ngTabs]',
461
- exportAs: 'ngTabs',
462
- providers: [{
463
- provide: TABS,
464
- useExisting: Tabs
465
- }]
466
- }]
467
- }]
468
- });
469
-
470
- class Tab {
516
+ class TabPanel {
471
517
  _elementRef = inject(ElementRef);
472
518
  element = this._elementRef.nativeElement;
519
+ _deferredContentAware = inject(DeferredContentAware);
473
520
  _tabs = inject(TABS);
474
- _tabList = inject(TabList);
475
- id = input(inject(_IdGenerator).getId('ng-tab-', true), ...(ngDevMode ? [{
521
+ id = input(inject(_IdGenerator).getId('ng-tabpanel-', true), ...(ngDevMode ? [{
476
522
  debugName: "id"
477
523
  }] : []));
478
- _tablistPattern = computed(() => this._tabList._pattern, ...(ngDevMode ? [{
479
- debugName: "_tablistPattern"
480
- }] : []));
481
- _tabpanelPattern = computed(() => this._tabs._unorderedTabpanelPatterns().find(tabpanel => tabpanel.value() === this.value()), ...(ngDevMode ? [{
482
- debugName: "_tabpanelPattern"
524
+ _tabPattern = signal(undefined, ...(ngDevMode ? [{
525
+ debugName: "_tabPattern"
483
526
  }] : []));
484
- disabled = input(false, {
485
- ...(ngDevMode ? {
486
- debugName: "disabled"
487
- } : {}),
488
- transform: booleanAttribute
489
- });
490
527
  value = input.required(...(ngDevMode ? [{
491
528
  debugName: "value"
492
529
  }] : []));
493
- active = computed(() => this._pattern.active(), ...(ngDevMode ? [{
494
- debugName: "active"
495
- }] : []));
496
- selected = computed(() => this._pattern.selected(), ...(ngDevMode ? [{
497
- debugName: "selected"
530
+ visible = computed(() => !this._pattern.hidden(), ...(ngDevMode ? [{
531
+ debugName: "visible"
498
532
  }] : []));
499
- _pattern = new TabPattern({
533
+ _pattern = new TabPanelPattern({
500
534
  ...this,
501
- tablist: this._tablistPattern,
502
- tabpanel: this._tabpanelPattern,
503
- expanded: signal(false),
504
- element: () => this.element
535
+ tab: this._tabPattern
505
536
  });
506
- open() {
507
- this._pattern.open();
537
+ constructor() {
538
+ afterRenderEffect({
539
+ write: () => {
540
+ this._deferredContentAware.contentVisible.set(this.visible());
541
+ }
542
+ });
508
543
  }
509
544
  ngOnInit() {
510
- this._tabList._register(this);
545
+ this._tabs._registerPanel(this);
511
546
  }
512
547
  ngOnDestroy() {
513
- this._tabList._unregister(this);
548
+ this._tabs._unregisterPanel(this);
514
549
  }
515
550
  static ɵfac = i0.ɵɵngDeclareFactory({
516
551
  minVersion: "12.0.0",
517
- version: "22.0.0-next.6",
552
+ version: "22.0.0-next.9",
518
553
  ngImport: i0,
519
- type: Tab,
554
+ type: TabPanel,
520
555
  deps: [],
521
556
  target: i0.ɵɵFactoryTarget.Directive
522
557
  });
523
558
  static ɵdir = i0.ɵɵngDeclareDirective({
524
559
  minVersion: "17.1.0",
525
- version: "22.0.0-next.6",
526
- type: Tab,
560
+ version: "22.0.0-next.9",
561
+ type: TabPanel,
527
562
  isStandalone: true,
528
- selector: "[ngTab]",
563
+ selector: "[ngTabPanel]",
529
564
  inputs: {
530
565
  id: {
531
566
  classPropertyName: "id",
@@ -534,13 +569,6 @@ class Tab {
534
569
  isRequired: false,
535
570
  transformFunction: null
536
571
  },
537
- disabled: {
538
- classPropertyName: "disabled",
539
- publicName: "disabled",
540
- isSignal: true,
541
- isRequired: false,
542
- transformFunction: null
543
- },
544
572
  value: {
545
573
  classPropertyName: "value",
546
574
  publicName: "value",
@@ -551,42 +579,47 @@ class Tab {
551
579
  },
552
580
  host: {
553
581
  attributes: {
554
- "role": "tab"
582
+ "role": "tabpanel"
555
583
  },
556
584
  properties: {
557
- "attr.data-active": "active()",
558
585
  "attr.id": "_pattern.id()",
559
586
  "attr.tabindex": "_pattern.tabIndex()",
560
- "attr.aria-selected": "selected()",
561
- "attr.aria-disabled": "_pattern.disabled()",
562
- "attr.aria-controls": "_pattern.controls()"
587
+ "attr.inert": "!visible() ? true : null",
588
+ "attr.aria-labelledby": "_pattern.labelledBy()"
563
589
  }
564
590
  },
565
- exportAs: ["ngTab"],
591
+ exportAs: ["ngTabPanel"],
592
+ hostDirectives: [{
593
+ directive: DeferredContentAware,
594
+ inputs: ["preserveContent", "preserveContent"]
595
+ }],
566
596
  ngImport: i0
567
597
  });
568
598
  }
569
599
  i0.ɵɵngDeclareClassMetadata({
570
600
  minVersion: "12.0.0",
571
- version: "22.0.0-next.6",
601
+ version: "22.0.0-next.9",
572
602
  ngImport: i0,
573
- type: Tab,
603
+ type: TabPanel,
574
604
  decorators: [{
575
605
  type: Directive,
576
606
  args: [{
577
- selector: '[ngTab]',
578
- exportAs: 'ngTab',
607
+ selector: '[ngTabPanel]',
608
+ exportAs: 'ngTabPanel',
579
609
  host: {
580
- 'role': 'tab',
581
- '[attr.data-active]': 'active()',
610
+ 'role': 'tabpanel',
582
611
  '[attr.id]': '_pattern.id()',
583
612
  '[attr.tabindex]': '_pattern.tabIndex()',
584
- '[attr.aria-selected]': 'selected()',
585
- '[attr.aria-disabled]': '_pattern.disabled()',
586
- '[attr.aria-controls]': '_pattern.controls()'
587
- }
613
+ '[attr.inert]': '!visible() ? true : null',
614
+ '[attr.aria-labelledby]': '_pattern.labelledBy()'
615
+ },
616
+ hostDirectives: [{
617
+ directive: DeferredContentAware,
618
+ inputs: ['preserveContent']
619
+ }]
588
620
  }]
589
621
  }],
622
+ ctorParameters: () => [],
590
623
  propDecorators: {
591
624
  id: [{
592
625
  type: i0.Input,
@@ -596,14 +629,6 @@ i0.ɵɵngDeclareClassMetadata({
596
629
  required: false
597
630
  }]
598
631
  }],
599
- disabled: [{
600
- type: i0.Input,
601
- args: [{
602
- isSignal: true,
603
- alias: "disabled",
604
- required: false
605
- }]
606
- }],
607
632
  value: [{
608
633
  type: i0.Input,
609
634
  args: [{
@@ -618,7 +643,7 @@ i0.ɵɵngDeclareClassMetadata({
618
643
  class TabContent {
619
644
  static ɵfac = i0.ɵɵngDeclareFactory({
620
645
  minVersion: "12.0.0",
621
- version: "22.0.0-next.6",
646
+ version: "22.0.0-next.9",
622
647
  ngImport: i0,
623
648
  type: TabContent,
624
649
  deps: [],
@@ -626,7 +651,7 @@ class TabContent {
626
651
  });
627
652
  static ɵdir = i0.ɵɵngDeclareDirective({
628
653
  minVersion: "14.0.0",
629
- version: "22.0.0-next.6",
654
+ version: "22.0.0-next.9",
630
655
  type: TabContent,
631
656
  isStandalone: true,
632
657
  selector: "ng-template[ngTabContent]",
@@ -639,7 +664,7 @@ class TabContent {
639
664
  }
640
665
  i0.ɵɵngDeclareClassMetadata({
641
666
  minVersion: "12.0.0",
642
- version: "22.0.0-next.6",
667
+ version: "22.0.0-next.9",
643
668
  ngImport: i0,
644
669
  type: TabContent,
645
670
  decorators: [{