@vonage/vivid 3.36.0 → 3.38.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 (168) hide show
  1. package/accordion/index.js +3 -4
  2. package/accordion-item/index.js +3 -2
  3. package/alert/index.js +5 -4
  4. package/avatar/index.js +1 -1
  5. package/badge/index.js +2 -1
  6. package/banner/index.js +4 -3
  7. package/breadcrumb/index.js +0 -1
  8. package/breadcrumb-item/index.js +3 -2
  9. package/button/index.js +4 -3
  10. package/card/index.js +2 -3
  11. package/checkbox/index.js +3 -4
  12. package/combobox/index.js +7 -8
  13. package/custom-elements.json +386 -758
  14. package/data-grid/index.js +2 -3
  15. package/date-picker/index.js +10 -9
  16. package/date-range-picker/index.js +36 -0
  17. package/dialog/index.js +6 -7
  18. package/divider/index.js +1 -1
  19. package/elevation/index.js +1 -1
  20. package/empty-state/index.js +2 -3
  21. package/fab/index.js +4 -3
  22. package/file-picker/index.js +6 -4
  23. package/focus/index.js +1 -1
  24. package/header/index.js +2 -2
  25. package/icon/index.js +1 -1
  26. package/index.js +44 -42
  27. package/layout/index.js +1 -1
  28. package/lib/components.d.ts +1 -0
  29. package/lib/date-picker/date-picker.d.ts +5 -15
  30. package/lib/date-range-picker/date-range-picker.d.ts +16 -0
  31. package/lib/date-range-picker/definition.d.ts +3 -0
  32. package/lib/file-picker/file-picker.d.ts +8 -5
  33. package/lib/file-picker/file-picker.form-associated.d.ts +10 -0
  34. package/lib/file-picker/locale.d.ts +6 -0
  35. package/lib/number-field/number-field.d.ts +6 -2
  36. package/lib/tag-group/tag-group.d.ts +1 -0
  37. package/lib/tree-item/tree-item.template.d.ts +1 -1
  38. package/listbox/index.js +4 -5
  39. package/locales/en-GB.js +27 -3
  40. package/locales/en-US.js +27 -3
  41. package/locales/ja-JP.js +25 -1
  42. package/locales/zh-CN.js +25 -1
  43. package/menu/index.js +8 -9
  44. package/menu-item/index.js +4 -5
  45. package/nav/index.js +1 -1
  46. package/nav-disclosure/index.js +4 -3
  47. package/nav-item/index.js +4 -3
  48. package/note/index.js +3 -2
  49. package/number-field/index.js +6 -5
  50. package/option/index.js +4 -3
  51. package/package.json +1 -1
  52. package/pagination/index.js +5 -5
  53. package/popup/index.js +6 -5
  54. package/progress/index.js +1 -1
  55. package/progress-ring/index.js +1 -1
  56. package/radio/index.js +2 -2
  57. package/radio-group/index.js +2 -3
  58. package/select/index.js +8 -9
  59. package/shared/affix.js +5 -1
  60. package/shared/apply-mixins.js +1 -1
  61. package/shared/children.js +2 -2
  62. package/shared/date-picker/calendar/dateRange.d.ts +5 -0
  63. package/shared/date-picker/calendar/presentationDateRange.d.ts +5 -0
  64. package/shared/date-picker/date-picker-base.d.ts +20 -0
  65. package/shared/date-picker/date-picker-base.form-associated.d.ts +10 -0
  66. package/shared/date-picker/date-picker-base.template.d.ts +4 -0
  67. package/{lib → shared}/date-picker/locale.d.ts +6 -0
  68. package/shared/definition.js +5 -5
  69. package/shared/definition10.js +9 -14
  70. package/shared/definition11.js +1 -1
  71. package/shared/definition12.js +1 -1
  72. package/shared/definition13.js +3 -3
  73. package/shared/definition14.js +3 -3
  74. package/shared/definition15.js +5 -5
  75. package/shared/definition16.js +4 -5
  76. package/shared/definition17.js +59 -6016
  77. package/shared/definition18.js +350 -213
  78. package/shared/definition19.js +251 -67
  79. package/shared/definition2.js +2 -3
  80. package/shared/definition20.js +66 -58
  81. package/shared/definition21.js +43 -83
  82. package/shared/definition22.js +75 -2298
  83. package/shared/definition23.js +2361 -45
  84. package/shared/definition24.js +63 -27
  85. package/shared/definition25.js +24 -51
  86. package/shared/definition26.js +36 -806
  87. package/shared/definition27.js +820 -49
  88. package/shared/definition28.js +52 -89
  89. package/shared/definition29.js +88 -24
  90. package/shared/definition3.js +1 -1
  91. package/shared/definition30.js +25 -12
  92. package/shared/definition31.js +12 -53
  93. package/shared/definition32.js +29 -441
  94. package/shared/definition33.js +427 -197
  95. package/shared/definition34.js +260 -174
  96. package/shared/definition35.js +187 -69
  97. package/shared/definition36.js +68 -55
  98. package/shared/definition37.js +61 -422
  99. package/shared/definition38.js +435 -35
  100. package/shared/definition39.js +30 -679
  101. package/shared/definition4.js +3 -3
  102. package/shared/definition40.js +661 -77
  103. package/shared/definition41.js +77 -557
  104. package/shared/definition42.js +559 -106
  105. package/shared/definition43.js +105 -136
  106. package/shared/definition44.js +153 -17
  107. package/shared/definition45.js +16 -79
  108. package/shared/definition46.js +53 -475
  109. package/shared/definition47.js +506 -20
  110. package/shared/definition48.js +22 -121
  111. package/shared/definition49.js +115 -262
  112. package/shared/definition5.js +2 -2
  113. package/shared/definition50.js +248 -120
  114. package/shared/definition51.js +139 -123
  115. package/shared/definition52.js +84 -74
  116. package/shared/definition53.js +114 -70
  117. package/shared/definition54.js +81 -292
  118. package/shared/definition55.js +302 -13
  119. package/shared/definition56.js +11 -41
  120. package/shared/definition57.js +20 -154
  121. package/shared/definition58.js +181 -0
  122. package/shared/definition6.js +5 -5
  123. package/shared/definition7.js +4 -4
  124. package/shared/definition8.js +3 -3
  125. package/shared/definition9.js +1 -2
  126. package/shared/index.js +1 -1
  127. package/shared/index2.js +1 -1
  128. package/shared/listbox.js +1 -1
  129. package/shared/localization/Locale.d.ts +3 -1
  130. package/shared/localized.js +9 -0
  131. package/shared/patterns/affix.d.ts +3 -1
  132. package/shared/presentationDate.js +6133 -0
  133. package/shared/ref.js +1 -1
  134. package/shared/slotted.js +73 -3
  135. package/shared/text-anchor.template.js +4 -4
  136. package/shared/text-field.js +1 -1
  137. package/side-drawer/index.js +1 -1
  138. package/slider/index.js +2 -2
  139. package/split-button/index.js +4 -3
  140. package/style.css +265 -197
  141. package/styles/core/all.css +44 -13
  142. package/styles/core/theme.css +1 -1
  143. package/styles/core/typography.css +44 -13
  144. package/styles/tokens/theme-dark.css +4 -4
  145. package/styles/tokens/theme-light.css +4 -4
  146. package/styles/tokens/vivid-2-compat.css +1 -1
  147. package/switch/index.js +4 -3
  148. package/tab/index.js +4 -3
  149. package/tab-panel/index.js +1 -1
  150. package/tabs/index.js +6 -7
  151. package/tag/index.js +4 -3
  152. package/tag-group/index.js +1 -1
  153. package/text-anchor/index.js +1 -0
  154. package/text-area/index.js +4 -3
  155. package/text-field/index.js +4 -5
  156. package/toggletip/index.js +7 -6
  157. package/tooltip/index.js +7 -6
  158. package/tree-item/index.js +4 -5
  159. package/tree-view/index.js +1 -2
  160. package/vivid.api.json +105 -0
  161. package/lib/date-picker/date-picker.template.d.ts +0 -4
  162. package/shared/node-observation.js +0 -74
  163. /package/{lib → shared}/date-picker/calendar/calendarGrid.d.ts +0 -0
  164. /package/{lib → shared}/date-picker/calendar/dateStr.d.ts +0 -0
  165. /package/{lib → shared}/date-picker/calendar/month.d.ts +0 -0
  166. /package/{lib → shared}/date-picker/calendar/monthPickerGrid.d.ts +0 -0
  167. /package/{lib → shared}/date-picker/calendar/presentationDate.d.ts +0 -0
  168. /package/{lib → shared}/date-picker/calendar/year.d.ts +0 -0
