@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,387 +1,24 @@
1
- import { F as FoundationElement, _ as __decorate, a as attr, o as observable, h as html, r as registerFactory } from './index.js';
2
- import { a as tabRegistries } from './definition50.js';
3
- import { a as tabPanelRegistries } from './definition49.js';
4
- import { S as StartEnd } from './start-end.js';
1
+ import { F as FoundationElement, _ as __decorate, a as attr, h as html, r as registerFactory } from './index.js';
2
+ import { a as iconRegistries } from './definition27.js';
3
+ import { b as AffixIconWithTrailing, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
5
4
  import { a as applyMixins } from './apply-mixins.js';
6
- import { h as keyArrowRight, i as keyArrowLeft, f as keyArrowDown, e as keyArrowUp, d as keyEnd, g as keyHome } from './key-codes.js';
7
- import { u as uniqueId } from './strings.js';
8
- import { l as limit } from './numbers.js';
9
- import { r as ref } from './ref.js';
10
- import { s as slotted } from './slotted.js';
11
- import { w as when } from './when.js';
5
+ import { L as Localized } from './localized.js';
12
6
  import { c as classNames } from './class-names.js';
13
7
 
14
8
  /**
15
- * The orientation of the {@link @microsoft/fast-foundation#(Tabs:class)} component
16
- * @public
17
- */
18
- const TabsOrientation = {
19
- vertical: "vertical",
20
- horizontal: "horizontal",
21
- };
22
- /**
23
- * A Tabs Custom HTML Element.
24
- * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#tablist | ARIA tablist }.
9
+ * A Tab Component to be used with {@link @microsoft/fast-foundation#(Tabs:class)}
25
10
  *
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
11
+ * @slot - The default slot for the tab content
35
12
  *
36
13
  * @public
37
14
  */
38
- let Tabs$1 = class Tabs 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.isHiddenElement = (el) => {
69
- return el.hasAttribute("hidden");
70
- };
71
- this.isFocusableElement = (el) => {
72
- return !this.isDisabledElement(el) && !this.isHiddenElement(el);
73
- };
74
- this.setTabs = () => {
75
- const gridHorizontalProperty = "gridColumn";
76
- const gridVerticalProperty = "gridRow";
77
- const gridProperty = this.isHorizontal()
78
- ? gridHorizontalProperty
79
- : gridVerticalProperty;
80
- this.activeTabIndex = this.getActiveIndex();
81
- this.showActiveIndicator = false;
82
- this.tabs.forEach((tab, index) => {
83
- if (tab.slot === "tab") {
84
- const isActiveTab = this.activeTabIndex === index && this.isFocusableElement(tab);
85
- if (this.activeindicator && this.isFocusableElement(tab)) {
86
- this.showActiveIndicator = true;
87
- }
88
- const tabId = this.tabIds[index];
89
- const tabpanelId = this.tabpanelIds[index];
90
- tab.setAttribute("id", tabId);
91
- tab.setAttribute("aria-selected", isActiveTab ? "true" : "false");
92
- tab.setAttribute("aria-controls", tabpanelId);
93
- tab.addEventListener("click", this.handleTabClick);
94
- tab.addEventListener("keydown", this.handleTabKeyDown);
95
- tab.setAttribute("tabindex", isActiveTab ? "0" : "-1");
96
- if (isActiveTab) {
97
- this.activetab = tab;
98
- this.activeid = tabId;
99
- }
100
- }
101
- // If the original property isn't emptied out,
102
- // the next set will morph into a grid-area style setting that is not what we want
103
- tab.style[gridHorizontalProperty] = "";
104
- tab.style[gridVerticalProperty] = "";
105
- tab.style[gridProperty] = `${index + 1}`;
106
- !this.isHorizontal()
107
- ? tab.classList.add("vertical")
108
- : tab.classList.remove("vertical");
109
- });
110
- };
111
- this.setTabPanels = () => {
112
- this.tabpanels.forEach((tabpanel, index) => {
113
- const tabId = this.tabIds[index];
114
- const tabpanelId = this.tabpanelIds[index];
115
- tabpanel.setAttribute("id", tabpanelId);
116
- tabpanel.setAttribute("aria-labelledby", tabId);
117
- this.activeTabIndex !== index
118
- ? tabpanel.setAttribute("hidden", "")
119
- : tabpanel.removeAttribute("hidden");
120
- });
121
- };
122
- this.handleTabClick = (event) => {
123
- const selectedTab = event.currentTarget;
124
- if (selectedTab.nodeType === 1 && this.isFocusableElement(selectedTab)) {
125
- this.prevActiveTabIndex = this.activeTabIndex;
126
- this.activeTabIndex = this.tabs.indexOf(selectedTab);
127
- this.setComponent();
128
- }
129
- };
130
- this.handleTabKeyDown = (event) => {
131
- if (this.isHorizontal()) {
132
- switch (event.key) {
133
- case keyArrowLeft:
134
- event.preventDefault();
135
- this.adjustBackward(event);
136
- break;
137
- case keyArrowRight:
138
- event.preventDefault();
139
- this.adjustForward(event);
140
- break;
141
- }
142
- }
143
- else {
144
- switch (event.key) {
145
- case keyArrowUp:
146
- event.preventDefault();
147
- this.adjustBackward(event);
148
- break;
149
- case keyArrowDown:
150
- event.preventDefault();
151
- this.adjustForward(event);
152
- break;
153
- }
154
- }
155
- switch (event.key) {
156
- case keyHome:
157
- event.preventDefault();
158
- this.adjust(-this.activeTabIndex);
159
- break;
160
- case keyEnd:
161
- event.preventDefault();
162
- this.adjust(this.tabs.length - this.activeTabIndex - 1);
163
- break;
164
- }
165
- };
166
- this.adjustForward = (e) => {
167
- const group = this.tabs;
168
- let index = 0;
169
- index = this.activetab ? group.indexOf(this.activetab) + 1 : 1;
170
- if (index === group.length) {
171
- index = 0;
172
- }
173
- while (index < group.length && group.length > 1) {
174
- if (this.isFocusableElement(group[index])) {
175
- this.moveToTabByIndex(group, index);
176
- break;
177
- }
178
- else if (this.activetab && index === group.indexOf(this.activetab)) {
179
- break;
180
- }
181
- else if (index + 1 >= group.length) {
182
- index = 0;
183
- }
184
- else {
185
- index += 1;
186
- }
187
- }
188
- };
189
- this.adjustBackward = (e) => {
190
- const group = this.tabs;
191
- let index = 0;
192
- index = this.activetab ? group.indexOf(this.activetab) - 1 : 0;
193
- index = index < 0 ? group.length - 1 : index;
194
- while (index >= 0 && group.length > 1) {
195
- if (this.isFocusableElement(group[index])) {
196
- this.moveToTabByIndex(group, index);
197
- break;
198
- }
199
- else if (index - 1 < 0) {
200
- index = group.length - 1;
201
- }
202
- else {
203
- index -= 1;
204
- }
205
- }
206
- };
207
- this.moveToTabByIndex = (group, index) => {
208
- const tab = group[index];
209
- this.activetab = tab;
210
- this.prevActiveTabIndex = this.activeTabIndex;
211
- this.activeTabIndex = index;
212
- tab.focus();
213
- this.setComponent();
214
- };
215
- }
216
- /**
217
- * @internal
218
- */
219
- orientationChanged() {
220
- if (this.$fastController.isConnected) {
221
- this.setTabs();
222
- this.setTabPanels();
223
- this.handleActiveIndicatorPosition();
224
- }
225
- }
226
- /**
227
- * @internal
228
- */
229
- activeidChanged(oldValue, newValue) {
230
- if (this.$fastController.isConnected &&
231
- this.tabs.length <= this.tabpanels.length) {
232
- this.prevActiveTabIndex = this.tabs.findIndex((item) => item.id === oldValue);
233
- this.setTabs();
234
- this.setTabPanels();
235
- this.handleActiveIndicatorPosition();
236
- }
237
- }
238
- /**
239
- * @internal
240
- */
241
- tabsChanged() {
242
- if (this.$fastController.isConnected &&
243
- this.tabs.length <= this.tabpanels.length) {
244
- this.tabIds = this.getTabIds();
245
- this.tabpanelIds = this.getTabPanelIds();
246
- this.setTabs();
247
- this.setTabPanels();
248
- this.handleActiveIndicatorPosition();
249
- }
250
- }
251
- /**
252
- * @internal
253
- */
254
- tabpanelsChanged() {
255
- if (this.$fastController.isConnected &&
256
- this.tabpanels.length <= this.tabs.length) {
257
- this.tabIds = this.getTabIds();
258
- this.tabpanelIds = this.getTabPanelIds();
259
- this.setTabs();
260
- this.setTabPanels();
261
- this.handleActiveIndicatorPosition();
262
- }
263
- }
264
- getActiveIndex() {
265
- const id = this.activeid;
266
- if (id !== undefined) {
267
- return this.tabIds.indexOf(this.activeid) === -1
268
- ? 0
269
- : this.tabIds.indexOf(this.activeid);
270
- }
271
- else {
272
- return 0;
273
- }
274
- }
275
- getTabIds() {
276
- return this.tabs.map((tab) => {
277
- var _a;
278
- return (_a = tab.getAttribute("id")) !== null && _a !== void 0 ? _a : `tab-${uniqueId()}`;
279
- });
280
- }
281
- getTabPanelIds() {
282
- return this.tabpanels.map((tabPanel) => {
283
- var _a;
284
- return (_a = tabPanel.getAttribute("id")) !== null && _a !== void 0 ? _a : `panel-${uniqueId()}`;
285
- });
286
- }
287
- setComponent() {
288
- if (this.activeTabIndex !== this.prevActiveTabIndex) {
289
- this.activeid = this.tabIds[this.activeTabIndex];
290
- this.focusTab();
291
- this.change();
292
- }
293
- }
294
- isHorizontal() {
295
- return this.orientation === TabsOrientation.horizontal;
296
- }
297
- handleActiveIndicatorPosition() {
298
- // Ignore if we click twice on the same tab
299
- if (this.showActiveIndicator &&
300
- this.activeindicator &&
301
- this.activeTabIndex !== this.prevActiveTabIndex) {
302
- if (this.ticking) {
303
- this.ticking = false;
304
- }
305
- else {
306
- this.ticking = true;
307
- this.animateActiveIndicator();
308
- }
309
- }
310
- }
311
- animateActiveIndicator() {
312
- this.ticking = true;
313
- const gridProperty = this.isHorizontal() ? "gridColumn" : "gridRow";
314
- const translateProperty = this.isHorizontal()
315
- ? "translateX"
316
- : "translateY";
317
- const offsetProperty = this.isHorizontal() ? "offsetLeft" : "offsetTop";
318
- const prev = this.activeIndicatorRef[offsetProperty];
319
- this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`;
320
- const next = this.activeIndicatorRef[offsetProperty];
321
- this.activeIndicatorRef.style[gridProperty] = `${this.prevActiveTabIndex + 1}`;
322
- const dif = next - prev;
323
- this.activeIndicatorRef.style.transform = `${translateProperty}(${dif}px)`;
324
- this.activeIndicatorRef.classList.add("activeIndicatorTransition");
325
- this.activeIndicatorRef.addEventListener("transitionend", () => {
326
- this.ticking = false;
327
- this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`;
328
- this.activeIndicatorRef.style.transform = `${translateProperty}(0px)`;
329
- this.activeIndicatorRef.classList.remove("activeIndicatorTransition");
330
- });
331
- }
332
- /**
333
- * The adjust method for FASTTabs
334
- * @public
335
- * @remarks
336
- * This method allows the active index to be adjusted by numerical increments
337
- */
338
- adjust(adjustment) {
339
- const focusableTabs = this.tabs.filter(t => this.isFocusableElement(t));
340
- const currentActiveTabIndex = focusableTabs.indexOf(this.activetab);
341
- const nextTabIndex = limit(0, focusableTabs.length - 1, currentActiveTabIndex + adjustment);
342
- // the index of the next focusable tab within the context of all available tabs
343
- const nextIndex = this.tabs.indexOf(focusableTabs[nextTabIndex]);
344
- if (nextIndex > -1) {
345
- this.moveToTabByIndex(this.tabs, nextIndex);
346
- }
347
- }
348
- focusTab() {
349
- this.tabs[this.activeTabIndex].focus();
350
- }
351
- /**
352
- * @internal
353
- */
354
- connectedCallback() {
355
- super.connectedCallback();
356
- this.tabIds = this.getTabIds();
357
- this.tabpanelIds = this.getTabPanelIds();
358
- this.activeTabIndex = this.getActiveIndex();
359
- }
15
+ let Tab$1 = class Tab extends FoundationElement {
360
16
  };
