@vonage/vivid 3.39.0 → 3.41.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 (182) hide show
  1. package/accordion/index.js +2 -2
  2. package/accordion-item/index.js +2 -2
  3. package/alert/index.js +7 -5
  4. package/audio-player/index.js +33 -0
  5. package/avatar/index.js +2 -2
  6. package/badge/index.js +2 -2
  7. package/banner/index.js +9 -5
  8. package/breadcrumb/index.js +1 -1
  9. package/breadcrumb-item/index.js +3 -3
  10. package/button/index.js +5 -4
  11. package/calendar/index.js +1 -1
  12. package/calendar-event/index.js +1 -1
  13. package/card/index.js +4 -3
  14. package/checkbox/index.js +3 -3
  15. package/combobox/index.js +9 -7
  16. package/custom-elements.json +809 -5
  17. package/data-grid/index.js +3 -2
  18. package/date-picker/index.js +11 -9
  19. package/date-range-picker/index.js +11 -9
  20. package/dialog/index.js +10 -6
  21. package/divider/index.js +1 -1
  22. package/elevation/index.js +1 -1
  23. package/empty-state/index.js +2 -2
  24. package/fab/index.js +3 -3
  25. package/file-picker/index.js +6 -5
  26. package/focus/index.js +1 -1
  27. package/header/index.js +2 -2
  28. package/icon/index.js +1 -1
  29. package/index.js +60 -55
  30. package/layout/index.js +1 -1
  31. package/lib/alert/alert.d.ts +3 -1
  32. package/lib/alert/locale.d.ts +3 -0
  33. package/lib/audio-player/audio-player.d.ts +17 -0
  34. package/lib/audio-player/audio-player.template.d.ts +4 -0
  35. package/lib/audio-player/definition.d.ts +4 -0
  36. package/lib/audio-player/locale.d.ts +5 -0
  37. package/lib/banner/banner.d.ts +3 -1
  38. package/lib/banner/locale.d.ts +3 -0
  39. package/lib/card/card.d.ts +3 -0
  40. package/lib/card/card.template.d.ts +1 -1
  41. package/lib/card/definition.d.ts +1 -0
  42. package/lib/checkbox/checkbox.d.ts +2 -0
  43. package/lib/components.d.ts +2 -0
  44. package/lib/dialog/dialog.d.ts +4 -0
  45. package/lib/dialog/locale.d.ts +3 -0
  46. package/lib/enums.d.ts +2 -1
  47. package/lib/menu/menu.d.ts +1 -0
  48. package/lib/number-field/locale.d.ts +4 -0
  49. package/lib/number-field/number-field.d.ts +4 -2
  50. package/lib/progress/progress.d.ts +1 -0
  51. package/lib/progress-ring/progress-ring.d.ts +1 -0
  52. package/lib/radio/radio.d.ts +1 -0
  53. package/lib/selectable-box/definition.d.ts +3 -0
  54. package/lib/selectable-box/selectable-box.d.ts +12 -0
  55. package/lib/selectable-box/selectable-box.template.d.ts +4 -0
  56. package/lib/slider/definition.d.ts +1 -0
  57. package/lib/slider/slider.d.ts +5 -0
  58. package/lib/split-button/locale.d.ts +3 -0
  59. package/lib/split-button/split-button.d.ts +3 -1
  60. package/lib/text-area/text-area.d.ts +3 -0
  61. package/lib/text-field/text-field.d.ts +5 -2
  62. package/listbox/index.js +5 -4
  63. package/locales/en-GB.js +21 -0
  64. package/locales/en-US.js +21 -0
  65. package/locales/ja-JP.js +21 -0
  66. package/locales/zh-CN.js +21 -0
  67. package/menu/index.js +9 -8
  68. package/menu-item/index.js +3 -3
  69. package/nav/index.js +1 -1
  70. package/nav-disclosure/index.js +3 -3
  71. package/nav-item/index.js +3 -3
  72. package/note/index.js +2 -2
  73. package/number-field/index.js +8 -6
  74. package/option/index.js +3 -3
  75. package/package.json +1 -1
  76. package/pagination/index.js +6 -5
  77. package/popup/index.js +7 -6
  78. package/progress/index.js +1 -1
  79. package/progress-ring/index.js +1 -1
  80. package/radio/index.js +2 -2
  81. package/radio-group/index.js +2 -2
  82. package/select/index.js +10 -8
  83. package/selectable-box/index.js +23 -0
  84. package/shared/Reflector.js +65 -0
  85. package/shared/date-picker/calendar/segment.d.ts +21 -0
  86. package/shared/date-picker/date-picker-base.d.ts +1 -0
  87. package/shared/definition.js +3 -3
  88. package/shared/definition10.js +89 -227
  89. package/shared/definition11.js +151 -29
  90. package/shared/definition12.js +37 -766
  91. package/shared/definition13.js +747 -106
  92. package/shared/definition14.js +122 -192
  93. package/shared/definition15.js +156 -664
  94. package/shared/definition16.js +576 -1123
  95. package/shared/definition17.js +1278 -143
  96. package/shared/definition18.js +64 -298
  97. package/shared/definition19.js +358 -211
  98. package/shared/definition2.js +2 -2
  99. package/shared/definition20.js +259 -67
  100. package/shared/definition21.js +66 -58
  101. package/shared/definition22.js +43 -84
  102. package/shared/definition23.js +76 -2352
  103. package/shared/definition24.js +2362 -45
  104. package/shared/definition25.js +63 -27
  105. package/shared/definition26.js +24 -51
  106. package/shared/definition27.js +36 -813
  107. package/shared/definition28.js +837 -49
  108. package/shared/definition29.js +52 -89
  109. package/shared/definition3.js +1 -1
  110. package/shared/definition30.js +88 -24
  111. package/shared/definition31.js +25 -12
  112. package/shared/definition32.js +12 -52
  113. package/shared/definition33.js +28 -487
  114. package/shared/definition34.js +442 -197
  115. package/shared/definition35.js +260 -185
  116. package/shared/definition36.js +188 -69
  117. package/shared/definition37.js +72 -52
  118. package/shared/definition38.js +65 -421
  119. package/shared/definition39.js +435 -35
  120. package/shared/definition4.js +44 -16
  121. package/shared/definition40.js +32 -680
  122. package/shared/definition41.js +661 -77
  123. package/shared/definition42.js +103 -555
  124. package/shared/definition43.js +76 -103
  125. package/shared/definition44.js +522 -87
  126. package/shared/definition45.js +133 -22
  127. package/shared/definition46.js +131 -58
  128. package/shared/definition47.js +16 -501
  129. package/shared/definition48.js +69 -23
  130. package/shared/definition49.js +477 -108
  131. package/shared/definition5.js +160 -44
  132. package/shared/definition50.js +25 -271
  133. package/shared/definition51.js +103 -122
  134. package/shared/definition52.js +277 -122
  135. package/shared/definition53.js +274 -103
  136. package/shared/definition54.js +126 -71
  137. package/shared/definition55.js +128 -294
  138. package/shared/definition56.js +91 -13
  139. package/shared/definition57.js +298 -39
  140. package/shared/definition58.js +11 -175
  141. package/shared/definition59.js +47 -0
  142. package/shared/definition6.js +43 -33
  143. package/shared/definition60.js +181 -0
  144. package/shared/definition7.js +39 -105
  145. package/shared/definition8.js +122 -38
  146. package/shared/definition9.js +56 -89
  147. package/shared/enums.js +72 -0
  148. package/shared/icon.js +2 -2
  149. package/shared/index2.js +28 -1
  150. package/shared/key-codes.js +1 -1
  151. package/shared/key-codes2.js +9 -0
  152. package/shared/listbox.js +3 -8
  153. package/shared/localization/Locale.d.ts +12 -0
  154. package/shared/patterns/form-elements/form-elements.d.ts +6 -6
  155. package/shared/presentationDate.js +196 -143
  156. package/shared/radio.js +7 -0
  157. package/shared/text-field.js +1 -1
  158. package/shared/utils/Reflector.d.ts +8 -0
  159. package/shared/utils/randomId.d.ts +1 -0
  160. package/side-drawer/index.js +1 -1
  161. package/slider/index.js +3 -3
  162. package/split-button/index.js +6 -3
  163. package/style.css +889 -722
  164. package/styles/core/all.css +1 -1
  165. package/styles/core/theme.css +1 -1
  166. package/styles/core/typography.css +1 -1
  167. package/styles/tokens/theme-dark.css +4 -4
  168. package/styles/tokens/theme-light.css +4 -4
  169. package/styles/tokens/vivid-2-compat.css +1 -1
  170. package/switch/index.js +3 -3
  171. package/tab/index.js +3 -3
  172. package/tab-panel/index.js +1 -1
  173. package/tabs/index.js +5 -5
  174. package/tag/index.js +3 -3
  175. package/tag-group/index.js +1 -1
  176. package/text-area/index.js +4 -3
  177. package/text-field/index.js +4 -3
  178. package/toggletip/index.js +8 -7
  179. package/tooltip/index.js +8 -7
  180. package/tree-item/index.js +3 -3
  181. package/tree-view/index.js +1 -1
  182. package/vivid.api.json +392 -0
