@angular/aria 21.0.0-next.8 → 21.0.0-rc.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/_adev_assets/aria-accordion.json +373 -0
  2. package/_adev_assets/aria-combobox.json +383 -0
  3. package/_adev_assets/aria-grid.json +578 -0
  4. package/_adev_assets/aria-listbox.json +511 -0
  5. package/_adev_assets/aria-menu.json +752 -0
  6. package/_adev_assets/aria-radio-group.json +389 -0
  7. package/_adev_assets/aria-tabs.json +987 -0
  8. package/_adev_assets/aria-toolbar.json +717 -0
  9. package/_adev_assets/aria-tree.json +1067 -0
  10. package/fesm2022/_widget-chunk.mjs +827 -0
  11. package/fesm2022/_widget-chunk.mjs.map +1 -0
  12. package/fesm2022/accordion.mjs +371 -172
  13. package/fesm2022/accordion.mjs.map +1 -1
  14. package/fesm2022/aria.mjs +1 -2
  15. package/fesm2022/aria.mjs.map +1 -1
  16. package/fesm2022/combobox.mjs +304 -114
  17. package/fesm2022/combobox.mjs.map +1 -1
  18. package/fesm2022/deferred-content.mjs +89 -49
  19. package/fesm2022/deferred-content.mjs.map +1 -1
  20. package/fesm2022/grid.mjs +517 -0
  21. package/fesm2022/grid.mjs.map +1 -0
  22. package/fesm2022/listbox.mjs +384 -183
  23. package/fesm2022/listbox.mjs.map +1 -1
  24. package/fesm2022/menu.mjs +535 -0
  25. package/fesm2022/menu.mjs.map +1 -0
  26. package/fesm2022/private.mjs +2347 -0
  27. package/fesm2022/private.mjs.map +1 -0
  28. package/fesm2022/radio-group.mjs +320 -179
  29. package/fesm2022/radio-group.mjs.map +1 -1
  30. package/fesm2022/tabs.mjs +483 -274
  31. package/fesm2022/tabs.mjs.map +1 -1
  32. package/fesm2022/toolbar.mjs +330 -199
  33. package/fesm2022/toolbar.mjs.map +1 -1
  34. package/fesm2022/tree.mjs +511 -309
  35. package/fesm2022/tree.mjs.map +1 -1
  36. package/package.json +14 -6
  37. package/types/_grid-chunk.d.ts +546 -0
  38. package/types/accordion.d.ts +4 -4
  39. package/types/combobox.d.ts +18 -5
  40. package/types/deferred-content.d.ts +1 -0
  41. package/types/grid.d.ts +111 -0
  42. package/types/listbox.d.ts +6 -3
  43. package/types/menu.d.ts +158 -0
  44. package/types/{ui-patterns.d.ts → private.d.ts} +333 -133
  45. package/types/radio-group.d.ts +5 -3
  46. package/types/tabs.d.ts +4 -4
  47. package/types/toolbar.d.ts +4 -4
  48. package/types/tree.d.ts +17 -32
  49. package/fesm2022/ui-patterns.mjs +0 -2504
  50. package/fesm2022/ui-patterns.mjs.map +0 -1
@@ -1,218 +1,349 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, ElementRef, signal, computed, input, booleanAttribute, afterRenderEffect, Directive } from '@angular/core';
3
- import { ToolbarPattern, ToolbarWidgetPattern, ToolbarWidgetGroupPattern } from '@angular/aria/ui-patterns';
3
+ import { ToolbarPattern, ToolbarWidgetPattern, ToolbarWidgetGroupPattern } from '@angular/aria/private';
4
4
  import { Directionality } from '@angular/cdk/bidi';
5
5
  import { _IdGenerator } from '@angular/cdk/a11y';
6
6
 
7
- /**
8
- * Sort directives by their document order.
9
- */
10
7
  function sortDirectives(a, b) {
11
- return (a.element().compareDocumentPosition(b.element()) & Node.DOCUMENT_POSITION_PRECEDING) > 0
12
- ? 1
13
- : -1;
8
+ return (a.element().compareDocumentPosition(b.element()) & Node.DOCUMENT_POSITION_PRECEDING) > 0 ? 1 : -1;
14
9
  }
