@duetds/components 5.0.3 → 5.1.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 (307) hide show
  1. package/hydrate/index.js +491 -16
  2. package/lib/cjs/duet-action-button.cjs.entry.js +5 -5
  3. package/lib/cjs/duet-alert.cjs.entry.js +2 -2
  4. package/lib/cjs/duet-badge.cjs.entry.js +2 -2
  5. package/lib/cjs/duet-breadcrumb.cjs.entry.js +2 -2
  6. package/lib/cjs/duet-breadcrumbs.cjs.entry.js +2 -2
  7. package/lib/cjs/duet-button_2.cjs.entry.js +4 -4
  8. package/lib/cjs/duet-caption_4.cjs.entry.js +4 -4
  9. package/lib/cjs/duet-card.cjs.entry.js +5 -5
  10. package/lib/cjs/duet-checkbox.cjs.entry.js +2 -2
  11. package/lib/cjs/duet-choice_2.cjs.entry.js +4 -4
  12. package/lib/cjs/duet-collapsible.cjs.entry.js +4 -4
  13. package/lib/cjs/duet-combobox.cjs.entry.js +390 -0
  14. package/lib/cjs/duet-cookie-consent.cjs.entry.js +2 -2
  15. package/lib/cjs/duet-date-picker.cjs.entry.js +10 -5
  16. package/lib/cjs/duet-divider_2.cjs.entry.js +2 -2
  17. package/lib/cjs/duet-editable-table_3.cjs.entry.js +9 -7
  18. package/lib/cjs/duet-empty-state.cjs.entry.js +2 -2
  19. package/lib/cjs/duet-fieldset.cjs.entry.js +2 -2
  20. package/lib/cjs/duet-footer.cjs.entry.js +4 -4
  21. package/lib/cjs/duet-grid_2.cjs.entry.js +3 -3
  22. package/lib/cjs/duet-header_2.cjs.entry.js +40 -9
  23. package/lib/cjs/duet-hero.cjs.entry.js +2 -2
  24. package/lib/cjs/duet-icon.cjs.entry.js +4 -4
  25. package/lib/cjs/duet-input_2.cjs.entry.js +42 -4
  26. package/lib/cjs/duet-layout.cjs.entry.js +1 -1
  27. package/lib/cjs/duet-list_2.cjs.entry.js +2 -2
  28. package/lib/cjs/duet-modal.cjs.entry.js +4 -4
  29. package/lib/cjs/duet-notification_2.cjs.entry.js +2 -2
  30. package/lib/cjs/duet-number-input.cjs.entry.js +3 -3
  31. package/lib/cjs/duet-pagination_2.cjs.entry.js +3 -3
  32. package/lib/cjs/duet-progress.cjs.entry.js +2 -2
  33. package/lib/cjs/duet-radio_2.cjs.entry.js +2 -2
  34. package/lib/cjs/duet-range-slider.cjs.entry.js +3 -3
  35. package/lib/cjs/duet-scrollable_3.cjs.entry.js +3 -3
  36. package/lib/cjs/duet-select.cjs.entry.js +2 -2
  37. package/lib/cjs/duet-step_2.cjs.entry.js +3 -3
  38. package/lib/cjs/duet-textarea.cjs.entry.js +3 -3
  39. package/lib/cjs/duet-toggle.cjs.entry.js +2 -2
  40. package/lib/cjs/duet-tooltip.cjs.entry.js +2 -2
  41. package/lib/cjs/duet-tray.cjs.entry.js +3 -3
  42. package/lib/cjs/duet-upload-aria-status.cjs.entry.js +1 -1
  43. package/lib/cjs/duet-visually-hidden.cjs.entry.js +1 -1
  44. package/lib/cjs/duet.cjs.js +2 -2
  45. package/lib/cjs/{focus-utils-be11fe84.js → focus-utils-be2df924.js} +1 -1
  46. package/lib/cjs/{index-4be1f8f7.js → index-608ca44d.js} +1 -1
  47. package/lib/cjs/{input-utils-f3e3854c.js → input-utils-b5e8f524.js} +1 -1
  48. package/lib/cjs/{keyboard-utils-898cfe14.js → keyboard-utils-bb32119b.js} +3 -0
  49. package/lib/cjs/loader.cjs.js +2 -2
  50. package/lib/cjs/themeable-component-940d3b50.js +15 -0
  51. package/lib/cjs/{token-utils-ac8432d1.js → token-utils-f402e205.js} +1 -1
  52. package/lib/cjs/{tokens-72efc7fd.js → tokens-8596cece.js} +0 -0
  53. package/lib/cjs/{tokens.module-6afcc9c1.js → tokens.module-6b2df1c2.js} +0 -0
  54. package/lib/collection/collection-manifest.json +1 -0
  55. package/lib/collection/components/duet-combobox/duet-combobox-select-single.js +12 -0
  56. package/lib/collection/components/duet-combobox/duet-combobox-select.js +19 -0
  57. package/lib/collection/components/duet-combobox/duet-combobox.css +78 -0
  58. package/lib/collection/components/duet-combobox/duet-combobox.js +592 -0
  59. package/lib/collection/components/duet-date-picker/duet-date-picker.js +24 -2
  60. package/lib/collection/components/duet-date-picker/utils.js +1 -0
  61. package/lib/collection/components/duet-footer/duet-footer.js +6 -2
  62. package/lib/collection/components/duet-header/duet-header.css +15 -0
  63. package/lib/collection/components/duet-header/duet-header.js +41 -3
  64. package/lib/collection/components/duet-input/duet-input.js +92 -2
  65. package/lib/collection/components/duet-upload/duet-upload.css +12 -0
  66. package/lib/collection/components/duet-upload/duet-upload.js +4 -1
  67. package/lib/collection/components/duet-upload/upload-editable-item-success.js +1 -1
  68. package/lib/collection/utils/input-utils.js +1 -1
  69. package/lib/collection/utils/themeable-component.js +5 -2
  70. package/lib/custom-elements-bundle/index.d.ts +6 -0
  71. package/lib/custom-elements-bundle/index.js +487 -28
  72. package/lib/duet/duet.esm.js +1 -1
  73. package/lib/duet/duet.js +1 -1
  74. package/lib/duet/{p-74586a15.system.entry.js → p-026083dd.system.entry.js} +1 -1
  75. package/lib/duet/{p-cdd335a3.entry.js → p-068a3522.entry.js} +1 -1
  76. package/lib/duet/{p-7e8d9165.entry.js → p-06b01be8.entry.js} +1 -1
  77. package/lib/duet/{p-dbc85b3a.entry.js → p-08c949c2.entry.js} +1 -1
  78. package/lib/duet/{p-1159dab0.system.entry.js → p-0cfe2b11.system.entry.js} +1 -1
  79. package/lib/duet/{p-71f87732.entry.js → p-143182be.entry.js} +1 -1
  80. package/lib/duet/p-156538ea.system.entry.js +4 -0
  81. package/lib/duet/{p-b6d748a9.system.entry.js → p-1dd368a3.system.entry.js} +1 -1
  82. package/lib/duet/{p-b72b4f9d.entry.js → p-1feabba1.entry.js} +1 -1
  83. package/lib/duet/{p-79f99668.entry.js → p-206f46ba.entry.js} +1 -1
  84. package/lib/duet/{p-22ed4dd2.entry.js → p-2287449d.entry.js} +1 -1
  85. package/lib/duet/{p-0c71c685.system.entry.js → p-23a19b83.system.entry.js} +1 -1
  86. package/lib/duet/{p-8824199e.system.entry.js → p-2866ccc1.system.entry.js} +1 -1
  87. package/lib/duet/{p-8f3be2e7.system.entry.js → p-29e73d8c.system.entry.js} +1 -1
  88. package/lib/duet/{p-33c8d8b9.entry.js → p-2f409514.entry.js} +1 -1
  89. package/lib/duet/{p-2a0ae7f6.system.entry.js → p-3048d8ef.system.entry.js} +1 -1
  90. package/lib/duet/{p-04ad8a51.system.js → p-31bc24a2.system.js} +1 -1
  91. package/lib/duet/{p-5be54927.entry.js → p-383c7df0.entry.js} +1 -1
  92. package/lib/duet/{p-24a9e68e.system.entry.js → p-388535da.system.entry.js} +1 -1
  93. package/lib/duet/p-3dfcf826.entry.js +4 -0
  94. package/lib/duet/{p-19a632b5.system.entry.js → p-41ff8913.system.entry.js} +1 -1
  95. package/lib/duet/{p-4a0d062b.entry.js → p-48ea1da4.entry.js} +1 -1
  96. package/lib/duet/{p-e171592e.entry.js → p-4c57fe8a.entry.js} +1 -1
  97. package/lib/duet/{p-77acbfe4.system.js → p-4e2532c7.system.js} +1 -1
  98. package/lib/duet/{p-364daea3.entry.js → p-4e4cce23.entry.js} +1 -1
  99. package/lib/duet/p-546444b0.system.entry.js +4 -0
  100. package/lib/duet/{p-fb3f8bae.entry.js → p-54724f73.entry.js} +1 -1
  101. package/lib/duet/p-54f35a79.js +4 -0
  102. package/lib/duet/p-56118313.js +4 -0
  103. package/lib/duet/{p-b9a23922.system.entry.js → p-58c20a42.system.entry.js} +1 -1
  104. package/lib/duet/{p-f40ab568.entry.js → p-60e2436b.entry.js} +1 -1
  105. package/lib/duet/{p-3e4f8f38.entry.js → p-63ac8866.entry.js} +1 -1
  106. package/lib/duet/{p-d8d93e29.system.js → p-64ebe689.system.js} +1 -1
  107. package/lib/duet/{p-3ab1a68a.entry.js → p-65a79da5.entry.js} +1 -1
  108. package/lib/duet/{p-8493e747.system.entry.js → p-69c0a7f6.system.entry.js} +1 -1
  109. package/lib/duet/p-6b03322b.system.js +4 -0
  110. package/lib/duet/{p-302a1111.system.entry.js → p-6b1abf52.system.entry.js} +1 -1
  111. package/lib/duet/{p-9bc80a7f.js → p-6b6176f4.js} +1 -1
  112. package/lib/duet/{p-480d4dcf.system.entry.js → p-6ba20e72.system.entry.js} +2 -2
  113. package/lib/duet/{p-0047c4f5.system.entry.js → p-6f4863db.system.entry.js} +1 -1
  114. package/lib/duet/{p-4c3d3d98.system.entry.js → p-6f603653.system.entry.js} +1 -1
  115. package/lib/duet/{p-5bb0d504.system.entry.js → p-7339eb94.system.entry.js} +1 -1
  116. package/lib/duet/{p-5208e8c8.entry.js → p-74728a74.entry.js} +1 -1
  117. package/lib/duet/{p-70090114.entry.js → p-7666b058.entry.js} +1 -1
  118. package/lib/duet/{p-cda9e6ea.entry.js → p-7729af53.entry.js} +1 -1
  119. package/lib/duet/p-7754c44f.entry.js +4 -0
  120. package/lib/duet/{p-c44470ff.entry.js → p-7a906647.entry.js} +1 -1
  121. package/lib/duet/{p-8c873050.system.entry.js → p-7aa17a19.system.entry.js} +1 -1
  122. package/lib/duet/{p-48c23e5c.entry.js → p-7f857142.entry.js} +1 -1
  123. package/lib/duet/{p-d7bc0102.js → p-8143f3de.js} +0 -0
  124. package/lib/duet/{p-49b566b8.entry.js → p-81c4e0b8.entry.js} +1 -1
  125. package/lib/duet/{p-7fe35615.system.entry.js → p-84afb642.system.entry.js} +1 -1
  126. package/lib/duet/{p-2724a54c.entry.js → p-85fe86ef.entry.js} +1 -1
  127. package/lib/duet/{p-839ea534.entry.js → p-887d51ae.entry.js} +1 -1
  128. package/lib/duet/{p-3cfbe168.entry.js → p-8cc38bb7.entry.js} +1 -1
  129. package/lib/duet/{p-a008aacc.entry.js → p-8f2b3690.entry.js} +1 -1
  130. package/lib/duet/p-93c1b85e.system.entry.js +4 -0
  131. package/lib/duet/{p-0e962ab1.system.entry.js → p-9592fa1f.system.entry.js} +1 -1
  132. package/lib/duet/{p-f65e0de6.system.entry.js → p-99dc86ab.system.entry.js} +1 -1
  133. package/lib/duet/{p-afe9e9f0.system.entry.js → p-9a47fd17.system.entry.js} +1 -1
  134. package/lib/duet/{p-8e7c504a.entry.js → p-9b0489b4.entry.js} +1 -1
  135. package/lib/duet/{p-a3506401.system.entry.js → p-9b282421.system.entry.js} +2 -2
  136. package/lib/duet/{p-36af1d4b.system.entry.js → p-9e06a7c7.system.entry.js} +1 -1
  137. package/lib/duet/p-a63f753e.system.js +4 -0
  138. package/lib/duet/{p-419e1df7.entry.js → p-a682a6a5.entry.js} +1 -1
  139. package/lib/duet/{p-25b156ea.entry.js → p-aa9d165e.entry.js} +1 -1
  140. package/lib/duet/{p-693cec9c.system.entry.js → p-ab3a0d39.system.entry.js} +1 -1
  141. package/lib/duet/p-ab8e590d.system.js +4 -0
  142. package/lib/duet/p-abf8eaf7.js +4 -0
  143. package/lib/duet/{p-ed75c8b3.js → p-ad07f399.js} +0 -0
  144. package/lib/duet/{p-14aba051.entry.js → p-b77d4386.entry.js} +1 -1
  145. package/lib/duet/{p-515fe415.system.entry.js → p-b7a86acf.system.entry.js} +1 -1
  146. package/lib/duet/p-badc3ac3.entry.js +4 -0
  147. package/lib/duet/{p-995288c0.entry.js → p-bc84c679.entry.js} +1 -1
  148. package/lib/duet/{p-1aa9b60c.system.entry.js → p-bdc61811.system.entry.js} +1 -1
  149. package/lib/duet/{p-38cc1d02.system.entry.js → p-c3019850.system.entry.js} +1 -1
  150. package/lib/duet/{p-9a8d5b11.system.js → p-c466bad9.system.js} +1 -1
  151. package/lib/duet/{p-68b50c43.entry.js → p-c5429708.entry.js} +1 -1
  152. package/lib/duet/{p-140cf44e.entry.js → p-ca55e1f8.entry.js} +1 -1
  153. package/lib/duet/{p-5746d88c.js → p-cb445018.js} +1 -1
  154. package/lib/duet/{p-f0dba299.system.entry.js → p-cd2e4ea8.system.entry.js} +1 -1
  155. package/lib/duet/{p-799f35c8.system.entry.js → p-d4734090.system.entry.js} +1 -1
  156. package/lib/duet/{p-d5a75400.system.entry.js → p-d8ebb48c.system.entry.js} +1 -1
  157. package/lib/duet/{p-29c093f0.entry.js → p-dca9237d.entry.js} +1 -1
  158. package/lib/duet/{p-268c0abb.system.js → p-ddb6344c.system.js} +0 -0
  159. package/lib/duet/p-df6b0878.system.entry.js +4 -0
  160. package/lib/duet/{p-7afb2bcf.system.entry.js → p-e4f8e874.system.entry.js} +1 -1
  161. package/lib/duet/{p-76f3205a.system.entry.js → p-e50c8c08.system.entry.js} +1 -1
  162. package/lib/duet/{p-b6339b38.system.entry.js → p-e5f9c7b8.system.entry.js} +1 -1
  163. package/lib/duet/{p-dca6993f.system.entry.js → p-e8a5580c.system.entry.js} +1 -1
  164. package/lib/duet/{p-d1549bd1.entry.js → p-e8da9596.entry.js} +1 -1
  165. package/lib/duet/{p-8594bc4d.entry.js → p-ea131807.entry.js} +1 -1
  166. package/lib/duet/{p-2be3b1ee.entry.js → p-ec340319.entry.js} +1 -1
  167. package/lib/duet/{p-2345965b.system.entry.js → p-ed1ea287.system.entry.js} +1 -1
  168. package/lib/duet/p-f37a0b50.entry.js +4 -0
  169. package/lib/duet/{p-bfc93e93.system.entry.js → p-f3ed1115.system.entry.js} +1 -1
  170. package/lib/duet/p-f42b06ec.entry.js +4 -0
  171. package/lib/duet/{p-343975bc.js → p-f5ced40a.js} +1 -1
  172. package/lib/duet/{p-83aaed17.system.entry.js → p-f7e5404c.system.entry.js} +1 -1
  173. package/lib/duet/{p-636dfb04.system.entry.js → p-f9ddfbd3.system.entry.js} +1 -1
  174. package/lib/duet/{p-812b0905.system.js → p-fa99eaa4.system.js} +0 -0
  175. package/lib/esm/duet-action-button.entry.js +5 -5
  176. package/lib/esm/duet-alert.entry.js +2 -2
  177. package/lib/esm/duet-badge.entry.js +2 -2
  178. package/lib/esm/duet-breadcrumb.entry.js +2 -2
  179. package/lib/esm/duet-breadcrumbs.entry.js +2 -2
  180. package/lib/esm/duet-button_2.entry.js +4 -4
  181. package/lib/esm/duet-caption_4.entry.js +4 -4
  182. package/lib/esm/duet-card.entry.js +5 -5
  183. package/lib/esm/duet-checkbox.entry.js +2 -2
  184. package/lib/esm/duet-choice_2.entry.js +4 -4
  185. package/lib/esm/duet-collapsible.entry.js +4 -4
  186. package/lib/esm/duet-combobox.entry.js +386 -0
  187. package/lib/esm/duet-cookie-consent.entry.js +2 -2
  188. package/lib/esm/duet-date-picker.entry.js +10 -5
  189. package/lib/esm/duet-divider_2.entry.js +2 -2
  190. package/lib/esm/duet-editable-table_3.entry.js +9 -7
  191. package/lib/esm/duet-empty-state.entry.js +2 -2
  192. package/lib/esm/duet-fieldset.entry.js +2 -2
  193. package/lib/esm/duet-footer.entry.js +4 -4
  194. package/lib/esm/duet-grid_2.entry.js +3 -3
  195. package/lib/esm/duet-header_2.entry.js +40 -9
  196. package/lib/esm/duet-hero.entry.js +2 -2
  197. package/lib/esm/duet-icon.entry.js +4 -4
  198. package/lib/esm/duet-input_2.entry.js +42 -4
  199. package/lib/esm/duet-layout.entry.js +1 -1
  200. package/lib/esm/duet-list_2.entry.js +2 -2
  201. package/lib/esm/duet-modal.entry.js +4 -4
  202. package/lib/esm/duet-notification_2.entry.js +2 -2
  203. package/lib/esm/duet-number-input.entry.js +3 -3
  204. package/lib/esm/duet-pagination_2.entry.js +3 -3
  205. package/lib/esm/duet-progress.entry.js +2 -2
  206. package/lib/esm/duet-radio_2.entry.js +2 -2
  207. package/lib/esm/duet-range-slider.entry.js +3 -3
  208. package/lib/esm/duet-scrollable_3.entry.js +3 -3
  209. package/lib/esm/duet-select.entry.js +2 -2
  210. package/lib/esm/duet-step_2.entry.js +3 -3
  211. package/lib/esm/duet-textarea.entry.js +3 -3
  212. package/lib/esm/duet-toggle.entry.js +2 -2
  213. package/lib/esm/duet-tooltip.entry.js +2 -2
  214. package/lib/esm/duet-tray.entry.js +3 -3
  215. package/lib/esm/duet-upload-aria-status.entry.js +1 -1
  216. package/lib/esm/duet-visually-hidden.entry.js +1 -1
  217. package/lib/esm/duet.js +2 -2
  218. package/lib/esm/{focus-utils-e649bb9d.js → focus-utils-b6b1e60d.js} +1 -1
  219. package/lib/esm/{index-fe6fd837.js → index-0b088451.js} +1 -1
  220. package/lib/esm/{input-utils-f4cafee1.js → input-utils-de45e099.js} +1 -1
  221. package/lib/esm/{keyboard-utils-6eb55cd5.js → keyboard-utils-88ea1007.js} +2 -1
  222. package/lib/esm/loader.js +2 -2
  223. package/lib/esm/themeable-component-e8fc98bf.js +13 -0
  224. package/lib/esm/{token-utils-e9a0cb88.js → token-utils-e9a69acf.js} +1 -1
  225. package/lib/esm/{tokens-57d98824.js → tokens-e110dc89.js} +0 -0
  226. package/lib/esm/{tokens.module-a13e9683.js → tokens.module-49cbf963.js} +0 -0
  227. package/lib/esm-es5/duet-action-button.entry.js +1 -1
  228. package/lib/esm-es5/duet-alert.entry.js +1 -1
  229. package/lib/esm-es5/duet-badge.entry.js +1 -1
  230. package/lib/esm-es5/duet-breadcrumb.entry.js +1 -1
  231. package/lib/esm-es5/duet-breadcrumbs.entry.js +1 -1
  232. package/lib/esm-es5/duet-button_2.entry.js +1 -1
  233. package/lib/esm-es5/duet-caption_4.entry.js +1 -1
  234. package/lib/esm-es5/duet-card.entry.js +1 -1
  235. package/lib/esm-es5/duet-checkbox.entry.js +1 -1
  236. package/lib/esm-es5/duet-choice_2.entry.js +1 -1
  237. package/lib/esm-es5/duet-collapsible.entry.js +1 -1
  238. package/lib/esm-es5/duet-combobox.entry.js +4 -0
  239. package/lib/esm-es5/duet-cookie-consent.entry.js +1 -1
  240. package/lib/esm-es5/duet-date-picker.entry.js +1 -1
  241. package/lib/esm-es5/duet-divider_2.entry.js +1 -1
  242. package/lib/esm-es5/duet-editable-table_3.entry.js +1 -1
  243. package/lib/esm-es5/duet-empty-state.entry.js +1 -1
  244. package/lib/esm-es5/duet-fieldset.entry.js +1 -1
  245. package/lib/esm-es5/duet-footer.entry.js +1 -1
  246. package/lib/esm-es5/duet-grid_2.entry.js +1 -1
  247. package/lib/esm-es5/duet-header_2.entry.js +2 -2
  248. package/lib/esm-es5/duet-hero.entry.js +1 -1
  249. package/lib/esm-es5/duet-icon.entry.js +1 -1
  250. package/lib/esm-es5/duet-input_2.entry.js +1 -1
  251. package/lib/esm-es5/duet-layout.entry.js +1 -1
  252. package/lib/esm-es5/duet-list_2.entry.js +1 -1
  253. package/lib/esm-es5/duet-modal.entry.js +1 -1
  254. package/lib/esm-es5/duet-notification_2.entry.js +1 -1
  255. package/lib/esm-es5/duet-number-input.entry.js +1 -1
  256. package/lib/esm-es5/duet-pagination_2.entry.js +1 -1
  257. package/lib/esm-es5/duet-progress.entry.js +1 -1
  258. package/lib/esm-es5/duet-radio_2.entry.js +1 -1
  259. package/lib/esm-es5/duet-range-slider.entry.js +1 -1
  260. package/lib/esm-es5/duet-scrollable_3.entry.js +1 -1
  261. package/lib/esm-es5/duet-select.entry.js +1 -1
  262. package/lib/esm-es5/duet-step_2.entry.js +1 -1
  263. package/lib/esm-es5/duet-textarea.entry.js +1 -1
  264. package/lib/esm-es5/duet-toggle.entry.js +1 -1
  265. package/lib/esm-es5/duet-tooltip.entry.js +1 -1
  266. package/lib/esm-es5/duet-tray.entry.js +1 -1
  267. package/lib/esm-es5/duet-upload-aria-status.entry.js +1 -1
  268. package/lib/esm-es5/duet-visually-hidden.entry.js +1 -1
  269. package/lib/esm-es5/duet.js +1 -1
  270. package/lib/esm-es5/focus-utils-b6b1e60d.js +4 -0
  271. package/lib/esm-es5/{index-fe6fd837.js → index-0b088451.js} +1 -1
  272. package/lib/esm-es5/input-utils-de45e099.js +4 -0
  273. package/lib/esm-es5/keyboard-utils-88ea1007.js +4 -0
  274. package/lib/esm-es5/loader.js +1 -1
  275. package/lib/esm-es5/themeable-component-e8fc98bf.js +4 -0
  276. package/lib/esm-es5/{token-utils-e9a0cb88.js → token-utils-e9a69acf.js} +1 -1
  277. package/lib/esm-es5/{tokens-57d98824.js → tokens-e110dc89.js} +0 -0
  278. package/lib/esm-es5/{tokens.module-a13e9683.js → tokens.module-49cbf963.js} +0 -0
  279. package/lib/html.html-data.json +56 -1
  280. package/lib/types/components/duet-combobox/duet-combobox-select-single.d.ts +8 -0
  281. package/lib/types/components/duet-combobox/duet-combobox-select.d.ts +14 -0
  282. package/lib/types/components/duet-combobox/duet-combobox.d.ts +131 -0
  283. package/lib/types/components/duet-date-picker/duet-date-picker.d.ts +4 -0
  284. package/lib/types/components/duet-footer/duet-footer.d.ts +4 -0
  285. package/lib/types/components/duet-header/duet-header.d.ts +8 -0
  286. package/lib/types/components/duet-input/duet-input.d.ts +17 -0
  287. package/lib/types/components.d.ts +115 -0
  288. package/package.json +7 -7
  289. package/lib/cjs/themeable-component-0c1be552.js +0 -12
  290. package/lib/duet/p-251ee915.system.entry.js +0 -4
  291. package/lib/duet/p-2759fa82.system.entry.js +0 -4
  292. package/lib/duet/p-2fd6f95a.system.js +0 -4
  293. package/lib/duet/p-35a8dcc6.entry.js +0 -4
  294. package/lib/duet/p-7385e892.entry.js +0 -4
  295. package/lib/duet/p-74780bca.system.js +0 -4
  296. package/lib/duet/p-898f30a5.js +0 -4
  297. package/lib/duet/p-9ad2878e.system.entry.js +0 -4
  298. package/lib/duet/p-9dfcd29a.js +0 -4
  299. package/lib/duet/p-a28cf57b.js +0 -4
  300. package/lib/duet/p-d1a4aa9c.entry.js +0 -4
  301. package/lib/duet/p-dc9de1e3.entry.js +0 -4
  302. package/lib/duet/p-efaa0c04.system.js +0 -4
  303. package/lib/esm/themeable-component-572685dd.js +0 -10
  304. package/lib/esm-es5/focus-utils-e649bb9d.js +0 -4
  305. package/lib/esm-es5/input-utils-f4cafee1.js +0 -4
  306. package/lib/esm-es5/keyboard-utils-6eb55cd5.js +0 -4
  307. package/lib/esm-es5/themeable-component-572685dd.js +0 -4
