@angular/cdk-experimental 20.2.0-next.3 → 20.2.0

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 (50) hide show
  1. package/fesm2022/accordion.mjs +12 -12
  2. package/fesm2022/accordion.mjs.map +1 -1
  3. package/fesm2022/accordion2.mjs.map +1 -1
  4. package/fesm2022/cdk-experimental.mjs +1 -1
  5. package/fesm2022/cdk-experimental.mjs.map +1 -1
  6. package/fesm2022/column-resize.mjs +53 -53
  7. package/fesm2022/column-resize.mjs.map +1 -1
  8. package/fesm2022/combobox.mjs +10 -10
  9. package/fesm2022/combobox.mjs.map +1 -1
  10. package/fesm2022/deferred-content.mjs +6 -6
  11. package/fesm2022/deferred-content.mjs.map +1 -1
  12. package/fesm2022/expansion.mjs.map +1 -1
  13. package/fesm2022/list-navigation.mjs +6 -2
  14. package/fesm2022/list-navigation.mjs.map +1 -1
  15. package/fesm2022/list.mjs.map +1 -1
  16. package/fesm2022/listbox.mjs +6 -6
  17. package/fesm2022/listbox.mjs.map +1 -1
  18. package/fesm2022/option.mjs.map +1 -1
  19. package/fesm2022/polyfill.mjs.map +1 -1
  20. package/fesm2022/popover-edit.mjs +43 -43
  21. package/fesm2022/popover-edit.mjs.map +1 -1
  22. package/fesm2022/radio-group.mjs +41 -8
  23. package/fesm2022/radio-group.mjs.map +1 -1
  24. package/fesm2022/{radio-button.mjs → radio-group2.mjs} +17 -40
  25. package/fesm2022/radio-group2.mjs.map +1 -0
  26. package/fesm2022/scrolling.mjs +7 -7
  27. package/fesm2022/scrolling.mjs.map +1 -1
  28. package/fesm2022/selection.mjs +19 -19
  29. package/fesm2022/selection.mjs.map +1 -1
  30. package/fesm2022/table-scroll-container.mjs +7 -7
  31. package/fesm2022/table-scroll-container.mjs.map +1 -1
  32. package/fesm2022/tabs.mjs +15 -15
  33. package/fesm2022/tabs.mjs.map +1 -1
  34. package/fesm2022/tabs2.mjs.map +1 -1
  35. package/fesm2022/toolbar.mjs +168 -0
  36. package/fesm2022/toolbar.mjs.map +1 -0
  37. package/fesm2022/toolbar2.mjs +224 -0
  38. package/fesm2022/toolbar2.mjs.map +1 -0
  39. package/fesm2022/tree.mjs +65 -72
  40. package/fesm2022/tree.mjs.map +1 -1
  41. package/fesm2022/ui-patterns.mjs +2 -1
  42. package/fesm2022/ui-patterns.mjs.map +1 -1
  43. package/package.json +7 -3
  44. package/radio-group/index.d.ts +12 -4
  45. package/radio-group.d.d.ts +30 -45
  46. package/toolbar/index.d.ts +89 -0
  47. package/toolbar.d.d.ts +136 -0
  48. package/tree/index.d.ts +18 -24
  49. package/ui-patterns/index.d.ts +2 -1
  50. package/fesm2022/radio-button.mjs.map +0 -1
@@ -1,45 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { SignalLike, KeyboardEventManager, PointerEventManager } from './pointer-event-manager.d.js';
3
- import { ListItem, List, ListInputs } from './list.d.js';
4
-
5
- /**
6
- * Represents the properties exposed by a radio group that need to be accessed by a radio button.
7
- * This exists to avoid circular dependency errors between the radio group and radio button.
8
- */
9
- interface RadioGroupLike<V> {
10
- /** The list behavior for the radio group. */
11
- listBehavior: List<RadioButtonPattern<V>, V>;
12
- }
13
- /** Represents the required inputs for a radio button in a radio group. */
14
- interface RadioButtonInputs<V> extends Omit<ListItem<V>, 'searchTerm' | 'index'> {
15
- /** A reference to the parent radio group. */
16
- group: SignalLike<RadioGroupLike<V> | undefined>;
17
- }
18
- /** Represents a radio button within a radio group. */
19
- declare class RadioButtonPattern<V> {
20
- readonly inputs: RadioButtonInputs<V>;
21
- /** A unique identifier for the radio button. */
22
- id: SignalLike<string>;
23
- /** The value associated with the radio button. */
24
- value: SignalLike<V>;
25
- /** The position of the radio button within the group. */
26
- index: _angular_core.Signal<number>;
27
- /** Whether the radio button is currently the active one (focused). */
28
- active: _angular_core.Signal<boolean>;
29
- /** Whether the radio button is selected. */
30
- selected: SignalLike<boolean>;
31
- /** Whether the radio button is disabled. */
32
- disabled: SignalLike<boolean>;
33
- /** A reference to the parent radio group. */
34
- group: SignalLike<RadioGroupLike<V> | undefined>;
35
- /** The tabindex of the radio button. */
36
- tabindex: _angular_core.Signal<0 | -1 | undefined>;
37
- /** The HTML element associated with the radio button. */
38
- element: SignalLike<HTMLElement>;
39
- /** The search term for typeahead. */
40
- readonly searchTerm: () => string;
41
- constructor(inputs: RadioButtonInputs<V>);
42
- }
3
+ import { ListInputs, List } from './list.d.js';
4
+ import { RadioButtonPattern } from './toolbar.d.js';
43
5
 
