@vonage/vivid 3.52.0 → 3.54.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 (299) hide show
  1. package/README.md +1 -1
  2. package/accordion/index.cjs +1 -1
  3. package/accordion/index.js +1 -1
  4. package/accordion-item/index.cjs +1 -1
  5. package/accordion-item/index.js +1 -1
  6. package/alert/index.cjs +3 -3
  7. package/alert/index.js +3 -3
  8. package/appearance-ui/index.cjs +1 -1
  9. package/appearance-ui/index.js +1 -1
  10. package/audio-player/index.cjs +3 -3
  11. package/audio-player/index.js +3 -3
  12. package/avatar/index.cjs +1 -1
  13. package/avatar/index.js +1 -1
  14. package/badge/index.cjs +1 -1
  15. package/badge/index.js +1 -1
  16. package/banner/index.cjs +2 -2
  17. package/banner/index.js +2 -2
  18. package/breadcrumb-item/index.cjs +1 -1
  19. package/breadcrumb-item/index.js +1 -1
  20. package/button/index.cjs +2 -2
  21. package/button/index.js +2 -2
  22. package/card/index.cjs +2 -2
  23. package/card/index.js +2 -2
  24. package/checkbox/index.cjs +3 -2
  25. package/checkbox/index.js +3 -2
  26. package/combobox/index.cjs +5 -5
  27. package/combobox/index.js +5 -5
  28. package/custom-elements.json +1162 -99
  29. package/data-grid/index.cjs +1 -1
  30. package/data-grid/index.js +1 -1
  31. package/date-picker/index.cjs +7 -6
  32. package/date-picker/index.js +7 -6
  33. package/date-range-picker/index.cjs +7 -6
  34. package/date-range-picker/index.js +7 -6
  35. package/dial-pad/index.cjs +33 -0
  36. package/dial-pad/index.js +31 -0
  37. package/dialog/index.cjs +4 -4
  38. package/dialog/index.js +4 -4
  39. package/divider/index.cjs +1 -1
  40. package/divider/index.js +1 -1
  41. package/elevation/index.cjs +1 -1
  42. package/elevation/index.js +1 -1
  43. package/empty-state/index.cjs +2 -2
  44. package/empty-state/index.js +2 -2
  45. package/fab/index.cjs +2 -2
  46. package/fab/index.js +2 -2
  47. package/file-picker/index.cjs +4 -3
  48. package/file-picker/index.js +4 -3
  49. package/header/index.cjs +2 -2
  50. package/header/index.js +2 -2
  51. package/icon/index.cjs +1 -1
  52. package/icon/index.js +1 -1
  53. package/index.cjs +132 -122
  54. package/index.js +46 -43
  55. package/layout/index.cjs +1 -1
  56. package/layout/index.js +1 -1
  57. package/lib/appearance-ui/appearance-ui.d.ts +1 -1
  58. package/lib/audio-player/audio-player.d.ts +4 -0
  59. package/lib/audio-player/locale.d.ts +2 -0
  60. package/lib/components.d.ts +2 -0
  61. package/lib/dial-pad/definition.d.ts +3 -0
  62. package/lib/dial-pad/dial-pad.d.ts +17 -0
  63. package/lib/dial-pad/dial-pad.template.d.ts +4 -0
  64. package/lib/dial-pad/locale.d.ts +18 -0
  65. package/lib/enums.d.ts +7 -0
  66. package/lib/menu/menu.d.ts +1 -0
  67. package/lib/nav-disclosure/nav-disclosure.d.ts +5 -0
  68. package/lib/text-anchor/definition.d.ts +1 -0
  69. package/lib/text-anchor/text-anchor.d.ts +5 -0
  70. package/lib/video-player/definition.d.ts +3 -0
  71. package/lib/video-player/locale.d.ts +1 -0
  72. package/lib/video-player/video-player.d.ts +17 -0
  73. package/lib/video-player/video-player.template.d.ts +4 -0
  74. package/lib/video-player/vivid-video-svg.d.ts +1 -0
  75. package/listbox/index.cjs +2 -2
  76. package/listbox/index.js +2 -2
  77. package/locales/en-GB.cjs +33 -1
  78. package/locales/en-GB.js +33 -1
  79. package/locales/en-US.cjs +201 -1
  80. package/locales/en-US.js +201 -1
  81. package/locales/ja-JP.cjs +200 -1
  82. package/locales/ja-JP.js +200 -1
  83. package/locales/zh-CN.cjs +202 -1
  84. package/locales/zh-CN.js +202 -1
  85. package/menu/index.cjs +6 -6
  86. package/menu/index.js +6 -6
  87. package/menu-item/index.cjs +2 -2
  88. package/menu-item/index.js +2 -2
  89. package/nav/index.cjs +1 -1
  90. package/nav/index.js +1 -1
  91. package/nav-disclosure/index.cjs +2 -2
  92. package/nav-disclosure/index.js +2 -2
  93. package/nav-item/index.cjs +2 -2
  94. package/nav-item/index.js +2 -2
  95. package/note/index.cjs +2 -2
  96. package/note/index.js +2 -2
  97. package/number-field/index.cjs +5 -4
  98. package/number-field/index.js +5 -4
  99. package/option/index.cjs +2 -2
  100. package/option/index.js +2 -2
  101. package/package.json +1 -1
  102. package/pagination/index.cjs +3 -3
  103. package/pagination/index.js +3 -3
  104. package/popup/index.cjs +4 -4
  105. package/popup/index.js +4 -4
  106. package/progress/index.cjs +1 -1
  107. package/progress/index.js +1 -1
  108. package/progress-ring/index.cjs +1 -1
  109. package/progress-ring/index.js +1 -1
  110. package/radio/index.cjs +1 -1
  111. package/radio/index.js +1 -1
  112. package/radio-group/index.cjs +1 -1
  113. package/radio-group/index.js +1 -1
  114. package/range-slider/index.cjs +2 -2
  115. package/range-slider/index.js +2 -2
  116. package/select/index.cjs +7 -6
  117. package/select/index.js +7 -6
  118. package/selectable-box/index.cjs +5 -4
  119. package/selectable-box/index.js +5 -4
  120. package/shared/applyMixinsWithObservables.cjs +15 -0
  121. package/shared/applyMixinsWithObservables.js +13 -0
  122. package/shared/definition.cjs +1 -1
  123. package/shared/definition.js +1 -1
  124. package/shared/definition11.cjs +3 -3
  125. package/shared/definition11.js +3 -3
  126. package/shared/definition14.cjs +2 -2
  127. package/shared/definition14.js +2 -2
  128. package/shared/definition15.cjs +8 -9
  129. package/shared/definition15.js +8 -9
  130. package/shared/definition16.cjs +3 -3
  131. package/shared/definition16.js +3 -3
  132. package/shared/definition17.cjs +2 -2
  133. package/shared/definition17.js +3 -3
  134. package/shared/definition18.cjs +3 -3
  135. package/shared/definition18.js +3 -3
  136. package/shared/definition19.cjs +3 -3
  137. package/shared/definition19.js +3 -3
  138. package/shared/definition20.cjs +196 -224
  139. package/shared/definition20.js +191 -219
  140. package/shared/definition21.cjs +264 -67
  141. package/shared/definition21.js +263 -65
  142. package/shared/definition22.cjs +66 -57
  143. package/shared/definition22.js +64 -56
  144. package/shared/definition23.cjs +42 -76
  145. package/shared/definition23.js +41 -75
  146. package/shared/definition24.cjs +70 -2402
  147. package/shared/definition24.js +69 -2401
  148. package/shared/definition25.cjs +2402 -46
  149. package/shared/definition25.js +2401 -45
  150. package/shared/definition26.cjs +63 -30
  151. package/shared/definition26.js +62 -29
  152. package/shared/definition27.cjs +28 -56
  153. package/shared/definition27.js +27 -55
  154. package/shared/definition28.cjs +35 -881
  155. package/shared/definition28.js +34 -879
  156. package/shared/definition29.cjs +922 -60
  157. package/shared/definition29.js +922 -61
  158. package/shared/definition30.cjs +68 -86
  159. package/shared/definition30.js +67 -85
  160. package/shared/definition31.cjs +98 -21
  161. package/shared/definition31.js +98 -21
  162. package/shared/definition32.cjs +24 -12
  163. package/shared/definition32.js +23 -11
  164. package/shared/definition33.cjs +11 -50
  165. package/shared/definition33.js +10 -49
  166. package/shared/definition34.cjs +26 -515
  167. package/shared/definition34.js +26 -515
  168. package/shared/definition35.cjs +448 -194
  169. package/shared/definition35.js +448 -192
  170. package/shared/definition36.cjs +256 -202
  171. package/shared/definition36.js +253 -201
  172. package/shared/definition37.cjs +204 -65
  173. package/shared/definition37.js +203 -63
  174. package/shared/definition38.cjs +63 -57
  175. package/shared/definition38.js +60 -55
  176. package/shared/definition39.cjs +65 -432
  177. package/shared/definition39.js +64 -431
  178. package/shared/definition4.cjs +2 -2
  179. package/shared/definition4.js +2 -2
  180. package/shared/definition40.cjs +441 -34
  181. package/shared/definition40.js +438 -31
  182. package/shared/definition41.cjs +34 -576
  183. package/shared/definition41.js +33 -575
  184. package/shared/definition42.cjs +531 -654
  185. package/shared/definition42.js +531 -654
  186. package/shared/definition43.cjs +690 -114
  187. package/shared/definition43.js +689 -113
  188. package/shared/definition44.cjs +124 -79
  189. package/shared/definition44.js +122 -77
  190. package/shared/definition45.cjs +78 -520
  191. package/shared/definition45.js +77 -518
  192. package/shared/definition46.cjs +520 -119
  193. package/shared/definition46.js +518 -118
  194. package/shared/definition47.cjs +118 -135
  195. package/shared/definition47.js +117 -134
  196. package/shared/definition48.cjs +151 -19
  197. package/shared/definition48.js +150 -18
  198. package/shared/definition49.cjs +21 -84
  199. package/shared/definition49.js +20 -83
  200. package/shared/definition5.cjs +100 -19
  201. package/shared/definition5.js +100 -19
  202. package/shared/definition50.cjs +52 -505
  203. package/shared/definition50.js +51 -504
  204. package/shared/definition51.cjs +526 -28
  205. package/shared/definition51.js +525 -27
  206. package/shared/definition52.cjs +28 -123
  207. package/shared/definition52.js +26 -122
  208. package/shared/definition53.cjs +110 -309
  209. package/shared/definition53.js +110 -308
  210. package/shared/definition54.cjs +255 -271
  211. package/shared/definition54.js +255 -271
  212. package/shared/definition55.cjs +315 -776
  213. package/shared/definition55.js +314 -775
  214. package/shared/definition56.cjs +818 -107
  215. package/shared/definition56.js +817 -106
  216. package/shared/definition57.cjs +85 -55
  217. package/shared/definition57.js +84 -54
  218. package/shared/definition58.cjs +125 -72
  219. package/shared/definition58.js +124 -71
  220. package/shared/definition59.cjs +72 -285
  221. package/shared/definition59.js +73 -286
  222. package/shared/definition6.cjs +1 -1
  223. package/shared/definition6.js +1 -1
  224. package/shared/definition60.cjs +298 -39
  225. package/shared/definition60.js +297 -38
  226. package/shared/definition61.cjs +66044 -1687
  227. package/shared/definition61.js +66043 -1686
  228. package/shared/definition62.cjs +50 -0
  229. package/shared/definition62.js +46 -0
  230. package/shared/definition63.cjs +1828 -0
  231. package/shared/definition63.js +1824 -0
  232. package/shared/definition7.cjs +2 -2
  233. package/shared/definition7.js +2 -2
  234. package/shared/definition8.cjs +2 -2
  235. package/shared/definition8.js +2 -2
  236. package/shared/definition9.cjs +1 -1
  237. package/shared/definition9.js +1 -1
  238. package/shared/enums.cjs +9 -0
  239. package/shared/enums.js +9 -1
  240. package/shared/icon.cjs +20 -2
  241. package/shared/icon.js +21 -3
  242. package/shared/index2.cjs +73 -37
  243. package/shared/index2.js +73 -37
  244. package/shared/key-codes2.js +1 -1
  245. package/shared/listbox.cjs +1 -1
  246. package/shared/listbox.js +1 -1
  247. package/shared/localization/Locale.d.ts +4 -0
  248. package/shared/patterns/form-elements/form-elements.d.ts +2 -3
  249. package/shared/presentationDate.cjs +16 -5
  250. package/shared/presentationDate.js +16 -5
  251. package/shared/text-anchor.cjs +6 -0
  252. package/shared/text-anchor.js +6 -0
  253. package/shared/text-anchor.template.cjs +6 -1
  254. package/shared/text-anchor.template.js +6 -1
  255. package/shared/text-field.cjs +1 -1
  256. package/shared/text-field.js +1 -1
  257. package/shared/utils/applyMixinsWithObservables.d.ts +1 -0
  258. package/shared/utils/numberConverter.d.ts +2 -0
  259. package/side-drawer/index.cjs +1 -1
  260. package/side-drawer/index.js +1 -1
  261. package/slider/index.cjs +1 -1
  262. package/slider/index.js +1 -1
  263. package/split-button/index.cjs +2 -2
  264. package/split-button/index.js +2 -2
  265. package/styles/core/all.css +1 -1
  266. package/styles/core/theme.css +1 -1
  267. package/styles/core/typography.css +1 -1
  268. package/styles/tokens/theme-dark.css +4 -4
  269. package/styles/tokens/theme-light.css +4 -4
  270. package/styles/tokens/vivid-2-compat.css +1 -1
  271. package/switch/index.cjs +2 -2
  272. package/switch/index.js +2 -2
  273. package/tab/index.cjs +2 -2
  274. package/tab/index.js +2 -2
  275. package/tab-panel/index.cjs +1 -1
  276. package/tab-panel/index.js +1 -1
  277. package/tabs/index.cjs +4 -4
  278. package/tabs/index.js +4 -4
  279. package/tag/index.cjs +2 -2
  280. package/tag/index.js +2 -2
  281. package/tag-group/index.cjs +1 -1
  282. package/tag-group/index.js +1 -1
  283. package/text-area/index.cjs +4 -3
  284. package/text-area/index.js +4 -3
  285. package/text-field/index.cjs +4 -3
  286. package/text-field/index.js +4 -3
  287. package/time-picker/index.cjs +8 -7
  288. package/time-picker/index.js +8 -7
  289. package/toggletip/index.cjs +5 -5
  290. package/toggletip/index.js +5 -5
  291. package/tooltip/index.cjs +5 -5
  292. package/tooltip/index.js +5 -5
  293. package/tree-item/index.cjs +2 -2
  294. package/tree-item/index.js +2 -2
  295. package/tree-view/index.cjs +1 -1
  296. package/tree-view/index.js +1 -1
  297. package/video-player/index.cjs +17 -0
  298. package/video-player/index.js +15 -0
  299. package/vivid.api.json +332 -0
