@duetds/components 4.34.4 → 4.35.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 (250) hide show
  1. package/hydrate/index.js +247 -22
  2. package/lib/cjs/duet-alert.cjs.entry.js +1 -1
  3. package/lib/cjs/duet-badge.cjs.entry.js +1 -1
  4. package/lib/cjs/duet-breadcrumb.cjs.entry.js +1 -1
  5. package/lib/cjs/duet-breadcrumbs.cjs.entry.js +1 -1
  6. package/lib/cjs/duet-button_2.cjs.entry.js +2 -2
  7. package/lib/cjs/duet-caption_4.cjs.entry.js +2 -2
  8. package/lib/cjs/duet-card.cjs.entry.js +1 -1
  9. package/lib/cjs/duet-checkbox.cjs.entry.js +1 -1
  10. package/lib/cjs/duet-choice_2.cjs.entry.js +2 -2
  11. package/lib/cjs/duet-collapsible.cjs.entry.js +1 -1
  12. package/lib/cjs/duet-cookie-consent.cjs.entry.js +1 -1
  13. package/lib/cjs/duet-date-picker.cjs.entry.js +2 -2
  14. package/lib/cjs/duet-divider_2.cjs.entry.js +1 -1
  15. package/lib/cjs/duet-editable-table-button.cjs.entry.js +1 -1
  16. package/lib/cjs/duet-editable-table_4.cjs.entry.js +1 -1
  17. package/lib/cjs/duet-empty-state.cjs.entry.js +1 -1
  18. package/lib/cjs/duet-fieldset.cjs.entry.js +1 -1
  19. package/lib/cjs/duet-footer.cjs.entry.js +1 -1
  20. package/lib/cjs/duet-grid_2.cjs.entry.js +1 -1
  21. package/lib/cjs/duet-header_2.cjs.entry.js +2 -2
  22. package/lib/cjs/duet-hero.cjs.entry.js +1 -1
  23. package/lib/cjs/duet-icon.cjs.entry.js +1 -1
  24. package/lib/cjs/duet-input_2.cjs.entry.js +1 -1
  25. package/lib/cjs/duet-layout.cjs.entry.js +1 -1
  26. package/lib/cjs/duet-list_2.cjs.entry.js +1 -1
  27. package/lib/cjs/duet-modal.cjs.entry.js +15 -3
  28. package/lib/cjs/duet-notification_2.cjs.entry.js +1 -1
  29. package/lib/cjs/duet-number-input.cjs.entry.js +1 -1
  30. package/lib/cjs/duet-progress.cjs.entry.js +1 -1
  31. package/lib/cjs/duet-radio_2.cjs.entry.js +1 -1
  32. package/lib/cjs/duet-range-slider.cjs.entry.js +1 -1
  33. package/lib/cjs/duet-scrollable_3.cjs.entry.js +406 -0
  34. package/lib/cjs/duet-select.cjs.entry.js +1 -1
  35. package/lib/cjs/duet-step_2.cjs.entry.js +1 -1
  36. package/lib/cjs/duet-textarea.cjs.entry.js +1 -1
  37. package/lib/cjs/duet-toggle.cjs.entry.js +1 -1
  38. package/lib/cjs/duet-tooltip.cjs.entry.js +1 -1
  39. package/lib/cjs/duet-tray.cjs.entry.js +1 -1
  40. package/lib/cjs/duet-upload-aria-status.cjs.entry.js +1 -1
  41. package/lib/cjs/duet-visually-hidden.cjs.entry.js +1 -1
  42. package/lib/cjs/duet.cjs.js +2 -2
  43. package/lib/cjs/{focus-utils-0e3a744a.js → focus-utils-adf0830f.js} +1 -1
  44. package/lib/cjs/{index-0bcb9cea.js → index-ebc216a6.js} +1 -1
  45. package/lib/cjs/loader.cjs.js +2 -2
  46. package/lib/collection/collection-manifest.json +8 -6
  47. package/lib/collection/components/duet-button/duet-button.js +1 -1
  48. package/lib/collection/components/duet-header/duet-header.css +3 -9
  49. package/lib/collection/components/duet-link/duet-link.js +1 -1
  50. package/lib/collection/components/duet-modal/duet-modal.js +33 -3
  51. package/lib/collection/components/duet-scrollable/duet-scrollable.css +83 -0
  52. package/lib/collection/components/duet-scrollable/duet-scrollable.js +218 -0
  53. package/lib/collection/components/duet-tab/duet-tab.js +63 -1
  54. package/lib/collection/components/duet-tab-group/duet-tab-group.css +2 -3
  55. package/lib/collection/components/duet-tab-group/duet-tab-group.js +79 -16
  56. package/lib/custom-elements-bundle/index.d.ts +6 -0
  57. package/lib/custom-elements-bundle/index.js +235 -26
  58. package/lib/duet/duet.esm.js +1 -1
  59. package/lib/duet/duet.js +1 -1
  60. package/lib/duet/{p-e96fca2b.system.entry.js → p-00d1f654.system.entry.js} +1 -1
  61. package/lib/duet/{p-8049159b.system.entry.js → p-04e69095.system.entry.js} +1 -1
  62. package/lib/duet/{p-9f6649ef.system.entry.js → p-085226d4.system.entry.js} +1 -1
  63. package/lib/duet/{p-07bec67d.system.entry.js → p-087794ce.system.entry.js} +1 -1
  64. package/lib/duet/{p-0a664450.system.entry.js → p-0af5a8c0.system.entry.js} +1 -1
  65. package/lib/duet/{p-236cb8b6.entry.js → p-0c2f5442.entry.js} +1 -1
  66. package/lib/duet/{p-927e83d1.entry.js → p-0e638e4d.entry.js} +1 -1
  67. package/lib/duet/{p-67798ed0.entry.js → p-0ed5a97c.entry.js} +1 -1
  68. package/lib/duet/{p-f16213de.entry.js → p-0fa24ad5.entry.js} +1 -1
  69. package/lib/duet/p-10632ef8.entry.js +4 -0
  70. package/lib/duet/{p-00b102b8.entry.js → p-14e42cd6.entry.js} +1 -1
  71. package/lib/duet/{p-db75f866.entry.js → p-17572919.entry.js} +1 -1
  72. package/lib/duet/{p-55ad1bfb.entry.js → p-1a30dc8e.entry.js} +1 -1
  73. package/lib/duet/{p-5818108d.system.entry.js → p-1bed3ddf.system.entry.js} +1 -1
  74. package/lib/duet/{p-db1a8956.system.entry.js → p-1f736745.system.entry.js} +1 -1
  75. package/lib/duet/{p-9c046b9a.entry.js → p-21faf286.entry.js} +1 -1
  76. package/lib/duet/{p-ded5548b.system.entry.js → p-24481f5b.system.entry.js} +1 -1
  77. package/lib/duet/{p-fe889838.system.js → p-29dc9ba4.system.js} +1 -1
  78. package/lib/duet/p-2a674d85.entry.js +4 -0
  79. package/lib/duet/p-2b3d4a87.entry.js +4 -0
  80. package/lib/duet/{p-ab6109d6.system.entry.js → p-3076d759.system.entry.js} +1 -1
  81. package/lib/duet/{p-cf886223.entry.js → p-36a2d533.entry.js} +1 -1
  82. package/lib/duet/{p-bb1271a8.system.entry.js → p-3b9a85ec.system.entry.js} +1 -1
  83. package/lib/duet/{p-a209e483.entry.js → p-3cb4e5c0.entry.js} +1 -1
  84. package/lib/duet/{p-a5b9f195.system.entry.js → p-3ccaf840.system.entry.js} +1 -1
  85. package/lib/duet/{p-ddf5ecf5.system.entry.js → p-407b0a9e.system.entry.js} +1 -1
  86. package/lib/duet/{p-36eae676.entry.js → p-48cc1039.entry.js} +1 -1
  87. package/lib/duet/{p-255bc205.system.entry.js → p-49f82fb6.system.entry.js} +1 -1
  88. package/lib/duet/{p-8ea50bd2.system.entry.js → p-50aa0600.system.entry.js} +1 -1
  89. package/lib/duet/{p-d701bd87.system.entry.js → p-59da6977.system.entry.js} +1 -1
  90. package/lib/duet/{p-f645b369.system.entry.js → p-5e1b47ae.system.entry.js} +1 -1
  91. package/lib/duet/{p-0cb07574.js → p-5fe48b92.js} +1 -1
  92. package/lib/duet/{p-a63537e8.entry.js → p-62ecba0c.entry.js} +1 -1
  93. package/lib/duet/{p-7c5b396c.system.entry.js → p-6450fb96.system.entry.js} +1 -1
  94. package/lib/duet/{p-4002454d.system.entry.js → p-674df722.system.entry.js} +1 -1
  95. package/lib/duet/{p-35133bc9.entry.js → p-684eca44.entry.js} +1 -1
  96. package/lib/duet/{p-b465ac62.entry.js → p-6c7d2e78.entry.js} +1 -1
  97. package/lib/duet/{p-5b409624.system.entry.js → p-73ee8a98.system.entry.js} +1 -1
  98. package/lib/duet/{p-ea232a29.entry.js → p-743a76fb.entry.js} +1 -1
  99. package/lib/duet/p-7471bf49.system.entry.js +4 -0
  100. package/lib/duet/{p-379e8ebb.system.entry.js → p-74f7726a.system.entry.js} +1 -1
  101. package/lib/duet/{p-3953b77a.system.entry.js → p-777ea91c.system.entry.js} +1 -1
  102. package/lib/duet/{p-9aa7cb17.entry.js → p-7983ec01.entry.js} +1 -1
  103. package/lib/duet/{p-4b7f998d.system.entry.js → p-7c42729a.system.entry.js} +1 -1
  104. package/lib/duet/p-7e87870b.js +4 -0
  105. package/lib/duet/{p-e90db543.system.entry.js → p-81d33c0d.system.entry.js} +1 -1
  106. package/lib/duet/{p-48ed41e6.system.entry.js → p-868cf1d0.system.entry.js} +1 -1
  107. package/lib/duet/{p-0945e0ac.entry.js → p-86cdd6ae.entry.js} +1 -1
  108. package/lib/duet/{p-1c38354b.system.entry.js → p-8825b949.system.entry.js} +1 -1
  109. package/lib/duet/{p-fab77260.system.entry.js → p-8b046f32.system.entry.js} +1 -1
  110. package/lib/duet/{p-e339cb4f.entry.js → p-8d49cfce.entry.js} +1 -1
  111. package/lib/duet/{p-5a9266c8.system.entry.js → p-8d4c1df6.system.entry.js} +1 -1
  112. package/lib/duet/{p-808101d8.entry.js → p-8dd65109.entry.js} +1 -1
  113. package/lib/duet/{p-1f08d290.system.entry.js → p-9628f617.system.entry.js} +1 -1
  114. package/lib/duet/p-98f7ed54.system.entry.js +4 -0
  115. package/lib/duet/{p-09845306.entry.js → p-99ab3ae7.entry.js} +1 -1
  116. package/lib/duet/{p-8bbdfac5.system.entry.js → p-99dd842a.system.entry.js} +1 -1
  117. package/lib/duet/{p-86013171.entry.js → p-9bdd6e13.entry.js} +1 -1
  118. package/lib/duet/{p-6d62cb90.entry.js → p-a69cec5c.entry.js} +1 -1
  119. package/lib/duet/{p-0d18269c.entry.js → p-ac3066a5.entry.js} +1 -1
  120. package/lib/duet/{p-c6c768b9.system.entry.js → p-b252dd83.system.entry.js} +1 -1
  121. package/lib/duet/{p-29000070.entry.js → p-b6914af6.entry.js} +1 -1
  122. package/lib/duet/{p-5ea30033.entry.js → p-b7e51d7d.entry.js} +1 -1
  123. package/lib/duet/{p-842a43e7.system.entry.js → p-bae4038e.system.entry.js} +1 -1
  124. package/lib/duet/{p-dc226f92.system.entry.js → p-c14a82ed.system.entry.js} +1 -1
  125. package/lib/duet/{p-ee58a262.entry.js → p-c16492e3.entry.js} +1 -1
  126. package/lib/duet/p-c4ccaaa2.system.js +4 -0
  127. package/lib/duet/{p-c6268af4.entry.js → p-cb35d64f.entry.js} +1 -1
  128. package/lib/duet/{p-d53bbad7.entry.js → p-cd2f9010.entry.js} +1 -1
  129. package/lib/duet/{p-6f7539a6.entry.js → p-d2d9c6ac.entry.js} +1 -1
  130. package/lib/duet/{p-719e38e3.system.entry.js → p-d8189d01.system.entry.js} +1 -1
  131. package/lib/duet/{p-ea934463.entry.js → p-dd26cd81.entry.js} +1 -1
  132. package/lib/duet/{p-aa379dec.system.entry.js → p-de7025f9.system.entry.js} +1 -1
  133. package/lib/duet/{p-98fabd8b.entry.js → p-e095b87c.entry.js} +1 -1
  134. package/lib/duet/{p-6d05eb8c.entry.js → p-e510911a.entry.js} +1 -1
  135. package/lib/duet/{p-3948a5c4.system.entry.js → p-e585efe8.system.entry.js} +1 -1
  136. package/lib/duet/{p-32488531.system.entry.js → p-e841a4f2.system.entry.js} +1 -1
  137. package/lib/duet/{p-addff36a.system.entry.js → p-ed346e6c.system.entry.js} +1 -1
  138. package/lib/duet/{p-1afec19f.entry.js → p-edcc923f.entry.js} +1 -1
  139. package/lib/duet/{p-fedad35b.system.entry.js → p-f485fdc9.system.entry.js} +1 -1
  140. package/lib/duet/{p-63ac5acd.entry.js → p-f4d70bbf.entry.js} +1 -1
  141. package/lib/duet/p-fa082925.entry.js +4 -0
  142. package/lib/duet/{p-51d5b428.system.js → p-fb116ef7.system.js} +1 -1
  143. package/lib/duet/{p-0aec7e4b.entry.js → p-fb142d09.entry.js} +1 -1
  144. package/lib/duet/{p-2f36de45.entry.js → p-fbef000c.entry.js} +1 -1
  145. package/lib/esm/duet-alert.entry.js +1 -1
  146. package/lib/esm/duet-badge.entry.js +1 -1
  147. package/lib/esm/duet-breadcrumb.entry.js +1 -1
  148. package/lib/esm/duet-breadcrumbs.entry.js +1 -1
  149. package/lib/esm/duet-button_2.entry.js +2 -2
  150. package/lib/esm/duet-caption_4.entry.js +2 -2
  151. package/lib/esm/duet-card.entry.js +1 -1
  152. package/lib/esm/duet-checkbox.entry.js +1 -1
  153. package/lib/esm/duet-choice_2.entry.js +2 -2
  154. package/lib/esm/duet-collapsible.entry.js +1 -1
  155. package/lib/esm/duet-cookie-consent.entry.js +1 -1
  156. package/lib/esm/duet-date-picker.entry.js +2 -2
  157. package/lib/esm/duet-divider_2.entry.js +1 -1
  158. package/lib/esm/duet-editable-table-button.entry.js +1 -1
  159. package/lib/esm/duet-editable-table_4.entry.js +1 -1
  160. package/lib/esm/duet-empty-state.entry.js +1 -1
  161. package/lib/esm/duet-fieldset.entry.js +1 -1
  162. package/lib/esm/duet-footer.entry.js +1 -1
  163. package/lib/esm/duet-grid_2.entry.js +1 -1
  164. package/lib/esm/duet-header_2.entry.js +2 -2
  165. package/lib/esm/duet-hero.entry.js +1 -1
  166. package/lib/esm/duet-icon.entry.js +1 -1
  167. package/lib/esm/duet-input_2.entry.js +1 -1
  168. package/lib/esm/duet-layout.entry.js +1 -1
  169. package/lib/esm/duet-list_2.entry.js +1 -1
  170. package/lib/esm/duet-modal.entry.js +15 -3
  171. package/lib/esm/duet-notification_2.entry.js +1 -1
  172. package/lib/esm/duet-number-input.entry.js +1 -1
  173. package/lib/esm/duet-progress.entry.js +1 -1
  174. package/lib/esm/duet-radio_2.entry.js +1 -1
  175. package/lib/esm/duet-range-slider.entry.js +1 -1
  176. package/lib/esm/duet-scrollable_3.entry.js +400 -0
  177. package/lib/esm/duet-select.entry.js +1 -1
  178. package/lib/esm/duet-step_2.entry.js +1 -1
  179. package/lib/esm/duet-textarea.entry.js +1 -1
  180. package/lib/esm/duet-toggle.entry.js +1 -1
  181. package/lib/esm/duet-tooltip.entry.js +1 -1
  182. package/lib/esm/duet-tray.entry.js +1 -1
  183. package/lib/esm/duet-upload-aria-status.entry.js +1 -1
  184. package/lib/esm/duet-visually-hidden.entry.js +1 -1
  185. package/lib/esm/duet.js +2 -2
  186. package/lib/esm/{focus-utils-8d0688ae.js → focus-utils-6ed104b0.js} +1 -1
  187. package/lib/esm/{index-ff4326da.js → index-b7694cc6.js} +1 -1
  188. package/lib/esm/loader.js +2 -2
  189. package/lib/esm-es5/duet-alert.entry.js +1 -1
  190. package/lib/esm-es5/duet-badge.entry.js +1 -1
  191. package/lib/esm-es5/duet-breadcrumb.entry.js +1 -1
  192. package/lib/esm-es5/duet-breadcrumbs.entry.js +1 -1
  193. package/lib/esm-es5/duet-button_2.entry.js +1 -1
  194. package/lib/esm-es5/duet-caption_4.entry.js +1 -1
  195. package/lib/esm-es5/duet-card.entry.js +1 -1
  196. package/lib/esm-es5/duet-checkbox.entry.js +1 -1
  197. package/lib/esm-es5/duet-choice_2.entry.js +2 -2
  198. package/lib/esm-es5/duet-collapsible.entry.js +1 -1
  199. package/lib/esm-es5/duet-cookie-consent.entry.js +1 -1
  200. package/lib/esm-es5/duet-date-picker.entry.js +1 -1
  201. package/lib/esm-es5/duet-divider_2.entry.js +1 -1
  202. package/lib/esm-es5/duet-editable-table-button.entry.js +1 -1
  203. package/lib/esm-es5/duet-editable-table_4.entry.js +1 -1
  204. package/lib/esm-es5/duet-empty-state.entry.js +1 -1
  205. package/lib/esm-es5/duet-fieldset.entry.js +1 -1
  206. package/lib/esm-es5/duet-footer.entry.js +1 -1
  207. package/lib/esm-es5/duet-grid_2.entry.js +1 -1
  208. package/lib/esm-es5/duet-header_2.entry.js +1 -1
  209. package/lib/esm-es5/duet-hero.entry.js +1 -1
  210. package/lib/esm-es5/duet-icon.entry.js +1 -1
  211. package/lib/esm-es5/duet-input_2.entry.js +1 -1
  212. package/lib/esm-es5/duet-layout.entry.js +1 -1
  213. package/lib/esm-es5/duet-list_2.entry.js +1 -1
  214. package/lib/esm-es5/duet-modal.entry.js +1 -1
  215. package/lib/esm-es5/duet-notification_2.entry.js +1 -1
  216. package/lib/esm-es5/duet-number-input.entry.js +1 -1
  217. package/lib/esm-es5/duet-progress.entry.js +1 -1
  218. package/lib/esm-es5/duet-radio_2.entry.js +1 -1
  219. package/lib/esm-es5/duet-range-slider.entry.js +1 -1
  220. package/lib/esm-es5/duet-scrollable_3.entry.js +4 -0
  221. package/lib/esm-es5/duet-select.entry.js +1 -1
  222. package/lib/esm-es5/duet-step_2.entry.js +1 -1
  223. package/lib/esm-es5/duet-textarea.entry.js +1 -1
  224. package/lib/esm-es5/duet-toggle.entry.js +1 -1
  225. package/lib/esm-es5/duet-tooltip.entry.js +1 -1
  226. package/lib/esm-es5/duet-tray.entry.js +1 -1
  227. package/lib/esm-es5/duet-upload-aria-status.entry.js +1 -1
  228. package/lib/esm-es5/duet-visually-hidden.entry.js +1 -1
  229. package/lib/esm-es5/duet.js +1 -1
  230. package/lib/esm-es5/{focus-utils-8d0688ae.js → focus-utils-6ed104b0.js} +1 -1
  231. package/lib/esm-es5/{index-ff4326da.js → index-b7694cc6.js} +1 -1
  232. package/lib/esm-es5/loader.js +1 -1
  233. package/lib/html.html-data.json +52 -1
  234. package/lib/types/components/duet-modal/duet-modal.d.ts +5 -1
  235. package/lib/types/components/duet-scrollable/duet-scrollable.d.ts +47 -0
  236. package/lib/types/components/duet-tab/duet-tab.d.ts +11 -0
  237. package/lib/types/components/duet-tab-group/duet-tab-group.d.ts +11 -0
  238. package/lib/types/components.d.ts +74 -1
  239. package/package.json +6 -5
  240. package/lib/cjs/duet-tab_2.cjs.entry.js +0 -213
  241. package/lib/duet/p-130476dc.entry.js +0 -4
  242. package/lib/duet/p-30410b67.system.js +0 -4
  243. package/lib/duet/p-4d30eee1.entry.js +0 -4
  244. package/lib/duet/p-56cda85e.system.entry.js +0 -4
  245. package/lib/duet/p-5e15d8f8.js +0 -4
  246. package/lib/duet/p-87804904.system.entry.js +0 -4
  247. package/lib/duet/p-b9fe29c7.entry.js +0 -4
  248. package/lib/duet/p-d9f076ed.entry.js +0 -4
  249. package/lib/esm/duet-tab_2.entry.js +0 -208
  250. package/lib/esm-es5/duet-tab_2.entry.js +0 -4
