@vonage/vivid 3.0.0 → 3.0.1

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 (323) hide show
  1. package/README.md +176 -4
  2. package/accordion/index.js +22 -61
  3. package/accordion-item/index.js +16 -118
  4. package/action-group/index.js +5 -0
  5. package/avatar/index.js +11 -0
  6. package/badge/index.js +9 -53
  7. package/banner/index.js +20 -210
  8. package/breadcrumb/index.js +7 -96
  9. package/breadcrumb-item/index.js +15 -46
  10. package/button/index.js +19 -751
  11. package/calendar/index.js +5 -1520
  12. package/calendar-event/index.js +9 -0
  13. package/card/index.js +10 -133
  14. package/checkbox/index.js +16 -0
  15. package/combobox/index.js +35 -0
  16. package/dialog/index.js +24 -0
  17. package/divider/index.js +6 -0
  18. package/elevation/index.js +4 -30
  19. package/fab/index.js +22 -0
  20. package/focus/index.js +4 -2
  21. package/header/index.js +6 -0
  22. package/icon/index.js +8 -36
  23. package/index.js +76 -26
  24. package/layout/index.js +4 -52
  25. package/lib/accordion/accordion.d.ts +3 -7
  26. package/lib/accordion/accordion.template.d.ts +1 -2
  27. package/lib/accordion/definition.d.ts +1 -0
  28. package/lib/accordion/index.d.ts +1 -2
  29. package/lib/accordion-item/accordion-item.d.ts +2 -6
  30. package/lib/accordion-item/accordion-item.template.d.ts +4 -4
  31. package/lib/accordion-item/definition.d.ts +1 -0
  32. package/lib/accordion-item/index.d.ts +1 -3
  33. package/lib/action-group/action-group.d.ts +10 -0
  34. package/lib/{sidenav-item/sidenav-item.template.d.ts → action-group/action-group.template.d.ts} +2 -2
  35. package/lib/action-group/definition.d.ts +1 -0
  36. package/lib/action-group/index.d.ts +1 -0
  37. package/lib/avatar/avatar.d.ts +15 -0
  38. package/lib/avatar/avatar.template.d.ts +4 -0
  39. package/lib/avatar/definition.d.ts +1 -0
  40. package/lib/avatar/index.d.ts +1 -0
  41. package/lib/badge/badge.d.ts +2 -4
  42. package/lib/badge/definition.d.ts +3 -0
  43. package/lib/badge/index.d.ts +1 -3
  44. package/lib/banner/banner.d.ts +1 -1
  45. package/lib/banner/banner.template.d.ts +0 -2
  46. package/lib/banner/definition.d.ts +1 -0
  47. package/lib/banner/index.d.ts +1 -2
  48. package/lib/breadcrumb/breadcrumb.template.d.ts +4 -0
  49. package/lib/breadcrumb/definition.d.ts +1 -0
  50. package/lib/breadcrumb/index.d.ts +1 -2
  51. package/lib/breadcrumb-item/definition.d.ts +1 -0
  52. package/lib/breadcrumb-item/index.d.ts +1 -3
  53. package/lib/button/button.d.ts +3 -2
  54. package/lib/button/definition.d.ts +1 -0
  55. package/lib/button/index.d.ts +1 -21
  56. package/lib/calendar/calendar.d.ts +3 -1
  57. package/lib/calendar/definition.d.ts +1 -0
  58. package/lib/calendar/index.d.ts +1 -3
  59. package/lib/calendar-event/calendar-event.d.ts +14 -0
  60. package/lib/calendar-event/calendar-event.template.d.ts +4 -0
  61. package/lib/calendar-event/definition.d.ts +1 -0
  62. package/lib/calendar-event/index.d.ts +1 -0
  63. package/lib/card/card.d.ts +2 -2
  64. package/lib/card/definition.d.ts +1 -0
  65. package/lib/card/index.d.ts +1 -5
  66. package/lib/checkbox/checkbox.d.ts +5 -0
  67. package/lib/checkbox/checkbox.template.d.ts +4 -0
  68. package/lib/checkbox/definition.d.ts +1 -0
  69. package/lib/checkbox/index.d.ts +1 -0
  70. package/lib/combobox/combobox.d.ts +14 -0
  71. package/lib/combobox/combobox.template.d.ts +4 -0
  72. package/lib/combobox/definition.d.ts +3 -0
  73. package/lib/combobox/index.d.ts +1 -0
  74. package/lib/components.d.ts +44 -16
  75. package/lib/dialog/definition.d.ts +1 -0
  76. package/lib/dialog/dialog.d.ts +23 -0
  77. package/lib/dialog/dialog.template.d.ts +4 -0
  78. package/lib/dialog/index.d.ts +1 -0
  79. package/lib/divider/definition.d.ts +1 -0
  80. package/lib/divider/divider.d.ts +3 -0
  81. package/lib/divider/divider.template.d.ts +4 -0
  82. package/lib/divider/index.d.ts +1 -0
  83. package/lib/elevation/definition.d.ts +1 -0
  84. package/lib/elevation/elevation.d.ts +1 -0
  85. package/lib/elevation/index.d.ts +1 -2
  86. package/lib/enums.d.ts +19 -6
  87. package/lib/fab/definition.d.ts +3 -0
  88. package/lib/fab/fab.d.ts +13 -0
  89. package/lib/fab/fab.template.d.ts +4 -0
  90. package/lib/fab/index.d.ts +1 -0
  91. package/lib/focus/definition.d.ts +3 -0
  92. package/lib/focus/index.d.ts +1 -2
  93. package/lib/{sidenav-item/index.d.ts → header/definition.d.ts} +2 -2
  94. package/lib/header/header.d.ts +5 -0
  95. package/lib/header/header.template.d.ts +4 -0
  96. package/lib/header/index.d.ts +1 -0
  97. package/lib/icon/definition.d.ts +3 -0
  98. package/lib/icon/icon.d.ts +5 -6
  99. package/lib/icon/index.d.ts +1 -2
  100. package/lib/layout/definition.d.ts +3 -0
  101. package/lib/layout/index.d.ts +1 -2
  102. package/lib/layout/layout.d.ts +4 -4
  103. package/lib/listbox/definition.d.ts +3 -0
  104. package/lib/listbox/index.d.ts +1 -0
  105. package/lib/listbox/listbox.d.ts +6 -0
  106. package/lib/listbox/listbox.template.d.ts +4 -0
  107. package/lib/menu/definition.d.ts +11 -0
  108. package/lib/menu/index.d.ts +1 -0
  109. package/lib/menu/menu.d.ts +10 -0
  110. package/lib/menu/menu.template.d.ts +3 -0
  111. package/lib/menu-item/definition.d.ts +3 -0
  112. package/lib/menu-item/index.d.ts +1 -0
  113. package/lib/menu-item/menu-item.d.ts +8 -0
  114. package/lib/menu-item/menu-item.template.d.ts +5 -0
  115. package/lib/nav/definition.d.ts +3 -0
  116. package/lib/nav/index.d.ts +1 -0
  117. package/lib/nav/nav.d.ts +3 -0
  118. package/lib/nav/nav.template.d.ts +4 -0
  119. package/lib/nav-disclosure/definition.d.ts +3 -0
  120. package/lib/nav-disclosure/index.d.ts +1 -0
  121. package/lib/nav-disclosure/nav-disclosure.d.ts +10 -0
  122. package/lib/nav-disclosure/nav-disclosure.template.d.ts +4 -0
  123. package/lib/nav-item/definition.d.ts +3 -0
  124. package/lib/nav-item/index.d.ts +1 -0
  125. package/lib/{sidenav-item/sidenav-item.d.ts → nav-item/nav-item.d.ts} +2 -2
  126. package/lib/nav-item/nav-item.template.d.ts +4 -0
  127. package/lib/note/definition.d.ts +3 -0
  128. package/lib/note/index.d.ts +1 -0
  129. package/lib/note/note.d.ts +10 -0
  130. package/lib/{text/text.template.d.ts → note/note.template.d.ts} +2 -2
  131. package/lib/number-field/definition.d.ts +4 -0
  132. package/lib/number-field/index.d.ts +1 -0
  133. package/lib/number-field/number-field.d.ts +14 -0
  134. package/lib/number-field/number-field.template.d.ts +4 -0
  135. package/lib/option/definition.d.ts +3 -0
  136. package/lib/option/index.d.ts +1 -0
  137. package/lib/option/option.d.ts +9 -0
  138. package/lib/option/option.template.d.ts +4 -0
  139. package/lib/popup/definition.d.ts +4 -0
  140. package/lib/popup/index.d.ts +1 -4
  141. package/lib/popup/popup.d.ts +8 -4
  142. package/lib/progress/definition.d.ts +3 -0
  143. package/lib/progress/index.d.ts +1 -2
  144. package/lib/progress/progress.d.ts +1 -1
  145. package/lib/progress-ring/definition.d.ts +3 -0
  146. package/lib/progress-ring/index.d.ts +1 -2
  147. package/lib/progress-ring/progress-ring.d.ts +2 -1
  148. package/lib/radio/definition.d.ts +3 -0
  149. package/lib/radio/index.d.ts +1 -0
  150. package/lib/radio/radio.d.ts +4 -0
  151. package/lib/radio/radio.template.d.ts +4 -0
  152. package/lib/radio-group/definition.d.ts +11 -0
  153. package/lib/radio-group/index.d.ts +1 -0
  154. package/lib/radio-group/radio-group.d.ts +4 -0
  155. package/lib/radio-group/radio-group.template.d.ts +4 -0
  156. package/lib/select/definition.d.ts +3 -0
  157. package/lib/select/index.d.ts +1 -0
  158. package/lib/select/select.d.ts +17 -0
  159. package/lib/select/select.template.d.ts +4 -0
  160. package/lib/side-drawer/definition.d.ts +3 -0
  161. package/lib/side-drawer/index.d.ts +1 -2
  162. package/lib/side-drawer/side-drawer.d.ts +3 -2
  163. package/lib/slider/definition.d.ts +3 -0
  164. package/lib/slider/index.d.ts +1 -0
  165. package/lib/slider/slider.d.ts +4 -0
  166. package/lib/slider/slider.template.d.ts +4 -0
  167. package/lib/switch/definition.d.ts +3 -0
  168. package/lib/switch/index.d.ts +1 -0
  169. package/lib/switch/switch.d.ts +7 -0
  170. package/lib/switch/switch.template.d.ts +4 -0
  171. package/lib/tab/definition.d.ts +3 -0
  172. package/lib/tab/index.d.ts +1 -0
  173. package/lib/tab/tab.d.ts +9 -0
  174. package/lib/tab/tab.template.d.ts +3 -0
  175. package/lib/tab-panel/definition.d.ts +3 -0
  176. package/lib/tab-panel/index.d.ts +1 -0
  177. package/lib/tab-panel/tab-panel.d.ts +3 -0
  178. package/lib/tab-panel/tab-panel.template.d.ts +2 -0
  179. package/lib/tabs/definition.d.ts +3 -0
  180. package/lib/tabs/index.d.ts +1 -0
  181. package/lib/tabs/tabs.d.ts +10 -0
  182. package/lib/tabs/tabs.template.d.ts +2 -0
  183. package/lib/text-anchor/definition.d.ts +3 -0
  184. package/lib/text-anchor/index.d.ts +1 -2
  185. package/lib/text-area/definition.d.ts +3 -0
  186. package/lib/text-area/index.d.ts +1 -0
  187. package/lib/text-area/text-area.d.ts +9 -0
  188. package/lib/text-area/text-area.template.d.ts +4 -0
  189. package/lib/text-field/definition.d.ts +3 -0
  190. package/lib/text-field/index.d.ts +1 -0
  191. package/lib/text-field/text-field.d.ts +14 -0
  192. package/lib/text-field/text-field.template.d.ts +4 -0
  193. package/lib/tooltip/definition.d.ts +3 -0
  194. package/lib/tooltip/index.d.ts +1 -3
  195. package/lib/tooltip/tooltip.d.ts +6 -6
  196. package/listbox/index.js +27 -0
  197. package/menu/index.js +30 -0
  198. package/menu-item/index.js +20 -0
  199. package/nav/index.js +4 -0
  200. package/nav-disclosure/index.js +17 -0
  201. package/nav-item/index.js +22 -0
  202. package/note/index.js +15 -0
  203. package/number-field/index.js +459 -0
  204. package/option/index.js +21 -0
  205. package/package.json +29 -18
  206. package/popup/index.js +21 -2062
  207. package/progress/index.js +6 -98
  208. package/progress-ring/index.js +6 -75
  209. package/radio/index.js +12 -0
  210. package/radio-group/index.js +11 -0
  211. package/select/index.js +34 -0
  212. package/shared/affix.js +2 -8
  213. package/shared/anchor.js +10 -2
  214. package/shared/apply-mixins.js +5 -4
  215. package/shared/aria-global.js +2 -86
  216. package/shared/aria.js +9 -0
  217. package/shared/base-progress.js +5 -0
  218. package/shared/breadcrumb-item.js +1 -1
  219. package/shared/button.js +200 -0
  220. package/shared/calendar-event.js +19 -0
  221. package/shared/definition.js +225 -0
  222. package/shared/definition10.js +99 -0
  223. package/shared/definition11.js +48 -0
  224. package/shared/definition12.js +1523 -0
  225. package/shared/definition13.js +111 -0
  226. package/shared/definition14.js +114 -0
  227. package/shared/definition15.js +32 -0
  228. package/shared/definition16.js +172 -0
  229. package/shared/definition17.js +727 -0
  230. package/shared/definition18.js +1842 -0
  231. package/shared/definition19.js +261 -0
  232. package/shared/definition2.js +150 -0
  233. package/shared/definition20.js +221 -0
  234. package/shared/definition21.js +78 -0
  235. package/shared/definition22.js +87 -0
  236. package/shared/definition23.js +58 -0
  237. package/shared/definition24.js +44 -0
  238. package/shared/definition25.js +58 -0
  239. package/shared/definition26.js +348 -0
  240. package/shared/definition27.js +363 -0
  241. package/shared/definition28.js +21 -0
  242. package/shared/definition29.js +75 -0
  243. package/shared/definition3.js +29 -0
  244. package/shared/definition30.js +31 -0
  245. package/shared/definition31.js +49 -0
  246. package/shared/definition32.js +94 -0
  247. package/shared/definition33.js +77 -0
  248. package/shared/definition34.js +45 -0
  249. package/shared/definition35.js +435 -0
  250. package/shared/definition36.js +634 -0
  251. package/shared/definition37.js +86 -0
  252. package/shared/definition38.js +592 -0
  253. package/shared/definition39.js +147 -0
  254. package/shared/definition4.js +19 -0
  255. package/shared/definition40.js +67 -0
  256. package/shared/definition41.js +32 -0
  257. package/shared/definition42.js +440 -0
  258. package/shared/definition43.js +282 -0
  259. package/shared/definition44.js +119 -0
  260. package/shared/definition45.js +77 -0
  261. package/shared/definition5.js +38 -0
  262. package/shared/definition6.js +60 -0
  263. package/shared/definition7.js +45 -0
  264. package/shared/definition8.js +113 -0
  265. package/shared/definition9.js +107 -0
  266. package/shared/design-system/index.d.ts +1 -1
  267. package/shared/dialog-polyfill.esm.js +858 -0
  268. package/shared/direction.js +20 -0
  269. package/shared/dom.js +8 -0
  270. package/shared/enums.js +70 -0
  271. package/shared/es.object.assign.js +2 -3
  272. package/shared/es.regexp.to-string.js +59 -0
  273. package/shared/focus.js +5 -0
  274. package/shared/focus2.js +11 -0
  275. package/shared/form-associated.js +466 -0
  276. package/shared/form-elements.js +127 -0
  277. package/shared/icon.js +538 -567
  278. package/shared/index.js +1664 -83
  279. package/shared/key-codes.js +97 -0
  280. package/shared/listbox.js +995 -0
  281. package/shared/numbers.js +34 -0
  282. package/shared/patterns/affix.d.ts +1 -1
  283. package/shared/patterns/focus.d.ts +3 -0
  284. package/shared/patterns/form-elements/form-elements.d.ts +43 -0
  285. package/shared/patterns/form-elements/index.d.ts +1 -0
  286. package/shared/patterns/index.d.ts +2 -0
  287. package/shared/radio.js +127 -0
  288. package/shared/ref.js +41 -0
  289. package/shared/select.options.js +10 -0
  290. package/shared/start-end.js +50 -0
  291. package/shared/string-trim.js +40 -0
  292. package/shared/strings.js +9 -0
  293. package/shared/text-anchor.js +0 -2
  294. package/shared/text-anchor.template.js +6 -5
  295. package/shared/text-field.js +3 -0
  296. package/shared/text-field2.js +225 -0
  297. package/shared/to-string.js +51 -0
  298. package/side-drawer/index.js +5 -81
  299. package/slider/index.js +17 -0
  300. package/styles/core/all.css +83 -0
  301. package/styles/core/theme.css +11 -0
  302. package/styles/core/typography.css +77 -0
  303. package/styles/tokens/theme-dark.css +228 -0
  304. package/styles/tokens/theme-light.css +228 -0
  305. package/switch/index.js +18 -0
  306. package/tab/index.js +16 -0
  307. package/tab-panel/index.js +4 -0
  308. package/tabs/index.js +24 -0
  309. package/text-anchor/index.js +11 -6
  310. package/text-area/index.js +23 -0
  311. package/text-field/index.js +24 -0
  312. package/tooltip/index.js +18 -55
  313. package/lib/text/index.d.ts +0 -2
  314. package/lib/text/text.d.ts +0 -10
  315. package/shared/index2.js +0 -21
  316. package/shared/object-set-prototype-of.js +0 -1009
  317. package/shared/style-inject.es.js +0 -28
  318. package/shared/web.dom-collections.iterator.js +0 -473
  319. package/sidenav-item/index.js +0 -39
  320. package/styles/fonts/spezia.css +0 -23
  321. package/styles/themes/dark.css +0 -205
  322. package/styles/themes/light.css +0 -205
  323. package/text/index.js +0 -46
