@duetds/components 4.34.4 → 4.35.2

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 (256) hide show
  1. package/hydrate/index.js +282 -33
  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 +2 -2
  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 +3 -3
  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 +20 -10
  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 +414 -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-15cc3af9.js} +1 -1
  44. package/lib/cjs/{index-0bcb9cea.js → index-a38f3df3.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-card/duet-card.js +3 -1
  49. package/lib/collection/components/duet-header/duet-header.css +61 -28
  50. package/lib/collection/components/duet-header/duet-header.js +18 -8
  51. package/lib/collection/components/duet-link/duet-link.js +1 -1
  52. package/lib/collection/components/duet-modal/duet-modal.js +33 -3
  53. package/lib/collection/components/duet-scrollable/duet-scrollable.css +83 -0
  54. package/lib/collection/components/duet-scrollable/duet-scrollable.js +240 -0
  55. package/lib/collection/components/duet-tab/duet-tab.js +63 -1
  56. package/lib/collection/components/duet-tab-group/duet-tab-group.css +12 -13
  57. package/lib/collection/components/duet-tab-group/duet-tab-group.js +101 -16
  58. package/lib/collection/components/duet-upload/duet-upload.js +7 -4
  59. package/lib/custom-elements-bundle/index.d.ts +6 -0
  60. package/lib/custom-elements-bundle/index.js +264 -37
  61. package/lib/duet/duet.esm.js +1 -1
  62. package/lib/duet/duet.js +1 -1
  63. package/lib/duet/{p-86013171.entry.js → p-04e3b06b.entry.js} +1 -1
  64. package/lib/duet/{p-808101d8.entry.js → p-0bc3239b.entry.js} +1 -1
  65. package/lib/duet/{p-6d62cb90.entry.js → p-0d15892b.entry.js} +1 -1
  66. package/lib/duet/{p-29000070.entry.js → p-0d6c3d07.entry.js} +1 -1
  67. package/lib/duet/{p-8ea50bd2.system.entry.js → p-0deee587.system.entry.js} +1 -1
  68. package/lib/duet/{p-d53bbad7.entry.js → p-0ea49de8.entry.js} +1 -1
  69. package/lib/duet/{p-379e8ebb.system.entry.js → p-114a20f1.system.entry.js} +1 -1
  70. package/lib/duet/p-13e81854.entry.js +4 -0
  71. package/lib/duet/p-15a42b87.entry.js +4 -0
  72. package/lib/duet/{p-48ed41e6.system.entry.js → p-18441899.system.entry.js} +1 -1
  73. package/lib/duet/{p-a63537e8.entry.js → p-1b98f91c.entry.js} +1 -1
  74. package/lib/duet/{p-1afec19f.entry.js → p-2056e3eb.entry.js} +1 -1
  75. package/lib/duet/{p-7c5b396c.system.entry.js → p-27b953e4.system.entry.js} +1 -1
  76. package/lib/duet/{p-5ea30033.entry.js → p-29e59e77.entry.js} +1 -1
  77. package/lib/duet/{p-4b7f998d.system.entry.js → p-2c8bd5a2.system.entry.js} +1 -1
  78. package/lib/duet/{p-36eae676.entry.js → p-30783ea4.entry.js} +1 -1
  79. package/lib/duet/{p-5b409624.system.entry.js → p-3081f8a5.system.entry.js} +1 -1
  80. package/lib/duet/p-35ff635e.system.js +4 -0
  81. package/lib/duet/{p-9aa7cb17.entry.js → p-38128fc3.entry.js} +1 -1
  82. package/lib/duet/{p-98fabd8b.entry.js → p-3b244de7.entry.js} +1 -1
  83. package/lib/duet/{p-3953b77a.system.entry.js → p-3baf5b41.system.entry.js} +1 -1
  84. package/lib/duet/{p-35133bc9.entry.js → p-3bd812df.entry.js} +1 -1
  85. package/lib/duet/{p-0aec7e4b.entry.js → p-3dbeddf5.entry.js} +1 -1
  86. package/lib/duet/{p-e90db543.system.entry.js → p-3e578cc5.system.entry.js} +1 -1
  87. package/lib/duet/p-41b4bad1.entry.js +4 -0
  88. package/lib/duet/{p-dc226f92.system.entry.js → p-49820427.system.entry.js} +1 -1
  89. package/lib/duet/{p-fe889838.system.js → p-4accc70c.system.js} +1 -1
  90. package/lib/duet/{p-ea934463.entry.js → p-4c3961a5.entry.js} +1 -1
  91. package/lib/duet/{p-e96fca2b.system.entry.js → p-4d7abe27.system.entry.js} +1 -1
  92. package/lib/duet/{p-aa379dec.system.entry.js → p-54d296d9.system.entry.js} +1 -1
  93. package/lib/duet/{p-0d18269c.entry.js → p-573921ca.entry.js} +1 -1
  94. package/lib/duet/{p-ddf5ecf5.system.entry.js → p-5af271ce.system.entry.js} +1 -1
  95. package/lib/duet/{p-bb1271a8.system.entry.js → p-5f24e161.system.entry.js} +1 -1
  96. package/lib/duet/{p-255bc205.system.entry.js → p-632186a9.system.entry.js} +1 -1
  97. package/lib/duet/{p-8bbdfac5.system.entry.js → p-67b22acc.system.entry.js} +1 -1
  98. package/lib/duet/{p-9c046b9a.entry.js → p-69c4ff6f.entry.js} +1 -1
  99. package/lib/duet/{p-f16213de.entry.js → p-6b3a14c2.entry.js} +1 -1
  100. package/lib/duet/{p-8049159b.system.entry.js → p-70cf255e.system.entry.js} +1 -1
  101. package/lib/duet/{p-ee58a262.entry.js → p-7142b886.entry.js} +1 -1
  102. package/lib/duet/{p-63ac5acd.entry.js → p-7641054f.entry.js} +1 -1
  103. package/lib/duet/{p-ea232a29.entry.js → p-7d019a4d.entry.js} +1 -1
  104. package/lib/duet/{p-f645b369.system.entry.js → p-7e2a2e30.system.entry.js} +1 -1
  105. package/lib/duet/{p-a209e483.entry.js → p-83261c61.entry.js} +1 -1
  106. package/lib/duet/{p-0cb07574.js → p-875bd99c.js} +1 -1
  107. package/lib/duet/{p-927e83d1.entry.js → p-889193e8.entry.js} +1 -1
  108. package/lib/duet/{p-4002454d.system.entry.js → p-8acdabb5.system.entry.js} +1 -1
  109. package/lib/duet/{p-3948a5c4.system.entry.js → p-8edd126b.system.entry.js} +1 -1
  110. package/lib/duet/{p-236cb8b6.entry.js → p-94b4ec76.entry.js} +1 -1
  111. package/lib/duet/{p-ded5548b.system.entry.js → p-97353a7f.system.entry.js} +1 -1
  112. package/lib/duet/{p-6d05eb8c.entry.js → p-9a47c28a.entry.js} +1 -1
  113. package/lib/duet/{p-2f36de45.entry.js → p-9b0c78de.entry.js} +1 -1
  114. package/lib/duet/{p-32488531.system.entry.js → p-9dd65758.system.entry.js} +1 -1
  115. package/lib/duet/{p-cf886223.entry.js → p-a53a8675.entry.js} +1 -1
  116. package/lib/duet/{p-ab6109d6.system.entry.js → p-a73609b4.system.entry.js} +1 -1
  117. package/lib/duet/{p-719e38e3.system.entry.js → p-ac01755b.system.entry.js} +1 -1
  118. package/lib/duet/{p-0a664450.system.entry.js → p-acf24fcd.system.entry.js} +1 -1
  119. package/lib/duet/{p-db1a8956.system.entry.js → p-aed2a35e.system.entry.js} +1 -1
  120. package/lib/duet/{p-fab77260.system.entry.js → p-b1ae4d5b.system.entry.js} +2 -2
  121. package/lib/duet/{p-c6c768b9.system.entry.js → p-b2985c8e.system.entry.js} +1 -1
  122. package/lib/duet/{p-842a43e7.system.entry.js → p-b692b4a4.system.entry.js} +1 -1
  123. package/lib/duet/{p-9f6649ef.system.entry.js → p-b80d80dc.system.entry.js} +1 -1
  124. package/lib/duet/{p-5e15d8f8.js → p-bcf94afd.js} +1 -1
  125. package/lib/duet/p-be872079.entry.js +4 -0
  126. package/lib/duet/{p-67798ed0.entry.js → p-bf859d7b.entry.js} +1 -1
  127. package/lib/duet/{p-09845306.entry.js → p-c0fa8865.entry.js} +1 -1
  128. package/lib/duet/{p-07bec67d.system.entry.js → p-c479f3be.system.entry.js} +1 -1
  129. package/lib/duet/{p-e339cb4f.entry.js → p-c9020872.entry.js} +1 -1
  130. package/lib/duet/{p-0945e0ac.entry.js → p-c99e23d2.entry.js} +1 -1
  131. package/lib/duet/p-ce40057c.entry.js +4 -0
  132. package/lib/duet/{p-51d5b428.system.js → p-d04561dc.system.js} +1 -1
  133. package/lib/duet/{p-addff36a.system.entry.js → p-d158b9ca.system.entry.js} +1 -1
  134. package/lib/duet/{p-a5b9f195.system.entry.js → p-d2edeb9a.system.entry.js} +1 -1
  135. package/lib/duet/{p-1c38354b.system.entry.js → p-d3432b68.system.entry.js} +1 -1
  136. package/lib/duet/{p-5818108d.system.entry.js → p-d6563133.system.entry.js} +1 -1
  137. package/lib/duet/{p-00b102b8.entry.js → p-d9da705b.entry.js} +1 -1
  138. package/lib/duet/p-e3c66ce5.system.entry.js +4 -0
  139. package/lib/duet/{p-c6268af4.entry.js → p-e701e364.entry.js} +1 -1
  140. package/lib/duet/{p-d701bd87.system.entry.js → p-e7056ea5.system.entry.js} +1 -1
  141. package/lib/duet/{p-55ad1bfb.entry.js → p-e9064858.entry.js} +1 -1
  142. package/lib/duet/{p-fedad35b.system.entry.js → p-e9ca4ae1.system.entry.js} +2 -2
  143. package/lib/duet/{p-5a9266c8.system.entry.js → p-ed981e8d.system.entry.js} +1 -1
  144. package/lib/duet/{p-db75f866.entry.js → p-ef7560b6.entry.js} +1 -1
  145. package/lib/duet/{p-1f08d290.system.entry.js → p-f1803ec3.system.entry.js} +1 -1
  146. package/lib/duet/p-f261a666.system.entry.js +4 -0
  147. package/lib/duet/{p-b465ac62.entry.js → p-fa5a028c.entry.js} +1 -1
  148. package/lib/esm/duet-alert.entry.js +1 -1
  149. package/lib/esm/duet-badge.entry.js +1 -1
  150. package/lib/esm/duet-breadcrumb.entry.js +1 -1
  151. package/lib/esm/duet-breadcrumbs.entry.js +1 -1
  152. package/lib/esm/duet-button_2.entry.js +2 -2
  153. package/lib/esm/duet-caption_4.entry.js +2 -2
  154. package/lib/esm/duet-card.entry.js +2 -2
  155. package/lib/esm/duet-checkbox.entry.js +1 -1
  156. package/lib/esm/duet-choice_2.entry.js +2 -2
  157. package/lib/esm/duet-collapsible.entry.js +1 -1
  158. package/lib/esm/duet-cookie-consent.entry.js +1 -1
  159. package/lib/esm/duet-date-picker.entry.js +2 -2
  160. package/lib/esm/duet-divider_2.entry.js +1 -1
  161. package/lib/esm/duet-editable-table-button.entry.js +1 -1
  162. package/lib/esm/duet-editable-table_4.entry.js +3 -3
  163. package/lib/esm/duet-empty-state.entry.js +1 -1
  164. package/lib/esm/duet-fieldset.entry.js +1 -1
  165. package/lib/esm/duet-footer.entry.js +1 -1
  166. package/lib/esm/duet-grid_2.entry.js +1 -1
  167. package/lib/esm/duet-header_2.entry.js +20 -10
  168. package/lib/esm/duet-hero.entry.js +1 -1
  169. package/lib/esm/duet-icon.entry.js +1 -1
  170. package/lib/esm/duet-input_2.entry.js +1 -1
  171. package/lib/esm/duet-layout.entry.js +1 -1
  172. package/lib/esm/duet-list_2.entry.js +1 -1
  173. package/lib/esm/duet-modal.entry.js +15 -3
  174. package/lib/esm/duet-notification_2.entry.js +1 -1
  175. package/lib/esm/duet-number-input.entry.js +1 -1
  176. package/lib/esm/duet-progress.entry.js +1 -1
  177. package/lib/esm/duet-radio_2.entry.js +1 -1
  178. package/lib/esm/duet-range-slider.entry.js +1 -1
  179. package/lib/esm/duet-scrollable_3.entry.js +408 -0
  180. package/lib/esm/duet-select.entry.js +1 -1
  181. package/lib/esm/duet-step_2.entry.js +1 -1
  182. package/lib/esm/duet-textarea.entry.js +1 -1
  183. package/lib/esm/duet-toggle.entry.js +1 -1
  184. package/lib/esm/duet-tooltip.entry.js +1 -1
  185. package/lib/esm/duet-tray.entry.js +1 -1
  186. package/lib/esm/duet-upload-aria-status.entry.js +1 -1
  187. package/lib/esm/duet-visually-hidden.entry.js +1 -1
  188. package/lib/esm/duet.js +2 -2
  189. package/lib/esm/{focus-utils-8d0688ae.js → focus-utils-d3cd655b.js} +1 -1
  190. package/lib/esm/{index-ff4326da.js → index-eb374972.js} +1 -1
  191. package/lib/esm/loader.js +2 -2
  192. package/lib/esm-es5/duet-alert.entry.js +1 -1
  193. package/lib/esm-es5/duet-badge.entry.js +1 -1
  194. package/lib/esm-es5/duet-breadcrumb.entry.js +1 -1
  195. package/lib/esm-es5/duet-breadcrumbs.entry.js +1 -1
  196. package/lib/esm-es5/duet-button_2.entry.js +1 -1
  197. package/lib/esm-es5/duet-caption_4.entry.js +1 -1
  198. package/lib/esm-es5/duet-card.entry.js +1 -1
  199. package/lib/esm-es5/duet-checkbox.entry.js +1 -1
  200. package/lib/esm-es5/duet-choice_2.entry.js +2 -2
  201. package/lib/esm-es5/duet-collapsible.entry.js +1 -1
  202. package/lib/esm-es5/duet-cookie-consent.entry.js +1 -1
  203. package/lib/esm-es5/duet-date-picker.entry.js +1 -1
  204. package/lib/esm-es5/duet-divider_2.entry.js +1 -1
  205. package/lib/esm-es5/duet-editable-table-button.entry.js +1 -1
  206. package/lib/esm-es5/duet-editable-table_4.entry.js +1 -1
  207. package/lib/esm-es5/duet-empty-state.entry.js +1 -1
  208. package/lib/esm-es5/duet-fieldset.entry.js +1 -1
  209. package/lib/esm-es5/duet-footer.entry.js +1 -1
  210. package/lib/esm-es5/duet-grid_2.entry.js +1 -1
  211. package/lib/esm-es5/duet-header_2.entry.js +2 -2
  212. package/lib/esm-es5/duet-hero.entry.js +1 -1
  213. package/lib/esm-es5/duet-icon.entry.js +1 -1
  214. package/lib/esm-es5/duet-input_2.entry.js +1 -1
  215. package/lib/esm-es5/duet-layout.entry.js +1 -1
  216. package/lib/esm-es5/duet-list_2.entry.js +1 -1
  217. package/lib/esm-es5/duet-modal.entry.js +1 -1
  218. package/lib/esm-es5/duet-notification_2.entry.js +1 -1
  219. package/lib/esm-es5/duet-number-input.entry.js +1 -1
  220. package/lib/esm-es5/duet-progress.entry.js +1 -1
  221. package/lib/esm-es5/duet-radio_2.entry.js +1 -1
  222. package/lib/esm-es5/duet-range-slider.entry.js +1 -1
  223. package/lib/esm-es5/duet-scrollable_3.entry.js +4 -0
  224. package/lib/esm-es5/duet-select.entry.js +1 -1
  225. package/lib/esm-es5/duet-step_2.entry.js +1 -1
  226. package/lib/esm-es5/duet-textarea.entry.js +1 -1
  227. package/lib/esm-es5/duet-toggle.entry.js +1 -1
  228. package/lib/esm-es5/duet-tooltip.entry.js +1 -1
  229. package/lib/esm-es5/duet-tray.entry.js +1 -1
  230. package/lib/esm-es5/duet-upload-aria-status.entry.js +1 -1
  231. package/lib/esm-es5/duet-visually-hidden.entry.js +1 -1
  232. package/lib/esm-es5/duet.js +1 -1
  233. package/lib/esm-es5/focus-utils-d3cd655b.js +4 -0
  234. package/lib/esm-es5/{index-ff4326da.js → index-eb374972.js} +1 -1
  235. package/lib/esm-es5/loader.js +1 -1
  236. package/lib/html.html-data.json +62 -3
  237. package/lib/types/components/duet-card/duet-card.d.ts +1 -0
  238. package/lib/types/components/duet-modal/duet-modal.d.ts +5 -1
  239. package/lib/types/components/duet-scrollable/duet-scrollable.d.ts +51 -0
  240. package/lib/types/components/duet-tab/duet-tab.d.ts +11 -0
  241. package/lib/types/components/duet-tab-group/duet-tab-group.d.ts +15 -0
  242. package/lib/types/components/duet-upload/duet-upload.d.ts +3 -0
  243. package/lib/types/components.d.ts +90 -1
  244. package/package.json +6 -5
  245. package/lib/cjs/duet-tab_2.cjs.entry.js +0 -213
  246. package/lib/duet/p-130476dc.entry.js +0 -4
  247. package/lib/duet/p-30410b67.system.js +0 -4
  248. package/lib/duet/p-4d30eee1.entry.js +0 -4
  249. package/lib/duet/p-56cda85e.system.entry.js +0 -4
  250. package/lib/duet/p-6f7539a6.entry.js +0 -4
  251. package/lib/duet/p-87804904.system.entry.js +0 -4
  252. package/lib/duet/p-b9fe29c7.entry.js +0 -4
  253. package/lib/duet/p-d9f076ed.entry.js +0 -4
  254. package/lib/esm/duet-tab_2.entry.js +0 -208
  255. package/lib/esm-es5/duet-tab_2.entry.js +0 -4
  256. package/lib/esm-es5/focus-utils-8d0688ae.js +0 -4
@@ -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
  */
@@ -48,6 +57,10 @@ export class DuetTabGroup {
48
57
  * Determines whether the label for the select element shown on mobile is visually hidden.
49
58
  */
50
59
  this.labelHidden = true;
60
+ /**
61
+ * Optional identifier to add to buttons in the tab group
62
+ */
63
+ this.identifier = this.id;
51
64
  /**
52
65
  * Controls the margin of the component.
53
66
  */
@@ -73,12 +86,18 @@ export class DuetTabGroup {
73
86
  button.focus();
74
87
  }
75
88
  };
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));
89
+ this.renderTab = () => {
90
+ const renderedTabs = this.tabs.map((element, index) => {
91
+ 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), part: `${this.identifier}-button`, type: "button", class: {
92
+ "duet-p-0": this.padding === "none",
93
+ "duet-tab-button": true,
94
+ selected: element.selected,
95
+ }, onClick: () => this.openTab(index), onKeyDown: ev => this.handleKeyDown(ev) }, element.label));
96
+ });
97
+ if (this.scrolls) {
98
+ return (h("duet-scrollable", { selected: this.selected, identifier: this.identifier }, renderedTabs));
99
+ }
100
+ return renderedTabs;
82
101
  };
