@vonage/vivid 4.4.0 → 4.6.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 (235) hide show
  1. package/custom-elements.json +7181 -6876
  2. package/elevation/index.cjs +1 -1
  3. package/elevation/index.js +1 -1
  4. package/index.cjs +80 -74
  5. package/index.js +23 -22
  6. package/lib/components.d.ts +1 -0
  7. package/lib/fab/fab.d.ts +1 -1
  8. package/lib/icon/icon.d.ts +1 -1
  9. package/lib/menu/menu.d.ts +2 -1
  10. package/lib/number-field/number-field.d.ts +3 -1
  11. package/lib/searchable-select/definition.d.ts +4 -0
  12. package/lib/searchable-select/locale.d.ts +6 -0
  13. package/lib/searchable-select/option-tag.d.ts +14 -0
  14. package/lib/searchable-select/option-tag.template.d.ts +4 -0
  15. package/lib/searchable-select/searchable-select.d.ts +29 -0
  16. package/lib/searchable-select/searchable-select.form-associated.d.ts +10 -0
  17. package/lib/searchable-select/searchable-select.template.d.ts +4 -0
  18. package/lib/select/select.d.ts +4 -1
  19. package/lib/tab/locale.d.ts +3 -0
  20. package/lib/tab/tab.d.ts +5 -1
  21. package/lib/tabs/tabs.d.ts +2 -0
  22. package/lib/tag/definition.d.ts +1 -0
  23. package/lib/text-field/text-field.d.ts +3 -1
  24. package/lib/video-player/video-player.d.ts +0 -1
  25. package/listbox/index.cjs +1 -1
  26. package/listbox/index.js +1 -1
  27. package/locales/de-DE.cjs +12 -0
  28. package/locales/de-DE.js +12 -0
  29. package/locales/en-GB.cjs +12 -0
  30. package/locales/en-GB.js +12 -0
  31. package/locales/en-US.cjs +12 -0
  32. package/locales/en-US.js +12 -0
  33. package/locales/ja-JP.cjs +12 -0
  34. package/locales/ja-JP.js +12 -0
  35. package/locales/zh-CN.cjs +12 -0
  36. package/locales/zh-CN.js +12 -0
  37. package/package.json +6 -1
  38. package/popup/index.cjs +1 -1
  39. package/popup/index.js +1 -1
  40. package/searchable-select/index.cjs +5 -0
  41. package/searchable-select/index.js +3 -0
  42. package/select/index.cjs +1 -1
  43. package/select/index.js +1 -1
  44. package/selectable-box/index.cjs +1 -1
  45. package/selectable-box/index.js +1 -1
  46. package/shared/anchored.js +1 -1
  47. package/shared/calendar-event.js +1 -1
  48. package/shared/definition.cjs +2 -2
  49. package/shared/definition.js +2 -2
  50. package/shared/definition11.cjs +1 -1
  51. package/shared/definition11.js +1 -1
  52. package/shared/definition12.cjs +1 -1
  53. package/shared/definition12.js +1 -1
  54. package/shared/definition13.js +1 -1
  55. package/shared/definition14.cjs +1 -1
  56. package/shared/definition14.js +1 -1
  57. package/shared/definition15.cjs +7 -8
  58. package/shared/definition15.js +2 -3
  59. package/shared/definition16.cjs +11 -7
  60. package/shared/definition16.js +10 -6
  61. package/shared/definition17.cjs +2 -2
  62. package/shared/definition17.js +2 -2
  63. package/shared/definition18.cjs +5 -6
  64. package/shared/definition18.js +3 -4
  65. package/shared/definition19.cjs +5 -6
  66. package/shared/definition19.js +3 -4
  67. package/shared/definition20.cjs +16 -38
  68. package/shared/definition20.js +17 -39
  69. package/shared/definition21.cjs +7 -6
  70. package/shared/definition21.js +8 -7
  71. package/shared/definition23.cjs +1 -1
  72. package/shared/definition23.js +2 -2
  73. package/shared/definition24.cjs +2 -2
  74. package/shared/definition24.js +2 -2
  75. package/shared/definition25.cjs +6 -7
  76. package/shared/definition25.js +2 -3
  77. package/shared/definition26.cjs +1 -1
  78. package/shared/definition26.js +2 -2
  79. package/shared/definition27.cjs +1 -1
  80. package/shared/definition27.js +1 -1
  81. package/shared/definition28.js +1 -1
  82. package/shared/definition29.cjs +8 -4
  83. package/shared/definition29.js +8 -4
  84. package/shared/definition3.cjs +1 -1
  85. package/shared/definition3.js +2 -2
  86. package/shared/definition30.cjs +4 -2
  87. package/shared/definition30.js +4 -2
  88. package/shared/definition31.cjs +1 -1
  89. package/shared/definition31.js +2 -2
  90. package/shared/definition32.cjs +1 -1
  91. package/shared/definition32.js +1 -1
  92. package/shared/definition34.cjs +2 -3
  93. package/shared/definition34.js +2 -3
  94. package/shared/definition35.cjs +21 -16
  95. package/shared/definition35.js +16 -11
  96. package/shared/definition36.cjs +50 -207
  97. package/shared/definition36.js +51 -207
  98. package/shared/definition37.js +1 -1
  99. package/shared/definition38.cjs +1 -1
  100. package/shared/definition38.js +1 -1
  101. package/shared/definition4.cjs +6 -4
  102. package/shared/definition4.js +7 -5
  103. package/shared/definition41.cjs +1 -1
  104. package/shared/definition41.js +1 -1
  105. package/shared/definition42.cjs +6 -7
  106. package/shared/definition42.js +6 -7
  107. package/shared/definition43.cjs +998 -643
  108. package/shared/definition43.js +992 -638
  109. package/shared/definition44.cjs +723 -112
  110. package/shared/definition44.js +722 -111
  111. package/shared/definition45.cjs +121 -79
  112. package/shared/definition45.js +120 -78
  113. package/shared/definition46.cjs +81 -616
  114. package/shared/definition46.js +80 -614
  115. package/shared/definition47.cjs +609 -116
  116. package/shared/definition47.js +607 -115
  117. package/shared/definition48.cjs +116 -134
  118. package/shared/definition48.js +115 -133
  119. package/shared/definition49.cjs +149 -19
  120. package/shared/definition49.js +148 -18
  121. package/shared/definition5.cjs +5 -6
  122. package/shared/definition5.js +5 -6
  123. package/shared/definition50.cjs +21 -82
  124. package/shared/definition50.js +20 -81
  125. package/shared/definition51.cjs +78 -494
  126. package/shared/definition51.js +77 -493
  127. package/shared/definition52.cjs +568 -28
  128. package/shared/definition52.js +567 -27
  129. package/shared/definition53.cjs +28 -123
  130. package/shared/definition53.js +27 -123
  131. package/shared/definition54.cjs +115 -296
  132. package/shared/definition54.js +114 -295
  133. package/shared/definition55.cjs +258 -318
  134. package/shared/definition55.js +252 -312
  135. package/shared/definition56.cjs +303 -784
  136. package/shared/definition56.js +298 -779
  137. package/shared/definition57.cjs +802 -95
  138. package/shared/definition57.js +801 -94
  139. package/shared/definition58.cjs +95 -60
  140. package/shared/definition58.js +94 -59
  141. package/shared/definition59.cjs +117 -75
  142. package/shared/definition59.js +116 -74
  143. package/shared/definition6.cjs +1 -1
  144. package/shared/definition6.js +1 -1
  145. package/shared/definition60.cjs +70 -285
  146. package/shared/definition60.js +71 -286
  147. package/shared/definition61.cjs +296 -325
  148. package/shared/definition61.js +295 -324
  149. package/shared/definition62.cjs +66160 -27
  150. package/shared/definition62.js +66159 -26
  151. package/shared/definition63.cjs +24 -1952
  152. package/shared/definition63.js +23 -1950
  153. package/shared/definition64.cjs +1976 -0
  154. package/shared/definition64.js +1971 -0
  155. package/shared/definition7.cjs +1 -1
  156. package/shared/definition7.js +1 -1
  157. package/shared/definition8.cjs +2 -3
  158. package/shared/definition8.js +3 -4
  159. package/shared/definition9.cjs +1 -1
  160. package/shared/definition9.js +1 -1
  161. package/shared/dialog/index.d.ts +1 -0
  162. package/shared/form-elements.cjs +236 -0
  163. package/shared/form-elements.js +229 -0
  164. package/shared/icon.js +1 -1
  165. package/shared/index2.cjs +6 -256
  166. package/shared/index2.js +6 -249
  167. package/shared/listbox-option.cjs +204 -0
  168. package/shared/listbox-option.js +201 -0
  169. package/shared/listbox.cjs +3 -3
  170. package/shared/listbox.js +1 -1
  171. package/shared/localization/Locale.d.ts +4 -0
  172. package/shared/localized.cjs +26 -2
  173. package/shared/localized.js +25 -2
  174. package/shared/playbackRates.cjs +13 -0
  175. package/shared/playbackRates.js +11 -0
  176. package/shared/presentationDate.cjs +11 -11
  177. package/shared/presentationDate.js +11 -11
  178. package/shared/scrollIntoView.cjs +51 -0
  179. package/shared/scrollIntoView.js +49 -0
  180. package/shared/slider.template.cjs +1 -1
  181. package/shared/slider.template.js +1 -1
  182. package/shared/text-anchor.cjs +1 -1
  183. package/shared/text-anchor.js +1 -1
  184. package/shared/text-field.cjs +1 -1
  185. package/shared/text-field.js +1 -1
  186. package/shared/utils/playbackRates.d.ts +1 -0
  187. package/shared/utils/scrollIntoView.d.ts +1 -0
  188. package/side-drawer/index.cjs +1 -1
  189. package/side-drawer/index.js +1 -1
  190. package/slider/index.cjs +1 -1
  191. package/slider/index.js +1 -1
  192. package/split-button/index.cjs +1 -1
  193. package/split-button/index.js +1 -1
  194. package/styles/core/all.css +1 -1
  195. package/styles/core/theme.css +1 -1
  196. package/styles/core/typography.css +1 -1
  197. package/styles/tokens/theme-dark.css +4 -4
  198. package/styles/tokens/theme-light.css +4 -4
  199. package/styles/tokens/vivid-2-compat.css +1 -1
  200. package/switch/index.cjs +1 -1
  201. package/switch/index.js +1 -1
  202. package/tab/index.cjs +1 -1
  203. package/tab/index.js +1 -1
  204. package/tab-panel/index.cjs +1 -1
  205. package/tab-panel/index.js +1 -1
  206. package/tabs/index.cjs +1 -1
  207. package/tabs/index.js +1 -1
  208. package/tag/index.cjs +1 -1
  209. package/tag/index.js +1 -1
  210. package/tag-group/index.cjs +1 -1
  211. package/tag-group/index.js +1 -1
  212. package/text-area/index.cjs +1 -1
  213. package/text-area/index.js +1 -1
  214. package/text-field/index.cjs +1 -1
  215. package/text-field/index.js +1 -1
  216. package/time-picker/index.cjs +1 -1
  217. package/time-picker/index.js +1 -1
  218. package/toggletip/index.cjs +1 -1
  219. package/toggletip/index.js +1 -1
  220. package/tooltip/index.cjs +1 -1
  221. package/tooltip/index.js +1 -1
  222. package/tree-item/index.cjs +1 -1
  223. package/tree-item/index.js +1 -1
  224. package/tree-view/index.cjs +1 -1
  225. package/tree-view/index.js +1 -1
  226. package/video-player/index.cjs +1 -1
  227. package/video-player/index.js +1 -1
  228. package/vivid.api.json +312 -8
  229. package/appearance-ui/index.cjs +0 -102
  230. package/appearance-ui/index.js +0 -100
  231. package/lib/appearance-ui/appearance-ui.d.ts +0 -12
  232. package/lib/appearance-ui/appearance-ui.template.d.ts +0 -4
  233. package/lib/appearance-ui/definition.d.ts +0 -3
  234. package/shared/video-player.cjs +0 -65860
  235. package/shared/video-player.js +0 -65857