@@ -1,378 +1,25 @@
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 './definition45.js';
3
- import { a as tabPanelRegistries } from './definition44.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 './definition25.js';
3
+ import { f as focusRegistries } from './definition56.js';
4
+ import { b as AffixIconWithTrailing, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
5
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';
6
+ import { f as focusTemplateFactory } from './focus2.js';
12
7
  import { c as classNames } from './class-names.js';
13
8
 
14
9
  /**
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 }.
10
+ * A Tab Component to be used with {@link @microsoft/fast-foundation#(Tabs:class)}
25
11
  *
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
12
+ * @slot - The default slot for the tab content
35
13
  *
36
14
  * @public
37
15
  */
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
- }
16
+ let Tab$1 = class Tab extends FoundationElement {
351
17
  };
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
18
  __decorate([
365
19
  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);
20
+ ], Tab$1.prototype, "disabled", void 0);
374
21
 
375
- const styles = "/**\n * Do not edit directly\n * Generated on Wed, 13 Sep 2023 10:58:27 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}";
22
+ const styles = "/**\n * Do not edit directly\n * Generated on Fri, 13 Oct 2023 14:45:50 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}";
376
23
 
377
24
  var __defProp = Object.defineProperty;
378
25
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -385,132 +32,63 @@ var __decorateClass = (decorators, target, key, kind) => {
385
32
  __defProp(target, key, result);
386
33
  return result;
387
34
  };
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);
35
+ class Tab extends Tab$1 {
36
+ constructor() {
37
+ super(...arguments);
38
+ this.tabIndex = "-1";
39
+ this.ariaSelected = null;
471
40
  }
472
41
  }
