@duetds/components 4.34.2 → 4.35.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 (264) hide show
  1. package/hydrate/index.js +386 -25
  2. package/lib/cjs/duet-alert.cjs.entry.js +1 -1
  3. package/lib/cjs/duet-badge.cjs.entry.js +2 -2
  4. package/lib/cjs/duet-breadcrumb.cjs.entry.js +48 -0
  5. package/lib/cjs/duet-breadcrumbs.cjs.entry.js +68 -0
  6. package/lib/cjs/duet-button_2.cjs.entry.js +4 -3
  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 +12 -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 +1 -1
  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-b57facfe.js → focus-utils-e1efc65c.js} +1 -1
  44. package/lib/cjs/{index-e2021bf7.js → index-6128deac.js} +1 -1
  45. package/lib/cjs/loader.cjs.js +2 -2
  46. package/lib/collection/collection-manifest.json +10 -6
  47. package/lib/collection/components/duet-badge/duet-badge.js +1 -1
  48. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumb.css +57 -0
  49. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumb.js +131 -0
  50. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumbs.css +63 -0
  51. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumbs.js +104 -0
  52. package/lib/collection/components/duet-button/duet-button.css +22 -4
  53. package/lib/collection/components/duet-button/duet-button.js +6 -2
  54. package/lib/collection/components/duet-link/duet-link.js +1 -1
  55. package/lib/collection/components/duet-modal/duet-modal.js +33 -3
  56. package/lib/collection/components/duet-scrollable/duet-scrollable.css +83 -0
  57. package/lib/collection/components/duet-scrollable/duet-scrollable.js +240 -0
  58. package/lib/collection/components/duet-tab/duet-tab.js +63 -1
  59. package/lib/collection/components/duet-tab-group/duet-tab-group.css +12 -13
  60. package/lib/collection/components/duet-tab-group/duet-tab-group.js +101 -16
  61. package/lib/collection/components/duet-upload/duet-upload.js +32 -4
  62. package/lib/custom-elements-bundle/index.d.ts +18 -0
  63. package/lib/custom-elements-bundle/index.js +356 -29
  64. package/lib/duet/duet.esm.js +1 -1
  65. package/lib/duet/duet.js +1 -1
  66. package/lib/duet/p-00b447fe.entry.js +4 -0
  67. package/lib/duet/{p-69133107.system.entry.js → p-02f369f0.system.entry.js} +1 -1
  68. package/lib/duet/{p-d3b5d2ef.system.entry.js → p-03bb1f47.system.entry.js} +1 -1
  69. package/lib/duet/{p-c67a63cc.system.entry.js → p-0569a7ac.system.entry.js} +1 -1
  70. package/lib/duet/{p-f7f4f98a.system.entry.js → p-08e5b6ec.system.entry.js} +1 -1
  71. package/lib/duet/{p-75261615.system.entry.js → p-096c0b9e.system.entry.js} +1 -1
  72. package/lib/duet/{p-7a0a375e.system.entry.js → p-09ba1ab9.system.entry.js} +2 -2
  73. package/lib/duet/{p-ddbdac54.entry.js → p-0d9989c5.entry.js} +1 -1
  74. package/lib/duet/{p-8b01f978.system.entry.js → p-0f20c5c4.system.entry.js} +1 -1
  75. package/lib/duet/{p-a900d55b.entry.js → p-1229b08d.entry.js} +1 -1
  76. package/lib/duet/{p-2524481a.system.entry.js → p-1b0b462f.system.entry.js} +1 -1
  77. package/lib/duet/{p-f01494f9.system.entry.js → p-1b134dc3.system.entry.js} +1 -1
  78. package/lib/duet/p-1fbcd741.entry.js +4 -0
  79. package/lib/duet/{p-8d42cb7c.entry.js → p-26ab4386.entry.js} +1 -1
  80. package/lib/duet/{p-08d1abc7.entry.js → p-29d1e8dc.entry.js} +1 -1
  81. package/lib/duet/{p-4a742d83.entry.js → p-2c8d7bbb.entry.js} +1 -1
  82. package/lib/duet/{p-5c67bb73.system.entry.js → p-2cc5934d.system.entry.js} +1 -1
  83. package/lib/duet/{p-8e16057d.system.entry.js → p-2dcc9779.system.entry.js} +1 -1
  84. package/lib/duet/{p-e1c6f74b.entry.js → p-30cde172.entry.js} +1 -1
  85. package/lib/duet/{p-e0038277.system.entry.js → p-34381bd0.system.entry.js} +1 -1
  86. package/lib/duet/{p-baef2241.entry.js → p-39d4e2d4.entry.js} +1 -1
  87. package/lib/duet/{p-488addbc.entry.js → p-3cc68d7d.entry.js} +1 -1
  88. package/lib/duet/{p-e242bf98.entry.js → p-3e67d7a2.entry.js} +1 -1
  89. package/lib/duet/{p-354bf924.entry.js → p-3ea21701.entry.js} +1 -1
  90. package/lib/duet/{p-c50bbff5.entry.js → p-3f2ac2e1.entry.js} +1 -1
  91. package/lib/duet/{p-5f2fb5db.entry.js → p-3f954a67.entry.js} +1 -1
  92. package/lib/duet/{p-a52d436c.entry.js → p-41019921.entry.js} +1 -1
  93. package/lib/duet/{p-c6ba80c6.entry.js → p-47986fa6.entry.js} +1 -1
  94. package/lib/duet/{p-ee74ff67.entry.js → p-482f91b0.entry.js} +1 -1
  95. package/lib/duet/p-4ac19266.entry.js +4 -0
  96. package/lib/duet/{p-ae8401c9.system.entry.js → p-4cdfa148.system.entry.js} +1 -1
  97. package/lib/duet/{p-939bf739.system.entry.js → p-4e0cca44.system.entry.js} +1 -1
  98. package/lib/duet/{p-f6e1fb0f.system.entry.js → p-4e588759.system.entry.js} +1 -1
  99. package/lib/duet/{p-5f866721.entry.js → p-4eda81b6.entry.js} +1 -1
  100. package/lib/duet/{p-ae46a7d2.system.entry.js → p-4f77c165.system.entry.js} +1 -1
  101. package/lib/duet/{p-4d5531be.entry.js → p-58832650.entry.js} +1 -1
  102. package/lib/duet/p-638ec570.system.entry.js +4 -0
  103. package/lib/duet/{p-f3c258d8.system.entry.js → p-65d61e92.system.entry.js} +1 -1
  104. package/lib/duet/p-66ada8c2.system.entry.js +4 -0
  105. package/lib/duet/{p-ec5d0cda.entry.js → p-6994cca1.entry.js} +1 -1
  106. package/lib/duet/p-6bbe6707.entry.js +4 -0
  107. package/lib/duet/{p-62de4645.system.entry.js → p-6bc17eac.system.entry.js} +1 -1
  108. package/lib/duet/{p-9849a4ab.system.entry.js → p-73cd52c3.system.entry.js} +1 -1
  109. package/lib/duet/{p-db87c4b1.system.entry.js → p-75d53642.system.entry.js} +1 -1
  110. package/lib/duet/{p-1fff32a9.system.entry.js → p-796becd9.system.entry.js} +1 -1
  111. package/lib/duet/{p-e3973f41.system.js → p-7d3a5621.system.js} +1 -1
  112. package/lib/duet/{p-3998eed6.entry.js → p-8040cc39.entry.js} +1 -1
  113. package/lib/duet/{p-45a6838d.system.entry.js → p-821da899.system.entry.js} +1 -1
  114. package/lib/duet/{p-b70f164d.entry.js → p-85170cb2.entry.js} +1 -1
  115. package/lib/duet/{p-90e7e876.entry.js → p-8a4a55a9.entry.js} +1 -1
  116. package/lib/duet/{p-3e0a774d.entry.js → p-905e62f0.entry.js} +1 -1
  117. package/lib/duet/{p-2862054c.entry.js → p-93bd2040.entry.js} +1 -1
  118. package/lib/duet/{p-13d5fe80.system.entry.js → p-9b56c174.system.entry.js} +1 -1
  119. package/lib/duet/{p-cdaa629d.system.entry.js → p-9b7a869e.system.entry.js} +1 -1
  120. package/lib/duet/{p-9793f3d8.entry.js → p-9d1ac81f.entry.js} +1 -1
  121. package/lib/duet/p-9ee29b96.js +4 -0
  122. package/lib/duet/{p-a58f0665.system.entry.js → p-9f53bfcc.system.entry.js} +1 -1
  123. package/lib/duet/{p-0dc01111.system.entry.js → p-a13cceae.system.entry.js} +1 -1
  124. package/lib/duet/p-a28308b5.entry.js +4 -0
  125. package/lib/duet/{p-de23ae41.entry.js → p-a5082840.entry.js} +1 -1
  126. package/lib/duet/{p-5f813e15.entry.js → p-a5d1c883.entry.js} +1 -1
  127. package/lib/duet/{p-58d7f2d1.entry.js → p-a5f67f2f.entry.js} +1 -1
  128. package/lib/duet/{p-5e03b63f.system.entry.js → p-ac525a17.system.entry.js} +1 -1
  129. package/lib/duet/p-ae5596da.js +4 -0
  130. package/lib/duet/{p-b8dde0c8.system.entry.js → p-af38d5b2.system.entry.js} +1 -1
  131. package/lib/duet/{p-0e742087.system.entry.js → p-b4fd3539.system.entry.js} +1 -1
  132. package/lib/duet/{p-f9a096a9.system.entry.js → p-b63dad81.system.entry.js} +1 -1
  133. package/lib/duet/p-b9bb03cb.system.js +4 -0
  134. package/lib/duet/{p-eed6f9cc.system.entry.js → p-bae3ae1d.system.entry.js} +1 -1
  135. package/lib/duet/{p-6a8b3cf0.system.entry.js → p-bf35379f.system.entry.js} +1 -1
  136. package/lib/duet/{p-72ad7798.entry.js → p-cc916a11.entry.js} +1 -1
  137. package/lib/duet/{p-4db07868.entry.js → p-d09f2dd8.entry.js} +1 -1
  138. package/lib/duet/{p-00bf3bbb.system.entry.js → p-d87aa545.system.entry.js} +1 -1
  139. package/lib/duet/{p-3e47c910.entry.js → p-da6aa538.entry.js} +1 -1
  140. package/lib/duet/p-ddda5f80.system.js +4 -0
  141. package/lib/duet/{p-760d2226.entry.js → p-e14ab836.entry.js} +1 -1
  142. package/lib/duet/{p-582f9135.system.entry.js → p-e193d6f7.system.entry.js} +1 -1
  143. package/lib/duet/{p-3e273d8d.entry.js → p-e4ebd229.entry.js} +1 -1
  144. package/lib/duet/{p-ffd449ef.system.entry.js → p-e5224000.system.entry.js} +1 -1
  145. package/lib/duet/{p-66c35cd2.entry.js → p-ec3cf4d1.entry.js} +1 -1
  146. package/lib/duet/{p-12941c46.system.entry.js → p-edcd137c.system.entry.js} +1 -1
  147. package/lib/duet/p-ee13c2e9.system.entry.js +4 -0
  148. package/lib/duet/{p-4836f66d.entry.js → p-f1013864.entry.js} +1 -1
  149. package/lib/duet/{p-5a5e7977.entry.js → p-f10d3f3d.entry.js} +1 -1
  150. package/lib/duet/p-f863e4f8.system.entry.js +4 -0
  151. package/lib/esm/duet-alert.entry.js +1 -1
  152. package/lib/esm/duet-badge.entry.js +2 -2
  153. package/lib/esm/duet-breadcrumb.entry.js +44 -0
  154. package/lib/esm/duet-breadcrumbs.entry.js +64 -0
  155. package/lib/esm/duet-button_2.entry.js +4 -3
  156. package/lib/esm/duet-caption_4.entry.js +2 -2
  157. package/lib/esm/duet-card.entry.js +1 -1
  158. package/lib/esm/duet-checkbox.entry.js +1 -1
  159. package/lib/esm/duet-choice_2.entry.js +2 -2
  160. package/lib/esm/duet-collapsible.entry.js +1 -1
  161. package/lib/esm/duet-cookie-consent.entry.js +1 -1
  162. package/lib/esm/duet-date-picker.entry.js +2 -2
  163. package/lib/esm/duet-divider_2.entry.js +1 -1
  164. package/lib/esm/duet-editable-table-button.entry.js +1 -1
  165. package/lib/esm/duet-editable-table_4.entry.js +12 -3
  166. package/lib/esm/duet-empty-state.entry.js +1 -1
  167. package/lib/esm/duet-fieldset.entry.js +1 -1
  168. package/lib/esm/duet-footer.entry.js +1 -1
  169. package/lib/esm/duet-grid_2.entry.js +1 -1
  170. package/lib/esm/duet-header_2.entry.js +1 -1
  171. package/lib/esm/duet-hero.entry.js +1 -1
  172. package/lib/esm/duet-icon.entry.js +1 -1
  173. package/lib/esm/duet-input_2.entry.js +1 -1
  174. package/lib/esm/duet-layout.entry.js +1 -1
  175. package/lib/esm/duet-list_2.entry.js +1 -1
  176. package/lib/esm/duet-modal.entry.js +15 -3
  177. package/lib/esm/duet-notification_2.entry.js +1 -1
  178. package/lib/esm/duet-number-input.entry.js +1 -1
  179. package/lib/esm/duet-progress.entry.js +1 -1
  180. package/lib/esm/duet-radio_2.entry.js +1 -1
  181. package/lib/esm/duet-range-slider.entry.js +1 -1
  182. package/lib/esm/duet-scrollable_3.entry.js +408 -0
  183. package/lib/esm/duet-select.entry.js +1 -1
  184. package/lib/esm/duet-step_2.entry.js +1 -1
  185. package/lib/esm/duet-textarea.entry.js +1 -1
  186. package/lib/esm/duet-toggle.entry.js +1 -1
  187. package/lib/esm/duet-tooltip.entry.js +1 -1
  188. package/lib/esm/duet-tray.entry.js +1 -1
  189. package/lib/esm/duet-upload-aria-status.entry.js +1 -1
  190. package/lib/esm/duet-visually-hidden.entry.js +1 -1
  191. package/lib/esm/duet.js +2 -2
  192. package/lib/esm/{focus-utils-fc14cf36.js → focus-utils-5b40a8be.js} +1 -1
  193. package/lib/esm/{index-9ef5d3bc.js → index-795979f3.js} +1 -1
  194. package/lib/esm/loader.js +2 -2
  195. package/lib/esm-es5/duet-alert.entry.js +1 -1
  196. package/lib/esm-es5/duet-badge.entry.js +1 -1
  197. package/lib/esm-es5/duet-breadcrumb.entry.js +4 -0
  198. package/lib/esm-es5/duet-breadcrumbs.entry.js +4 -0
  199. package/lib/esm-es5/duet-button_2.entry.js +1 -1
  200. package/lib/esm-es5/duet-caption_4.entry.js +1 -1
  201. package/lib/esm-es5/duet-card.entry.js +1 -1
  202. package/lib/esm-es5/duet-checkbox.entry.js +1 -1
  203. package/lib/esm-es5/duet-choice_2.entry.js +1 -1
  204. package/lib/esm-es5/duet-collapsible.entry.js +1 -1
  205. package/lib/esm-es5/duet-cookie-consent.entry.js +1 -1
  206. package/lib/esm-es5/duet-date-picker.entry.js +1 -1
  207. package/lib/esm-es5/duet-divider_2.entry.js +1 -1
  208. package/lib/esm-es5/duet-editable-table-button.entry.js +1 -1
  209. package/lib/esm-es5/duet-editable-table_4.entry.js +1 -1
  210. package/lib/esm-es5/duet-empty-state.entry.js +1 -1
  211. package/lib/esm-es5/duet-fieldset.entry.js +1 -1
  212. package/lib/esm-es5/duet-footer.entry.js +1 -1
  213. package/lib/esm-es5/duet-grid_2.entry.js +1 -1
  214. package/lib/esm-es5/duet-header_2.entry.js +1 -1
  215. package/lib/esm-es5/duet-hero.entry.js +1 -1
  216. package/lib/esm-es5/duet-icon.entry.js +1 -1
  217. package/lib/esm-es5/duet-input_2.entry.js +1 -1
  218. package/lib/esm-es5/duet-layout.entry.js +1 -1
  219. package/lib/esm-es5/duet-list_2.entry.js +1 -1
  220. package/lib/esm-es5/duet-modal.entry.js +1 -1
  221. package/lib/esm-es5/duet-notification_2.entry.js +1 -1
  222. package/lib/esm-es5/duet-number-input.entry.js +1 -1
  223. package/lib/esm-es5/duet-progress.entry.js +1 -1
  224. package/lib/esm-es5/duet-radio_2.entry.js +1 -1
  225. package/lib/esm-es5/duet-range-slider.entry.js +1 -1
  226. package/lib/esm-es5/duet-scrollable_3.entry.js +4 -0
  227. package/lib/esm-es5/duet-select.entry.js +1 -1
  228. package/lib/esm-es5/duet-step_2.entry.js +1 -1
  229. package/lib/esm-es5/duet-textarea.entry.js +1 -1
  230. package/lib/esm-es5/duet-toggle.entry.js +1 -1
  231. package/lib/esm-es5/duet-tooltip.entry.js +1 -1
  232. package/lib/esm-es5/duet-tray.entry.js +1 -1
  233. package/lib/esm-es5/duet-upload-aria-status.entry.js +1 -1
  234. package/lib/esm-es5/duet-visually-hidden.entry.js +1 -1
  235. package/lib/esm-es5/duet.js +1 -1
  236. package/lib/esm-es5/focus-utils-5b40a8be.js +4 -0
  237. package/lib/esm-es5/index-795979f3.js +4 -0
  238. package/lib/esm-es5/loader.js +1 -1
  239. package/lib/types/components/duet-badge/duet-badge.d.ts +1 -1
  240. package/lib/types/components/duet-breadcrumbs/duet-breadcrumb.d.ts +31 -0
  241. package/lib/types/components/duet-breadcrumbs/duet-breadcrumbs.d.ts +23 -0
  242. package/lib/types/components/duet-button/duet-button.d.ts +2 -1
  243. package/lib/types/components/duet-modal/duet-modal.d.ts +5 -1
  244. package/lib/types/components/duet-scrollable/duet-scrollable.d.ts +51 -0
  245. package/lib/types/components/duet-tab/duet-tab.d.ts +11 -0
  246. package/lib/types/components/duet-tab-group/duet-tab-group.d.ts +15 -0
  247. package/lib/types/components/duet-upload/duet-upload.d.ts +9 -0
  248. package/lib/types/components.d.ts +162 -1
  249. package/package.json +6 -5
  250. package/lib/cjs/duet-tab_2.cjs.entry.js +0 -213
  251. package/lib/duet/p-13bc14a6.system.js +0 -4
  252. package/lib/duet/p-30d13a27.system.js +0 -4
  253. package/lib/duet/p-60aa83c0.js +0 -4
  254. package/lib/duet/p-746b3bee.entry.js +0 -4
  255. package/lib/duet/p-9d487a0d.entry.js +0 -4
  256. package/lib/duet/p-c92b1af1.system.entry.js +0 -4
  257. package/lib/duet/p-ce566b2b.js +0 -4
  258. package/lib/duet/p-d1adeb76.entry.js +0 -4
  259. package/lib/duet/p-f2c402a9.system.entry.js +0 -4
  260. package/lib/esm/duet-tab_2.entry.js +0 -208
  261. package/lib/esm-es5/duet-tab_2.entry.js +0 -4
  262. package/lib/esm-es5/focus-utils-fc14cf36.js +0 -4
  263. package/lib/esm-es5/index-9ef5d3bc.js +0 -4
  264. package/lib/html.html-data.json +0 -4925