@@ -1,389 +1,26 @@
1
1
  'use strict';
2
2
 
3
3
  const index = require('./index.cjs');
4
- const definition = require('./definition50.cjs');
5
- const definition$1 = require('./definition49.cjs');
6
- const startEnd = require('./start-end.cjs');
4
+ const definition = require('./definition27.cjs');
5
+ const affix = require('./affix.cjs');
7
6
  const applyMixins = require('./apply-mixins.cjs');
8
- const keyCodes = require('./key-codes.cjs');
9
- const strings = require('./strings.cjs');
10
- const numbers = require('./numbers.cjs');
11
- const ref = require('./ref.cjs');
12
- const slotted = require('./slotted.cjs');
13
- const when = require('./when.cjs');
7
+ const localized = require('./localized.cjs');
14
8
  const classNames = require('./class-names.cjs');
15
9
 
16
10
  /**
17
- * The orientation of the {@link @microsoft/fast-foundation#(Tabs:class)} component
18
- * @public
19
- */
20
- const TabsOrientation = {
21
- vertical: "vertical",
22
- horizontal: "horizontal",
23
- };
24
- /**
25
- * A Tabs Custom HTML Element.
26
- * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#tablist | ARIA tablist }.
11
+ * A Tab Component to be used with {@link @microsoft/fast-foundation#(Tabs:class)}
27
12
  *
28
- * @slot start - Content which can be provided before the tablist element
29
- * @slot end - Content which can be provided after the tablist element
30
- * @slot tab - The slot for tabs
31
- * @slot tabpanel - The slot for tabpanels
32
- * @csspart tablist - The element wrapping for the tabs
33
- * @csspart tab - The tab slot
34
- * @csspart activeIndicator - The visual indicator
35
- * @csspart tabpanel - The tabpanel slot
36
- * @fires change - Fires a custom 'change' event when a tab is clicked or during keyboard navigation
13
+ * @slot - The default slot for the tab content
37
14
  *
38
15
  * @public
39
16
  */