83
102
  }
84
103
  /**
@@ -97,7 +116,7 @@ export class DuetTabGroup {
97
116
  subtree: true,
98
117
  });
99
118
  }
100
- this.updateTabs();
119
+ await this.updateTabs();
101
120
  }
102
121
  disconnectedCallback() {
103
122
  if (this.mutationO) {
@@ -138,19 +157,27 @@ export class DuetTabGroup {
138
157
  /**
139
158
  * Local methods.
140
159
  */
160
+ getTabs() {
161
+ const allTabs = Array.from(this.element.querySelectorAll("duet-tab"));
162
+ const localTabs = allTabs.filter(tab => tab.closest("duet-tab-group") === this.element);
163
+ if (localTabs.length === 0) {
164
+ throw new Error("[duet-tabs] Must have at least one tab");
165
+ }
166
+ // filter out any nested tabs
167
+ return localTabs;
168
+ }
141
169
  getButtonId(index) {
142
170
  return `${this.id}-button-${index}`;
143
171
  }
144
172
  getTabId(index) {
145
173
  return `${this.id}-tab-${index}`;
146
174
  }
175
+ getAccessibleDescription(index) {
176
+ const description = this.tabs[index].getAttribute("accessible-description") || null;
177
+ return description;
178
+ }
147
179
  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
