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