361
- __decorate([
362
- attr
363
- ], Tabs$1.prototype, "orientation", void 0);
364
- __decorate([
365
- attr
366
- ], Tabs$1.prototype, "activeid", void 0);
367
- __decorate([
368
- observable
369
- ], Tabs$1.prototype, "tabs", void 0);
370
- __decorate([
371
- observable
372
- ], Tabs$1.prototype, "tabpanels", void 0);
373
17
  __decorate([
374
18
  attr({ mode: "boolean" })
375
- ], Tabs$1.prototype, "activeindicator", void 0);
376
- __decorate([
377
- observable
378
- ], Tabs$1.prototype, "activeIndicatorRef", void 0);
379
- __decorate([
380
- observable
381
- ], Tabs$1.prototype, "showActiveIndicator", void 0);
382
- applyMixins(Tabs$1, StartEnd);
19
+ ], Tab$1.prototype, "disabled", void 0);
383
20
 
384
- 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}";
21
+ 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}";
385
22
 
386
23
  var __defProp = Object.defineProperty;
387
24
  var __decorateClass = (decorators, target, key, kind) => {
@@ -392,152 +29,99 @@ var __decorateClass = (decorators, target, key, kind) => {
392
29
  if (result) __defProp(target, key, result);
393
30
  return result;
394
31
  };
395
- const ACTIVE_TAB_WIDTH = "--_tabs-active-tab-inline-size";
396
- class Tabs extends Tabs$1 {
32
+ class Tab extends Tab$1 {
397
33
  constructor() {
398
34
  super(...arguments);
399
- this.scrollablePanel = false;
400
- }
401
- connotationChanged() {
402
- this.#updateTabsConnotation();
35
+ this.removable = false;
36
+ this.tabIndex = "-1";
37
+ this.ariaSelected = null;
403
38
  }
404
- orientationChanged() {
405
- super.orientationChanged();
406
- this.patchIndicatorStyleTransition();
407
- if (!this.activeIndicatorRef) return;
408
- if (this.orientation === TabsOrientation.vertical) {
409
- this.activeIndicatorRef.style.removeProperty(ACTIVE_TAB_WIDTH);
410
- }
411
- this.#patchActiveID();
39
+ _handleCloseClick(e) {
40
+ e.stopImmediatePropagation();
41
+ this.$emit("close");
412
42
  }
413
- activeidChanged(oldValue, newValue) {
414
- super.activeidChanged(oldValue, newValue);
415
- this.patchIndicatorStyleTransition();
416
- this.#patchActiveID();
417
- }
418
- tabsChanged() {
419
- super.tabsChanged();
420
- this.patchIndicatorStyleTransition();
421
- this.#patchActiveID();
422
- }
423
- tabpanelsChanged() {
424
- super.tabpanelsChanged();
425
- this.patchIndicatorStyleTransition();
426
- this.#patchActiveID();
427
- }
428
- patchIndicatorStyleTransition() {
429
- if (!this.activetab || !this.activeIndicatorRef) return;
430
- if (this.orientation === TabsOrientation.vertical || !this.showActiveIndicator)
431
- return;
432
- const width = this.activetab.getBoundingClientRect().width;
433
- this.activeIndicatorRef.style.setProperty(ACTIVE_TAB_WIDTH, `${width}px`);
434
- }
435
- #updateTabsConnotation() {
436
- if (this.tabs) {
437
- this.tabs.forEach((tab) => {
438
- if (tab.getAttribute("aria-selected") === "true") {
439
- tab.setAttribute("connotation", this.connotation);
440
- } else {
441
- tab.removeAttribute("connotation");
442
- }
443
- });
444
- }
445
- }
446
- get #tabListWrapper() {
447
- return this.shadowRoot.querySelector(".tablist-wrapper");
448
- }
449
- #scrollToIndex(index) {
450
- const tab = this.tabs[index];
451
- if (!tab) return;
452
- let left = 0;
453
- let top = 0;
454
- if (this.orientation === TabsOrientation.vertical) {
455
- if (index === this.tabs.length - 1) {
456
- top = this.#tabListWrapper.scrollHeight;
457
- }
458
- if (index > 0 && index < this.tabs.length - 1) {
459
- top = tab.offsetTop - this.#tabListWrapper.offsetHeight / 2 + tab.offsetHeight / 2;
460
- }
461
- } else {
462
- if (index === this.tabs.length - 1) {
463
- left = this.#tabListWrapper.scrollWidth;
464
- }
465
- if (index > 0 && index < this.tabs.length - 1) {
466
- left = tab.offsetLeft - this.#tabListWrapper.offsetWidth / 2 + tab.offsetWidth / 2;
467
- }
468
- }
469
- this.#tabListWrapper.scrollTo({ top, left, behavior: "smooth" });
470
- }
471
- // adapted FAST fix https://github.com/microsoft/fast/pull/6606
472
- #patchActiveID() {
473
- if (!this.activetab) return;
474
- const idx = this.tabs.indexOf(this.activetab);
475
- this.activeid = this["tabIds"][idx];
476
- this.#updateTabsConnotation();
477
- this.#scrollToIndex(idx);
43
+ _onKeyDown(e) {
44
+ if (!this.removable || e.key !== "Delete") return true;
45
+ e.stopImmediatePropagation();
46
+ this.$emit("close");
47
+ return false;
478
48
  }
479
49
  }