@@ -1,387 +1,23 @@
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 './definition49.js';
3
- import { a as tabPanelRegistries } from './definition48.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';
12
5
  import { c as classNames } from './class-names.js';
13
6
 
14
7
  /**
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 }.
8
+ * A Tab Component to be used with {@link @microsoft/fast-foundation#(Tabs:class)}
25
9
  *
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
10
+ * @slot - The default slot for the tab content
35
11
  *
36
12
  * @public
37
13
  */
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
- }
14
+ let Tab$1 = class Tab extends FoundationElement {
360
15
  };
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
16
  __decorate([
374
17
  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);
18
+ ], Tab$1.prototype, "disabled", void 0);
383
19
 
384
- const styles = ":host{display:block}.base{display:grid;box-sizing:border-box}.base{--_appearance-color-text: var(--_connotation-color-primary);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base.connotation-cta{--_connotation-color-primary: var(--vvd-tabs-cta-primary, var(--vvd-color-cta-500))}.base:not(.connotation-cta){--_connotation-color-primary: var(--vvd-tabs-accent-primary, 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}\n";
20
+ const styles = ":host(.vertical){justify-content:end;grid-column:1/auto}:host([disabled]){cursor:not-allowed}:host(:focus-visible){outline:none}.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}.base{--_appearance-color-text: var(--_connotation-color-primary);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-primary);--_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-primary);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base.connotation-cta{--_connotation-color-primary: var(--vvd-tab-cta-primary, var(--vvd-color-cta-500));--_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))}.base:not(.connotation-cta){--_connotation-color-primary: var(--vvd-tab-accent-primary, var(--vvd-color-canvas-text));--_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))}@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}: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{padding-inline-start:calc(var(--_tabs-active-indicator-stroke-width) + var(--_tabs-tablist-gutter))}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}\n";
385
21
 