15
- /**
16
- * A toolbar widget container.
17
- *
18
- * Widgets such as radio groups or buttons are nested within a toolbar to allow for a single
19
- * place of reference for focus and navigation. The Toolbar is meant to be used in conjunction
20
- * with ToolbarWidget and RadioGroup as follows:
21
- *
22
- * ```html
23
- * <div ngToolbar>
24
- * <button ngToolbarWidget>Button</button>
25
- * <div ngRadioGroup>
26
- * <label ngRadioButton value="1">Option 1</label>
27
- * <label ngRadioButton value="2">Option 2</label>
28
- * <label ngRadioButton value="3">Option 3</label>
29
- * </div>
30
- * </div>
31
- * ```
32
- */
33
10
  class Toolbar {
34
- /** A reference to the toolbar element. */
35
- _elementRef = inject(ElementRef);
36
- /** The TabList nested inside of the container. */
37
- _widgets = signal(new Set(), ...(ngDevMode ? [{ debugName: "_widgets" }] : []));
38
- /** A signal wrapper for directionality. */
39
- textDirection = inject(Directionality).valueSignal;
40
- /** Sorted UIPatterns of the child widgets */
41
- items = computed(() => [...this._widgets()].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
- element: () => this._elementRef.nativeElement,
56
- getItem: e => this._getItem(e),
57
- });
58
- /** Whether the toolbar has received focus yet. */
59
- _hasFocused = signal(false, ...(ngDevMode ? [{ debugName: "_hasFocused" }] : []));
60
- constructor() {
61
- afterRenderEffect(() => {
62
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
63
- const violations = this.pattern.validate();
64
- for (const violation of violations) {
65
- console.error(violation);
66
- }
67
- }
68
- });
69
- afterRenderEffect(() => {
70
- if (!this._hasFocused()) {
71
- this.pattern.setDefaultState();
72
- }
73
- });
74
- }
75
- onFocus() {
76
- this._hasFocused.set(true);
77
- }
78
- register(widget) {
79
- const widgets = this._widgets();
80
- if (!widgets.has(widget)) {
81
- widgets.add(widget);
82
- this._widgets.set(new Set(widgets));
83
- }
84
- }
85
- unregister(widget) {
86
- const widgets = this._widgets();
87
- if (widgets.delete(widget)) {
88
- this._widgets.set(new Set(widgets));
11
+ _elementRef = inject(ElementRef);
12
+ _widgets = signal(new Set(), ...(ngDevMode ? [{
13
+ debugName: "_widgets"
14
+ }] : []));
15
+ textDirection = inject(Directionality).valueSignal;
16
+ items = computed(() => [...this._widgets()].sort(sortDirectives).map(widget => widget._pattern), ...(ngDevMode ? [{
17
+ debugName: "items"
18
+ }] : []));
19
+ orientation = input('horizontal', ...(ngDevMode ? [{
20
+ debugName: "orientation"
21
+ }] : []));
22
+ skipDisabled = input(false, ...(ngDevMode ? [{
23
+ debugName: "skipDisabled",
24
+ transform: booleanAttribute
25
+ }] : [{
26
+ transform: booleanAttribute
27
+ }]));
28
+ disabled = input(false, ...(ngDevMode ? [{
29
+ debugName: "disabled",
30
+ transform: booleanAttribute
31
+ }] : [{
32
+ transform: booleanAttribute
33
+ }]));
34
+ wrap = input(true, ...(ngDevMode ? [{
35
+ debugName: "wrap",
36
+ transform: booleanAttribute
37
+ }] : [{
38
+ transform: booleanAttribute
39
+ }]));
40
+ _pattern = new ToolbarPattern({
41
+ ...this,
42
+ activeItem: signal(undefined),
43
+ textDirection: this.textDirection,
44
+ element: () => this._elementRef.nativeElement,
45
+ getItem: e => this._getItem(e)
46
+ });
47
+ _hasFocused = signal(false, ...(ngDevMode ? [{
48
+ debugName: "_hasFocused"
49
+ }] : []));
50
+ constructor() {
51
+ afterRenderEffect(() => {
52
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
53
+ const violations = this._pattern.validate();
54
+ for (const violation of violations) {
55
+ console.error(violation);
89
56
  }
57
+ }
58
+ });
59
+ afterRenderEffect(() => {
60
+ if (!this._hasFocused()) {
61
+ this._pattern.setDefaultState();
62
+ }
63
+ });
64
+ }
65
+ onFocus() {
66
+ this._hasFocused.set(true);
67
+ }
68
+ register(widget) {
69
+ const widgets = this._widgets();
70
+ if (!widgets.has(widget)) {
71
+ widgets.add(widget);
72
+ this._widgets.set(new Set(widgets));
90
73
  }
91
- /** Finds the toolbar item associated with a given element. */
92
- _getItem(element) {
93
- const widgetTarget = element.closest('.ng-toolbar-widget');
94
- const groupTarget = element.closest('.ng-toolbar-widget-group');
95
- return this.items().find(widget => widget.element() === widgetTarget || widget.element() === groupTarget);
74
+ }
75
+ unregister(widget) {
76
+ const widgets = this._widgets();
77
+ if (widgets.delete(widget)) {
78
+ this._widgets.set(new Set(widgets));
96
79
  }
97
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0-next.2", ngImport: i0, type: Toolbar, deps: [], target: i0.ɵɵFactoryTarget.Directive });
98
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0-next.2", type: Toolbar, isStandalone: true, selector: "[ngToolbar]", 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()" }, classAttribute: "ng-toolbar" }, exportAs: ["ngToolbar"], ngImport: i0 });
80
+ }
81
+ _getItem(element) {
82
+ const widgetTarget = element.closest('.ng-toolbar-widget');
83
+ const groupTarget = element.closest('.ng-toolbar-widget-group');
84
+ return this.items().find(widget => widget.element() === widgetTarget || widget.element() === groupTarget);
85
+ }
86
+ static ɵfac = i0.ɵɵngDeclareFactory({
87
+ minVersion: "12.0.0",
88
+ version: "20.2.0-next.2",
89
+ ngImport: i0,
90
+ type: Toolbar,
91
+ deps: [],
92
+ target: i0.ɵɵFactoryTarget.Directive
93
+ });
94
+ static ɵdir = i0.ɵɵngDeclareDirective({
95
+ minVersion: "17.1.0",
96
+ version: "20.2.0-next.2",
97
+ type: Toolbar,
98
+ isStandalone: true,
99
+ selector: "[ngToolbar]",
100
+ inputs: {
101
+ orientation: {
102
+ classPropertyName: "orientation",
103
+ publicName: "orientation",
104
+ isSignal: true,
105
+ isRequired: false,
106
+ transformFunction: null
107
+ },
108
+ skipDisabled: {
109
+ classPropertyName: "skipDisabled",
110
+ publicName: "skipDisabled",
111
+ isSignal: true,
112
+ isRequired: false,
113
+ transformFunction: null
114
+ },
115
+ disabled: {
116
+ classPropertyName: "disabled",
117
+ publicName: "disabled",
118
+ isSignal: true,
119
+ isRequired: false,
120
+ transformFunction: null
121
+ },
122
+ wrap: {
123
+ classPropertyName: "wrap",
124
+ publicName: "wrap",
125
+ isSignal: true,
126
+ isRequired: false,
127
+ transformFunction: null
128
+ }
129
+ },
130
+ host: {
131
+ attributes: {
132
+ "role": "toolbar"
133
+ },
134
+ listeners: {
135
+ "keydown": "_pattern.onKeydown($event)",
136
+ "pointerdown": "_pattern.onPointerdown($event)",
137
+ "focusin": "onFocus()"
138
+ },
139
+ properties: {
140
+ "attr.tabindex": "_pattern.tabindex()",
141
+ "attr.aria-disabled": "_pattern.disabled()",
142
+ "attr.aria-orientation": "_pattern.orientation()"
143
+ },
144
+ classAttribute: "ng-toolbar"
145
+ },
146
+ exportAs: ["ngToolbar"],
147
+ ngImport: i0
148
+ });
99
149
  }