480
50
  __decorateClass([
481
- observable
482
- ], Tabs.prototype, "tablist");
51
+ attr
52
+ ], Tab.prototype, "connotation");
483
53
  __decorateClass([
484
54
  attr
485
- ], Tabs.prototype, "connotation");
55
+ ], Tab.prototype, "shape");
486
56
  __decorateClass([
487
57
  attr
488
- ], Tabs.prototype, "gutters");
58
+ ], Tab.prototype, "label");
59
+ __decorateClass([
60
+ attr({ mode: "boolean" })
61
+ ], Tab.prototype, "removable");
489
62
  __decorateClass([
490
- attr({ mode: "boolean", attribute: "scrollable-panel" })
491
- ], Tabs.prototype, "scrollablePanel");
63
+ attr({ mode: "fromView" })
64
+ ], Tab.prototype, "tabIndex");
65
+ __decorateClass([
66
+ attr({ attribute: "aria-selected" })
67
+ ], Tab.prototype, "ariaSelected");
68
+ applyMixins(Tab, AffixIconWithTrailing);
69
+ applyMixins(Tab, Localized);
492
70
 
493
71
  const getClasses = ({
494
72
  connotation,
495
- orientation,
496
- gutters,
497
- scrollablePanel
73
+ disabled,
74
+ ariaSelected,
75
+ iconTrailing,
76
+ shape,
77
+ removable
498
78
  }) => classNames(
499
79
  "base",
500
- [`connotation-${connotation}`, Boolean(connotation)],
501
- [`orientation-${orientation}`, Boolean(orientation)],
502
- `gutters-${gutters ?? "small"}`,
503
- ["scroll", Boolean(scrollablePanel)]
80
+ [
81
+ `connotation-${connotation}`,
82
+ Boolean(connotation) && ariaSelected === "true"
83
+ ],
84
+ [`shape-${shape}`, Boolean(shape)],
85
+ ["disabled", Boolean(disabled)],
86
+ ["selected", ariaSelected === "true"],
87
+ ["icon-trailing", iconTrailing],
88
+ ["removable", removable]
504
89
  );