@@ -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
  }
@@ -48,7 +48,7 @@
48
48
  border-bottom: 1px solid #e1e3e6;
49
49
  }
50
50
  .duet-theme-turva.duet-tab-variation-plain .duet-tab-group-tabs {
51
- border-bottom-color: #e4e4e6 !important;
51
+ border-bottom-color: #e4e4e6;
52
52
  }
53
53
 
54
54
  @media (min-width: 36em) {
@@ -70,13 +70,12 @@
70
70
  font-size: 1rem;
71
71
  font-weight: 600;
72
72
  line-height: 1.1;
73
- color: #00294d !important;
73
+ color: #00294d;
74
74
  text-align: left;
75
75
  text-decoration: none;
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
  }
@@ -88,7 +87,7 @@
88
87
  }
89
88
  .duet-theme-turva .duet-tab-button {
90
89
  font-family: "turva-sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
91
- color: #171c3a !important;
90
+ color: #171c3a;
92
91
  border-color: #e4e4e6;
93
92
  }
94
93
  .duet-tab-button.duet-p-0 {
@@ -108,7 +107,7 @@
108
107
  border-color: #909599;
109
108
  }
110
109
  .duet-theme-turva .duet-tab-button:hover {
111
- border-color: #747475 !important;
110
+ border-color: #747475;
112
111
  }