@@ -1,516 +1,31 @@
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 './definition46.js';
3
- import { a as tabPanelRegistries } from './definition45.js';
4
- import { S as StartEnd } from './start-end.js';
5
- import { a as applyMixins } from './apply-mixins.js';
6
- import { h as keyArrowRight, i as keyArrowLeft, d as keyArrowDown, e as keyArrowUp, b as keyEnd, c 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';
11
- import { w as when } from './when.js';
12
- import { c as classNames } from './class-names.js';
1
+ import { F as FoundationElement, h as html, r as registerFactory } from './index.js';
13
2
 
14
3
  /**
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 }.
4
+ * A TabPanel Component to be used with {@link @microsoft/fast-foundation#(Tabs:class)}
25
5
  *
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
6
+ * @slot - The default slot for the tabpanel content
35
7
  *
36
8
  * @public
37
9
  */
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.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
- }
10
+ let TabPanel$1 = class TabPanel extends FoundationElement {
351
11
  };
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
- const styles = "/**\n * Do not edit directly\n * Generated on Tue, 17 Oct 2023 15:27:52 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: 8px;\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
12
 
377
- var __defProp = Object.defineProperty;
378
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
379
- var __decorateClass = (decorators, target, key, kind) => {
380
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
381
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
382
- if (decorator = decorators[i])
383
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
384
- if (kind && result)
385
- __defProp(target, key, result);
386
- return result;
387
- };
388
- const ACTIVE_TAB_WIDTH = "--_tabs-active-tab-inline-size";
389
- class Tabs extends Tabs$1 {
390
- connotationChanged() {
391
- this.#updateTabsConnotation();
392
- }
393
- orientationChanged() {
394
- super.orientationChanged();
395
- this.patchIndicatorStyleTransition();
396
- if (!this.activeIndicatorRef)
397
- return;
398
- if (this.orientation === TabsOrientation.vertical) {
399
- this.activeIndicatorRef.style.removeProperty(ACTIVE_TAB_WIDTH);
400
- }
401
- this.#patchActiveID();
402
- }
403
- activeidChanged(oldValue, newValue) {
404
- super.activeidChanged(oldValue, newValue);
405
- this.patchIndicatorStyleTransition();
406
- this.#patchActiveID();
407
- }
408
- tabsChanged() {
409
- super.tabsChanged();
410
- this.patchIndicatorStyleTransition();
411
- this.#patchActiveID();
412
- }
413
- tabpanelsChanged() {
414
- super.tabpanelsChanged();
415
- this.patchIndicatorStyleTransition();
416
- this.#patchActiveID();
417
- }
418
- patchIndicatorStyleTransition() {
419
- if (!this.activetab || !this.activeIndicatorRef)
420
- return;
421
- if (this.orientation === TabsOrientation.vertical || !this.showActiveIndicator)
422
- return;
423
- const width = this.activetab.getBoundingClientRect().width;
424
- this.activeIndicatorRef.style.setProperty(ACTIVE_TAB_WIDTH, `${width}px`);
425
- }
426
- #updateTabsConnotation() {
427
- if (this.tabs) {
428
- this.tabs.forEach((tab) => {
429
- if (tab.getAttribute("aria-selected") === "true") {
430
- tab.setAttribute("connotation", this.connotation);
431
- } else {
432
- tab.removeAttribute("connotation");
433
- }
434
- });
435
- }
436
- }
437
- get #tabListWrapper() {
438
- return this.shadowRoot.querySelector(".tablist-wrapper");
439
- }
440
- #scrollToIndex(index) {
441
- const tab = this.tabs[index];
442
- if (!tab)
443
- return;
444
- let left = 0;
445
- let top = 0;
446
- if (this.orientation === TabsOrientation.vertical) {
447
- if (index === this.tabs.length - 1) {
448
- top = this.#tabListWrapper.scrollHeight;
449
- }
450
- if (index > 0 && index < this.tabs.length - 1) {
451
- top = tab.offsetTop - this.#tabListWrapper.offsetHeight / 2 + tab.offsetHeight / 2;
452
- }
453
- } else {
454
- if (index === this.tabs.length - 1) {
455
- left = this.#tabListWrapper.scrollWidth;
456
- }
457
- if (index > 0 && index < this.tabs.length - 1) {
458
- left = tab.offsetLeft - this.#tabListWrapper.offsetWidth / 2 + tab.offsetWidth / 2;
459
- }
460
- }
461
- this.#tabListWrapper.scrollTo({ top, left, behavior: "smooth" });
462
- }
463
- // adapted FAST fix https://github.com/microsoft/fast/pull/6606
464
- #patchActiveID() {
465
- if (!this.activetab)
466
- return;
467
- const idx = this.tabs.indexOf(this.activetab);
468
- this.activeid = this["tabIds"][idx];
469
- this.#updateTabsConnotation();
470
- this.#scrollToIndex(idx);
471
- }
13
+ class TabPanel extends TabPanel$1 {
472
14
  }