505
- function TabsTemplate() {
90
+ function renderDismissButton(context) {
91
+ const affixIconTemplate = affixIconTemplateFactory(context);
92
+ return html` <span
93
+ aria-label="${(x) => x.locale.tab.dismissButtonLabel}"
94
+ class="close"
95
+ id="close-btn"
96
+ @click="${(x, c) => x._handleCloseClick(c.event)}"
97
+ >
98
+ ${() => affixIconTemplate("close-line", IconWrapper.Span)}
99
+ </span>`;
100
+ }
101
+ function TabTemplate(context) {
102
+ const affixIconTemplate = affixIconTemplateFactory(context);
506
103
  return html`
507
- <template>
104
+ <template
105
+ slot="tab"
106
+ role="tab"
107
+ aria-disabled="${(x) => x.disabled}"
108
+ aria-selected="${(x) => x.ariaSelected}"
109
+ @keydown="${(x, c) => x._onKeyDown(c.event)}"
110
+ >
508
111
  <div class="${getClasses}">
509
- <div class="tablist-wrapper">
510
- <div class="tablist" role="tablist" ${ref("tablist")}>
511
- <slot name="tab" ${slotted("tabs")}></slot>
512
- ${when(
513
- (x) => x.showActiveIndicator,
514
- html`
515
- <div
516
- ${ref("activeIndicatorRef")}
517
- class="active-indicator"
518
- ></div>
519
- `
520
- )}
521
- </div>
522
- </div>
523
- <div class="tabpanel">
524
- <slot name="tabpanel" ${slotted("tabpanels")}></slot>
525
- </div>
112
+ ${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)} ${(x) => x.label}
113
+ ${(x) => x.removable ? renderDismissButton(context) : null}
526
114
  </div>
527
115
  </template>
528
116
  `;
529
117
  }
530
118
 
531
- const tabsDefinition = Tabs.compose({
532
- baseName: "tabs",
533
- template: TabsTemplate,
119
+ const tabDefinition = Tab.compose({
120
+ baseName: "tab",
121
+ template: TabTemplate,
534
122
  styles
535
123
  });
536
- const tabsRegistries = [
537
- tabsDefinition(),
538
- ...tabRegistries,
539
- ...tabPanelRegistries
540
- ];
541
- const registerTabs = registerFactory(tabsRegistries);
124
+ const tabRegistries = [tabDefinition(), ...iconRegistries];
125
+ const registerTab = registerFactory(tabRegistries);
542
126
 
543
- export { tabsRegistries as a, registerTabs as r, tabsDefinition as t };
127
+ export { tabRegistries as a, registerTab as r, tabDefinition as t };