@@ -2,14 +2,29 @@
2
2
  * Built with Duet Design System
3
3
  */
4
4
  import { Build, Component, h, Prop } from "@stencil/core";
5
+ import { getLocaleString } from "../../utils/language-utils";
5
6
  export class DuetTab {
7
+ constructor() {
8
+ /**
9
+ * Defaults for AccessibleLabel
10
+ * @default null
11
+ */
12
+ this.accessibleDescriptionDefault = null;
13
+ /**
14
+ * String for AccessibleLabel
15
+ * @default null
16
+ */
17
+ this.accessibleDescription = this.accessibleDescriptionDefault
18
+ ? getLocaleString(this.accessibleDescriptionDefault)
19
+ : null;
20
+ }
6
21
  /**
7
22
  * render() function
8
23
  * Always the last one in the class.
9
24
  */
10
25
  render() {
11
26
  if (Build.isBrowser) {
12
- return (h("div", { role: "tabpanel", class: { "duet-tab": true, selected: this.selected } },
27
+ return (h("div", { role: "tabpanel", class: { "duet-tab": true, selected: this.selected }, "aria-description": this.accessibleDescription },
13
28
  h("slot", null)));
14
29
  }
15
30
  }
@@ -55,6 +70,53 @@ export class DuetTab {
55
70
  },
56
71
  "attribute": "selected",
57
72
  "reflect": true
73
+ },
74
+ "accessibleDescriptionDefault": {
75
+ "type": "string",
76
+ "mutable": false,
77
+ "complexType": {
78
+ "original": "DuetLangObject | string",
79
+ "resolved": "DuetLangObject | string",
80
+ "references": {
81
+ "DuetLangObject": {
82
+ "location": "import",
83
+ "path": "../../utils/language-utils"
84
+ }
85
+ }
86
+ },
87
+ "required": false,
88
+ "optional": false,
89
+ "docs": {
90
+ "tags": [{
91
+ "name": "default",
92
+ "text": "null"
93
+ }],
94
+ "text": "Defaults for AccessibleLabel"
95
+ },
96
+ "attribute": "accessible-description-defaults",
97
+ "reflect": false,
98
+ "defaultValue": "null"
99
+ },
100
+ "accessibleDescription": {
101
+ "type": "string",
102
+ "mutable": false,
103
+ "complexType": {
104
+ "original": "string",
105
+ "resolved": "string",
106
+ "references": {}
107
+ },
108
+ "required": false,
109
+ "optional": false,
110
+ "docs": {
111
+ "tags": [{
112
+ "name": "default",
113
+ "text": "null"
114
+ }],
115
+ "text": "String for AccessibleLabel"
116
+ },
117
+ "attribute": "accessible-description",
118
+ "reflect": false,
119
+ "defaultValue": "this.accessibleDescriptionDefault\n ? getLocaleString(this.accessibleDescriptionDefault)\n : null"
58
120
  }
59
121
  }; }
