@vonage/vivid 2.36.3 → 3.0.0-next.100

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 (237) hide show
  1. package/README.md +144 -0
  2. package/accordion/index.js +52 -0
  3. package/accordion-item/index.js +118 -0
  4. package/action-group/index.js +41 -0
  5. package/avatar/index.js +61 -0
  6. package/badge/index.js +51 -0
  7. package/banner/index.js +128 -0
  8. package/breadcrumb/index.js +103 -0
  9. package/breadcrumb-item/index.js +59 -0
  10. package/button/index.js +24 -0
  11. package/calendar/index.js +1526 -0
  12. package/calendar-event/index.js +112 -0
  13. package/card/index.js +114 -0
  14. package/checkbox/index.js +179 -0
  15. package/dialog/index.js +230 -0
  16. package/divider/index.js +4 -0
  17. package/elevation/index.js +3 -0
  18. package/fab/index.js +100 -0
  19. package/focus/index.js +18 -0
  20. package/header/index.js +61 -0
  21. package/icon/index.js +36 -0
  22. package/index.d.ts +2 -0
  23. package/index.js +76 -64
  24. package/layout/index.js +43 -0
  25. package/lib/accordion/accordion.d.ts +9 -0
  26. package/lib/accordion/accordion.template.d.ts +4 -0
  27. package/lib/accordion/index.d.ts +2 -0
  28. package/lib/accordion-item/accordion-item.d.ts +13 -0
  29. package/lib/accordion-item/accordion-item.template.d.ts +4 -0
  30. package/lib/accordion-item/index.d.ts +4 -0
  31. package/lib/action-group/action-group.d.ts +10 -0
  32. package/lib/action-group/action-group.template.d.ts +4 -0
  33. package/lib/action-group/index.d.ts +2 -0
  34. package/lib/avatar/avatar.d.ts +15 -0
  35. package/lib/avatar/avatar.template.d.ts +4 -0
  36. package/lib/avatar/index.d.ts +3 -0
  37. package/lib/badge/badge.d.ts +15 -0
  38. package/lib/badge/badge.template.d.ts +4 -0
  39. package/lib/badge/index.d.ts +3 -0
  40. package/lib/banner/banner.d.ts +20 -0
  41. package/lib/banner/banner.template.d.ts +4 -0
  42. package/lib/banner/index.d.ts +3 -0
  43. package/lib/breadcrumb/breadcrumb.d.ts +3 -0
  44. package/lib/breadcrumb/breadcrumb.template.d.ts +4 -0
  45. package/lib/breadcrumb/index.d.ts +2 -0
  46. package/lib/breadcrumb-item/breadcrumb-item.d.ts +5 -0
  47. package/lib/breadcrumb-item/breadcrumb-item.template.d.ts +4 -0
  48. package/lib/breadcrumb-item/index.d.ts +4 -0
  49. package/lib/button/button.d.ts +18 -0
  50. package/lib/button/button.template.d.ts +4 -0
  51. package/lib/button/index.d.ts +4 -0
  52. package/lib/calendar/calendar.d.ts +13 -0
  53. package/lib/calendar/calendar.template.d.ts +4 -0
  54. package/lib/calendar/helpers/calendar.date-functions.d.ts +2 -0
  55. package/lib/calendar/helpers/calendar.event-context.d.ts +6 -0
  56. package/lib/calendar/helpers/calendar.keyboard-interactions.d.ts +9 -0
  57. package/lib/calendar/index.d.ts +2 -0
  58. package/lib/calendar-event/calendar-event.d.ts +14 -0
  59. package/lib/calendar-event/calendar-event.template.d.ts +4 -0
  60. package/lib/calendar-event/index.d.ts +2 -0
  61. package/lib/card/card.d.ts +10 -0
  62. package/lib/card/card.template.d.ts +4 -0
  63. package/lib/card/index.d.ts +4 -0
  64. package/lib/checkbox/checkbox.d.ts +5 -0
  65. package/lib/checkbox/checkbox.template.d.ts +4 -0
  66. package/lib/checkbox/index.d.ts +4 -0
  67. package/lib/components.d.ts +38 -0
  68. package/lib/dialog/dialog.d.ts +20 -0
  69. package/lib/dialog/dialog.template.d.ts +4 -0
  70. package/lib/dialog/index.d.ts +5 -0
  71. package/lib/divider/divider.d.ts +3 -0
  72. package/lib/divider/divider.template.d.ts +4 -0
  73. package/lib/divider/index.d.ts +2 -0
  74. package/lib/elevation/elevation.d.ts +5 -0
  75. package/lib/elevation/elevation.template.d.ts +4 -0
  76. package/lib/elevation/index.d.ts +2 -0
  77. package/lib/enums.d.ts +59 -0
  78. package/lib/fab/fab.d.ts +13 -0
  79. package/lib/fab/fab.template.d.ts +4 -0
  80. package/lib/fab/index.d.ts +4 -0
  81. package/lib/focus/focus.d.ts +3 -0
  82. package/lib/focus/focus.template.d.ts +4 -0
  83. package/lib/focus/index.d.ts +2 -0
  84. package/lib/header/header.d.ts +5 -0
  85. package/lib/header/header.template.d.ts +4 -0
  86. package/lib/header/index.d.ts +3 -0
  87. package/lib/icon/icon.d.ts +12 -0
  88. package/lib/icon/icon.placeholder.d.ts +1 -0
  89. package/lib/icon/icon.template.d.ts +4 -0
  90. package/lib/icon/index.d.ts +2 -0
  91. package/lib/layout/index.d.ts +2 -0
  92. package/lib/layout/layout.d.ts +16 -0
  93. package/lib/layout/layout.template.d.ts +4 -0
  94. package/lib/listbox/index.d.ts +4 -0
  95. package/lib/listbox/listbox.d.ts +9 -0
  96. package/lib/listbox/listbox.template.d.ts +4 -0
  97. package/lib/listbox-option/index.d.ts +4 -0
  98. package/lib/listbox-option/listbox-option.d.ts +9 -0
  99. package/lib/listbox-option/listbox-option.template.d.ts +4 -0
  100. package/lib/menu/index.d.ts +12 -0
  101. package/lib/menu/menu.d.ts +10 -0
  102. package/lib/menu/menu.template.d.ts +3 -0
  103. package/lib/menu-item/index.d.ts +3 -0
  104. package/lib/menu-item/menu-item.d.ts +7 -0
  105. package/lib/menu-item/menu-item.template.d.ts +5 -0
  106. package/lib/nav/index.d.ts +2 -0
  107. package/lib/nav/nav.d.ts +3 -0
  108. package/lib/nav/nav.template.d.ts +4 -0
  109. package/lib/nav-disclosure/index.d.ts +4 -0
  110. package/lib/nav-disclosure/nav-disclosure.d.ts +10 -0
  111. package/lib/nav-disclosure/nav-disclosure.template.d.ts +4 -0
  112. package/lib/nav-item/index.d.ts +4 -0
  113. package/lib/nav-item/nav-item.d.ts +6 -0
  114. package/lib/nav-item/nav-item.template.d.ts +4 -0
  115. package/lib/note/index.d.ts +2 -0
  116. package/lib/note/note.d.ts +10 -0
  117. package/lib/note/note.template.d.ts +5 -0
  118. package/lib/number-field/index.d.ts +4 -0
  119. package/lib/number-field/number-field.d.ts +14 -0
  120. package/lib/number-field/number-field.template.d.ts +4 -0
  121. package/lib/popup/index.d.ts +4 -0
  122. package/lib/popup/popup.d.ts +18 -0
  123. package/lib/popup/popup.template.d.ts +4 -0
  124. package/lib/progress/index.d.ts +2 -0
  125. package/lib/progress/progress.d.ts +9 -0
  126. package/lib/progress/progress.template.d.ts +5 -0
  127. package/lib/progress-ring/index.d.ts +2 -0
  128. package/lib/progress-ring/progress-ring.d.ts +7 -0
  129. package/lib/progress-ring/progress-ring.template.d.ts +4 -0
  130. package/lib/radio/index.d.ts +3 -0
  131. package/lib/radio/radio.d.ts +4 -0
  132. package/lib/radio/radio.template.d.ts +4 -0
  133. package/lib/radio-group/index.d.ts +10 -0
  134. package/lib/radio-group/radio-group.d.ts +4 -0
  135. package/lib/radio-group/radio-group.template.d.ts +4 -0
  136. package/lib/side-drawer/index.d.ts +2 -0
  137. package/lib/side-drawer/side-drawer.d.ts +9 -0
  138. package/lib/side-drawer/side-drawer.template.d.ts +4 -0
  139. package/lib/slider/index.d.ts +3 -0
  140. package/lib/slider/slider.d.ts +4 -0
  141. package/lib/slider/slider.template.d.ts +4 -0
  142. package/lib/switch/index.d.ts +4 -0
  143. package/lib/switch/switch.d.ts +7 -0
  144. package/lib/switch/switch.template.d.ts +4 -0
  145. package/lib/text-anchor/index.d.ts +2 -0
  146. package/lib/text-anchor/text-anchor.d.ts +7 -0
  147. package/lib/text-anchor/text-anchor.template.d.ts +4 -0
  148. package/lib/text-area/index.d.ts +4 -0
  149. package/lib/text-area/text-area.d.ts +9 -0
  150. package/lib/text-area/text-area.template.d.ts +4 -0
  151. package/lib/text-field/index.d.ts +4 -0
  152. package/lib/text-field/text-field.d.ts +14 -0
  153. package/lib/text-field/text-field.template.d.ts +5 -0
  154. package/lib/tooltip/index.d.ts +3 -0
  155. package/lib/tooltip/tooltip.d.ts +8 -0
  156. package/lib/tooltip/tooltip.template.d.ts +4 -0
  157. package/listbox/index.js +1090 -0
  158. package/listbox-option/index.js +22 -0
  159. package/menu/index.js +371 -0
  160. package/menu-item/index.js +21 -0
  161. package/nav/index.js +17 -0
  162. package/nav-disclosure/index.js +82 -0
  163. package/nav-item/index.js +46 -0
  164. package/note/index.js +59 -0
  165. package/number-field/index.js +461 -0
  166. package/package.json +65 -323
  167. package/popup/index.js +27 -0
  168. package/progress/index.js +97 -0
  169. package/progress-ring/index.js +76 -0
  170. package/radio/index.js +47 -0
  171. package/radio-group/index.js +435 -0
  172. package/shared/_has.js +58 -0
  173. package/shared/affix.js +24 -0
  174. package/shared/anchor.js +86 -0
  175. package/shared/apply-mixins.js +23 -0
  176. package/shared/aria-global.js +72 -0
  177. package/shared/aria.js +9 -0
  178. package/shared/base-progress.js +70 -0
  179. package/shared/breadcrumb-item.js +25 -0
  180. package/shared/button.js +200 -0
  181. package/shared/calendar-event.js +19 -0
  182. package/shared/class-names.js +15 -0
  183. package/shared/design-system/index.d.ts +3 -0
  184. package/shared/dialog-polyfill.esm.js +858 -0
  185. package/shared/direction.js +20 -0
  186. package/shared/dom.js +8 -0
  187. package/shared/enums.js +70 -0
  188. package/shared/es.object.assign.js +69 -0
  189. package/shared/es.regexp.to-string.js +59 -0
  190. package/shared/export.js +1017 -0
  191. package/shared/focus.js +5 -0
  192. package/shared/focus2.js +11 -0
  193. package/shared/form-associated.js +466 -0
  194. package/shared/form-elements.js +331 -0
  195. package/shared/icon.js +1361 -0
  196. package/shared/index.js +5027 -0
  197. package/shared/index2.js +107 -0
  198. package/shared/index3.js +31 -0
  199. package/shared/index4.js +77 -0
  200. package/shared/index5.js +261 -0
  201. package/shared/index6.js +1525 -0
  202. package/shared/index7.js +349 -0
  203. package/shared/iterators.js +61 -0
  204. package/shared/key-codes.js +97 -0
  205. package/shared/numbers.js +25 -0
  206. package/shared/object-keys.js +13 -0
  207. package/shared/patterns/affix.d.ts +9 -0
  208. package/shared/patterns/focus.d.ts +3 -0
  209. package/shared/patterns/form-elements/form-elements.d.ts +28 -0
  210. package/shared/patterns/form-elements/index.d.ts +1 -0
  211. package/shared/patterns/index.d.ts +3 -0
  212. package/shared/radio.js +127 -0
  213. package/shared/ref.js +41 -0
  214. package/shared/slotted.js +119 -0
  215. package/shared/start-end.js +50 -0
  216. package/shared/string-trim.js +40 -0
  217. package/shared/text-anchor.js +10 -0
  218. package/shared/text-anchor.template.js +55 -0
  219. package/shared/to-string.js +51 -0
  220. package/shared/web.dom-collections.iterator.js +472 -0
  221. package/shared/when.js +15 -0
  222. package/side-drawer/index.js +89 -0
  223. package/slider/index.js +596 -0
  224. package/styles/core/all.css +75 -0
  225. package/styles/core/theme.css +11 -0
  226. package/styles/core/typography.css +69 -0
  227. package/styles/fonts/SpeziaCompleteVariableItalicWeb.woff2 +0 -0
  228. package/styles/fonts/SpeziaCompleteVariableUprightWeb.woff2 +0 -0
  229. package/styles/fonts/SpeziaMonoCompleteVariableWeb.woff2 +0 -0
  230. package/styles/fonts/spezia.css +20 -0
  231. package/styles/tokens/theme-dark.css +230 -0
  232. package/styles/tokens/theme-light.css +230 -0
  233. package/switch/index.js +153 -0
  234. package/text-anchor/index.js +28 -0
  235. package/text-area/index.js +289 -0
  236. package/text-field/index.js +130 -0
  237. package/tooltip/index.js +65 -0
