@angular/cdk-experimental 21.0.0-next.0 → 21.0.0-next.10

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 (73) hide show
  1. package/fesm2022/{polyfill.mjs → _polyfill-chunk.mjs} +1 -1
  2. package/fesm2022/_polyfill-chunk.mjs.map +1 -0
  3. package/fesm2022/cdk-experimental.mjs +1 -1
  4. package/fesm2022/cdk-experimental.mjs.map +1 -1
  5. package/fesm2022/column-resize.mjs +54 -54
  6. package/fesm2022/column-resize.mjs.map +1 -1
  7. package/fesm2022/popover-edit.mjs +44 -44
  8. package/fesm2022/popover-edit.mjs.map +1 -1
  9. package/fesm2022/scrolling.mjs +7 -7
  10. package/fesm2022/scrolling.mjs.map +1 -1
  11. package/fesm2022/selection.mjs +19 -19
  12. package/fesm2022/selection.mjs.map +1 -1
  13. package/fesm2022/table-scroll-container.mjs +7 -7
  14. package/fesm2022/table-scroll-container.mjs.map +1 -1
  15. package/package.json +10 -45
  16. package/{column-resize/index.d.ts → types/column-resize.d.ts} +37 -37
  17. package/{popover-edit/index.d.ts → types/popover-edit.d.ts} +30 -30
  18. package/{scrolling/index.d.ts → types/scrolling.d.ts} +6 -6
  19. package/{selection/index.d.ts → types/selection.d.ts} +14 -14
  20. package/{table-scroll-container/index.d.ts → types/table-scroll-container.d.ts} +6 -6
  21. package/accordion/index.d.ts +0 -92
  22. package/accordion.d.d.ts +0 -89
  23. package/combobox/index.d.ts +0 -94
  24. package/deferred-content/index.d.ts +0 -37
  25. package/expansion.d.d.ts +0 -71
  26. package/fesm2022/accordion.mjs +0 -192
  27. package/fesm2022/accordion.mjs.map +0 -1
  28. package/fesm2022/accordion2.mjs +0 -152
  29. package/fesm2022/accordion2.mjs.map +0 -1
  30. package/fesm2022/combobox.mjs +0 -340
  31. package/fesm2022/combobox.mjs.map +0 -1
  32. package/fesm2022/deferred-content.mjs +0 -60
  33. package/fesm2022/deferred-content.mjs.map +0 -1
  34. package/fesm2022/expansion.mjs +0 -87
  35. package/fesm2022/expansion.mjs.map +0 -1
  36. package/fesm2022/list-navigation.mjs +0 -263
  37. package/fesm2022/list-navigation.mjs.map +0 -1
  38. package/fesm2022/list.mjs +0 -355
  39. package/fesm2022/list.mjs.map +0 -1
  40. package/fesm2022/listbox.mjs +0 -160
  41. package/fesm2022/listbox.mjs.map +0 -1
  42. package/fesm2022/option.mjs +0 -231
  43. package/fesm2022/option.mjs.map +0 -1
  44. package/fesm2022/polyfill.mjs.map +0 -1
  45. package/fesm2022/radio-group.mjs +0 -202
  46. package/fesm2022/radio-group.mjs.map +0 -1
  47. package/fesm2022/radio-group2.mjs +0 -143
  48. package/fesm2022/radio-group2.mjs.map +0 -1
  49. package/fesm2022/tabs.mjs +0 -299
  50. package/fesm2022/tabs.mjs.map +0 -1
  51. package/fesm2022/tabs2.mjs +0 -211
  52. package/fesm2022/tabs2.mjs.map +0 -1
  53. package/fesm2022/toolbar.mjs +0 -168
  54. package/fesm2022/toolbar.mjs.map +0 -1
  55. package/fesm2022/toolbar2.mjs +0 -224
  56. package/fesm2022/toolbar2.mjs.map +0 -1
  57. package/fesm2022/tree.mjs +0 -631
  58. package/fesm2022/tree.mjs.map +0 -1
  59. package/fesm2022/ui-patterns.mjs +0 -21
  60. package/fesm2022/ui-patterns.mjs.map +0 -1
  61. package/list.d.d.ts +0 -207
  62. package/listbox/index.d.ts +0 -87
  63. package/listbox.d.d.ts +0 -101
  64. package/pointer-event-manager.d.d.ts +0 -189
  65. package/radio-group/index.d.ts +0 -85
  66. package/radio-group.d.d.ts +0 -80
  67. package/tabs/index.d.ts +0 -157
  68. package/tabs.d.d.ts +0 -137
  69. package/toolbar/index.d.ts +0 -89
  70. package/toolbar.d.d.ts +0 -136
  71. package/tree/index.d.ts +0 -273
  72. package/ui-patterns/index.d.ts +0 -9
  73. /package/{index.d.ts → types/cdk-experimental.d.ts} +0 -0