40
- let Tabs$1 = class Tabs extends index.FoundationElement {
41
- constructor() {
42
- super(...arguments);
43
- /**
44
- * The orientation
45
- * @public
46
- * @remarks
47
- * HTML Attribute: orientation
48
- */
49
- this.orientation = TabsOrientation.horizontal;
50
- /**
51
- * Whether or not to show the active indicator
52
- * @public
53
- * @remarks
54
- * HTML Attribute: activeindicator
55
- */
56
- this.activeindicator = true;
57
- /**
58
- * @internal
59
- */
60
- this.showActiveIndicator = true;
61
- this.prevActiveTabIndex = 0;
62
- this.activeTabIndex = 0;
63
- this.ticking = false;
64
- this.change = () => {
65
- this.$emit("change", this.activetab);
66
- };
67
- this.isDisabledElement = (el) => {
68
- return el.getAttribute("aria-disabled") === "true";
69
- };
70
- this.isHiddenElement = (el) => {
71
- return el.hasAttribute("hidden");
72
- };
73
- this.isFocusableElement = (el) => {
74
- return !this.isDisabledElement(el) && !this.isHiddenElement(el);
75
- };
76
- this.setTabs = () => {
77
- const gridHorizontalProperty = "gridColumn";
78
- const gridVerticalProperty = "gridRow";
79
- const gridProperty = this.isHorizontal()
80
- ? gridHorizontalProperty
81
- : gridVerticalProperty;
82
- this.activeTabIndex = this.getActiveIndex();
83
- this.showActiveIndicator = false;
84
- this.tabs.forEach((tab, index) => {
85
- if (tab.slot === "tab") {
86
- const isActiveTab = this.activeTabIndex === index && this.isFocusableElement(tab);
87
- if (this.activeindicator && this.isFocusableElement(tab)) {
88
- this.showActiveIndicator = true;
89
- }
90
- const tabId = this.tabIds[index];
91
- const tabpanelId = this.tabpanelIds[index];
92
- tab.setAttribute("id", tabId);
93
- tab.setAttribute("aria-selected", isActiveTab ? "true" : "false");
94
- tab.setAttribute("aria-controls", tabpanelId);
95
- tab.addEventListener("click", this.handleTabClick);
96
- tab.addEventListener("keydown", this.handleTabKeyDown);
97
- tab.setAttribute("tabindex", isActiveTab ? "0" : "-1");
98
- if (isActiveTab) {
99
- this.activetab = tab;
100
- this.activeid = tabId;
101
- }
102
- }
103
- // If the original property isn't emptied out,
104
- // the next set will morph into a grid-area style setting that is not what we want
105
- tab.style[gridHorizontalProperty] = "";
106
- tab.style[gridVerticalProperty] = "";
107
- tab.style[gridProperty] = `${index + 1}`;
108
- !this.isHorizontal()
109
- ? tab.classList.add("vertical")
110
- : tab.classList.remove("vertical");
111
- });
112
- };
113
- this.setTabPanels = () => {
114
- this.tabpanels.forEach((tabpanel, index) => {
115
- const tabId = this.tabIds[index];
116
- const tabpanelId = this.tabpanelIds[index];
117
- tabpanel.setAttribute("id", tabpanelId);
118
- tabpanel.setAttribute("aria-labelledby", tabId);
119
- this.activeTabIndex !== index
120
- ? tabpanel.setAttribute("hidden", "")
121
- : tabpanel.removeAttribute("hidden");
122
- });
123
- };
124
- this.handleTabClick = (event) => {
125
- const selectedTab = event.currentTarget;
126
- if (selectedTab.nodeType === 1 && this.isFocusableElement(selectedTab)) {
127
- this.prevActiveTabIndex = this.activeTabIndex;
128
- this.activeTabIndex = this.tabs.indexOf(selectedTab);
129
- this.setComponent();
130
- }
131
- };
132
- this.handleTabKeyDown = (event) => {
133
- if (this.isHorizontal()) {
134
- switch (event.key) {
135
- case keyCodes.keyArrowLeft:
136
- event.preventDefault();
137
- this.adjustBackward(event);
138
- break;
139
- case keyCodes.keyArrowRight:
140
- event.preventDefault();
141
- this.adjustForward(event);
142
- break;
143
- }
144
- }
145
- else {
146
- switch (event.key) {
147
- case keyCodes.keyArrowUp:
148
- event.preventDefault();
149
- this.adjustBackward(event);
150
- break;
151
- case keyCodes.keyArrowDown:
152
- event.preventDefault();
153
- this.adjustForward(event);
154
- break;
155
- }
156
- }
157
- switch (event.key) {
158
- case keyCodes.keyHome:
159
- event.preventDefault();
160
- this.adjust(-this.activeTabIndex);
161
- break;
162
- case keyCodes.keyEnd:
163
- event.preventDefault();
164
- this.adjust(this.tabs.length - this.activeTabIndex - 1);
165
- break;
166
- }
167
- };
168
- this.adjustForward = (e) => {
169
- const group = this.tabs;
170
- let index = 0;
171
- index = this.activetab ? group.indexOf(this.activetab) + 1 : 1;
172
- if (index === group.length) {
173
- index = 0;
174
- }
175
- while (index < group.length && group.length > 1) {
176
- if (this.isFocusableElement(group[index])) {
177
- this.moveToTabByIndex(group, index);
178
- break;
179
- }
180
- else if (this.activetab && index === group.indexOf(this.activetab)) {
181
- break;
182
- }
183
- else if (index + 1 >= group.length) {
184
- index = 0;
185
- }
186
- else {
187
- index += 1;
188
- }
189
- }
190
- };
191
- this.adjustBackward = (e) => {
192
- const group = this.tabs;
193
- let index = 0;
194
- index = this.activetab ? group.indexOf(this.activetab) - 1 : 0;
195
- index = index < 0 ? group.length - 1 : index;
196
- while (index >= 0 && group.length > 1) {
197
- if (this.isFocusableElement(group[index])) {
198
- this.moveToTabByIndex(group, index);
199
- break;
200
- }
201
- else if (index - 1 < 0) {
202
- index = group.length - 1;
203
- }
204
- else {
205
- index -= 1;
206
- }
207
- }
208
- };
209
- this.moveToTabByIndex = (group, index) => {
210
- const tab = group[index];
211
- this.activetab = tab;
212
- this.prevActiveTabIndex = this.activeTabIndex;
213
- this.activeTabIndex = index;
214
- tab.focus();
215
- this.setComponent();
216
- };
217
- }
218
- /**
219
- * @internal
220
- */
221
- orientationChanged() {
222
- if (this.$fastController.isConnected) {
223
- this.setTabs();
224
- this.setTabPanels();
225
- this.handleActiveIndicatorPosition();
226
- }
227
- }
228
- /**
229
- * @internal
230
- */
231
- activeidChanged(oldValue, newValue) {
232
- if (this.$fastController.isConnected &&
233
- this.tabs.length <= this.tabpanels.length) {
234
- this.prevActiveTabIndex = this.tabs.findIndex((item) => item.id === oldValue);
235
- this.setTabs();
236
- this.setTabPanels();
237
- this.handleActiveIndicatorPosition();
238
- }
239
- }
240
- /**
241
- * @internal
242
- */
243
- tabsChanged() {
244
- if (this.$fastController.isConnected &&
245
- this.tabs.length <= this.tabpanels.length) {
246
- this.tabIds = this.getTabIds();
247
- this.tabpanelIds = this.getTabPanelIds();
248
- this.setTabs();
249
- this.setTabPanels();
250
- this.handleActiveIndicatorPosition();
251
- }
252
- }
253
- /**
254
- * @internal
255
- */
256
- tabpanelsChanged() {
257
- if (this.$fastController.isConnected &&
258
- this.tabpanels.length <= this.tabs.length) {
259
- this.tabIds = this.getTabIds();
260
- this.tabpanelIds = this.getTabPanelIds();
261
- this.setTabs();
262
- this.setTabPanels();
263
- this.handleActiveIndicatorPosition();
264
- }
265
- }
266
- getActiveIndex() {
267
- const id = this.activeid;
268
- if (id !== undefined) {
269
- return this.tabIds.indexOf(this.activeid) === -1
270
- ? 0
271
- : this.tabIds.indexOf(this.activeid);
272
- }
273
- else {
274
- return 0;
275
- }
276
- }
277
- getTabIds() {
278
- return this.tabs.map((tab) => {
279
- var _a;
280
- return (_a = tab.getAttribute("id")) !== null && _a !== void 0 ? _a : `tab-${strings.uniqueId()}`;
281
- });
282
- }
283
- getTabPanelIds() {
284
- return this.tabpanels.map((tabPanel) => {
285
- var _a;
286
- return (_a = tabPanel.getAttribute("id")) !== null && _a !== void 0 ? _a : `panel-${strings.uniqueId()}`;
287
- });
288
- }
289
- setComponent() {
290
- if (this.activeTabIndex !== this.prevActiveTabIndex) {
291
- this.activeid = this.tabIds[this.activeTabIndex];
292
- this.focusTab();
293
- this.change();
294
- }
295
- }
296
- isHorizontal() {
297
- return this.orientation === TabsOrientation.horizontal;
298
- }
299
- handleActiveIndicatorPosition() {
300
- // Ignore if we click twice on the same tab
301
- if (this.showActiveIndicator &&
302
- this.activeindicator &&
303
- this.activeTabIndex !== this.prevActiveTabIndex) {
304
- if (this.ticking) {
305
- this.ticking = false;
306
- }
307
- else {
308
- this.ticking = true;
309
- this.animateActiveIndicator();
310
- }
311
- }
312
- }
313
- animateActiveIndicator() {
314
- this.ticking = true;
315
- const gridProperty = this.isHorizontal() ? "gridColumn" : "gridRow";
316
- const translateProperty = this.isHorizontal()
317
- ? "translateX"
318
- : "translateY";
319
- const offsetProperty = this.isHorizontal() ? "offsetLeft" : "offsetTop";
320
- const prev = this.activeIndicatorRef[offsetProperty];
321
- this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`;
322
- const next = this.activeIndicatorRef[offsetProperty];
323
- this.activeIndicatorRef.style[gridProperty] = `${this.prevActiveTabIndex + 1}`;
324
- const dif = next - prev;
325
- this.activeIndicatorRef.style.transform = `${translateProperty}(${dif}px)`;
326
- this.activeIndicatorRef.classList.add("activeIndicatorTransition");
327
- this.activeIndicatorRef.addEventListener("transitionend", () => {
328
- this.ticking = false;
329
- this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`;
330
- this.activeIndicatorRef.style.transform = `${translateProperty}(0px)`;
331
- this.activeIndicatorRef.classList.remove("activeIndicatorTransition");
332
- });
333
- }
334
- /**
335
- * The adjust method for FASTTabs
336
- * @public
337
- * @remarks
338
- * This method allows the active index to be adjusted by numerical increments
339
- */
340
- adjust(adjustment) {
341
- const focusableTabs = this.tabs.filter(t => this.isFocusableElement(t));
342
- const currentActiveTabIndex = focusableTabs.indexOf(this.activetab);
343
- const nextTabIndex = numbers.limit(0, focusableTabs.length - 1, currentActiveTabIndex + adjustment);
344
- // the index of the next focusable tab within the context of all available tabs
345
- const nextIndex = this.tabs.indexOf(focusableTabs[nextTabIndex]);
346
- if (nextIndex > -1) {
347
- this.moveToTabByIndex(this.tabs, nextIndex);
348
- }
349
- }
350
- focusTab() {
351
- this.tabs[this.activeTabIndex].focus();
352
- }
353
- /**
354
- * @internal
355
- */
356
- connectedCallback() {
357
- super.connectedCallback();
358
- this.tabIds = this.getTabIds();
359
- this.tabpanelIds = this.getTabPanelIds();
360
- this.activeTabIndex = this.getActiveIndex();
361
- }
17
+ let Tab$1 = class Tab extends index.FoundationElement {
362
18
  };