473
42
  __decorateClass([
474
- observable
475
- ], Tabs.prototype, "tablist", 2);
43
+ attr
44
+ ], Tab.prototype, "connotation", 2);
45
+ __decorateClass([
46
+ attr
47
+ ], Tab.prototype, "shape", 2);
476
48
  __decorateClass([
477
49
  attr
478
- ], Tabs.prototype, "connotation", 2);
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);
479
58
 
480
59
  const getClasses = ({
481
60
  connotation,
482
- orientation
61
+ disabled,
62
+ ariaSelected,
63
+ iconTrailing,
64
+ shape
483
65
  }) => classNames(
484
66
  "base",
485
- [`connotation-${connotation}`, Boolean(connotation)],
486
- [`orientation-${orientation}`, Boolean(orientation)]
67
+ [`connotation-${connotation}`, Boolean(connotation) && ariaSelected === "true"],
68
+ [`shape-${shape}`, Boolean(shape)],
69
+ ["disabled", Boolean(disabled)],
70
+ ["selected", ariaSelected === "true"],
71
+ ["icon-trailing", iconTrailing]
487
72
  );
488
- function TabsTemplate() {
73
+ function TabTemplate(context) {
74
+ const affixIconTemplate = affixIconTemplateFactory(context);
75
+ const focusTemplate = focusTemplateFactory(context);
489
76
  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
- `;
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}
82
+ </div>
83
+ </template>`;
506
84
  }
507
85
 
508
- const tabsDefinition = Tabs.compose({
509
- baseName: "tabs",
510
- template: TabsTemplate,
86
+ const tabDefinition = Tab.compose({
87
+ baseName: "tab",
88
+ template: TabTemplate,
511
89
  styles
512
90
  });
513
- const tabsRegistries = [tabsDefinition(), ...tabRegistries, ...tabPanelRegistries];
514
- const registerTabs = registerFactory(tabsRegistries);
91
+ const tabRegistries = [tabDefinition(), ...iconRegistries, ...focusRegistries];
92
+ const registerTab = registerFactory(tabRegistries);
515
93
 
516
- export { tabsRegistries as a, registerTabs as r, tabsDefinition as t };
94
+ export { tabRegistries as a, registerTab as r, tabDefinition as t };