@angular/aria 22.0.0-next.8 → 22.0.0-rc.1

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 (54) hide show
  1. package/fesm2022/_accordion-chunk.mjs +11 -1
  2. package/fesm2022/_accordion-chunk.mjs.map +1 -1
  3. package/fesm2022/_click-event-manager-chunk.mjs +1 -1
  4. package/fesm2022/_deferred-content-chunk.mjs +6 -6
  5. package/fesm2022/_list-chunk.mjs +1 -1
  6. package/fesm2022/_list-navigation-chunk.mjs +1 -1
  7. package/fesm2022/_list-typeahead-chunk.mjs +1 -1
  8. package/fesm2022/_menu-chunk.mjs +27 -4
  9. package/fesm2022/_menu-chunk.mjs.map +1 -1
  10. package/fesm2022/_option-chunk.mjs +11 -1
  11. package/fesm2022/_option-chunk.mjs.map +1 -1
  12. package/fesm2022/_tabs-chunk.mjs +1 -1
  13. package/fesm2022/_toolbar-widget-group-chunk.mjs +10 -1
  14. package/fesm2022/_toolbar-widget-group-chunk.mjs.map +1 -1
  15. package/fesm2022/_tree-chunk.mjs +6 -1
  16. package/fesm2022/_tree-chunk.mjs.map +1 -1
  17. package/fesm2022/{_collection-chunk.mjs → _violations-chunk.mjs} +11 -2
  18. package/fesm2022/_violations-chunk.mjs.map +1 -0
  19. package/fesm2022/_widget-chunk.mjs +11 -1
  20. package/fesm2022/_widget-chunk.mjs.map +1 -1
  21. package/fesm2022/accordion.mjs +102 -48
  22. package/fesm2022/accordion.mjs.map +1 -1
  23. package/fesm2022/aria.mjs +1 -1
  24. package/fesm2022/aria.mjs.map +1 -1
  25. package/fesm2022/combobox.mjs +9 -9
  26. package/fesm2022/combobox.mjs.map +1 -1
  27. package/fesm2022/grid.mjs +20 -13
  28. package/fesm2022/grid.mjs.map +1 -1
  29. package/fesm2022/listbox.mjs +15 -17
  30. package/fesm2022/listbox.mjs.map +1 -1
  31. package/fesm2022/menu.mjs +79 -24
  32. package/fesm2022/menu.mjs.map +1 -1
  33. package/fesm2022/private.mjs +2 -2
  34. package/fesm2022/tabs.mjs +117 -54
  35. package/fesm2022/tabs.mjs.map +1 -1
  36. package/fesm2022/toolbar.mjs +31 -10
  37. package/fesm2022/toolbar.mjs.map +1 -1
  38. package/fesm2022/tree.mjs +18 -20
  39. package/fesm2022/tree.mjs.map +1 -1
  40. package/package.json +2 -2
  41. package/types/_accordion-chunk.d.ts +2 -0
  42. package/types/_grid-chunk.d.ts +2 -0
  43. package/types/_menu-chunk.d.ts +9 -1
  44. package/types/_toolbar-chunk.d.ts +2 -0
  45. package/types/accordion.d.ts +3 -5
  46. package/types/combobox.d.ts +26 -10
  47. package/types/grid.d.ts +0 -8
  48. package/types/listbox.d.ts +0 -4
  49. package/types/menu.d.ts +6 -12
  50. package/types/private.d.ts +4 -1
  51. package/types/tabs.d.ts +3 -11
  52. package/types/toolbar.d.ts +1 -6
  53. package/types/tree.d.ts +0 -6
  54. package/fesm2022/_collection-chunk.mjs.map +0 -1
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, afterNextRender, Directive, input, booleanAttribute, model, linkedSignal, afterRenderEffect } from '@angular/core';
3
+ import { InjectionToken, inject, ElementRef, signal, computed, afterNextRender, Directive, input, booleanAttribute, model, linkedSignal, afterRenderEffect, contentChild } from '@angular/core';
4
4
  import { TabListPattern, TabPattern, TabPanelPattern } from './_tabs-chunk.mjs';
5
- import { DeferredContentAware, DeferredContent } from './_deferred-content-chunk.mjs';
5
+ import { SortedCollection, reportViolations } from './_violations-chunk.mjs';
6
+ import { DeferredContent, DeferredContentAware } from './_deferred-content-chunk.mjs';
6
7
  import { Directionality } from '@angular/cdk/bidi';
7
- import { SortedCollection } from './_collection-chunk.mjs';
8
8
  import './_expansion-chunk.mjs';
9
9
  import './_list-navigation-chunk.mjs';
10
10
  import './_click-event-manager-chunk.mjs';
@@ -63,7 +63,7 @@ class Tabs {
63
63
  }