363
- index.__decorate([
364
- index.attr
365
- ], Tabs$1.prototype, "orientation", void 0);
366
- index.__decorate([
367
- index.attr
368
- ], Tabs$1.prototype, "activeid", void 0);
369
- index.__decorate([
370
- index.observable
371
- ], Tabs$1.prototype, "tabs", void 0);
372
- index.__decorate([
373
- index.observable
374
- ], Tabs$1.prototype, "tabpanels", void 0);
375
19
  index.__decorate([
376
20
  index.attr({ mode: "boolean" })
377
- ], Tabs$1.prototype, "activeindicator", void 0);
378
- index.__decorate([
379
- index.observable
380
- ], Tabs$1.prototype, "activeIndicatorRef", void 0);
381
- index.__decorate([
382
- index.observable
383
- ], Tabs$1.prototype, "showActiveIndicator", void 0);
384
- applyMixins.applyMixins(Tabs$1, startEnd.StartEnd);
21
+ ], Tab$1.prototype, "disabled", void 0);
385
22
 
386
- const styles = ":host{display:block}.base{display:grid;box-sizing:border-box}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base.connotation-cta{--_connotation-color-firm: var(--vvd-tabs-cta-firm, var(--vvd-color-cta-600))}.base:not(.connotation-cta){--_connotation-color-firm: var(--vvd-tabs-accent-firm, var(--vvd-color-canvas-text))}.base.orientation-vertical{overflow:hidden;block-size:inherit;grid-template-columns:auto 1fr;grid-template-rows:1fr}.base:not(.orientation-vertical){grid-template-columns:1fr;grid-template-rows:auto 1fr;max-block-size:100%}.tablist{--_tabs-tablist-gutter: 8px;--_tabs-active-indicator-stroke-width: 2px;position:relative;display:grid;box-sizing:border-box;color:var(--_appearance-color-text)}.base.orientation-vertical .tablist{padding:var(--_tabs-tablist-gutter);grid-row:1/2;grid-template-columns:auto 1fr;grid-template-rows:auto;inline-size:100%;place-self:flex-start end;row-gap:var(--_tabs-tablist-gutter)}.base:not(.orientation-vertical) .tablist{justify-content:flex-start;column-gap:var(--_tabs-tablist-gutter);grid-auto-flow:column;grid-template-columns:auto;grid-template-rows:auto auto;inline-size:100%;padding-inline:var(--_tabs-tablist-gutter)}.base:not(.orientation-vertical) .tablist-wrapper{overflow:auto hidden;align-self:end;border-bottom:1px solid var(--vvd-color-neutral-300);inline-size:100%}.base.orientation-vertical .tablist-wrapper{overflow:hidden auto;block-size:100%;box-shadow:1px 0 0 0 var(--vvd-color-neutral-300)}.tablist-wrapper::-webkit-scrollbar{display:none}.tabpanel{box-sizing:border-box;block-size:100%;min-block-size:0;min-inline-size:0}.base.scroll .tabpanel{overflow-y:auto}.base.gutters-small .tabpanel{padding:calc(1px*(40 + 4*clamp(-1,var(--vvd-size-density, 0),2)) - (1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2))))}.active-indicator{background:currentColor;margin-inline-start:calc(var(--_tabs-tablist-gutter) * -1)}.base.orientation-vertical .active-indicator{align-self:center;border-radius:2px;block-size:80%;grid-area:1/1/auto/auto;inline-size:var(--_tabs-active-indicator-stroke-width)}.base:not(.orientation-vertical) .active-indicator{position:absolute;z-index:1;block-size:var(--_tabs-active-indicator-stroke-width);grid-column:1/auto;inline-size:calc(var(--_tabs-active-tab-inline-size) - 32px);inset-block-end:0;inset-inline-start:8px;justify-self:center;padding-inline:var(--_tabs-tablist-gutter)}.activeIndicatorTransition{transition:transform .2s ease-out 0s,inline-size .2s ease-out 0s}.base:not(.orientation-vertical) .active-indicator:not(.activeIndicatorTransition){opacity:0}";
23
+ const styles = ":host{--_vvd-tab-accent-firm-wrapper: var( --vvd-tab-accent-firm );--_vvd-tab-cta-firm-wrapper: var( --vvd-tab-cta-firm )}.base{--vvd-tab-accent-firm: var( --_vvd-tab-accent-firm-wrapper, var(--vvd-tab-accent-primary) );--vvd-tab-cta-firm: var( --_vvd-tab-cta-firm-wrapper, var(--vvd-tab-cta-primary) )}:host(.vertical){justify-content:end;grid-column:1/auto}:host([disabled]){cursor:not-allowed}:host([removable]){position:relative}:host(:focus-visible){outline:none}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.base:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base.connotation-cta{--_connotation-color-primary-text: var(--vvd-tab-cta-primary-text, var(--vvd-color-canvas));--_connotation-color-firm: var(--vvd-tab-cta-firm, var(--vvd-color-cta-600));--_connotation-color-faint: var(--vvd-tab-cta-faint, var(--vvd-color-cta-50));--_connotation-color-fierce: var(--vvd-tab-cta-fierce, var(--vvd-color-cta-700));--_connotation-color-pale: var(--vvd-tab-cta-pale, var(--vvd-color-cta-300));--_connotation-color-soft: var(--vvd-tab-cta-soft, var(--vvd-color-cta-100))}.base:not(.connotation-cta){--_connotation-color-primary-text: var(--vvd-tab-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-firm: var(--vvd-tab-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-tab-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-fierce: var(--vvd-tab-accent-fierce, var(--vvd-color-neutral-700));--_connotation-color-pale: var(--vvd-tab-accent-pale, var(--vvd-color-neutral-300));--_connotation-color-soft: var(--vvd-tab-accent-soft, var(--vvd-color-neutral-100))}.base{position:relative;display:flex;box-sizing:border-box;align-items:center;padding:var(--_tabs-tablist-gutter);background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base-bold);gap:var(--_tabs-tablist-gutter);min-block-size:40px;vertical-align:middle;white-space:nowrap}@supports (user-select: none){.base{user-select:none}}.base:not(.shape-sharp){border-radius:8px}.base:not(.disabled){cursor:pointer}.base.disabled{pointer-events:none}.base.removable{padding-inline-end:40px}:host(:focus-visible) .base{--focus-stroke-gap-color: transparent;box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px))}:host(.vertical) .base{margin-inline-start:var(--_tabs-active-indicator-stroke-width)}slot[name=icon]{font-size:20px;line-height:1}.icon-trailing slot[name=icon]{display:inline-block;order:1;margin-inline-start:auto}:host(:not(.vertical)) .base:after{position:absolute;border-radius:2px;background:currentColor;block-size:2px;content:\"\";inline-size:100%;inset-block-end:0;inset-inline-start:0;pointer-events:none;transition-property:opacity}:host(:not(.vertical)):host([aria-selected=true]) .base:after{transition-delay:.2s}:host(:not(.vertical)):host(:not([aria-selected=true])) .base:after{opacity:0}.close{position:absolute;display:flex;align-items:center;justify-content:center;block-size:24px;inline-size:24px;inset-block-start:50%;inset-inline-end:4px;transform:translateY(-50%)}.close vwc-icon{font-size:12px}.close .icon{display:flex;align-items:center;justify-content:center}";
387
24
 
