@vonage/vivid 3.24.0 → 3.26.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 (132) hide show
  1. package/accordion/index.js +0 -1
  2. package/accordion-item/index.js +0 -1
  3. package/alert/index.js +0 -1
  4. package/avatar/index.js +0 -1
  5. package/badge/index.js +0 -1
  6. package/banner/index.js +0 -1
  7. package/breadcrumb-item/index.js +0 -1
  8. package/button/index.js +0 -1
  9. package/card/index.js +0 -1
  10. package/checkbox/index.js +0 -1
  11. package/combobox/index.js +0 -1
  12. package/custom-elements.json +82 -10
  13. package/data-grid/index.js +7 -2
  14. package/dialog/index.js +0 -1
  15. package/empty-state/index.js +0 -1
  16. package/fab/index.js +0 -1
  17. package/icon/index.js +0 -1
  18. package/index.js +27 -29
  19. package/lib/action-group/action-group.d.ts +1 -1
  20. package/lib/avatar/avatar.d.ts +1 -1
  21. package/lib/checkbox/checkbox.d.ts +0 -1
  22. package/lib/components.d.ts +0 -2
  23. package/lib/data-grid/data-grid-cell.d.ts +14 -1
  24. package/lib/data-grid/data-grid.d.ts +4 -0
  25. package/lib/data-grid/data-grid.options.d.ts +7 -0
  26. package/lib/dialog/dialog.d.ts +1 -0
  27. package/lib/listbox/listbox.d.ts +1 -1
  28. package/lib/menu/menu.d.ts +0 -1
  29. package/lib/menu-item/menu-item.d.ts +6 -0
  30. package/lib/menu-item/menu-item.template.d.ts +2 -3
  31. package/lib/number-field/number-field.d.ts +1 -1
  32. package/lib/select/select.d.ts +1 -1
  33. package/lib/text-field/text-field.d.ts +1 -1
  34. package/listbox/index.js +56 -11
  35. package/menu/index.js +2 -3
  36. package/menu-item/index.js +2 -2
  37. package/nav/index.js +1 -1
  38. package/nav-disclosure/index.js +1 -2
  39. package/nav-item/index.js +1 -2
  40. package/note/index.js +1 -2
  41. package/number-field/index.js +1 -2
  42. package/option/index.js +0 -1
  43. package/package.json +1 -1
  44. package/pagination/index.js +1 -2
  45. package/popup/index.js +0 -1
  46. package/progress/index.js +1 -1
  47. package/radio/index.js +1 -1
  48. package/radio-group/index.js +1 -1
  49. package/select/index.js +1 -2
  50. package/shared/definition.js +1 -1
  51. package/shared/definition10.js +1 -1
  52. package/shared/definition11.js +1 -1
  53. package/shared/definition12.js +1 -1
  54. package/shared/definition14.js +1 -1
  55. package/shared/definition15.js +1 -1
  56. package/shared/definition16.js +2 -2
  57. package/shared/definition17.js +1 -1
  58. package/shared/definition18.js +1 -1
  59. package/shared/definition19.js +1 -1
  60. package/shared/definition2.js +1 -1
  61. package/shared/definition21.js +1 -1
  62. package/shared/definition22.js +76 -21
  63. package/shared/definition23.js +5 -4
  64. package/shared/definition24.js +1 -1
  65. package/shared/definition25.js +1 -1
  66. package/shared/definition26.js +1 -1
  67. package/shared/definition27.js +1 -1
  68. package/shared/definition29.js +368 -48
  69. package/shared/definition30.js +301 -298
  70. package/shared/definition31.js +14 -366
  71. package/shared/definition32.js +70 -13
  72. package/shared/definition33.js +25 -64
  73. package/shared/definition34.js +39 -27
  74. package/shared/definition35.js +431 -31
  75. package/shared/definition36.js +214 -430
  76. package/shared/definition37.js +70 -209
  77. package/shared/definition38.js +33 -81
  78. package/shared/definition39.js +423 -32
  79. package/shared/definition4.js +1 -1
  80. package/shared/definition40.js +586 -358
  81. package/shared/definition41.js +73 -648
  82. package/shared/definition42.js +584 -70
  83. package/shared/definition43.js +81 -538
  84. package/shared/definition44.js +52 -127
  85. package/shared/definition45.js +16 -56
  86. package/shared/definition46.js +485 -17
  87. package/shared/definition47.js +99 -477
  88. package/shared/definition48.js +19 -114
  89. package/shared/definition49.js +276 -19
  90. package/shared/definition5.js +1 -1
  91. package/shared/definition50.js +89 -245
  92. package/shared/definition51.js +629 -109
  93. package/shared/definition52.js +86 -601
  94. package/shared/definition53.js +68 -112
  95. package/shared/definition54.js +294 -69
  96. package/shared/definition6.js +1 -1
  97. package/shared/definition7.js +1 -1
  98. package/shared/definition8.js +2 -2
  99. package/shared/definition9.js +1 -1
  100. package/shared/es.object.assign.js +1 -1
  101. package/shared/es.regexp.to-string.js +1 -1
  102. package/shared/es.string.includes.js +1 -1
  103. package/shared/form-elements.js +1 -1
  104. package/shared/icon.js +17 -13
  105. package/shared/index.js +1 -1
  106. package/shared/patterns/form-elements/form-elements.d.ts +4 -4
  107. package/shared/string-trim.js +1 -1
  108. package/shared/text-field.js +1 -1
  109. package/shared/to-string.js +1 -1
  110. package/side-drawer/index.js +1 -1
  111. package/slider/index.js +1 -1
  112. package/styles/core/all.css +1 -1
  113. package/styles/core/theme.css +1 -1
  114. package/styles/core/typography.css +1 -1
  115. package/styles/tokens/theme-dark.css +4 -4
  116. package/styles/tokens/theme-light.css +4 -4
  117. package/switch/index.js +1 -2
  118. package/tab/index.js +1 -2
  119. package/tab-panel/index.js +1 -1
  120. package/tabs/index.js +3 -4
  121. package/tag/index.js +1 -2
  122. package/tag-group/index.js +1 -1
  123. package/text-anchor/index.js +0 -1
  124. package/text-area/index.js +1 -2
  125. package/text-field/index.js +3 -2
  126. package/toggletip/index.js +1 -2
  127. package/tooltip/index.js +1 -2
  128. package/tree-item/index.js +1 -2
  129. package/tree-view/index.js +1 -1
  130. package/vivid.api.json +19 -210
  131. package/shared/definition55.js +0 -305
  132. package/shared/engine-is-node.js +0 -8