113
112
  .duet-tab-button:active {
114
113
  opacity: 0.75;
@@ -116,16 +115,16 @@
116
115
  }
117
116
  .duet-tab-button.selected {
118
117
  z-index: 201;
119
- color: white !important;
118
+ color: white;
120
119
  background: #00294d;
121
120
  border-color: #00294d;
122
121
  outline: 0;
123
122
  box-shadow: none !important;
124
123
  }
125
124
  .duet-theme-turva .duet-tab-button.selected {
126
- color: white !important;
125
+ color: white;
127
126
  background-color: #171c3a;
128
- border-color: #171c3a !important;
127
+ border-color: #171c3a;
129
128
  }
130
129
  .duet-tab-button:focus {
131
130
  z-index: 200;
@@ -171,13 +170,13 @@
171
170
  margin-left: 36px;
172
171
  }
173
172
  .duet-tab-variation-plain .duet-tab-button.selected {
174
- color: #0077b3 !important;
173
+ color: #0077b3;
175
174
  background: white;
176
175
  border-bottom: 3px solid #0077b3;
177
176
  }
178
177
  .duet-theme-turva.duet-tab-variation-plain .duet-tab-button.selected {
179
- color: #c60c30 !important;
180
- border-bottom-color: #c60c30 !important;
178
+ color: #c60c30;
179
+ border-bottom-color: #c60c30;
181
180
  }