386
22
  var __defProp = Object.defineProperty;
387
23
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -394,156 +30,67 @@ var __decorateClass = (decorators, target, key, kind) => {
394
30
  __defProp(target, key, result);
395
31
  return result;
396
32
  };
397
- const ACTIVE_TAB_WIDTH = "--_tabs-active-tab-inline-size";
398
- class Tabs extends Tabs$1 {
33
+ class Tab extends Tab$1 {
399
34
  constructor() {
400
35
  super(...arguments);
401
- this.scrollablePanel = false;
402
- }
403
- connotationChanged() {
404
- this.#updateTabsConnotation();
405
- }
406
- orientationChanged() {
407
- super.orientationChanged();
408
- this.patchIndicatorStyleTransition();
409
- if (!this.activeIndicatorRef)
410
- return;
411
- if (this.orientation === TabsOrientation.vertical) {
412
- this.activeIndicatorRef.style.removeProperty(ACTIVE_TAB_WIDTH);
413
- }
414
- this.#patchActiveID();
415
- }
416
- activeidChanged(oldValue, newValue) {
417
- super.activeidChanged(oldValue, newValue);
418
- this.patchIndicatorStyleTransition();
419
- this.#patchActiveID();
420
- }
421
- tabsChanged() {
422
- super.tabsChanged();
423
- this.patchIndicatorStyleTransition();
424
- this.#patchActiveID();
425
- }
426
- tabpanelsChanged() {
427
- super.tabpanelsChanged();
428
- this.patchIndicatorStyleTransition();
429
- this.#patchActiveID();
430
- }
431
- patchIndicatorStyleTransition() {
432
- if (!this.activetab || !this.activeIndicatorRef)
433
- return;
434
- if (this.orientation === TabsOrientation.vertical || !this.showActiveIndicator)
435
- return;
436
- const width = this.activetab.getBoundingClientRect().width;
437
- this.activeIndicatorRef.style.setProperty(ACTIVE_TAB_WIDTH, `${width}px`);
438
- }
439
- #updateTabsConnotation() {
440
- if (this.tabs) {
441
- this.tabs.forEach((tab) => {
442
- if (tab.getAttribute("aria-selected") === "true") {
443
- tab.setAttribute("connotation", this.connotation);
444
- } else {
445
- tab.removeAttribute("connotation");
446
- }
447
- });
448
- }
449
- }
450
- get #tabListWrapper() {
451
- return this.shadowRoot.querySelector(".tablist-wrapper");
452
- }
453
- #scrollToIndex(index) {
454
- const tab = this.tabs[index];
455
- if (!tab)
456
- return;
457
- let left = 0;
458
- let top = 0;
459
- if (this.orientation === TabsOrientation.vertical) {
460
- if (index === this.tabs.length - 1) {
461
- top = this.#tabListWrapper.scrollHeight;
462
- }
463
- if (index > 0 && index < this.tabs.length - 1) {
464
- top = tab.offsetTop - this.#tabListWrapper.offsetHeight / 2 + tab.offsetHeight / 2;
465
- }
466
- } else {
467
- if (index === this.tabs.length - 1) {
468
- left = this.#tabListWrapper.scrollWidth;
469
- }
470
- if (index > 0 && index < this.tabs.length - 1) {
471
- left = tab.offsetLeft - this.#tabListWrapper.offsetWidth / 2 + tab.offsetWidth / 2;
472
- }
473
- }
474
- this.#tabListWrapper.scrollTo({ top, left, behavior: "smooth" });
475
- }
476
- // adapted FAST fix https://github.com/microsoft/fast/pull/6606
477
- #patchActiveID() {
478
- if (!this.activetab)
479
- return;
480
- const idx = this.tabs.indexOf(this.activetab);
481
- this.activeid = this["tabIds"][idx];
482
- this.#updateTabsConnotation();
483
- this.#scrollToIndex(idx);
36
+ this.tabIndex = "-1";
37
+ this.ariaSelected = null;
484
38
  }