388
25
  var __defProp = Object.defineProperty;
389
26
  var __decorateClass = (decorators, target, key, kind) => {
@@ -394,154 +31,101 @@ var __decorateClass = (decorators, target, key, kind) => {
394
31
  if (result) __defProp(target, key, result);
395
32
  return result;
396
33
  };
397
- const ACTIVE_TAB_WIDTH = "--_tabs-active-tab-inline-size";
398
- class Tabs extends Tabs$1 {
34
+ class Tab extends Tab$1 {
399
35
  constructor() {
400
36
  super(...arguments);
401
- this.scrollablePanel = false;
402
- }
403
- connotationChanged() {
404
- this.#updateTabsConnotation();
37
+ this.removable = false;
38
+ this.tabIndex = "-1";
39
+ this.ariaSelected = null;
405
40
  }
406
- orientationChanged() {
407
- super.orientationChanged();
408
- this.patchIndicatorStyleTransition();
409
- if (!this.activeIndicatorRef) return;
410
- if (this.orientation === TabsOrientation.vertical) {
411
- this.activeIndicatorRef.style.removeProperty(ACTIVE_TAB_WIDTH);
412
- }
413
- this.#patchActiveID();
41
+ _handleCloseClick(e) {
42
+ e.stopImmediatePropagation();
43
+ this.$emit("close");
414
44
  }
415
- activeidChanged(oldValue, newValue) {
416
- super.activeidChanged(oldValue, newValue);
417
- this.patchIndicatorStyleTransition();
418
- this.#patchActiveID();
419
- }
420
- tabsChanged() {
421
- super.tabsChanged();
422
- this.patchIndicatorStyleTransition();
423
- this.#patchActiveID();
424
- }
425
- tabpanelsChanged() {
426
- super.tabpanelsChanged();
427
- this.patchIndicatorStyleTransition();
428
- this.#patchActiveID();
429
- }
430
- patchIndicatorStyleTransition() {
431
- if (!this.activetab || !this.activeIndicatorRef) return;
432
- if (this.orientation === TabsOrientation.vertical || !this.showActiveIndicator)
433
- return;
434
- const width = this.activetab.getBoundingClientRect().width;
435
- this.activeIndicatorRef.style.setProperty(ACTIVE_TAB_WIDTH, `${width}px`);
436
- }
437
- #updateTabsConnotation() {
438
- if (this.tabs) {
439
- this.tabs.forEach((tab) => {
440
- if (tab.getAttribute("aria-selected") === "true") {
441
- tab.setAttribute("connotation", this.connotation);
442
- } else {
443
- tab.removeAttribute("connotation");
444
- }
445
- });
446
- }
447
- }
448
- get #tabListWrapper() {
449
- return this.shadowRoot.querySelector(".tablist-wrapper");
450
- }
451
- #scrollToIndex(index) {
452
- const tab = this.tabs[index];
453
- if (!tab) return;
454
- let left = 0;
455
- let top = 0;
456
- if (this.orientation === TabsOrientation.vertical) {
457
- if (index === this.tabs.length - 1) {
458
- top = this.#tabListWrapper.scrollHeight;
459
- }
460
- if (index > 0 && index < this.tabs.length - 1) {
461
- top = tab.offsetTop - this.#tabListWrapper.offsetHeight / 2 + tab.offsetHeight / 2;
462
- }
463
- } else {
464
- if (index === this.tabs.length - 1) {
465
- left = this.#tabListWrapper.scrollWidth;
466
- }
467
- if (index > 0 && index < this.tabs.length - 1) {
468
- left = tab.offsetLeft - this.#tabListWrapper.offsetWidth / 2 + tab.offsetWidth / 2;
469
- }
470
- }
471
- this.#tabListWrapper.scrollTo({ top, left, behavior: "smooth" });
472
- }
473
- // adapted FAST fix https://github.com/microsoft/fast/pull/6606
474
- #patchActiveID() {
475
- if (!this.activetab) return;
476
- const idx = this.tabs.indexOf(this.activetab);
477
- this.activeid = this["tabIds"][idx];
478
- this.#updateTabsConnotation();
479
- this.#scrollToIndex(idx);
45
+ _onKeyDown(e) {
46
+ if (!this.removable || e.key !== "Delete") return true;
47
+ e.stopImmediatePropagation();
48
+ this.$emit("close");
49
+ return false;
480
50
  }
481
51
  }