@@ -0,0 +1,435 @@
1
+ import { F as FoundationElement, _ as __decorate, a as attr, o as observable, b as __metadata, h as html, d as designSystem } from '../shared/index.js';
2
+ import { D as Direction, g as getDirection } from '../shared/direction.js';
3
+ import { i as keyArrowRight, h as keyArrowLeft, A as ArrowKeys, e as keyArrowUp, f as keyArrowDown, k as keyEnter } from '../shared/key-codes.js';
4
+ import { O as Orientation } from '../shared/aria.js';
5
+ import { R as Radio } from '../shared/radio.js';
6
+ import { s as slotted, e as elements } from '../shared/slotted.js';
7
+ import { w as when } from '../shared/when.js';
8
+ import '../shared/form-associated.js';
9
+
10
+ /**
11
+ * An Radio Group Custom HTML Element.
12
+ * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#radiogroup | ARIA radiogroup }.
13
+ *
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
18
+ *
19
+ * @public
20
+ */
21
+ class RadioGroup$1 extends FoundationElement {
22
+ constructor() {
23
+ super(...arguments);
24
+ /**
25
+ * The orientation of the group
26
+ *
27
+ * @public
28
+ * @remarks
29
+ * HTML Attribute: orientation
30
+ */
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
+ };
77
+ /**
78
+ * @internal
79
+ */
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
+ };
112
+ /**
113
+ * @internal
114
+ */
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
+ };
208
+ /**
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'
211
+ *
212
+ * @internal
213
+ */
214
+ this.keydownHandler = (e) => {
215
+ const key = e.key;
216
+ if (key in ArrowKeys && this.isInsideFoundationToolbar) {
217
+ return true;
218
+ }
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
+ };
249
+ }
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
+ }
259
+ });
260
+ }
261
+ }
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
+ });
272
+ }
273
+ }
274
+ nameChanged() {
275
+ if (this.slottedRadioButtons) {
276
+ this.slottedRadioButtons.forEach((radio) => {
277
+ radio.setAttribute("name", this.name);
278
+ });
279
+ }
280
+ }
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
+ });
289
+ }
290
+ this.$emit("change");
291
+ }
292
+ slottedRadioButtonsChanged(oldValue, newValue) {
293
+ if (this.slottedRadioButtons && this.slottedRadioButtons.length > 0) {
294
+ this.setupRadioButtons();
295
+ }
296
+ }
297
+ get parentToolbar() {
298
+ return this.closest('[role="toolbar"]');
299
+ }
300
+ get isInsideToolbar() {
301
+ var _a;
302
+ return ((_a = this.parentToolbar) !== null && _a !== void 0 ? _a : false);
303
+ }
304
+ get isInsideFoundationToolbar() {
305
+ var _a;
306
+ return !!((_a = this.parentToolbar) === null || _a === void 0 ? void 0 : _a["$fastController"]);
307
+ }
308
+ /**
309
+ * @internal
310
+ */
311
+ connectedCallback() {
312
+ super.connectedCallback();
313
+ this.direction = getDirection(this);
314
+ this.setupRadioButtons();
315
+ }
316
+ disconnectedCallback() {
317
+ this.slottedRadioButtons.forEach((radio) => {
318
+ radio.removeEventListener("change", this.radioChangeHandler);
319
+ });
320
+ }
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);
334
+ }
335
+ if (this.disabled) {
336
+ radio.disabled = true;
337
+ }
338
+ if (this.readOnly) {
339
+ radio.readOnly = true;
340
+ }
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;
347
+ }
348
+ else {
349
+ if (!this.isInsideFoundationToolbar) {
350
+ radio.setAttribute("tabindex", "-1");
351
+ }
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];
370
+ }
371
+ }
372
+ }
373
+ }
374
+ __decorate([
375
+ attr({ attribute: "readonly", mode: "boolean" })
376
+ ], RadioGroup$1.prototype, "readOnly", void 0);
377
+ __decorate([
378
+ attr({ attribute: "disabled", mode: "boolean" })
379
+ ], RadioGroup$1.prototype, "disabled", void 0);
380
+ __decorate([
381
+ attr
382
+ ], RadioGroup$1.prototype, "name", void 0);
383
+ __decorate([
384
+ attr
385
+ ], RadioGroup$1.prototype, "value", void 0);
386
+ __decorate([
387
+ attr
388
+ ], RadioGroup$1.prototype, "orientation", void 0);
389
+ __decorate([
390
+ observable
391
+ ], RadioGroup$1.prototype, "childItems", void 0);
392
+ __decorate([
393
+ observable
394
+ ], RadioGroup$1.prototype, "slottedRadioButtons", void 0);
395
+
396
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Tue, 15 Nov 2022 13:39:19 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}";
397
+
398
+ class RadioGroup extends RadioGroup$1 {}
399
+ __decorate([attr, __metadata("design:type", String)], RadioGroup.prototype, "label", void 0);
400
+
401
+ let _ = t => t,
402
+ _t,
403
+ _t2;
404
+ const RadioGroupTemplate = context => {
405
+ return html(_t || (_t = _`
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
+
416
+ ${0}
417
+
418
+ <div class="positioning-region ${0}">
419
+ <slot ${0}></slot>
420
+ </div>
421
+ </template>
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.horizontal ? 'horizontal' : 'vertical', slotted({
423
+ property: 'slottedRadioButtons',
424
+ filter: elements(context.tagFor(Radio))
425
+ }));
426
+ };
427
+
428
+ const vividRadioGroup = RadioGroup.compose({
429
+ baseName: 'radio-group',
430
+ template: RadioGroupTemplate,
431
+ styles: css_248z
432
+ });
433
+ designSystem.register(vividRadioGroup());
434
+
435
+ export { vividRadioGroup };
package/shared/_has.js ADDED
@@ -0,0 +1,58 @@
1
+ function _isPlaceholder(a) {
2
+ return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;
3
+ }
4
+
5
+ /**
6
+ * Optimized internal one-arity curry function.
7
+ *
8
+ * @private
9
+ * @category Function
10
+ * @param {Function} fn The function to curry.
11
+ * @return {Function} The curried function.
12
+ */
13
+
14
+ function _curry1(fn) {
15
+ return function f1(a) {
16
+ if (arguments.length === 0 || _isPlaceholder(a)) {
17
+ return f1;
18
+ } else {
19
+ return fn.apply(this, arguments);
20
+ }
21
+ };
22
+ }
23
+
24
+ /**
25
+ * Optimized internal two-arity curry function.
26
+ *
27
+ * @private
28
+ * @category Function
29
+ * @param {Function} fn The function to curry.
30
+ * @return {Function} The curried function.
31
+ */
32
+
33
+ function _curry2(fn) {
34
+ return function f2(a, b) {
35
+ switch (arguments.length) {
36
+ case 0:
37
+ return f2;
38
+
39
+ case 1:
40
+ return _isPlaceholder(a) ? f2 : _curry1(function (_b) {
41
+ return fn(a, _b);
42
+ });
43
+
44
+ default:
45
+ return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {
46
+ return fn(_a, b);
47
+ }) : _isPlaceholder(b) ? _curry1(function (_b) {
48
+ return fn(a, _b);
49
+ }) : fn(a, b);
50
+ }
51
+ };
52
+ }
53
+
54
+ function _has(prop, obj) {
55
+ return Object.prototype.hasOwnProperty.call(obj, prop);
56
+ }
57
+
58
+ export { _curry1 as _, _curry2 as a, _has as b };
@@ -0,0 +1,24 @@
1
+ import './web.dom-collections.iterator.js';
2
+ import { _ as __decorate, a as attr, b as __metadata, h as html } from './index.js';
3
+ import { I as Icon } from './icon.js';
4
+
5
+ let _ = t => t,
6
+ _t;
7
+ class AffixIcon {}
8
+ __decorate([attr, __metadata("design:type", String)], AffixIcon.prototype, "icon", void 0);
9
+ class AffixIconWithTrailing extends AffixIcon {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.iconTrailing = false;
13
+ }
14
+ }
15
+ __decorate([attr({
16
+ mode: 'boolean',
17
+ attribute: 'icon-trailing'
18
+ }), __metadata("design:type", Object)], AffixIconWithTrailing.prototype, "iconTrailing", void 0);
19
+ const affixIconTemplateFactory = context => {
20
+ const iconTag = context.tagFor(Icon);
21
+ return icon => icon ? html(_t || (_t = _`<span class="icon"><${0} :type="${0}"></${0}></span>`), iconTag, () => icon, iconTag) : null;
22
+ };
23
+
24
+ export { AffixIconWithTrailing as A, affixIconTemplateFactory as a, AffixIcon as b };
@@ -0,0 +1,86 @@
1
+ import { F as FoundationElement, _ as __decorate, a as attr, o as observable } from './index.js';
2
+ import { a as applyMixins } from './apply-mixins.js';
3
+ import { A as ARIAGlobalStatesAndProperties } from './aria-global.js';
4
+ import { S as StartEnd } from './start-end.js';
5
+
6
+ /**
7
+ * An Anchor Custom HTML Element.
8
+ * Based largely on the {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a | <a> element }.
9
+ *
10
+ * @slot start - Content which can be provided before the anchor content
11
+ * @slot end - Content which can be provided after the anchor content
12
+ * @slot - The default slot for anchor content
13
+ * @csspart control - The anchor element
14
+ * @csspart content - The element wrapping anchor content
15
+ *
16
+ * @public
17
+ */
18
+ class Anchor extends FoundationElement {
19
+ constructor() {
20
+ super(...arguments);
21
+ /**
22
+ * Overrides the focus call for where delegatesFocus is unsupported.
23
+ * This check works for Chrome, Edge Chromium, FireFox, and Safari
24
+ * Relevant PR on the Firefox browser: https://phabricator.services.mozilla.com/D123858
25
+ */
26
+ this.handleUnsupportedDelegatesFocus = () => {
27
+ var _a;
28
+ // Check to see if delegatesFocus is supported
29
+ if (window.ShadowRoot &&
30
+ !window.ShadowRoot.prototype.hasOwnProperty("delegatesFocus") &&
31
+ ((_a = this.$fastController.definition.shadowOptions) === null || _a === void 0 ? void 0 : _a.delegatesFocus)) {
32
+ this.focus = () => {
33
+ this.control.focus();
34
+ };
35
+ }
36
+ };
37
+ }
38
+ /**
39
+ * @internal
40
+ */
41
+ connectedCallback() {
42
+ super.connectedCallback();
43
+ this.handleUnsupportedDelegatesFocus();
44
+ }
45
+ }
46
+ __decorate([
47
+ attr
48
+ ], Anchor.prototype, "download", void 0);
49
+ __decorate([
50
+ attr
51
+ ], Anchor.prototype, "href", void 0);
52
+ __decorate([
53
+ attr
54
+ ], Anchor.prototype, "hreflang", void 0);
55
+ __decorate([
56
+ attr
57
+ ], Anchor.prototype, "ping", void 0);
58
+ __decorate([
59
+ attr
60
+ ], Anchor.prototype, "referrerpolicy", void 0);
61
+ __decorate([
62
+ attr
63
+ ], Anchor.prototype, "rel", void 0);
64
+ __decorate([
65
+ attr
66
+ ], Anchor.prototype, "target", void 0);
67
+ __decorate([
68
+ attr
69
+ ], Anchor.prototype, "type", void 0);
70
+ __decorate([
71
+ observable
72
+ ], Anchor.prototype, "defaultSlottedContent", void 0);
73
+ /**
74
+ * Includes ARIA states and properties relating to the ARIA link role
75
+ *
76
+ * @public
77
+ */
78
+ class DelegatesARIALink {
79
+ }
80
+ __decorate([
81
+ attr({ attribute: "aria-expanded" })
82
+ ], DelegatesARIALink.prototype, "ariaExpanded", void 0);
83
+ applyMixins(DelegatesARIALink, ARIAGlobalStatesAndProperties);
84
+ applyMixins(Anchor, StartEnd, DelegatesARIALink);
85
+
86
+ export { Anchor as A, DelegatesARIALink as D };
@@ -0,0 +1,23 @@
1
+ import { A as AttributeConfiguration } from './index.js';
2
+
3
+ /**
4
+ * Apply mixins to a constructor.
5
+ * Sourced from {@link https://www.typescriptlang.org/docs/handbook/mixins.html | TypeScript Documentation }.
6
+ * @public
7
+ */
8
+ function applyMixins(derivedCtor, ...baseCtors) {
9
+ const derivedAttributes = AttributeConfiguration.locate(derivedCtor);
10
+ baseCtors.forEach(baseCtor => {
11
+ Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
12
+ if (name !== "constructor") {
13
+ Object.defineProperty(derivedCtor.prototype, name,
14
+ /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
15
+ Object.getOwnPropertyDescriptor(baseCtor.prototype, name));
16
+ }
17
+ });
18
+ const baseAttributes = AttributeConfiguration.locate(baseCtor);
19
+ baseAttributes.forEach(x => derivedAttributes.push(x));
20
+ });
21
+ }
22
+
23
+ export { applyMixins as a };