485
39
  }
486
40
  __decorateClass([
487
- observable
488
- ], Tabs.prototype, "tablist", 2);
41
+ attr
42
+ ], Tab.prototype, "connotation", 2);
489
43
  __decorateClass([
490
44
  attr
491
- ], Tabs.prototype, "connotation", 2);
45
+ ], Tab.prototype, "shape", 2);
492
46
  __decorateClass([
493
47
  attr
494
- ], Tabs.prototype, "gutters", 2);
48
+ ], Tab.prototype, "label", 2);
49
+ __decorateClass([
50
+ attr({ mode: "fromView" })
51
+ ], Tab.prototype, "tabIndex", 2);
495
52
  __decorateClass([
496
- attr({ mode: "boolean", attribute: "scrollable-panel" })
497
- ], Tabs.prototype, "scrollablePanel", 2);
53
+ attr({ attribute: "aria-selected" })
54
+ ], Tab.prototype, "ariaSelected", 2);
55
+ applyMixins(Tab, AffixIconWithTrailing);
498
56
 
499
57
  const getClasses = ({
500
58
  connotation,
501
- orientation,
502
- gutters,
503
- scrollablePanel
59
+ disabled,
60
+ ariaSelected,
61
+ iconTrailing,
62
+ shape
504
63
  }) => classNames(
505
64
  "base",
506
- [`connotation-${connotation}`, Boolean(connotation)],
507
- [`orientation-${orientation}`, Boolean(orientation)],
508
- [`gutters-${gutters}`, Boolean(gutters)],
509
- ["scroll", Boolean(scrollablePanel)]
65
+ [
66
+ `connotation-${connotation}`,
67
+ Boolean(connotation) && ariaSelected === "true"
68
+ ],
69
+ [`shape-${shape}`, Boolean(shape)],
70
+ ["disabled", Boolean(disabled)],
71
+ ["selected", ariaSelected === "true"],
72
+ ["icon-trailing", iconTrailing]
510
73
  );