100
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0-next.2", ngImport: i0, type: Toolbar, decorators: [{
101
- type: Directive,
102
- args: [{
103
- selector: '[ngToolbar]',
104
- exportAs: 'ngToolbar',
105
- host: {
106
- 'role': 'toolbar',
107
- 'class': 'ng-toolbar',
108
- '[attr.tabindex]': 'pattern.tabindex()',
109
- '[attr.aria-disabled]': 'pattern.disabled()',
110
- '[attr.aria-orientation]': 'pattern.orientation()',
111
- '(keydown)': 'pattern.onKeydown($event)',
112
- '(pointerdown)': 'pattern.onPointerdown($event)',
113
- '(focusin)': 'onFocus()',
114
- },
115
- }]
116
- }], ctorParameters: () => [] });
117
- /**
118
- * A widget within a toolbar.
119
- *
120
- * A widget is anything that is within a toolbar. It should be applied to any native HTML element
121
- * that has the purpose of acting as a widget navigatable within a toolbar.
122
- */
150
+ i0.ɵɵngDeclareClassMetadata({
151
+ minVersion: "12.0.0",
152
+ version: "20.2.0-next.2",
153
+ ngImport: i0,
154
+ type: Toolbar,
155
+ decorators: [{
156
+ type: Directive,
157
+ args: [{
158
+ selector: '[ngToolbar]',
159
+ exportAs: 'ngToolbar',
160
+ host: {
161
+ 'role': 'toolbar',
162
+ 'class': 'ng-toolbar',
163
+ '[attr.tabindex]': '_pattern.tabindex()',
164
+ '[attr.aria-disabled]': '_pattern.disabled()',
165
+ '[attr.aria-orientation]': '_pattern.orientation()',
166
+ '(keydown)': '_pattern.onKeydown($event)',
167
+ '(pointerdown)': '_pattern.onPointerdown($event)',
168
+ '(focusin)': 'onFocus()'
169
+ }
170
+ }]
171
+ }],
172
+ ctorParameters: () => []
173
+ });
123
174
  class ToolbarWidget {
124
- /** A reference to the widget element. */
125
- _elementRef = inject(ElementRef);
126
- /** The parent Toolbar. */
127
- _toolbar = inject(Toolbar);
128
- /** A unique identifier for the widget. */
129
- _generatedId = inject(_IdGenerator).getId('ng-toolbar-widget-');
130
- /** A unique identifier for the widget. */
131
- id = computed(() => this._generatedId, ...(ngDevMode ? [{ debugName: "id" }] : []));
132
- /** The parent Toolbar UIPattern. */
133
- toolbar = computed(() => this._toolbar.pattern, ...(ngDevMode ? [{ debugName: "toolbar" }] : []));
134
- /** A reference to the widget element to be focused on navigation. */
135
- element = computed(() => this._elementRef.nativeElement, ...(ngDevMode ? [{ debugName: "element" }] : []));
136
- /** Whether the widget is disabled. */
137
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
138
- /** Whether the widget is 'hard' disabled, which is different from `aria-disabled`. A hard disabled widget cannot receive focus. */
139
- hardDisabled = computed(() => this.pattern.disabled() && this._toolbar.skipDisabled(), ...(ngDevMode ? [{ debugName: "hardDisabled" }] : []));
140
- /** The ToolbarWidget UIPattern. */
141
- pattern = new ToolbarWidgetPattern({
142
- ...this,
143
- id: this.id,
144
- element: this.element,
145
- disabled: computed(() => this._toolbar.disabled() || this.disabled()),
146
- });
147
- ngOnInit() {
148
- this._toolbar.register(this);
149
- }
150
- ngOnDestroy() {
151
- this._toolbar.unregister(this);
152
- }
153
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0-next.2", ngImport: i0, type: ToolbarWidget, deps: [], target: i0.ɵɵFactoryTarget.Directive });
154
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0-next.2", type: ToolbarWidget, isStandalone: true, selector: "[ngToolbarWidget]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-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: "ng-toolbar-widget" }, exportAs: ["ngToolbarWidget"], ngImport: i0 });
175
+ _elementRef = inject(ElementRef);
176
+ _toolbar = inject(Toolbar);
177
+ _generatedId = inject(_IdGenerator).getId('ng-toolbar-widget-');
178
+ id = computed(() => this._generatedId, ...(ngDevMode ? [{
179
+ debugName: "id"
180
+ }] : []));
181
+ toolbar = computed(() => this._toolbar._pattern, ...(ngDevMode ? [{
182
+ debugName: "toolbar"
183
+ }] : []));
184
+ element = computed(() => this._elementRef.nativeElement, ...(ngDevMode ? [{
185
+ debugName: "element"
186
+ }] : []));
187
+ disabled = input(false, ...(ngDevMode ? [{
188
+ debugName: "disabled",
189
+ transform: booleanAttribute
190
+ }] : [{
191
+ transform: booleanAttribute
192
+ }]));
193
+ hardDisabled = computed(() => this._pattern.disabled() && this._toolbar.skipDisabled(), ...(ngDevMode ? [{
194
+ debugName: "hardDisabled"
195
+ }] : []));
196
+ _pattern = new ToolbarWidgetPattern({
197
+ ...this,
198
+ id: this.id,
199
+ element: this.element,
200
+ disabled: computed(() => this._toolbar.disabled() || this.disabled())
201
+ });
202
+ ngOnInit() {
203
+ this._toolbar.register(this);
204
+ }
205
+ ngOnDestroy() {
206
+ this._toolbar.unregister(this);
207
+ }
208
+ static ɵfac = i0.ɵɵngDeclareFactory({
209
+ minVersion: "12.0.0",
210
+ version: "20.2.0-next.2",
211
+ ngImport: i0,
212
+ type: ToolbarWidget,
213
+ deps: [],
214
+ target: i0.ɵɵFactoryTarget.Directive
215
+ });
216
+ static ɵdir = i0.ɵɵngDeclareDirective({
217
+ minVersion: "17.1.0",
218
+ version: "20.2.0-next.2",
219
+ type: ToolbarWidget,
220
+ isStandalone: true,
221
+ selector: "[ngToolbarWidget]",
222
+ inputs: {
223
+ disabled: {
224
+ classPropertyName: "disabled",
225
+ publicName: "disabled",
226
+ isSignal: true,
227
+ isRequired: false,
228
+ transformFunction: null
229
+ }
230
+ },
231
+ host: {
232
+ properties: {
233
+ "attr.data-active": "_pattern.active()",
234
+ "attr.tabindex": "_pattern.tabindex()",
235
+ "attr.inert": "hardDisabled() ? true : null",
236
+ "attr.disabled": "hardDisabled() ? true : null",
237
+ "attr.aria-disabled": "_pattern.disabled()",
238
+ "id": "_pattern.id()"
239
+ },
240
+ classAttribute: "ng-toolbar-widget"
241
+ },
242
+ exportAs: ["ngToolbarWidget"],
243
+ ngImport: i0
244
+ });
155
245
  }