44
6
  /** Represents the required inputs for a radio group. */
45
7
  type RadioGroupInputs<V> = Omit<ListInputs<RadioButtonPattern<V>, V>, 'multi' | 'selectionMode' | 'wrap' | 'typeaheadDelay'> & {
@@ -47,21 +9,44 @@ type RadioGroupInputs<V> = Omit<ListInputs<RadioButtonPattern<V>, V>, 'multi' |
47
9
  disabled: SignalLike<boolean>;
48
10
  /** Whether the radio group is readonly. */
49
11
  readonly: SignalLike<boolean>;
12
+ /** Parent toolbar of radio group */
13
+ toolbar: SignalLike<ToolbarLike<V> | undefined>;
50
14
  };
15
+ /**
16
+ * Represents the properties exposed by a toolbar widget that need to be accessed by a radio group.
17
+ * This exists to avoid circular dependency errors between the toolbar and radio button.
18
+ */
19
+ type ToolbarWidgetLike = {
20
+ id: SignalLike<string>;
21
+ index: SignalLike<number>;
22
+ element: SignalLike<HTMLElement>;
23
+ disabled: SignalLike<boolean>;
24
+ searchTerm: SignalLike<any>;
25
+ value: SignalLike<any>;
26
+ };
27
+ /**
28
+ * Represents the properties exposed by a toolbar that need to be accessed by a radio group.
29
+ * This exists to avoid circular dependency errors between the toolbar and radio button.
30
+ */
31
+ interface ToolbarLike<V> {
32
+ listBehavior: List<RadioButtonPattern<V> | ToolbarWidgetLike, V>;
33
+ orientation: SignalLike<'vertical' | 'horizontal'>;
34
+ disabled: SignalLike<boolean>;
35
+ }
51
36
  /** Controls the state of a radio group. */