@@ -1,211 +0,0 @@
1
- import { computed } from '@angular/core';
2
- import { ExpansionControl, ListExpansion } from './expansion.mjs';
3
- import { List } from './list.mjs';
4
- import { KeyboardEventManager, PointerEventManager } from './list-navigation.mjs';
5
-
6
- /** Controls label and description of an element. */
7
- class LabelControl {
8
- inputs;
9
- /** The `aria-label`. */
10
- label = computed(() => this.inputs.label?.());
11
- /** The `aria-labelledby` ids. */
12
- labelledBy = computed(() => {
13
- const label = this.label();
14
- const labelledBy = this.inputs.labelledBy?.();
15
- const defaultLabelledBy = this.inputs.defaultLabelledBy();
16
- if (labelledBy && labelledBy.length > 0) {
17
- return labelledBy;
18
- }
19
- // If an aria-label is provided by developers, do not set aria-labelledby with the
20
- // defaultLabelledBy value because if both attributes are set, aria-labelledby will be used.
21
- if (label) {
22
- return [];
23
- }
24
- return defaultLabelledBy;
25
- });
26
- constructor(inputs) {
27
- this.inputs = inputs;
28
- }
29
- }
30
-
31
- /** A tab in a tablist. */
32
- class TabPattern {
33
- inputs;
34
- /** Controls expansion for this tab. */
35
- expansion;
36
- /** A global unique identifier for the tab. */
37
- id;
38
- /** The index of the tab. */
39
- index = computed(() => this.inputs.tablist().inputs.items().indexOf(this));
40
- /** A local unique identifier for the tab. */
41
- value;
42
- /** Whether the tab is disabled. */
43
- disabled;
44
- /** The html element that should receive focus. */
45
- element;
46
- /** The text used by the typeahead search. */
47
- searchTerm = () => ''; // Unused because tabs do not support typeahead.
48
- /** Whether this tab has expandable content. */
49
- expandable = computed(() => this.expansion.expandable());
50
- /** The unique identifier used by the expansion behavior. */
51
- expansionId = computed(() => this.expansion.expansionId());
52
- /** Whether the tab is expanded. */
53
- expanded = computed(() => this.expansion.isExpanded());
54
- /** Whether the tab is active. */
55
- active = computed(() => this.inputs.tablist().inputs.activeItem() === this);
56
- /** Whether the tab is selected. */
57
- selected = computed(() => !!this.inputs.tablist().inputs.value().includes(this.value()));
58
- /** The tabindex of the tab. */
59
- tabindex = computed(() => this.inputs.tablist().listBehavior.getItemTabindex(this));
60
- /** The id of the tabpanel associated with the tab. */
61
- controls = computed(() => this.inputs.tabpanel()?.id());
62
- constructor(inputs) {
63
- this.inputs = inputs;
64
- this.id = inputs.id;
65
- this.value = inputs.value;
66
- this.disabled = inputs.disabled;
67
- this.element = inputs.element;
68
- this.expansion = new ExpansionControl({
69
- ...inputs,
70
- expansionId: inputs.value,
71
- expandable: () => true,
72
- expansionManager: inputs.tablist().expansionManager,
73
- });
74
- }
75
- }
76
- /** A tabpanel associated with a tab. */
77
- class TabPanelPattern {
78
- inputs;
79
- /** A global unique identifier for the tabpanel. */
80
- id;
81
- /** A local unique identifier for the tabpanel. */
82
- value;
83
- /** Controls label for this tabpanel. */
84
- labelManager;
85
- /** Whether the tabpanel is hidden. */
86
- hidden = computed(() => this.inputs.tab()?.expanded() === false);
87
- /** The tabindex of this tabpanel. */
88
- tabindex = computed(() => (this.hidden() ? -1 : 0));
89
- /** The aria-labelledby value for this tabpanel. */
90
- labelledBy = computed(() => this.labelManager.labelledBy().length > 0
91
- ? this.labelManager.labelledBy().join(' ')
92
- : undefined);
93
- constructor(inputs) {
94
- this.inputs = inputs;
95
- this.id = inputs.id;
96
- this.value = inputs.value;
97
- this.labelManager = new LabelControl({
98
- ...inputs,
99
- defaultLabelledBy: computed(() => (this.inputs.tab() ? [this.inputs.tab().id()] : [])),
100
- });
101
- }
102
- }
103
- /** Controls the state of a tablist. */
104
- class TabListPattern {
105
- inputs;
106
- /** The list behavior for the tablist. */
107
- listBehavior;
108
- /** Controls expansion for the tablist. */
109
- expansionManager;
110
- /** Whether the tablist is vertically or horizontally oriented. */
111
- orientation;
112
- /** Whether the tablist is disabled. */
113
- disabled;
114
- /** The tabindex of the tablist. */
115
- tabindex = computed(() => this.listBehavior.tabindex());
116
- /** The id of the current active tab. */
117
- activedescendant = computed(() => this.listBehavior.activedescendant());
118
- /** Whether selection should follow focus. */
119
- followFocus = computed(() => this.inputs.selectionMode() === 'follow');
120
- /** The key used to navigate to the previous tab in the tablist. */
121
- prevKey = computed(() => {
122
- if (this.inputs.orientation() === 'vertical') {
123
- return 'ArrowUp';
124
- }
125
- return this.inputs.textDirection() === 'rtl' ? 'ArrowRight' : 'ArrowLeft';
126
- });
127
- /** The key used to navigate to the next item in the list. */
128
- nextKey = computed(() => {
129
- if (this.inputs.orientation() === 'vertical') {
130
- return 'ArrowDown';
131
- }
132
- return this.inputs.textDirection() === 'rtl' ? 'ArrowLeft' : 'ArrowRight';
133
- });
134
- /** The keydown event manager for the tablist. */
135
- keydown = computed(() => {
136
- return new KeyboardEventManager()
137
- .on(this.prevKey, () => this.listBehavior.prev({ select: this.followFocus() }))
138
- .on(this.nextKey, () => this.listBehavior.next({ select: this.followFocus() }))
139
- .on('Home', () => this.listBehavior.first({ select: this.followFocus() }))
140
- .on('End', () => this.listBehavior.last({ select: this.followFocus() }))
141
- .on(' ', () => this.listBehavior.select())
142
- .on('Enter', () => this.listBehavior.select());
143
- });
144
- /** The pointerdown event manager for the tablist. */
145
- pointerdown = computed(() => {
146
- return new PointerEventManager().on(e => this.listBehavior.goto(this._getItem(e), { select: true }));
147
- });
148
- constructor(inputs) {
149
- this.inputs = inputs;
150
- this.disabled = inputs.disabled;
151
- this.orientation = inputs.orientation;
152
- this.listBehavior = new List({
153
- ...inputs,
154
- multi: () => false,
155
- typeaheadDelay: () => 0, // Tabs do not support typeahead.
156
- });
157
- this.expansionManager = new ListExpansion({
158
- ...inputs,
159
- multiExpandable: () => false,
160
- expandedIds: this.inputs.value,
161
- });
162
- }
163
- /**
164
- * Sets the tablist to its default initial state.
165
- *
166
- * Sets the active index of the tablist to the first focusable selected
167
- * tab if one exists. Otherwise, sets focus to the first focusable tab.
168
- *
169
- * This method should be called once the tablist and its tabs are properly initialized.
170
- */
171
- setDefaultState() {
172
- let firstItem;
173
- for (const item of this.inputs.items()) {
174
- if (!this.listBehavior.isFocusable(item))
175
- continue;
176
- if (firstItem === undefined) {
177
- firstItem = item;
178
- }
179
- if (item.selected()) {
180
- this.inputs.activeItem.set(item);
181
- return;
182
- }
183
- }
184
- if (firstItem !== undefined) {
185
- this.inputs.activeItem.set(firstItem);
186
- }
187
- }
188
- /** Handles keydown events for the tablist. */
189
- onKeydown(event) {
190
- if (!this.disabled()) {
191
- this.keydown().handle(event);
192
- }
193
- }
194
- /** The pointerdown event manager for the tablist. */
195
- onPointerdown(event) {
196
- if (!this.disabled()) {
197
- this.pointerdown().handle(event);
198
- }
199
- }
200
- /** Returns the tab item associated with the given pointer event. */
201
- _getItem(e) {
202
- if (!(e.target instanceof HTMLElement)) {
203
- return;
204
- }
205
- const element = e.target.closest('[role="tab"]');
206
- return this.inputs.items().find(i => i.element() === element);
207
- }
208
- }
209
-
210
- export { TabListPattern, TabPanelPattern, TabPattern };
211
- //# sourceMappingURL=tabs2.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs2.mjs","sources":["../../../../../k8-fastbuild-ST-c646aa77115d/bin/src/cdk-experimental/ui-patterns/behaviors/label/label.ts","../../../../../k8-fastbuild-ST-c646aa77115d/bin/src/cdk-experimental/ui-patterns/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 */\nimport {computed} from '@angular/core';\nimport {SignalLike} from '../signal-like/signal-like';\n\n/** Represents the required inputs for the label control. */\nexport interface LabelControlInputs {\n /** The default `aria-labelledby` ids. */\n defaultLabelledBy: SignalLike<string[]>;\n}\n\n/** Represents the optional inputs for the label control. */\nexport interface LabelControlOptionalInputs {\n /** The `aria-label`. */\n label?: SignalLike<string | undefined>;\n\n /** The user-provided `aria-labelledby` ids. */\n labelledBy?: SignalLike<string[]>;\n}\n\n/** Controls label and description of an element. */\nexport class LabelControl {\n /** The `aria-label`. */\n readonly label = computed(() => this.inputs.label?.());\n\n /** The `aria-labelledby` ids. */\n readonly labelledBy = computed(() => {\n const label = this.label();\n const labelledBy = this.inputs.labelledBy?.();\n const defaultLabelledBy = this.inputs.defaultLabelledBy();\n\n if (labelledBy && labelledBy.length > 0) {\n return labelledBy;\n }\n\n // If an aria-label is provided by developers, do not set aria-labelledby with the\n // defaultLabelledBy value because if both attributes are set, aria-labelledby will be used.\n if (label) {\n return [];\n }\n\n return defaultLabelledBy;\n });\n\n constructor(readonly inputs: LabelControlInputs & LabelControlOptionalInputs) {}\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 {computed} from '@angular/core';\nimport {KeyboardEventManager, PointerEventManager} from '../behaviors/event-manager';\nimport {\n ExpansionItem,\n ExpansionControl,\n ListExpansionInputs,\n ListExpansion,\n} from '../behaviors/expansion/expansion';\nimport {SignalLike} from '../behaviors/signal-like/signal-like';\nimport {LabelControl, LabelControlOptionalInputs} from '../behaviors/label/label';\nimport {List, ListInputs, ListItem} from '../behaviors/list/list';\n\n/** The required inputs to tabs. */\nexport interface TabInputs\n extends Omit<ListItem<string>, 'searchTerm' | 'index'>,\n Omit<ExpansionItem, 'expansionId' | 'expandable'> {\n /** The parent tablist that controls the tab. */\n tablist: SignalLike<TabListPattern>;\n\n /** The remote tabpanel controlled by the tab. */\n tabpanel: SignalLike<TabPanelPattern | undefined>;\n}\n\n/** A tab in a tablist. */\nexport class TabPattern {\n /** Controls expansion for this tab. */\n readonly expansion: ExpansionControl;\n\n /** A global unique identifier for the tab. */\n readonly id: SignalLike<string>;\n\n /** The index of the tab. */\n readonly index = computed(() => this.inputs.tablist().inputs.items().indexOf(this));\n\n /** A local unique identifier for the tab. */\n readonly value: SignalLike<string>;\n\n /** Whether the tab is disabled. */\n readonly disabled: SignalLike<boolean>;\n\n /** The html element that should receive focus. */\n readonly element: SignalLike<HTMLElement>;\n\n /** The text used by the typeahead search. */\n readonly searchTerm = () => ''; // Unused because tabs do not support typeahead.\n\n /** Whether this tab has expandable content. */\n readonly expandable = computed(() => this.expansion.expandable());\n\n /** The unique identifier used by the expansion behavior. */\n readonly expansionId = computed(() => this.expansion.expansionId());\n\n /** Whether the tab is expanded. */\n readonly expanded = computed(() => this.expansion.isExpanded());\n\n /** Whether the tab is active. */\n readonly active = computed(() => this.inputs.tablist().inputs.activeItem() === this);\n\n /** Whether the tab is selected. */\n readonly selected = computed(() => !!this.inputs.tablist().inputs.value().includes(this.value()));\n\n /** The tabindex of the tab. */\n readonly tabindex = computed(() => this.inputs.tablist().listBehavior.getItemTabindex(this));\n\n /** The id of the tabpanel associated with the tab. */\n readonly controls = computed(() => this.inputs.tabpanel()?.id());\n\n constructor(readonly inputs: TabInputs) {\n this.id = inputs.id;\n this.value = inputs.value;\n this.disabled = inputs.disabled;\n this.element = inputs.element;\n this.expansion = new ExpansionControl({\n ...inputs,\n expansionId: inputs.value,\n expandable: () => true,\n expansionManager: inputs.tablist().expansionManager,\n });\n }\n}\n\n/** The required inputs for the tabpanel. */\nexport interface TabPanelInputs extends LabelControlOptionalInputs {\n id: SignalLike<string>;\n tab: SignalLike<TabPattern | undefined>;\n value: SignalLike<string>;\n}\n\n/** A tabpanel associated with a tab. */\nexport class TabPanelPattern {\n /** A global unique identifier for the tabpanel. */\n readonly id: SignalLike<string>;\n\n /** A local unique identifier for the tabpanel. */\n readonly value: SignalLike<string>;\n\n /** Controls label for this tabpanel. */\n readonly labelManager: LabelControl;\n\n /** Whether the tabpanel is hidden. */\n readonly hidden = computed(() => this.inputs.tab()?.expanded() === false);\n\n /** The tabindex of this tabpanel. */\n readonly tabindex = computed(() => (this.hidden() ? -1 : 0));\n\n /** The aria-labelledby value for this tabpanel. */\n readonly labelledBy = computed(() =>\n this.labelManager.labelledBy().length > 0\n ? this.labelManager.labelledBy().join(' ')\n : undefined,\n );\n\n constructor(readonly inputs: TabPanelInputs) {\n this.id = inputs.id;\n this.value = inputs.value;\n this.labelManager = new LabelControl({\n ...inputs,\n defaultLabelledBy: computed(() => (this.inputs.tab() ? [this.inputs.tab()!.id()] : [])),\n });\n }\n}\n\n/** The required inputs for the tablist. */\nexport type TabListInputs = Omit<ListInputs<TabPattern, string>, 'multi' | 'typeaheadDelay'> &\n Omit<ListExpansionInputs, 'multiExpandable' | 'expandedIds' | 'items'>;\n\n/** Controls the state of a tablist. */\nexport class TabListPattern {\n /** The list behavior for the tablist. */\n readonly listBehavior: List<TabPattern, string>;\n\n /** Controls expansion for the tablist. */\n readonly expansionManager: ListExpansion;\n\n /** Whether the tablist is vertically or horizontally oriented. */\n readonly orientation: SignalLike<'vertical' | 'horizontal'>;\n\n /** Whether the tablist is disabled. */\n readonly disabled: SignalLike<boolean>;\n\n /** The tabindex of the tablist. */\n readonly tabindex = computed(() => this.listBehavior.tabindex());\n\n /** The id of the current active tab. */\n readonly activedescendant = computed(() => this.listBehavior.activedescendant());\n\n /** Whether selection should follow focus. */\n readonly followFocus = computed(() => this.inputs.selectionMode() === 'follow');\n\n /** The key used to navigate to the previous tab in the tablist. */\n readonly prevKey = computed(() => {\n if (this.inputs.orientation() === 'vertical') {\n return 'ArrowUp';\n }\n return this.inputs.textDirection() === 'rtl' ? 'ArrowRight' : 'ArrowLeft';\n });\n\n /** The key used to navigate to the next item in the list. */\n readonly nextKey = computed(() => {\n if (this.inputs.orientation() === 'vertical') {\n return 'ArrowDown';\n }\n return this.inputs.textDirection() === 'rtl' ? 'ArrowLeft' : 'ArrowRight';\n });\n\n /** The keydown event manager for the tablist. */\n readonly keydown = computed(() => {\n return new KeyboardEventManager()\n .on(this.prevKey, () => this.listBehavior.prev({select: this.followFocus()}))\n .on(this.nextKey, () => this.listBehavior.next({select: this.followFocus()}))\n .on('Home', () => this.listBehavior.first({select: this.followFocus()}))\n .on('End', () => this.listBehavior.last({select: this.followFocus()}))\n .on(' ', () => this.listBehavior.select())\n .on('Enter', () => this.listBehavior.select());\n });\n\n /** The pointerdown event manager for the tablist. */\n readonly pointerdown = computed(() => {\n return new PointerEventManager().on(e =>\n this.listBehavior.goto(this._getItem(e)!, {select: true}),\n );\n });\n\n constructor(readonly inputs: TabListInputs) {\n this.disabled = inputs.disabled;\n this.orientation = inputs.orientation;\n\n this.listBehavior = new List({\n ...inputs,\n multi: () => false,\n typeaheadDelay: () => 0, // Tabs do not support typeahead.\n });\n\n this.expansionManager = new ListExpansion({\n ...inputs,\n multiExpandable: () => false,\n expandedIds: this.inputs.value,\n });\n }\n\n /**\n * Sets the tablist to its default initial state.\n *\n * Sets the active index of the tablist to the first focusable selected\n * tab if one exists. Otherwise, sets focus to the first focusable tab.\n *\n * This method should be called once the tablist and its tabs are properly initialized.\n */\n setDefaultState() {\n let firstItem: TabPattern | undefined;\n\n for (const item of this.inputs.items()) {\n if (!this.listBehavior.isFocusable(item)) continue;\n\n if (firstItem === undefined) {\n firstItem = item;\n }\n\n if (item.selected()) {\n this.inputs.activeItem.set(item);\n return;\n }\n }\n if (firstItem !== undefined) {\n this.inputs.activeItem.set(firstItem);\n }\n }\n\n /** Handles keydown events for the tablist. */\n onKeydown(event: KeyboardEvent) {\n if (!this.disabled()) {\n this.keydown().handle(event);\n }\n }\n\n /** The pointerdown event manager for the tablist. */\n onPointerdown(event: PointerEvent) {\n if (!this.disabled()) {\n this.pointerdown().handle(event);\n }\n }\n\n /** Returns the tab item associated with the given pointer event. */\n private _getItem(e: PointerEvent) {\n if (!(e.target instanceof HTMLElement)) {\n return;\n }\n\n const element = e.target.closest('[role=\"tab\"]');\n return this.inputs.items().find(i => i.element() === element);\n }\n}\n"],"names":[],"mappings":";;;;;AAyBA;MACa,YAAY,CAAA;AAuBF,IAAA,MAAA;;AArBZ,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;;AAG7C,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI;QAC7C,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;QAEzD,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,YAAA,OAAO,UAAU;;;;QAKnB,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,EAAE;;AAGX,QAAA,OAAO,iBAAiB;AAC1B,KAAC,CAAC;AAEF,IAAA,WAAA,CAAqB,MAAuD,EAAA;QAAvD,IAAM,CAAA,MAAA,GAAN,MAAM;;AAC5B;;ACnBD;MACa,UAAU,CAAA;AA2CA,IAAA,MAAA;;AAzCZ,IAAA,SAAS;;AAGT,IAAA,EAAE;;IAGF,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;AAG1E,IAAA,KAAK;;AAGL,IAAA,QAAQ;;AAGR,IAAA,OAAO;;AAGP,IAAA,UAAU,GAAG,MAAM,EAAE,CAAC;;AAGtB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;;AAGxD,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;;AAG1D,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;;IAGtD,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC;;AAG3E,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;;IAGxF,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;;AAGnF,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC;AAEhE,IAAA,WAAA,CAAqB,MAAiB,EAAA;QAAjB,IAAM,CAAA,MAAA,GAAN,MAAM;AACzB,QAAA,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CAAC;AACpC,YAAA,GAAG,MAAM;YACT,WAAW,EAAE,MAAM,CAAC,KAAK;AACzB,YAAA,UAAU,EAAE,MAAM,IAAI;AACtB,YAAA,gBAAgB,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,gBAAgB;AACpD,SAAA,CAAC;;AAEL;AASD;MACa,eAAe,CAAA;AAuBL,IAAA,MAAA;;AArBZ,IAAA,EAAE;;AAGF,IAAA,KAAK;;AAGL,IAAA,YAAY;;AAGZ,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,KAAK,CAAC;;IAGhE,QAAQ,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;;AAGnD,IAAA,UAAU,GAAG,QAAQ,CAAC,MAC7B,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG;UACpC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG;UACvC,SAAS,CACd;AAED,IAAA,WAAA,CAAqB,MAAsB,EAAA;QAAtB,IAAM,CAAA,MAAA,GAAN,MAAM;AACzB,QAAA,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC;AACnC,YAAA,GAAG,MAAM;AACT,YAAA,iBAAiB,EAAE,QAAQ,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAG,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxF,SAAA,CAAC;;AAEL;AAMD;MACa,cAAc,CAAA;AAwDJ,IAAA,MAAA;;AAtDZ,IAAA,YAAY;;AAGZ,IAAA,gBAAgB;;AAGhB,IAAA,WAAW;;AAGX,IAAA,QAAQ;;AAGR,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;;AAGvD,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;;AAGvE,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,QAAQ,CAAC;;AAGtE,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;QAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE;AAC5C,YAAA,OAAO,SAAS;;AAElB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,KAAK,GAAG,YAAY,GAAG,WAAW;AAC3E,KAAC,CAAC;;AAGO,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;QAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE;AAC5C,YAAA,OAAO,WAAW;;AAEpB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,KAAK,GAAG,WAAW,GAAG,YAAY;AAC3E,KAAC,CAAC;;AAGO,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;QAC/B,OAAO,IAAI,oBAAoB;aAC5B,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAC,CAAC;aAC3E,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAC,CAAC;aAC3E,EAAE,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAC,CAAC;aACtE,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAC,CAAC;AACpE,aAAA,EAAE,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AACxC,aAAA,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;AAClD,KAAC,CAAC;;AAGO,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,OAAO,IAAI,mBAAmB,EAAE,CAAC,EAAE,CAAC,CAAC,IACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAC1D;AACH,KAAC,CAAC;AAEF,IAAA,WAAA,CAAqB,MAAqB,EAAA;QAArB,IAAM,CAAA,MAAA,GAAN,MAAM;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;AAErC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC;AAC3B,YAAA,GAAG,MAAM;AACT,YAAA,KAAK,EAAE,MAAM,KAAK;AAClB,YAAA,cAAc,EAAE,MAAM,CAAC;AACxB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,aAAa,CAAC;AACxC,YAAA,GAAG,MAAM;AACT,YAAA,eAAe,EAAE,MAAM,KAAK;AAC5B,YAAA,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;AAC/B,SAAA,CAAC;;AAGJ;;;;;;;AAOG;IACH,eAAe,GAAA;AACb,QAAA,IAAI,SAAiC;QAErC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE;YACtC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC;gBAAE;AAE1C,YAAA,IAAI,SAAS,KAAK,SAAS,EAAE;gBAC3B,SAAS,GAAG,IAAI;;AAGlB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;gBACnB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBAChC;;;AAGJ,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;;;;AAKzC,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;;;;AAKhC,IAAA,aAAa,CAAC,KAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;;;;AAK5B,IAAA,QAAQ,CAAC,CAAe,EAAA;QAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,YAAY,WAAW,CAAC,EAAE;YACtC;;QAGF,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC;;AAEhE;;;;"}
@@ -1,168 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { signal, inject, computed, input, booleanAttribute, afterRenderEffect, Directive, ElementRef } from '@angular/core';
3
- import { Directionality } from '@angular/cdk/bidi';
4
- import { _IdGenerator } from '@angular/cdk/a11y';
5
- import { ToolbarPattern, ToolbarWidgetPattern } from './toolbar2.mjs';
6
- import './list.mjs';
7
- import './list-navigation.mjs';
8
-
9
- /**
10
- * Sort directives by their document order.
11
- */
12
- function sortDirectives(a, b) {
13
- return (a.element().compareDocumentPosition(b.element()) & Node.DOCUMENT_POSITION_PRECEDING) > 0
14
- ? 1
15
- : -1;
16
- }
17
- /**
18
- * A toolbar widget container.
19
- *
20
- * Widgets such as radio groups or buttons are nested within a toolbar to allow for a single
21
- * place of reference for focus and navigation. The CdkToolbar is meant to be used in conjunction
22
- * with CdkToolbarWidget and CdkRadioGroup as follows:
23
- *
24
- * ```html
25
- * <div cdkToolbar>
26
- * <button cdkToolbarWidget>Button</button>
27
- * <div cdkRadioGroup>
28
- * <label cdkRadioButton value="1">Option 1</label>
29
- * <label cdkRadioButton value="2">Option 2</label>
30
- * <label cdkRadioButton value="3">Option 3</label>
31
- * </div>
32
- * </div>
33
- * ```
34
- */
35
- class CdkToolbar {
36
- /** The CdkTabList nested inside of the container. */
37
- _cdkWidgets = signal(new Set(), ...(ngDevMode ? [{ debugName: "_cdkWidgets" }] : []));
38
- /** A signal wrapper for directionality. */
39
- textDirection = inject(Directionality).valueSignal;
40
- /** Sorted UIPatterns of the child widgets */
41
- items = computed(() => [...this._cdkWidgets()].sort(sortDirectives).map(widget => widget.pattern), ...(ngDevMode ? [{ debugName: "items" }] : []));
42
- /** Whether the toolbar is vertically or horizontally oriented. */
43
- orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : []));
44
- /** Whether disabled items in the group should be skipped when navigating. */
45
- skipDisabled = input(false, ...(ngDevMode ? [{ debugName: "skipDisabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
46
- /** Whether the toolbar is disabled. */
47
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
48
- /** Whether focus should wrap when navigating. */
49
- wrap = input(true, ...(ngDevMode ? [{ debugName: "wrap", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
50
- /** The toolbar UIPattern. */
51
- pattern = new ToolbarPattern({
52
- ...this,
53
- activeItem: signal(undefined),
54
- textDirection: this.textDirection,
55
- focusMode: signal('roving'),
56
- });
57
- /** Whether the toolbar has received focus yet. */
58
- _hasFocused = signal(false, ...(ngDevMode ? [{ debugName: "_hasFocused" }] : []));
59
- onFocus() {
60
- this._hasFocused.set(true);
61
- }
62
- constructor() {
63
- afterRenderEffect(() => {
64
- if (!this._hasFocused()) {
65
- this.pattern.setDefaultState();
66
- }
67
- });
68
- afterRenderEffect(() => {
69
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
70
- const violations = this.pattern.validate();
71
- for (const violation of violations) {
72
- console.error(violation);
73
- }
74
- }
75
- });
76
- }
77
- register(widget) {
78
- const widgets = this._cdkWidgets();
79
- if (!widgets.has(widget)) {
80
- widgets.add(widget);
81
- this._cdkWidgets.set(new Set(widgets));
82
- }
83
- }
84
- unregister(widget) {
85
- const widgets = this._cdkWidgets();
86
- if (widgets.delete(widget)) {
87
- this._cdkWidgets.set(new Set(widgets));
88
- }
89
- }
90
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0-rc.1", ngImport: i0, type: CdkToolbar, deps: [], target: i0.ɵɵFactoryTarget.Directive });
91
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0-rc.1", type: CdkToolbar, isStandalone: true, selector: "[cdkToolbar]", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, skipDisabled: { classPropertyName: "skipDisabled", publicName: "skipDisabled", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "toolbar" }, listeners: { "keydown": "pattern.onKeydown($event)", "pointerdown": "pattern.onPointerdown($event)", "focusin": "onFocus()" }, properties: { "attr.tabindex": "pattern.tabindex()", "attr.aria-disabled": "pattern.disabled()", "attr.aria-orientation": "pattern.orientation()", "attr.aria-activedescendant": "pattern.activedescendant()" }, classAttribute: "cdk-toolbar" }, exportAs: ["cdkToolbar"], ngImport: i0 });
92
- }
93
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0-rc.1", ngImport: i0, type: CdkToolbar, decorators: [{
94
- type: Directive,
95
- args: [{
96
- selector: '[cdkToolbar]',
97
- exportAs: 'cdkToolbar',
98
- host: {
99
- 'role': 'toolbar',
100
- 'class': 'cdk-toolbar',
101
- '[attr.tabindex]': 'pattern.tabindex()',
102
- '[attr.aria-disabled]': 'pattern.disabled()',
103
- '[attr.aria-orientation]': 'pattern.orientation()',
104
- '[attr.aria-activedescendant]': 'pattern.activedescendant()',
105
- '(keydown)': 'pattern.onKeydown($event)',
106
- '(pointerdown)': 'pattern.onPointerdown($event)',
107
- '(focusin)': 'onFocus()',
108
- },
109
- }]
110
- }], ctorParameters: () => [] });
111
- /**
112
- * A widget within a toolbar.
113
- *
114
- * A widget is anything that is within a toolbar. It should be applied to any native HTML element
115
- * that has the purpose of acting as a widget navigatable within a toolbar.
116
- */
117
- class CdkToolbarWidget {
118
- /** A reference to the widget element. */
119
- _elementRef = inject(ElementRef);
120
- /** The parent CdkToolbar. */
121
- _cdkToolbar = inject(CdkToolbar);
122
- /** A unique identifier for the widget. */
123
- _generatedId = inject(_IdGenerator).getId('cdk-toolbar-widget-');
124
- /** A unique identifier for the widget. */
125
- id = computed(() => this._generatedId, ...(ngDevMode ? [{ debugName: "id" }] : []));
126
- /** The parent Toolbar UIPattern. */
127
- parentToolbar = computed(() => this._cdkToolbar.pattern, ...(ngDevMode ? [{ debugName: "parentToolbar" }] : []));
128
- /** A reference to the widget element to be focused on navigation. */
129
- element = computed(() => this._elementRef.nativeElement, ...(ngDevMode ? [{ debugName: "element" }] : []));
130
- /** Whether the widget is disabled. */
131
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
132
- hardDisabled = computed(() => this.pattern.disabled() && this._cdkToolbar.skipDisabled(), ...(ngDevMode ? [{ debugName: "hardDisabled" }] : []));
133
- pattern = new ToolbarWidgetPattern({
134
- ...this,
135
- id: this.id,
136
- element: this.element,
137
- disabled: computed(() => this._cdkToolbar.disabled() || this.disabled()),
138
- parentToolbar: this.parentToolbar,
139
- });
140
- ngOnInit() {
141
- this._cdkToolbar.register(this);
142
- }
143
- ngOnDestroy() {
144
- this._cdkToolbar.unregister(this);
145
- }
146
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0-rc.1", ngImport: i0, type: CdkToolbarWidget, deps: [], target: i0.ɵɵFactoryTarget.Directive });
147
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0-rc.1", type: CdkToolbarWidget, isStandalone: true, selector: "[cdkToolbarWidget]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "button" }, properties: { "class.cdk-active": "pattern.active()", "attr.tabindex": "pattern.tabindex()", "attr.inert": "hardDisabled() ? true : null", "attr.disabled": "hardDisabled() ? true : null", "attr.aria-disabled": "pattern.disabled()", "id": "pattern.id()" }, classAttribute: "cdk-toolbar-widget" }, exportAs: ["cdkToolbarWidget"], ngImport: i0 });
148
- }
149
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0-rc.1", ngImport: i0, type: CdkToolbarWidget, decorators: [{
150
- type: Directive,
151
- args: [{
152
- selector: '[cdkToolbarWidget]',
153
- exportAs: 'cdkToolbarWidget',
154
- host: {
155
- 'role': 'button',
156
- 'class': 'cdk-toolbar-widget',
157
- '[class.cdk-active]': 'pattern.active()',
158
- '[attr.tabindex]': 'pattern.tabindex()',
159
- '[attr.inert]': 'hardDisabled() ? true : null',
160
- '[attr.disabled]': 'hardDisabled() ? true : null',
161
- '[attr.aria-disabled]': 'pattern.disabled()',
162
- '[id]': 'pattern.id()',
163
- },
164
- }]
165
- }] });
166
-
167
- export { CdkToolbar, CdkToolbarWidget };
168
- //# sourceMappingURL=toolbar.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toolbar.mjs","sources":["../../../../../k8-fastbuild-ST-c646aa77115d/bin/src/cdk-experimental/toolbar/toolbar.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n afterRenderEffect,\n Directive,\n ElementRef,\n inject,\n computed,\n input,\n booleanAttribute,\n signal,\n Signal,\n OnInit,\n OnDestroy,\n} from '@angular/core';\nimport {ToolbarPattern, RadioButtonPattern, ToolbarWidgetPattern} from '../ui-patterns';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {_IdGenerator} from '@angular/cdk/a11y';\n\n/** Interface for a radio button that can be used with a toolbar. Based on radio-button in ui-patterns */\ninterface CdkRadioButtonInterface<V> {\n /** The HTML element associated with the radio button. */\n element: Signal<HTMLElement>;\n /** Whether the radio button is disabled. */\n disabled: Signal<boolean>;\n\n pattern: RadioButtonPattern<V>;\n}\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 toolbar widget container.\n *\n * Widgets such as radio groups or buttons are nested within a toolbar to allow for a single\n * place of reference for focus and navigation. The CdkToolbar is meant to be used in conjunction\n * with CdkToolbarWidget and CdkRadioGroup as follows:\n *\n * ```html\n * <div cdkToolbar>\n * <button cdkToolbarWidget>Button</button>\n * <div cdkRadioGroup>\n * <label cdkRadioButton value=\"1\">Option 1</label>\n * <label cdkRadioButton value=\"2\">Option 2</label>\n * <label cdkRadioButton value=\"3\">Option 3</label>\n * </div>\n * </div>\n * ```\n */\n@Directive({\n selector: '[cdkToolbar]',\n exportAs: 'cdkToolbar',\n host: {\n 'role': 'toolbar',\n 'class': 'cdk-toolbar',\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 CdkToolbar<V> {\n /** The CdkTabList nested inside of the container. */\n private readonly _cdkWidgets = signal(new Set<CdkRadioButtonInterface<V> | CdkToolbarWidget>());\n\n /** A signal wrapper for directionality. */\n textDirection = inject(Directionality).valueSignal;\n\n /** Sorted UIPatterns of the child widgets */\n items = computed(() =>\n [...this._cdkWidgets()].sort(sortDirectives).map(widget => widget.pattern),\n );\n\n /** Whether the toolbar is vertically or horizontally oriented. */\n orientation = input<'vertical' | 'horizontal'>('horizontal');\n\n /** Whether disabled items in the group should be skipped when navigating. */\n skipDisabled = input(false, {transform: booleanAttribute});\n\n /** Whether the toolbar is disabled. */\n disabled = input(false, {transform: booleanAttribute});\n\n /** Whether focus should wrap when navigating. */\n readonly wrap = input(true, {transform: booleanAttribute});\n\n /** The toolbar UIPattern. */\n pattern: ToolbarPattern<V> = new ToolbarPattern<V>({\n ...this,\n activeItem: signal(undefined),\n textDirection: this.textDirection,\n focusMode: signal('roving'),\n });\n\n /** Whether the toolbar has received focus yet. */\n private _hasFocused = signal(false);\n\n onFocus() {\n this._hasFocused.set(true);\n }\n\n constructor() {\n afterRenderEffect(() => {\n if (!this._hasFocused()) {\n this.pattern.setDefaultState();\n }\n });\n\n afterRenderEffect(() => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const violations = this.pattern.validate();\n for (const violation of violations) {\n console.error(violation);\n }\n }\n });\n }\n\n register(widget: CdkRadioButtonInterface<V> | CdkToolbarWidget) {\n const widgets = this._cdkWidgets();\n if (!widgets.has(widget)) {\n widgets.add(widget);\n this._cdkWidgets.set(new Set(widgets));\n }\n }\n\n unregister(widget: CdkRadioButtonInterface<V> | CdkToolbarWidget) {\n const widgets = this._cdkWidgets();\n if (widgets.delete(widget)) {\n this._cdkWidgets.set(new Set(widgets));\n }\n }\n}\n\n/**\n * A widget within a toolbar.\n *\n * A widget is anything that is within a toolbar. It should be applied to any native HTML element\n * that has the purpose of acting as a widget navigatable within a toolbar.\n */\n@Directive({\n selector: '[cdkToolbarWidget]',\n exportAs: 'cdkToolbarWidget',\n host: {\n 'role': 'button',\n 'class': 'cdk-toolbar-widget',\n '[class.cdk-active]': 'pattern.active()',\n '[attr.tabindex]': 'pattern.tabindex()',\n '[attr.inert]': 'hardDisabled() ? true : null',\n '[attr.disabled]': 'hardDisabled() ? true : null',\n '[attr.aria-disabled]': 'pattern.disabled()',\n '[id]': 'pattern.id()',\n },\n})\nexport class CdkToolbarWidget implements OnInit, OnDestroy {\n /** A reference to the widget element. */\n private readonly _elementRef = inject(ElementRef);\n\n /** The parent CdkToolbar. */\n private readonly _cdkToolbar = inject(CdkToolbar);\n\n /** A unique identifier for the widget. */\n private readonly _generatedId = inject(_IdGenerator).getId('cdk-toolbar-widget-');\n\n /** A unique identifier for the widget. */\n protected id = computed(() => this._generatedId);\n\n /** The parent Toolbar UIPattern. */\n protected parentToolbar = computed(() => this._cdkToolbar.pattern);\n\n /** A reference to the widget element to be focused on navigation. */\n element = computed(() => this._elementRef.nativeElement);\n\n /** Whether the widget is disabled. */\n disabled = input(false, {transform: booleanAttribute});\n\n readonly hardDisabled = computed(\n () => this.pattern.disabled() && this._cdkToolbar.skipDisabled(),\n );\n\n pattern = new ToolbarWidgetPattern({\n ...this,\n id: this.id,\n element: this.element,\n disabled: computed(() => this._cdkToolbar.disabled() || this.disabled()),\n parentToolbar: this.parentToolbar,\n });\n\n ngOnInit() {\n this._cdkToolbar.register(this);\n }\n\n ngOnDestroy() {\n this._cdkToolbar.unregister(this);\n }\n}\n"],"names":[],"mappings":"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"}