@vonage/vivid 3.32.0 → 3.34.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 (218) hide show
  1. package/accordion/index.js +5 -5
  2. package/accordion-item/index.js +4 -4
  3. package/action-group/index.js +1 -1
  4. package/alert/index.js +6 -6
  5. package/avatar/index.js +2 -2
  6. package/badge/index.js +2 -2
  7. package/banner/index.js +5 -5
  8. package/breadcrumb/index.js +1 -1
  9. package/breadcrumb-item/index.js +3 -3
  10. package/button/index.js +4 -4
  11. package/calendar/index.js +1 -1
  12. package/calendar-event/index.js +1 -1
  13. package/card/index.js +3 -3
  14. package/checkbox/index.js +5 -3
  15. package/combobox/index.js +8 -8
  16. package/custom-elements.json +246 -16
  17. package/data-grid/index.js +2 -2
  18. package/date-picker/index.js +9 -9
  19. package/dialog/index.js +6 -6
  20. package/divider/index.js +1 -1
  21. package/elevation/index.js +1 -1
  22. package/empty-state/index.js +2 -2
  23. package/fab/index.js +4 -4
  24. package/file-picker/index.js +5 -5
  25. package/focus/index.js +1 -1
  26. package/header/index.js +2 -2
  27. package/icon/index.js +1 -1
  28. package/index.js +59 -59
  29. package/layout/index.js +1 -1
  30. package/lib/calendar/calendar.d.ts +1 -1
  31. package/lib/date-picker/calendar/dateStr.d.ts +1 -0
  32. package/lib/date-picker/calendar/month.d.ts +1 -0
  33. package/lib/date-picker/calendar/year.d.ts +2 -0
  34. package/lib/date-picker/date-picker.d.ts +2 -0
  35. package/lib/icon/icon.d.ts +0 -1
  36. package/lib/listbox/listbox.d.ts +9 -1
  37. package/lib/text-field/text-field.d.ts +1 -0
  38. package/listbox/index.js +20 -16
  39. package/locales/en-GB.js +48 -14
  40. package/locales/en-US.js +48 -14
  41. package/locales/ja-JP.js +48 -14
  42. package/locales/zh-CN.js +48 -14
  43. package/menu/index.js +8 -8
  44. package/menu-item/index.js +4 -4
  45. package/nav/index.js +1 -1
  46. package/nav-disclosure/index.js +3 -3
  47. package/nav-item/index.js +3 -3
  48. package/note/index.js +2 -3
  49. package/number-field/index.js +6 -6
  50. package/option/index.js +3 -3
  51. package/package.json +2 -16
  52. package/pagination/index.js +5 -5
  53. package/popup/index.js +6 -6
  54. package/progress/index.js +1 -1
  55. package/progress-ring/index.js +1 -1
  56. package/radio/index.js +2 -2
  57. package/radio-group/index.js +1 -1
  58. package/select/index.js +8 -8
  59. package/shared/affix.js +25 -9
  60. package/shared/apply-mixins.js +1 -1
  61. package/shared/breadcrumb-item.js +5 -5
  62. package/shared/button.js +13 -13
  63. package/shared/calendar-event.js +36 -16
  64. package/shared/definition.js +133 -194
  65. package/shared/definition10.js +225 -40
  66. package/shared/definition11.js +36 -32
  67. package/shared/definition12.js +763 -98
  68. package/shared/definition13.js +125 -89
  69. package/shared/definition14.js +207 -27
  70. package/shared/definition15.js +710 -731
  71. package/shared/definition16.js +1289 -47
  72. package/shared/definition17.js +6113 -93
  73. package/shared/definition18.js +242 -164
  74. package/shared/definition19.js +47 -692
  75. package/shared/definition2.js +199 -117
  76. package/shared/definition20.js +59 -1671
  77. package/shared/definition21.js +95 -255
  78. package/shared/definition22.js +2218 -1167
  79. package/shared/definition23.js +61 -5784
  80. package/shared/definition24.js +28 -117
  81. package/shared/definition25.js +52 -66
  82. package/shared/definition26.js +391 -214
  83. package/shared/definition27.js +441 -34
  84. package/shared/definition28.js +85 -73
  85. package/shared/definition29.js +21 -2283
  86. package/shared/definition3.js +61 -24
  87. package/shared/definition30.js +13 -49
  88. package/shared/definition31.js +54 -39
  89. package/shared/definition32.js +413 -375
  90. package/shared/definition33.js +223 -304
  91. package/shared/definition34.js +197 -13
  92. package/shared/definition35.js +88 -73
  93. package/shared/definition36.js +75 -25
  94. package/shared/definition37.js +434 -34
  95. package/shared/definition38.js +32 -432
  96. package/shared/definition39.js +677 -187
  97. package/shared/definition4.js +157 -12
  98. package/shared/definition40.js +95 -48
  99. package/shared/definition41.js +577 -31
  100. package/shared/definition42.js +126 -424
  101. package/shared/definition43.js +114 -618
  102. package/shared/definition44.js +24 -80
  103. package/shared/definition45.js +71 -543
  104. package/shared/definition46.js +499 -92
  105. package/shared/definition47.js +19 -133
  106. package/shared/definition48.js +129 -52
  107. package/shared/definition49.js +281 -17
  108. package/shared/definition5.js +71 -36
  109. package/shared/definition50.js +153 -484
  110. package/shared/definition51.js +131 -98
  111. package/shared/definition52.js +131 -16
  112. package/shared/definition53.js +80 -264
  113. package/shared/definition54.js +293 -118
  114. package/shared/definition55.js +12 -117
  115. package/shared/definition56.js +39 -68
  116. package/shared/definition57.js +166 -288
  117. package/shared/definition6.js +56 -111
  118. package/shared/definition7.js +120 -195
  119. package/shared/definition8.js +58 -23
  120. package/shared/definition9.js +92 -66
  121. package/shared/focus.js +2 -1
  122. package/shared/focus2.js +1 -1
  123. package/shared/form-associated.js +2 -2
  124. package/shared/icon.js +48 -27
  125. package/shared/index.js +7 -27
  126. package/shared/index2.js +108 -80
  127. package/shared/key-codes.js +1 -1
  128. package/shared/listbox.js +88 -11
  129. package/shared/patterns/form-elements/form-elements.d.ts +4 -4
  130. package/shared/radio.js +23 -7
  131. package/shared/repeat.js +1 -1
  132. package/shared/text-anchor.js +21 -4
  133. package/shared/text-anchor.template.js +37 -40
  134. package/shared/text-field.js +2 -2
  135. package/shared/text-field2.js +15 -15
  136. package/shared/tree-item.js +12 -12
  137. package/side-drawer/index.js +1 -1
  138. package/slider/index.js +2 -2
  139. package/split-button/index.js +3 -3
  140. package/style.css +6097 -0
  141. package/styles/core/all.css +1 -1
  142. package/styles/core/theme.css +1 -1
  143. package/styles/core/typography.css +1 -1
  144. package/styles/tokens/theme-dark.css +4 -4
  145. package/styles/tokens/theme-light.css +4 -4
  146. package/styles/tokens/vivid-2-compat.css +1 -1
  147. package/switch/index.js +3 -3
  148. package/tab/index.js +3 -3
  149. package/tab-panel/index.js +1 -1
  150. package/tabs/index.js +5 -5
  151. package/tag/index.js +3 -3
  152. package/tag-group/index.js +1 -1
  153. package/text-anchor/index.js +1 -1
  154. package/text-area/index.js +3 -3
  155. package/text-field/index.js +3 -3
  156. package/toggletip/index.js +7 -7
  157. package/tooltip/index.js +7 -7
  158. package/tree-item/index.js +3 -3
  159. package/tree-view/index.js +1 -1
  160. package/lib/accordion/index.d.ts +0 -1
  161. package/lib/accordion-item/index.d.ts +0 -1
  162. package/lib/action-group/index.d.ts +0 -1
  163. package/lib/alert/index.d.ts +0 -1
  164. package/lib/avatar/index.d.ts +0 -1
  165. package/lib/badge/index.d.ts +0 -1
  166. package/lib/banner/index.d.ts +0 -1
  167. package/lib/breadcrumb/index.d.ts +0 -1
  168. package/lib/breadcrumb-item/index.d.ts +0 -1
  169. package/lib/button/index.d.ts +0 -1
  170. package/lib/calendar/index.d.ts +0 -1
  171. package/lib/calendar-event/index.d.ts +0 -1
  172. package/lib/card/index.d.ts +0 -1
  173. package/lib/checkbox/index.d.ts +0 -1
  174. package/lib/combobox/index.d.ts +0 -1
  175. package/lib/data-grid/index.d.ts +0 -1
  176. package/lib/date-picker/index.d.ts +0 -1
  177. package/lib/dialog/index.d.ts +0 -1
  178. package/lib/divider/index.d.ts +0 -1
  179. package/lib/elevation/index.d.ts +0 -1
  180. package/lib/empty-state/index.d.ts +0 -1
  181. package/lib/fab/index.d.ts +0 -1
  182. package/lib/file-picker/index.d.ts +0 -1
  183. package/lib/focus/index.d.ts +0 -1
  184. package/lib/header/index.d.ts +0 -1
  185. package/lib/icon/index.d.ts +0 -1
  186. package/lib/layout/index.d.ts +0 -1
  187. package/lib/listbox/index.d.ts +0 -1
  188. package/lib/menu/index.d.ts +0 -1
  189. package/lib/menu-item/index.d.ts +0 -1
  190. package/lib/nav/index.d.ts +0 -1
  191. package/lib/nav-disclosure/index.d.ts +0 -1
  192. package/lib/nav-item/index.d.ts +0 -1
  193. package/lib/note/index.d.ts +0 -1
  194. package/lib/number-field/index.d.ts +0 -1
  195. package/lib/option/index.d.ts +0 -1
  196. package/lib/pagination/index.d.ts +0 -1
  197. package/lib/popup/index.d.ts +0 -1
  198. package/lib/progress/index.d.ts +0 -1
  199. package/lib/progress-ring/index.d.ts +0 -1
  200. package/lib/radio/index.d.ts +0 -1
  201. package/lib/radio-group/index.d.ts +0 -1
  202. package/lib/select/index.d.ts +0 -1
  203. package/lib/side-drawer/index.d.ts +0 -1
  204. package/lib/slider/index.d.ts +0 -1
  205. package/lib/split-button/index.d.ts +0 -1
  206. package/lib/switch/index.d.ts +0 -1
  207. package/lib/tab/index.d.ts +0 -1
  208. package/lib/tab-panel/index.d.ts +0 -1
  209. package/lib/tabs/index.d.ts +0 -1
  210. package/lib/tag/index.d.ts +0 -1
  211. package/lib/tag-group/index.d.ts +0 -1
  212. package/lib/text-anchor/index.d.ts +0 -1
  213. package/lib/text-area/index.d.ts +0 -1
  214. package/lib/text-field/index.d.ts +0 -1
  215. package/lib/toggletip/index.d.ts +0 -1
  216. package/lib/tooltip/index.d.ts +0 -1
  217. package/lib/tree-item/index.d.ts +0 -1
  218. package/lib/tree-view/index.d.ts +0 -1