156
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0-next.2", ngImport: i0, type: ToolbarWidget, decorators: [{
157
- type: Directive,
158
- args: [{
159
- selector: '[ngToolbarWidget]',
160
- exportAs: 'ngToolbarWidget',
161
- host: {
162
- 'class': 'ng-toolbar-widget',
163
- '[attr.data-active]': 'pattern.active()',
164
- '[attr.tabindex]': 'pattern.tabindex()',
165
- '[attr.inert]': 'hardDisabled() ? true : null',
166
- '[attr.disabled]': 'hardDisabled() ? true : null',
167
- '[attr.aria-disabled]': 'pattern.disabled()',
168
- '[id]': 'pattern.id()',
169
- },
170
- }]
171
- }] });
172
- /**
173
- * A directive that groups toolbar widgets, used for more complex widgets like radio groups that
174
- * have their own internal navigation.
175
- */
246
+ i0.ɵɵngDeclareClassMetadata({
247
+ minVersion: "12.0.0",
248
+ version: "20.2.0-next.2",
249
+ ngImport: i0,
250
+ type: ToolbarWidget,
251
+ decorators: [{
252
+ type: Directive,
253
+ args: [{
254
+ selector: '[ngToolbarWidget]',
255
+ exportAs: 'ngToolbarWidget',
256
+ host: {
257
+ 'class': 'ng-toolbar-widget',
258
+ '[attr.data-active]': '_pattern.active()',
259
+ '[attr.tabindex]': '_pattern.tabindex()',
260
+ '[attr.inert]': 'hardDisabled() ? true : null',
261
+ '[attr.disabled]': 'hardDisabled() ? true : null',
262
+ '[attr.aria-disabled]': '_pattern.disabled()',
263
+ '[id]': '_pattern.id()'
264
+ }
265
+ }]
266
+ }]
267
+ });
176
268
  class ToolbarWidgetGroup {
177
- /** A reference to the widget element. */
178
- _elementRef = inject(ElementRef);
179
- /** The parent Toolbar. */
180
- _toolbar = inject(Toolbar, { optional: true });
181
- /** A unique identifier for the widget. */
182
- _generatedId = inject(_IdGenerator).getId('ng-toolbar-widget-group-');
183
- /** A unique identifier for the widget. */
184
- id = computed(() => this._generatedId, ...(ngDevMode ? [{ debugName: "id" }] : []));
185
- /** The parent Toolbar UIPattern. */
186
- toolbar = computed(() => this._toolbar?.pattern, ...(ngDevMode ? [{ debugName: "toolbar" }] : []));
187
- /** A reference to the widget element to be focused on navigation. */
188
- element = computed(() => this._elementRef.nativeElement, ...(ngDevMode ? [{ debugName: "element" }] : []));
189
- /** Whether the widget group is disabled. */
190
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
191
- /** The controls that can be performed on the widget group. */
192
- controls = signal(undefined, ...(ngDevMode ? [{ debugName: "controls" }] : []));
193
- /** The ToolbarWidgetGroup UIPattern. */
194
- pattern = new ToolbarWidgetGroupPattern({
195
- ...this,
196
- id: this.id,
197
- element: this.element,
198
- });
199
- ngOnInit() {
200
- this._toolbar?.register(this);
201
- }
202
- ngOnDestroy() {
203
- this._toolbar?.unregister(this);
204
- }
205
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0-next.2", ngImport: i0, type: ToolbarWidgetGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
206
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0-next.2", type: ToolbarWidgetGroup, isStandalone: true, inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.ng-toolbar-widget-group": "!!toolbar()" } }, ngImport: i0 });
269
+ _elementRef = inject(ElementRef);
270
+ _toolbar = inject(Toolbar, {
271
+ optional: true
272
+ });
273
+ _generatedId = inject(_IdGenerator).getId('ng-toolbar-widget-group-');
274
+ id = computed(() => this._generatedId, ...(ngDevMode ? [{
275
+ debugName: "id"
276
+ }] : []));
277
+ toolbar = computed(() => this._toolbar?._pattern, ...(ngDevMode ? [{
278
+ debugName: "toolbar"
279
+ }] : []));
280
+ element = computed(() => this._elementRef.nativeElement, ...(ngDevMode ? [{
281
+ debugName: "element"
282
+ }] : []));
283
+ disabled = input(false, ...(ngDevMode ? [{
284
+ debugName: "disabled",
285
+ transform: booleanAttribute
286
+ }] : [{
287
+ transform: booleanAttribute
288
+ }]));
289
+ controls = signal(undefined, ...(ngDevMode ? [{
290
+ debugName: "controls"
291
+ }] : []));
292
+ _pattern = new ToolbarWidgetGroupPattern({
293
+ ...this,
294
+ id: this.id,
295
+ element: this.element
296
+ });
297
+ ngOnInit() {
298
+ this._toolbar?.register(this);
299
+ }
300
+ ngOnDestroy() {
301
+ this._toolbar?.unregister(this);
302
+ }
303
+ static ɵfac = i0.ɵɵngDeclareFactory({
304
+ minVersion: "12.0.0",
305
+ version: "20.2.0-next.2",
306
+ ngImport: i0,
307
+ type: ToolbarWidgetGroup,
308
+ deps: [],
309
+ target: i0.ɵɵFactoryTarget.Directive
310
+ });
311
+ static ɵdir = i0.ɵɵngDeclareDirective({
312
+ minVersion: "17.1.0",
313
+ version: "20.2.0-next.2",
314
+ type: ToolbarWidgetGroup,
315
+ isStandalone: true,
316
+ inputs: {
317
+ disabled: {
318
+ classPropertyName: "disabled",
319
+ publicName: "disabled",
320
+ isSignal: true,
321
+ isRequired: false,
322
+ transformFunction: null
323
+ }
324
+ },
325
+ host: {
326
+ properties: {
327
+ "class.ng-toolbar-widget-group": "!!toolbar()"
328
+ }
329
+ },
330
+ ngImport: i0
331
+ });
207
332
  }