60
122
  }
@@ -36,11 +36,11 @@
36
36
  .duet-tab-group-tabs.duet-m-0 {
37
37
  margin: 0 !important;
38
38
  }
39
- .duet-tab-group-tabs.duet-tab-group-hidden {
39
+ .duet-tab-group-tabs.duet-tab-group-collapses.duet-tab-group-hidden {
40
40
  display: none;
41
41
  }
42
42
  @media (min-width: 36em) {
43
- .duet-tab-group-tabs.duet-tab-group-hidden {
43
+ .duet-tab-group-tabs.duet-tab-group-collapses.duet-tab-group-hidden {
44
44
  display: block;
45
45
  }
46
46
  }
@@ -76,7 +76,6 @@
76
76
  cursor: pointer;
77
77
  background: white;
78
78
  border: 2px solid #e1e3e6;
79
- border-style: solid;
80
79
  border-radius: 0;
81
80
  transition: 150ms ease;
82
81
  }
@@ -19,6 +19,15 @@ export class DuetTabGroup {
19
19
  * Theme of the component.
20
20
  */
21
21
  this.theme = "";
22
+ /**
23
+ * Controls whether the tab-group should scroll (by inflection this will disable collapsing to select box on small screens),
24
+ * if this is a number instead of true it will be used as "amount of items to scroll"
25
+ */
26
+ this.scrolls = false;
27
+ /**
28
+ * Whether the tab-group collapses to a select dropwdown in minor breakpoints
29
+ */
30
+ this.collapses = true;
22
31
  /**
23
32
  * Style variation of the tab group.
24
33
  */
@@ -73,12 +82,18 @@ export class DuetTabGroup {
73
82
  button.focus();
74
83
  }
75
84
  };
76
- this.renderTab = (tab, index) => {
77
- return (h("button", { role: "tab", id: this.getButtonId(index), "aria-controls": this.getTabId(index), "aria-selected": tab.selected ? "true" : "false", type: "button", class: {
78
- "duet-p-0": this.padding === "none",
79
- "duet-tab-button": true,
80
- selected: tab.selected,
81
- }, onClick: () => this.openTab(index), onKeyDown: ev => this.handleKeyDown(ev) }, tab.label));
85
+ this.renderTab = () => {
86
+ const renderedTabs = this.tabs.map((element, index) => {
87
+ return (h("button", { role: "tab", id: this.getButtonId(index), "aria-controls": this.getTabId(index), "aria-selected": element.selected ? "true" : "false", "aria-description": this.getAccessibleDescription(index), type: "button", class: {
88
+ "duet-p-0": this.padding === "none",
89
+ "duet-tab-button": true,
90
+ selected: element.selected,
91
+ }, onClick: () => this.openTab(index), onKeyDown: ev => this.handleKeyDown(ev) }, element.label));
92
+ });
93
+ if (this.scrolls) {
94
+ return h("duet-scrollable", { selected: this.selected }, renderedTabs);
95
+ }
96
+ return renderedTabs;
82
97
  };
83
98
  }
84
99
  /**
@@ -97,7 +112,7 @@ export class DuetTabGroup {
97
112
  subtree: true,
98
113
  });
99
114
  }
100
- this.updateTabs();
115
+ await this.updateTabs();
101
116
  }
102
117
  disconnectedCallback() {
103
118
  if (this.mutationO) {
@@ -138,19 +153,27 @@ export class DuetTabGroup {
138
153
  /**
139
154
  * Local methods.
140
155
  */
156
+ getTabs() {
157
+ const allTabs = Array.from(this.element.querySelectorAll("duet-tab"));
158
+ const localTabs = allTabs.filter(tab => tab.closest("duet-tab-group") === this.element);
159
+ if (localTabs.length === 0) {
160
+ throw new Error("[duet-tabs] Must have at least one tab");
161
+ }
162
+ // filter out any nested tabs
163
+ return localTabs;
164
+ }
141
165
  getButtonId(index) {
142
166
  return `${this.id}-button-${index}`;
143
167
  }
144
168
  getTabId(index) {
145
169
  return `${this.id}-tab-${index}`;
146
170
  }
171
+ getAccessibleDescription(index) {
172
+ const description = this.tabs[index].getAttribute("accessible-description") || null;
173
+ return description;
174
+ }
147
175
  async updateTabs() {
148
- const allTabs = Array.from(this.element.querySelectorAll("duet-tab"));
149
- // filter out any nested tabs
150
- this.tabs = allTabs.filter(tab => tab.closest("duet-tab-group") === this.element);
151
- if (this.tabs.length === 0) {
152
- throw new Error("[duet-tabs] Must have at least one tab");
153
- }
176
+ this.tabs = this.getTabs();
154
177
  this.tabs.forEach((tab, index) => {
155
178
  tab.id = this.getTabId(index);
156
179
  tab.setAttribute("aria-labelledby", this.getButtonId(index));
@@ -158,6 +181,7 @@ export class DuetTabGroup {
158
181
  this.selected = index;
159
182
  }
160
183
  });
184
+ return;
161
185
  }
162
186
  /**
163
187
  * render() function
@@ -168,20 +192,23 @@ export class DuetTabGroup {
168
192
  "duet-tab-group": true,
169
193
  "duet-theme-turva": this.theme === "turva",
170
194
  [`duet-tab-variation-${this.variation}`]: true,
195
+ "duet-tab-group-scrolls": this.scrolls,
196
+ "duet-tab-group-collapses": this.collapses,
171
197
  } },
172
- this.tabs.length > 3 && (h("duet-select", { value: this.selected.toString(), expand: true, label: this.label, labelHidden: this.labelHidden, theme: this.theme, onDuetChange: event => this.openTab(Number(event.detail.value)), items: this.tabs.map((tab, index) => {
198
+ this.tabs.length > 3 && this.collapses && (h("duet-select", { value: this.selected.toString(), expand: true, label: this.label, labelHidden: this.labelHidden, theme: this.theme, onDuetChange: event => this.openTab(Number(event.detail.value)), items: this.tabs.map((tab, index) => {
173
199
  return { label: tab.label, value: index.toString() };
174
200
  }) })),
175
201
  h("div", { role: "tablist", class: {
176
202
  "duet-m-0": this.margin === "none",
177
203
  "duet-tab-group-tabs": true,
178
204
  "duet-tab-group-hidden": this.tabs.length > 3,
179
- } }, this.tabs.map(this.renderTab)),
205
+ "duet-tab-group-collapses": this.collapses,
206
+ } }, this.renderTab()),
180
207
  h("div", { class: { "duet-tab-group-content": true, "duet-m-0": this.margin === "none" } },
181
208
  h("slot", null))));
182
209
  }
183
210
  static get is() { return "duet-tab-group"; }
184
- static get encapsulation() { return "scoped"; }
211
+ static get encapsulation() { return "shadow"; }
185
212
  static get originalStyleUrls() { return {
186
213
  "$": ["duet-tab-group.scss"]
187
214
  }; }
@@ -212,6 +239,42 @@ export class DuetTabGroup {
212
239
  "reflect": false,
213
240
  "defaultValue": "\"\""
214
241
  },
242
+ "scrolls": {
243
+ "type": "boolean",
244
+ "mutable": false,
245
+ "complexType": {
246
+ "original": "boolean",
247
+ "resolved": "boolean",
248
+ "references": {}
249
+ },
250
+ "required": false,
251
+ "optional": false,
252
+ "docs": {
253
+ "tags": [],
254
+ "text": "Controls whether the tab-group should scroll (by inflection this will disable collapsing to select box on small screens),\nif this is a number instead of true it will be used as \"amount of items to scroll\""
255
+ },
256
+ "attribute": "scrolls",
257
+ "reflect": false,
258
+ "defaultValue": "false"
259
+ },
260
+ "collapses": {
261
+ "type": "boolean",
262
+ "mutable": false,
263
+ "complexType": {
264
+ "original": "boolean",
265
+ "resolved": "boolean",
266
+ "references": {}
267
+ },
268
+ "required": false,
269
+ "optional": false,
270
+ "docs": {
271
+ "tags": [],
272
+ "text": "Whether the tab-group collapses to a select dropwdown in minor breakpoints"
273
+ },
274
+ "attribute": "collapses",
275
+ "reflect": false,
276
+ "defaultValue": "true"
277
+ },
215
278
  "variation": {
216
279
  "type": "string",
217
280
  "mutable": false,
@@ -254,6 +254,12 @@ export const DuetRangeSlider: {
254
254
  new (): DuetRangeSlider;
255
255
  };
256
256
 
257
+ interface DuetScrollable extends Components.DuetScrollable, HTMLElement {}
258
+ export const DuetScrollable: {
259
+ prototype: DuetScrollable;
260
+ new (): DuetScrollable;
261
+ };
262
+
257
263
  interface DuetSelect extends Components.DuetSelect, HTMLElement {}
258
264
  export const DuetSelect: {
259
265
  prototype: DuetSelect;