@vonage/vivid 3.31.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 (237) 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 +8 -7
  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 +7 -4
  15. package/combobox/index.js +10 -9
  16. package/custom-elements.json +996 -29
  17. package/data-grid/index.js +2 -2
  18. package/date-picker/index.js +35 -0
  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 +7 -6
  25. package/focus/index.js +1 -1
  26. package/header/index.js +2 -2
  27. package/icon/index.js +1 -1
  28. package/index.d.ts +1 -0
  29. package/index.js +68 -66
  30. package/layout/index.js +1 -1
  31. package/lib/button/button.d.ts +2 -0
  32. package/lib/calendar/calendar.d.ts +1 -1
  33. package/lib/components.d.ts +20 -19
  34. package/lib/date-picker/calendar/calendarGrid.d.ts +17 -0
  35. package/lib/date-picker/calendar/dateStr.d.ts +7 -0
  36. package/lib/date-picker/calendar/month.d.ts +12 -0
  37. package/lib/date-picker/calendar/monthPickerGrid.d.ts +10 -0
  38. package/lib/date-picker/calendar/presentationDate.d.ts +4 -0
  39. package/lib/date-picker/calendar/year.d.ts +2 -0
  40. package/lib/date-picker/date-picker.d.ts +18 -0
  41. package/lib/date-picker/date-picker.template.d.ts +4 -0
  42. package/lib/date-picker/definition.d.ts +3 -0
  43. package/lib/date-picker/locale.d.ts +21 -0
  44. package/lib/icon/icon.d.ts +0 -1
  45. package/lib/listbox/listbox.d.ts +9 -1
  46. package/lib/select/select.d.ts +4 -2
  47. package/lib/text-field/text-field.d.ts +1 -0
  48. package/listbox/index.js +22 -17
  49. package/locales/en-GB.d.ts +3 -0
  50. package/locales/en-GB.js +59 -0
  51. package/locales/en-US.d.ts +3 -0
  52. package/locales/en-US.js +59 -0
  53. package/locales/ja-JP.d.ts +3 -0
  54. package/locales/ja-JP.js +59 -0
  55. package/locales/zh-CN.d.ts +3 -0
  56. package/locales/zh-CN.js +59 -0
  57. package/menu/index.js +8 -8
  58. package/menu-item/index.js +4 -4
  59. package/nav/index.js +1 -1
  60. package/nav-disclosure/index.js +3 -3
  61. package/nav-item/index.js +3 -3
  62. package/note/index.js +4 -4
  63. package/number-field/index.js +8 -7
  64. package/option/index.js +5 -4
  65. package/package.json +2 -15
  66. package/pagination/index.js +5 -5
  67. package/popup/index.js +6 -6
  68. package/progress/index.js +1 -1
  69. package/progress-ring/index.js +1 -1
  70. package/radio/index.js +2 -2
  71. package/radio-group/index.js +1 -1
  72. package/select/index.js +10 -9
  73. package/shared/affix.js +25 -9
  74. package/shared/apply-mixins.js +1 -1
  75. package/shared/breadcrumb-item.js +5 -5
  76. package/shared/button.js +13 -13
  77. package/shared/calendar-event.js +36 -16
  78. package/shared/definition.js +133 -194
  79. package/shared/definition10.js +225 -40
  80. package/shared/definition11.js +36 -32
  81. package/shared/definition12.js +763 -98
  82. package/shared/definition13.js +125 -89
  83. package/shared/definition14.js +207 -27
  84. package/shared/definition15.js +710 -731
  85. package/shared/definition16.js +1289 -47
  86. package/shared/definition17.js +6113 -93
  87. package/shared/definition18.js +242 -164
  88. package/shared/definition19.js +47 -692
  89. package/shared/definition2.js +199 -117
  90. package/shared/definition20.js +59 -1671
  91. package/shared/definition21.js +95 -255
  92. package/shared/definition22.js +2218 -1167
  93. package/shared/definition23.js +57 -219
  94. package/shared/definition24.js +27 -68
  95. package/shared/definition25.js +54 -38
  96. package/shared/definition26.js +395 -70
  97. package/shared/definition27.js +381 -2223
  98. package/shared/definition28.js +85 -44
  99. package/shared/definition29.js +27 -40
  100. package/shared/definition3.js +61 -24
  101. package/shared/definition30.js +13 -427
  102. package/shared/definition31.js +49 -360
  103. package/shared/definition32.js +466 -13
  104. package/shared/definition33.js +273 -63
  105. package/shared/definition34.js +195 -25
  106. package/shared/definition35.js +86 -35
  107. package/shared/definition36.js +66 -427
  108. package/shared/definition37.js +430 -190
  109. package/shared/definition38.js +34 -52
  110. package/shared/definition39.js +683 -31
  111. package/shared/definition4.js +157 -12
  112. package/shared/definition40.js +97 -422
  113. package/shared/definition41.js +473 -543
  114. package/shared/definition42.js +122 -73
  115. package/shared/definition43.js +103 -502
  116. package/shared/definition44.js +23 -101
  117. package/shared/definition45.js +76 -126
  118. package/shared/definition46.js +494 -48
  119. package/shared/definition47.js +23 -23
  120. package/shared/definition48.js +126 -476
  121. package/shared/definition49.js +275 -98
  122. package/shared/definition5.js +71 -36
  123. package/shared/definition50.js +157 -16
  124. package/shared/definition51.js +133 -263
  125. package/shared/definition52.js +131 -115
  126. package/shared/definition53.js +85 -120
  127. package/shared/definition54.js +295 -111
  128. package/shared/definition55.js +12 -71
  129. package/shared/definition56.js +39 -295
  130. package/shared/definition57.js +181 -0
  131. package/shared/definition6.js +56 -111
  132. package/shared/definition7.js +119 -187
  133. package/shared/definition8.js +58 -23
  134. package/shared/definition9.js +92 -66
  135. package/shared/focus.js +2 -1
  136. package/shared/focus2.js +1 -1
  137. package/shared/form-associated.js +2 -2
  138. package/shared/icon.js +48 -27
  139. package/shared/index.js +7 -27
  140. package/shared/index2.js +202 -0
  141. package/shared/key-codes.js +1 -1
  142. package/shared/listbox.js +88 -11
  143. package/shared/localization/Locale.d.ts +4 -0
  144. package/shared/localization/index.d.ts +7 -0
  145. package/shared/patterns/form-elements/form-elements.d.ts +4 -4
  146. package/shared/patterns/index.d.ts +1 -0
  147. package/shared/patterns/localized.d.ts +4 -0
  148. package/shared/radio.js +23 -7
  149. package/shared/repeat.js +1 -1
  150. package/shared/text-anchor.js +21 -4
  151. package/shared/text-anchor.template.js +37 -40
  152. package/shared/text-field.js +2 -2
  153. package/shared/text-field2.js +15 -15
  154. package/shared/tree-item.js +12 -12
  155. package/side-drawer/index.js +1 -1
  156. package/slider/index.js +2 -2
  157. package/split-button/index.js +3 -3
  158. package/style.css +6097 -0
  159. package/styles/core/all.css +25 -3
  160. package/styles/core/theme.css +1 -1
  161. package/styles/core/typography.css +25 -3
  162. package/styles/tokens/theme-dark.css +4 -4
  163. package/styles/tokens/theme-light.css +4 -4
  164. package/styles/tokens/vivid-2-compat.css +2 -2
  165. package/switch/index.js +5 -4
  166. package/tab/index.js +3 -3
  167. package/tab-panel/index.js +1 -1
  168. package/tabs/index.js +5 -5
  169. package/tag/index.js +3 -3
  170. package/tag-group/index.js +1 -1
  171. package/text-anchor/index.js +1 -1
  172. package/text-area/index.js +5 -4
  173. package/text-field/index.js +5 -4
  174. package/toggletip/index.js +7 -7
  175. package/tooltip/index.js +7 -7
  176. package/tree-item/index.js +3 -3
  177. package/tree-view/index.js +1 -1
  178. package/vivid.api.json +137 -0
  179. package/lib/accordion/index.d.ts +0 -1
  180. package/lib/accordion-item/index.d.ts +0 -1
  181. package/lib/action-group/index.d.ts +0 -1
  182. package/lib/alert/index.d.ts +0 -1
  183. package/lib/avatar/index.d.ts +0 -1
  184. package/lib/badge/index.d.ts +0 -1
  185. package/lib/banner/index.d.ts +0 -1
  186. package/lib/breadcrumb/index.d.ts +0 -1
  187. package/lib/breadcrumb-item/index.d.ts +0 -1
  188. package/lib/button/index.d.ts +0 -1
  189. package/lib/calendar/index.d.ts +0 -1
  190. package/lib/calendar-event/index.d.ts +0 -1
  191. package/lib/card/index.d.ts +0 -1
  192. package/lib/checkbox/index.d.ts +0 -1
  193. package/lib/combobox/index.d.ts +0 -1
  194. package/lib/data-grid/index.d.ts +0 -1
  195. package/lib/dialog/index.d.ts +0 -1
  196. package/lib/divider/index.d.ts +0 -1
  197. package/lib/elevation/index.d.ts +0 -1
  198. package/lib/empty-state/index.d.ts +0 -1
  199. package/lib/fab/index.d.ts +0 -1
  200. package/lib/file-picker/index.d.ts +0 -1
  201. package/lib/focus/index.d.ts +0 -1
  202. package/lib/header/index.d.ts +0 -1
  203. package/lib/icon/index.d.ts +0 -1
  204. package/lib/layout/index.d.ts +0 -1
  205. package/lib/listbox/index.d.ts +0 -1
  206. package/lib/menu/index.d.ts +0 -1
  207. package/lib/menu-item/index.d.ts +0 -1
  208. package/lib/nav/index.d.ts +0 -1
  209. package/lib/nav-disclosure/index.d.ts +0 -1
  210. package/lib/nav-item/index.d.ts +0 -1
  211. package/lib/note/index.d.ts +0 -1
  212. package/lib/number-field/index.d.ts +0 -1
  213. package/lib/option/index.d.ts +0 -1
  214. package/lib/pagination/index.d.ts +0 -1
  215. package/lib/popup/index.d.ts +0 -1
  216. package/lib/progress/index.d.ts +0 -1
  217. package/lib/progress-ring/index.d.ts +0 -1
  218. package/lib/radio/index.d.ts +0 -1
  219. package/lib/radio-group/index.d.ts +0 -1
  220. package/lib/select/index.d.ts +0 -1
  221. package/lib/side-drawer/index.d.ts +0 -1
  222. package/lib/slider/index.d.ts +0 -1
  223. package/lib/split-button/index.d.ts +0 -1
  224. package/lib/switch/index.d.ts +0 -1
  225. package/lib/tab/index.d.ts +0 -1
  226. package/lib/tab-panel/index.d.ts +0 -1
  227. package/lib/tabs/index.d.ts +0 -1
  228. package/lib/tag/index.d.ts +0 -1
  229. package/lib/tag-group/index.d.ts +0 -1
  230. package/lib/text-anchor/index.d.ts +0 -1
  231. package/lib/text-area/index.d.ts +0 -1
  232. package/lib/text-field/index.d.ts +0 -1
  233. package/lib/toggletip/index.d.ts +0 -1
  234. package/lib/tooltip/index.d.ts +0 -1
  235. package/lib/tree-item/index.d.ts +0 -1
  236. package/lib/tree-view/index.d.ts +0 -1
  237. package/shared/form-elements.js +0 -162