@@ -1,46 +1,437 @@
1
- import { h as html, r as registerFactory } from './index.js';
2
- import { f as focusRegistries } from './definition4.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';
3
5
  import { R as Radio } from './radio.js';
4
- import { f as focusTemplateFactory } from './focus2.js';
6
+ import { e as elements } from './node-observation.js';
7
+ import { O as Orientation$1 } from './aria2.js';
8
+ import { s as slotted } from './slotted.js';
5
9
  import { w as when } from './when.js';
6
- import { c as classNames } from './class-names.js';
7
10
 
8
- var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 13 Jul 2023 12:46:24 GMT\n */\n@supports selector(:focus-visible) {\n :host(:focus) {\n outline: none;\n }\n}\n.base {\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n gap: 8px;\n}\n.base.connotation-cta {\n /* @cssprop [--vvd-radio-cta-primary=var(--vvd-color-cta-500)] */\n --_connotation-color-primary: var(--vvd-radio-cta-primary, var(--vvd-color-cta-500));\n /* @cssprop [--vvd-radio-cta-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-radio-cta-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-radio-cta-primary-increment=var(--vvd-color-cta-600)] */\n --_connotation-color-primary-increment: var(--vvd-radio-cta-primary-increment, var(--vvd-color-cta-600));\n /* @cssprop [--vvd-radio-cta-intermediate=var(--vvd-color-cta-500)] */\n --_connotation-color-intermediate: var(--vvd-radio-cta-intermediate, var(--vvd-color-cta-500));\n /* @cssprop [--vvd-radio-cta-backdrop=var(--vvd-color-cta-50)] */\n --_connotation-color-backdrop: var(--vvd-radio-cta-backdrop, var(--vvd-color-cta-50));\n /* @cssprop [--vvd-radio-cta-firm=var(--vvd-color-cta-600)] */\n --_connotation-color-firm: var(--vvd-radio-cta-firm, var(--vvd-color-cta-600));\n}\n.base:not(.connotation-cta) {\n /* @cssprop [--vvd-radio-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-radio-accent-primary, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-radio-accent-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-radio-accent-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-radio-accent-primary-increment=var(--vvd-color-neutral-800)] */\n --_connotation-color-primary-increment: var(--vvd-radio-accent-primary-increment, var(--vvd-color-neutral-800));\n /* @cssprop [--vvd-radio-accent-intermediate=var(--vvd-color-neutral-500)] */\n --_connotation-color-intermediate: var(--vvd-radio-accent-intermediate, var(--vvd-color-neutral-500));\n /* @cssprop [--vvd-radio-accent-backdrop=var(--vvd-color-canvas)] */\n --_connotation-color-backdrop: var(--vvd-radio-accent-backdrop, var(--vvd-color-canvas));\n /* @cssprop [--vvd-radio-accent-firm=var(--vvd-color-canvas-text)] */\n --_connotation-color-firm: var(--vvd-radio-accent-firm, var(--vvd-color-canvas-text));\n}\n.base {\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.base: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.base:where(:checked, .checked):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary);\n --_appearance-color-outline: var(--_connotation-color-primary);\n}\n.base:where(:checked, .checked):where(:hover, .hover) {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary-increment);\n --_appearance-color-outline: var(--_connotation-color-primary);\n}\n.base:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: var(--vvd-color-neutral-100);\n --_appearance-color-outline: var(--vvd-color-neutral-300);\n}\n.base:where(.readonly):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--vvd-color-neutral-200);\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n@supports (user-select: none) {\n .base {\n user-select: none;\n }\n}\n.base.disabled {\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.control {\n position: relative;\n flex-shrink: 0;\n block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 20));\n border-radius: 50%;\n box-shadow: inset 0 0 0 2px var(--_appearance-color-outline);\n inline-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 20));\n}\n.base:not(.checked) .control {\n background-color: var(--_appearance-color-fill);\n}\n.control::after {\n position: absolute;\n background-color: var(--_appearance-color-outline);\n border-radius: inherit;\n content: \"\";\n inset: 5px;\n opacity: 1;\n transition: opacity 0.2s;\n}\n.base:not(.checked) .control::after {\n opacity: 0;\n}\n\nlabel {\n color: var(--vvd-color-canvas-text);\n cursor: pointer;\n font: var(--vvd-typography-base);\n}\n\n.focus-indicator {\n --focus-inset: -3px;\n --focus-stroke-gap-color: transparent;\n border-radius: 50%;\n}\n:host(:not(:focus-visible)) .focus-indicator {\n display: none;\n}";
11
+ /**
12
+ * An Radio Group Custom HTML Element.
13
+ * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#radiogroup | ARIA radiogroup }.
14
+ *
15
+ * @slot label - The slot for the label
16
+ * @slot - The default slot for radio buttons
17
+ * @csspart positioning-region - The positioning region for laying out the radios
18
+ * @fires change - Fires a custom 'change' event when the value changes
19
+ *
20
+ * @public
21
+ */
22
+ class RadioGroup$1 extends FoundationElement {
23
+ constructor() {
24
+ super(...arguments);
25
+ /**
26
+ * The orientation of the group
27
+ *
28
+ * @public
29
+ * @remarks
30
+ * HTML Attribute: orientation
31
+ */
32
+ this.orientation = Orientation.horizontal;
33
+ this.radioChangeHandler = (e) => {
34
+ const changedRadio = e.target;
35
+ if (changedRadio.checked) {
36
+ this.slottedRadioButtons.forEach((radio) => {
37
+ if (radio !== changedRadio) {
38
+ radio.checked = false;
39
+ if (!this.isInsideFoundationToolbar) {
40
+ radio.setAttribute("tabindex", "-1");
41
+ }
42
+ }
43
+ });
44
+ this.selectedRadio = changedRadio;
45
+ this.value = changedRadio.value;
46
+ changedRadio.setAttribute("tabindex", "0");
47
+ this.focusedRadio = changedRadio;
48
+ }
49
+ e.stopPropagation();
50
+ };
51
+ this.moveToRadioByIndex = (group, index) => {
52
+ const radio = group[index];
53
+ if (!this.isInsideToolbar) {
54
+ radio.setAttribute("tabindex", "0");
55
+ if (radio.readOnly) {
56
+ this.slottedRadioButtons.forEach((nextRadio) => {
57
+ if (nextRadio !== radio) {
58
+ nextRadio.setAttribute("tabindex", "-1");
59
+ }
60
+ });
61
+ }
62
+ else {
63
+ radio.checked = true;
64
+ this.selectedRadio = radio;
65
+ }
66
+ }
67
+ this.focusedRadio = radio;
68
+ radio.focus();
69
+ };
70
+ this.moveRightOffGroup = () => {
71
+ var _a;
72
+ (_a = this.nextElementSibling) === null || _a === void 0 ? void 0 : _a.focus();
73
+ };
74
+ this.moveLeftOffGroup = () => {
75
+ var _a;
76
+ (_a = this.previousElementSibling) === null || _a === void 0 ? void 0 : _a.focus();
77
+ };
78
+ /**
79
+ * @internal
80
+ */
81
+ this.focusOutHandler = (e) => {
82
+ const group = this.slottedRadioButtons;
83
+ const radio = e.target;
84
+ const index = radio !== null ? group.indexOf(radio) : 0;
85
+ const focusedIndex = this.focusedRadio
86
+ ? group.indexOf(this.focusedRadio)
87
+ : -1;
88
+ if ((focusedIndex === 0 && index === focusedIndex) ||
89
+ (focusedIndex === group.length - 1 && focusedIndex === index)) {
90
+ if (!this.selectedRadio) {
91
+ this.focusedRadio = group[0];
92
+ this.focusedRadio.setAttribute("tabindex", "0");
93
+ group.forEach((nextRadio) => {
94
+ if (nextRadio !== this.focusedRadio) {
95
+ nextRadio.setAttribute("tabindex", "-1");
96
+ }
97
+ });
98
+ }
99
+ else {
100
+ this.focusedRadio = this.selectedRadio;
101
+ if (!this.isInsideFoundationToolbar) {
102
+ this.selectedRadio.setAttribute("tabindex", "0");
103
+ group.forEach((nextRadio) => {
104
+ if (nextRadio !== this.selectedRadio) {
105
+ nextRadio.setAttribute("tabindex", "-1");
106
+ }
107
+ });
108
+ }
109
+ }
110
+ }
111
+ return true;
112
+ };
113
+ /**
114
+ * @internal
115
+ */
116
+ this.clickHandler = (e) => {
117
+ const radio = e.target;
118
+ if (radio) {
119
+ const group = this.slottedRadioButtons;
120
+ if (radio.checked || group.indexOf(radio) === 0) {
121
+ radio.setAttribute("tabindex", "0");
122
+ this.selectedRadio = radio;
123
+ }
124
+ else {
125
+ radio.setAttribute("tabindex", "-1");
126
+ this.selectedRadio = null;
127
+ }
128
+ this.focusedRadio = radio;
129
+ }
130
+ e.preventDefault();
131
+ };
132
+ this.shouldMoveOffGroupToTheRight = (index, group, key) => {
133
+ return index === group.length && this.isInsideToolbar && key === keyArrowRight;
134
+ };
135
+ this.shouldMoveOffGroupToTheLeft = (group, key) => {
136
+ const index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0;
137
+ return index < 0 && this.isInsideToolbar && key === keyArrowLeft;
138
+ };
139
+ this.checkFocusedRadio = () => {
140
+ if (this.focusedRadio !== null &&
141
+ !this.focusedRadio.readOnly &&
142
+ !this.focusedRadio.checked) {
143
+ this.focusedRadio.checked = true;
144
+ this.focusedRadio.setAttribute("tabindex", "0");
145
+ this.focusedRadio.focus();
146
+ this.selectedRadio = this.focusedRadio;
147
+ }
148
+ };
149
+ this.moveRight = (e) => {
150
+ const group = this.slottedRadioButtons;
151
+ let index = 0;
152
+ index = this.focusedRadio ? group.indexOf(this.focusedRadio) + 1 : 1;
153
+ if (this.shouldMoveOffGroupToTheRight(index, group, e.key)) {
154
+ this.moveRightOffGroup();
155
+ return;
156
+ }
157
+ else if (index === group.length) {
158
+ index = 0;
159
+ }
160
+ /* looping to get to next radio that is not disabled */
161
+ /* matching native radio/radiogroup which does not select an item if there is only 1 in the group */
162
+ while (index < group.length && group.length > 1) {
163
+ if (!group[index].disabled) {
164
+ this.moveToRadioByIndex(group, index);
165
+ break;
166
+ }
167
+ else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) {
168
+ break;
169
+ }
170
+ else if (index + 1 >= group.length) {
171
+ if (this.isInsideToolbar) {
172
+ break;
173
+ }
174
+ else {
175
+ index = 0;
176
+ }
177
+ }
178
+ else {
179
+ index += 1;
180
+ }
181
+ }
182
+ };
183
+ this.moveLeft = (e) => {
184
+ const group = this.slottedRadioButtons;
185
+ let index = 0;
186
+ index = this.focusedRadio ? group.indexOf(this.focusedRadio) - 1 : 0;
187
+ index = index < 0 ? group.length - 1 : index;
188
+ if (this.shouldMoveOffGroupToTheLeft(group, e.key)) {
189
+ this.moveLeftOffGroup();
190
+ return;
191
+ }
192
+ /* looping to get to next radio that is not disabled */
193
+ while (index >= 0 && group.length > 1) {
194
+ if (!group[index].disabled) {
195
+ this.moveToRadioByIndex(group, index);
196
+ break;
197
+ }
198
+ else if (this.focusedRadio && index === group.indexOf(this.focusedRadio)) {
199
+ break;
200
+ }
201
+ else if (index - 1 < 0) {
202
+ index = group.length - 1;
203
+ }
204
+ else {
205
+ index -= 1;
206
+ }
207
+ }
208
+ };
209
+ /**
210
+ * keyboard handling per https://w3c.github.io/aria-practices/#for-radio-groups-not-contained-in-a-toolbar
211
+ * navigation is different when there is an ancestor with role='toolbar'
212
+ *
213
+ * @internal
214
+ */
215
+ this.keydownHandler = (e) => {
216
+ const key = e.key;
217
+ if (key in ArrowKeys && this.isInsideFoundationToolbar) {
218
+ return true;
219
+ }
220
+ switch (key) {
221
+ case keyEnter: {
222
+ this.checkFocusedRadio();
223
+ break;
224
+ }
225
+ case keyArrowRight:
226
+ case keyArrowDown: {
227
+ if (this.direction === Direction.ltr) {
228
+ this.moveRight(e);
229
+ }
230
+ else {
231
+ this.moveLeft(e);
232
+ }
233
+ break;
234
+ }
235
+ case keyArrowLeft:
236
+ case keyArrowUp: {
237
+ if (this.direction === Direction.ltr) {
238
+ this.moveLeft(e);
239
+ }
240
+ else {
241
+ this.moveRight(e);
242
+ }
243
+ break;
244
+ }
245
+ default: {
246
+ return true;
247
+ }
248
+ }
249
+ };
250
+ }
251
+ readOnlyChanged() {
252
+ if (this.slottedRadioButtons !== undefined) {
253
+ this.slottedRadioButtons.forEach((radio) => {
254
+ if (this.readOnly) {
255
+ radio.readOnly = true;
256
+ }
257
+ else {
258
+ radio.readOnly = false;
259
+ }
260
+ });
261
+ }
262
+ }
263
+ disabledChanged() {
264
+ if (this.slottedRadioButtons !== undefined) {
265
+ this.slottedRadioButtons.forEach((radio) => {
266
+ if (this.disabled) {
267
+ radio.disabled = true;
268
+ }
269
+ else {
270
+ radio.disabled = false;
271
+ }
272
+ });
273
+ }
274
+ }
275
+ nameChanged() {
276
+ if (this.slottedRadioButtons) {
277
+ this.slottedRadioButtons.forEach((radio) => {
278
+ radio.setAttribute("name", this.name);
279
+ });
280
+ }
281
+ }
282
+ valueChanged() {
283
+ if (this.slottedRadioButtons) {
284
+ this.slottedRadioButtons.forEach((radio) => {
285
+ if (radio.value === this.value) {
286
+ radio.checked = true;
287
+ this.selectedRadio = radio;
288
+ }
289
+ });
290
+ }
291
+ this.$emit("change");
292
+ }
293
+ slottedRadioButtonsChanged(oldValue, newValue) {
294
+ if (this.slottedRadioButtons && this.slottedRadioButtons.length > 0) {
295
+ this.setupRadioButtons();
296
+ }
297
+ }
298
+ get parentToolbar() {
299
+ return this.closest('[role="toolbar"]');
300
+ }
301
+ get isInsideToolbar() {
302
+ var _a;
303
+ return ((_a = this.parentToolbar) !== null && _a !== void 0 ? _a : false);
304
+ }
305
+ get isInsideFoundationToolbar() {
306
+ var _a;
307
+ return !!((_a = this.parentToolbar) === null || _a === void 0 ? void 0 : _a["$fastController"]);
308
+ }
309
+ /**
310
+ * @internal
311
+ */
312
+ connectedCallback() {
313
+ super.connectedCallback();
314
+ this.direction = getDirection(this);
315
+ this.setupRadioButtons();
316
+ }
317
+ disconnectedCallback() {
318
+ this.slottedRadioButtons.forEach((radio) => {
319
+ radio.removeEventListener("change", this.radioChangeHandler);
320
+ });
321
+ }
322
+ setupRadioButtons() {
323
+ const checkedRadios = this.slottedRadioButtons.filter((radio) => {
324
+ return radio.hasAttribute("checked");
325
+ });
326
+ const numberOfCheckedRadios = checkedRadios ? checkedRadios.length : 0;
327
+ if (numberOfCheckedRadios > 1) {
328
+ const lastCheckedRadio = checkedRadios[numberOfCheckedRadios - 1];
329
+ lastCheckedRadio.checked = true;
330
+ }
331
+ let foundMatchingVal = false;
332
+ this.slottedRadioButtons.forEach((radio) => {
333
+ if (this.name !== undefined) {
334
+ radio.setAttribute("name", this.name);
335
+ }
336
+ if (this.disabled) {
337
+ radio.disabled = true;
338
+ }
339
+ if (this.readOnly) {
340
+ radio.readOnly = true;
341
+ }
342
+ if (this.value && this.value === radio.value) {
343
+ this.selectedRadio = radio;
344
+ this.focusedRadio = radio;
345
+ radio.checked = true;
346
+ radio.setAttribute("tabindex", "0");
347
+ foundMatchingVal = true;
348
+ }
349
+ else {
350
+ if (!this.isInsideFoundationToolbar) {
351
+ radio.setAttribute("tabindex", "-1");
352
+ }
353
+ radio.checked = false;
354
+ }
355
+ radio.addEventListener("change", this.radioChangeHandler);
356
+ });
357
+ if (this.value === undefined && this.slottedRadioButtons.length > 0) {
358
+ const checkedRadios = this.slottedRadioButtons.filter((radio) => {
359
+ return radio.hasAttribute("checked");
360
+ });
361
+ const numberOfCheckedRadios = checkedRadios !== null ? checkedRadios.length : 0;
362
+ if (numberOfCheckedRadios > 0 && !foundMatchingVal) {
363
+ const lastCheckedRadio = checkedRadios[numberOfCheckedRadios - 1];
364
+ lastCheckedRadio.checked = true;
365
+ this.focusedRadio = lastCheckedRadio;
366
+ lastCheckedRadio.setAttribute("tabindex", "0");
367
+ }
368
+ else {
369
+ this.slottedRadioButtons[0].setAttribute("tabindex", "0");
370
+ this.focusedRadio = this.slottedRadioButtons[0];
371
+ }
372
+ }
373
+ }
374
+ }
375
+ __decorate([
376
+ attr({ attribute: "readonly", mode: "boolean" })
377
+ ], RadioGroup$1.prototype, "readOnly", void 0);
378
+ __decorate([
379
+ attr({ attribute: "disabled", mode: "boolean" })
380
+ ], RadioGroup$1.prototype, "disabled", void 0);
381
+ __decorate([
382
+ attr
383
+ ], RadioGroup$1.prototype, "name", void 0);
384
+ __decorate([
385
+ attr
386
+ ], RadioGroup$1.prototype, "value", void 0);
387
+ __decorate([
388
+ attr
389
+ ], RadioGroup$1.prototype, "orientation", void 0);
390
+ __decorate([
391
+ observable
392
+ ], RadioGroup$1.prototype, "childItems", void 0);
393
+ __decorate([
394
+ observable
395
+ ], RadioGroup$1.prototype, "slottedRadioButtons", void 0);
396
+
397
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Tue, 25 Jul 2023 07:38:24 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}";
398
+
399
+ class RadioGroup extends RadioGroup$1 {}
400
+ __decorate([attr, __metadata("design:type", String)], RadioGroup.prototype, "label", void 0);
9
401
 