482
52
  __decorateClass([
483
- index.observable
484
- ], Tabs.prototype, "tablist");
53
+ index.attr
54
+ ], Tab.prototype, "connotation");
485
55
  __decorateClass([
486
56
  index.attr
487
- ], Tabs.prototype, "connotation");
57
+ ], Tab.prototype, "shape");
488
58
  __decorateClass([
489
59
  index.attr
490
- ], Tabs.prototype, "gutters");
60
+ ], Tab.prototype, "label");
61
+ __decorateClass([
62
+ index.attr({ mode: "boolean" })
63
+ ], Tab.prototype, "removable");
491
64
  __decorateClass([
492
- index.attr({ mode: "boolean", attribute: "scrollable-panel" })
493
- ], Tabs.prototype, "scrollablePanel");
65
+ index.attr({ mode: "fromView" })
66
+ ], Tab.prototype, "tabIndex");
67
+ __decorateClass([
68
+ index.attr({ attribute: "aria-selected" })
69
+ ], Tab.prototype, "ariaSelected");
70
+ applyMixins.applyMixins(Tab, affix.AffixIconWithTrailing);
71
+ applyMixins.applyMixins(Tab, localized.Localized);
494
72
 
495
73
  const getClasses = ({
496
74
  connotation,
497
- orientation,
498
- gutters,
499
- scrollablePanel
75
+ disabled,
76
+ ariaSelected,
77
+ iconTrailing,
78
+ shape,
79
+ removable
500
80
  }) => classNames.classNames(
501
81
  "base",
502
- [`connotation-${connotation}`, Boolean(connotation)],
503
- [`orientation-${orientation}`, Boolean(orientation)],
504
- `gutters-${gutters ?? "small"}`,
505
- ["scroll", Boolean(scrollablePanel)]
82
+ [
83
+ `connotation-${connotation}`,
84
+ Boolean(connotation) && ariaSelected === "true"
85
+ ],
86
+ [`shape-${shape}`, Boolean(shape)],
87
+ ["disabled", Boolean(disabled)],
88
+ ["selected", ariaSelected === "true"],
89
+ ["icon-trailing", iconTrailing],
90
+ ["removable", removable]
506
91
  );