208
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0-next.2", ngImport: i0, type: ToolbarWidgetGroup, decorators: [{
209
- type: Directive,
210
- args: [{
211
- host: {
212
- '[class.ng-toolbar-widget-group]': '!!toolbar()',
213
- },
214
- }]
215
- }] });
333
+ i0.ɵɵngDeclareClassMetadata({
334
+ minVersion: "12.0.0",
335
+ version: "20.2.0-next.2",
336
+ ngImport: i0,
337
+ type: ToolbarWidgetGroup,
338
+ decorators: [{
339
+ type: Directive,
340
+ args: [{
341
+ host: {
342
+ '[class.ng-toolbar-widget-group]': '!!toolbar()'
343
+ }
344
+ }]
345
+ }]
346
+ });
216
347
 
217
348
  export { Toolbar, ToolbarWidget, ToolbarWidgetGroup };
218
349
  //# sourceMappingURL=toolbar.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/aria/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 {\n ToolbarPattern,\n ToolbarWidgetPattern,\n ToolbarWidgetGroupPattern,\n ToolbarWidgetGroupControls,\n} from '@angular/aria/ui-patterns';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {_IdGenerator} from '@angular/cdk/a11y';\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 Toolbar is meant to be used in conjunction\n * with ToolbarWidget and RadioGroup as follows:\n *\n * ```html\n * <div ngToolbar>\n * <button ngToolbarWidget>Button</button>\n * <div ngRadioGroup>\n * <label ngRadioButton value=\"1\">Option 1</label>\n * <label ngRadioButton value=\"2\">Option 2</label>\n * <label ngRadioButton value=\"3\">Option 3</label>\n * </div>\n * </div>\n * ```\n */\n@Directive({\n selector: '[ngToolbar]',\n exportAs: 'ngToolbar',\n host: {\n 'role': 'toolbar',\n 'class': 'ng-toolbar',\n '[attr.tabindex]': 'pattern.tabindex()',\n '[attr.aria-disabled]': 'pattern.disabled()',\n '[attr.aria-orientation]': 'pattern.orientation()',\n '(keydown)': 'pattern.onKeydown($event)',\n '(pointerdown)': 'pattern.onPointerdown($event)',\n '(focusin)': 'onFocus()',\n },\n})\nexport class Toolbar<V> {\n /** A reference to the toolbar element. */\n private readonly _elementRef = inject(ElementRef);\n\n /** The TabList nested inside of the container. */\n private readonly _widgets = signal(new Set<ToolbarWidget<V> | ToolbarWidgetGroup<V>>());\n\n /** A signal wrapper for directionality. */\n readonly textDirection = inject(Directionality).valueSignal;\n\n /** Sorted UIPatterns of the child widgets */\n readonly items = computed(() =>\n [...this._widgets()].sort(sortDirectives).map(widget => widget.pattern),\n );\n\n /** Whether the toolbar is vertically or horizontally oriented. */\n readonly orientation = input<'vertical' | 'horizontal'>('horizontal');\n\n /** Whether disabled items in the group should be skipped when navigating. */\n readonly skipDisabled = input(false, {transform: booleanAttribute});\n\n /** Whether the toolbar is disabled. */\n readonly 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 readonly pattern: ToolbarPattern<V> = new ToolbarPattern<V>({\n ...this,\n activeItem: signal(undefined),\n textDirection: this.textDirection,\n element: () => this._elementRef.nativeElement,\n getItem: e => this._getItem(e),\n });\n\n /** Whether the toolbar has received focus yet. */\n private _hasFocused = signal(false);\n\n constructor() {\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 afterRenderEffect(() => {\n if (!this._hasFocused()) {\n this.pattern.setDefaultState();\n }\n });\n }\n\n onFocus() {\n this._hasFocused.set(true);\n }\n\n register(widget: ToolbarWidget<V> | ToolbarWidgetGroup<V>) {\n const widgets = this._widgets();\n if (!widgets.has(widget)) {\n widgets.add(widget);\n this._widgets.set(new Set(widgets));\n }\n }\n\n unregister(widget: ToolbarWidget<V> | ToolbarWidgetGroup<V>) {\n const widgets = this._widgets();\n if (widgets.delete(widget)) {\n this._widgets.set(new Set(widgets));\n }\n }\n\n /** Finds the toolbar item associated with a given element. */\n private _getItem(element: Element) {\n const widgetTarget = element.closest('.ng-toolbar-widget');\n const groupTarget = element.closest('.ng-toolbar-widget-group');\n return this.items().find(\n widget => widget.element() === widgetTarget || widget.element() === groupTarget,\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: '[ngToolbarWidget]',\n exportAs: 'ngToolbarWidget',\n host: {\n 'class': 'ng-toolbar-widget',\n '[attr.data-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 ToolbarWidget<V> implements OnInit, OnDestroy {\n /** A reference to the widget element. */\n private readonly _elementRef = inject(ElementRef);\n\n /** The parent Toolbar. */\n private readonly _toolbar = inject(Toolbar);\n\n /** A unique identifier for the widget. */\n private readonly _generatedId = inject(_IdGenerator).getId('ng-toolbar-widget-');\n\n /** A unique identifier for the widget. */\n readonly id = computed(() => this._generatedId);\n\n /** The parent Toolbar UIPattern. */\n readonly toolbar = computed(() => this._toolbar.pattern);\n\n /** A reference to the widget element to be focused on navigation. */\n readonly element = computed(() => this._elementRef.nativeElement);\n\n /** Whether the widget is disabled. */\n readonly disabled = input(false, {transform: booleanAttribute});\n\n /** Whether the widget is 'hard' disabled, which is different from `aria-disabled`. A hard disabled widget cannot receive focus. */\n readonly hardDisabled = computed(() => this.pattern.disabled() && this._toolbar.skipDisabled());\n\n /** The ToolbarWidget UIPattern. */\n readonly pattern = new ToolbarWidgetPattern<V>({\n ...this,\n id: this.id,\n element: this.element,\n disabled: computed(() => this._toolbar.disabled() || this.disabled()),\n });\n\n ngOnInit() {\n this._toolbar.register(this);\n }\n\n ngOnDestroy() {\n this._toolbar.unregister(this);\n }\n}\n\n/**\n * A directive that groups toolbar widgets, used for more complex widgets like radio groups that\n * have their own internal navigation.\n */\n@Directive({\n host: {\n '[class.ng-toolbar-widget-group]': '!!toolbar()',\n },\n})\nexport class ToolbarWidgetGroup<V> implements OnInit, OnDestroy {\n /** A reference to the widget element. */\n private readonly _elementRef = inject(ElementRef);\n\n /** The parent Toolbar. */\n private readonly _toolbar = inject(Toolbar, {optional: true});\n\n /** A unique identifier for the widget. */\n private readonly _generatedId = inject(_IdGenerator).getId('ng-toolbar-widget-group-');\n\n /** A unique identifier for the widget. */\n readonly id = computed(() => this._generatedId);\n\n /** The parent Toolbar UIPattern. */\n readonly toolbar = computed(() => this._toolbar?.pattern);\n\n /** A reference to the widget element to be focused on navigation. */\n readonly element = computed(() => this._elementRef.nativeElement);\n\n /** Whether the widget group is disabled. */\n readonly disabled = input(false, {transform: booleanAttribute});\n\n /** The controls that can be performed on the widget group. */\n readonly controls = signal<ToolbarWidgetGroupControls | undefined>(undefined);\n\n /** The ToolbarWidgetGroup UIPattern. */\n readonly pattern = new ToolbarWidgetGroupPattern<V>({\n ...this,\n id: this.id,\n element: this.element,\n });\n\n ngOnInit() {\n this._toolbar?.register(this);\n }\n\n ngOnDestroy() {\n this._toolbar?.unregister(this);\n }\n}\n"],"names":[],"mappings":";;;;;;AAkCA;;AAEG;AACH,SAAS,cAAc,CAAC,CAAa,EAAE,CAAa,EAAA;AAClD,IAAA,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,2BAA2B,IAAI;AAC7F,UAAE;UACA,CAAC,CAAC;AACR;AAEA;;;;;;;;;;;;;;;;;AAiBG;MAeU,OAAO,CAAA;;AAED,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGhC,IAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,GAAG,EAA4C,oDAAC;;AAG9E,IAAA,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW;;AAGlD,IAAA,KAAK,GAAG,QAAQ,CAAC,MACxB,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,iDACxE;;AAGQ,IAAA,WAAW,GAAG,KAAK,CAA4B,YAAY,uDAAC;;AAG5D,IAAA,YAAY,GAAG,KAAK,CAAC,KAAK,gDAAG,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA5B,EAAC,SAAS,EAAE,gBAAgB,EAAC,GAAC;;AAG1D,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,4CAAG,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA5B,EAAC,SAAS,EAAE,gBAAgB,EAAC,GAAC;;AAGtD,IAAA,IAAI,GAAG,KAAK,CAAC,IAAI,wCAAG,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA5B,EAAC,SAAS,EAAE,gBAAgB,EAAC,GAAC;;IAGjD,OAAO,GAAsB,IAAI,cAAc,CAAI;AAC1D,QAAA,GAAG,IAAI;AACP,QAAA,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC;QAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,OAAO,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa;QAC7C,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/B,KAAA,CAAC;;AAGM,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;AAEnC,IAAA,WAAA,GAAA;QACE,iBAAiB,CAAC,MAAK;AACrB,YAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;gBACjD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC1C,gBAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AAClC,oBAAA,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;;;AAG9B,SAAC,CAAC;QAEF,iBAAiB,CAAC,MAAK;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;;AAElC,SAAC,CAAC;;IAGJ,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG5B,IAAA,QAAQ,CAAC,MAAgD,EAAA;AACvD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACxB,YAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;;;AAIvC,IAAA,UAAU,CAAC,MAAgD,EAAA;AACzD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;;;;AAK/B,IAAA,QAAQ,CAAC,OAAgB,EAAA;QAC/B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC;QAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC;QAC/D,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CACtB,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,YAAY,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,WAAW,CAChF;;8GAjFQ,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;kGAAP,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,2BAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,EAAA,cAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;kGAAP,OAAO,EAAA,UAAA,EAAA,CAAA;kBAdnB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,IAAI,EAAE;AACJ,wBAAA,MAAM,EAAE,SAAS;AACjB,wBAAA,OAAO,EAAE,YAAY;AACrB,wBAAA,iBAAiB,EAAE,oBAAoB;AACvC,wBAAA,sBAAsB,EAAE,oBAAoB;AAC5C,wBAAA,yBAAyB,EAAE,uBAAuB;AAClD,wBAAA,WAAW,EAAE,2BAA2B;AACxC,wBAAA,eAAe,EAAE,+BAA+B;AAChD,wBAAA,WAAW,EAAE,WAAW;AACzB,qBAAA;AACF,iBAAA;;AAsFD;;;;;AAKG;MAcU,aAAa,CAAA;;AAEP,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGhC,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;;IAG1B,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;;IAGvE,EAAE,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,IAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGtC,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAG/C,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGxD,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,4CAAG,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA5B,EAAC,SAAS,EAAE,gBAAgB,EAAC,GAAC;;IAGtD,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,wDAAC;;IAGtF,OAAO,GAAG,IAAI,oBAAoB,CAAI;AAC7C,QAAA,GAAG,IAAI;QACP,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,QAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;AACtE,KAAA,CAAC;IAEF,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;;IAG9B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;;8GAtCrB,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;kGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;kGAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAbzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,mBAAmB;AAC5B,wBAAA,oBAAoB,EAAE,kBAAkB;AACxC,wBAAA,iBAAiB,EAAE,oBAAoB;AACvC,wBAAA,cAAc,EAAE,8BAA8B;AAC9C,wBAAA,iBAAiB,EAAE,8BAA8B;AACjD,wBAAA,sBAAsB,EAAE,oBAAoB;AAC5C,wBAAA,MAAM,EAAE,cAAc;AACvB,qBAAA;AACF,iBAAA;;AA2CD;;;AAGG;MAMU,kBAAkB,CAAA;;AAEZ,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;IAGhC,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;;IAG5C,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC;;IAG7E,EAAE,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,IAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGtC,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGhD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGxD,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,4CAAG,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA5B,EAAC,SAAS,EAAE,gBAAgB,EAAC,GAAC;;AAGtD,IAAA,QAAQ,GAAG,MAAM,CAAyC,SAAS,oDAAC;;IAGpE,OAAO,GAAG,IAAI,yBAAyB,CAAI;AAClD,QAAA,GAAG,IAAI;QACP,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,KAAA,CAAC;IAEF,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;;IAG/B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC;;8GArCtB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,+BAAA,EAAA,aAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;kGAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,IAAI,EAAE;AACJ,wBAAA,iCAAiC,EAAE,aAAa;AACjD,qBAAA;AACF,iBAAA;;;;;"}
