@duetds/components 4.34.1 → 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 (267) hide show
  1. package/hydrate/index.js +373 -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 +10 -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 +2 -2
  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-30f5dc06.js → focus-utils-adf0830f.js} +1 -1
  44. package/lib/cjs/{index-1c10bbfb.js → index-ebc216a6.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-footer/duet-footer.css +2 -1
  55. package/lib/collection/components/duet-header/duet-header.css +3 -9
  56. package/lib/collection/components/duet-link/duet-link.js +1 -1
  57. package/lib/collection/components/duet-modal/duet-modal.js +33 -3
  58. package/lib/collection/components/duet-scrollable/duet-scrollable.css +83 -0
  59. package/lib/collection/components/duet-scrollable/duet-scrollable.js +218 -0
  60. package/lib/collection/components/duet-tab/duet-tab.js +63 -1
  61. package/lib/collection/components/duet-tab-group/duet-tab-group.css +2 -3
  62. package/lib/collection/components/duet-tab-group/duet-tab-group.js +79 -16
  63. package/lib/collection/components/duet-upload/duet-upload.js +25 -0
  64. package/lib/custom-elements-bundle/index.d.ts +18 -0
  65. package/lib/custom-elements-bundle/index.js +348 -29
  66. package/lib/duet/duet.esm.js +1 -1
  67. package/lib/duet/duet.js +1 -1
  68. package/lib/duet/{p-571015b8.system.entry.js → p-00d1f654.system.entry.js} +1 -1
  69. package/lib/duet/{p-6dc026cf.system.entry.js → p-04e69095.system.entry.js} +1 -1
  70. package/lib/duet/{p-3e9fe1c7.system.entry.js → p-085226d4.system.entry.js} +1 -1
  71. package/lib/duet/{p-fe3806e2.system.entry.js → p-087794ce.system.entry.js} +1 -1
  72. package/lib/duet/{p-c85583d4.system.entry.js → p-0af5a8c0.system.entry.js} +1 -1
  73. package/lib/duet/{p-8fcaeb1b.entry.js → p-0c2f5442.entry.js} +1 -1
  74. package/lib/duet/{p-1a4204b7.entry.js → p-0e638e4d.entry.js} +1 -1
  75. package/lib/duet/{p-fd009368.entry.js → p-0ed5a97c.entry.js} +1 -1
  76. package/lib/duet/{p-9dad09a8.entry.js → p-0fa24ad5.entry.js} +1 -1
  77. package/lib/duet/p-10632ef8.entry.js +4 -0
  78. package/lib/duet/{p-6b1b2655.entry.js → p-14e42cd6.entry.js} +1 -1
  79. package/lib/duet/{p-f1dbb4ec.entry.js → p-17572919.entry.js} +1 -1
  80. package/lib/duet/{p-5d2ddf99.entry.js → p-1a30dc8e.entry.js} +1 -1
  81. package/lib/duet/{p-b1401fd8.system.entry.js → p-1bed3ddf.system.entry.js} +1 -1
  82. package/lib/duet/{p-8e478364.system.entry.js → p-1f736745.system.entry.js} +1 -1
  83. package/lib/duet/{p-39cd816e.entry.js → p-21faf286.entry.js} +1 -1
  84. package/lib/duet/{p-99cd16d8.system.entry.js → p-24481f5b.system.entry.js} +1 -1
  85. package/lib/duet/p-29dc9ba4.system.js +4 -0
  86. package/lib/duet/p-2a674d85.entry.js +4 -0
  87. package/lib/duet/p-2b3d4a87.entry.js +4 -0
  88. package/lib/duet/{p-ffcfbd7a.system.entry.js → p-3076d759.system.entry.js} +1 -1
  89. package/lib/duet/{p-e10f1828.entry.js → p-36a2d533.entry.js} +1 -1
  90. package/lib/duet/{p-8adcc2f9.system.entry.js → p-3b9a85ec.system.entry.js} +1 -1
  91. package/lib/duet/{p-ca68c8f0.entry.js → p-3cb4e5c0.entry.js} +1 -1
  92. package/lib/duet/p-3ccaf840.system.entry.js +4 -0
  93. package/lib/duet/{p-a4c0ce83.system.entry.js → p-407b0a9e.system.entry.js} +1 -1
  94. package/lib/duet/{p-580c57ea.entry.js → p-48cc1039.entry.js} +1 -1
  95. package/lib/duet/{p-af7685aa.system.entry.js → p-49f82fb6.system.entry.js} +1 -1
  96. package/lib/duet/{p-f55ea1cc.system.entry.js → p-50aa0600.system.entry.js} +1 -1
  97. package/lib/duet/{p-c04ca724.system.entry.js → p-59da6977.system.entry.js} +1 -1
  98. package/lib/duet/{p-fe1a2f0d.system.entry.js → p-5e1b47ae.system.entry.js} +1 -1
  99. package/lib/duet/p-5fe48b92.js +4 -0
  100. package/lib/duet/p-62ecba0c.entry.js +4 -0
  101. package/lib/duet/{p-97dc72c2.system.entry.js → p-6450fb96.system.entry.js} +1 -1
  102. package/lib/duet/{p-4b400f7d.system.entry.js → p-674df722.system.entry.js} +1 -1
  103. package/lib/duet/{p-80d40375.entry.js → p-684eca44.entry.js} +1 -1
  104. package/lib/duet/{p-cecdebf3.entry.js → p-6c7d2e78.entry.js} +1 -1
  105. package/lib/duet/{p-c0472744.system.entry.js → p-73ee8a98.system.entry.js} +1 -1
  106. package/lib/duet/{p-4b480fdc.entry.js → p-743a76fb.entry.js} +1 -1
  107. package/lib/duet/p-7471bf49.system.entry.js +4 -0
  108. package/lib/duet/{p-1d8d319c.system.entry.js → p-74f7726a.system.entry.js} +1 -1
  109. package/lib/duet/{p-1164a119.system.entry.js → p-777ea91c.system.entry.js} +1 -1
  110. package/lib/duet/{p-df37c5cd.entry.js → p-7983ec01.entry.js} +1 -1
  111. package/lib/duet/{p-dc27e127.system.entry.js → p-7c42729a.system.entry.js} +1 -1
  112. package/lib/duet/p-7e87870b.js +4 -0
  113. package/lib/duet/{p-2c89e016.system.entry.js → p-81d33c0d.system.entry.js} +1 -1
  114. package/lib/duet/{p-ca2b3f6a.system.entry.js → p-868cf1d0.system.entry.js} +1 -1
  115. package/lib/duet/{p-420c000b.entry.js → p-86cdd6ae.entry.js} +1 -1
  116. package/lib/duet/{p-95edfcb8.system.entry.js → p-8825b949.system.entry.js} +1 -1
  117. package/lib/duet/{p-a0129887.system.entry.js → p-8b046f32.system.entry.js} +1 -1
  118. package/lib/duet/{p-5cf1d847.entry.js → p-8d49cfce.entry.js} +1 -1
  119. package/lib/duet/{p-2b1707bd.system.entry.js → p-8d4c1df6.system.entry.js} +1 -1
  120. package/lib/duet/{p-e5120c30.entry.js → p-8dd65109.entry.js} +1 -1
  121. package/lib/duet/{p-5db0676e.system.entry.js → p-9628f617.system.entry.js} +1 -1
  122. package/lib/duet/p-98f7ed54.system.entry.js +4 -0
  123. package/lib/duet/{p-aa5ba0fd.entry.js → p-99ab3ae7.entry.js} +1 -1
  124. package/lib/duet/{p-15945ba7.system.entry.js → p-99dd842a.system.entry.js} +1 -1
  125. package/lib/duet/{p-8ad673ef.entry.js → p-9bdd6e13.entry.js} +1 -1
  126. package/lib/duet/{p-08498e46.entry.js → p-a69cec5c.entry.js} +1 -1
  127. package/lib/duet/{p-545dcb04.entry.js → p-ac3066a5.entry.js} +1 -1
  128. package/lib/duet/p-b252dd83.system.entry.js +4 -0
  129. package/lib/duet/{p-477c6c71.entry.js → p-b6914af6.entry.js} +1 -1
  130. package/lib/duet/{p-f7700f25.entry.js → p-b7e51d7d.entry.js} +1 -1
  131. package/lib/duet/{p-a9dc4dd9.system.entry.js → p-bae4038e.system.entry.js} +1 -1
  132. package/lib/duet/{p-30f15c84.system.entry.js → p-c14a82ed.system.entry.js} +1 -1
  133. package/lib/duet/{p-d1d6dc7a.entry.js → p-c16492e3.entry.js} +1 -1
  134. package/lib/duet/p-c4ccaaa2.system.js +4 -0
  135. package/lib/duet/{p-b71cbe4b.entry.js → p-cb35d64f.entry.js} +1 -1
  136. package/lib/duet/{p-87703af9.entry.js → p-cd2f9010.entry.js} +1 -1
  137. package/lib/duet/{p-6bb9a991.entry.js → p-d2d9c6ac.entry.js} +1 -1
  138. package/lib/duet/{p-b061516e.system.entry.js → p-d8189d01.system.entry.js} +1 -1
  139. package/lib/duet/{p-309f9094.entry.js → p-dd26cd81.entry.js} +1 -1
  140. package/lib/duet/{p-603a61dc.system.entry.js → p-de7025f9.system.entry.js} +1 -1
  141. package/lib/duet/p-e095b87c.entry.js +4 -0
  142. package/lib/duet/{p-13f72df0.entry.js → p-e510911a.entry.js} +1 -1
  143. package/lib/duet/{p-1842a4db.system.entry.js → p-e585efe8.system.entry.js} +1 -1
  144. package/lib/duet/p-e841a4f2.system.entry.js +4 -0
  145. package/lib/duet/{p-0bb75f62.system.entry.js → p-ed346e6c.system.entry.js} +1 -1
  146. package/lib/duet/{p-3d47d6d4.entry.js → p-edcc923f.entry.js} +1 -1
  147. package/lib/duet/{p-f1c7f166.system.entry.js → p-f485fdc9.system.entry.js} +1 -1
  148. package/lib/duet/{p-71261eb7.entry.js → p-f4d70bbf.entry.js} +1 -1
  149. package/lib/duet/p-fa082925.entry.js +4 -0
  150. package/lib/duet/{p-41938e76.system.js → p-fb116ef7.system.js} +1 -1
  151. package/lib/duet/{p-9db71699.entry.js → p-fb142d09.entry.js} +1 -1
  152. package/lib/duet/{p-93a51797.entry.js → p-fbef000c.entry.js} +1 -1
  153. package/lib/esm/duet-alert.entry.js +1 -1
  154. package/lib/esm/duet-badge.entry.js +2 -2
  155. package/lib/esm/duet-breadcrumb.entry.js +44 -0
  156. package/lib/esm/duet-breadcrumbs.entry.js +64 -0
  157. package/lib/esm/duet-button_2.entry.js +4 -3
  158. package/lib/esm/duet-caption_4.entry.js +2 -2
  159. package/lib/esm/duet-card.entry.js +1 -1
  160. package/lib/esm/duet-checkbox.entry.js +1 -1
  161. package/lib/esm/duet-choice_2.entry.js +2 -2
  162. package/lib/esm/duet-collapsible.entry.js +1 -1
  163. package/lib/esm/duet-cookie-consent.entry.js +1 -1
  164. package/lib/esm/duet-date-picker.entry.js +2 -2
  165. package/lib/esm/duet-divider_2.entry.js +1 -1
  166. package/lib/esm/duet-editable-table-button.entry.js +1 -1
  167. package/lib/esm/duet-editable-table_4.entry.js +10 -1
  168. package/lib/esm/duet-empty-state.entry.js +1 -1
  169. package/lib/esm/duet-fieldset.entry.js +1 -1
  170. package/lib/esm/duet-footer.entry.js +2 -2
  171. package/lib/esm/duet-grid_2.entry.js +1 -1
  172. package/lib/esm/duet-header_2.entry.js +2 -2
  173. package/lib/esm/duet-hero.entry.js +1 -1
  174. package/lib/esm/duet-icon.entry.js +1 -1
  175. package/lib/esm/duet-input_2.entry.js +1 -1
  176. package/lib/esm/duet-layout.entry.js +1 -1
  177. package/lib/esm/duet-list_2.entry.js +1 -1
  178. package/lib/esm/duet-modal.entry.js +15 -3
  179. package/lib/esm/duet-notification_2.entry.js +1 -1
  180. package/lib/esm/duet-number-input.entry.js +1 -1
  181. package/lib/esm/duet-progress.entry.js +1 -1
  182. package/lib/esm/duet-radio_2.entry.js +1 -1
  183. package/lib/esm/duet-range-slider.entry.js +1 -1
  184. package/lib/esm/duet-scrollable_3.entry.js +400 -0
  185. package/lib/esm/duet-select.entry.js +1 -1
  186. package/lib/esm/duet-step_2.entry.js +1 -1
  187. package/lib/esm/duet-textarea.entry.js +1 -1
  188. package/lib/esm/duet-toggle.entry.js +1 -1
  189. package/lib/esm/duet-tooltip.entry.js +1 -1
  190. package/lib/esm/duet-tray.entry.js +1 -1
  191. package/lib/esm/duet-upload-aria-status.entry.js +1 -1
  192. package/lib/esm/duet-visually-hidden.entry.js +1 -1
  193. package/lib/esm/duet.js +2 -2
  194. package/lib/esm/{focus-utils-bf7d1e80.js → focus-utils-6ed104b0.js} +1 -1
  195. package/lib/esm/{index-f813a624.js → index-b7694cc6.js} +1 -1
  196. package/lib/esm/loader.js +2 -2
  197. package/lib/esm-es5/duet-alert.entry.js +1 -1
  198. package/lib/esm-es5/duet-badge.entry.js +1 -1
  199. package/lib/esm-es5/duet-breadcrumb.entry.js +4 -0
  200. package/lib/esm-es5/duet-breadcrumbs.entry.js +4 -0
  201. package/lib/esm-es5/duet-button_2.entry.js +1 -1
  202. package/lib/esm-es5/duet-caption_4.entry.js +1 -1
  203. package/lib/esm-es5/duet-card.entry.js +1 -1
  204. package/lib/esm-es5/duet-checkbox.entry.js +1 -1
  205. package/lib/esm-es5/duet-choice_2.entry.js +1 -1
  206. package/lib/esm-es5/duet-collapsible.entry.js +1 -1
  207. package/lib/esm-es5/duet-cookie-consent.entry.js +1 -1
  208. package/lib/esm-es5/duet-date-picker.entry.js +1 -1
  209. package/lib/esm-es5/duet-divider_2.entry.js +1 -1
  210. package/lib/esm-es5/duet-editable-table-button.entry.js +1 -1
  211. package/lib/esm-es5/duet-editable-table_4.entry.js +1 -1
  212. package/lib/esm-es5/duet-empty-state.entry.js +1 -1
  213. package/lib/esm-es5/duet-fieldset.entry.js +1 -1
  214. package/lib/esm-es5/duet-footer.entry.js +1 -1
  215. package/lib/esm-es5/duet-grid_2.entry.js +1 -1
  216. package/lib/esm-es5/duet-header_2.entry.js +1 -1
  217. package/lib/esm-es5/duet-hero.entry.js +1 -1
  218. package/lib/esm-es5/duet-icon.entry.js +1 -1
  219. package/lib/esm-es5/duet-input_2.entry.js +1 -1
  220. package/lib/esm-es5/duet-layout.entry.js +1 -1
  221. package/lib/esm-es5/duet-list_2.entry.js +1 -1
  222. package/lib/esm-es5/duet-modal.entry.js +1 -1
  223. package/lib/esm-es5/duet-notification_2.entry.js +1 -1
  224. package/lib/esm-es5/duet-number-input.entry.js +1 -1
  225. package/lib/esm-es5/duet-progress.entry.js +1 -1
  226. package/lib/esm-es5/duet-radio_2.entry.js +1 -1
  227. package/lib/esm-es5/duet-range-slider.entry.js +1 -1
  228. package/lib/esm-es5/duet-scrollable_3.entry.js +4 -0
  229. package/lib/esm-es5/duet-select.entry.js +1 -1
  230. package/lib/esm-es5/duet-step_2.entry.js +1 -1
  231. package/lib/esm-es5/duet-textarea.entry.js +1 -1
  232. package/lib/esm-es5/duet-toggle.entry.js +1 -1
  233. package/lib/esm-es5/duet-tooltip.entry.js +1 -1
  234. package/lib/esm-es5/duet-tray.entry.js +1 -1
  235. package/lib/esm-es5/duet-upload-aria-status.entry.js +1 -1
  236. package/lib/esm-es5/duet-visually-hidden.entry.js +1 -1
  237. package/lib/esm-es5/duet.js +1 -1
  238. package/lib/esm-es5/{focus-utils-bf7d1e80.js → focus-utils-6ed104b0.js} +1 -1
  239. package/lib/esm-es5/index-b7694cc6.js +4 -0
  240. package/lib/esm-es5/loader.js +1 -1
  241. package/lib/html.html-data.json +128 -5
  242. package/lib/types/components/duet-badge/duet-badge.d.ts +1 -1
  243. package/lib/types/components/duet-breadcrumbs/duet-breadcrumb.d.ts +31 -0
  244. package/lib/types/components/duet-breadcrumbs/duet-breadcrumbs.d.ts +23 -0
  245. package/lib/types/components/duet-button/duet-button.d.ts +2 -1
  246. package/lib/types/components/duet-modal/duet-modal.d.ts +5 -1
  247. package/lib/types/components/duet-scrollable/duet-scrollable.d.ts +47 -0
  248. package/lib/types/components/duet-tab/duet-tab.d.ts +11 -0
  249. package/lib/types/components/duet-tab-group/duet-tab-group.d.ts +11 -0
  250. package/lib/types/components/duet-upload/duet-upload.d.ts +6 -0
  251. package/lib/types/components.d.ts +146 -1
  252. package/package.json +6 -5
  253. package/lib/cjs/duet-tab_2.cjs.entry.js +0 -213
  254. package/lib/duet/p-0d546cd6.system.entry.js +0 -4
  255. package/lib/duet/p-3ff50cee.entry.js +0 -4
  256. package/lib/duet/p-478d2995.entry.js +0 -4
  257. package/lib/duet/p-71a94fb9.system.entry.js +0 -4
  258. package/lib/duet/p-76b98e4d.system.js +0 -4
  259. package/lib/duet/p-80f90fef.js +0 -4
  260. package/lib/duet/p-9c3b48fc.entry.js +0 -4
  261. package/lib/duet/p-c33d1202.js +0 -4
  262. package/lib/duet/p-d9a93e45.entry.js +0 -4
  263. package/lib/duet/p-e54705b2.system.js +0 -4
  264. package/lib/duet/p-f3cd9499.system.entry.js +0 -4
  265. package/lib/esm/duet-tab_2.entry.js +0 -208
  266. package/lib/esm-es5/duet-tab_2.entry.js +0 -4
  267. package/lib/esm-es5/index-f813a624.js +0 -4
@@ -112,6 +112,30 @@ export namespace Components {
112
112
  */
113
113
  "variation": DuetStatus;
114
114
  }
115
+ interface DuetBreadcrumb {
116
+ /**
117
+ * Adds accessible label for the link that is only shown for screen readers. Typically, this label text replaces the visible text on the link for users who use assistive technology.
118
+ */
119
+ "accessibleLabel": string;
120
+ /**
121
+ * Href
122
+ */
123
+ "href": string;
124
+ /**
125
+ * Icon
126
+ */
127
+ "icon": DuetIconName;
128
+ /**
129
+ * Theme
130
+ */
131
+ "theme": DuetTheme;
132
+ }
133
+ interface DuetBreadcrumbs {
134
+ /**
135
+ * Theme
136
+ */
137
+ "theme": DuetTheme;
138
+ }
115
139
  interface DuetButton {
116
140
  /**
117
141
  * Indicates the id of a related component’s visually focused element.
@@ -243,6 +267,7 @@ export namespace Components {
243
267
  /**
244
268
  * Style variation of the button.
245
269
  * @negative - value is deprecated and should be used in combination with negative prop in the future
270
+ * @destructive - value is deprecated and should be replace with destructive-secondary
246
271
  */
247
272
  "variation": DuetButtonVariation;
248
273
  /**
@@ -1539,6 +1564,10 @@ export namespace Components {
1539
1564
  * Use this property when you need to have the modal dialog initially active.
1540
1565
  */
1541
1566
  "active": boolean;
1567
+ /**
1568
+ * Use this property when you want the modal to close when clicked outside of modal.
1569
+ */
1570
+ "closeOnBlur": boolean;
1542
1571
  /**
1543
1572
  * Custom color to be used for the icon, as a design token entered in camelCase or kebab-case. Example: "primary".
1544
1573
  */
@@ -2093,6 +2122,16 @@ export namespace Components {
2093
2122
  */
2094
2123
  "value": number;
2095
2124
  }
2125
+ interface DuetScrollable {
2126
+ /**
2127
+ * Selected element
2128
+ */
2129
+ "selected": number;
2130
+ /**
2131
+ * Theme of duet-tab-scrollable. When used this will override the color setting and use "primary" or "primary-turva" as the color depending on which theme is chosen.
2132
+ */
2133
+ "theme": DuetTheme;
2134
+ }
2096
2135
  interface DuetSelect {
2097
2136
  /**
2098
2137
  * Indicates the id of a related component’s visually focused element.
@@ -2264,6 +2303,16 @@ export namespace Components {
2264
2303
  "theme": DuetTheme;
2265
2304
  }
2266
2305
  interface DuetTab {
2306
+ /**
2307
+ * String for AccessibleLabel
2308
+ * @default null
2309
+ */
2310
+ "accessibleDescription": string;
2311
+ /**
2312
+ * Defaults for AccessibleLabel
2313
+ * @default null
2314
+ */
2315
+ "accessibleDescriptionDefault": DuetLangObject | string;
2267
2316
  /**
2268
2317
  * Label for the tab.
2269
2318
  */
@@ -2274,6 +2323,10 @@ export namespace Components {
2274
2323
  "selected": boolean;
2275
2324
  }
2276
2325
  interface DuetTabGroup {
2326
+ /**
2327
+ * Whether the tab-group collapses to a select dropwdown in minor breakpoints
2328
+ */
2329
+ "collapses": boolean;
2277
2330
  /**
2278
2331
  * Label for the select element which gets shown on mobile.
2279
2332
  * @default {fi: "Valitse", en: "Choose", sv: "Välja"}
@@ -2311,6 +2364,10 @@ export namespace Components {
2311
2364
  * @deprecated
2312
2365
  */
2313
2366
  "refresh": () => Promise<void>;
2367
+ /**
2368
+ * Controls whether the tab-group should scroll (by inflection this will disable collapsing to select box on small screens), if this is a number instead of true it will be used as "amount of items to scroll"
2369
+ */
2370
+ "scrolls": boolean;
2314
2371
  /**
2315
2372
  * Theme of the component.
2316
2373
  */
@@ -2772,6 +2829,10 @@ export namespace Components {
2772
2829
  * Name of the upload component.
2773
2830
  */
2774
2831
  "name": string;
2832
+ /**
2833
+ * Method for forcing a render of the upload list, element.files can be changed externally But it will only rerender on a new Map or a top Level change - this can be used to update the tabular data if the automatic re-render is no sufficient
2834
+ */
2835
+ "refresh": () => Promise<void>;
2775
2836
  /**
2776
2837
  * Set whether the input is required or not. Please note that this is necessary for accessible inputs when the user is required to fill them. When using this property you need to also set “novalidate” attribute to your form element to prevent browser from displaying its own validation errors.
2777
2838
  */
@@ -2860,6 +2921,18 @@ declare global {
2860
2921
  prototype: HTMLDuetBadgeElement;
2861
2922
  new (): HTMLDuetBadgeElement;
2862
2923
  };
2924
+ interface HTMLDuetBreadcrumbElement extends Components.DuetBreadcrumb, HTMLStencilElement {
2925
+ }
2926
+ var HTMLDuetBreadcrumbElement: {
2927
+ prototype: HTMLDuetBreadcrumbElement;
2928
+ new (): HTMLDuetBreadcrumbElement;
2929
+ };
2930
+ interface HTMLDuetBreadcrumbsElement extends Components.DuetBreadcrumbs, HTMLStencilElement {
2931
+ }
2932
+ var HTMLDuetBreadcrumbsElement: {
2933
+ prototype: HTMLDuetBreadcrumbsElement;
2934
+ new (): HTMLDuetBreadcrumbsElement;
2935
+ };
2863
2936
  interface HTMLDuetButtonElement extends Components.DuetButton, HTMLStencilElement {
2864
2937
  }
2865
2938
  var HTMLDuetButtonElement: {
@@ -3088,6 +3161,12 @@ declare global {
3088
3161
  prototype: HTMLDuetRangeSliderElement;
3089
3162
  new (): HTMLDuetRangeSliderElement;
3090
3163
  };
3164
+ interface HTMLDuetScrollableElement extends Components.DuetScrollable, HTMLStencilElement {
3165
+ }
3166
+ var HTMLDuetScrollableElement: {
3167
+ prototype: HTMLDuetScrollableElement;
3168
+ new (): HTMLDuetScrollableElement;
3169
+ };
3091
3170
  interface HTMLDuetSelectElement extends Components.DuetSelect, HTMLStencilElement {
3092
3171
  }
3093
3172
  var HTMLDuetSelectElement: {
@@ -3181,6 +3260,8 @@ declare global {
3181
3260
  interface HTMLElementTagNameMap {
3182
3261
  "duet-alert": HTMLDuetAlertElement;
3183
3262
  "duet-badge": HTMLDuetBadgeElement;
3263
+ "duet-breadcrumb": HTMLDuetBreadcrumbElement;
3264
+ "duet-breadcrumbs": HTMLDuetBreadcrumbsElement;
3184
3265
  "duet-button": HTMLDuetButtonElement;
3185
3266
  "duet-caption": HTMLDuetCaptionElement;
3186
3267
  "duet-card": HTMLDuetCardElement;
@@ -3219,6 +3300,7 @@ declare global {
3219
3300
  "duet-radio": HTMLDuetRadioElement;
3220
3301
  "duet-radio-group": HTMLDuetRadioGroupElement;
3221
3302
  "duet-range-slider": HTMLDuetRangeSliderElement;
3303
+ "duet-scrollable": HTMLDuetScrollableElement;
3222
3304
  "duet-select": HTMLDuetSelectElement;
3223
3305
  "duet-spacer": HTMLDuetSpacerElement;
3224
3306
  "duet-spinner": HTMLDuetSpinnerElement;
@@ -3299,6 +3381,30 @@ declare namespace LocalJSX {
3299
3381
  */
3300
3382
  "variation"?: DuetStatus;
3301
3383
  }
3384
+ interface DuetBreadcrumb {
3385
+ /**
3386
+ * Adds accessible label for the link that is only shown for screen readers. Typically, this label text replaces the visible text on the link for users who use assistive technology.
3387
+ */
3388
+ "accessibleLabel"?: string;
3389
+ /**
3390
+ * Href
3391
+ */
3392
+ "href"?: string;
3393
+ /**
3394
+ * Icon
3395
+ */
3396
+ "icon"?: DuetIconName;
3397
+ /**
3398
+ * Theme
3399
+ */
3400
+ "theme"?: DuetTheme;
3401
+ }
3402
+ interface DuetBreadcrumbs {
3403
+ /**
3404
+ * Theme
3405
+ */
3406
+ "theme"?: DuetTheme;
3407
+ }
3302
3408
  interface DuetButton {
3303
3409
  /**
3304
3410
  * Indicates the id of a related component’s visually focused element.
@@ -3434,6 +3540,7 @@ declare namespace LocalJSX {
3434
3540
  /**
3435
3541
  * Style variation of the button.
3436
3542
  * @negative - value is deprecated and should be used in combination with negative prop in the future
3543
+ * @destructive - value is deprecated and should be replace with destructive-secondary
3437
3544
  */
3438
3545
  "variation"?: DuetButtonVariation;
3439
3546
  /**
@@ -4797,6 +4904,10 @@ declare namespace LocalJSX {
4797
4904
  * Use this property when you need to have the modal dialog initially active.
4798
4905
  */
4799
4906
  "active"?: boolean;
4907
+ /**
4908
+ * Use this property when you want the modal to close when clicked outside of modal.
4909
+ */
4910
+ "closeOnBlur"?: boolean;
4800
4911
  /**
4801
4912
  * Custom color to be used for the icon, as a design token entered in camelCase or kebab-case. Example: "primary".
4802
4913
  */
@@ -4824,7 +4935,7 @@ declare namespace LocalJSX {
4824
4935
  */
4825
4936
  "language"?: DuetLanguage;
4826
4937
  /**
4827
- * Emitted when the close button or esc is hit, but before the modal is closed. To prevent the modal from actually closing, use ev.detail.originalEvent.preventDefault().
4938
+ * Emitted before the modal is closed. To prevent the modal from actually closing, use ev.detail.originalEvent.preventDefault().
4828
4939
  */
4829
4940
  "onDuetBeforeClose"?: (event: CustomEvent<DuetModalCloseEvent>) => void;
4830
4941
  /**
@@ -5357,6 +5468,16 @@ declare namespace LocalJSX {
5357
5468
  */
5358
5469
  "value"?: number;
5359
5470
  }
5471
+ interface DuetScrollable {
5472
+ /**
5473
+ * Selected element
5474
+ */
5475
+ "selected"?: number;
5476
+ /**
5477
+ * Theme of duet-tab-scrollable. When used this will override the color setting and use "primary" or "primary-turva" as the color depending on which theme is chosen.
5478
+ */
5479
+ "theme"?: DuetTheme;
5480
+ }
5360
5481
  interface DuetSelect {
5361
5482
  /**
5362
5483
  * Indicates the id of a related component’s visually focused element.
@@ -5536,6 +5657,16 @@ declare namespace LocalJSX {
5536
5657
  "theme"?: DuetTheme;
5537
5658
  }
5538
5659
  interface DuetTab {
5660
+ /**
5661
+ * String for AccessibleLabel
5662
+ * @default null
5663
+ */
5664
+ "accessibleDescription"?: string;
5665
+ /**
5666
+ * Defaults for AccessibleLabel
5667
+ * @default null
5668
+ */
5669
+ "accessibleDescriptionDefault"?: DuetLangObject | string;
5539
5670
  /**
5540
5671
  * Label for the tab.
5541
5672
  */
@@ -5546,6 +5677,10 @@ declare namespace LocalJSX {
5546
5677
  "selected"?: boolean;
5547
5678
  }
5548
5679
  interface DuetTabGroup {
5680
+ /**
5681
+ * Whether the tab-group collapses to a select dropwdown in minor breakpoints
5682
+ */
5683
+ "collapses"?: boolean;
5549
5684
  /**
5550
5685
  * Label for the select element which gets shown on mobile.
5551
5686
  * @default {fi: "Valitse", en: "Choose", sv: "Välja"}
@@ -5582,6 +5717,10 @@ declare namespace LocalJSX {
5582
5717
  * Controls the padding of the component.
5583
5718
  */
5584
5719
  "padding"?: DuetPadding;
5720
+ /**
5721
+ * Controls whether the tab-group should scroll (by inflection this will disable collapsing to select box on small screens), if this is a number instead of true it will be used as "amount of items to scroll"
5722
+ */
5723
+ "scrolls"?: boolean;
5585
5724
  /**
5586
5725
  * Theme of the component.
5587
5726
  */
@@ -6151,6 +6290,8 @@ declare namespace LocalJSX {
6151
6290
  interface IntrinsicElements {
6152
6291
  "duet-alert": DuetAlert;
6153
6292
  "duet-badge": DuetBadge;
6293
+ "duet-breadcrumb": DuetBreadcrumb;
6294
+ "duet-breadcrumbs": DuetBreadcrumbs;
6154
6295
  "duet-button": DuetButton;
6155
6296
  "duet-caption": DuetCaption;
6156
6297
  "duet-card": DuetCard;
@@ -6189,6 +6330,7 @@ declare namespace LocalJSX {
6189
6330
  "duet-radio": DuetRadio;
6190
6331
  "duet-radio-group": DuetRadioGroup;
6191
6332
  "duet-range-slider": DuetRangeSlider;
6333
+ "duet-scrollable": DuetScrollable;
6192
6334
  "duet-select": DuetSelect;
6193
6335
  "duet-spacer": DuetSpacer;
6194
6336
  "duet-spinner": DuetSpinner;
@@ -6212,6 +6354,8 @@ declare module "@stencil/core" {
6212
6354
  interface IntrinsicElements {
6213
6355
  "duet-alert": LocalJSX.DuetAlert & JSXBase.HTMLAttributes<HTMLDuetAlertElement>;
6214
6356
  "duet-badge": LocalJSX.DuetBadge & JSXBase.HTMLAttributes<HTMLDuetBadgeElement>;
6357
+ "duet-breadcrumb": LocalJSX.DuetBreadcrumb & JSXBase.HTMLAttributes<HTMLDuetBreadcrumbElement>;
6358
+ "duet-breadcrumbs": LocalJSX.DuetBreadcrumbs & JSXBase.HTMLAttributes<HTMLDuetBreadcrumbsElement>;
6215
6359
  "duet-button": LocalJSX.DuetButton & JSXBase.HTMLAttributes<HTMLDuetButtonElement>;
6216
6360
  "duet-caption": LocalJSX.DuetCaption & JSXBase.HTMLAttributes<HTMLDuetCaptionElement>;
6217
6361
  "duet-card": LocalJSX.DuetCard & JSXBase.HTMLAttributes<HTMLDuetCardElement>;
@@ -6250,6 +6394,7 @@ declare module "@stencil/core" {
6250
6394
  "duet-radio": LocalJSX.DuetRadio & JSXBase.HTMLAttributes<HTMLDuetRadioElement>;
6251
6395
  "duet-radio-group": LocalJSX.DuetRadioGroup & JSXBase.HTMLAttributes<HTMLDuetRadioGroupElement>;
6252
6396
  "duet-range-slider": LocalJSX.DuetRangeSlider & JSXBase.HTMLAttributes<HTMLDuetRangeSliderElement>;
6397
+ "duet-scrollable": LocalJSX.DuetScrollable & JSXBase.HTMLAttributes<HTMLDuetScrollableElement>;
6253
6398
  "duet-select": LocalJSX.DuetSelect & JSXBase.HTMLAttributes<HTMLDuetSelectElement>;
6254
6399
  "duet-spacer": LocalJSX.DuetSpacer & JSXBase.HTMLAttributes<HTMLDuetSpacerElement>;
6255
6400
  "duet-spinner": LocalJSX.DuetSpinner & JSXBase.HTMLAttributes<HTMLDuetSpinnerElement>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duetds/components",
3
- "version": "4.34.1",
3
+ "version": "4.35.0",
4
4
  "description": "This package includes Duet Design System Web Components and related utilities.",
5
5
  "bugs": {
6
6
  "email": "duetdesignsystem@lahitapiola.fi"
@@ -36,6 +36,7 @@
36
36
  "version": "npm run build",
37
37
  "build": "run-s stencil:build copy:vscode",
38
38
  "stencil:build": "stencil build",
39
+ "stencil:build:dev": "stencil build --dev",
39
40
  "stencil:stats": "stencil build --log --stats",
40
41
  "stencil:dev": "stencil build --dev --watch --serve",
41
42
  "stencil:koa": "stencil build --dev --watch",
@@ -52,11 +53,11 @@
52
53
  "koa-colorful-logger": "0.0.3"
53
54
  },
54
55
  "devDependencies": {
55
- "@duetds/fonts": "1.4.7",
56
- "@duetds/icons": "2.2.7",
56
+ "@duetds/fonts": "1.4.11",
57
+ "@duetds/icons": "2.2.11",
57
58
  "@duetds/stencil-angular-output-target": "0.0.2",
58
59
  "@duetds/stencil-react-output-target": "0.0.10",
59
- "@duetds/tokens": "2.4.7",
60
+ "@duetds/tokens": "2.4.11",
60
61
  "@koa/cors": "3.1.0",
61
62
  "@rollup/plugin-replace": "3.0.1",
62
63
  "@stencil/core": "2.12.1",
@@ -95,5 +96,5 @@
95
96
  "collection": "lib/collection/collection-manifest.json",
96
97
  "es2015": "lib/esm/index.js",
97
98
  "es2017": "lib/esm/index.js",
98
- "gitHead": "ee288fef3139a19ec36024d7994b3bbefa9483f3"
99
+ "gitHead": "82c1e6f02105189828663a62d980e570239f3e33"
99
100
  }
@@ -1,213 +0,0 @@
1
- /*!
2
- * Built with Duet Design System
3
- */
4
- 'use strict';
5
-
6
- Object.defineProperty(exports, '__esModule', { value: true });
7
-
8
- const index = require('./index-1c10bbfb.js');
9
- const createId = require('./create-id-c3b984b1.js');
10
- const keyboardUtils = require('./keyboard-utils-b4e3d1d3.js');
11
- const languageUtils = require('./language-utils-aa282901.js');
12
- const themeableComponent = require('./themeable-component-0c1be552.js');
13
- require('./string-utils-267e3dbb.js');
14
-
15
- const duetTabCss = ".sc-duet-tab-h{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;display:block;width:100%}.duet-tab.sc-duet-tab{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;display:none;width:100%}.duet-tab.selected.sc-duet-tab{display:block}";
16
-
17
- let DuetTab = class {
18
- constructor(hostRef) {
19
- index.registerInstance(this, hostRef);
20
- }
21
- /**
22
- * render() function
23
- * Always the last one in the class.
24
- */
25
- render() {
26
- {
27
- return (index.h("div", { role: "tabpanel", class: { "duet-tab": true, selected: this.selected } }, index.h("slot", null)));
28
- }
29
- }
30
- };
31
- DuetTab.style = duetTabCss;
32
-
33
- const duetTabGroupCss = "*.sc-duet-tab-group,*.sc-duet-tab-group::after,*.sc-duet-tab-group::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}.sc-duet-tab-group-h{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;-webkit-tap-highlight-color:transparent;display:block;width:100%}.duet-tab-group-tabs.sc-duet-tab-group{margin-bottom:28px !important;display:block;width:100%;max-width:100%;padding-top:2px;list-style:none}.duet-tab-group-tabs.duet-m-0.sc-duet-tab-group{margin:0 !important}.duet-tab-group-tabs.duet-tab-group-hidden.sc-duet-tab-group{display:none}@media (min-width: 36em){.duet-tab-group-tabs.duet-tab-group-hidden.sc-duet-tab-group{display:block}}.duet-tab-variation-plain.sc-duet-tab-group .duet-tab-group-tabs.sc-duet-tab-group{border-bottom:1px solid #e1e3e6}.duet-theme-turva.duet-tab-variation-plain.sc-duet-tab-group .duet-tab-group-tabs.sc-duet-tab-group{border-bottom-color:#e4e4e6 !important}@media (min-width: 36em){duet-select.sc-duet-tab-group{display:none !important}}.duet-tab-button.sc-duet-tab-group{-webkit-user-select:none;user-select:none;position:relative;z-index:100;display:block;width:100%;padding:20px;margin-top:-2px;font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";font-size:1rem;font-weight:600;line-height:1.1;color:#00294d !important;text-align:left;text-decoration:none;cursor:pointer;background:white;border:2px solid #e1e3e6;border-style:solid;border-radius:0;transition:150ms ease}.duet-tab-button.duet-p-0.sc-duet-tab-group{padding:0 !important}.duet-tab-button.duet-m-0.sc-duet-tab-group{margin:0 !important}.duet-theme-turva.sc-duet-tab-group .duet-tab-button.sc-duet-tab-group{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:#171c3a !important;border-color:#e4e4e6}.duet-tab-button.duet-p-0.sc-duet-tab-group{padding:0 !important}@media (min-width: 36em){.duet-tab-button.sc-duet-tab-group{display:inline-block;width:auto;margin-left:-2px;border-right:2px solid #e1e3e6;border-radius:0}}.duet-tab-button.sc-duet-tab-group:hover{z-index:200;border-color:#909599}.duet-theme-turva.sc-duet-tab-group .duet-tab-button.sc-duet-tab-group:hover{border-color:#747475 !important}.duet-tab-button.sc-duet-tab-group:active{opacity:0.75;transition:none}.duet-tab-button.selected.sc-duet-tab-group{z-index:201;color:white !important;background:#00294d;border-color:#00294d;outline:0;box-shadow:none !important}.duet-theme-turva.sc-duet-tab-group .duet-tab-button.selected.sc-duet-tab-group{color:white !important;background-color:#171c3a;border-color:#171c3a !important}.duet-tab-button.sc-duet-tab-group:focus{z-index:200;outline:0}.user-is-tabbing.sc-duet-tab-group-h .duet-tab-button.sc-duet-tab-group:focus{box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3 !important}.user-is-tabbing.sc-duet-tab-group-h .duet-theme-turva.sc-duet-tab-group .duet-tab-button.sc-duet-tab-group:focus{box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a !important}.duet-tab-button.sc-duet-tab-group:first-child{border-top-left-radius:4px;border-top-right-radius:4px}@media (min-width: 36em){.duet-tab-button.sc-duet-tab-group:first-child{border-top-right-radius:0;border-bottom-left-radius:4px}}.duet-tab-button.sc-duet-tab-group:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}@media (min-width: 36em){.duet-tab-button.sc-duet-tab-group:last-child{border-radius:0;border-top-right-radius:4px;border-bottom-right-radius:4px}}.duet-tab-variation-plain.sc-duet-tab-group .duet-tab-button.sc-duet-tab-group{display:inline-block;width:auto;padding-right:0;padding-left:0;border:0;border-radius:0;transition:none}.duet-tab-variation-plain.sc-duet-tab-group .duet-tab-button.sc-duet-tab-group+.duet-tab-button.sc-duet-tab-group{margin-left:36px}.duet-tab-variation-plain.sc-duet-tab-group .duet-tab-button.selected.sc-duet-tab-group{color:#0077b3 !important;background:white;border-bottom:3px solid #0077b3}.duet-theme-turva.duet-tab-variation-plain.sc-duet-tab-group .duet-tab-button.selected.sc-duet-tab-group{color:#c60c30 !important;border-bottom-color:#c60c30 !important}.duet-tab-group-content.sc-duet-tab-group{position:relative;width:100%;font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";font-size:1rem;font-weight:400;line-height:1.5;color:#00294d;text-align:left}.duet-theme-turva.sc-duet-tab-group .duet-tab-group-content.sc-duet-tab-group{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:#171c3a}";
34
-
35
- let DuetTabGroup = class {
36
- constructor(hostRef) {
37
- index.registerInstance(this, hostRef);
38
- this.duetChange = index.createEvent(this, "duetChange", 3);
39
- this.duetTabChange = index.createEvent(this, "duetTabChange", 7);
40
- this.id = createId.createID("DuetTabGroup");
41
- /**
42
- * State() variables
43
- * Inlined decorator, alphabetical order.
44
- */
45
- this.tabs = [];
46
- this.selected = 0;
47
- /**
48
- * Theme of the component.
49
- */
50
- this.theme = "";
51
- /**
52
- * Style variation of the tab group.
53
- */
54
- this.variation = "default";
55
- /**
56
- * The currently active language. This setting changes the accessible labels to match the
57
- * chosen language.
58
- * @deprecated this is now handled via the html lang tag, and is no longer used - kept to avoid breaking changes and ease unit testing
59
- * @default "fi"
60
- */
61
- this.language = languageUtils.getLanguage();
62
- /**
63
- * Defaults for Label
64
- * @default {fi: "Valitse", en: "Choose", sv: "Välja"}
65
- */
66
- this.labelDefaults = {
67
- fi: "Valitse",
68
- en: "Choose",
69
- sv: "Välj",
70
- };
71
- /**
72
- * Label for the select element which gets shown on mobile.
73
- * @default {fi: "Valitse", en: "Choose", sv: "Välja"}
74
- */
75
- this.label = languageUtils.getLocaleString(this.labelDefaults, this.language);
76
- /**
77
- * Determines whether the label for the select element shown on mobile is visually hidden.
78
- */
79
- this.labelHidden = true;
80
- /**
81
- * Controls the margin of the component.
82
- */
83
- this.margin = "auto";
84
- /**
85
- * Controls the padding of the component.
86
- */
87
- this.padding = "auto";
88
- /**
89
- * Component event handling.
90
- */
91
- this.handleKeyDown = ev => {
92
- let button;
93
- if (keyboardUtils.isArrowLeftKey(ev) || keyboardUtils.isArrowUpKey(ev)) {
94
- button = ev.target.previousElementSibling;
95
- }
96
- else if (keyboardUtils.isArrowRightKey(ev) || keyboardUtils.isArrowDownKey(ev)) {
97
- button = ev.target.nextElementSibling;
98
- }
99
- if (button) {
100
- ev.preventDefault();
101
- button.click();
102
- button.focus();
103
- }
104
- };
105
- this.renderTab = (tab, index$1) => {
106
- return (index.h("button", { role: "tab", id: this.getButtonId(index$1), "aria-controls": this.getTabId(index$1), "aria-selected": tab.selected ? "true" : "false", type: "button", class: {
107
- "duet-p-0": this.padding === "none",
108
- "duet-tab-button": true,
109
- selected: tab.selected,
110
- }, onClick: () => this.openTab(index$1), onKeyDown: ev => this.handleKeyDown(ev) }, tab.label));
111
- };
112
- }
113
- /**
114
- * Component lifecycle events.
115
- */
116
- async connectedCallback() {
117
- if (typeof MutationObserver !== "undefined") {
118
- this.mutationO = new MutationObserver(() => {
119
- this.updateTabs();
120
- });
121
- this.mutationO.observe(this.element, {
122
- attributes: true,
123
- attributeFilter: ["label"],
124
- childList: true,
125
- characterData: true,
126
- subtree: true,
127
- });
128
- }
129
- this.updateTabs();
130
- }
131
- disconnectedCallback() {
132
- if (this.mutationO) {
133
- this.mutationO.disconnect();
134
- this.mutationO = undefined;
135
- }
136
- }
137
- componentWillLoad() {
138
- themeableComponent.inheritGlobalTheme(this);
139
- }
140
- /**
141
- * This method allows you to open any of the tabs by calling the method and
142
- * passing the index of the tab. Please note that index starts from zero.
143
- */
144
- async openTab(tabIndex) {
145
- if (tabIndex >= this.tabs.length) {
146
- throw new Error(`[duet-tabs] Index ${tabIndex} is out of bounds of tabs length`);
147
- }
148
- this.selected = tabIndex;
149
- this.tabs.forEach((tab, i) => {
150
- tab.selected = i === tabIndex;
151
- });
152
- const event = {
153
- value: tabIndex,
154
- component: "duet-tab-group",
155
- };
156
- this.duetChange.emit(event);
157
- this.duetTabChange.emit(event);
158
- }
159
- /**
160
- * This method used to refresh the contents of the tab group
161
- * but is now deprecated as this is done automatically.
162
- * @deprecated
163
- */
164
- async refresh() {
165
- console.log("[duet-tabs] Refresh method is deprecated and will be removed in the future version.");
166
- }
167
- /**
168
- * Local methods.
169
- */
170
- getButtonId(index) {
171
- return `${this.id}-button-${index}`;
172
- }
173
- getTabId(index) {
174
- return `${this.id}-tab-${index}`;
175
- }
176
- async updateTabs() {
177
- const allTabs = Array.from(this.element.querySelectorAll("duet-tab"));
178
- // filter out any nested tabs
179
- this.tabs = allTabs.filter(tab => tab.closest("duet-tab-group") === this.element);
180
- if (this.tabs.length === 0) {
181
- throw new Error("[duet-tabs] Must have at least one tab");
182
- }
183
- this.tabs.forEach((tab, index) => {
184
- tab.id = this.getTabId(index);
185
- tab.setAttribute("aria-labelledby", this.getButtonId(index));
186
- if (tab.selected) {
187
- this.selected = index;
188
- }
189
- });
190
- }
191
- /**
192
- * render() function
193
- * Always the last one in the class.
194
- */
195
- render() {
196
- return (index.h("div", { class: {
197
- "duet-tab-group": true,
198
- "duet-theme-turva": this.theme === "turva",
199
- [`duet-tab-variation-${this.variation}`]: true,
200
- } }, this.tabs.length > 3 && (index.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) => {
201
- return { label: tab.label, value: index.toString() };
202
- }) })), index.h("div", { role: "tablist", class: {
203
- "duet-m-0": this.margin === "none",
204
- "duet-tab-group-tabs": true,
205
- "duet-tab-group-hidden": this.tabs.length > 3,
206
- } }, this.tabs.map(this.renderTab)), index.h("div", { class: { "duet-tab-group-content": true, "duet-m-0": this.margin === "none" } }, index.h("slot", null))));
207
- }
208
- get element() { return index.getElement(this); }
209
- };
210
- DuetTabGroup.style = duetTabGroupCss;
211
-
212
- exports.duet_tab = DuetTab;
213
- exports.duet_tab_group = DuetTabGroup;