182
181
 
183
182
  .duet-tab-group-content {
@@ -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() {
@@ -739,6 +742,15 @@ export class DuetUpload {
739
742
  this.nativeInput.click();
740
743
  return;
741
744
  }
745
+ /**
746
+ * Method for forcing a render of the upload list, element.files can be changed externally
747
+ * But it will only rerender on a new Map or a top Level change - this can be used to update
748
+ * the tabular data if the automatic re-render is no sufficient
749
+ */
750
+ async refresh() {
751
+ this.kick();
752
+ await this.setFocus();
753
+ }
742
754
  /**
743
755
  * Get list of files, divided in errors and valid sections
744
756
  */
@@ -766,19 +778,19 @@ export class DuetUpload {
766
778
  return (h(Host, { class: { "duet-m-0": this.margin === "none" } },
767
779
  h("duet-fieldset", { label: this.label, caption: caption },
768
780
  h("slot", { name: "header" }),
769
- !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: {
770
782
  "duet-upload-filelist-empty": !this.files.size,
771
783
  "duet-upload-filelist": true,
772
784
  "duet-upload-filelist-filled": this.files.size,
773
785
  }, id: this.labelId, for: identifier }, this.fileListEmpty)),
774
786
  !!this.files.size && h("slot", { name: "fileheader" }),
775
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 })),
776
- !!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() })),
777
789
  !!this.files.size && h("slot", { name: "filefooter" }),