- }
180
+ this.tabs = this.getTabs();
154
181
  this.tabs.forEach((tab, index) => {
155
182
  tab.id = this.getTabId(index);
156
183
  tab.setAttribute("aria-labelledby", this.getButtonId(index));
@@ -158,6 +185,7 @@ export class DuetTabGroup {
158
185
  this.selected = index;
159
186
  }
160
187
  });
188
+ return;
161
189
  }
162
190
  /**
163
191
  * render() function
@@ -168,20 +196,23 @@ export class DuetTabGroup {
168
196
  "duet-tab-group": true,
169
197
  "duet-theme-turva": this.theme === "turva",
170
198
  [`duet-tab-variation-${this.variation}`]: true,
199
+ "duet-tab-group-scrolls": this.scrolls,
200
+ "duet-tab-group-collapses": this.collapses,
171
201
  } },
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) => {
202
+ 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
203
  return { label: tab.label, value: index.toString() };
174
204
  }) })),
175
205
  h("div", { role: "tablist", class: {
176
206
  "duet-m-0": this.margin === "none",
177
207
  "duet-tab-group-tabs": true,
178
208
  "duet-tab-group-hidden": this.tabs.length > 3,
179
- } }, this.tabs.map(this.renderTab)),
209
+ "duet-tab-group-collapses": this.collapses,
210
+ } }, this.renderTab()),
180
211
  h("div", { class: { "duet-tab-group-content": true, "duet-m-0": this.margin === "none" } },
181
212
  h("slot", null))));
182
213
  }
183
214
  static get is() { return "duet-tab-group"; }
184
- static get encapsulation() { return "scoped"; }
215
+ static get encapsulation() { return "shadow"; }
185
216
  static get originalStyleUrls() { return {
186
217
  "$": ["duet-tab-group.scss"]
187
218
  }; }
@@ -212,6 +243,42 @@ export class DuetTabGroup {
212
243
  "reflect": false,
213
244
  "defaultValue": "\"\""
214
245
  },
246
+ "scrolls": {
247
+ "type": "boolean",
248
+ "mutable": false,
249
+ "complexType": {
250
+ "original": "boolean",
251
+ "resolved": "boolean",
252
+ "references": {}
253
+ },
254
+ "required": false,
255
+ "optional": false,
256
+ "docs": {
257
+ "tags": [],
258
+ "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\""
259
+ },
260
+ "attribute": "scrolls",
261
+ "reflect": false,
262
+ "defaultValue": "false"
263
+ },
264
+ "collapses": {
265
+ "type": "boolean",
266
+ "mutable": false,
267
+ "complexType": {
268
+ "original": "boolean",
269
+ "resolved": "boolean",
270
+ "references": {}
271
+ },
272
+ "required": false,
273
+ "optional": false,
274
+ "docs": {
275
+ "tags": [],
276
+ "text": "Whether the tab-group collapses to a select dropwdown in minor breakpoints"
277
+ },
278
+ "attribute": "collapses",
279
+ "reflect": false,
280
+ "defaultValue": "true"
281
+ },
215
282
  "variation": {
216
283
  "type": "string",
217
284
  "mutable": false,
@@ -328,6 +395,24 @@ export class DuetTabGroup {
328
395
  "reflect": false,
329
396
  "defaultValue": "true"
330
397
  },
398
+ "identifier": {
399
+ "type": "string",
400
+ "mutable": false,
401
+ "complexType": {
402
+ "original": "string",
403
+ "resolved": "string",
404
+ "references": {}
405
+ },
406
+ "required": false,
407
+ "optional": false,
408
+ "docs": {
409
+ "tags": [],
410
+ "text": "Optional identifier to add to buttons in the tab group"
411
+ },
412
+ "attribute": "identifier",
413
+ "reflect": false,
414
+ "defaultValue": "this.id"
415
+ },
331
416
  "margin": {
332
417
  "type": "string",
333
418
  "mutable": false,
@@ -16,6 +16,9 @@ import { makeXhrRequest } from "./xhr.helpers";
16
16
  * @slot header - named slot - to place content after description / caption
17
17
  * @slot fileheader - named slot - to place content above "filelist" (only displayed when "filelist" contains items)
18
18
  * @slot filefooter - named slot - to place content below "filelist" (only displayed when "filelist" contains items)
19
+ * @part ${this.identifier}-empty-state : duet-upload-empty-state - named part - can be used to style the empty notification area or hide it completely
20
+ * @part ${this.identifier}-editable-table : duet-upload-editable-table - named part - can be used to style the editable-table
21
+ * @part ${this.identifier}-error-notification : duet-upload-error-notification - named part - can be used to style any error notifications occurring internally
19
22
  */