@@ -0,0 +1,386 @@
1
+ /*!
2
+ * Built with Duet Design System
3
+ */
4
+ import { h, F as Fragment, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-0b088451.js';
5
+ import { d as debounce } from './js-utils-52e0944c.js';
6
+ import { n as isEnterKey, f as isEscapeKey, o as isTabKey, b as isArrowUpKey, c as isArrowDownKey } from './keyboard-utils-88ea1007.js';
7
+ import { g as getLocaleString, a as getLanguage } from './language-utils-344d894c.js';
8
+ import { p as parsePossibleJSON } from './string-utils-2f1793b8.js';
9
+ import { i as inheritGlobalTheme } from './themeable-component-e8fc98bf.js';
10
+
11
+ const SelectSingle = ({ item, search = "", selected }) => {
12
+ const regEx = search !== "" ? new RegExp("(" + search.split(" ").join("|") + ")", "gi") : undefined;
13
+ return (h(Fragment, null,
14
+ selected && h("duet-icon", { class: "option-icon", name: "messaging-checked", size: "xx-small", margin: "none" }),
15
+ regEx ? (h("span", { class: "option-container", "aria-hidden": "true" },
16
+ h("span", { innerHTML: item.name.replace(regEx, '<span class="highlight">$&</span>') }))) : (item.name),
17
+ item.tags && h("span", { class: "option-tags" }, item.tags.join(", "))));
18
+ };
19
+
20
+ const DuetComboBoxSelect = ({ item, active, total, selected, label = undefined, clickHandler = e => {
21
+ e.preventDefault();
22
+ }, keyHandler = e => {
23
+ e.preventDefault();
24
+ }, search, }) => {
25
+ return (h("li", { class: {
26
+ "list-item": true,
27
+ option: true,
28
+ active: active,
29
+ selected: selected,
30
+ }, id: active ? "active_item" : "", "data-index": item.id, "aria-selected": active ? "true" : undefined, "aria-current": selected ? "true" : undefined, role: "option", "aria-label": label || `${item.name}, (${item.id + 1} of ${total})` },
31
+ h("a", { tabindex: "-1", onClick: e => clickHandler(e), onKeyUp: e => keyHandler(e), class: "option-link", "aria-label": label || `${item.name}, (${item.id + 1} of ${total})`, "aria-hidden": "true" },
32
+ h(SelectSingle, { item: item, search: search, selected: selected }))));
33
+ };
34
+
35
+ const duetComboboxCss = ".sc-duet-combobox-h{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;position:relative;width:auto;font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:#00294d}.duet-combobox-list.sc-duet-combobox{position:absolute;top:calc(100% - 12px);display:none;overflow:hidden;background:white;border-radius:0 4px;box-shadow:0 2px 10px 0 rgba(0, 41, 77, 0.1)}.duet-combobox-list.open.sc-duet-combobox{z-index:700;display:block}.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox{max-height:200px;padding:0.75rem 0;margin:0;overflow-y:scroll;font-weight:600;list-style:none;cursor:pointer;scroll-behavior:smooth}.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.sc-duet-combobox{padding:4px 0}.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.sc-duet-combobox:not(.selected){padding-left:16px}.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.sc-duet-combobox:not(.selected) .highlight.sc-duet-combobox{text-decoration:underline}.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.option.sc-duet-combobox .option-link.sc-duet-combobox{display:block;width:100%}.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.option.sc-duet-combobox .option-tags.sc-duet-combobox{float:right;padding-right:0.875rem;font-weight:400;color:#909599}.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.option-link.sc-duet-combobox{display:block;width:100%}.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.selected.sc-duet-combobox{padding-left:0;background:#cde5f1}.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.selected.option.sc-duet-combobox .option-icon.sc-duet-combobox{padding:0 8px 0 8px}.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.selected.option.sc-duet-combobox .option-tags.sc-duet-combobox{color:#909599}.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.active.sc-duet-combobox,.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.sc-duet-combobox:focus,.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.sc-duet-combobox:hover{color:white;background:#0077b3}.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.active.sc-duet-combobox .option-tags.sc-duet-combobox,.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.sc-duet-combobox:focus .option-tags.sc-duet-combobox,.duet-combobox-list.sc-duet-combobox .listbox.sc-duet-combobox .list-item.sc-duet-combobox:hover .option-tags.sc-duet-combobox{color:#e1e3e6}";
36
+
37
+ const DuetCombobox = class {
38
+ constructor(hostRef) {
39
+ registerInstance(this, hostRef);
40
+ this.duetChange = createEvent(this, "duetChange", 3);
41
+ // Safari doesnt properly support aria-activedecendatn, the code associated with this bool is a workaround for that,
42
+ // this should be removed when Safari fixes the issue
43
+ // see: https://a11ysupport.io/tests/apg__aria-1-2-combobox-with-list-autocomplete-example#assertion-aria-aria-activedescendant_attribute-convey_value-aria-combobox_role-vo_macos-safari
44
+ this.isSafari = false;
45
+ this.resizeObserver = new ResizeObserver(debounce(entries => {
46
+ var _a, _b;
47
+ // otherwise, something is wrong, expecting 1 element only
48
+ if ((entries === null || entries === void 0 ? void 0 : entries.length) === 1) {
49
+ const currentWidth = (_b = (_a = entries[0]) === null || _a === void 0 ? void 0 : _a.target) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width;
50
+ this.listContainer.style.width = `${currentWidth + 1}px`;
51
+ // this.listElement.style.width = `${currentWidth + 1}px`
52
+ }
53
+ }, 100));
54
+ this.processedItems = null;
55
+ this.inputWidth = 0;
56
+ this.inputValue = "";
57
+ this.selectionMsg = "";
58
+ this.listOpen = false;
59
+ // the selected item is based upon the DuetComboboxItem.id value
60
+ this.selectedItems = new Set();
61
+ // the activeItem number is based upon the array.index of the array stored in processedItems
62
+ this.activeItem = undefined;
63
+ /**
64
+ * Placeholder defaults
65
+ * @default { fi: "pp.kk.vvvv", en: "dd.mm.yyyy", sv: "dd.mm.åååå" }
66
+ */
67
+ this.accessibleLabelDefaults = {
68
+ en: {
69
+ heading: "Select:",
70
+ item: "{name}, ({current} of {total})",
71
+ itemFiltered: "{name}, ({current} of {total}, {hiddenItems} filtered)",
72
+ },
73
+ fi: {
74
+ heading: "Valitse:",
75
+ item: "{name}, ({current}/{total})",
76
+ itemFiltered: "{name}, ({current}/{total}, {hiddenItems} suodatettu)",
77
+ },
78
+ sv: {
79
+ heading: "Välj:",
80
+ item: "{name}, ({current} av {total})",
81
+ itemFiltered: "{name}, ({current} av {total}, {hiddenItems} filtrerade)",
82
+ },
83
+ };
84
+ /**
85
+ * Hint text to display before the user types into the date picker input.
86
+ * @default {
87
+ * heading: "Valitse:",
88
+ * item: "{0}, ({1}/{2})",
89
+ * itemFiltered: "{0}, ({1}/{2} - {3} suodatettu"
90
+ * }
91
+ */
92
+ this.accessibleLabels = getLocaleString(parsePossibleJSON(this.accessibleLabelDefaults), getLanguage());
93
+ /**
94
+ * Theme of the combobox.
95
+ */
96
+ this.theme = "";
97
+ /**
98
+ * Force the user to make a selection (typing things in the input field will only be used for list search)
99
+ */
100
+ this.force = false;
101
+ /**
102
+ * A hook to overwrite how the values are displayed in the input field after a User select an item
103
+ * @example (item) => `${item.name} (${item.value})`
104
+ * @default undefined
105
+ */
106
+ this.formatter = (item) => item && item.name ? item.name : "";
107
+ }
108
+ activeItemHandler(state) {
109
+ this.input.accessibleActiveDescendant = this.listOpen && (state || state === 0) ? `active_item` : "";
110
+ }
111
+ handleDocumentClick(e) {
112
+ //we want to remove all user text if they have NOT selected from the dropdown
113
+ const path = e.composedPath();
114
+ const isClickOutside = path.every(el => el !== this.element);
115
+ if (isClickOutside) {
116
+ this.updateInputText(true);
117
+ this.listOpen = false;
118
+ }
119
+ }
120
+ /**
121
+ * Exposes a formatter function to format the item value displayed after a user selects an item
122
+ * @param item: DuetComboboxItem
123
+ */
124
+ async formatItem(item) {
125
+ return this.formatter(item);
126
+ }
127
+ /**
128
+ * Component lifecycle events.
129
+ */
130
+ componentWillLoad() {
131
+ inheritGlobalTheme(this);
132
+ }
133
+ connectedCallback() {
134
+ if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
135
+ this.isSafari = true;
136
+ }
137
+ this.items = this.processedItems = parsePossibleJSON(this.items);
138
+ this.input = this.element.querySelector("duet-input");
139
+ this.input.addEventListener("duetChange", this.updateInputValue.bind(this));
140
+ this.input.addEventListener("click", () => {
141
+ this.inputValue.length ? (this.listOpen = true) : (this.listOpen = false);
142
+ });
143
+ this.element.addEventListener("keydown", this.handleInputKeyDownEvent.bind(this));
144
+ //add correct aria attributes to the input element
145
+ this.input.accessibleAutocomplete = "list";
146
+ this.input.accessibleControls = "duet-combobox-list-element";
147
+ }
148
+ disconnectedCallback() {
149
+ this.input.removeEventListener("duetChange", this.updateInputValue.bind(this));
150
+ this.input.removeEventListener("click", () => this.inputValue.length ? (this.listOpen = true) : (this.listOpen = false));
151
+ this.element.removeEventListener("keydown", this.handleInputKeyDownEvent.bind(this));
152
+ this.listElement.removeEventListener("click", e => {
153
+ e.stopPropagation();
154
+ });
155
+ this.resizeObserver.disconnect();
156
+ }
157
+ componentDidLoad() {
158
+ // observe resize events to dynamically adjust size of dropdown area
159
+ this.resizeObserver.observe(this.input);
160
+ this.listElement.addEventListener("click", e => {
161
+ e.stopPropagation();
162
+ });
163
+ }
164
+ /**
165
+ * Updates the input text based on the selected/clicked items.
166
+ * @param event - event
167
+ *'param item: DuetComboboxItem - the item that was selected
168
+ */
169
+ onListClick(e, item) {
170
+ e.preventDefault();
171
+ // update selected item with id
172
+ this.updateSelectedItems(item.id);
173
+ this.listOpen = false;
174
+ return this.listOpen;
175
+ }
176
+ /**
177
+ * Helper function that checks inputs in the field, compares it with the item list and returns true when inputvalue matches selectedItem id
178
+ * TODO: this should be disabled in multiple mode
179
+ */
180
+ shouldListBeFiltered() {
181
+ if (this.selectedItems.size && this.input.value === this.inputValue) {
182
+ const item = this.items.filter(item => this.selectedItems.has(item.id));
183
+ return !(this.formatter(item).toLowerCase() === this.input.value.toLowerCase());
184
+ }
185
+ return true;
186
+ }
187
+ /**
188
+ * Helper function that return correct collection depending on filter status returend by shouldListBeFiltered
189
+ */
190
+ returnFilteredOrNonFiltered() {
191
+ return this.processedItems
192
+ ? this.shouldListBeFiltered()
193
+ ? this.getFilteredItems()
194
+ : this.sortFilteredItems(this.processedItems)
195
+ : [];
196
+ }
197
+ /**
198
+ * Updates the selected items based on the item id.
199
+ * @param id
200
+ * @private
201
+ */
202
+ async updateSelectedItems(id) {
203
+ // for a multiple scenario wrap this in an if/else and just don't clear here
204
+ this.selectedItems.clear();
205
+ if (this.selectedItems) {
206
+ if (this.selectedItems.has(id)) {
207
+ this.selectedItems.delete(id);
208
+ }
209
+ else {
210
+ this.selectedItems.add(id);
211
+ }
212
+ }
213
+ await this.updateInputText();
214
+ }
215
+ /**
216
+ * Updates the input text based on the selected/clicked items.
217
+ * @param bool -override to clear if invoked by "click outside"
218
+ */
219
+ async updateInputText(isBlurred = false) {
220
+ const item = this.selectedItems.size === 0 ? [] : this.items.filter(item => this.selectedItems.has(item.id));
221
+ if (this.selectedItems.size === 1) {
222
+ this.input.value = ""; // set value to empty so that cursor position follows accordingly
223
+ this.input.value = await this.formatItem(item[0]);
224
+ this.input.scrollLeft = this.input.scrollWidth;
225
+ this.activeItem = undefined;
226
+ this.value = await this.formatItem(item[0]);
227
+ this.duetChange.emit({
228
+ value: item[0].value,
229
+ item: item[0],
230
+ component: "duet-combobox",
231
+ });
232
+ }
233
+ else if (isBlurred && this.selectedItems.size === 0) {
234
+ //if nothing is selected and a user clicks outside, we want the input field to clearly illustrate that nothing was selected
235
+ if (this.force) {
236
+ this.inputValue = "";
237
+ this.input.value = "";
238
+ }
239
+ this.activeItem = undefined;
240
+ }
241
+ this.listOpen = false;
242
+ }
243
+ updateInputValue(e) {
244
+ var _a;
245
+ this.inputValue = e.detail.value;
246
+ this.listOpen = String(this.inputValue).length > 0 && ((_a = this.getFilteredItems()) === null || _a === void 0 ? void 0 : _a.length) > 0;
247
+ }
248
+ handleInputKeyDownEvent(e) {
249
+ //if selection is made, close the list and update internal and external values
250
+ // this should be set to undefined on everything BUT up/down arrow according to the aria 1.1 specs
251
+ // https://www.w3.org/TR/wai-aria-practices-1.1/#combobox
252
+ this.input.accessibleActiveDescendant = undefined;
253
+ if (isEnterKey(e)) {
254
+ e.preventDefault();
255
+ this.selectActiveItem();
256
+ this.listOpen = false;
257
+ return;
258
+ }
259
+ //tabbing out or escaping, restore initial state
260
+ if (isEscapeKey(e) || isTabKey(e)) {
261
+ this.updateInputText(true);
262
+ this.listOpen = false;
263
+ return;
264
+ }
265
+ //handle arrow up/down navigation
266
+ let nextActiveItem = this.activeItem;
267
+ if (isArrowUpKey(e)) {
268
+ e.preventDefault();
269
+ nextActiveItem = this.activeItem - 1;
270
+ }
271
+ else if (isArrowDownKey(e)) {
272
+ e.preventDefault();
273
+ nextActiveItem = this.listOpen ? this.activeItem + 1 : this.activeItem;
274
+ this.listOpen = true;
275
+ }
276
+ if (isArrowDownKey(e) || isArrowUpKey(e)) {
277
+ const listItems = this.shouldListBeFiltered() ? this.getFilteredItems() : this.processedItems;
278
+ if (nextActiveItem < 0 || !nextActiveItem) {
279
+ nextActiveItem = 0;
280
+ }
281
+ if (nextActiveItem >= listItems.length) {
282
+ nextActiveItem = listItems.length - 1;
283
+ }
284
+ // this should be set to undefined on everything BUT up/down arrow according to the aria 1.1 specs
285
+ // https://www.w3.org/TR/wai-aria-practices-1.1/#combobox
286
+ this.input.accessibleActiveDescendant = "active_item";
287
+ this.activeItem = nextActiveItem;
288
+ this.scrollToActive();
289
+ }
290
+ this.announceActive();
291
+ return;
292
+ }
293
+ selectActiveItem() {
294
+ if (this.activeItem === undefined) {
295
+ return;
296
+ }
297
+ const filteredItem = this.returnFilteredOrNonFiltered();
298
+ const item = filteredItem[this.activeItem];
299
+ this.updateSelectedItems(item.id);
300
+ }
301
+ announceActive(items) {
302
+ if (!items) {
303
+ items = this.returnFilteredOrNonFiltered();
304
+ }
305
+ if (this.activeItem === undefined || this.activeItem === -1) {
306
+ return;
307
+ }
308
+ const item = items[this.activeItem];
309
+ this.selectionMsg = this.formatLabel(item, items.length, this.items.length);
310
+ }
311
+ //function that scrolls to the li element with the class "active"
312
+ scrollToActive() {
313
+ const activeElement = this.listElement.querySelector(".active");
314
+ if (activeElement) {
315
+ activeElement.scrollIntoView({
316
+ behavior: "smooth",
317
+ block: "center",
318
+ });
319
+ }
320
+ }
321
+ formatLabel(item, length, itemsLength) {
322
+ if (!item || itemsLength === undefined) {
323
+ return "";
324
+ }
325
+ const labelString = length === itemsLength ? this.accessibleLabels.item : this.accessibleLabels.itemFiltered;
326
+ return labelString
327
+ .replace("{name}", String(item.name))
328
+ .replace("{current}", String(this.activeItem + 1))
329
+ .replace("{total}", String(length))
330
+ .replace("{hiddenItems}", String(itemsLength - length));
331
+ }
332
+ /**
333
+ * Filter the items based on the input value
334
+ */
335
+ getFilteredItems() {
336
+ // filter items based on user inputs
337
+ const filteredItems = this.processedItems.filter(item =>
338
+ // filter by name and value
339
+ // if value contains inputvalue
340
+ String(item.value).toLowerCase().includes(this.inputValue.toLowerCase()) ||
341
+ // if name contains input value
342
+ String(item.name).toLowerCase().includes(this.inputValue.toLowerCase()) ||
343
+ // if the item is selected
344
+ this.selectedItems.has(item.id));
345
+ return this.sortFilteredItems(filteredItems);
346
+ }
347
+ /**
348
+ * Sort the return from getFilteredItems so that any item with and item.id that matches this.selectedItems is placed first
349
+ */
350
+ sortFilteredItems(items) {
351
+ if (items.length > 0) {
352
+ items
353
+ .filter(item => this.selectedItems.has(item.id))
354
+ .forEach(item => {
355
+ const index = items.indexOf(item);
356
+ items.splice(index, 1);
357
+ items.unshift(item);
358
+ });
359
+ }
360
+ return items;
361
+ }
362
+ /**
363
+ * render() function
364
+ * Always the last one in the class.
365
+ */
366
+ render() {
367
+ const selectElements = this.returnFilteredOrNonFiltered();
368
+ return (h(Host, { role: "combobox", "aria-expanded": this.listOpen ? "true" : "false", "aria-owns": this.listOpen ? "duet-combobox-list-element" : undefined, "aria-haspopup": "listbox", class: {
369
+ "duet-combobox": true,
370
+ [`duet-theme-${this.theme}`]: true,
371
+ } }, h("slot", null), this.isSafari && (h("duet-visually-hidden", { "aria-live": "assertive", "aria-atomic": "true", "aria-relevant": "all" }, this.selectionMsg)), h("div", { role: "list", class: {
372
+ "duet-combobox-list": true,
373
+ open: this.listOpen,
374
+ }, ref: el => (this.listContainer = el) }, h("ul", { role: "listbox", ref: el => (this.listElement = el), id: "duet-combobox-list-element", class: "listbox" }, this.processedItems &&
375
+ selectElements.map((item, index) => {
376
+ return (h(DuetComboBoxSelect, { item: item, active: index === this.activeItem, selected: this.selectedItems.has(item.id), search: this.inputValue, total: selectElements.length, clickHandler: e => this.onListClick(e, item), label: this.formatLabel(item, this.returnFilteredOrNonFiltered().length, this.items.length) }));
377
+ })))));
378
+ }
379
+ get element() { return getElement(this); }
380
+ static get watchers() { return {
381
+ "activeItem": ["activeItemHandler"]
382
+ }; }
383
+ };
384
+ DuetCombobox.style = duetComboboxCss;
385
+
386
+ export { DuetCombobox as duet_combobox };
@@ -1,8 +1,8 @@
1
1
  /*!
2
2
  * Built with Duet Design System
3
3
  */