@@ -1,434 +1,136 @@
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 { O as Orientation$1 } from './aria2.js';
7
- import { e as elements } from './node-observation.js';
8
- import { w as when } from './when.js';
9
- import { s as slotted } from './slotted.js';
1
+ import { a as attr, F as FoundationElement, h as html, r as registerFactory } from './index.js';
2
+ import { a as iconRegistries } from './definition24.js';
3
+ import { f as focusRegistries } from './definition55.js';
4
+ import { A as AffixIcon, a as affixIconTemplateFactory } from './affix.js';
5
+ import { a as applyMixins } from './apply-mixins.js';
6
+ import { f as focusTemplateFactory } from './focus2.js';
7
+ import { r as ref } from './ref.js';
8
+ import { c as classNames } from './class-names.js';
10
9
 
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
- }
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __decorateClass = (decorators, target, key, kind) => {
13
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
14
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
15
+ if (decorator = decorators[i])
16
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
17
+ if (kind && result)
18
+ __defProp(target, key, result);
19
+ return result;
20
+ };
21
+ class SplitButton extends FoundationElement {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.splitIndicator = "chevron-down-line";
25
+ this.disabled = false;
26
+ this.ariaLabel = null;
27
+ this.ariaExpanded = null;
28
+ }
29
+ get action() {
30
+ return this._action;
31
+ }
32
+ get indicator() {
33
+ return this._indicator;
34
+ }
374
35
  }
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, 22 Aug 2023 13:37:39 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}";
36
+ __decorateClass([
37
+ attr
38
+ ], SplitButton.prototype, "connotation", 2);
39
+ __decorateClass([
40
+ attr
41
+ ], SplitButton.prototype, "shape", 2);
42
+ __decorateClass([
43
+ attr
44
+ ], SplitButton.prototype, "appearance", 2);
45
+ __decorateClass([
46
+ attr
47
+ ], SplitButton.prototype, "size", 2);
48
+ __decorateClass([
49
+ attr
50
+ ], SplitButton.prototype, "label", 2);
51
+ __decorateClass([
52
+ attr
53
+ ], SplitButton.prototype, "icon", 2);
54
+ __decorateClass([
55
+ attr({ attribute: "split-indicator", mode: "fromView" })
56
+ ], SplitButton.prototype, "splitIndicator", 2);
57
+ __decorateClass([
58
+ attr({ attribute: "disabled", mode: "boolean" })
59
+ ], SplitButton.prototype, "disabled", 2);
60
+ __decorateClass([
61
+ attr({ attribute: "aria-label" })
62
+ ], SplitButton.prototype, "ariaLabel", 2);
63
+ __decorateClass([
64
+ attr({ attribute: "aria-expanded" })
65
+ ], SplitButton.prototype, "ariaExpanded", 2);
66
+ applyMixins(SplitButton, AffixIcon);
398
67
 