10
402
  let _ = t => t,
11
403
  _t,
12
404
  _t2;
13
- const getClasses = ({
14
- connotation,
15
- checked,
16
- readOnly,
17
- disabled
18
- }) => classNames('base', [`connotation-${connotation}`, Boolean(connotation)], ['checked', Boolean(checked)], ['readonly', Boolean(readOnly)], ['disabled', Boolean(disabled)]);
19
- const RadioTemplate = context => {
20
- const focusTemplate = focusTemplateFactory(context);
405
+ const RadioGroupTemplate = context => {
21
406
  return html(_t || (_t = _`
22
- <div class="${0}"
23
- role="radio"
24
- aria-checked="${0}"
25
- aria-required="${0}"
26
- aria-disabled="${0}"
27
- @keypress="${0}"
28
- @click="${0}"
29
- >
30
- <div class="control">
407
+ <template
408
+ role="radiogroup"
409
+ aria-disabled="${0}"
410
+ aria-readonly="${0}"
411
+ aria-orientation="${0}"
412
+ @click="${0}"
413
+ @keydown="${0}"
414
+ @focusout="${0}"
415
+ >
416
+
31
417
  ${0}
32
- </div>
33
- ${0}
34
- </div>
35
- `), getClasses, x => x.checked, x => x.required, x => x.disabled, (x, c) => x.keypressHandler(c.event), (x, c) => x.clickHandler(c.event), () => focusTemplate, when(x => x.label, html(_t2 || (_t2 = _`<label class="label">${0}</label>`), x => x.label)));
418
+
419
+ <div class="positioning-region ${0}">
420
+ <slot ${0}></slot>
421
+ </div>
422
+ </template>
423
+ `), 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({
424
+ property: 'slottedRadioButtons',
425
+ filter: elements(context.tagFor(Radio))
426
+ }));
36
427
  };
37
428
 
38
- const radioDefinition = Radio.compose({
39
- baseName: 'radio',
40
- template: RadioTemplate,
429
+ const radioGroupDefinition = RadioGroup.compose({
430
+ baseName: 'radio-group',
431
+ template: RadioGroupTemplate,
41
432
  styles: css_248z
42
433
  });
43
- const radioRegistries = [radioDefinition(), ...focusRegistries];
44
- const registerRadio = registerFactory(radioRegistries);
434
+ const radioGroupRegistries = [radioGroupDefinition()];
435
+ const registerRadioGroup = registerFactory(radioGroupRegistries);
45
436
 
46
- export { radioDefinition as a, radioRegistries as b, registerRadio as r };
437
+ export { radioGroupDefinition as a, radioGroupRegistries as b, registerRadioGroup as r };
@@ -1,7 +1,7 @@
1
1
  import { h as html, r as registerFactory } from './index.js';
2
2
  import { F as Focus } from './focus.js';
3
3
 
4
- var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 13 Jul 2023 12:46:24 GMT\n */\n:host {\n display: contents;\n border-radius: inherit;\n}\n\n.control {\n position: absolute;\n z-index: 1;\n box-sizing: border-box;\n border-radius: inherit;\n box-shadow: inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);\n inset: var(--focus-inset, 0);\n outline: 2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));\n outline-offset: -2px;\n}";
4
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Tue, 25 Jul 2023 07:38:24 GMT\n */\n:host {\n display: contents;\n border-radius: inherit;\n}\n\n.control {\n position: absolute;\n z-index: 1;\n box-sizing: border-box;\n border-radius: inherit;\n box-shadow: inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);\n inset: var(--focus-inset, 0);\n outline: 2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));\n outline-offset: -2px;\n}";
5
5
 
6
6
  let _ = t => t,
7
7
  _t;