4
- import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-fe6fd837.js';
5
- import { i as inheritGlobalTheme } from './themeable-component-572685dd.js';
4
+ import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-0b088451.js';
5
+ import { i as inheritGlobalTheme } from './themeable-component-e8fc98bf.js';
6
6
 
7
7
  const duetCookieConsentCss = "*,*::after,*::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}:host{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;position:fixed;right:0;bottom:0;left:0;z-index:950;display:block;width:100%;box-shadow:0 2px 20px 0 rgba(0, 0, 0, 0.2)}@media (min-width: 48em){:host{right:28px;bottom:28px;left:auto;width:25rem}}:host(:focus){outline:0}:host(.user-is-tabbing:focus){border-radius:4px;box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3}:host(.user-is-tabbing.duet-theme-turva:focus){box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a}.duet-cookie-consent{padding:20px;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:0.875rem;color:white !important;background-color:rgba(0, 21, 39, 0.9)}@supports (-webkit-backdrop-filter: none) or (backdrop-filter: none){.duet-cookie-consent{background:rgba(0, 21, 39, 0.8);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}}.duet-cookie-consent.duet-theme-turva{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";background-color:rgba(12, 14, 29, 0.9)}@supports (-webkit-backdrop-filter: none) or (backdrop-filter: none){.duet-cookie-consent.duet-theme-turva{background:rgba(12, 14, 29, 0.8)}}@media (min-width: 48em){.duet-cookie-consent{padding:20px;border-radius:4px}}.duet-cookie-consent-content{display:flex;align-items:center;max-width:1110px;margin:0 auto}.duet-cookie-consent-content .expand{flex:1}::slotted(a){font-weight:600;color:white !important;text-decoration:underline;white-space:nowrap}::slotted(a[target=_blank]){padding-right:16px;background:url(\"data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjZmZmIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEwLjUgMmExLjUgMS41IDAgMDEuMTQgM0gzLjc1Yy0uMzggMC0uNy4yOC0uNzQuNjVsLS4wMS4xdjE0LjVjMCAuMzguMjguNy42NS43NGwuMS4wMWgxNC41Yy4zOCAwIC43LS4yOC43NC0uNjVsLjAxLS4xdi02Ljg5YTEuNSAxLjUgMCAwMTMgMHY2Ljg5QTMuNzUgMy43NSAwIDAxMTguMjUgMjRIMy43NUEzLjc1IDMuNzUgMCAwMTAgMjAuMjVWNS43NUEzLjc1IDMuNzUgMCAwMTMuNzUgMnptMTItMmMuNzggMCAxLjQyLjYgMS41IDEuMzZWNy41YTEuNSAxLjUgMCAwMS0zIC4xNFY1LjEybC01LjQ0IDUuNDRhMS41IDEuNSAwIDAxLTIuMjItMmwuMS0uMTJMMTguODggM0gxNi41QTEuNSAxLjUgMCAwMTE1IDEuNjRWMS41YzAtLjc4LjYtMS40MiAxLjM2LTEuNWguMTR6Ii8+PC9zdmc+\") no-repeat right 50%;background-size:12px 10px}::slotted(a:focus){outline:0;box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3}.duet-theme-turva ::slotted(a:focus){outline:0;box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a}";
8
8
 
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * Built with Duet Design System
3
3
  */
4
- import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-fe6fd837.js';
4
+ import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-0b088451.js';
5
5
  import { c as createID } from './create-id-981107da.js';
6
- import { F as FocusGuard } from './focus-utils-e649bb9d.js';
6
+ import { F as FocusGuard } from './focus-utils-b6b1e60d.js';
7
7
  import { a as getLanguage, g as getLocaleString } from './language-utils-344d894c.js';
8
- import { i as inheritGlobalTheme } from './themeable-component-572685dd.js';
8
+ import { i as inheritGlobalTheme } from './themeable-component-e8fc98bf.js';
9
9
  import './string-utils-2f1793b8.js';
10
10
 
11
11
  const formatOptionsShort = { day: "numeric", month: "long" };
@@ -320,6 +320,7 @@ const DatePickerDay = ({ focusedDay, today, day, language, onDaySelect, onKeyboa
320
320
  * @param to
321
321
  */
322
322
  function range(from, to) {
323
+ console.log({ from, to });
323
324
  var result = [];
324
325
  for (var i = from; i <= to; i++) {
325
326
  result.push(i);
@@ -514,6 +515,10 @@ const DuetDatePicker = class {
514
515
  * This setting can be used alone or together with the min property.
515
516
  */
516
517
  this.max = "";
518
+ /**
519
+ * Increment to add to years, defaults to 10 for simplicity, if you need a larger selectionspace you can set it to 100
520
+ */
521
+ this.incrementYears = 10;
517
522
  this.enableActiveFocus = () => {
518
523
  this.focusTarget = "day-button";
519
524
  };
@@ -779,8 +784,8 @@ const DuetDatePicker = class {
779
784
  const maxDate = parseISODate(this.max);
780
785
  const prevMonthDisabled = minDate != null && minDate.getMonth() === focusedMonth && minDate.getFullYear() === focusedYear;
781
786
  const nextMonthDisabled = maxDate != null && maxDate.getMonth() === focusedMonth && maxDate.getFullYear() === focusedYear;
782
- let minYear = selectedYear - 10;
783
- let maxYear = selectedYear + 10;
787
+ let minYear = selectedYear - this.incrementYears;
788
+ let maxYear = selectedYear + this.incrementYears;
784
789
  if (minDate) {
785
790
  minYear = Math.max(minYear, minDate.getFullYear());
786
791
  }
@@ -1,8 +1,8 @@
1
1
  /*!
2
2
  * Built with Duet Design System
3
3
  */
4
- import { r as registerInstance, h, g as getElement, H as Host } from './index-fe6fd837.js';
5
- import { i as inheritGlobalTheme } from './themeable-component-572685dd.js';
4
+ import { r as registerInstance, h, g as getElement, H as Host } from './index-0b088451.js';
5
+ import { i as inheritGlobalTheme } from './themeable-component-e8fc98bf.js';
6
6
 
7
7
  const duetDividerCss = "*,*::after,*::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}:host{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-divider{-webkit-user-select:none;user-select:none;display:block;width:100%;height:1px;margin-top:36px !important;margin-bottom:28px;background:#e1e3e6}.duet-divider.duet-p-0{padding:0 !important}.duet-divider.duet-m-0{margin:0 !important}.duet-divider.duet-m-s{margin-bottom:16px !important;margin-top:0 !important}.duet-divider.duet-theme-turva{background:#e4e4e6}";
8
8
 
@@ -1,12 +1,12 @@
1
1
  /*!
2
2
  * Built with Duet Design System
3
3
  */
4
- import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-fe6fd837.js';
4
+ import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-0b088451.js';
5
5
  import { f as fieldSorter, d as debounce } from './js-utils-52e0944c.js';
6
- import { i as isKeyboardClick } from './keyboard-utils-6eb55cd5.js';
6
+ import { i as isKeyboardClick } from './keyboard-utils-88ea1007.js';
7
7
  import { g as getLocaleString, s as sanitizeString } from './language-utils-344d894c.js';
8
- import { i as inheritGlobalTheme } from './themeable-component-572685dd.js';
9
- import { m as mediaQueryMedium, h as mediaQueryLarge, i as mediaQueryXLarge, j as mediaQueryXxLarge, k as mediaQueryXxxLarge, l as mediaQuerySmall, n as sizeNavigation, s as sizeHeader } from './tokens.module-a13e9683.js';
8
+ import { i as inheritGlobalTheme } from './themeable-component-e8fc98bf.js';
9
+ import { m as mediaQueryMedium, h as mediaQueryLarge, i as mediaQueryXLarge, j as mediaQueryXxLarge, k as mediaQueryXxxLarge, l as mediaQuerySmall, n as sizeNavigation, s as sizeHeader } from './tokens.module-49cbf963.js';
10
10
  import { c as createID } from './create-id-981107da.js';
11
11
  import './string-utils-2f1793b8.js';
12
12
 
@@ -534,7 +534,7 @@ const SuccessItem = ({ data, showLinks }) => {
534
534
  const { item, size, uploaded, url, meta } = data;
535
535
  const { name } = item;
536
536
  const ContentName = (h("span", { class: "duet-upload-item-name" },
537
- h("duet-icon", { margin: "none", size: "xx-small", name: "messaging-attachment" }),
537
+ h("duet-icon", { margin: "none", size: "x-small", name: "messaging-attachment" }),
538
538
  h("duet-spacer", { size: "xx-small", direction: "horizontal" }),
539
539
  name));
540
540
  const SizeText = (h("span", { class: "duet-upload-item-size", style: { fontSize: "14px", fontWeight: "400" } },
@@ -673,7 +673,7 @@ const makeXhrRequest = ({ payload, options, onFailure, onSuccess, onProgress })
673
673
  return xhr;
674
674
  };
675
675
 
676
- const duetUploadCss = "*,*::after,*::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}:host{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}::slotted([slot=header]){margin-bottom:16px}::slotted([slot=fileheader]){margin:16px 0 0 0}::slotted([slot=filefooter]){margin-top:16px}.duet-upload{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}.duet-upload-item-size{font-size:0.75rem;font-weight:400}.duet-upload-filelist{margin-bottom:25px}.duet-upload-filelist-empty{display:flex;align-items:center;justify-content:center;width:100%;height:75px;margin:0 auto;font-size:1rem;font-weight:400;background-color:#f5f8fa}.duet-upload-editable-table-header-hidden{display:none}.duet-upload-editable-table tbody .duet-upload-editable-table-data{padding:0 !important;border:0}.duet-upload-editable-table duet-editable-table tfoot,.duet-upload-editable-table duet-editable-table thead{display:none}.duet-upload-editable-table duet-editable-table .duet-editable-table-content{padding-right:0 !important;padding-left:0 !important}.duet-upload-editable-table duet-editable-table duet-table .duet-table-action-row td{padding:0.75rem 0 !important}.duet-upload-editable-table duet-editable-table duet-table .duet-table-action-row td:last-child{padding-right:0 !important}.duet-upload-editable-table duet-editable-table .duet-editable-table-row-inprogress duet-action-button::part(button){border:0}";
676
+ const duetUploadCss = "*,*::after,*::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}:host{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}::slotted([slot=header]){margin-bottom:16px}::slotted([slot=fileheader]){margin:16px 0 0 0}::slotted([slot=filefooter]){margin-top:16px}.duet-upload{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}.duet-upload-item-size{font-size:0.75rem;font-weight:400}.duet-upload-filelist{margin-bottom:25px}.duet-upload-filelist-empty{display:flex;align-items:center;justify-content:center;width:100%;height:75px;margin:0 auto;font-size:1rem;font-weight:400;background-color:#f5f8fa}.duet-upload-filelist-empty-label{font-size:1rem;font-weight:400}.duet-upload-editable-table-header-hidden{display:none}.duet-upload-editable-table tbody .duet-upload-editable-table-data{padding:0 !important;border:0}.duet-upload-editable-table duet-editable-table tfoot,.duet-upload-editable-table duet-editable-table thead{display:none}.duet-upload-editable-table duet-editable-table .duet-editable-table-content{padding-right:0 !important;padding-left:0 !important}.duet-upload-editable-table duet-editable-table duet-table .duet-table-action-row td{padding:0.75rem 0 !important}.duet-upload-editable-table duet-editable-table duet-table .duet-table-action-row td:last-child{padding-right:0 !important}.duet-upload-editable-table duet-editable-table .duet-editable-table-row-inprogress duet-action-button::part(button){border:0}.duet-upload-editable-table .duet-upload-item-name duet-icon{position:relative;top:2px}duet-paragraph::part(duet-paragraph){word-break:break-word}";
677
677
 
678
678
  const DuetUpload = class {
679
679
  constructor(hostRef) {
@@ -1422,7 +1422,9 @@ const DuetUpload = class {
1422
1422
  "duet-upload-filelist-empty": !this.files.size,
1423
1423
  "duet-upload-filelist": true,
1424
1424
  "duet-upload-filelist-filled": this.files.size,
1425
- }, id: this.labelId, for: identifier }, this.fileListEmpty)), !!this.files.size && h("slot", { name: "fileheader" }), !!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 })), !!this.files.size && this.renderEditableTableGroups(), !!this.files.size && h("slot", { name: "filefooter" }), h("duet-spacer", { size: "large" }), !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)), h("duet-spacer", { size: "medium" }), (this.fileMaxReached || this.bytesMaxReached) && (h("duet-alert", { part: this.identifier ? `${this.identifier}-error-notification` : "duet-upload-error-notification" }, this.fileMaxReached && getI18nError("duet-upload-301"), this.bytesMaxReached && getI18nError("duet-upload-202"))), h("duet-spacer", { size: "medium" }), h("duet-visually-hidden", null, h("input", { ref: input => {
1425
+ }, id: this.labelId, for: identifier }, h("span", { class: {
1426
+ "duet-upload-filelist-empty-label": !this.files.size,
1427
+ } }, this.fileListEmpty))), !!this.files.size && h("slot", { name: "fileheader" }), !!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 })), !!this.files.size && this.renderEditableTableGroups(), !!this.files.size && h("slot", { name: "filefooter" }), h("duet-spacer", { size: "large" }), !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)), h("duet-spacer", { size: "medium" }), (this.fileMaxReached || this.bytesMaxReached) && (h("duet-alert", { part: this.identifier ? `${this.identifier}-error-notification` : "duet-upload-error-notification" }, this.fileMaxReached && getI18nError("duet-upload-301"), this.bytesMaxReached && getI18nError("duet-upload-202"))), h("duet-spacer", { size: "medium" }), h("duet-visually-hidden", null, h("input", { ref: input => {
1426
1428
  this.nativeInput = input;
1427
1429
  }, accept: !this.limitSelection ? undefined : `${this.allowedMimetypes},${this.allowedExtensions}`, onBlur: this.onBlur, onFocus: this.onFocus, onChange: e => this.onChange(e), type: "file", class: {
1428
1430
  "duet-upload": true,
@@ -1,8 +1,8 @@
1
1
  /*!
2
2
  * Built with Duet Design System
3
3
  */
4
- import { r as registerInstance, h, H as Host } from './index-fe6fd837.js';
5
- import { i as inheritGlobalTheme } from './themeable-component-572685dd.js';
4
+ import { r as registerInstance, h, H as Host } from './index-0b088451.js';
5
+ import { i as inheritGlobalTheme } from './themeable-component-e8fc98bf.js';
6
6
 
7
7
  const duetEmptyStateCss = "*,*::after,*::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}:host{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;display:block;width:100%;height:100%}.duet-empty-state{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;width:100%;height:100%;padding:48px;color:#00294d;text-align:center;background:#f5f8fa;border-radius:4px}.duet-empty-state.duet-theme-turva{color:#171c3a;background:#f5f5f7}";
8
8
 
@@ -1,9 +1,9 @@
1
1
  /*!
2
2
  * Built with Duet Design System
3
3
  */
4
- import { r as registerInstance, h, H as Host, g as getElement } from './index-fe6fd837.js';
4
+ import { r as registerInstance, h, H as Host, g as getElement } from './index-0b088451.js';
5
5
  import { c as createID } from './create-id-981107da.js';
6
- import { i as inheritGlobalTheme } from './themeable-component-572685dd.js';
6
+ import { i as inheritGlobalTheme } from './themeable-component-e8fc98bf.js';
7
7
 
8
8
  const duetFieldsetCss = "*,*::after,*::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}:host{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;margin-bottom:12px !important;display:block;width:100%}:host(.duet-m-0){margin:0 !important}fieldset{border:0}legend{position:absolute !important;top:0;width:1px !important;height:1px !important;padding:0 !important;overflow:hidden !important;clip:rect(1px, 1px, 1px, 1px) !important;border:0 !important}.duet-legend-wrapper{position:relative;display:block;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:600;line-height:1.5;color:#00294d;text-align:left;background:transparent}.duet-theme-turva .duet-legend-wrapper{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}.duet-fieldset-label{margin-bottom:12px !important;margin-top:8px}.duet-legend-has-caption .duet-fieldset-label{margin-bottom:6px !important}.duet-legend-has-tooltip .duet-fieldset-label{padding-right:36px}@media (min-width: 48em){.duet-legend-has-tooltip .duet-fieldset-label{margin-bottom:3px !important;padding-right:0}}@media (min-width: 48em){.duet-legend-has-tooltip.duet-legend-has-caption .duet-fieldset-label{margin-bottom:-3px !important}}.duet-fieldset-caption{margin-bottom:12px !important}.duet-fieldset-help{display:block;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:0.875rem;font-weight:400;line-height:1.25;color:#de2362;border-radius:4px}.duet-fieldset-help span{display:block;margin-top:12px}.duet-theme-turva .duet-fieldset-help{color:#e02a0d}::slotted(duet-tooltip){position:absolute;top:4px;right:0}@media (min-width: 48em){::slotted(duet-tooltip){position:relative;right:auto}}.duet-legend-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}";
9
9
 
@@ -1,12 +1,12 @@
1
1
  /*!
2
2
  * Built with Duet Design System
3
3
  */
4
- import { r as registerInstance, c as createEvent$1, h, F as Fragment, g as getElement } from './index-fe6fd837.js';
4
+ import { r as registerInstance, c as createEvent$1, h, F as Fragment, g as getElement } from './index-0b088451.js';
5
5
  import { a as actionNewWindowSmall } from './action-new-window-small-1945be91.js';
6
6
  import { D as DuetStringsExternalDefaults } from './common-strings-97e04e4b.js';
7
7
  import { a as getLanguage, g as getLocaleString } from './language-utils-344d894c.js';
8
8
  import { p as parsePossibleJSON } from './string-utils-2f1793b8.js';
9
- import { i as inheritGlobalTheme } from './themeable-component-572685dd.js';
9
+ import { i as inheritGlobalTheme } from './themeable-component-e8fc98bf.js';
10
10
 
11
11
  var actionArrowRight={"title":"action-arrow-right","tags":"action arrow right caret","svg":"<svg fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" role=\"img\"><path d=\"M5.499 24a.752.752 0 0 1-.53-1.281L15.689 12 4.969 1.28c-.142-.141-.22-.33-.22-.53s.078-.389.22-.53c.141-.142.33-.22.53-.22s.389.078.53.22l10.72 10.72a1.5 1.5 0 0 1 .001 2.119L6.029 23.78a.743.743 0 0 1-.53.22z\"/></svg>"};
12
12
 
@@ -126,9 +126,9 @@ const DuetFooter = class {
126
126
  "duet-m-0": this.margin === "none",
127
127
  "duet-theme-turva": this.theme === "turva",
128
128
  "duet-footer-simple": this.variation === "simple",
129
- } }, h("div", { class: "duet-footer-wrapper" }, h("div", { class: "duet-footer-top" }, this.variation !== "simple" && (h("duet-logo", { href: this.logoHref, onClick: this.handleLogoClick, size: "large", inverse: true, language: this.language, theme: this.theme })), this.processedItems &&
129
+ } }, h("div", { class: "duet-footer-wrapper" }, h("div", { class: "duet-footer-top", part: "top" }, this.variation !== "simple" && (h("duet-logo", { href: this.logoHref, onClick: this.handleLogoClick, size: "large", inverse: true, language: this.language, theme: this.theme })), this.processedItems &&
130
130
  this.variation !== "simple" &&
131
- this.processedItems.map(item => (h("a", { class: "duet-footer-link", href: item.href, id: item.id, target: item.external ? "_blank" : "_self", onClick: event => this.handleItemClick(event, item) }, h("div", { class: "duet-footer-icon" }, h("duet-icon", { size: "medium", margin: "none", name: item.icon, color: "currentColor" })), h("span", null, item.label), item.external && h("duet-visually-hidden", null, ", ", this.accessibleLabelExternal), h("div", { class: "duet-footer-arrow" }, item.external ? (h("duet-icon", { icon: actionNewWindow.svg, size: "xx-small", margin: "none", color: "currentColor" })) : (h("duet-icon", { icon: actionArrowRight.svg, size: "auto", margin: "none", color: "currentColor" }))))))), h("p", { class: "duet-footer-menu" }, h("span", { class: "duet-footer-copyright" }, `${copyrightLabel} ${new Date().getFullYear()}`), this.processedMenu && (h(Fragment, null, h("span", { class: "duet-footer-divider", role: "presentation", "aria-hidden": "true" }, "/"), this.processedMenu.map(item => (h("a", { href: item.href, id: item.id, target: item.external ? "_blank" : "_self", onClick: event => this.handleMenuClick(event, item) }, item.label, item.external && (h(Fragment, null, h("duet-visually-hidden", null, ", ", this.accessibleLabelExternal), h("div", { class: "duet-footer-external" }, h("duet-icon", { icon: actionNewWindowSmall.svg, size: "xx-small", margin: "none", color: "currentColor" })))), h("span", { class: "duet-footer-divider", role: "presentation", "aria-hidden": "true" }, "/"))))))))));
131
+ this.processedItems.map(item => (h("a", { class: "duet-footer-link", href: item.href, id: item.id, target: item.external ? "_blank" : "_self", onClick: event => this.handleItemClick(event, item) }, h("div", { class: "duet-footer-icon" }, h("duet-icon", { size: "medium", margin: "none", name: item.icon, color: "currentColor" })), h("span", null, item.label), item.external && h("duet-visually-hidden", null, ", ", this.accessibleLabelExternal), h("div", { class: "duet-footer-arrow" }, item.external ? (h("duet-icon", { icon: actionNewWindow.svg, size: "xx-small", margin: "none", color: "currentColor" })) : (h("duet-icon", { icon: actionArrowRight.svg, size: "auto", margin: "none", color: "currentColor" }))))))), h("p", { class: "duet-footer-menu", part: "menu" }, h("span", { class: "duet-footer-copyright" }, `${copyrightLabel} ${new Date().getFullYear()}`), this.processedMenu && (h(Fragment, null, h("span", { class: "duet-footer-divider", role: "presentation", "aria-hidden": "true" }, "/"), this.processedMenu.map(item => (h("a", { href: item.href, id: item.id, target: item.external ? "_blank" : "_self", onClick: event => this.handleMenuClick(event, item) }, item.label, item.external && (h(Fragment, null, h("duet-visually-hidden", null, ", ", this.accessibleLabelExternal), h("div", { class: "duet-footer-external" }, h("duet-icon", { icon: actionNewWindowSmall.svg, size: "xx-small", margin: "none", color: "currentColor" })))), h("span", { class: "duet-footer-divider", role: "presentation", "aria-hidden": "true" }, "/"))))))))));
132
132
  }