507
- function TabsTemplate() {
92
+ function renderDismissButton(context) {
93
+ const affixIconTemplate = affix.affixIconTemplateFactory(context);
94
+ return index.html` <span
95
+ aria-label="${(x) => x.locale.tab.dismissButtonLabel}"
96
+ class="close"
97
+ id="close-btn"
98
+ @click="${(x, c) => x._handleCloseClick(c.event)}"
99
+ >
100
+ ${() => affixIconTemplate("close-line", affix.IconWrapper.Span)}
101
+ </span>`;
102
+ }
103
+ function TabTemplate(context) {
104
+ const affixIconTemplate = affix.affixIconTemplateFactory(context);
508
105
  return index.html`
509
- <template>
106
+ <template
107
+ slot="tab"
108
+ role="tab"
109
+ aria-disabled="${(x) => x.disabled}"
110
+ aria-selected="${(x) => x.ariaSelected}"
111
+ @keydown="${(x, c) => x._onKeyDown(c.event)}"
112
+ >
510
113
  <div class="${getClasses}">
511
- <div class="tablist-wrapper">
512
- <div class="tablist" role="tablist" ${ref.ref("tablist")}>
513
- <slot name="tab" ${slotted.slotted("tabs")}></slot>
514
- ${when.when(
515
- (x) => x.showActiveIndicator,
516
- index.html`
517
- <div
518
- ${ref.ref("activeIndicatorRef")}
519
- class="active-indicator"
520
- ></div>
521
- `
522
- )}
523
- </div>
524
- </div>
525
- <div class="tabpanel">
526
- <slot name="tabpanel" ${slotted.slotted("tabpanels")}></slot>
527
- </div>
114
+ ${(x) => affixIconTemplate(x.icon, affix.IconWrapper.Slot)} ${(x) => x.label}
115
+ ${(x) => x.removable ? renderDismissButton(context) : null}
528
116
  </div>
529
117
  </template>
530
118
  `;
531
119
  }
532
120
 
533
- const tabsDefinition = Tabs.compose({
534
- baseName: "tabs",
535
- template: TabsTemplate,
121
+ const tabDefinition = Tab.compose({
122
+ baseName: "tab",
123
+ template: TabTemplate,
536
124
  styles
537
125
  });
538
- const tabsRegistries = [
539
- tabsDefinition(),
540
- ...definition.tabRegistries,
541
- ...definition$1.tabPanelRegistries
542
- ];
543
- const registerTabs = index.registerFactory(tabsRegistries);
126
+ const tabRegistries = [tabDefinition(), ...definition.iconRegistries];
127
+ const registerTab = index.registerFactory(tabRegistries);
544
128
 
545
- exports.registerTabs = registerTabs;
546
- exports.tabsDefinition = tabsDefinition;
547
- exports.tabsRegistries = tabsRegistries;
129
+ exports.registerTab = registerTab;
130
+ exports.tabDefinition = tabDefinition;
131
+ exports.tabRegistries = tabRegistries;