399
- class RadioGroup extends RadioGroup$1 {}
400
- __decorate([attr, __metadata("design:type", String)], RadioGroup.prototype, "label", void 0);
68
+ const styles = "/**\n * Do not edit directly\n * Generated on Mon, 04 Sep 2023 12:44:18 GMT\n */\n:host {\n display: inline-block;\n}\n\n.base {\n display: inline-flex;\n justify-content: flex-start;\n inline-size: inherit;\n}\n\n.control,\n.indicator {\n position: relative;\n display: inline-flex;\n box-sizing: border-box;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: 1px solid var(--_appearance-color-outline);\n margin: 0;\n background-color: var(--_appearance-color-fill);\n block-size: var(--_split-button-block-size);\n color: var(--_appearance-color-text);\n vertical-align: middle;\n}\n.control.connotation-cta,\n.indicator.connotation-cta {\n /* @cssprop [--vvd-split-button-cta-primary=var(--vvd-color-cta-500)] */\n --_connotation-color-primary: var(--vvd-split-button-cta-primary, var(--vvd-color-cta-500));\n /* @cssprop [--vvd-split-button-cta-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-split-button-cta-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-split-button-cta-primary-increment=var(--vvd-color-cta-600)] */\n --_connotation-color-primary-increment: var(--vvd-split-button-cta-primary-increment, var(--vvd-color-cta-600));\n /* @cssprop [--vvd-split-button-cta-contrast=var(--vvd-color-cta-800)] */\n --_connotation-color-contrast: var(--vvd-split-button-cta-contrast, var(--vvd-color-cta-800));\n /* @cssprop [--vvd-split-button-cta-fierce=var(--vvd-color-cta-700)] */\n --_connotation-color-fierce: var(--vvd-split-button-cta-fierce, var(--vvd-color-cta-700));\n /* @cssprop [--vvd-split-button-cta-firm=var(--vvd-color-cta-600)] */\n --_connotation-color-firm: var(--vvd-split-button-cta-firm, var(--vvd-color-cta-600));\n /* @cssprop [--vvd-split-button-cta-soft=var(--vvd-color-cta-100)] */\n --_connotation-color-soft: var(--vvd-split-button-cta-soft, var(--vvd-color-cta-100));\n /* @cssprop [--vvd-split-button-cta-faint=var(--vvd-color-cta-50)] */\n --_connotation-color-faint: var(--vvd-split-button-cta-faint, var(--vvd-color-cta-50));\n}\n.control:not(.connotation-cta),\n.indicator:not(.connotation-cta) {\n /* @cssprop [--vvd-split-button-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-split-button-accent-primary, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-split-button-accent-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-split-button-accent-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-split-button-accent-primary-increment=var(--vvd-color-neutral-800)] */\n --_connotation-color-primary-increment: var(--vvd-split-button-accent-primary-increment, var(--vvd-color-neutral-800));\n /* @cssprop [--vvd-split-button-accent-contrast=var(--vvd-color-neutral-800)] */\n --_connotation-color-contrast: var(--vvd-split-button-accent-contrast, var(--vvd-color-neutral-800));\n /* @cssprop [--vvd-split-button-accent-fierce=var(--vvd-color-neutral-700)] */\n --_connotation-color-fierce: var(--vvd-split-button-accent-fierce, var(--vvd-color-neutral-700));\n /* @cssprop [--vvd-split-button-accent-firm=var(--vvd-color-canvas-text)] */\n --_connotation-color-firm: var(--vvd-split-button-accent-firm, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-split-button-accent-soft=var(--vvd-color-neutral-100)] */\n --_connotation-color-soft: var(--vvd-split-button-accent-soft, var(--vvd-color-neutral-100));\n /* @cssprop [--vvd-split-button-accent-faint=var(--vvd-color-neutral-50)] */\n --_connotation-color-faint: var(--vvd-split-button-accent-faint, var(--vvd-color-neutral-50));\n}\n.control.appearance-filled,\n.indicator.appearance-filled {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary);\n --_appearance-color-outline: transparent;\n}\n.control.appearance-outlined,\n.indicator.appearance-outlined {\n --_appearance-color-text: var(--_connotation-color-firm);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.control,\n.indicator {\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)).appearance-filled,\n.indicator:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)).appearance-filled {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary-increment);\n --_appearance-color-outline: transparent;\n}\n.control:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)).appearance-outlined,\n.indicator:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)).appearance-outlined {\n --_appearance-color-text: var(--_connotation-color-firm);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.control:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)),\n.indicator:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\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).appearance-filled,\n.indicator:where(:disabled, .disabled).appearance-filled {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: var(--vvd-color-neutral-100);\n --_appearance-color-outline: transparent;\n}\n.control:where(:disabled, .disabled).appearance-outlined,\n.indicator:where(:disabled, .disabled).appearance-outlined {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--vvd-color-neutral-300);\n}\n.control:where(:disabled, .disabled),\n.indicator:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.control:where(:active, .active):where(:not(:disabled, .disabled)).appearance-filled,\n.indicator:where(:active, .active):where(:not(:disabled, .disabled)).appearance-filled {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-fierce);\n --_appearance-color-outline: transparent;\n}\n.control:where(:active, .active):where(:not(:disabled, .disabled)).appearance-outlined,\n.indicator:where(:active, .active):where(:not(:disabled, .disabled)).appearance-outlined {\n --_appearance-color-text: var(--_connotation-color-firm);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.control:where(:active, .active):where(:not(:disabled, .disabled)),\n.indicator:where(:active, .active):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: transparent;\n}\n@supports (user-select: none) {\n .control,\n .indicator {\n user-select: none;\n }\n}\n\n.control {\n border-inline-end: 0;\n gap: var(--_split-button-icon-gap);\n isolation: isolate;\n /* Disabled */\n /* shape */\n /* size */\n}\n.control:focus-visible {\n outline: none;\n}\n.control:not(:disabled) {\n cursor: pointer;\n}\n.control:disabled {\n cursor: not-allowed;\n}\n.control.icon-only {\n contain: size;\n place-content: center;\n}\n@supports (aspect-ratio: 1) {\n .control.icon-only {\n aspect-ratio: 1;\n }\n}\n@supports not (aspect-ratio: 1) {\n .control.icon-only {\n inline-size: var(--_split-button-block-size);\n }\n}\n.control:not(.icon-only) {\n flex-grow: 1;\n inline-size: inherit;\n}\n.control:not(.shape-pill) {\n border-radius: 6px 0 0 6px;\n}\n.control.shape-pill {\n border-radius: 24px 0 0 24px;\n}\n.control.size-super-condensed {\n --_split-button-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16));\n font: var(--vvd-typography-base-condensed-bold);\n}\n.control.size-super-condensed:not(.icon-only) {\n --_split-button-icon-gap: 4px;\n padding-inline: 8px;\n}\n.control.size-condensed {\n --_split-button-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8));\n font: var(--vvd-typography-base-condensed-bold);\n}\n.control.size-condensed:not(.icon-only) {\n --_split-button-icon-gap: 8px;\n padding-inline: 12px;\n}\n.control.size-expanded {\n --_split-button-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) + 8));\n font: var(--vvd-typography-base-extended-bold);\n}\n.control.size-expanded:not(.icon-only) {\n --_split-button-icon-gap: 10px;\n padding-inline: 20px;\n}\n.control:not(.size-condensed, .size-expanded, .size-super-condensed) {\n --_split-button-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\n font: var(--vvd-typography-base-bold);\n}\n.control:not(.size-condensed, .size-expanded, .size-super-condensed):not(.icon-only) {\n --_split-button-icon-gap: 8px;\n padding-inline: 16px;\n}\n.control .text {\n overflow: hidden;\n max-inline-size: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.indicator {\n border-inline-start: 0;\n inline-size: var(--_split-button-inline-size);\n /* Disabled */\n /* Shape */\n /* size */\n}\n.indicator:focus-visible {\n outline: none;\n}\n.indicator:not(:disabled) {\n cursor: pointer;\n}\n.indicator:disabled {\n cursor: not-allowed;\n}\n.indicator:not(.shape-pill) {\n border-radius: 0 6px 6px 0;\n}\n.indicator.shape-pill {\n border-radius: 0 24px 24px 0;\n}\n.indicator::before {\n position: absolute;\n background-color: var(--_appearance-color-text);\n content: \"\";\n inline-size: 1px;\n inset-inline-start: 0;\n opacity: 0.35;\n}\n.indicator:not(.appearance-filled, .appearance-outlined)::before {\n block-size: 50%;\n}\n.indicator:is(.appearance-filled, .appearance-outlined)::before {\n block-size: 100%;\n}\n.indicator.size-super-condensed {\n --_split-button-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16));\n --_split-button-inline-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16));\n font: var(--vvd-typography-base-condensed);\n}\n.indicator.size-condensed {\n --_split-button-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8));\n --_split-button-inline-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 12));\n font: var(--vvd-typography-base-condensed);\n}\n.indicator.size-expanded {\n --_split-button-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) + 8));\n --_split-button-inline-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\n font: var(--vvd-typography-base-extended);\n}\n.indicator:not(.size-condensed, .size-expanded, .size-super-condensed) {\n --_split-button-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\n --_split-button-inline-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8));\n font: var(--vvd-typography-base-extended);\n}\n\n/* Icon */\n.icon {\n line-height: 1;\n}\n.icon-trailing .icon {\n order: 1;\n}\n.control > .icon {\n font-size: calc(var(--_split-button-block-size) / 2);\n}\n\n/* Focus */\n:not(:focus-visible) > .focus-indicator {\n display: none;\n}\n.control:not(.appearance-filled) .focus-indicator, .indicator:not(.appearance-filled) .focus-indicator {\n --focus-stroke-gap-color: transparent;\n}\n.control.appearance-outlined .focus-indicator, .indicator.appearance-outlined .focus-indicator {\n --focus-inset: -1px;\n}";
401
69
 