511
- function TabsTemplate() {
512
- return html`
513
- <template>
514
- <div class="${getClasses}">
515
- <div class="tablist-wrapper">
516
- <div class="tablist" role="tablist" ${ref("tablist")}>
517
- <slot name="tab" ${slotted("tabs")}></slot>
518
- ${when(
519
- (x) => x.showActiveIndicator,
520
- html`
521
- <div
522
- ${ref("activeIndicatorRef")}
523
- class="active-indicator"
524
- ></div>
525
- `
526
- )}
527
- </div>
528
- </div>
529
- <div class="tabpanel">
530
- <slot name="tabpanel" ${slotted("tabpanels")}></slot>
531
- </div>
532
- </div>
533
- </template>
534
- `;
74
+ function TabTemplate(context) {
75
+ const affixIconTemplate = affixIconTemplateFactory(context);
76
+ return html` <template
77
+ slot="tab"
78
+ role="tab"
79
+ aria-disabled="${(x) => x.disabled}"
80
+ aria-selected="${(x) => x.ariaSelected}"
81
+ >
82
+ <div class="${getClasses}">
83
+ ${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)} ${(x) => x.label}
84
+ </div>
85
+ </template>`;
535
86
  }
536
87
 
537
- const tabsDefinition = Tabs.compose({
538
- baseName: "tabs",
539
- template: TabsTemplate,
88
+ const tabDefinition = Tab.compose({
89
+ baseName: "tab",
90
+ template: TabTemplate,
540
91
  styles
541
92
  });
542
- const tabsRegistries = [
543
- tabsDefinition(),
544
- ...tabRegistries,
545
- ...tabPanelRegistries
546
- ];
547
- const registerTabs = registerFactory(tabsRegistries);
93
+ const tabRegistries = [tabDefinition(), ...iconRegistries];
94
+ const registerTab = registerFactory(tabRegistries);
548
95
 
549
- export { tabsRegistries as a, registerTabs as r, tabsDefinition as t };
96
+ export { tabRegistries as a, registerTab as r, tabDefinition as t };