@vonage/vivid 3.3.0 → 3.4.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 (128) hide show
  1. package/custom-elements.json +337 -1
  2. package/data-grid/index.js +7 -1047
  3. package/dialog/index.js +1 -1
  4. package/divider/index.js +1 -1
  5. package/fab/index.js +1 -1
  6. package/header/index.js +1 -1
  7. package/index.d.ts +1 -0
  8. package/index.js +32 -31
  9. package/layout/index.js +1 -1
  10. package/lib/accordion/definition.d.ts +1 -0
  11. package/lib/action-group/action-group.d.ts +1 -2
  12. package/lib/action-group/definition.d.ts +1 -0
  13. package/lib/avatar/avatar.d.ts +2 -3
  14. package/lib/avatar/definition.d.ts +1 -0
  15. package/lib/badge/badge.d.ts +3 -4
  16. package/lib/badge/definition.d.ts +1 -0
  17. package/lib/banner/definition.d.ts +1 -0
  18. package/lib/button/button.d.ts +3 -4
  19. package/lib/button/definition.d.ts +1 -0
  20. package/lib/calendar-event/calendar-event.d.ts +2 -3
  21. package/lib/calendar-event/definition.d.ts +1 -0
  22. package/lib/combobox/combobox.d.ts +1 -2
  23. package/lib/combobox/definition.d.ts +1 -0
  24. package/lib/components.d.ts +1 -0
  25. package/lib/dialog/definition.d.ts +1 -0
  26. package/lib/dialog/dialog.d.ts +1 -2
  27. package/lib/fab/definition.d.ts +1 -0
  28. package/lib/fab/fab.d.ts +1 -2
  29. package/lib/icon/definition.d.ts +1 -0
  30. package/lib/icon/icon.d.ts +1 -2
  31. package/lib/layout/definition.d.ts +1 -0
  32. package/lib/layout/layout.d.ts +3 -4
  33. package/lib/listbox/definition.d.ts +1 -0
  34. package/lib/menu/definition.d.ts +1 -0
  35. package/lib/note/definition.d.ts +1 -0
  36. package/lib/number-field/definition.d.ts +1 -0
  37. package/lib/number-field/number-field.d.ts +2 -3
  38. package/lib/popup/definition.d.ts +2 -0
  39. package/lib/progress/definition.d.ts +1 -0
  40. package/lib/progress-ring/definition.d.ts +1 -0
  41. package/lib/select/definition.d.ts +1 -0
  42. package/lib/select/select.d.ts +2 -3
  43. package/lib/switch/definition.d.ts +1 -0
  44. package/lib/text-area/definition.d.ts +1 -0
  45. package/lib/text-area/text-area.d.ts +1 -2
  46. package/lib/text-field/definition.d.ts +1 -0
  47. package/lib/text-field/text-field.d.ts +2 -3
  48. package/listbox/index.js +1 -1
  49. package/menu/index.js +2 -2
  50. package/menu-item/index.js +1 -1
  51. package/nav/index.js +1 -1
  52. package/nav-disclosure/index.js +1 -1
  53. package/nav-item/index.js +1 -1
  54. package/note/index.js +1 -1
  55. package/number-field/index.js +2 -2
  56. package/package.json +1 -1
  57. package/progress/index.js +1 -1
  58. package/progress-ring/index.js +1 -1
  59. package/radio/index.js +1 -1
  60. package/radio-group/index.js +1 -1
  61. package/select/index.js +1 -1
  62. package/shared/definition.js +1 -1
  63. package/shared/definition11.js +1 -1
  64. package/shared/definition12.js +1 -1
  65. package/shared/definition13.js +1 -1
  66. package/shared/definition14.js +1 -1
  67. package/shared/definition16.js +1 -1
  68. package/shared/definition17.js +1 -1
  69. package/shared/definition18.js +2 -2
  70. package/shared/definition19.js +1 -1
  71. package/shared/definition2.js +1 -1
  72. package/shared/definition20.js +1035 -203
  73. package/shared/definition21.js +206 -67
  74. package/shared/definition22.js +68 -77
  75. package/shared/definition23.js +76 -47
  76. package/shared/definition24.js +46 -32
  77. package/shared/definition25.js +35 -49
  78. package/shared/definition26.js +48 -338
  79. package/shared/definition27.js +267 -282
  80. package/shared/definition28.js +356 -14
  81. package/shared/definition29.js +13 -67
  82. package/shared/definition30.js +65 -21
  83. package/shared/definition31.js +21 -39
  84. package/shared/definition32.js +31 -432
  85. package/shared/definition33.js +432 -76
  86. package/shared/definition34.js +76 -59
  87. package/shared/definition35.js +67 -35
  88. package/shared/definition36.js +31 -422
  89. package/shared/definition37.js +357 -560
  90. package/shared/definition38.js +624 -74
  91. package/shared/definition39.js +70 -573
  92. package/shared/definition4.js +1 -1
  93. package/shared/definition40.js +527 -81
  94. package/shared/definition41.js +127 -47
  95. package/shared/definition42.js +51 -16
  96. package/shared/definition43.js +17 -425
  97. package/shared/definition44.js +367 -209
  98. package/shared/definition45.js +248 -85
  99. package/shared/definition46.js +110 -68
  100. package/shared/definition47.js +65 -67
  101. package/shared/definition48.js +69 -295
  102. package/shared/definition49.js +305 -0
  103. package/shared/definition5.js +1 -1
  104. package/shared/definition6.js +1 -1
  105. package/shared/definition7.js +1 -1
  106. package/shared/definition8.js +1 -1
  107. package/shared/definition9.js +1 -1
  108. package/shared/enums.js +1 -1
  109. package/shared/form-elements.js +1 -1
  110. package/shared/patterns/form-elements/form-elements.d.ts +2 -2
  111. package/shared/text-field.js +1 -1
  112. package/side-drawer/index.js +1 -1
  113. package/slider/index.js +1 -1
  114. package/styles/core/all.css +1 -1
  115. package/styles/core/theme.css +1 -1
  116. package/styles/core/typography.css +1 -1
  117. package/styles/tokens/theme-dark.css +4 -4
  118. package/styles/tokens/theme-light.css +4 -4
  119. package/switch/index.js +1 -1
  120. package/tab/index.js +1 -1
  121. package/tab-panel/index.js +1 -1
  122. package/tabs/index.js +3 -3
  123. package/text-area/index.js +1 -1
  124. package/text-field/index.js +1 -1
  125. package/tooltip/index.js +1 -1
  126. package/tree-item/index.js +1 -1
  127. package/tree-view/index.js +1 -1
  128. package/vivid.api.json +4526 -336