20
23
  export class DuetUpload {
21
24
  constructor() {
@@ -775,19 +778,19 @@ export class DuetUpload {
775
778
  return (h(Host, { class: { "duet-m-0": this.margin === "none" } },
776
779
  h("duet-fieldset", { label: this.label, caption: caption },
777
780
  h("slot", { name: "header" }),
778
- !this.files.size && (h("duet-label", { theme: this.theme === "turva" ? "turva" : "default", size: "small", class: {
781
+ !this.files.size && (h("duet-label", { part: this.identifier ? `${this.identifier}-empty-state` : "duet-upload-empty-state", theme: this.theme === "turva" ? "turva" : "default", size: "small", class: {
779
782
  "duet-upload-filelist-empty": !this.files.size,
780
783
  "duet-upload-filelist": true,
781
784
  "duet-upload-filelist-filled": this.files.size,
782
785
  }, id: this.labelId, for: identifier }, this.fileListEmpty)),
783
786
  !!this.files.size && h("slot", { name: "fileheader" }),
784
787
  !!this.files.size && (h("duet-upload-aria-status", { invalid: this.getFilesAsArray().invalid.length, valid: this.getFilesAsArray().valid.length, inprogress: this.filesInProgress.size, total: this.files.size, statusMessageLabel: this.internalStatusMessageLabel })),
785
- !!this.files.size && (h("duet-editable-table", { "aria-live": "polite", "aria-relevant": "removals", accessibleRole: "log", id: this.editableTableId, groups: this.groups, actions: this.actions, hideGroups: this.hideGroups, alignment: this.alignment, items: this.convertToDuetEditableTableItems() })),
788
+ !!this.files.size && (h("duet-editable-table", { part: this.identifier ? `${this.identifier}-editable-table` : "duet-upload-editable-table", "aria-live": "polite", "aria-relevant": "removals", accessibleRole: "log", id: this.editableTableId, groups: this.groups, actions: this.actions, hideGroups: this.hideGroups, alignment: this.alignment, items: this.convertToDuetEditableTableItems() })),
786
789
  !!this.files.size && h("slot", { name: "filefooter" }),
787
790
  h("duet-spacer", { size: "large" }),
788
- !this.hideButton && (h("duet-button", { id: this.buttonId, onClick: this.startUpload, "accessible-controls": identifier, disabled: this.fileMaxReached, "accessible-label": this.accessibleButtonLabel, "accessible-owns": identifier, size: "small", variation: "secondary", fixed: true, icon: "action-add-circle" }, this.buttonLabel)),
791
+ !this.hideButton && (h("duet-button", { id: this.buttonId, onClick: this.startUpload, "accessible-controls": identifier, disabled: this.fileMaxReached, "accessible-label": this.accessibleButtonLabel, "accessible-owns": identifier, size: "small", variation: "secondary", fixed: true, icon: "action-add-circle", part: this.identifier ? `${this.identifier}-button-upload` : "duet-upload-button-upload" }, this.buttonLabel)),
789
792
  h("duet-spacer", { size: "medium" }),
790
- (this.fileMaxReached || this.bytesMaxReached) && (h("duet-alert", null,
793
+ (this.fileMaxReached || this.bytesMaxReached) && (h("duet-alert", { part: this.identifier ? `${this.identifier}-error-notification` : "duet-upload-error-notification" },
791
794
  this.fileMaxReached && getI18nError("duet-upload-301"),
792
795
  this.bytesMaxReached && getI18nError("duet-upload-202"))),
793
796
  h("duet-spacer", { size: "medium" }),
@@ -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;