@@ -1,497 +1,147 @@
1
- import { F as FoundationElement, _ as __decorate, a as attr, o as observable, d as __classPrivateFieldGet, b as __metadata, h as html, r as registerFactory } from './index.js';
2
- import { t as tabRegistries } from './definition46.js';
3
- import { t as tabPanelRegistries } from './definition47.js';
4
- import { S as StartEnd } from './start-end.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
5
  import { a as applyMixins } from './apply-mixins.js';
6
- import { h as keyArrowRight, i as keyArrowLeft, b as keyArrowDown, c as keyArrowUp, k as keyEnd, a as keyHome } from './key-codes.js';
7
- import { u as uniqueId } from './strings.js';
8
- import { w as wrapInBounds } from './numbers.js';
9
- import { r as ref } from './ref.js';
10
- import { s as slotted } from './slotted.js';
6
+ import { f as focusTemplateFactory } from './focus2.js';
7
+ import { I as Icon } from './icon.js';
11
8
  import { w as when } from './when.js';
12
9
  import { c as classNames } from './class-names.js';
13
10
 
14
- /**
15
- * The orientation of the {@link @microsoft/fast-foundation#(Tabs:class)} component
16
- * @public
17
- */
18
- const TabsOrientation = {
19
- vertical: "vertical",
20
- horizontal: "horizontal",
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
+ var __decorateClass = (decorators, target, key, kind) => {
14
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
15
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
16
+ if (decorator = decorators[i])
17
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
18
+ if (kind && result)
19
+ __defProp(target, key, result);
20
+ return result;
21
21
  };
22
- /**
23
- * A Tabs Custom HTML Element.
24
- * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#tablist | ARIA tablist }.
25
- *
26
- * @slot start - Content which can be provided before the tablist element
27
- * @slot end - Content which can be provided after the tablist element
28
- * @slot tab - The slot for tabs
29
- * @slot tabpanel - The slot for tabpanels
30
- * @csspart tablist - The element wrapping for the tabs
31
- * @csspart tab - The tab slot
32
- * @csspart activeIndicator - The visual indicator
33
- * @csspart tabpanel - The tabpanel slot
34
- * @fires change - Fires a custom 'change' event when a tab is clicked or during keyboard navigation
35
- *
36
- * @public
37
- */
38
- class Tabs$1 extends FoundationElement {
39
- constructor() {
40
- super(...arguments);
41
- /**
42
- * The orientation
43
- * @public
44
- * @remarks
45
- * HTML Attribute: orientation
46
- */
47
- this.orientation = TabsOrientation.horizontal;
48
- /**
49
- * Whether or not to show the active indicator
50
- * @public
51
- * @remarks
52
- * HTML Attribute: activeindicator
53
- */
54
- this.activeindicator = true;
55
- /**
56
- * @internal
57
- */
58
- this.showActiveIndicator = true;
59
- this.prevActiveTabIndex = 0;
60
- this.activeTabIndex = 0;
61
- this.ticking = false;
62
- this.change = () => {
63
- this.$emit("change", this.activetab);
64
- };
65
- this.isDisabledElement = (el) => {
66
- return el.getAttribute("aria-disabled") === "true";
67
- };
68
- this.isFocusableElement = (el) => {
69
- return !this.isDisabledElement(el);
70
- };
71
- this.setTabs = () => {
72
- const gridHorizontalProperty = "gridColumn";
73
- const gridVerticalProperty = "gridRow";
74
- const gridProperty = this.isHorizontal()
75
- ? gridHorizontalProperty
76
- : gridVerticalProperty;
77
- this.activeTabIndex = this.getActiveIndex();
78
- this.showActiveIndicator = false;
79
- this.tabs.forEach((tab, index) => {
80
- if (tab.slot === "tab") {
81
- const isActiveTab = this.activeTabIndex === index && this.isFocusableElement(tab);
82
- if (this.activeindicator && this.isFocusableElement(tab)) {
83
- this.showActiveIndicator = true;
84
- }
85
- const tabId = this.tabIds[index];
86
- const tabpanelId = this.tabpanelIds[index];
87
- tab.setAttribute("id", tabId);
88
- tab.setAttribute("aria-selected", isActiveTab ? "true" : "false");
89
- tab.setAttribute("aria-controls", tabpanelId);
90
- tab.addEventListener("click", this.handleTabClick);
91
- tab.addEventListener("keydown", this.handleTabKeyDown);
92
- tab.setAttribute("tabindex", isActiveTab ? "0" : "-1");
93
- if (isActiveTab) {
94
- this.activetab = tab;
95
- }
96
- }
97
- // If the original property isn't emptied out,
98
- // the next set will morph into a grid-area style setting that is not what we want
99
- tab.style[gridHorizontalProperty] = "";
100
- tab.style[gridVerticalProperty] = "";
101
- tab.style[gridProperty] = `${index + 1}`;
102
- !this.isHorizontal()
103
- ? tab.classList.add("vertical")
104
- : tab.classList.remove("vertical");
105
- });
106
- };
107
- this.setTabPanels = () => {
108
- this.tabpanels.forEach((tabpanel, index) => {
109
- const tabId = this.tabIds[index];
110
- const tabpanelId = this.tabpanelIds[index];
111
- tabpanel.setAttribute("id", tabpanelId);
112
- tabpanel.setAttribute("aria-labelledby", tabId);
113
- this.activeTabIndex !== index
114
- ? tabpanel.setAttribute("hidden", "")
115
- : tabpanel.removeAttribute("hidden");
116
- });
117
- };
118
- this.handleTabClick = (event) => {
119
- const selectedTab = event.currentTarget;
120
- if (selectedTab.nodeType === 1 && this.isFocusableElement(selectedTab)) {
121
- this.prevActiveTabIndex = this.activeTabIndex;
122
- this.activeTabIndex = this.tabs.indexOf(selectedTab);
123
- this.setComponent();
124
- }
125
- };
126
- this.handleTabKeyDown = (event) => {
127
- if (this.isHorizontal()) {
128
- switch (event.key) {
129
- case keyArrowLeft:
130
- event.preventDefault();
131
- this.adjustBackward(event);
132
- break;
133
- case keyArrowRight:
134
- event.preventDefault();
135
- this.adjustForward(event);
136
- break;
137
- }
138
- }
139
- else {
140
- switch (event.key) {
141
- case keyArrowUp:
142
- event.preventDefault();
143
- this.adjustBackward(event);
144
- break;
145
- case keyArrowDown:
146
- event.preventDefault();
147
- this.adjustForward(event);
148
- break;
149
- }
150
- }
151
- switch (event.key) {
152
- case keyHome:
153
- event.preventDefault();
154
- this.adjust(-this.activeTabIndex);
155
- break;
156
- case keyEnd:
157
- event.preventDefault();
158
- this.adjust(this.tabs.length - this.activeTabIndex - 1);
159
- break;
160
- }
161
- };
162
- this.adjustForward = (e) => {
163
- const group = this.tabs;
164
- let index = 0;
165
- index = this.activetab ? group.indexOf(this.activetab) + 1 : 1;
166
- if (index === group.length) {
167
- index = 0;
168
- }
169
- while (index < group.length && group.length > 1) {
170
- if (this.isFocusableElement(group[index])) {
171
- this.moveToTabByIndex(group, index);
172
- break;
173
- }
174
- else if (this.activetab && index === group.indexOf(this.activetab)) {
175
- break;
176
- }
177
- else if (index + 1 >= group.length) {
178
- index = 0;
179
- }
180
- else {
181
- index += 1;
182
- }
183
- }
184
- };
185
- this.adjustBackward = (e) => {
186
- const group = this.tabs;
187
- let index = 0;
188
- index = this.activetab ? group.indexOf(this.activetab) - 1 : 0;
189
- index = index < 0 ? group.length - 1 : index;
190
- while (index >= 0 && group.length > 1) {
191
- if (this.isFocusableElement(group[index])) {
192
- this.moveToTabByIndex(group, index);
193
- break;
194
- }
195
- else if (index - 1 < 0) {
196
- index = group.length - 1;
197
- }
198
- else {
199
- index -= 1;
200
- }
201
- }
202
- };
203
- this.moveToTabByIndex = (group, index) => {
204
- const tab = group[index];
205
- this.activetab = tab;
206
- this.prevActiveTabIndex = this.activeTabIndex;
207
- this.activeTabIndex = index;
208
- tab.focus();
209
- this.setComponent();
210
- };
211
- }
212
- /**
213
- * @internal
214
- */
215
- orientationChanged() {
216
- if (this.$fastController.isConnected) {
217
- this.setTabs();
218
- this.setTabPanels();
219
- this.handleActiveIndicatorPosition();
220
- }
221
- }
222
- /**
223
- * @internal
224
- */
225
- activeidChanged(oldValue, newValue) {
226
- if (this.$fastController.isConnected &&
227
- this.tabs.length <= this.tabpanels.length) {
228
- this.prevActiveTabIndex = this.tabs.findIndex((item) => item.id === oldValue);
229
- this.setTabs();
230
- this.setTabPanels();
231
- this.handleActiveIndicatorPosition();
232
- }
233
- }
234
- /**
235
- * @internal
236
- */
237
- tabsChanged() {
238
- if (this.$fastController.isConnected &&
239
- this.tabs.length <= this.tabpanels.length) {
240
- this.tabIds = this.getTabIds();
241
- this.tabpanelIds = this.getTabPanelIds();
242
- this.setTabs();
243
- this.setTabPanels();
244
- this.handleActiveIndicatorPosition();
245
- }
246
- }
247
- /**
248
- * @internal
249
- */
250
- tabpanelsChanged() {
251
- if (this.$fastController.isConnected &&
252
- this.tabpanels.length <= this.tabs.length) {
253
- this.tabIds = this.getTabIds();
254
- this.tabpanelIds = this.getTabPanelIds();
255
- this.setTabs();
256
- this.setTabPanels();
257
- this.handleActiveIndicatorPosition();
258
- }
259
- }
260
- getActiveIndex() {
261
- const id = this.activeid;
262
- if (id !== undefined) {
263
- return this.tabIds.indexOf(this.activeid) === -1
264
- ? 0
265
- : this.tabIds.indexOf(this.activeid);
266
- }
267
- else {
268
- return 0;
269
- }
270
- }
271
- getTabIds() {
272
- return this.tabs.map((tab) => {
273
- var _a;
274
- return (_a = tab.getAttribute("id")) !== null && _a !== void 0 ? _a : `tab-${uniqueId()}`;
275
- });
276
- }
277
- getTabPanelIds() {
278
- return this.tabpanels.map((tabPanel) => {
279
- var _a;
280
- return (_a = tabPanel.getAttribute("id")) !== null && _a !== void 0 ? _a : `panel-${uniqueId()}`;
281
- });
282
- }
283
- setComponent() {
284
- if (this.activeTabIndex !== this.prevActiveTabIndex) {
285
- this.activeid = this.tabIds[this.activeTabIndex];
286
- this.focusTab();
287
- this.change();
288
- }
289
- }
290
- isHorizontal() {
291
- return this.orientation === TabsOrientation.horizontal;
292
- }
293
- handleActiveIndicatorPosition() {
294
- // Ignore if we click twice on the same tab
295
- if (this.showActiveIndicator &&
296
- this.activeindicator &&
297
- this.activeTabIndex !== this.prevActiveTabIndex) {
298
- if (this.ticking) {
299
- this.ticking = false;
300
- }
301
- else {
302
- this.ticking = true;
303
- this.animateActiveIndicator();
304
- }
305
- }
306
- }
307
- animateActiveIndicator() {
308
- this.ticking = true;
309
- const gridProperty = this.isHorizontal() ? "gridColumn" : "gridRow";
310
- const translateProperty = this.isHorizontal()
311
- ? "translateX"
312
- : "translateY";
313
- const offsetProperty = this.isHorizontal() ? "offsetLeft" : "offsetTop";
314
- const prev = this.activeIndicatorRef[offsetProperty];
315
- this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`;
316
- const next = this.activeIndicatorRef[offsetProperty];
317
- this.activeIndicatorRef.style[gridProperty] = `${this.prevActiveTabIndex + 1}`;
318
- const dif = next - prev;
319
- this.activeIndicatorRef.style.transform = `${translateProperty}(${dif}px)`;
320
- this.activeIndicatorRef.classList.add("activeIndicatorTransition");
321
- this.activeIndicatorRef.addEventListener("transitionend", () => {
322
- this.ticking = false;
323
- this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`;
324
- this.activeIndicatorRef.style.transform = `${translateProperty}(0px)`;
325
- this.activeIndicatorRef.classList.remove("activeIndicatorTransition");
326
- });
327
- }
328
- /**
329
- * The adjust method for FASTTabs
330
- * @public
331
- * @remarks
332
- * This method allows the active index to be adjusted by numerical increments
333
- */
334
- adjust(adjustment) {
335
- this.prevActiveTabIndex = this.activeTabIndex;
336
- this.activeTabIndex = wrapInBounds(0, this.tabs.length - 1, this.activeTabIndex + adjustment);
337
- this.setComponent();
338
- }
339
- focusTab() {
340
- this.tabs[this.activeTabIndex].focus();
341
- }
342
- /**
343
- * @internal
344
- */
345
- connectedCallback() {
346
- super.connectedCallback();
347
- this.tabIds = this.getTabIds();
348
- this.tabpanelIds = this.getTabPanelIds();
349
- this.activeTabIndex = this.getActiveIndex();
350
- }
351
- }
352
- __decorate([
353
- attr
354
- ], Tabs$1.prototype, "orientation", void 0);
355
- __decorate([
356
- attr
357
- ], Tabs$1.prototype, "activeid", void 0);
358
- __decorate([
359
- observable
360
- ], Tabs$1.prototype, "tabs", void 0);
361
- __decorate([
362
- observable
363
- ], Tabs$1.prototype, "tabpanels", void 0);
364
- __decorate([
365
- attr({ mode: "boolean" })
366
- ], Tabs$1.prototype, "activeindicator", void 0);
367
- __decorate([
368
- observable
369
- ], Tabs$1.prototype, "activeIndicatorRef", void 0);
370
- __decorate([
371
- observable
372
- ], Tabs$1.prototype, "showActiveIndicator", void 0);
373
- applyMixins(Tabs$1, StartEnd);
374
-
375
- var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 17 Aug 2023 11:13:18 GMT\n */\n.base {\n display: grid;\n box-sizing: border-box;\n}\n.base {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base.connotation-cta {\n /* @cssprop [--vvd-tabs-cta-primary=var(--vvd-color-cta-500)] */\n --_connotation-color-primary: var(--vvd-tabs-cta-primary, var(--vvd-color-cta-500));\n}\n.base:not(.connotation-cta) {\n /* @cssprop [--vvd-tabs-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-tabs-accent-primary, var(--vvd-color-canvas-text));\n}\n.base.orientation-vertical {\n overflow: hidden;\n block-size: inherit;\n grid-template-columns: auto 1fr;\n grid-template-rows: 1fr;\n}\n.base:not(.orientation-vertical) {\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr;\n}\n\n.tablist {\n --_tabs-tablist-gutter: 8px;\n --_tabs-active-indicator-stroke-width: 2px;\n position: relative;\n display: grid;\n box-sizing: border-box;\n color: var(--_appearance-color-text);\n}\n.base.orientation-vertical .tablist {\n padding: var(--_tabs-tablist-gutter);\n grid-row: 1/2;\n grid-template-columns: auto 1fr;\n grid-template-rows: auto;\n inline-size: 100%;\n place-self: flex-start end;\n row-gap: var(--_tabs-tablist-gutter);\n}\n.base:not(.orientation-vertical) .tablist {\n justify-content: flex-start;\n column-gap: var(--_tabs-tablist-gutter);\n grid-auto-flow: column;\n grid-template-columns: auto;\n grid-template-rows: auto auto;\n inline-size: 100%;\n padding-inline: var(--_tabs-tablist-gutter);\n}\n.base:not(.orientation-vertical) .tablist-wrapper {\n align-self: end;\n border-bottom: 1px solid var(--vvd-color-neutral-300);\n inline-size: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n}\n.base.orientation-vertical .tablist-wrapper {\n block-size: 100%;\n box-shadow: 1px 0 0 0 var(--vvd-color-neutral-300);\n overflow-x: hidden;\n overflow-y: auto;\n}\n.tablist-wrapper::-webkit-scrollbar {\n display: none;\n}\n\n.tabpanel {\n min-inline-size: 0;\n}\n.base.orientation-vertical .tabpanel {\n block-size: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.active-indicator {\n background: currentColor;\n margin-inline-start: calc(var(--_tabs-tablist-gutter) * -1);\n}\n.base.orientation-vertical .active-indicator {\n align-self: center;\n block-size: 80%;\n grid-area: 1/1/auto/auto;\n inline-size: var(--_tabs-active-indicator-stroke-width);\n}\n.base:not(.orientation-vertical) .active-indicator {\n position: absolute;\n z-index: 1;\n block-size: var(--_tabs-active-indicator-stroke-width);\n grid-column: 1/auto;\n inline-size: calc(var(--_tabs-active-tab-inline-size) - 32px);\n inset-block-end: 0;\n inset-inline-start: 0;\n justify-self: center;\n padding-inline: var(--_tabs-tablist-gutter);\n}\n\n.activeIndicatorTransition {\n transition: transform 0.2s ease-out 0s, inline-size 0.2s ease-out 0s;\n}\n\n.base:not(.orientation-vertical) .active-indicator:not(.activeIndicatorTransition) {\n opacity: 0;\n}";
376
-
377
- var _Tabs_instances, _Tabs_updateTabsConnotation, _Tabs_tabListWrapper_get, _Tabs_scrollToIndex, _Tabs_patchActiveID;
378
- const ACTIVE_TAB_WIDTH = '--_tabs-active-tab-inline-size';
379
- class Tabs extends Tabs$1 {
22
+ class Tag extends FoundationElement {
380
23
  constructor() {
381
24
  super(...arguments);
382
- _Tabs_instances.add(this);
383
- }
384
- connotationChanged() {
385
- __classPrivateFieldGet(this, _Tabs_instances, "m", _Tabs_updateTabsConnotation).call(this);
386
- }
387
- orientationChanged() {
388
- super.orientationChanged();
389
- this.patchIndicatorStyleTransition();
390
- if (!this.activeIndicatorRef) return;
391
- if (this.orientation === TabsOrientation.vertical) {
392
- this.activeIndicatorRef.style.removeProperty(ACTIVE_TAB_WIDTH);
393
- }
394
- __classPrivateFieldGet(this, _Tabs_instances, "m", _Tabs_patchActiveID).call(this);
395
- }
396
- activeidChanged(oldValue, newValue) {
397
- super.activeidChanged(oldValue, newValue);
398
- this.patchIndicatorStyleTransition();
399
- __classPrivateFieldGet(this, _Tabs_instances, "m", _Tabs_patchActiveID).call(this);
400
- }
401
- tabsChanged() {
402
- super.tabsChanged();
403
- this.patchIndicatorStyleTransition();
404
- __classPrivateFieldGet(this, _Tabs_instances, "m", _Tabs_patchActiveID).call(this);
405
- }
406
- tabpanelsChanged() {
407
- super.tabpanelsChanged();
408
- this.patchIndicatorStyleTransition();
409
- __classPrivateFieldGet(this, _Tabs_instances, "m", _Tabs_patchActiveID).call(this);
410
- }
411
- patchIndicatorStyleTransition() {
412
- if (!this.activetab || !this.activeIndicatorRef) return;
413
- if (this.orientation === TabsOrientation.vertical || !this.showActiveIndicator) return;
414
- const width = this.activetab.getBoundingClientRect().width;
415
- this.activeIndicatorRef.style.setProperty(ACTIVE_TAB_WIDTH, `${width}px`);
416
- }
417
- }
418
- _Tabs_instances = new WeakSet(), _Tabs_updateTabsConnotation = function _Tabs_updateTabsConnotation() {
419
- if (this.tabs) {
420
- this.tabs.forEach(tab => {
421
- if (tab.getAttribute('aria-selected') === 'true') {
422
- tab.setAttribute('connotation', this.connotation);
423
- } else {
424
- tab.removeAttribute('connotation');
25
+ this.removable = false;
26
+ this.disabled = false;
27
+ this.selectable = false;
28
+ this.selected = false;
29
+ this.#select = () => {
30
+ if (!this.selectable || this.disabled) {
31
+ return;
425
32
  }
426
- });
33
+ this.selected = !this.selected;
34
+ this.$emit("selected-change");
35
+ };
427
36
  }
428
- }, _Tabs_tabListWrapper_get = function _Tabs_tabListWrapper_get() {
429
- return this.shadowRoot.querySelector('.tablist-wrapper');
430
- }, _Tabs_scrollToIndex = function _Tabs_scrollToIndex(index) {
431
- const tab = this.tabs[index];
432
- if (!tab) return;
433
- let left = 0;
434
- let top = 0;
435
- if (this.orientation === TabsOrientation.vertical) {
436
- if (index === this.tabs.length - 1) {
437
- top = __classPrivateFieldGet(this, _Tabs_instances, "a", _Tabs_tabListWrapper_get).scrollHeight;
37
+ remove() {
38
+ if (!this.removable || this.selectable) {
39
+ return;
438
40
  }
439
- if (index > 0 && index < this.tabs.length - 1) {
440
- top = tab.offsetTop - __classPrivateFieldGet(this, _Tabs_instances, "a", _Tabs_tabListWrapper_get).offsetHeight / 2 + tab.offsetHeight / 2;
441
- }
442
- } else {
443
- if (index === this.tabs.length - 1) {
444
- left = __classPrivateFieldGet(this, _Tabs_instances, "a", _Tabs_tabListWrapper_get).scrollWidth;
41
+ this.$emit("removed");
42
+ this.parentElement && this.parentElement.removeChild(this);
43
+ }
44
+ #select;
45
+ handleKeydown(e) {
46
+ if (e.key === "Enter") {
47
+ this.#select();
445
48
  }
446
- if (index > 0 && index < this.tabs.length - 1) {
447
- left = tab.offsetLeft - __classPrivateFieldGet(this, _Tabs_instances, "a", _Tabs_tabListWrapper_get).offsetWidth / 2 + tab.offsetWidth / 2;
49
+ if (e.key === "Delete" || e.key === "Backspace") {
50
+ this.remove();
448
51
  }
52
+ return true;
449
53
  }
450
- __classPrivateFieldGet(this, _Tabs_instances, "a", _Tabs_tabListWrapper_get).scrollTo({
451
- top,
452
- left,
453
- behavior: 'smooth'
454
- });
455
- }, _Tabs_patchActiveID = function _Tabs_patchActiveID() {
456
- if (!this.activetab) return;
457
- const idx = this.tabs.indexOf(this.activetab);
458
- this.activeid = this['tabIds'][idx];
459
- __classPrivateFieldGet(this, _Tabs_instances, "m", _Tabs_updateTabsConnotation).call(this);
460
- __classPrivateFieldGet(this, _Tabs_instances, "m", _Tabs_scrollToIndex).call(this, idx);
461
- };
462
- __decorate([observable, __metadata("design:type", HTMLElement)], Tabs.prototype, "tablist", void 0);
463
- __decorate([attr, __metadata("design:type", String)], Tabs.prototype, "connotation", void 0);
54
+ handleClick() {
55
+ this.#select();
56
+ }
57
+ }
58
+ __decorateClass([
59
+ attr
60
+ ], Tag.prototype, "connotation", 2);
61
+ __decorateClass([
62
+ attr
63
+ ], Tag.prototype, "shape", 2);
64
+ __decorateClass([
65
+ attr
66
+ ], Tag.prototype, "appearance", 2);
67
+ __decorateClass([
68
+ attr
69
+ ], Tag.prototype, "label", 2);
70
+ __decorateClass([
71
+ attr({ mode: "boolean" })
72
+ ], Tag.prototype, "removable", 2);
73
+ __decorateClass([
74
+ attr({ mode: "boolean" })
75
+ ], Tag.prototype, "disabled", 2);
76
+ __decorateClass([
77
+ attr({ mode: "boolean" })
78
+ ], Tag.prototype, "selectable", 2);
79
+ __decorateClass([
80
+ attr({ mode: "boolean" })
81
+ ], Tag.prototype, "selected", 2);
82
+ applyMixins(Tag, AffixIcon);
83
+
84
+ const styles = "/**\n * Do not edit directly\n * Generated on Mon, 04 Sep 2023 12:44:18 GMT\n */\n.base {\n --tag-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16));\n position: relative;\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n background-color: var(--_appearance-color-fill);\n block-size: var(--tag-block-size);\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n color: var(--_appearance-color-text);\n column-gap: 8px;\n font: var(--vvd-typography-base-bold);\n max-inline-size: 100%;\n padding-inline: 8px;\n vertical-align: middle;\n /* Shape */\n}\n.base.connotation-cta {\n /* @cssprop [--vvd-tag-cta-contrast=var(--vvd-color-cta-800)] */\n --_connotation-color-contrast: var(--vvd-tag-cta-contrast, var(--vvd-color-cta-800));\n /* @cssprop [--vvd-tag-cta-soft=var(--vvd-color-cta-100)] */\n --_connotation-color-soft: var(--vvd-tag-cta-soft, var(--vvd-color-cta-100));\n /* @cssprop [--vvd-tag-cta-pale=var(--vvd-color-cta-300)] */\n --_connotation-color-pale: var(--vvd-tag-cta-pale, var(--vvd-color-cta-300));\n /* @cssprop [--vvd-tag-cta-fierce=var(--vvd-color-cta-700)] */\n --_connotation-color-fierce: var(--vvd-tag-cta-fierce, var(--vvd-color-cta-700));\n /* @cssprop [--vvd-tag-cta-firm=var(--vvd-color-cta-600)] */\n --_connotation-color-firm: var(--vvd-tag-cta-firm, var(--vvd-color-cta-600));\n /* @cssprop [--vvd-tag-cta-faint=var(--vvd-color-cta-50)] */\n --_connotation-color-faint: var(--vvd-tag-cta-faint, var(--vvd-color-cta-50));\n /* @cssprop [--vvd-tag-cta-dim=var(--vvd-color-cta-200)] */\n --_connotation-color-dim: var(--vvd-tag-cta-dim, var(--vvd-color-cta-200));\n}\n.base:not(.connotation-cta) {\n /* @cssprop [--vvd-tag-accent-contrast=var(--vvd-color-neutral-800)] */\n --_connotation-color-contrast: var(--vvd-tag-accent-contrast, var(--vvd-color-neutral-800));\n /* @cssprop [--vvd-tag-accent-soft=var(--vvd-color-neutral-100)] */\n --_connotation-color-soft: var(--vvd-tag-accent-soft, var(--vvd-color-neutral-100));\n /* @cssprop [--vvd-tag-accent-pale=var(--vvd-color-neutral-300)] */\n --_connotation-color-pale: var(--vvd-tag-accent-pale, var(--vvd-color-neutral-300));\n /* @cssprop [--vvd-tag-accent-fierce=var(--vvd-color-neutral-700)] */\n --_connotation-color-fierce: var(--vvd-tag-accent-fierce, var(--vvd-color-neutral-700));\n /* @cssprop [--vvd-tag-accent-firm=var(--vvd-color-canvas-text)] */\n --_connotation-color-firm: var(--vvd-tag-accent-firm, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-tag-accent-faint=var(--vvd-color-neutral-50)] */\n --_connotation-color-faint: var(--vvd-tag-accent-faint, var(--vvd-color-neutral-50));\n /* @cssprop [--vvd-tag-accent-dim=var(--vvd-color-neutral-200)] */\n --_connotation-color-dim: var(--vvd-tag-accent-dim, var(--vvd-color-neutral-200));\n}\n.base {\n --_appearance-color-text: var(--_connotation-color-contrast);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: transparent;\n}\n.base.appearance-duotone {\n --_appearance-color-text: var(--_connotation-color-fierce);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--_connotation-color-pale);\n}\n.base:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--_connotation-color-contrast);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: transparent;\n}\n.base:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)).appearance-duotone {\n --_appearance-color-text: var(--_connotation-color-fierce);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.base:where(:active, .active):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-contrast);\n --_appearance-color-fill: var(--_connotation-color-dim);\n --_appearance-color-outline: transparent;\n}\n.base:where(:active, .active):where(:not(:disabled, .disabled)).appearance-duotone {\n --_appearance-color-text: var(--_connotation-color-fierce);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: var(--_connotation-color-pale);\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: transparent;\n}\n.base:where(:disabled, .disabled).appearance-duotone {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--vvd-color-neutral-100);\n}\n.base:where(.selected, [aria-current]):where(:not(:disabled, .disabled, :hover, .hover)) {\n --_appearance-color-text: var(--_connotation-color-contrast);\n --_appearance-color-fill: var(--_connotation-color-pale);\n --_appearance-color-outline: transparent;\n}\n.base:where(.selected, [aria-current]):where(:not(:disabled, .disabled, :hover, .hover)).appearance-duotone {\n --_appearance-color-text: var(--_connotation-color-fierce);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: var(--_connotation-color-pale);\n}\n.base:not(.shape-pill) {\n border-radius: 4px;\n}\n.base.shape-pill {\n border-radius: 14px;\n}\n@supports selector(:focus-visible) {\n .base:focus-visible {\n outline: none;\n }\n}\n@supports (user-select: none) {\n .base {\n user-select: none;\n }\n}\n.base:not(.disabled) {\n cursor: pointer;\n}\n.base.disabled {\n cursor: not-allowed;\n pointer-events: none;\n}\n.base.removable {\n cursor: auto;\n}\n\n.label {\n overflow: hidden;\n max-inline-size: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.icon {\n font-size: calc(var(--tag-block-size) / 1.5);\n line-height: 1;\n}\n.icon > * {\n vertical-align: middle;\n}\n\n.dismiss-button {\n display: flex;\n align-items: center;\n background-color: var(--_appearance-color-fill);\n border-radius: inherit;\n cursor: pointer;\n}\n\n.base:not(:focus-visible) .focus-indicator {\n display: none;\n}";
464
85
 
465
86
  const getClasses = ({
466
87
  connotation,
467
- orientation
468
- }) => classNames('base', [`connotation-${connotation}`, Boolean(connotation)], [`orientation-${orientation}`, Boolean(orientation)]);
469
- function TabsTemplate() {
88
+ appearance,
89
+ shape,
90
+ disabled,
91
+ selectable,
92
+ removable,
93
+ selected
94
+ }) => classNames(
95
+ "base",
96
+ ["disabled", disabled],
97
+ ["selectable", selectable],
98
+ ["active", selectable && selected],
99
+ ["removable", removable && !selectable],
100
+ [`connotation-${connotation}`, Boolean(connotation)],
101
+ [`appearance-${appearance}`, Boolean(appearance)],
102
+ [`shape-${shape}`, Boolean(shape)]
103
+ );
104
+ function renderDismissButton(iconTag) {
470
105
  return html`
471
- <template role="tablist">
472
- <div class="${getClasses}">
473
- <div class="tablist-wrapper">
474
- <div class="tablist" ${ref('tablist')}>
475
- <slot name="tab" ${slotted('tabs')}></slot>
476
- ${when(x => x.showActiveIndicator, html`
477
- <div ${ref('activeIndicatorRef')} class="active-indicator"></div>
478
- `)}
479
- </div>
480
- </div>
481
- <div class="tabpanel">
482
- <slot name="tabpanel" ${slotted('tabpanels')}></slot>
483
- </div>
484
- </div>
485
- </template>
486
- `;
106
+ <span
107
+ aria-hidden="true"
108
+ class="dismiss-button"
109
+ @click="${(x) => x.remove()}">
110
+ <${iconTag} name="close-line"></${iconTag}>
111
+ </span>`;
487
112
  }
113
+ const tagTemplate = (context) => {
114
+ const affixIconTemplate = affixIconTemplateFactory(context);
115
+ const iconTag = context.tagFor(Icon);
116
+ const focusTemplate = focusTemplateFactory(context);
117
+ return html`
118
+ <span class="${getClasses}"
119
+ role="option"
120
+ aria-disabled="${(x) => x.disabled}"
121
+ aria-selected="${(x) => x.selectable}"
122
+ tabindex="${(x) => x.disabled ? null : 0}"
123
+ @keydown="${(x, c) => x.handleKeydown(c.event)}"
124
+ @click="${(x) => x.handleClick()}">
125
+ ${(x) => affixIconTemplate(x.icon)}
126
+ ${when((x) => x.label, (x) => html`<span class="label">${x.label}</span>`)}
127
+ ${when((x) => x.removable && !x.selectable, renderDismissButton(iconTag))}
128
+ ${when(
129
+ (x) => x.selectable && x.selected,
130
+ html`<${iconTag} class="selectable-icon" name="check-circle-solid"></${iconTag}>`
131
+ )}
132
+ ${() => focusTemplate}
133
+ </span>`;
134
+ };
488
135
 
489
- const tabsDefinition = Tabs.compose({
490
- baseName: 'tabs',
491
- template: TabsTemplate,
492
- styles: css_248z
136
+ const tagDefinition = Tag.compose({
137
+ baseName: "tag",
138
+ template: tagTemplate,
139
+ styles,
140
+ shadowOptions: {
141
+ delegatesFocus: true
142
+ }
493
143
  });
494
- const tabsRegistries = [tabsDefinition(), ...tabRegistries, ...tabPanelRegistries];
495
- const registerTabs = registerFactory(tabsRegistries);
144
+ const tagRegistries = [tagDefinition(), ...iconRegistries, ...focusRegistries];
145
+ const registerTag = registerFactory(tagRegistries);
496
146
 
497
- export { tabsRegistries as a, registerTabs as r, tabsDefinition as t };
147
+ export { registerTag as r, tagDefinition as t };