52
37
  declare class RadioGroupPattern<V> {
53
38
  readonly inputs: RadioGroupInputs<V>;
54
39
  /** The list behavior for the radio group. */
55
- readonly listBehavior: List<RadioButtonPattern<V>, V>;
40
+ readonly listBehavior: List<RadioButtonPattern<V> | ToolbarWidgetLike, V>;
56
41
  /** Whether the radio group is vertically or horizontally oriented. */
57
42
  orientation: SignalLike<'vertical' | 'horizontal'>;
58
43
  /** Whether the radio group is disabled. */
59
44
  disabled: _angular_core.Signal<boolean>;
60
45
  /** The currently selected radio button. */
61
- selectedItem: _angular_core.Signal<RadioButtonPattern<V>>;
46
+ selectedItem: _angular_core.Signal<ToolbarWidgetLike | RadioButtonPattern<V>>;
62
47
  /** Whether the radio group is readonly. */
63
48
  readonly: _angular_core.Signal<boolean>;
64
- /** The tabindex of the radio group (if using activedescendant). */
49
+ /** The tabindex of the radio group. */
65
50
  tabindex: _angular_core.Signal<0 | -1>;
66
51
  /** The id of the current active radio button (if using activedescendant). */
67
52
  activedescendant: _angular_core.Signal<string | undefined>;
@@ -91,5 +76,5 @@ declare class RadioGroupPattern<V> {
91
76
  private _getItem;
92
77
  }
93
78
 
94
- export { RadioButtonPattern, RadioGroupPattern };
95
- export type { RadioButtonInputs, RadioGroupInputs };
79
+ export { RadioGroupPattern };
80
+ export type { RadioGroupInputs, ToolbarLike };
@@ -0,0 +1,89 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { Signal, OnInit, OnDestroy } from '@angular/core';
3
+ import * as _angular_cdk_bidi from '@angular/cdk/bidi';
4
+ import { RadioButtonPattern, ToolbarWidgetPattern, ToolbarPattern } from '../toolbar.d.js';
5
+ import '../pointer-event-manager.d.js';
6
+ import '../list.d.js';
7
+
8
+ /** Interface for a radio button that can be used with a toolbar. Based on radio-button in ui-patterns */
9
+ interface CdkRadioButtonInterface<V> {
10
+ /** The HTML element associated with the radio button. */
11
+ element: Signal<HTMLElement>;
12
+ /** Whether the radio button is disabled. */
13
+ disabled: Signal<boolean>;
14
+ pattern: RadioButtonPattern<V>;
15
+ }
16
+ /**
17
+ * A toolbar widget container.
18
+ *
19
+ * Widgets such as radio groups or buttons are nested within a toolbar to allow for a single
20
+ * place of reference for focus and navigation. The CdkToolbar is meant to be used in conjunction
21
+ * with CdkToolbarWidget and CdkRadioGroup as follows:
22
+ *
23
+ * ```html
24
+ * <div cdkToolbar>
25
+ * <button cdkToolbarWidget>Button</button>
26
+ * <div cdkRadioGroup>
27
+ * <label cdkRadioButton value="1">Option 1</label>
28
+ * <label cdkRadioButton value="2">Option 2</label>
29
+ * <label cdkRadioButton value="3">Option 3</label>
30
+ * </div>
31
+ * </div>
32
+ * ```
33
+ */
34
+ declare class CdkToolbar<V> {
35
+ /** The CdkTabList nested inside of the container. */
36
+ private readonly _cdkWidgets;
37
+ /** A signal wrapper for directionality. */
38
+ textDirection: _angular_core.WritableSignal<_angular_cdk_bidi.Direction>;
39
+ /** Sorted UIPatterns of the child widgets */
40
+ items: Signal<(RadioButtonPattern<V> | ToolbarWidgetPattern)[]>;
41
+ /** Whether the toolbar is vertically or horizontally oriented. */
42
+ orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
43
+ /** Whether disabled items in the group should be skipped when navigating. */
44
+ skipDisabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
45
+ /** Whether the toolbar is disabled. */
46
+ disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
47
+ /** Whether focus should wrap when navigating. */
48
+ readonly wrap: _angular_core.InputSignalWithTransform<boolean, unknown>;
49
+ /** The toolbar UIPattern. */
50
+ pattern: ToolbarPattern<V>;
51
+ /** Whether the toolbar has received focus yet. */
52
+ private _hasFocused;
53
+ onFocus(): void;
54
+ constructor();
55
+ register(widget: CdkRadioButtonInterface<V> | CdkToolbarWidget): void;
56
+ unregister(widget: CdkRadioButtonInterface<V> | CdkToolbarWidget): void;
57
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CdkToolbar<any>, never>;
58
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CdkToolbar<any>, "[cdkToolbar]", ["cdkToolbar"], { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "skipDisabled": { "alias": "skipDisabled"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
59
+ }
60
+ /**
61
+ * A widget within a toolbar.
62
+ *
63
+ * A widget is anything that is within a toolbar. It should be applied to any native HTML element
64
+ * that has the purpose of acting as a widget navigatable within a toolbar.
65
+ */
66
+ declare class CdkToolbarWidget implements OnInit, OnDestroy {
67
+ /** A reference to the widget element. */
68
+ private readonly _elementRef;
69
+ /** The parent CdkToolbar. */
70
+ private readonly _cdkToolbar;
71
+ /** A unique identifier for the widget. */
72
+ private readonly _generatedId;
73
+ /** A unique identifier for the widget. */
74
+ protected id: Signal<string>;
75
+ /** The parent Toolbar UIPattern. */
76
+ protected parentToolbar: Signal<ToolbarPattern<any>>;
77
+ /** A reference to the widget element to be focused on navigation. */
78
+ element: Signal<any>;
79
+ /** Whether the widget is disabled. */
80
+ disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
81
+ readonly hardDisabled: Signal<boolean>;
82
+ pattern: ToolbarWidgetPattern;
83
+ ngOnInit(): void;
84
+ ngOnDestroy(): void;
85
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CdkToolbarWidget, never>;
86
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CdkToolbarWidget, "[cdkToolbarWidget]", ["cdkToolbarWidget"], { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
87
+ }
88
+
89
+ export { CdkToolbar, CdkToolbarWidget };
package/toolbar.d.d.ts ADDED
@@ -0,0 +1,136 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { SignalLike, KeyboardEventManager, PointerEventManager } from './pointer-event-manager.d.js';
3
+ import { ListItem, List, ListInputs } from './list.d.js';
4
+
5
+ /**
6
+ * Represents the properties exposed by a toolbar widget that need to be accessed by a radio group.
7
+ * This exists to avoid circular dependency errors between the toolbar and radio button.
8
+ */
9
+ type ToolbarWidgetLike = {
10
+ id: SignalLike<string>;
11
+ index: SignalLike<number>;
12
+ element: SignalLike<HTMLElement>;
13
+ disabled: SignalLike<boolean>;
14
+ searchTerm: SignalLike<any>;
15
+ value: SignalLike<any>;
16
+ };
17
+ /**
18
+ * Represents the properties exposed by a radio group that need to be accessed by a radio button.
19
+ * This exists to avoid circular dependency errors between the radio group and radio button.
20
+ */
21
+ interface RadioGroupLike<V> {
22
+ /** The list behavior for the radio group. */
23
+ listBehavior: List<RadioButtonPattern<V> | ToolbarWidgetLike, V>;
24
+ /** Whether the list is readonly */
25
+ readonly: SignalLike<boolean>;
26
+ /** Whether the radio group is disabled. */
27
+ disabled: SignalLike<boolean>;
28
+ }
29
+ /** Represents the required inputs for a radio button in a radio group. */
30
+ interface RadioButtonInputs<V> extends Omit<ListItem<V>, 'searchTerm' | 'index'> {
31
+ /** A reference to the parent radio group. */
32
+ group: SignalLike<RadioGroupLike<V> | undefined>;
33
+ }
34
+ /** Represents a radio button within a radio group. */
35
+ declare class RadioButtonPattern<V> {
36
+ readonly inputs: RadioButtonInputs<V>;
37
+ /** A unique identifier for the radio button. */
38
+ id: SignalLike<string>;
39
+ /** The value associated with the radio button. */
40
+ value: SignalLike<V>;
41
+ /** The position of the radio button within the group. */
42
+ index: SignalLike<number>;
43
+ /** Whether the radio button is currently the active one (focused). */
44
+ active: _angular_core.Signal<boolean>;
45
+ /** Whether the radio button is selected. */
46
+ selected: SignalLike<boolean>;
47
+ /** Whether the radio button is disabled. */
48
+ disabled: SignalLike<boolean>;
49
+ /** A reference to the parent radio group. */
50
+ group: SignalLike<RadioGroupLike<V> | undefined>;
51
+ /** The tabindex of the radio button. */
52
+ tabindex: _angular_core.Signal<0 | -1 | undefined>;
53
+ /** The HTML element associated with the radio button. */
54
+ element: SignalLike<HTMLElement>;
55
+ /** The search term for typeahead. */
56
+ readonly searchTerm: () => string;
57
+ constructor(inputs: RadioButtonInputs<V>);
58
+ }
59
+
60
+ /** Represents the required inputs for a toolbar. */
61
+ type ToolbarInputs<V> = Omit<ListInputs<ToolbarWidgetPattern | RadioButtonPattern<V>, V>, 'multi' | 'typeaheadDelay' | 'value' | 'selectionMode'>;
62
+ /** Controls the state of a toolbar. */
63
+ declare class ToolbarPattern<V> {
64
+ readonly inputs: ToolbarInputs<V>;
65
+ /** The list behavior for the toolbar. */
66
+ listBehavior: List<ToolbarWidgetPattern | RadioButtonPattern<V>, V>;
67
+ /** Whether the tablist is vertically or horizontally oriented. */
68
+ readonly orientation: SignalLike<'vertical' | 'horizontal'>;
69
+ /** Whether the toolbar is disabled. */
70
+ disabled: _angular_core.Signal<boolean>;
71
+ /** The tabindex of the toolbar (if using activedescendant). */
72
+ tabindex: _angular_core.Signal<0 | -1>;
73
+ /** The id of the current active widget (if using activedescendant). */
74
+ activedescendant: _angular_core.Signal<string | undefined>;
75
+ /** The key used to navigate to the previous widget. */
76
+ prevKey: _angular_core.Signal<"ArrowUp" | "ArrowRight" | "ArrowLeft">;
77
+ /** The key used to navigate to the next widget. */
78
+ nextKey: _angular_core.Signal<"ArrowRight" | "ArrowLeft" | "ArrowDown">;
79
+ /** The alternate key used to navigate to the previous widget */
80
+ altPrevKey: _angular_core.Signal<"ArrowUp" | "ArrowRight" | "ArrowLeft">;
81
+ /** The alternate key used to navigate to the next widget. */
82
+ altNextKey: _angular_core.Signal<"ArrowRight" | "ArrowLeft" | "ArrowDown">;
83
+ /** The keydown event manager for the toolbar. */
84
+ keydown: _angular_core.Signal<KeyboardEventManager<KeyboardEvent>>;
85
+ selectRadioButton(): void;
86
+ /** The pointerdown event manager for the toolbar. */
87
+ pointerdown: _angular_core.Signal<PointerEventManager<PointerEvent>>;
88
+ /** Navigates to the widget associated with the given pointer event. */
89
+ goto(event: PointerEvent): void;
90
+ /** Handles keydown events for the toolbar. */
91
+ onKeydown(event: KeyboardEvent): void;
92
+ /** Handles pointerdown events for the toolbar. */
93
+ onPointerdown(event: PointerEvent): void;
94
+ /** Finds the Toolbar Widget associated with a pointer event target. */
95
+ private _getItem;
96
+ constructor(inputs: ToolbarInputs<V>);
97
+ /**
98
+ * Sets the toolbar to its default initial state.
99
+ *
100
+ * Sets the active index to the selected widget if one exists and is focusable.
101
+ * Otherwise, sets the active index to the first focusable widget.
102
+ */
103
+ setDefaultState(): void;
104
+ /** Validates the state of the toolbar and returns a list of accessibility violations. */
105
+ validate(): string[];
106
+ }
107
+ /** Represents the required inputs for a toolbar widget in a toolbar. */
108
+ interface ToolbarWidgetInputs extends Omit<ListItem<any>, 'searchTerm' | 'value' | 'index'> {
109
+ /** A reference to the parent toolbar. */
110
+ parentToolbar: SignalLike<ToolbarPattern<null>>;
111
+ }
112
+ declare class ToolbarWidgetPattern {
113
+ readonly inputs: ToolbarWidgetInputs;
114
+ /** A unique identifier for the widget. */
115
+ id: SignalLike<string>;
116
+ /** The html element that should receive focus. */
117
+ readonly element: SignalLike<HTMLElement>;
118
+ /** Whether the widget is disabled. */
119
+ disabled: SignalLike<boolean>;
120
+ /** A reference to the parent toolbar. */
121
+ parentToolbar: SignalLike<ToolbarPattern<null> | undefined>;
122
+ /** The tabindex of the widgdet. */
123
+ tabindex: _angular_core.Signal<0 | -1>;
124
+ /** The text used by the typeahead search. */
125
+ readonly searchTerm: () => string;
126
+ /** The value associated with the widget. */
127
+ readonly value: () => any;
128
+ /** The position of the widget within the toolbar. */
129
+ index: _angular_core.Signal<number>;
130
+ /** Whether the widget is currently the active one (focused). */
131
+ active: _angular_core.Signal<boolean>;
132
+ constructor(inputs: ToolbarWidgetInputs);
133
+ }
134
+
135
+ export { RadioButtonPattern, ToolbarPattern, ToolbarWidgetPattern };
136
+ export type { RadioButtonInputs, ToolbarInputs, ToolbarWidgetInputs };
package/tree/index.d.ts CHANGED
@@ -162,8 +162,6 @@ interface HasElement {
162
162
  declare class CdkTree<V> {
163
163
  /** All CdkTreeItem instances within this tree. */
164
164
  private readonly _unorderedItems;
165
- /** All CdkGroup instances within this tree. */
166
- readonly unorderedGroups: _angular_core.WritableSignal<Set<CdkTreeItemGroup<V>>>;
167
165
  /** Orientation of the tree. */
168
166
  readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
169
167
  /** Whether multi-selection is allowed. */
@@ -194,8 +192,8 @@ declare class CdkTree<V> {
194
192
  private _hasFocused;
195
193
  constructor();
196
194
  onFocus(): void;
197
- register(child: CdkTreeItemGroup<V> | CdkTreeItem<V>): void;
198
- deregister(child: CdkTreeItemGroup<V> | CdkTreeItem<V>): void;
195
+ register(child: CdkTreeItem<V>): void;
196
+ unregister(child: CdkTreeItem<V>): void;
199
197
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CdkTree<any>, never>;
200
198
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CdkTree<any>, "[cdkTree]", ["cdkTree"], { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "multi": { "alias": "multi"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "focusMode": { "alias": "focusMode"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "skipDisabled": { "alias": "skipDisabled"; "required": false; "isSignal": true; }; "typeaheadDelay": { "alias": "typeaheadDelay"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "nav": { "alias": "nav"; "required": false; "isSignal": true; }; "currentType": { "alias": "currentType"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
201
199
  }
@@ -207,35 +205,33 @@ declare class CdkTreeItem<V> implements OnInit, OnDestroy, HasElement {
207
205
  private readonly _elementRef;
208
206
  /** A unique identifier for the tree item. */
209
207
  private readonly _id;
210
- /** The top level CdkTree. */
211
- private readonly _tree;
212
- /** The parent CdkTreeItem. */
213
- private readonly _treeItem;
214
- /** The parent CdkGroup, if any. */
215
- private readonly _parentGroup;
216
- /** The top level TreePattern. */
217
- private readonly _treePattern;
218
- /** The parent TreeItemPattern. */
219
- private readonly _parentPattern;
208
+ /** The owned tree item group. */
209
+ private readonly _group;
210
+ /** The id of the owned group. */
211
+ readonly ownsId: Signal<string | undefined>;
220
212
  /** The host native element. */
221
213
  readonly element: Signal<any>;
222
214
  /** The value of the tree item. */
223
215
  readonly value: _angular_core.InputSignal<V>;
216
+ /** The parent tree root or tree item group. */
217
+ readonly parent: _angular_core.InputSignal<CdkTreeItemGroup<V> | CdkTree<V>>;
224
218
  /** Whether the tree item is disabled. */
225
219
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
226
220
  /** Optional label for typeahead. Defaults to the element's textContent. */
227
221
  readonly label: _angular_core.InputSignal<string | undefined>;
228
222
  /** Search term for typeahead. */
229
223
  readonly searchTerm: Signal<any>;
230
- /** Manual group assignment. */
231
- readonly group: _angular_core.WritableSignal<CdkTreeItemGroup<V> | undefined>;
224
+ /** The tree root. */
225
+ readonly tree: Signal<CdkTree<V>>;
232
226
  /** The UI pattern for this item. */
233
- readonly pattern: TreeItemPattern<V>;
227
+ pattern: TreeItemPattern<V>;
234
228
  constructor();
235
229
  ngOnInit(): void;
236
230
  ngOnDestroy(): void;
231
+ register(group: CdkTreeItemGroup<V>): void;
232
+ unregister(): void;
237
233
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CdkTreeItem<any>, never>;
238
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CdkTreeItem<any>, "[cdkTreeItem]", ["cdkTreeItem"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
234
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CdkTreeItem<any>, "[cdkTreeItem]", ["cdkTreeItem"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "parent": { "alias": "parent"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
239
235
  }
240
236
  /**
241
237
  * Container that designates content as a group.
@@ -245,8 +241,6 @@ declare class CdkTreeItemGroup<V> implements OnInit, OnDestroy, HasElement {
245
241
  private readonly _elementRef;
246
242
  /** The DeferredContentAware host directive. */
247
243
  private readonly _deferredContentAware;
248
- /** The top level CdkTree. */
249
- private readonly _tree;
250
244
  /** All groupable items that are descendants of the group. */
251
245
  private readonly _unorderedItems;
252
246
  /** The host native element. */
@@ -257,15 +251,15 @@ declare class CdkTreeItemGroup<V> implements OnInit, OnDestroy, HasElement {
257
251
  readonly visible: _angular_core.WritableSignal<boolean>;
258
252
  /** Child items within this group. */
259
253
  readonly children: Signal<CdkTreeItem<V>[]>;
260
- /** Identifier for matching the group owner. */
261
- readonly value: _angular_core.InputSignal<V>;
254
+ /** Tree item that owns the group. */
255
+ readonly ownedBy: _angular_core.InputSignal<CdkTreeItem<V>>;
262
256
  constructor();
263
257
  ngOnInit(): void;
264
258
  ngOnDestroy(): void;
265
259
  register(child: CdkTreeItem<V>): void;
266
- deregister(child: CdkTreeItem<V>): void;
260
+ unregister(child: CdkTreeItem<V>): void;
267
261
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CdkTreeItemGroup<any>, never>;
268
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CdkTreeItemGroup<any>, "[cdkTreeItemGroup]", ["cdkTreeItemGroup"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.DeferredContentAware; inputs: { "preserveContent": "preserveContent"; }; outputs: {}; }]>;
262
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CdkTreeItemGroup<any>, "[cdkTreeItemGroup]", ["cdkTreeItemGroup"], { "ownedBy": { "alias": "ownedBy"; "required": true; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.DeferredContentAware; inputs: { "preserveContent": "preserveContent"; }; outputs: {}; }]>;
269
263
  }
270
264
  /**
271
265
  * A structural directive that marks the `ng-template` to be used as the content
@@ -1,5 +1,6 @@
1
1
  export { ListboxInputs, ListboxPattern, OptionInputs, OptionPattern } from '../listbox.d.js';
2
- export { RadioButtonInputs, RadioButtonPattern, RadioGroupInputs, RadioGroupPattern } from '../radio-group.d.js';
2
+ export { RadioGroupInputs, RadioGroupPattern, ToolbarLike } from '../radio-group.d.js';
3
+ export { RadioButtonInputs, RadioButtonPattern, ToolbarInputs, ToolbarPattern, ToolbarWidgetInputs, ToolbarWidgetPattern } from '../toolbar.d.js';
3
4
  export { SignalLike, WritableSignalLike, convertGetterSetterToWritableSignalLike } from '../pointer-event-manager.d.js';
4
5
  export { TabInputs, TabListInputs, TabListPattern, TabPanelInputs, TabPanelPattern, TabPattern } from '../tabs.d.js';
5
6
  export { AccordionGroupInputs, AccordionGroupPattern, AccordionPanelInputs, AccordionPanelPattern, AccordionTriggerInputs, AccordionTriggerPattern } from '../accordion.d.js';
@@ -1 +0,0 @@
1
- {"version":3,"file":"radio-button.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-46c76129e412/bin/src/cdk-experimental/ui-patterns/radio-group/radio-group.ts","../../../../../darwin_arm64-fastbuild-ST-46c76129e412/bin/src/cdk-experimental/ui-patterns/radio-group/radio-button.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 {computed} from '@angular/core';\nimport {KeyboardEventManager, PointerEventManager} from '../behaviors/event-manager';\nimport {List, ListInputs} from '../behaviors/list/list';\nimport {SignalLike} from '../behaviors/signal-like/signal-like';\nimport {RadioButtonPattern} from './radio-button';\n\n/** Represents the required inputs for a radio group. */\nexport type RadioGroupInputs<V> = Omit<\n ListInputs<RadioButtonPattern<V>, V>,\n 'multi' | 'selectionMode' | 'wrap' | 'typeaheadDelay'\n> & {\n /** Whether the radio group is disabled. */\n disabled: SignalLike<boolean>;\n\n /** Whether the radio group is readonly. */\n readonly: SignalLike<boolean>;\n};\n\n/** Controls the state of a radio group. */\nexport class RadioGroupPattern<V> {\n /** The list behavior for the radio group. */\n readonly listBehavior: List<RadioButtonPattern<V>, V>;\n\n /** Whether the radio group is vertically or horizontally oriented. */\n orientation: SignalLike<'vertical' | 'horizontal'>;\n\n /** Whether the radio group is disabled. */\n disabled = computed(() => this.inputs.disabled() || this.listBehavior.disabled());\n\n /** The currently selected radio button. */\n selectedItem = computed(() => this.listBehavior.selectionBehavior.selectedItems()[0]);\n\n /** Whether the radio group is readonly. */\n readonly = computed(() => this.selectedItem()?.disabled() || this.inputs.readonly());\n\n /** The tabindex of the radio group (if using activedescendant). */\n tabindex = computed(() => this.listBehavior.tabindex());\n\n /** The id of the current active radio button (if using activedescendant). */\n activedescendant = computed(() => this.listBehavior.activedescendant());\n\n /** The key used to navigate to the previous radio button. */\n 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 radio button. */\n 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 radio group. */\n keydown = computed(() => {\n const manager = new KeyboardEventManager();\n\n // Readonly mode allows navigation but not selection changes.\n if (this.readonly()) {\n return manager\n .on(this.prevKey, () => this.listBehavior.prev())\n .on(this.nextKey, () => this.listBehavior.next())\n .on('Home', () => this.listBehavior.first())\n .on('End', () => this.listBehavior.last());\n }\n\n // Default behavior: navigate and select on arrow keys, home, end.\n // Space/Enter also select the focused item.\n return manager\n .on(this.prevKey, () => this.listBehavior.prev({selectOne: true}))\n .on(this.nextKey, () => this.listBehavior.next({selectOne: true}))\n .on('Home', () => this.listBehavior.first({selectOne: true}))\n .on('End', () => this.listBehavior.last({selectOne: true}))\n .on(' ', () => this.listBehavior.selectOne())\n .on('Enter', () => this.listBehavior.selectOne());\n });\n\n /** The pointerdown event manager for the radio group. */\n pointerdown = computed(() => {\n const manager = new PointerEventManager();\n\n if (this.readonly()) {\n // Navigate focus only in readonly mode.\n return manager.on(e => this.listBehavior.goto(this._getItem(e)!));\n }\n\n // Default behavior: navigate and select on click.\n return manager.on(e => this.listBehavior.goto(this._getItem(e)!, {selectOne: true}));\n });\n\n constructor(readonly inputs: RadioGroupInputs<V>) {\n this.orientation = inputs.orientation;\n\n this.listBehavior = new List({\n ...inputs,\n wrap: () => false,\n multi: () => false,\n selectionMode: () => 'follow',\n typeaheadDelay: () => 0, // Radio groups do not support typeahead.\n });\n }\n\n /** Handles keydown events for the radio group. */\n onKeydown(event: KeyboardEvent) {\n if (!this.disabled()) {\n this.keydown().handle(event);\n }\n }\n\n /** Handles pointerdown events for the radio group. */\n onPointerdown(event: PointerEvent) {\n if (!this.disabled()) {\n this.pointerdown().handle(event);\n }\n }\n\n /**\n * Sets the radio group to its default initial state.\n *\n * Sets the active index to the selected radio button if one exists and is focusable.\n * Otherwise, sets the active index to the first focusable radio button.\n */\n setDefaultState() {\n let firstItem: RadioButtonPattern<V> | null = null;\n\n for (const item of this.inputs.items()) {\n if (this.listBehavior.isFocusable(item)) {\n if (!firstItem) {\n firstItem = item;\n }\n if (item.selected()) {\n this.inputs.activeItem.set(item);\n return;\n }\n }\n }\n\n if (firstItem) {\n this.inputs.activeItem.set(firstItem);\n }\n }\n\n /** Validates the state of the radio group and returns a list of accessibility violations. */\n validate(): string[] {\n const violations: string[] = [];\n\n if (this.selectedItem()?.disabled() && this.inputs.skipDisabled()) {\n violations.push(\n \"Accessibility Violation: The selected radio button is disabled while 'skipDisabled' is true, making the selection unreachable via keyboard.\",\n );\n }\n\n return violations;\n }\n\n /** Finds the RadioButtonPattern associated with a pointer event target. */\n private _getItem(e: PointerEvent): RadioButtonPattern<V> | undefined {\n if (!(e.target instanceof HTMLElement)) {\n return undefined;\n }\n\n // Assumes the target or its ancestor has role=\"radio\"\n const element = e.target.closest('[role=\"radio\"]');\n return this.inputs.items().find(i => i.element() === element);\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 {computed} from '@angular/core';\nimport {SignalLike} from '../behaviors/signal-like/signal-like';\nimport {List, ListItem} from '../behaviors/list/list';\n\n/**\n * Represents the properties exposed by a radio group that need to be accessed by a radio button.\n * This exists to avoid circular dependency errors between the radio group and radio button.\n */\ninterface RadioGroupLike<V> {\n /** The list behavior for the radio group. */\n listBehavior: List<RadioButtonPattern<V>, V>;\n}\n\n/** Represents the required inputs for a radio button in a radio group. */\nexport interface RadioButtonInputs<V> extends Omit<ListItem<V>, 'searchTerm' | 'index'> {\n /** A reference to the parent radio group. */\n group: SignalLike<RadioGroupLike<V> | undefined>;\n}\n\n/** Represents a radio button within a radio group. */\nexport class RadioButtonPattern<V> {\n /** A unique identifier for the radio button. */\n id: SignalLike<string>;\n\n /** The value associated with the radio button. */\n value: SignalLike<V>;\n\n /** The position of the radio button within the group. */\n index = computed(() => this.group()?.listBehavior.inputs.items().indexOf(this) ?? -1);\n\n /** Whether the radio button is currently the active one (focused). */\n active = computed(() => this.group()?.listBehavior.inputs.activeItem() === this);\n\n /** Whether the radio button is selected. */\n selected: SignalLike<boolean> = computed(\n () => !!this.group()?.listBehavior.inputs.value().includes(this.value()),\n );\n\n /** Whether the radio button is disabled. */\n disabled: SignalLike<boolean>;\n\n /** A reference to the parent radio group. */\n group: SignalLike<RadioGroupLike<V> | undefined>;\n\n /** The tabindex of the radio button. */\n tabindex = computed(() => this.group()?.listBehavior.getItemTabindex(this));\n\n /** The HTML element associated with the radio button. */\n element: SignalLike<HTMLElement>;\n\n /** The search term for typeahead. */\n readonly searchTerm = () => ''; // Radio groups do not support typeahead.\n\n constructor(readonly inputs: RadioButtonInputs<V>) {\n this.id = inputs.id;\n this.value = inputs.value;\n this.group = inputs.group;\n this.element = inputs.element;\n this.disabled = inputs.disabled;\n }\n}\n"],"names":[],"mappings":"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"}