1
+ {"version":3,"file":"toolbar.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/aria/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 {\n ToolbarPattern,\n ToolbarWidgetPattern,\n ToolbarWidgetGroupPattern,\n ToolbarWidgetGroupControls,\n} from '@angular/aria/private';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {_IdGenerator} from '@angular/cdk/a11y';\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 Toolbar is meant to be used in conjunction\n * with ToolbarWidget and RadioGroup as follows:\n *\n * ```html\n * <div ngToolbar>\n * <button ngToolbarWidget>Button</button>\n * <div ngRadioGroup>\n * <label ngRadioButton value=\"1\">Option 1</label>\n * <label ngRadioButton value=\"2\">Option 2</label>\n * <label ngRadioButton value=\"3\">Option 3</label>\n * </div>\n * </div>\n * ```\n */\n@Directive({\n selector: '[ngToolbar]',\n exportAs: 'ngToolbar',\n host: {\n 'role': 'toolbar',\n 'class': 'ng-toolbar',\n '[attr.tabindex]': '_pattern.tabindex()',\n '[attr.aria-disabled]': '_pattern.disabled()',\n '[attr.aria-orientation]': '_pattern.orientation()',\n '(keydown)': '_pattern.onKeydown($event)',\n '(pointerdown)': '_pattern.onPointerdown($event)',\n '(focusin)': 'onFocus()',\n },\n})\nexport class Toolbar<V> {\n /** A reference to the toolbar element. */\n private readonly _elementRef = inject(ElementRef);\n\n /** The TabList nested inside of the container. */\n private readonly _widgets = signal(new Set<ToolbarWidget<V> | ToolbarWidgetGroup<V>>());\n\n /** A signal wrapper for directionality. */\n readonly textDirection = inject(Directionality).valueSignal;\n\n /** Sorted UIPatterns of the child widgets */\n readonly items = computed(() =>\n [...this._widgets()].sort(sortDirectives).map(widget => widget._pattern),\n );\n\n /** Whether the toolbar is vertically or horizontally oriented. */\n readonly orientation = input<'vertical' | 'horizontal'>('horizontal');\n\n /** Whether disabled items in the group should be skipped when navigating. */\n readonly skipDisabled = input(false, {transform: booleanAttribute});\n\n /** Whether the toolbar is disabled. */\n readonly 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 readonly _pattern: ToolbarPattern<V> = new ToolbarPattern<V>({\n ...this,\n activeItem: signal(undefined),\n textDirection: this.textDirection,\n element: () => this._elementRef.nativeElement,\n getItem: e => this._getItem(e),\n });\n\n /** Whether the toolbar has received focus yet. */\n private _hasFocused = signal(false);\n\n constructor() {\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 afterRenderEffect(() => {\n if (!this._hasFocused()) {\n this._pattern.setDefaultState();\n }\n });\n }\n\n onFocus() {\n this._hasFocused.set(true);\n }\n\n register(widget: ToolbarWidget<V> | ToolbarWidgetGroup<V>) {\n const widgets = this._widgets();\n if (!widgets.has(widget)) {\n widgets.add(widget);\n this._widgets.set(new Set(widgets));\n }\n }\n\n unregister(widget: ToolbarWidget<V> | ToolbarWidgetGroup<V>) {\n const widgets = this._widgets();\n if (widgets.delete(widget)) {\n this._widgets.set(new Set(widgets));\n }\n }\n\n /** Finds the toolbar item associated with a given element. */\n private _getItem(element: Element) {\n const widgetTarget = element.closest('.ng-toolbar-widget');\n const groupTarget = element.closest('.ng-toolbar-widget-group');\n return this.items().find(\n widget => widget.element() === widgetTarget || widget.element() === groupTarget,\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: '[ngToolbarWidget]',\n exportAs: 'ngToolbarWidget',\n host: {\n 'class': 'ng-toolbar-widget',\n '[attr.data-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 ToolbarWidget<V> implements OnInit, OnDestroy {\n /** A reference to the widget element. */\n private readonly _elementRef = inject(ElementRef);\n\n /** The parent Toolbar. */\n private readonly _toolbar = inject(Toolbar);\n\n /** A unique identifier for the widget. */\n private readonly _generatedId = inject(_IdGenerator).getId('ng-toolbar-widget-');\n\n /** A unique identifier for the widget. */\n readonly id = computed(() => this._generatedId);\n\n /** The parent Toolbar UIPattern. */\n readonly toolbar = computed(() => this._toolbar._pattern);\n\n /** A reference to the widget element to be focused on navigation. */\n readonly element = computed(() => this._elementRef.nativeElement);\n\n /** Whether the widget is disabled. */\n readonly disabled = input(false, {transform: booleanAttribute});\n\n /** Whether the widget is 'hard' disabled, which is different from `aria-disabled`. A hard disabled widget cannot receive focus. */\n readonly hardDisabled = computed(() => this._pattern.disabled() && this._toolbar.skipDisabled());\n\n /** The ToolbarWidget UIPattern. */\n readonly _pattern = new ToolbarWidgetPattern<V>({\n ...this,\n id: this.id,\n element: this.element,\n disabled: computed(() => this._toolbar.disabled() || this.disabled()),\n });\n\n ngOnInit() {\n this._toolbar.register(this);\n }\n\n ngOnDestroy() {\n this._toolbar.unregister(this);\n }\n}\n\n/**\n * A directive that groups toolbar widgets, used for more complex widgets like radio groups that\n * have their own internal navigation.\n */\n@Directive({\n host: {\n '[class.ng-toolbar-widget-group]': '!!toolbar()',\n },\n})\nexport class ToolbarWidgetGroup<V> implements OnInit, OnDestroy {\n /** A reference to the widget element. */\n private readonly _elementRef = inject(ElementRef);\n\n /** The parent Toolbar. */\n private readonly _toolbar = inject(Toolbar, {optional: true});\n\n /** A unique identifier for the widget. */\n private readonly _generatedId = inject(_IdGenerator).getId('ng-toolbar-widget-group-');\n\n /** A unique identifier for the widget. */\n readonly id = computed(() => this._generatedId);\n\n /** The parent Toolbar UIPattern. */\n readonly toolbar = computed(() => this._toolbar?._pattern);\n\n /** A reference to the widget element to be focused on navigation. */\n readonly element = computed(() => this._elementRef.nativeElement);\n\n /** Whether the widget group is disabled. */\n readonly disabled = input(false, {transform: booleanAttribute});\n\n /** The controls that can be performed on the widget group. */\n readonly controls = signal<ToolbarWidgetGroupControls | undefined>(undefined);\n\n /** The ToolbarWidgetGroup UIPattern. */\n readonly _pattern = new ToolbarWidgetGroupPattern<V>({\n ...this,\n id: this.id,\n element: this.element,\n });\n\n ngOnInit() {\n this._toolbar?.register(this);\n }\n\n ngOnDestroy() {\n this._toolbar?.unregister(this);\n }\n}\n"],"names":["textDirection","inject","Directionality","valueSignal","items","computed","_widgets","sort","sortDirectives","map","widget","_pattern","ngDevMode","debugName","orientation","input","transform","booleanAttribute","disabled","wrap","getItem","e","_getItem","signal","constructor","afterRenderEffect","violations","validate","violation","console","error","onFocus","_hasFocused","set","widgets","has","Set","unregister","delete","element","widgetTarget","closest","groupTarget","find","version","type","Toolbar","isStandalone","selector","inputs","classPropertyName","publicName","isSignal","isRequired","transformFunction","skipDisabled","host","attributes","listeners","properties","classAttribute","exportAs","ngImport","i0","ctorParameters","_generatedId","_IdGenerator","getId","_toolbar","_elementRef","nativeElement","id","ɵfac","ɵɵngDeclareFactory","minVersion","ToolbarWidget","deps","target","ɵɵFactoryTarget","Directive","ɵdir","ɵɵngDeclareDirective"],"mappings":"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"}