64
64
  static ɵfac = i0.ɵɵngDeclareFactory({
65
65
  minVersion: "12.0.0",
66
- version: "22.0.0-next.10",
66
+ version: "22.0.0-rc.0",
67
67
  ngImport: i0,
68
68
  type: Tabs,
69
69
  deps: [],
@@ -71,7 +71,7 @@ class Tabs {
71
71
  });
72
72
  static ɵdir = i0.ɵɵngDeclareDirective({
73
73
  minVersion: "14.0.0",
74
- version: "22.0.0-next.10",
74
+ version: "22.0.0-rc.0",
75
75
  type: Tabs,
76
76
  isStandalone: true,
77
77
  selector: "[ngTabs]",
@@ -85,7 +85,7 @@ class Tabs {
85
85
  }
86
86
  i0.ɵɵngDeclareClassMetadata({
87
87
  minVersion: "12.0.0",
88
- version: "22.0.0-next.10",
88
+ version: "22.0.0-rc.0",
89
89
  ngImport: i0,
90
90
  type: Tabs,
91
91
  decorators: [{
@@ -168,6 +168,19 @@ class TabList {
168
168
  this.selectedTab.set(tab?.value());
169
169
  }
170
170
  });
171
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
172
+ afterRenderEffect({
173
+ read: () => {
174
+ const violations = [];
175
+ const values = this._collection.orderedItems().map(t => t.value());
176
+ const duplicates = values.filter((item, index) => values.indexOf(item) !== index);
177
+ if (duplicates.length > 0) {
178
+ violations.push(`Duplicate value '${duplicates[0]}' detected inside ngTabList.`);
179
+ }
180
+ reportViolations(violations, this.element);
181
+ }
182
+ });
183
+ }
171
184
  }
172
185
  ngOnInit() {
173
186
  this._tabsParent._register(this);
@@ -184,7 +197,7 @@ class TabList {
184
197
  }
185
198
  static ɵfac = i0.ɵɵngDeclareFactory({
186
199
  minVersion: "12.0.0",
187
- version: "22.0.0-next.10",
200
+ version: "22.0.0-rc.0",
188
201
  ngImport: i0,
189
202
  type: TabList,
190
203
  deps: [],
@@ -192,7 +205,7 @@ class TabList {
192
205
  });
193
206
  static ɵdir = i0.ɵɵngDeclareDirective({
194
207
  minVersion: "17.1.0",
195
- version: "22.0.0-next.10",
208
+ version: "22.0.0-rc.0",
196
209
  type: TabList,
197
210
  isStandalone: true,
198
211
  selector: "[ngTabList]",
@@ -276,7 +289,7 @@ class TabList {
276
289
  }
277
290
  i0.ɵɵngDeclareClassMetadata({
278
291
  minVersion: "12.0.0",
279
- version: "22.0.0-next.10",
292
+ version: "22.0.0-rc.0",
280
293
  ngImport: i0,
281
294
  type: TabList,
282
295
  decorators: [{
@@ -400,6 +413,21 @@ class Tab {
400
413
  open() {
401
414
  this._pattern.open();
402
415
  }
416
+ constructor() {
417
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
418
+ afterRenderEffect({
419
+ read: () => {
420
+ const violations = [];
421
+ if (this._tabList && this._tabList._tabsParent) {
422
+ if (!this._tabList._tabsParent._panelMap().has(this.value())) {
423
+ violations.push(`ngTab with value '${this.value()}' does not have a corresponding ngTabPanel.`);
424
+ }
425
+ }
426
+ reportViolations(violations, this.element);
427
+ }
428
+ });
429
+ }
430
+ }
403
431
  ngOnInit() {
404
432
  this._tabList._collection.register(this);
405
433
  }
@@ -408,7 +436,7 @@ class Tab {
408
436
  }
409
437
  static ɵfac = i0.ɵɵngDeclareFactory({
410
438
  minVersion: "12.0.0",
411
- version: "22.0.0-next.10",
439
+ version: "22.0.0-rc.0",
412
440
  ngImport: i0,
413
441
  type: Tab,
414
442
  deps: [],
@@ -416,7 +444,7 @@ class Tab {
416
444
  });
417
445
  static ɵdir = i0.ɵɵngDeclareDirective({
418
446
  minVersion: "17.1.0",
419
- version: "22.0.0-next.10",
447
+ version: "22.0.0-rc.0",
420
448
  type: Tab,
421
449
  isStandalone: true,
422
450
  selector: "[ngTab]",
@@ -462,7 +490,7 @@ class Tab {
462
490
  }
463
491
  i0.ɵɵngDeclareClassMetadata({
464
492
  minVersion: "12.0.0",
465
- version: "22.0.0-next.10",
493
+ version: "22.0.0-rc.0",
466
494
  ngImport: i0,
467
495
  type: Tab,
468
496
  decorators: [{
@@ -481,6 +509,7 @@ i0.ɵɵngDeclareClassMetadata({
481
509
  }
482
510
  }]
483
511
  }],
512
+ ctorParameters: () => [],
484
513
  propDecorators: {
485
514
  id: [{
486
515
  type: i0.Input,
@@ -509,6 +538,43 @@ i0.ɵɵngDeclareClassMetadata({
509
538
  }
510
539
  });
511
540
 
541
+ class TabContent {
542
+ static ɵfac = i0.ɵɵngDeclareFactory({
543
+ minVersion: "12.0.0",
544
+ version: "22.0.0-rc.0",
545
+ ngImport: i0,
546
+ type: TabContent,
547
+ deps: [],
548
+ target: i0.ɵɵFactoryTarget.Directive
549
+ });
550
+ static ɵdir = i0.ɵɵngDeclareDirective({
551
+ minVersion: "14.0.0",
552
+ version: "22.0.0-rc.0",
553
+ type: TabContent,
554
+ isStandalone: true,
555
+ selector: "ng-template[ngTabContent]",
556
+ exportAs: ["ngTabContent"],
557
+ hostDirectives: [{
558
+ directive: DeferredContent
559
+ }],
560
+ ngImport: i0
561
+ });
562
+ }
563
+ i0.ɵɵngDeclareClassMetadata({
564
+ minVersion: "12.0.0",
565
+ version: "22.0.0-rc.0",
566
+ ngImport: i0,
567
+ type: TabContent,
568
+ decorators: [{
569
+ type: Directive,
570
+ args: [{
571
+ selector: 'ng-template[ngTabContent]',
572
+ exportAs: 'ngTabContent',
573
+ hostDirectives: [DeferredContent]
574
+ }]
575
+ }]
576
+ });
577
+
512
578
  class TabPanel {
513
579
  _elementRef = inject(ElementRef);
514
580
  element = this._elementRef.nativeElement;
@@ -532,8 +598,29 @@ class TabPanel {
532
598
  ...this,
533
599
  tab: this._tabPattern
534
600
  });
601
+ _tabContent = contentChild(TabContent, ...(ngDevMode ? [{
602
+ debugName: "_tabContent"
603
+ }] : []));
535
604
  constructor() {
536
- afterRenderEffect(() => this._deferredContentAware.contentVisible.set(this.visible()));
605
+ afterRenderEffect({
606
+ write: () => {
607
+ this._deferredContentAware.contentVisible.set(this.visible());
608
+ }
609
+ });
610
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
611
+ afterRenderEffect({
612
+ read: () => {
613
+ const violations = [];
614
+ if (!this._tabContent()) {
615
+ violations.push('ngTabPanel must have an ngTabContent structural directive to render.');
616
+ }
617
+ if (!this._tabs._tabMap().has(this.value())) {
618
+ violations.push(`ngTabPanel with value '${this.value()}' does not have a corresponding ngTab.`);
619
+ }
620
+ reportViolations(violations, this.element);
621
+ }
622
+ });
623
+ }
537
624
  }
538
625
  ngOnInit() {
539
626
  this._tabs._collection.register(this);
@@ -543,15 +630,15 @@ class TabPanel {
543
630
  }
544
631
  static ɵfac = i0.ɵɵngDeclareFactory({
545
632
  minVersion: "12.0.0",
546
- version: "22.0.0-next.10",
633
+ version: "22.0.0-rc.0",
547
634
  ngImport: i0,
548
635
  type: TabPanel,
549
636
  deps: [],
550
637
  target: i0.ɵɵFactoryTarget.Directive
551
638
  });
552
639
  static ɵdir = i0.ɵɵngDeclareDirective({
553
- minVersion: "17.1.0",
554
- version: "22.0.0-next.10",
640
+ minVersion: "17.2.0",
641
+ version: "22.0.0-rc.0",
555
642
  type: TabPanel,
556
643
  isStandalone: true,
557
644
  selector: "[ngTabPanel]",
@@ -582,6 +669,13 @@ class TabPanel {
582
669
  "attr.aria-labelledby": "_pattern.labelledBy()"
583
670
  }
584
671
  },
672
+ queries: [{
673
+ propertyName: "_tabContent",
674
+ first: true,
675
+ predicate: TabContent,
676
+ descendants: true,
677
+ isSignal: true
678
+ }],
585
679
  exportAs: ["ngTabPanel"],
586
680
  hostDirectives: [{
587
681
  directive: DeferredContentAware,
@@ -592,7 +686,7 @@ class TabPanel {
592
686
  }
593
687
  i0.ɵɵngDeclareClassMetadata({
594
688
  minVersion: "12.0.0",
595
- version: "22.0.0-next.10",
689
+ version: "22.0.0-rc.0",
596
690
  ngImport: i0,
597
691
  type: TabPanel,
598
692
  decorators: [{
@@ -630,45 +724,14 @@ i0.ɵɵngDeclareClassMetadata({
630
724
  alias: "value",
631
725
  required: true
632
726
  }]
633
- }]
634
- }
635
- });
636
-
637
- class TabContent {
638
- static ɵfac = i0.ɵɵngDeclareFactory({
639
- minVersion: "12.0.0",
640
- version: "22.0.0-next.10",
641
- ngImport: i0,
642
- type: TabContent,
643
- deps: [],
644
- target: i0.ɵɵFactoryTarget.Directive
645
- });
646
- static ɵdir = i0.ɵɵngDeclareDirective({
647
- minVersion: "14.0.0",
648
- version: "22.0.0-next.10",
649
- type: TabContent,
650
- isStandalone: true,
651
- selector: "ng-template[ngTabContent]",
652
- exportAs: ["ngTabContent"],
653
- hostDirectives: [{
654
- directive: DeferredContent
655
727
  }],
656
- ngImport: i0
657
- });
658
- }
659
- i0.ɵɵngDeclareClassMetadata({
660
- minVersion: "12.0.0",
661
- version: "22.0.0-next.10",
662
- ngImport: i0,
663
- type: TabContent,
664
- decorators: [{
665
- type: Directive,
666
- args: [{
667
- selector: 'ng-template[ngTabContent]',
668
- exportAs: 'ngTabContent',
669
- hostDirectives: [DeferredContent]
728
+ _tabContent: [{
729
+ type: i0.ContentChild,
730
+ args: [i0.forwardRef(() => TabContent), {
731
+ isSignal: true
732
+ }]
670
733
  }]
671
- }]
734
+ }
672
735
  });
673
736
 
674
737
  export { Tab, TabContent, TabList, TabPanel, Tabs, DeferredContent as ɵɵDeferredContent, DeferredContentAware as ɵɵDeferredContentAware };
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/tabs/tab-tokens.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/tabs/tabs.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/tabs/tab-list.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/tabs/tab.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/tabs/tab-panel.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/tabs/tab-content.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 {InjectionToken} from '@angular/core';\nimport type {Tabs} from './tabs';\nimport type {TabList} from './tab-list';\n\n/** Token used to expose the `Tabs` directive to child directives. */\nexport const TABS = new InjectionToken<Tabs>('TABS');\n\n/** Token used to expose the tab list. */\nexport const TAB_LIST = new InjectionToken<TabList>('TAB_LIST');\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 {\n computed,\n Directive,\n ElementRef,\n inject,\n signal,\n afterNextRender,\n OnDestroy,\n} from '@angular/core';\nimport {TabList} from './tab-list';\nimport {TabPanel} from './tab-panel';\nimport {TABS} from './tab-tokens';\nimport {SortedCollection, TabPanelPattern, TabPattern} from '../private';\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 * @see [Tabs](guide/aria/tabs)\n */\n@Directive({\n selector: '[ngTabs]',\n exportAs: 'ngTabs',\n providers: [{provide: TABS, useExisting: Tabs}],\n})\nexport class Tabs implements 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 TabList registered for this container. */\n readonly _tabList = signal<TabList | undefined>(undefined);\n\n /** The collection of TabPanels. */\n readonly _collection = new SortedCollection<TabPanel>();\n\n /** The Tab UIPattern of the child Tabs. */\n readonly _tabPatterns = computed<TabPattern[] | undefined>(() => this._tabList()?._tabPatterns());\n\n /** The TabPanel UIPattern of the child TabPanels. */\n readonly _tabPanelPatterns = computed<TabPanelPattern[]>(() =>\n this._collection.orderedItems().map(tabpanel => tabpanel._pattern),\n );\n\n /** A reactive map of tab values to their TabPanelPattern. */\n readonly _panelMap = computed(() => {\n const map = new Map<string, TabPanelPattern>();\n for (const panel of this._collection.orderedItems()) {\n map.set(panel.value(), panel._pattern);\n }\n return map;\n });\n\n /** A reactive map of tab values to their TabPattern. */\n readonly _tabMap = computed(() => {\n const map = new Map<string, TabPattern>();\n const tabList = this._tabList();\n if (tabList) {\n for (const tab of tabList._collection.orderedItems()) {\n map.set(tab.value(), tab._pattern);\n }\n }\n return map;\n });\n\n constructor() {\n afterNextRender(() => {\n this._collection.startObserving(this.element);\n });\n }\n\n ngOnDestroy() {\n this._collection.stopObserving();\n }\n\n _register(child: TabList) {\n this._tabList.set(child);\n }\n\n _unregister() {\n this._tabList.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 {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 afterNextRender,\n linkedSignal,\n WritableSignal,\n} from '@angular/core';\nimport {SortedCollection, TabListPattern, TabPattern} from '../private';\nimport {TABS, TAB_LIST} from './tab-tokens';\nimport type {Tab} from './tab';\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 * @see [Tabs](guide/aria/tabs)\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 '(click)': '_pattern.onClick($event)',\n '(focusin)': '_pattern.onFocusIn()',\n },\n providers: [{provide: TAB_LIST, useExisting: TabList}],\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 container. */\n readonly _tabsParent = inject(TABS);\n\n /** The collection of Tabs. */\n readonly _collection = new SortedCollection<Tab>();\n\n /** The Tab UIPatterns of the child Tabs. */\n readonly _tabPatterns = computed<TabPattern[]>(() =>\n this._collection.orderedItems().map(tab => tab._pattern),\n );\n\n /** Whether the tablist is vertically or horizontally oriented. */\n readonly orientation = input<'vertical' | 'horizontal'>('horizontal');\n\n /** Text direction. */\n readonly textDirection = inject(Directionality).valueSignal;\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 as a model input. */\n readonly selectedTab = model<string | undefined>();\n\n /** The current selected Tab pattern, passed to the List pattern. */\n private readonly _selectedTabPattern: WritableSignal<TabPattern | undefined> = linkedSignal(\n () => {\n const tab = this.findTab(this.selectedTab());\n\n return tab?._pattern;\n },\n );\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 element: () => this._elementRef.nativeElement,\n activeItem: signal(undefined),\n items: this._tabPatterns,\n selectedTab: this._selectedTabPattern,\n });\n\n constructor() {\n afterNextRender(() => {\n this._collection.startObserving(this.element);\n });\n\n afterRenderEffect(() => {\n this._pattern.setDefaultStateEffect();\n });\n\n // This needs to be in an afterRenderEffect to ensure the tabs have all been initialized.\n // Otherwise, the lookup here can fail and it does not get re-run afterwards.\n afterRenderEffect({\n write: () => {\n const pattern = this._selectedTabPattern();\n const tab = this._collection.orderedItems().find(tab => tab._pattern == pattern);\n this.selectedTab.set(tab?.value());\n },\n });\n }\n\n ngOnInit() {\n this._tabsParent._register(this);\n }\n\n ngOnDestroy() {\n this._tabsParent._unregister();\n this._collection.stopObserving();\n }\n\n /** Opens the tab panel with the specified value. */\n open(value: string): boolean {\n return this._pattern.open(this.findTab(value)?._pattern);\n }\n\n findTab(value?: string) {\n return value ? this._collection.orderedItems().find(tab => tab.value() === value) : 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 {_IdGenerator} from '@angular/cdk/a11y';\nimport {\n Directive,\n ElementRef,\n OnInit,\n OnDestroy,\n booleanAttribute,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport {TabPattern, HasElement} from '../private';\nimport {TAB_LIST} from './tab-tokens';\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 * @see [Tabs](guide/aria/tabs)\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 TabList. */\n private readonly _tabList = inject(TAB_LIST);\n\n /** A unique identifier for the widget. */\n readonly id = input(inject(_IdGenerator).getId('ng-tab-', true));\n\n /** The TabPanel UIPattern associated with the tab */\n private readonly _tabpanelPattern = computed(() => {\n return this._tabList._tabsParent._panelMap().get(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 element: () => this.element,\n tabList: () => this._tabList._pattern,\n tabPanel: this._tabpanelPattern,\n });\n\n /** Opens this tab panel. */\n open() {\n this._pattern.open();\n }\n\n ngOnInit() {\n this._tabList._collection.register(this);\n }\n\n ngOnDestroy() {\n this._tabList._collection.unregister(this);\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 {_IdGenerator} from '@angular/cdk/a11y';\nimport {\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n afterRenderEffect,\n OnInit,\n OnDestroy,\n} from '@angular/core';\nimport {TabPanelPattern, DeferredContentAware} from '../private';\nimport {TABS} from './tab-tokens';\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 * @see [Tabs](guide/aria/tabs)\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 private readonly _tabPattern = computed(() => {\n return this._tabs._tabMap().get(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 tab: this._tabPattern,\n });\n\n constructor() {\n afterRenderEffect(() => this._deferredContentAware.contentVisible.set(this.visible()));\n }\n\n ngOnInit() {\n this._tabs._collection.register(this);\n }\n\n ngOnDestroy() {\n this._tabs._collection.unregister(this);\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} from '@angular/core';\nimport {DeferredContent} from '../private';\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 * @see [Tabs](guide/aria/tabs)\n */\n@Directive({\n selector: 'ng-template[ngTabContent]',\n exportAs: 'ngTabContent',\n hostDirectives: [DeferredContent],\n})\nexport class TabContent {}\n"],"names":["TABS","InjectionToken","TAB_LIST","Tabs","_elementRef","inject","ElementRef","element","nativeElement","_tabList","signal","undefined","_collection","SortedCollection","_tabPatterns","computed","_tabPanelPatterns","orderedItems","map","tabpanel","_pattern","_panelMap","Map","panel","set","value","_tabMap","tabList","tab","constructor","afterNextRender","startObserving","ngOnDestroy","stopObserving","_register","child","_unregister","deps","target","i0","ɵɵFactoryTarget","Directive","isStandalone","selector","providers","provide","useExisting","exportAs","ngImport","decorators","args","TabList","_tabsParent","orientation","input","textDirection","Directionality","valueSignal","wrap","transform","booleanAttribute","softDisabled","focusMode","selectionMode","selectedTab","model","_selectedTabPattern","linkedSignal","findTab","disabled","TabListPattern","activeItem","items","afterRenderEffect","setDefaultStateEffect","write","pattern","find","ngOnInit","open","inputs","classPropertyName","publicName","isSignal","isRequired","transformFunction","outputs","host","attributes","listeners","properties","Tab","id","_IdGenerator","getId","_tabpanelPattern","get","required","active","selected","TabPattern","tabPanel","register","unregister","TabPanel","_deferredContentAware","DeferredContentAware","_tabs","_tabPattern","visible","hidden","TabPanelPattern","contentVisible","hostDirectives","directive","i1","TabContent","DeferredContent"],"mappings":"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"}
1
+ {"version":3,"file":"tabs.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/tabs/tab-tokens.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/tabs/tabs.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/tabs/tab-list.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/tabs/tab.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/tabs/tab-content.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/tabs/tab-panel.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 {InjectionToken} from '@angular/core';\nimport type {Tabs} from './tabs';\nimport type {TabList} from './tab-list';\n\n/** Token used to expose the `Tabs` directive to child directives. */\nexport const TABS = new InjectionToken<Tabs>('TABS');\n\n/** Token used to expose the tab list. */\nexport const TAB_LIST = new InjectionToken<TabList>('TAB_LIST');\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 {\n computed,\n Directive,\n ElementRef,\n inject,\n signal,\n afterNextRender,\n OnDestroy,\n} from '@angular/core';\nimport {TabList} from './tab-list';\nimport {TabPanel} from './tab-panel';\nimport {TABS} from './tab-tokens';\nimport {SortedCollection, TabPanelPattern, TabPattern} from '../private';\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 * @see [Tabs](guide/aria/tabs)\n */\n@Directive({\n selector: '[ngTabs]',\n exportAs: 'ngTabs',\n providers: [{provide: TABS, useExisting: Tabs}],\n})\nexport class Tabs implements 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 TabList registered for this container. */\n readonly _tabList = signal<TabList | undefined>(undefined);\n\n /** The collection of TabPanels. */\n readonly _collection = new SortedCollection<TabPanel>();\n\n /** The Tab UIPattern of the child Tabs. */\n readonly _tabPatterns = computed<TabPattern[] | undefined>(() => this._tabList()?._tabPatterns());\n\n /** The TabPanel UIPattern of the child TabPanels. */\n readonly _tabPanelPatterns = computed<TabPanelPattern[]>(() =>\n this._collection.orderedItems().map(tabpanel => tabpanel._pattern),\n );\n\n /** A reactive map of tab values to their TabPanelPattern. */\n readonly _panelMap = computed(() => {\n const map = new Map<string, TabPanelPattern>();\n for (const panel of this._collection.orderedItems()) {\n map.set(panel.value(), panel._pattern);\n }\n return map;\n });\n\n /** A reactive map of tab values to their TabPattern. */\n readonly _tabMap = computed(() => {\n const map = new Map<string, TabPattern>();\n const tabList = this._tabList();\n if (tabList) {\n for (const tab of tabList._collection.orderedItems()) {\n map.set(tab.value(), tab._pattern);\n }\n }\n return map;\n });\n\n constructor() {\n afterNextRender(() => {\n this._collection.startObserving(this.element);\n });\n }\n\n ngOnDestroy() {\n this._collection.stopObserving();\n }\n\n _register(child: TabList) {\n this._tabList.set(child);\n }\n\n _unregister() {\n this._tabList.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 {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 afterNextRender,\n linkedSignal,\n WritableSignal,\n} from '@angular/core';\nimport {SortedCollection, TabListPattern, TabPattern, reportViolations} from '../private';\nimport {TABS, TAB_LIST} from './tab-tokens';\nimport type {Tab} from './tab';\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 * @see [Tabs](guide/aria/tabs)\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 '(click)': '_pattern.onClick($event)',\n '(focusin)': '_pattern.onFocusIn()',\n },\n providers: [{provide: TAB_LIST, useExisting: TabList}],\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 container. */\n readonly _tabsParent = inject(TABS);\n\n /** The collection of Tabs. */\n readonly _collection = new SortedCollection<Tab>();\n\n /** The Tab UIPatterns of the child Tabs. */\n readonly _tabPatterns = computed<TabPattern[]>(() =>\n this._collection.orderedItems().map(tab => tab._pattern),\n );\n\n /** Whether the tablist is vertically or horizontally oriented. */\n readonly orientation = input<'vertical' | 'horizontal'>('horizontal');\n\n /** Text direction. */\n readonly textDirection = inject(Directionality).valueSignal;\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 as a model input. */\n readonly selectedTab = model<string | undefined>();\n\n /** The current selected Tab pattern, passed to the List pattern. */\n private readonly _selectedTabPattern: WritableSignal<TabPattern | undefined> = linkedSignal(\n () => {\n const tab = this.findTab(this.selectedTab());\n\n return tab?._pattern;\n },\n );\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 element: () => this._elementRef.nativeElement,\n activeItem: signal(undefined),\n items: this._tabPatterns,\n selectedTab: this._selectedTabPattern,\n });\n\n constructor() {\n afterNextRender(() => {\n this._collection.startObserving(this.element);\n });\n\n afterRenderEffect(() => {\n this._pattern.setDefaultStateEffect();\n });\n\n // This needs to be in an afterRenderEffect to ensure the tabs have all been initialized.\n // Otherwise, the lookup here can fail and it does not get re-run afterwards.\n afterRenderEffect({\n write: () => {\n const pattern = this._selectedTabPattern();\n const tab = this._collection.orderedItems().find(tab => tab._pattern == pattern);\n this.selectedTab.set(tab?.value());\n },\n });\n\n // Check for any violations after the DOM has been updated.\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n afterRenderEffect({\n read: () => {\n const violations: string[] = [];\n\n const values = this._collection.orderedItems().map(t => t.value());\n const duplicates = values.filter((item, index) => values.indexOf(item) !== index);\n if (duplicates.length > 0) {\n violations.push(`Duplicate value '${duplicates[0]}' detected inside ngTabList.`);\n }\n\n reportViolations(violations, this.element);\n },\n });\n }\n }\n\n ngOnInit() {\n this._tabsParent._register(this);\n }\n\n ngOnDestroy() {\n this._tabsParent._unregister();\n this._collection.stopObserving();\n }\n\n /** Opens the tab panel with the specified value. */\n open(value: string): boolean {\n return this._pattern.open(this.findTab(value)?._pattern);\n }\n\n findTab(value?: string) {\n return value ? this._collection.orderedItems().find(tab => tab.value() === value) : 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 {_IdGenerator} from '@angular/cdk/a11y';\nimport {\n Directive,\n ElementRef,\n OnInit,\n OnDestroy,\n booleanAttribute,\n computed,\n inject,\n input,\n afterRenderEffect,\n} from '@angular/core';\nimport {TabPattern, HasElement, reportViolations} from '../private';\nimport {TAB_LIST} from './tab-tokens';\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 * @see [Tabs](guide/aria/tabs)\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 TabList. */\n private readonly _tabList = inject(TAB_LIST);\n\n /** A unique identifier for the widget. */\n readonly id = input(inject(_IdGenerator).getId('ng-tab-', true));\n\n /** The TabPanel UIPattern associated with the tab */\n private readonly _tabpanelPattern = computed(() => {\n return this._tabList._tabsParent._panelMap().get(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 element: () => this.element,\n tabList: () => this._tabList._pattern,\n tabPanel: this._tabpanelPattern,\n });\n\n /** Opens this tab panel. */\n open() {\n this._pattern.open();\n }\n\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n afterRenderEffect({\n read: () => {\n const violations: string[] = [];\n if (this._tabList && this._tabList._tabsParent) {\n if (!this._tabList._tabsParent._panelMap().has(this.value())) {\n violations.push(\n `ngTab with value '${this.value()}' does not have a corresponding ngTabPanel.`,\n );\n }\n }\n reportViolations(violations, this.element);\n },\n });\n }\n }\n\n ngOnInit() {\n this._tabList._collection.register(this);\n }\n\n ngOnDestroy() {\n this._tabList._collection.unregister(this);\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} from '@angular/core';\nimport {DeferredContent} from '../private';\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 * @see [Tabs](guide/aria/tabs)\n */\n@Directive({\n selector: 'ng-template[ngTabContent]',\n exportAs: 'ngTabContent',\n hostDirectives: [DeferredContent],\n})\nexport class TabContent {}\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 {_IdGenerator} from '@angular/cdk/a11y';\nimport {\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n afterRenderEffect,\n contentChild,\n OnInit,\n OnDestroy,\n} from '@angular/core';\nimport {TabPanelPattern, DeferredContentAware, reportViolations} from '../private';\nimport {TABS} from './tab-tokens';\nimport {TabContent} from './tab-content';\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 * @see [Tabs](guide/aria/tabs)\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 private readonly _tabPattern = computed(() => {\n return this._tabs._tabMap().get(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 tab: this._tabPattern,\n });\n\n private readonly _tabContent = contentChild(TabContent);\n\n constructor() {\n // Connect the panel's hidden state to the DeferredContentAware's visibility.\n afterRenderEffect({\n write: () => {\n this._deferredContentAware.contentVisible.set(this.visible());\n },\n });\n\n // Check for any violations after the DOM has been updated.\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n afterRenderEffect({\n read: () => {\n const violations: string[] = [];\n\n if (!this._tabContent()) {\n violations.push('ngTabPanel must have an ngTabContent structural directive to render.');\n }\n if (!this._tabs._tabMap().has(this.value())) {\n violations.push(\n `ngTabPanel with value '${this.value()}' does not have a corresponding ngTab.`,\n );\n }\n\n reportViolations(violations, this.element);\n },\n });\n }\n }\n\n ngOnInit() {\n this._tabs._collection.register(this);\n }\n\n ngOnDestroy() {\n this._tabs._collection.unregister(this);\n }\n}\n"],"names":["TABS","InjectionToken","TAB_LIST","Tabs","_elementRef","inject","ElementRef","element","nativeElement","_tabList","signal","undefined","_collection","SortedCollection","_tabPatterns","computed","_tabPanelPatterns","orderedItems","map","tabpanel","_pattern","_panelMap","Map","panel","set","value","_tabMap","tabList","tab","constructor","afterNextRender","startObserving","ngOnDestroy","stopObserving","_register","child","_unregister","deps","target","i0","ɵɵFactoryTarget","Directive","isStandalone","selector","providers","provide","useExisting","exportAs","ngImport","decorators","args","TabList","_tabsParent","orientation","input","textDirection","Directionality","valueSignal","wrap","transform","booleanAttribute","softDisabled","focusMode","selectionMode","selectedTab","model","_selectedTabPattern","linkedSignal","findTab","disabled","TabListPattern","activeItem","items","afterRenderEffect","setDefaultStateEffect","write","pattern","find","ngDevMode","read","violations","values","t","duplicates","filter","item","index","indexOf","length","push","reportViolations","ngOnInit","open","inputs","classPropertyName","publicName","isSignal","isRequired","transformFunction","outputs","host","attributes","listeners","properties","Tab","id","_IdGenerator","getId","_tabpanelPattern","get","required","active","selected","TabPattern","tabPanel","has","register","unregister","TabContent","hostDirectives","directive","i1","DeferredContent","TabPanel","_deferredContentAware","DeferredContentAware","_tabs","_tabPattern","visible","hidden","TabPanelPattern","_tabContent","contentChild","contentVisible","ɵdir","ɵɵngDeclareDirective","minVersion","version","type","descendants"],"mappings":"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"}
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { inject, ElementRef, computed, input, booleanAttribute, model, signal, afterRenderEffect, afterNextRender, Directive, InjectionToken, contentChildren } from '@angular/core';
3
3
  import { Directionality } from '@angular/cdk/bidi';
4
4
  import { ToolbarPattern, ToolbarWidgetPattern, ToolbarWidgetGroupPattern } from './_toolbar-widget-group-chunk.mjs';
5
- import { SortedCollection } from './_collection-chunk.mjs';
5
+ import { SortedCollection, reportViolations } from './_violations-chunk.mjs';
6
6
  import { _IdGenerator } from '@angular/cdk/a11y';
7
7
  import './_list-chunk.mjs';
8
8
  import './_list-navigation-chunk.mjs';
@@ -54,6 +54,13 @@ class Toolbar {
54
54
  afterRenderEffect({
55
55
  write: () => this._pattern.setDefaultStateEffect()
56
56
  });
57
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
58
+ afterRenderEffect({
59
+ read: () => {
60
+ reportViolations(this._pattern.validate(), this.element);
61
+ }
62
+ });
63
+ }
57
64
  afterNextRender(() => {
58
65
  this._collection.startObserving(this.element);
59
66
  });
@@ -66,7 +73,7 @@ class Toolbar {
66
73
  }
67
74
  static ɵfac = i0.ɵɵngDeclareFactory({
68
75
  minVersion: "12.0.0",
69
- version: "22.0.0-next.10",
76
+ version: "22.0.0-rc.0",
70
77
  ngImport: i0,
71
78
  type: Toolbar,
72
79
  deps: [],
@@ -74,7 +81,7 @@ class Toolbar {
74
81
  });
75
82
  static ɵdir = i0.ɵɵngDeclareDirective({
76
83
  minVersion: "17.1.0",
77
- version: "22.0.0-next.10",
84
+ version: "22.0.0-rc.0",
78
85
  type: Toolbar,
79
86
  isStandalone: true,
80
87
  selector: "[ngToolbar]",
@@ -140,7 +147,7 @@ class Toolbar {
140
147
  }
141
148
  i0.ɵɵngDeclareClassMetadata({
142
149
  minVersion: "12.0.0",
143
- version: "22.0.0-next.10",
150
+ version: "22.0.0-rc.0",
144
151
  ngImport: i0,
145
152
  type: Toolbar,
146
153
  decorators: [{
@@ -256,7 +263,7 @@ class ToolbarWidget {
256
263
  }
257
264
  static ɵfac = i0.ɵɵngDeclareFactory({
258
265
  minVersion: "12.0.0",
259
- version: "22.0.0-next.10",
266
+ version: "22.0.0-rc.0",
260
267
  ngImport: i0,
261
268
  type: ToolbarWidget,
262
269
  deps: [],
@@ -264,7 +271,7 @@ class ToolbarWidget {
264
271
  });
265
272
  static ɵdir = i0.ɵɵngDeclareDirective({
266
273
  minVersion: "17.1.0",
267
- version: "22.0.0-next.10",
274
+ version: "22.0.0-rc.0",
268
275
  type: ToolbarWidget,
269
276
  isStandalone: true,
270
277
  selector: "[ngToolbarWidget]",
@@ -310,7 +317,7 @@ class ToolbarWidget {
310
317
  }
311
318
  i0.ɵɵngDeclareClassMetadata({
312
319
  minVersion: "12.0.0",
313
- version: "22.0.0-next.10",
320
+ version: "22.0.0-rc.0",
314
321
  ngImport: i0,
315
322
  type: ToolbarWidget,
316
323
  decorators: [{
@@ -390,9 +397,22 @@ class ToolbarWidgetGroup {
390
397
  items: this._itemPatterns,
391
398
  toolbar: this._toolbarPattern
392
399
  });
400
+ constructor() {
401
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
402
+ afterRenderEffect({
403
+ read: () => {
404
+ const violations = [];
405
+ if (!this._toolbar) {
406
+ violations.push('ngToolbarWidgetGroup must be placed inside an ngToolbar container.');
407
+ }
408
+ reportViolations(violations, this.element);
409
+ }
410
+ });
411
+ }
412
+ }
393
413
  static ɵfac = i0.ɵɵngDeclareFactory({
394
414
  minVersion: "12.0.0",
395
- version: "22.0.0-next.10",
415
+ version: "22.0.0-rc.0",
396
416
  ngImport: i0,
397
417
  type: ToolbarWidgetGroup,
398
418
  deps: [],
@@ -400,7 +420,7 @@ class ToolbarWidgetGroup {
400
420
  });
401
421
  static ɵdir = i0.ɵɵngDeclareDirective({
402
422
  minVersion: "17.2.0",
403
- version: "22.0.0-next.10",
423
+ version: "22.0.0-rc.0",
404
424
  type: ToolbarWidgetGroup,
405
425
  isStandalone: true,
406
426
  selector: "[ngToolbarWidgetGroup]",
@@ -436,7 +456,7 @@ class ToolbarWidgetGroup {
436
456
  }
437
457
  i0.ɵɵngDeclareClassMetadata({
438
458
  minVersion: "12.0.0",
439
- version: "22.0.0-next.10",
459
+ version: "22.0.0-rc.0",
440
460
  ngImport: i0,
441
461
  type: ToolbarWidgetGroup,
442
462
  decorators: [{
@@ -450,6 +470,7 @@ i0.ɵɵngDeclareClassMetadata({
450
470
  }]
451
471
  }]
452
472
  }],
473
+ ctorParameters: () => [],
453
474
  propDecorators: {
454
475
  _widgets: [{
455
476
  type: i0.ContentChildren,