@@ -1,639 +1,436 @@
1
- import { W as DOM, O as Observable, _ as __decorate, a as attr, a6 as volatile, o as observable, b as __metadata, h as html, r as registerFactory } from './index.js';
2
- import { f as focusRegistries } from './definition4.js';
3
- import { P as Popup, p as popupRegistries } from './definition18.js';
4
- import { i as iconRegistries } from './definition3.js';
5
- import { l as listboxOptionRegistries } from './definition19.js';
6
- import { b as AffixIcon, a as affixIconTemplateFactory } from './affix.js';
7
- import './focus.js';
8
- import { f as formElements } from './form-elements.js';
9
- import { b as ListboxElement, L as Listbox, D as DelegatesARIAListbox, a as Listbox$1 } from './listbox.js';
10
- import { S as StartEnd } from './start-end.js';
11
- import { a as applyMixins } from './apply-mixins.js';
12
- import { F as FormAssociated } from './form-associated.js';
13
- import { S as SelectPosition } from './select.options.js';
14
- import { u as uniqueId } from './strings.js';
15
- import { g as keyTab, f as keyEscape, d as keyEnter, k as keyEnd, a as keyHome, e as keySpace, b as keyArrowDown, c as keyArrowUp } from './key-codes.js';
16
- import { f as focusTemplateFactory } from './focus2.js';
17
- import { r as ref } from './ref.js';
18
- import { s as slotted } from './slotted.js';
1
+ import { F as FoundationElement, _ as __decorate, a as attr, o as observable, b as __metadata, h as html, r as registerFactory } from './index.js';
2
+ import { D as Direction, g as getDirection } from './direction.js';
3
+ import { h as keyArrowRight, i as keyArrowLeft, A as ArrowKeys, c as keyArrowUp, b as keyArrowDown, d as keyEnter } from './key-codes.js';
4
+ import { O as Orientation } from './aria.js';
5
+ import { R as Radio } from './radio.js';
6
+ import { s as slotted, e as elements } from './slotted.js';
7
+ import { O as Orientation$1 } from './aria2.js';
19
8
  import { w as when } from './when.js';
20
- import { c as classNames } from './class-names.js';
21
-
22
- class _Select extends ListboxElement {
23
- }
24
- /**
25
- * A form-associated base class for the {@link @microsoft/fast-foundation#(Select:class)} component.
26
- *
27
- * @internal
28
- */
29
- class FormAssociatedSelect extends FormAssociated(_Select) {
30
- constructor() {
31
- super(...arguments);
32
- this.proxy = document.createElement("select");
33
- }
34
- }
35
9
 
36
10
  /**
37
- * A Select Custom HTML Element.
38
- * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#select | ARIA select }.
11
+ * An Radio Group Custom HTML Element.
12
+ * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#radiogroup | ARIA radiogroup }.
39
13
  *
40
- * @slot start - Content which can be provided before the button content
41
- * @slot end - Content which can be provided after the button content
42
- * @slot button-container - The element representing the select button
43
- * @slot selected-value - The selected value
44
- * @slot indicator - The visual indicator for the expand/collapse state of the button
45
- * @slot - The default slot for slotted options
46
- * @csspart control - The element representing the select invoking element
47
- * @csspart selected-value - The element wrapping the selected value
48
- * @csspart indicator - The element wrapping the visual indicator
49
- * @csspart listbox - The listbox element
50
- * @fires input - Fires a custom 'input' event when the value updates
51
- * @fires change - Fires a custom 'change' event when the value updates
14
+ * @slot label - The slot for the label
15
+ * @slot - The default slot for radio buttons
16
+ * @csspart positioning-region - The positioning region for laying out the radios
17
+ * @fires change - Fires a custom 'change' event when the value changes
52
18
  *
53
19
  * @public
54
20
  */