402
- const RadioGroupTemplate = context => {
70
+ const getClasses = ({
71
+ connotation,
72
+ appearance,
73
+ shape,
74
+ disabled,
75
+ size
76
+ }) => classNames(
77
+ [`connotation-${connotation}`, Boolean(connotation)],
78
+ ["disabled", disabled],
79
+ [`shape-${shape}`, Boolean(shape)],
80
+ [`appearance-${appearance}`, Boolean(appearance)],
81
+ [`size-${size}`, Boolean(size)]
82
+ );
83
+ function actionButton(context) {
84
+ const affixIconTemplate = affixIconTemplateFactory(context);
85
+ const focusTemplate = focusTemplateFactory(context);
403
86
  return html`
404
- <template
405
- role="radiogroup"
406
- aria-disabled="${x => x.disabled}"
407
- aria-readonly="${x => x.readOnly}"
408
- aria-orientation="${x => x.orientation}"
409
- @click="${(x, c) => x.clickHandler(c.event)}"
410
- @keydown="${(x, c) => x.keydownHandler(c.event)}"
411
- @focusout="${(x, c) => x.focusOutHandler(c.event)}"
412
- >
413
-
414
- ${when(x => x.label, html`<label>${x => x.label}</label>`)}
415
-
416
- <div class="positioning-region ${x => x.orientation === Orientation$1.horizontal ? 'horizontal' : 'vertical'}">
417
- <slot ${slotted({
418
- property: 'slottedRadioButtons',
419
- filter: elements(context.tagFor(Radio))
420
- })}></slot>
421
- </div>
422
- </template>
87
+ <button
88
+ ${ref("_action")}
89
+ class="control ${getClasses} ${(x) => !x.label && !!x.icon ? "icon-only" : ""}"
90
+ aria-label="${(x) => x.ariaLabel}"
91
+ ?disabled="${(x) => x.disabled}"
92
+ aria-disabled="${(x) => x.disabled}">
93
+ ${() => focusTemplate}
94
+ ${(x) => affixIconTemplate(x.icon)}
95
+ <span class="text">${(x) => x.label}</span>
96
+ </button>
423
97
  `;
98
+ }
99
+ function indicatorButton(context) {
100
+ const affixIconTemplate = affixIconTemplateFactory(context);
101
+ const focusTemplate = focusTemplateFactory(context);
102
+ return html`
103
+ <button
104
+ ${ref("_indicator")}
105
+ class="indicator ${getClasses}"
106
+ ?disabled="${(x) => x.disabled}"
107
+ aria-disabled="${(x) => x.disabled}"
108
+ aria-label="Open for more actions"
109
+ aria-haspopup="true"
110
+ aria-expanded="${(x) => x.ariaExpanded}">
111
+ ${() => focusTemplate}
112
+ ${(x) => affixIconTemplate(x.splitIndicator)}
113
+ </button>
114
+ `;
115
+ }
116
+ const SplitButtonTemplate = (context) => {
117
+ return html`
118
+ <div class="base" role="group">
119
+ ${actionButton(context)}
120
+ ${indicatorButton(context)}
121
+ <slot></slot>
122
+ </div>`;
424
123
  };
425
124
 
426
- const radioGroupDefinition = RadioGroup.compose({
427
- baseName: 'radio-group',
428
- template: RadioGroupTemplate,
429
- styles: css_248z
125
+ const splitButtonDefinition = SplitButton.compose({
126
+ baseName: "split-button",
127
+ template: SplitButtonTemplate,
128
+ styles,
129
+ shadowOptions: {
130
+ delegatesFocus: true
131
+ }
430
132
  });
431
- const radioGroupRegistries = [radioGroupDefinition()];
432
- const registerRadioGroup = registerFactory(radioGroupRegistries);
133
+ const splitButtonRegistries = [splitButtonDefinition(), ...iconRegistries, ...focusRegistries];
134
+ const registerSplitButton = registerFactory(splitButtonRegistries);
433
135
 
434
- export { radioGroupDefinition as a, radioGroupRegistries as b, registerRadioGroup as r };
136
+ export { splitButtonRegistries as a, registerSplitButton as r, splitButtonDefinition as s };