@@ -0,0 +1,440 @@
1
+ import { F as FoundationElement, _ as __decorate, a as attr, o as observable, b as __metadata, h as html, r as registerFactory } from './index.js';
2
+ import { t as tabRegistries } from './definition40.js';
3
+ import { t as tabPanelRegistries } from './definition41.js';
4
+ import { S as StartEnd } from './start-end.js';
5
+ import { a as applyMixins } from './apply-mixins.js';
6
+ import { i as keyArrowRight, h as keyArrowLeft, b as keyArrowDown, c as keyArrowUp, k as keyEnd, a as keyHome } from './key-codes.js';
7
+ import { u as uniqueId } from './strings.js';
8
+ import { w as wrapInBounds } from './numbers.js';
9
+ import { s as slotted } from './slotted.js';
10
+ import { w as when } from './when.js';
11
+ import { r as ref } from './ref.js';
12
+ import { c as classNames } from './class-names.js';
13
+
14
+ /**
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 }.
25
+ *
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
35
+ *
36
+ * @public
37
+ */
38
+ class Tabs$1 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
+ }
351
+ }
352
+ __decorate([
353
+ attr
354
+ ], Tabs$1.prototype, "orientation", void 0);
355
+ __decorate([
356
+ attr
357
+ ], Tabs$1.prototype, "activeid", void 0);
358
+ __decorate([
359
+ observable
360
+ ], Tabs$1.prototype, "tabs", void 0);
361
+ __decorate([
362
+ observable
363
+ ], Tabs$1.prototype, "tabpanels", void 0);
364
+ __decorate([
365
+ attr({ mode: "boolean" })
366
+ ], Tabs$1.prototype, "activeindicator", void 0);
367
+ __decorate([
368
+ observable
369
+ ], Tabs$1.prototype, "activeIndicatorRef", void 0);
370
+ __decorate([
371
+ observable
372
+ ], Tabs$1.prototype, "showActiveIndicator", void 0);
373
+ applyMixins(Tabs$1, StartEnd);
374
+
375
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Mon, 30 Jan 2023 11:28:31 GMT\n */\n.base {\n display: grid;\n box-sizing: border-box;\n}\n.base {\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-primary-text: var(--vvd-color-canvas);\n --_connotation-color-primary-increment: var(--vvd-color-neutral-800);\n --_connotation-color-faint: var(--vvd-color-neutral-50);\n --_connotation-color-soft: var(--vvd-color-neutral-100);\n}\n.base.orientation-vertical {\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 padding: var(--_tabs-tablist-gutter);\n gap: var(--_tabs-tablist-gutter);\n}\n.base.orientation-vertical .tablist {\n box-shadow: 1px 0 0 0 var(--vvd-color-neutral-300);\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}\n.base:not(.orientation-vertical) .tablist {\n align-self: end;\n justify-content: flex-start;\n border-bottom: 1px solid var(--vvd-color-neutral-300);\n grid-auto-flow: column;\n grid-template-columns: auto;\n grid-template-rows: auto auto;\n inline-size: 100%;\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: 2/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: var(--_tabs-active-tab-inline-size);\n inset-block-end: 0;\n inset-inline-start: 0;\n justify-self: center;\n padding-inline: var(--_tabs-tablist-gutter);\n}\n\n.activeIndicatorTransition {\n transition: transform 0.2s ease-out 0s, inline-size 0.2s ease-out 0s;\n}\n\n.base:not(.orientation-vertical) .active-indicator:not(.activeIndicatorTransition) {\n opacity: 0;\n}";
376
+
377
+ const ACTIVE_TAB_WIDTH = '--_tabs-active-tab-inline-size';
378
+ class Tabs extends Tabs$1 {
379
+ orientationChanged() {
380
+ super.orientationChanged();
381
+ this.patchIndicatorStyleTransition();
382
+ if (!this.activeIndicatorRef) return;
383
+ if (this.orientation === TabsOrientation.vertical) {
384
+ this.activeIndicatorRef.style.removeProperty(ACTIVE_TAB_WIDTH);
385
+ }
386
+ }
387
+ activeidChanged(oldValue, newValue) {
388
+ super.activeidChanged(oldValue, newValue);
389
+ this.patchIndicatorStyleTransition();
390
+ }
391
+ tabsChanged() {
392
+ super.tabsChanged();
393
+ this.patchIndicatorStyleTransition();
394
+ }
395
+ tabpanelsChanged() {
396
+ super.tabpanelsChanged();
397
+ this.patchIndicatorStyleTransition();
398
+ }
399
+ patchIndicatorStyleTransition() {
400
+ if (!this.activetab || !this.activeIndicatorRef) return;
401
+ if (this.orientation === TabsOrientation.vertical || !this.showActiveIndicator) return;
402
+ const width = this.activetab.getBoundingClientRect().width;
403
+ this.activeIndicatorRef.style.setProperty(ACTIVE_TAB_WIDTH, `${width}px`);
404
+ }
405
+ }
406
+ __decorate([observable, __metadata("design:type", HTMLElement)], Tabs.prototype, "tablist", void 0);
407
+
408
+ let _ = t => t,
409
+ _t,
410
+ _t2;
411
+ const getClasses = ({
412
+ orientation
413
+ }) => classNames('base', [`orientation-${orientation}`, Boolean(orientation)]);
414
+ function TabsTemplate() {
415
+ return html(_t || (_t = _`
416
+ <template role="tablist">
417
+ <div class="${0}">
418
+ <div class="tablist" ${0}>
419
+ <slot name="tab" ${0}></slot>
420
+ ${0}
421
+ </div>
422
+ <div class="tabpanel">
423
+ <slot name="tabpanel" ${0}></slot>
424
+ </div>
425
+ </div>
426
+ </template>
427
+ `), getClasses, ref('tablist'), slotted('tabs'), when(x => x.showActiveIndicator, html(_t2 || (_t2 = _`
428
+ <div ${0} class="active-indicator"></div>
429
+ `), ref('activeIndicatorRef'))), slotted('tabpanels'));
430
+ }
431
+
432
+ const tabsDefinition = Tabs.compose({
433
+ baseName: 'tabs',
434
+ template: TabsTemplate,
435
+ styles: css_248z
436
+ });
437
+ const tabsRegistries = [tabsDefinition(), ...tabRegistries, ...tabPanelRegistries];
438
+ const registerTabs = registerFactory(tabsRegistries);
439
+
440
+ export { tabsRegistries as a, registerTabs as r, tabsDefinition as t };