473
- __decorateClass([
474
- observable
475
- ], Tabs.prototype, "tablist", 2);
476
- __decorateClass([
477
- attr
478
- ], Tabs.prototype, "connotation", 2);
479
15
 
480
- const getClasses = ({
481
- connotation,
482
- orientation
483
- }) => classNames(
484
- "base",
485
- [`connotation-${connotation}`, Boolean(connotation)],
486
- [`orientation-${orientation}`, Boolean(orientation)]
487
- );
488
- function TabsTemplate() {
16
+ function TabPanelTemplate() {
489
17
  return html`
490
- <template role="tablist">
491
- <div class="${getClasses}">
492
- <div class="tablist-wrapper">
493
- <div class="tablist" ${ref("tablist")}>
494
- <slot name="tab" ${slotted("tabs")}></slot>
495
- ${when((x) => x.showActiveIndicator, html`
496
- <div ${ref("activeIndicatorRef")} class="active-indicator"></div>
497
- `)}
498
- </div>
499
- </div>
500
- <div class="tabpanel">
501
- <slot name="tabpanel" ${slotted("tabpanels")}></slot>
502
- </div>
503
- </div>
504
- </template>
505
- `;
18
+ <template slot="tabpanel" role="tabpanel">
19
+ <slot></slot>
20
+ </template>
21
+ `;
506
22
  }
507
23
 
508
- const tabsDefinition = Tabs.compose({
509
- baseName: "tabs",
510
- template: TabsTemplate,
511
- styles
24
+ const tabPanelDefinition = TabPanel.compose({
25
+ baseName: "tab-panel",
26
+ template: TabPanelTemplate
512
27
  });
513
- const tabsRegistries = [tabsDefinition(), ...tabRegistries, ...tabPanelRegistries];
514
- const registerTabs = registerFactory(tabsRegistries);
28
+ const tabPanelRegistries = [tabPanelDefinition()];
29
+ const registerTabPanel = registerFactory(tabPanelRegistries);
515
30
 
516
- export { tabsRegistries as a, registerTabs as r, tabsDefinition as t };
31
+ export { tabPanelRegistries as a, registerTabPanel as r, tabPanelDefinition as t };
@@ -1,7 +1,25 @@
1
- import { a as attr, F as FoundationElement, h as html, r as registerFactory } from './index.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 './definition26.js';
3
+ import { f as focusRegistries } from './definition58.js';
4
+ import { b as AffixIconWithTrailing, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
5
+ import { a as applyMixins } from './apply-mixins.js';
6
+ import { f as focusTemplateFactory } from './focus2.js';
2
7
  import { c as classNames } from './class-names.js';
3
8
 
4
- const styles = ".base {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}";
9
+ /**
10
+ * A Tab Component to be used with {@link @microsoft/fast-foundation#(Tabs:class)}
11
+ *
12
+ * @slot - The default slot for the tab content
13
+ *
14
+ * @public
15
+ */
16
+ let Tab$1 = class Tab extends FoundationElement {
17
+ };
18
+ __decorate([
19
+ attr({ mode: "boolean" })
20
+ ], Tab$1.prototype, "disabled", void 0);
21
+
22
+ const styles = "/**\n * Do not edit directly\n * Generated on Wed, 22 Nov 2023 16:09:43 GMT\n */\n@supports selector(:focus-visible) {\n :host(:focus-visible) {\n outline: none;\n }\n}\n:host(.vertical) {\n justify-content: end;\n grid-column: 1/auto;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n}\n\n.base {\n position: relative;\n display: flex;\n box-sizing: border-box;\n align-items: center;\n padding: var(--_tabs-tablist-gutter);\n background-color: var(--_appearance-color-fill);\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n color: var(--_appearance-color-text);\n font: var(--vvd-typography-base-bold);\n gap: var(--_tabs-tablist-gutter);\n min-block-size: 40px;\n vertical-align: middle;\n white-space: nowrap;\n}\n.base {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: transparent;\n}\n.base:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base:where(:active, .active):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: transparent;\n}\n.base.connotation-cta {\n /* @cssprop [--vvd-tab-cta-primary=var(--vvd-color-cta-500)] */\n --_connotation-color-primary: var(--vvd-tab-cta-primary, var(--vvd-color-cta-500));\n /* @cssprop [--vvd-tab-cta-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-tab-cta-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-tab-cta-firm=var(--vvd-color-cta-600)] */\n --_connotation-color-firm: var(--vvd-tab-cta-firm, var(--vvd-color-cta-600));\n /* @cssprop [--vvd-tab-cta-faint=var(--vvd-color-cta-50)] */\n --_connotation-color-faint: var(--vvd-tab-cta-faint, var(--vvd-color-cta-50));\n /* @cssprop [--vvd-tab-cta-fierce=var(--vvd-color-cta-700)] */\n --_connotation-color-fierce: var(--vvd-tab-cta-fierce, var(--vvd-color-cta-700));\n /* @cssprop [--vvd-tab-cta-pale=var(--vvd-color-cta-300)] */\n --_connotation-color-pale: var(--vvd-tab-cta-pale, var(--vvd-color-cta-300));\n}\n.base:not(.connotation-cta) {\n /* @cssprop [--vvd-tab-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-tab-accent-primary, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-tab-accent-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-tab-accent-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-tab-accent-firm=var(--vvd-color-canvas-text)] */\n --_connotation-color-firm: var(--vvd-tab-accent-firm, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-tab-accent-faint=var(--vvd-color-neutral-50)] */\n --_connotation-color-faint: var(--vvd-tab-accent-faint, var(--vvd-color-neutral-50));\n /* @cssprop [--vvd-tab-accent-fierce=var(--vvd-color-neutral-700)] */\n --_connotation-color-fierce: var(--vvd-tab-accent-fierce, var(--vvd-color-neutral-700));\n /* @cssprop [--vvd-tab-accent-pale=var(--vvd-color-neutral-300)] */\n --_connotation-color-pale: var(--vvd-tab-accent-pale, var(--vvd-color-neutral-300));\n}\n@supports (user-select: none) {\n .base {\n user-select: none;\n }\n}\n.base:not(.shape-sharp) {\n border-radius: 6px;\n}\n.base:not(.disabled) {\n cursor: pointer;\n}\n.base.disabled {\n pointer-events: none;\n}\n:host(.vertical) .base {\n padding-inline-start: calc(var(--_tabs-active-indicator-stroke-width) + var(--_tabs-tablist-gutter));\n}\n\n.focus-indicator {\n --focus-stroke-gap-color: transparent;\n}\n:host(:not(:focus-visible)) .focus-indicator {\n display: none;\n}\n\nslot[name=icon] {\n font-size: 20px;\n line-height: 1;\n}\n.icon-trailing slot[name=icon] {\n display: inline-block;\n order: 1;\n margin-inline-start: auto;\n}\n\n:host(:not(.vertical)) .base::after {\n position: absolute;\n background: currentColor;\n block-size: 2px;\n border-radius: 2px;\n content: \"\";\n inline-size: 100%;\n inset-block-end: 0;\n inset-inline-start: 0;\n pointer-events: none;\n transition-property: opacity;\n}\n:host(:not(.vertical)):host([aria-selected=true]) .base::after {\n transition-delay: 0.2s;\n}\n:host(:not(.vertical)):host(:not([aria-selected=true])) .base::after {\n opacity: 0;\n}";
5
23
 
6
24
  var __defProp = Object.defineProperty;
7
25
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -14,35 +32,63 @@ var __decorateClass = (decorators, target, key, kind) => {
14
32
  __defProp(target, key, result);
15
33
  return result;
16
34
  };
17
- class TagGroup extends FoundationElement {
35
+ class Tab extends Tab$1 {
18
36
  constructor() {
19
37
  super(...arguments);
20
- this.ariaLabel = null;
38
+ this.tabIndex = "-1";
39
+ this.ariaSelected = null;
21
40
  }
22
41
  }
23
42
  __decorateClass([
24
- attr({ attribute: "aria-label" })
25
- ], TagGroup.prototype, "ariaLabel", 2);
43
+ attr
44
+ ], Tab.prototype, "connotation", 2);
45
+ __decorateClass([
46
+ attr
47
+ ], Tab.prototype, "shape", 2);
48
+ __decorateClass([
49
+ attr
50
+ ], Tab.prototype, "label", 2);
51
+ __decorateClass([
52
+ attr({ mode: "fromView" })
53
+ ], Tab.prototype, "tabIndex", 2);
54
+ __decorateClass([
55
+ attr({ attribute: "aria-selected" })
56
+ ], Tab.prototype, "ariaSelected", 2);
57
+ applyMixins(Tab, AffixIconWithTrailing);
26
58
 
27
- const getClasses = (_) => classNames(
28
- "base"
59
+ const getClasses = ({
60
+ connotation,
61
+ disabled,
62
+ ariaSelected,
63
+ iconTrailing,
64
+ shape
65
+ }) => classNames(
66
+ "base",
67
+ [`connotation-${connotation}`, Boolean(connotation) && ariaSelected === "true"],
68
+ [`shape-${shape}`, Boolean(shape)],
69
+ ["disabled", Boolean(disabled)],
70
+ ["selected", ariaSelected === "true"],
71
+ ["icon-trailing", iconTrailing]
29
72
  );
30
- const TagGroupTemplate = () => {
73
+ function TabTemplate(context) {
74
+ const affixIconTemplate = affixIconTemplateFactory(context);
75
+ const focusTemplate = focusTemplateFactory(context);
31
76
  return html`
32
- <div class="${getClasses}" role="listbox" aria-orientation="horizontal" aria-label="${(x) => x.ariaLabel}">
33
- <slot></slot>
77
+ <template slot="tab" role="tab" aria-disabled="${(x) => x.disabled}" aria-selected="${(x) => x.ariaSelected}">
78
+ <div class="${getClasses}" >
79
+ ${() => focusTemplate}
80
+ ${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)}
81
+ ${(x) => x.label}
34
82
  </div>
35
- `;
36
- };
83
+ </template>`;
84
+ }
37
85
 
38
- const tagGroupDefinition = TagGroup.compose(
39
- {
40
- baseName: "tag-group",
41
- template: TagGroupTemplate,
42
- styles
43
- }
44
- );
45
- const tagGroupRegistries = [tagGroupDefinition()];
46
- const registerTagGroup = registerFactory(tagGroupRegistries);
86
+ const tabDefinition = Tab.compose({
87
+ baseName: "tab",
88
+ template: TabTemplate,
89
+ styles
90
+ });
91
+ const tabRegistries = [tabDefinition(), ...iconRegistries, ...focusRegistries];
92
+ const registerTab = registerFactory(tabRegistries);
47
93
 
48
- export { tagGroupRegistries as a, registerTagGroup as r, tagGroupDefinition as t };
94
+ export { tabRegistries as a, registerTab as r, tabDefinition as t };