133
133
  get element() { return getElement(this); }
134
134
  static get watchers() { return {
@@ -1,10 +1,10 @@
1
1
  /*!
2
2
  * Built with Duet Design System
3
3
  */
4
- import { r as registerInstance, h, g as getElement, H as Host } from './index-fe6fd837.js';
5
- import { m as media_query_large, a as media_query_medium, b as media_query_small } from './tokens-57d98824.js';
4
+ import { r as registerInstance, h, g as getElement, H as Host } from './index-0b088451.js';
5
+ import { m as media_query_large, a as media_query_medium, b as media_query_small } from './tokens-e110dc89.js';
6
6
  import { w as watchForOptions, a as watchForElement } from './watch-options-dd55bce8.js';
7
- import { i as inheritGlobalTheme } from './themeable-component-572685dd.js';
7
+ import { i as inheritGlobalTheme } from './themeable-component-e8fc98bf.js';
8
8
 
9
9
  const duetGridCss = ".sc-duet-grid-h{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;display:flex !important;flex-direction:column !important;align-items:flex-start !important;justify-content:flex-start !important;width:100%;max-width:100%;height:auto}@media (min-width: 36em){.duet-grid-breakpoint-small.sc-duet-grid-h{flex-direction:row !important}}@media (min-width: 48em){.duet-grid-breakpoint-medium.sc-duet-grid-h{flex-direction:row !important}}@media (min-width: 64.0625em){.duet-grid-breakpoint-x-large.sc-duet-grid-h{flex-direction:row !important}}.duet-grid-wrap.sc-duet-grid-h{flex-wrap:wrap !important}.duet-no-stacking.sc-duet-grid-h{flex-direction:row !important}.duet-grid-direction-vertical.duet-grid-breakpoint-small.sc-duet-grid-h{flex-direction:column !important}@media (min-width: 36em){.duet-grid-direction-vertical.duet-grid-breakpoint-small.sc-duet-grid-h{flex-direction:column !important}}.duet-grid-direction-vertical.duet-grid-breakpoint-medium.sc-duet-grid-h{flex-direction:column !important}@media (min-width: 48em){.duet-grid-direction-vertical.duet-grid-breakpoint-medium.sc-duet-grid-h{flex-direction:column !important}}.duet-grid-direction-vertical.duet-grid-breakpoint-x-large.sc-duet-grid-h{flex-direction:column !important}@media (min-width: 64.0625em){.duet-grid-direction-vertical.duet-grid-breakpoint-x-large.sc-duet-grid-h{flex-direction:column !important}}.duet-grid-align-top.duet-no-stacking.sc-duet-grid-h{align-items:flex-start !important}.duet-grid-align-bottom.duet-no-stacking.sc-duet-grid-h{align-items:flex-end !important}.duet-grid-align-center.duet-no-stacking.sc-duet-grid-h{align-items:center !important}.duet-grid-align-stretch.duet-no-stacking.sc-duet-grid-h{align-items:stretch !important}.duet-grid-align-baseline.duet-no-stacking.sc-duet-grid-h{align-items:baseline !important}@media (min-width: 36em){.duet-grid-align-top.duet-grid-breakpoint-small.sc-duet-grid-h{align-items:flex-start !important}}@media (min-width: 36em){.duet-grid-align-bottom.duet-grid-breakpoint-small.sc-duet-grid-h{align-items:flex-end !important}}@media (min-width: 36em){.duet-grid-align-center.duet-grid-breakpoint-small.sc-duet-grid-h{align-items:center !important}}@media (min-width: 36em){.duet-grid-align-stretch.duet-grid-breakpoint-small.sc-duet-grid-h{align-items:stretch !important}}@media (min-width: 36em){.duet-grid-align-baseline.duet-grid-breakpoint-small.sc-duet-grid-h{align-items:baseline !important}}@media (min-width: 48em){.duet-grid-align-top.duet-grid-breakpoint-medium.sc-duet-grid-h{align-items:flex-start !important}}@media (min-width: 48em){.duet-grid-align-bottom.duet-grid-breakpoint-medium.sc-duet-grid-h{align-items:flex-end !important}}@media (min-width: 48em){.duet-grid-align-center.duet-grid-breakpoint-medium.sc-duet-grid-h{align-items:center !important}}@media (min-width: 48em){.duet-grid-align-stretch.duet-grid-breakpoint-medium.sc-duet-grid-h{align-items:stretch !important}}@media (min-width: 48em){.duet-grid-align-baseline.duet-grid-breakpoint-medium.sc-duet-grid-h{align-items:baseline !important}}@media (min-width: 64.0625em){.duet-grid-align-top.duet-grid-breakpoint-x-large.sc-duet-grid-h{align-items:flex-start !important}}@media (min-width: 64.0625em){.duet-grid-align-bottom.duet-grid-breakpoint-x-large.sc-duet-grid-h{align-items:flex-end !important}}@media (min-width: 64.0625em){.duet-grid-align-center.duet-grid-breakpoint-x-large.sc-duet-grid-h{align-items:center !important}}@media (min-width: 64.0625em){.duet-grid-align-stretch.duet-grid-breakpoint-x-large.sc-duet-grid-h{align-items:stretch !important}}@media (min-width: 64.0625em){.duet-grid-align-baseline.duet-grid-breakpoint-x-large.sc-duet-grid-h{align-items:baseline !important}}.duet-grid-distribution-left.sc-duet-grid-h{justify-content:flex-start !important}.duet-grid-distribution-right.sc-duet-grid-h{justify-content:flex-end !important}.duet-grid-distribution-center.sc-duet-grid-h{justify-content:center !important}.duet-grid-distribution-between.sc-duet-grid-h{justify-content:space-between !important}.duet-grid-distribution-around.sc-duet-grid-h{justify-content:space-around !important}.duet-grid-distribution-evenly.sc-duet-grid-h{justify-content:space-evenly !important}@media (max-width: 35.9375em){.duet-grid-mobile-left.sc-duet-grid-h{align-items:flex-start !important;justify-content:flex-start !important;text-align:left !important}}@media (max-width: 35.9375em){.duet-grid-mobile-center.sc-duet-grid-h{align-items:center !important;justify-content:center !important;text-align:center !important}.duet-grid-mobile-center.sc-duet-grid-h *.sc-duet-grid{text-align:center !important}}@media (max-width: 35.9375em){.duet-grid-mobile-right.sc-duet-grid-h{align-items:flex-end !important;justify-content:flex-end !important;text-align:right !important}.duet-grid-mobile-right.sc-duet-grid-h *.sc-duet-grid{text-align:right !important}}";
10
10