55
- class Select$1 extends FormAssociatedSelect {
21
+ class RadioGroup$1 extends FoundationElement {
56
22
  constructor() {
57
23
  super(...arguments);
58
24
  /**
59
- * The open attribute.
25
+ * The orientation of the group
60
26
  *
61
27
  * @public
62
28
  * @remarks
63
- * HTML Attribute: open
29
+ * HTML Attribute: orientation
64
30
  */
65
- this.open = false;
31
+ this.orientation = Orientation.horizontal;
32
+ this.radioChangeHandler = (e) => {
33
+ const changedRadio = e.target;
34
+ if (changedRadio.checked) {
35
+ this.slottedRadioButtons.forEach((radio) => {
36
+ if (radio !== changedRadio) {
37
+ radio.checked = false;
38
+ if (!this.isInsideFoundationToolbar) {
39
+ radio.setAttribute("tabindex", "-1");
40
+ }
41
+ }
42
+ });
43
+ this.selectedRadio = changedRadio;
44
+ this.value = changedRadio.value;
45
+ changedRadio.setAttribute("tabindex", "0");
46
+ this.focusedRadio = changedRadio;
47
+ }
48
+ e.stopPropagation();
49
+ };
50
+ this.moveToRadioByIndex = (group, index) => {
51
+ const radio = group[index];
52
+ if (!this.isInsideToolbar) {
53
+ radio.setAttribute("tabindex", "0");
54
+ if (radio.readOnly) {
55
+ this.slottedRadioButtons.forEach((nextRadio) => {
56
+ if (nextRadio !== radio) {
57
+ nextRadio.setAttribute("tabindex", "-1");
58
+ }
59
+ });
60
+ }
61
+ else {
62
+ radio.checked = true;
63
+ this.selectedRadio = radio;
64
+ }
65
+ }
66
+ this.focusedRadio = radio;
67
+ radio.focus();
68
+ };
69
+ this.moveRightOffGroup = () => {
70
+ var _a;
71
+ (_a = this.nextElementSibling) === null || _a === void 0 ? void 0 : _a.focus();
72
+ };
73
+ this.moveLeftOffGroup = () => {
74
+ var _a;
75
+ (_a = this.previousElementSibling) === null || _a === void 0 ? void 0 : _a.focus();
76
+ };
66
77
  /**
67
- * Indicates the initial state of the position attribute.
68
- *
69
78
  * @internal
70
79
  */
71
- this.forcedPosition = false;
80
+ this.focusOutHandler = (e) => {
81
+ const group = this.slottedRadioButtons;
82
+ const radio = e.target;
83
+ const index = radio !== null ? group.indexOf(radio) : 0;
84
+ const focusedIndex = this.focusedRadio
85
+ ? group.indexOf(this.focusedRadio)
86
+ : -1;
87
+ if ((focusedIndex === 0 && index === focusedIndex) ||
88
+ (focusedIndex === group.length - 1 && focusedIndex === index)) {
89
+ if (!this.selectedRadio) {
90
+ this.focusedRadio = group[0];
91
+ this.focusedRadio.setAttribute("tabindex", "0");
92
+ group.forEach((nextRadio) => {
93
+ if (nextRadio !== this.focusedRadio) {
94
+ nextRadio.setAttribute("tabindex", "-1");
95
+ }
96
+ });
97
+ }
98
+ else {
99
+ this.focusedRadio = this.selectedRadio;
100
+ if (!this.isInsideFoundationToolbar) {
101
+ this.selectedRadio.setAttribute("tabindex", "0");
102
+ group.forEach((nextRadio) => {
103
+ if (nextRadio !== this.selectedRadio) {
104
+ nextRadio.setAttribute("tabindex", "-1");
105
+ }
106
+ });
107
+ }
108
+ }
109
+ }
110
+ return true;
111
+ };
72
112
  /**
73
- * The unique id for the internal listbox element.
74
- *
75
113
  * @internal
76
114
  */
77
- this.listboxId = uniqueId("listbox-");
115
+ this.clickHandler = (e) => {
116
+ const radio = e.target;
117
+ if (radio) {
118
+ const group = this.slottedRadioButtons;
119
+ if (radio.checked || group.indexOf(radio) === 0) {
120
+ radio.setAttribute("tabindex", "0");
121
+ this.selectedRadio = radio;
122
+ }
123
+ else {
124
+ radio.setAttribute("tabindex", "-1");
125
+ this.selectedRadio = null;
126
+ }
127
+ this.focusedRadio = radio;
128
+ }
129
+ e.preventDefault();
130
+ };
131
+ this.shouldMoveOffGroupToTheRight = (index, group, key) => {
132
+ return index === group.length && this.isInsideToolbar && key === keyArrowRight;
133
+ };
134
+ this.shouldMoveOffGroupToTheLeft = (group, key) => {
135
+ const index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0;
136
+ return index < 0 && this.isInsideToolbar && key === keyArrowLeft;
137
+ };
138
+ this.checkFocusedRadio = () => {
139
+ if (this.focusedRadio !== null &&
140
+ !this.focusedRadio.readOnly &&
141
+ !this.focusedRadio.checked) {
142
+ this.focusedRadio.checked = true;
143
+ this.focusedRadio.setAttribute("tabindex", "0");
144
+ this.focusedRadio.focus();
145
+ this.selectedRadio = this.focusedRadio;
146
+ }
147
+ };
148
+ this.moveRight = (e) => {
149
+ const group = this.slottedRadioButtons;
150
+ let index = 0;
151
+ index = this.focusedRadio ? group.indexOf(this.focusedRadio) + 1 : 1;
152
+ if (this.shouldMoveOffGroupToTheRight(index, group, e.key)) {
153
+ this.moveRightOffGroup();
154
+ return;
155
+ }
156
+ else if (index === group.length) {
157
+ index = 0;
158
+ }
159
+ /* looping to get to next radio that is not disabled */
160
+ /* matching native radio/radiogroup which does not select an item if there is only 1 in the group */
161
+ while (index < group.length && group.length > 1) {
162
+ if (!group[index].disabled) {
163
+ this.moveToRadioByIndex(group, index);
164
+ break;
165
+ }
166
+ else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) {
167
+ break;
168
+ }
169
+ else if (index + 1 >= group.length) {
170
+ if (this.isInsideToolbar) {
171
+ break;
172
+ }
173
+ else {
174
+ index = 0;
175
+ }
176
+ }
177
+ else {
178
+ index += 1;
179
+ }
180
+ }
181
+ };
182
+ this.moveLeft = (e) => {
183
+ const group = this.slottedRadioButtons;
184
+ let index = 0;
185
+ index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0;
186
+ index = index < 0 ? group.length - 1 : index;
187
+ if (this.shouldMoveOffGroupToTheLeft(group, e.key)) {
188
+ this.moveLeftOffGroup();
189
+ return;
190
+ }
191
+ /* looping to get to next radio that is not disabled */
192
+ while (index >= 0 && group.length > 1) {
193
+ if (!group[index].disabled) {
194
+ this.moveToRadioByIndex(group, index);
195
+ break;
196
+ }
197
+ else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) {
198
+ break;
199
+ }
200
+ else if (index - 1 < 0) {
201
+ index = group.length - 1;
202
+ }
203
+ else {
204
+ index -= 1;
205
+ }
206
+ }
207
+ };
78
208
  /**
79
- * The max height for the listbox when opened.
209
+ * keyboard handling per https://w3c.github.io/aria-practices/#for-radio-groups-not-contained-in-a-toolbar
210
+ * navigation is different when there is an ancestor with role='toolbar'
80
211
  *
81
212
  * @internal
82
213
  */
83
- this.maxHeight = 0;
84
- }
85
- /**
86
- * Sets focus and synchronizes ARIA attributes when the open property changes.
87
- *
88
- * @param prev - the previous open value
89
- * @param next - the current open value
90
- *
91
- * @internal
92
- */
93
- openChanged(prev, next) {
94
- if (!this.collapsible) {
95
- return;
96
- }
97
- if (this.open) {
98
- this.ariaControls = this.listboxId;
99
- this.ariaExpanded = "true";
100
- this.setPositioning();
101
- this.focusAndScrollOptionIntoView();
102
- this.indexWhenOpened = this.selectedIndex;
103
- // focus is directed to the element when `open` is changed programmatically
104
- DOM.queueUpdate(() => this.focus());
105
- return;
106
- }
107
- this.ariaControls = "";
108
- this.ariaExpanded = "false";
109
- }
110
- /**
111
- * The component is collapsible when in single-selection mode with no size attribute.
112
- *
113
- * @internal
114
- */
115
- get collapsible() {
116
- return !(this.multiple || typeof this.size === "number");
117
- }
118
- /**
119
- * The value property.
120
- *
121
- * @public
122
- */
123
- get value() {
124
- Observable.track(this, "value");
125
- return this._value;
126
- }
127
- set value(next) {
128
- var _a, _b, _c, _d, _e, _f, _g;
129
- const prev = `${this._value}`;
130
- if ((_a = this._options) === null || _a === void 0 ? void 0 : _a.length) {
131
- const selectedIndex = this._options.findIndex(el => el.value === next);
132
- const prevSelectedValue = (_c = (_b = this._options[this.selectedIndex]) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : null;
133
- const nextSelectedValue = (_e = (_d = this._options[selectedIndex]) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : null;
134
- if (selectedIndex === -1 || prevSelectedValue !== nextSelectedValue) {
135
- next = "";
136
- this.selectedIndex = selectedIndex;
214
+ this.keydownHandler = (e) => {
215
+ const key = e.key;
216
+ if (key in ArrowKeys && this.isInsideFoundationToolbar) {
217
+ return true;
137
218
  }
138
- next = (_g = (_f = this.firstSelectedOption) === null || _f === void 0 ? void 0 : _f.value) !== null && _g !== void 0 ? _g : next;
139
- }
140
- if (prev !== next) {
141
- this._value = next;
142
- super.valueChanged(prev, next);
143
- Observable.notify(this, "value");
144
- this.updateDisplayValue();
145
- }
219
+ switch (key) {
220
+ case keyEnter: {
221
+ this.checkFocusedRadio();
222
+ break;
223
+ }
224
+ case keyArrowRight:
225
+ case keyArrowDown: {
226
+ if (this.direction === Direction.ltr) {
227
+ this.moveRight(e);
228
+ }
229
+ else {
230
+ this.moveLeft(e);
231
+ }
232
+ break;
233
+ }
234
+ case keyArrowLeft:
235
+ case keyArrowUp: {
236
+ if (this.direction === Direction.ltr) {
237
+ this.moveLeft(e);
238
+ }
239
+ else {
240
+ this.moveRight(e);
241
+ }
242
+ break;
243
+ }
244
+ default: {
245
+ return true;
246
+ }
247
+ }
248
+ };
146
249
  }
147
- /**
148
- * Sets the value and display value to match the first selected option.
149
- *
150
- * @param shouldEmit - if true, the input and change events will be emitted
151
- *
152
- * @internal
153
- */
154
- updateValue(shouldEmit) {
155
- var _a, _b;
156
- if (this.$fastController.isConnected) {
157
- this.value = (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : "";
158
- }
159
- if (shouldEmit) {
160
- this.$emit("input");
161
- this.$emit("change", this, {
162
- bubbles: true,
163
- composed: undefined,
250
+ readOnlyChanged() {
251
+ if (this.slottedRadioButtons !== undefined) {
252
+ this.slottedRadioButtons.forEach((radio) => {
253
+ if (this.readOnly) {
254
+ radio.readOnly = true;
255
+ }
256
+ else {
257
+ radio.readOnly = false;
258
+ }
164
259
  });
165
260
  }
166
261
  }
167
- /**
168
- * Updates the proxy value when the selected index changes.
169
- *
170
- * @param prev - the previous selected index
171
- * @param next - the next selected index
172
- *
173
- * @internal
174
- */
175
- selectedIndexChanged(prev, next) {
176
- super.selectedIndexChanged(prev, next);
177
- this.updateValue();
178
- }
179
- positionChanged(prev, next) {
180
- this.positionAttribute = next;
181
- this.setPositioning();
182
- }
183
- /**
184
- * Calculate and apply listbox positioning based on available viewport space.
185
- *
186
- * @public
187
- */
188
- setPositioning() {
189
- const currentBox = this.getBoundingClientRect();
190
- const viewportHeight = window.innerHeight;
191
- const availableBottom = viewportHeight - currentBox.bottom;
192
- this.position = this.forcedPosition
193
- ? this.positionAttribute
194
- : currentBox.top > availableBottom
195
- ? SelectPosition.above
196
- : SelectPosition.below;
197
- this.positionAttribute = this.forcedPosition
198
- ? this.positionAttribute
199
- : this.position;
200
- this.maxHeight =
201
- this.position === SelectPosition.above ? ~~currentBox.top : ~~availableBottom;
202
- }
203
- /**
204
- * The value displayed on the button.
205
- *
206
- * @public
207
- */
208
- get displayValue() {
209
- var _a, _b;
210
- Observable.track(this, "displayValue");
211
- return (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : "";
212
- }
213
- /**
214
- * Synchronize the `aria-disabled` property when the `disabled` property changes.
215
- *
216
- * @param prev - The previous disabled value
217
- * @param next - The next disabled value
218
- *
219
- * @internal
220
- */
221
- disabledChanged(prev, next) {
222
- if (super.disabledChanged) {
223
- super.disabledChanged(prev, next);
224
- }
225
- this.ariaDisabled = this.disabled ? "true" : "false";
226
- }
227
- /**
228
- * Reset the element to its first selectable option when its parent form is reset.
229
- *
230
- * @internal
231
- */
232
- formResetCallback() {
233
- this.setProxyOptions();
234
- // Call the base class's implementation setDefaultSelectedOption instead of the select's
235
- // override, in order to reset the selectedIndex without using the value property.
236
- super.setDefaultSelectedOption();
237
- if (this.selectedIndex === -1) {
238
- this.selectedIndex = 0;
262
+ disabledChanged() {
263
+ if (this.slottedRadioButtons !== undefined) {
264
+ this.slottedRadioButtons.forEach((radio) => {
265
+ if (this.disabled) {
266
+ radio.disabled = true;
267
+ }
268
+ else {
269
+ radio.disabled = false;
270
+ }
271
+ });
239
272
  }
240
273
  }
241
- /**
242
- * Handle opening and closing the listbox when the select is clicked.
243
- *
244
- * @param e - the mouse event
245
- * @internal
246
- */
247
- clickHandler(e) {
248
- // do nothing if the select is disabled
249
- if (this.disabled) {
250
- return;
251
- }
252
- if (this.open) {
253
- const captured = e.target.closest(`option,[role=option]`);
254
- if (captured && captured.disabled) {
255
- return;
256
- }
257
- }
258
- super.clickHandler(e);
259
- this.open = this.collapsible && !this.open;
260
- if (!this.open && this.indexWhenOpened !== this.selectedIndex) {
261
- this.updateValue(true);
274
+ nameChanged() {
275
+ if (this.slottedRadioButtons) {
276
+ this.slottedRadioButtons.forEach((radio) => {
277
+ radio.setAttribute("name", this.name);
278
+ });
262
279
  }
263
- return true;
264
280
  }
265
- /**
266
- * Handles focus state when the element or its children lose focus.
267
- *
268
- * @param e - The focus event
269
- * @internal
270
- */
271
- focusoutHandler(e) {
272
- var _a;
273
- super.focusoutHandler(e);
274
- if (!this.open) {
275
- return true;
276
- }
277
- const focusTarget = e.relatedTarget;
278
- if (this.isSameNode(focusTarget)) {
279
- this.focus();
280
- return;
281
- }
282
- if (!((_a = this.options) === null || _a === void 0 ? void 0 : _a.includes(focusTarget))) {
283
- this.open = false;
284
- if (this.indexWhenOpened !== this.selectedIndex) {
285
- this.updateValue(true);
286
- }
281
+ valueChanged() {
282
+ if (this.slottedRadioButtons) {
283
+ this.slottedRadioButtons.forEach((radio) => {
284
+ if (radio.value === this.value) {
285
+ radio.checked = true;
286
+ this.selectedRadio = radio;
287
+ }
288
+ });
287
289
  }
290
+ this.$emit("change");
288
291
  }
289
- /**
290
- * Updates the value when an option's value changes.
291
- *
292
- * @param source - the source object
293
- * @param propertyName - the property to evaluate
294
- *
295
- * @internal
296
- * @override
297
- */
298
- handleChange(source, propertyName) {
299
- super.handleChange(source, propertyName);
300
- if (propertyName === "value") {
301
- this.updateValue();
292
+ slottedRadioButtonsChanged(oldValue, newValue) {
293
+ if (this.slottedRadioButtons && this.slottedRadioButtons.length > 0) {
294
+ this.setupRadioButtons();
302
295
  }
303
296
  }
304
- /**
305
- * Synchronize the form-associated proxy and updates the value property of the element.
306
- *
307
- * @param prev - the previous collection of slotted option elements
308
- * @param next - the next collection of slotted option elements
309
- *
310
- * @internal
311
- */
312
- slottedOptionsChanged(prev, next) {
313
- this.options.forEach(o => {
314
- const notifier = Observable.getNotifier(o);
315
- notifier.unsubscribe(this, "value");
316
- });
317
- super.slottedOptionsChanged(prev, next);
318
- this.options.forEach(o => {
319
- const notifier = Observable.getNotifier(o);
320
- notifier.subscribe(this, "value");
321
- });
322
- this.setProxyOptions();
323
- this.updateValue();
297
+ get parentToolbar() {
298
+ return this.closest('[role="toolbar"]');
324
299
  }
325
- /**
326
- * Prevents focus when size is set and a scrollbar is clicked.
327
- *
328
- * @param e - the mouse event object
329
- *
330
- * @override
331
- * @internal
332
- */
333
- mousedownHandler(e) {
300
+ get isInsideToolbar() {
334
301
  var _a;
335
- if (e.offsetX >= 0 && e.offsetX <= ((_a = this.listbox) === null || _a === void 0 ? void 0 : _a.scrollWidth)) {
336
- return super.mousedownHandler(e);
337
- }
338
- return this.collapsible;
339
- }
340
- /**
341
- * Sets the multiple property on the proxy element.
342
- *
343
- * @param prev - the previous multiple value
344
- * @param next - the current multiple value
345
- */
346
- multipleChanged(prev, next) {
347
- super.multipleChanged(prev, next);
348
- if (this.proxy) {
349
- this.proxy.multiple = next;
350
- }
302
+ return ((_a = this.parentToolbar) !== null && _a !== void 0 ? _a : false);
351
303
  }
352
- /**
353
- * Updates the selectedness of each option when the list of selected options changes.
354
- *
355
- * @param prev - the previous list of selected options
356
- * @param next - the current list of selected options
357
- *
358
- * @override
359
- * @internal
360
- */
361
- selectedOptionsChanged(prev, next) {
304
+ get isInsideFoundationToolbar() {
362
305
  var _a;
363
- super.selectedOptionsChanged(prev, next);
364
- (_a = this.options) === null || _a === void 0 ? void 0 : _a.forEach((o, i) => {
365
- var _a;
366
- const proxyOption = (_a = this.proxy) === null || _a === void 0 ? void 0 : _a.options.item(i);
367
- if (proxyOption) {
368
- proxyOption.selected = o.selected;
369
- }
370
- });
306
+ return !!((_a = this.parentToolbar) === null || _a === void 0 ? void 0 : _a["$fastController"]);
371
307
  }
372
308
  /**
373
- * Sets the selected index to match the first option with the selected attribute, or
374
- * the first selectable option.
375
- *
376
- * @override
377
309
  * @internal
378
310
  */
379
- setDefaultSelectedOption() {
380
- var _a;
381
- const options = (_a = this.options) !== null && _a !== void 0 ? _a : Array.from(this.children).filter(Listbox.slottedOptionFilter);
382
- const selectedIndex = options === null || options === void 0 ? void 0 : options.findIndex(el => el.hasAttribute("selected") || el.selected || el.value === this.value);
383
- if (selectedIndex !== -1) {
384
- this.selectedIndex = selectedIndex;
385
- return;
386
- }
387
- this.selectedIndex = 0;
311
+ connectedCallback() {
312
+ super.connectedCallback();
313
+ this.direction = getDirection(this);
314
+ this.setupRadioButtons();
388
315
  }
389
- /**
390
- * Resets and fills the proxy to match the component's options.
391
- *
392
- * @internal
393
- */
394
- setProxyOptions() {
395
- if (this.proxy instanceof HTMLSelectElement && this.options) {
396
- this.proxy.options.length = 0;
397
- this.options.forEach(option => {
398
- const proxyOption = option.proxy ||
399
- (option instanceof HTMLOptionElement ? option.cloneNode() : null);
400
- if (proxyOption) {
401
- this.proxy.options.add(proxyOption);
402
- }
403
- });
404
- }
316
+ disconnectedCallback() {
317
+ this.slottedRadioButtons.forEach((radio) => {
318
+ radio.removeEventListener("change", this.radioChangeHandler);
319
+ });
405
320
  }
406
- /**
407
- * Handle keyboard interaction for the select.
408
- *
409
- * @param e - the keyboard event
410
- * @internal
411
- */
412
- keydownHandler(e) {
413
- super.keydownHandler(e);
414
- const key = e.key || e.key.charCodeAt(0);
415
- switch (key) {
416
- case keySpace: {
417
- e.preventDefault();
418
- if (this.collapsible && this.typeAheadExpired) {
419
- this.open = !this.open;
420
- }
421
- break;
321
+ setupRadioButtons() {
322
+ const checkedRadios = this.slottedRadioButtons.filter((radio) => {
323
+ return radio.hasAttribute("checked");
324
+ });
325
+ const numberOfCheckedRadios = checkedRadios ? checkedRadios.length : 0;
326
+ if (numberOfCheckedRadios > 1) {
327
+ const lastCheckedRadio = checkedRadios[numberOfCheckedRadios - 1];
328
+ lastCheckedRadio.checked = true;
329
+ }
330
+ let foundMatchingVal = false;
331
+ this.slottedRadioButtons.forEach((radio) => {
332
+ if (this.name !== undefined) {
333
+ radio.setAttribute("name", this.name);
422
334
  }
423
- case keyHome:
424
- case keyEnd: {
425
- e.preventDefault();
426
- break;
335
+ if (this.disabled) {
336
+ radio.disabled = true;
427
337
  }
428
- case keyEnter: {
429
- e.preventDefault();
430
- this.open = !this.open;
431
- break;
338
+ if (this.readOnly) {
339
+ radio.readOnly = true;
432
340
  }
433
- case keyEscape: {
434
- if (this.collapsible && this.open) {
435
- e.preventDefault();
436
- this.open = false;
437
- }
438
- break;
341
+ if (this.value && this.value === radio.value) {
342
+ this.selectedRadio = radio;
343
+ this.focusedRadio = radio;
344
+ radio.checked = true;
345
+ radio.setAttribute("tabindex", "0");
346
+ foundMatchingVal = true;
439
347
  }
440
- case keyTab: {
441
- if (this.collapsible && this.open) {
442
- e.preventDefault();
443
- this.open = false;
348
+ else {
349
+ if (!this.isInsideFoundationToolbar) {
350
+ radio.setAttribute("tabindex", "-1");
444
351
  }
445
- return true;
352
+ radio.checked = false;
353
+ }
354
+ radio.addEventListener("change", this.radioChangeHandler);
355
+ });
356
+ if (this.value === undefined && this.slottedRadioButtons.length > 0) {
357
+ const checkedRadios = this.slottedRadioButtons.filter((radio) => {
358
+ return radio.hasAttribute("checked");
359
+ });
360
+ const numberOfCheckedRadios = checkedRadios !== null ? checkedRadios.length : 0;
361
+ if (numberOfCheckedRadios > 0 && !foundMatchingVal) {
362
+ const lastCheckedRadio = checkedRadios[numberOfCheckedRadios - 1];
363
+ lastCheckedRadio.checked = true;
364
+ this.focusedRadio = lastCheckedRadio;
365
+ lastCheckedRadio.setAttribute("tabindex", "0");
366
+ }
367
+ else {
368
+ this.slottedRadioButtons[0].setAttribute("tabindex", "0");
369
+ this.focusedRadio = this.slottedRadioButtons[0];
446
370
  }
447
- }
448
- if (!this.open && this.indexWhenOpened !== this.selectedIndex) {
449
- this.updateValue(true);
450
- this.indexWhenOpened = this.selectedIndex;
451
- }
452
- return !(key === keyArrowDown || key === keyArrowUp);
453
- }
454
- connectedCallback() {
455
- super.connectedCallback();
456
- this.forcedPosition = !!this.positionAttribute;
457
- this.addEventListener("contentchange", this.updateDisplayValue);
458
- }
459
- disconnectedCallback() {
460
- this.removeEventListener("contentchange", this.updateDisplayValue);
461
- super.disconnectedCallback();
462
- }
463
- /**
464
- * Updates the proxy's size property when the size attribute changes.
465
- *
466
- * @param prev - the previous size
467
- * @param next - the current size
468
- *
469
- * @override
470
- * @internal
471
- */
472
- sizeChanged(prev, next) {
473
- super.sizeChanged(prev, next);
474
- if (this.proxy) {
475
- this.proxy.size = next;
476
- }
477
- }
478
- /**
479
- *
480
- * @internal
481
- */
482
- updateDisplayValue() {
483
- if (this.collapsible) {
484
- Observable.notify(this, "displayValue");
485
371
  }
486
372
  }
487
373
  }
488
374
  __decorate([
489
- attr({ attribute: "open", mode: "boolean" })
490
- ], Select$1.prototype, "open", void 0);
375
+ attr({ attribute: "readonly", mode: "boolean" })
376
+ ], RadioGroup$1.prototype, "readOnly", void 0);
491
377
  __decorate([
492
- volatile
493
- ], Select$1.prototype, "collapsible", null);
378
+ attr({ attribute: "disabled", mode: "boolean" })
379
+ ], RadioGroup$1.prototype, "disabled", void 0);
494
380
  __decorate([
495
- observable
496
- ], Select$1.prototype, "control", void 0);
381
+ attr
382
+ ], RadioGroup$1.prototype, "name", void 0);
497
383
  __decorate([
498
- attr({ attribute: "position" })
499
- ], Select$1.prototype, "positionAttribute", void 0);
384
+ attr
385
+ ], RadioGroup$1.prototype, "value", void 0);
500
386
  __decorate([
501
- observable
502
- ], Select$1.prototype, "position", void 0);
387
+ attr
388
+ ], RadioGroup$1.prototype, "orientation", void 0);
503
389
  __decorate([
504
390
  observable
505
- ], Select$1.prototype, "maxHeight", void 0);
506
- /**
507
- * Includes ARIA states and properties relating to the ARIA select role.
508
- *
509
- * @public
510
- */
511
- class DelegatesARIASelect {
512
- }
391
+ ], RadioGroup$1.prototype, "childItems", void 0);
513
392
  __decorate([
514
393
  observable
515
- ], DelegatesARIASelect.prototype, "ariaControls", void 0);
516
- applyMixins(DelegatesARIASelect, DelegatesARIAListbox);
517
- applyMixins(Select$1, StartEnd, DelegatesARIASelect);
394
+ ], RadioGroup$1.prototype, "slottedRadioButtons", void 0);
518
395
 
519
- var css_248z = "/**\n * Do not edit directly\n * Generated on Wed, 08 Mar 2023 09:27:51 GMT\n */\n@supports selector(:focus-visible) {\n :host(:focus) {\n outline: none;\n }\n}\n:host {\n display: inline-flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.label {\n color: var(--vvd-color-canvas-text);\n contain: inline-size;\n font: var(--vvd-typography-base);\n}\n\n.control {\n display: flex;\n align-items: center;\n justify-content: space-between;\n background-color: var(--_appearance-color-fill);\n block-size: 100%;\n border-radius: var(--_select-control-border-radius);\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n color: var(--_appearance-color-text);\n font: var(--vvd-typography-base);\n gap: 8px;\n min-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\n padding-inline: 16px;\n transition: box-shadow 0.2s, background-color 0.2s;\n}\n.control {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--_connotation-color-backdrop);\n --_appearance-color-outline: var(--_connotation-color-intermediate);\n}\n.control.appearance-ghost {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.control:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--_connotation-color-backdrop);\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.control:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)).appearance-ghost {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: transparent;\n}\n.control:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-400);\n --_appearance-color-fill: var(--vvd-color-neutral-200);\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n.control:where(:disabled, .disabled).appearance-ghost {\n --_appearance-color-text: var(--vvd-color-neutral-400);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.control:where(.readonly):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--vvd-color-neutral-100);\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n.control:where(.readonly):where(:not(:disabled, .disabled)).appearance-ghost {\n --_appearance-color-text: var(--vvd-color-neutral-400);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.control.connotation-success {\n --_connotation-color-primary: var(--vvd-color-success-500);\n --_connotation-color-backdrop: var(--vvd-color-success-50);\n --_connotation-color-intermediate: var(--vvd-color-success-500);\n --_connotation-color-firm: var(--vvd-color-success-600);\n}\n.control.connotation-alert {\n --_connotation-color-primary: var(--vvd-color-alert-500);\n --_connotation-color-backdrop: var(--vvd-color-alert-50);\n --_connotation-color-intermediate: var(--vvd-color-alert-500);\n --_connotation-color-firm: var(--vvd-color-alert-600);\n}\n.control:not(.connotation-success, .connotation-alert) {\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-backdrop: var(--vvd-color-canvas);\n --_connotation-color-intermediate: var(--vvd-color-neutral-500);\n --_connotation-color-firm: var(--vvd-color-canvas-text);\n}\n.control-wrapper {\n position: relative;\n min-width: fit-content;\n}\n.control:not(.disabled) {\n cursor: pointer;\n}\n.control.disabled {\n cursor: not-allowed;\n pointer-events: none;\n}\n.control:not(.shape-pill) {\n --_select-control-border-radius: 6px;\n}\n.control.shape-pill {\n --_select-control-border-radius: 24px;\n}\n\n.list-box {\n display: flex;\n max-height: var(--select-height, auto);\n flex-direction: column;\n padding: 4px;\n gap: 2px;\n overflow-y: auto;\n}\n\n.popup {\n --_popup-width: 100%;\n}\n\n.focus-indicator {\n border-radius: var(--_select-control-border-radius);\n pointer-events: none;\n}\n:host(:not(:focus-visible)) .focus-indicator {\n display: none;\n}";
396
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 16 Mar 2023 08:36:16 GMT\n */\n.positioning-region {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n.positioning-region.vertical {\n flex-direction: column;\n}\nlabel + .positioning-region {\n margin-block-start: 8px;\n}\n\nlabel {\n color: var(--vvd-color-canvas-text);\n font: var(--vvd-typography-base);\n}";
520
397
 
521
- let Select = class Select extends Select$1 {
522
- connectedCallback() {
523
- super.connectedCallback();
524
- this._popup.anchor = this._anchor;
525
- }
526
- get displayValue() {
527
- var _a, _b, _c, _d;
528
- Observable.track(this, 'displayValue');
529
- return (_d = (_b = (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.getAttribute('label')) !== null && _b !== void 0 ? _b : (_c = this.firstSelectedOption) === null || _c === void 0 ? void 0 : _c.text) !== null && _d !== void 0 ? _d : '';
530
- }
531
- };
532
- __decorate([attr, __metadata("design:type", String)], Select.prototype, "appearance", void 0);
533
- __decorate([attr, __metadata("design:type", String)], Select.prototype, "shape", void 0);
534
- Select = __decorate([formElements], Select);
535
- applyMixins(Select, AffixIcon);
398
+ class RadioGroup extends RadioGroup$1 {}
399
+ __decorate([attr, __metadata("design:type", String)], RadioGroup.prototype, "label", void 0);
536
400
 
537
401
  let _ = t => t,
538
402
  _t,
539
- _t2,
540
- _t3,
541
- _t4;
542
- const getStateClasses = ({
543
- shape,
544
- disabled,
545
- appearance
546
- }) => classNames(['disabled', disabled], [`appearance-${appearance}`, Boolean(appearance)], [`shape-${shape}`, Boolean(shape)]);
547
- function renderLabel() {
403
+ _t2;
404
+ const RadioGroupTemplate = context => {
548
405
  return html(_t || (_t = _`
549
- <label for="control" class="label">
550
- ${0}
551
- </label>`), x => x.label);
552
- }
553
- function selectValue(context) {
554
- const affixIconTemplate = affixIconTemplateFactory(context);
555
- const focusTemplate = focusTemplateFactory(context);
556
- return html(_t2 || (_t2 = _`
557
- <div
558
- class="control ${0}"
559
- ?disabled="${0}"
560
- id="control"
561
- ${0}
562
- >
563
- <div class="selected-value">
564
- ${0}
565
- </div>
566
- ${0}
567
- ${0}
568
- </div>
569
- `), getStateClasses, x => x.disabled, ref('control'), x => x.displayValue, () => affixIconTemplate('chevron-down-line'), () => focusTemplate);
570
- }
571
- function renderControl(context) {
572
- const focusTemplate = focusTemplateFactory(context);
573
- const popupTag = context.tagFor(Popup);
574
- return html(_t3 || (_t3 = _`
406
+ <template
407
+ role="radiogroup"
408
+ aria-disabled="${0}"
409
+ aria-readonly="${0}"
410
+ aria-orientation="${0}"
411
+ @click="${0}"
412
+ @keydown="${0}"
413
+ @focusout="${0}"
414
+ >
415
+
575
416
  ${0}
576
- <div class="control-wrapper">
577
- ${0}
578
- <${0}
579
- ?open="${0}"
580
- anchor="control"
581
- strategy="absolute"
582
- ${0}
583
- class="popup"
584
- >
585
- <div
586
- id="${0}"
587
- role="listbox"
588
- ?disabled="${0}"
589
- ${0}
590
- class="list-box"
591
- >
592
- ${0}
593
- <slot
594
- ${0}
595
- ></slot>
596
- </div>
597
- </${0}>
598
- </div>
599
417
 
600
- `), when(x => x.label, renderLabel()), when(x => !x.multiple, selectValue(context)), popupTag, x => x.collapsible ? x.open : true, ref('_popup'), x => x.listboxId, x => x.disabled, ref('listbox'), when(x => x.multiple, focusTemplate), slotted({
601
- filter: Listbox$1.slottedOptionFilter,
602
- flatten: true,
603
- property: 'slottedOptions'
604
- }), popupTag);
605
- }
606
- const SelectTemplate = context => {
607
- return html(_t4 || (_t4 = _`
608
- <template class="base"
609
- ${0}
610
- aria-activedescendant="${0}"
611
- aria-controls="${0}"
612
- aria-disabled="${0}"
613
- aria-expanded="${0}"
614
- aria-haspopup="${0}"
615
- aria-multiselectable="${0}"
616
- ?open="${0}"
617
- role="select"
618
- tabindex="${0}"
619
- @click="${0}"
620
- @focusin="${0}"
621
- @focusout="${0}"
622
- @keydown="${0}"
623
- @mousedown="${0}"
624
- >
625
- ${0}
418
+ <div class="positioning-region ${0}">
419
+ <slot ${0}></slot>
420
+ </div>
626
421
  </template>
627
- // TODO:: add focus to the control-wrapper
628
- `), ref('_anchor'), x => x.ariaActiveDescendant, x => x.ariaControls, x => x.ariaDisabled, x => x.ariaExpanded, x => x.collapsible ? 'listbox' : null, x => x.ariaMultiSelectable, x => x.open, x => !x.disabled ? '0' : null, (x, c) => x.clickHandler(c.event), (x, c) => x.focusinHandler(c.event), (x, c) => x.focusoutHandler(c.event), (x, c) => x.keydownHandler(c.event), (x, c) => x.mousedownHandler(c.event), renderControl(context));
422
+ `), x => x.disabled, x => x.readOnly, x => x.orientation, (x, c) => x.clickHandler(c.event), (x, c) => x.keydownHandler(c.event), (x, c) => x.focusOutHandler(c.event), when(x => x.label, html(_t2 || (_t2 = _`<label>${0}</label>`), x => x.label)), x => x.orientation === Orientation$1.horizontal ? 'horizontal' : 'vertical', slotted({
423
+ property: 'slottedRadioButtons',
424
+ filter: elements(context.tagFor(Radio))
425
+ }));
629
426
  };
630
427
 
631
- const selectDefinition = Select.compose({
632
- baseName: 'select',
633
- template: SelectTemplate,
428
+ const radioGroupDefinition = RadioGroup.compose({
429
+ baseName: 'radio-group',
430
+ template: RadioGroupTemplate,
634
431
  styles: css_248z
635
432
  });
636
- const selectRegistries = [selectDefinition(), ...focusRegistries, ...popupRegistries, ...iconRegistries, ...listboxOptionRegistries];
637
- const registerSelect = registerFactory(selectRegistries);
433
+ const radioGroupRegistries = [radioGroupDefinition()];
434
+ const registerRadioGroup = registerFactory(radioGroupRegistries);
638
435
 
639
- export { selectRegistries as a, registerSelect as r, selectDefinition as s };
436
+ export { radioGroupDefinition as a, radioGroupRegistries as b, registerRadioGroup as r };