778
790
  h("duet-spacer", { size: "large" }),
779
- !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)),
780
792
  h("duet-spacer", { size: "medium" }),
781
- (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" },
782
794
  this.fileMaxReached && getI18nError("duet-upload-301"),
783
795
  this.bytesMaxReached && getI18nError("duet-upload-202"))),
784
796
  h("duet-spacer", { size: "medium" }),
@@ -1835,6 +1847,22 @@ export class DuetUpload {
1835
1847
  "tags": []
1836
1848
  }
1837
1849
  },
1850
+ "refresh": {
1851
+ "complexType": {
1852
+ "signature": "() => Promise<void>",
1853
+ "parameters": [],
1854
+ "references": {
1855
+ "Promise": {
1856
+ "location": "global"
1857
+ }
1858
+ },
1859
+ "return": "Promise<void>"
1860
+ },
1861
+ "docs": {
1862
+ "text": "Method for forcing a render of the upload list, element.files can be changed externally\nBut it will only rerender on a new Map or a top Level change - this can be used to update\nthe tabular data if the automatic re-render is no sufficient",
1863
+ "tags": []
1864
+ }
1865
+ },
1838
1866
  "getFiles": {
1839
1867
  "complexType": {
1840
1868
  "signature": "() => Promise<false | { valid: any[]; invalid: any[]; }>",
@@ -14,6 +14,18 @@ export const DuetBadge: {
14
14
  new (): DuetBadge;
15
15
  };
16
16
 
17
+ interface DuetBreadcrumb extends Components.DuetBreadcrumb, HTMLElement {}
18
+ export const DuetBreadcrumb: {
19
+ prototype: DuetBreadcrumb;
20
+ new (): DuetBreadcrumb;
21
+ };
22
+
23
+ interface DuetBreadcrumbs extends Components.DuetBreadcrumbs, HTMLElement {}
24
+ export const DuetBreadcrumbs: {
25
+ prototype: DuetBreadcrumbs;
26
+ new (): DuetBreadcrumbs;
27
+ };
28
+
17
29
  interface DuetButton extends Components.DuetButton, HTMLElement {}
18
30
  export const DuetButton: {
19
31
  prototype: DuetButton;
@@ -242,6 +254,12 @@ export const DuetRangeSlider: {
242
254
  new (): DuetRangeSlider;
243
255
  };
244
256
 
257
+ interface DuetScrollable extends Components.DuetScrollable, HTMLElement {}
258
+ export const DuetScrollable: {
259
+ prototype: DuetScrollable;
260
+ new (): DuetScrollable;
261
+ };
262
+
245
263
  interface DuetSelect extends Components.DuetSelect, HTMLElement {}
246
264
  export const DuetSelect: {
247
265
  prototype: DuetSelect;