@duetds/components 10.4.0 → 10.6.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 (486) hide show
  1. package/hydrate/index.js +686 -318
  2. package/hydrate/index.mjs +686 -318
  3. package/lib/cjs/{a11y-utils-BXDHn_nL.js → a11y-utils-CgWjS7yq.js} +1 -1
  4. package/lib/cjs/{app-globals-Bs3-XKhd.js → app-globals-D68ciWsb.js} +1 -1
  5. package/lib/cjs/duet-action-button.cjs.entry.js +6 -6
  6. package/lib/cjs/duet-alert.cjs.entry.js +4 -4
  7. package/lib/cjs/duet-badge.cjs.entry.js +29 -6
  8. package/lib/cjs/duet-banner.cjs.entry.js +15 -16
  9. package/lib/cjs/duet-breadcrumb.cjs.entry.js +7 -7
  10. package/lib/cjs/duet-breadcrumbs.cjs.entry.js +7 -7
  11. package/lib/cjs/duet-button_2.cjs.entry.js +9 -9
  12. package/lib/cjs/duet-callout.cjs.entry.js +5 -5
  13. package/lib/cjs/duet-caption_4.cjs.entry.js +13 -13
  14. package/lib/cjs/duet-card.cjs.entry.js +21 -10
  15. package/lib/cjs/duet-checkbox.cjs.entry.js +3 -3
  16. package/lib/cjs/duet-checkmark.cjs.entry.js +4 -4
  17. package/lib/cjs/duet-chip.cjs.entry.js +29 -16
  18. package/lib/cjs/duet-choice_2.cjs.entry.js +20 -22
  19. package/lib/cjs/duet-collapsible.cjs.entry.js +4 -4
  20. package/lib/cjs/duet-combobox.cjs.entry.js +6 -7
  21. package/lib/cjs/duet-contact-card.cjs.entry.js +17 -7
  22. package/lib/cjs/duet-cookie-consent.cjs.entry.js +3 -3
  23. package/lib/cjs/duet-date-picker.cjs.entry.js +128 -14
  24. package/lib/cjs/duet-divider_2.cjs.entry.js +6 -6
  25. package/lib/cjs/duet-editable-table_3.cjs.entry.js +17 -17
  26. package/lib/cjs/duet-empty-state.cjs.entry.js +4 -4
  27. package/lib/cjs/duet-fieldset.cjs.entry.js +6 -6
  28. package/lib/cjs/duet-file-chooser.cjs.entry.js +3 -3
  29. package/lib/cjs/duet-footer.cjs.entry.js +9 -9
  30. package/lib/cjs/duet-grid_2.cjs.entry.js +7 -7
  31. package/lib/cjs/duet-header_2.cjs.entry.js +7 -7
  32. package/lib/cjs/duet-hero.cjs.entry.js +22 -21
  33. package/lib/cjs/duet-icon.cjs.entry.js +7 -7
  34. package/lib/cjs/duet-indicator.cjs.entry.js +5 -5
  35. package/lib/cjs/duet-input_2.cjs.entry.js +132 -23
  36. package/lib/cjs/duet-layout.cjs.entry.js +7 -7
  37. package/lib/cjs/duet-list_2.cjs.entry.js +5 -5
  38. package/lib/cjs/duet-menu-bar-button.cjs.entry.js +4 -4
  39. package/lib/cjs/duet-menu-bar-dropdown-link.cjs.entry.js +5 -5
  40. package/lib/cjs/duet-menu-bar-dropdown.cjs.entry.js +7 -7
  41. package/lib/cjs/duet-menu-bar-item.cjs.entry.js +7 -7
  42. package/lib/cjs/duet-menu-bar-link.cjs.entry.js +4 -4
  43. package/lib/cjs/duet-menu-bar.cjs.entry.js +6 -6
  44. package/lib/cjs/duet-modal.cjs.entry.js +15 -15
  45. package/lib/cjs/duet-multiselect.cjs.entry.js +11 -11
  46. package/lib/cjs/duet-nav.cjs.entry.js +3 -3
  47. package/lib/cjs/duet-notification_2.cjs.entry.js +10 -10
  48. package/lib/cjs/duet-number-input.cjs.entry.js +14 -12
  49. package/lib/cjs/duet-overlay.cjs.entry.js +3 -3
  50. package/lib/cjs/duet-page-heading.cjs.entry.js +20 -5
  51. package/lib/cjs/duet-pagination_2.cjs.entry.js +20 -21
  52. package/lib/cjs/duet-panel.cjs.entry.js +4 -4
  53. package/lib/cjs/duet-phone-input.cjs.entry.js +23 -6
  54. package/lib/cjs/duet-popup-menu_2.cjs.entry.js +10 -10
  55. package/lib/cjs/duet-progress.cjs.entry.js +3 -3
  56. package/lib/cjs/duet-promo-card.cjs.entry.js +20 -8
  57. package/lib/cjs/duet-radio_2.cjs.entry.js +7 -10
  58. package/lib/cjs/duet-range-slider.cjs.entry.js +8 -8
  59. package/lib/cjs/duet-scrollable_3.cjs.entry.js +18 -18
  60. package/lib/cjs/duet-section-layout.cjs.entry.js +4 -4
  61. package/lib/cjs/duet-select.cjs.entry.js +9 -9
  62. package/lib/cjs/duet-shaped-image.cjs.entry.js +4 -4
  63. package/lib/cjs/duet-share-chart-item.cjs.entry.js +2 -2
  64. package/lib/cjs/duet-share-chart.cjs.entry.js +8 -8
  65. package/lib/cjs/duet-show-more.cjs.entry.js +6 -6
  66. package/lib/cjs/duet-slideout-lang.cjs.entry.js +4 -4
  67. package/lib/cjs/duet-slideout-link.cjs.entry.js +7 -7
  68. package/lib/cjs/duet-slideout-panel-dropdown.cjs.entry.js +6 -6
  69. package/lib/cjs/duet-slideout-panel.cjs.entry.js +13 -13
  70. package/lib/cjs/duet-slideout.cjs.entry.js +20 -14
  71. package/lib/cjs/duet-status-icon.cjs.entry.js +3 -3
  72. package/lib/cjs/duet-step_2.cjs.entry.js +7 -7
  73. package/lib/cjs/duet-submenu-bar-dropdown-link.cjs.entry.js +5 -5
  74. package/lib/cjs/duet-submenu-bar-dropdown.cjs.entry.js +7 -7
  75. package/lib/cjs/duet-submenu-bar-item.cjs.entry.js +7 -7
  76. package/lib/cjs/duet-submenu-bar-link.cjs.entry.js +4 -4
  77. package/lib/cjs/duet-submenu-bar.cjs.entry.js +7 -7
  78. package/lib/cjs/duet-textarea.cjs.entry.js +8 -8
  79. package/lib/cjs/duet-toggle.cjs.entry.js +9 -9
  80. package/lib/cjs/duet-toolbar-dropdown-link.cjs.entry.js +5 -5
  81. package/lib/cjs/duet-toolbar-dropdown.cjs.entry.js +7 -7
  82. package/lib/cjs/duet-toolbar-item.cjs.entry.js +8 -8
  83. package/lib/cjs/duet-toolbar-link.cjs.entry.js +4 -4
  84. package/lib/cjs/duet-toolbar.cjs.entry.js +4 -4
  85. package/lib/cjs/duet-tooltip-button_2.cjs.entry.js +14 -12
  86. package/lib/cjs/duet-tooltip.cjs.entry.js +25 -8
  87. package/lib/cjs/duet-tray.cjs.entry.js +7 -7
  88. package/lib/cjs/duet-upload-aria-status.cjs.entry.js +2 -2
  89. package/lib/cjs/duet-upload-item.cjs.entry.js +6 -6
  90. package/lib/cjs/duet-visually-hidden.cjs.entry.js +2 -2
  91. package/lib/cjs/duet.cjs.js +3 -3
  92. package/lib/cjs/{errorcodes.utils-W6UQ3hgy.js → errorcodes.utils-C0tQ3k6Z.js} +1 -1
  93. package/lib/cjs/{focus-utils-KTKpjKRi.js → focus-utils-tCoGOO7d.js} +1 -1
  94. package/lib/cjs/{index-C7Yvi8y8.js → index-BeiMjjVl.js} +9 -9
  95. package/lib/cjs/{keyboard-utils-D9UlHbik.js → keyboard-utils-DibQafwg.js} +2 -0
  96. package/lib/cjs/{label-DZ63Z3SI.js → label-Cu4DNShe.js} +1 -1
  97. package/lib/cjs/{language-utils-BsevPDrN.js → language-utils-B3NubUDr.js} +1 -1
  98. package/lib/cjs/loader.cjs.js +3 -3
  99. package/lib/cjs/picture-utils-D_HVgfq5.js +15 -0
  100. package/lib/cjs/{slot-utils-DIDW777s.js → slot-utils-Dny6EJ_G.js} +1 -1
  101. package/lib/cjs/{themeable-component-hQ83w5_A.js → themeable-component-Csdvrnsd.js} +1 -1
  102. package/lib/cjs/{token-utils-DY3-olMV.js → token-utils-ZISdNshf.js} +1 -1
  103. package/lib/cjs/{tokens.module-CTbvyezn.js → tokens.module-CGRpZaa1.js} +2 -1
  104. package/lib/collection/components/duet-action-button/duet-action-button.js +2 -2
  105. package/lib/collection/components/duet-alert/duet-alert.js +1 -1
  106. package/lib/collection/components/duet-badge/duet-badge.css +66 -5
  107. package/lib/collection/components/duet-badge/duet-badge.js +49 -2
  108. package/lib/collection/components/duet-banner/duet-banner.css +12 -0
  109. package/lib/collection/components/duet-banner/duet-banner.js +30 -5
  110. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumb.js +4 -4
  111. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumbs.js +2 -2
  112. package/lib/collection/components/duet-button/duet-button.css +5 -0
  113. package/lib/collection/components/duet-button/duet-button.js +8 -8
  114. package/lib/collection/components/duet-callout/duet-callout.js +2 -2
  115. package/lib/collection/components/duet-caption/duet-caption.js +1 -1
  116. package/lib/collection/components/duet-card/duet-card.css +3 -0
  117. package/lib/collection/components/duet-card/duet-card.js +43 -7
  118. package/lib/collection/components/duet-checkbox/duet-checkbox.js +3 -3
  119. package/lib/collection/components/duet-chip/duet-chip.js +54 -21
  120. package/lib/collection/components/duet-choice/duet-checkmark.js +2 -2
  121. package/lib/collection/components/duet-choice/duet-choice.js +12 -12
  122. package/lib/collection/components/duet-choice-group/duet-choice-group.js +6 -8
  123. package/lib/collection/components/duet-collapsible/duet-collapsible.js +3 -3
  124. package/lib/collection/components/duet-combobox/duet-combobox.js +3 -4
  125. package/lib/collection/components/duet-contact-card/duet-contact-card.css +3 -0
  126. package/lib/collection/components/duet-contact-card/duet-contact-card.js +38 -2
  127. package/lib/collection/components/duet-cookie-consent/duet-cookie-consent.js +1 -1
  128. package/lib/collection/components/duet-date-picker/date-picker-month.js +4 -2
  129. package/lib/collection/components/duet-date-picker/date-utils.js +7 -0
  130. package/lib/collection/components/duet-date-picker/disallowed-days.js +23 -0
  131. package/lib/collection/components/duet-date-picker/duet-date-picker.js +103 -10
  132. package/lib/collection/components/duet-date-picker/finnish-bank-holidays.js +66 -0
  133. package/lib/collection/components/duet-divider/duet-divider.js +2 -2
  134. package/lib/collection/components/duet-editable-table/duet-editable-table.js +7 -7
  135. package/lib/collection/components/duet-empty-state/duet-empty-state.js +5 -5
  136. package/lib/collection/components/duet-fieldset/duet-fieldset.js +3 -3
  137. package/lib/collection/components/duet-file-chooser/duet-file-chooser.js +2 -2
  138. package/lib/collection/components/duet-footer/duet-footer.js +11 -11
  139. package/lib/collection/components/duet-grid/duet-grid.js +5 -5
  140. package/lib/collection/components/duet-grid-item/duet-grid-item.css +5 -0
  141. package/lib/collection/components/duet-grid-item/duet-grid-item.js +2 -2
  142. package/lib/collection/components/duet-header/duet-header.js +15 -15
  143. package/lib/collection/components/duet-heading/duet-heading.js +3 -3
  144. package/lib/collection/components/duet-hero/duet-hero.css +92 -14
  145. package/lib/collection/components/duet-hero/duet-hero.js +47 -21
  146. package/lib/collection/components/duet-icon/duet-icon.js +3 -3
  147. package/lib/collection/components/duet-indicator/duet-indicator.js +3 -3
  148. package/lib/collection/components/duet-input/duet-input.css +38 -3
  149. package/lib/collection/components/duet-input/duet-input.js +213 -27
  150. package/lib/collection/components/duet-label/duet-label.js +2 -2
  151. package/lib/collection/components/duet-layout/duet-layout.js +6 -6
  152. package/lib/collection/components/duet-link/duet-link.js +2 -2
  153. package/lib/collection/components/duet-list/duet-list.js +4 -4
  154. package/lib/collection/components/duet-list-item/duet-list-item.js +2 -2
  155. package/lib/collection/components/duet-logo/duet-logo.js +2 -2
  156. package/lib/collection/components/duet-menu-bar/duet-menu-bar.js +4 -4
  157. package/lib/collection/components/duet-menu-bar-button/duet-menu-bar-button.js +2 -2
  158. package/lib/collection/components/duet-menu-bar-dropdown/duet-menu-bar-dropdown.js +4 -4
  159. package/lib/collection/components/duet-menu-bar-dropdown-link/duet-menu-bar-dropdown-link.js +2 -2
  160. package/lib/collection/components/duet-menu-bar-item/duet-menu-bar-item.js +2 -2
  161. package/lib/collection/components/duet-menu-bar-link/duet-menu-bar-link.js +2 -2
  162. package/lib/collection/components/duet-modal/duet-modal.js +11 -11
  163. package/lib/collection/components/duet-multiselect/duet-multiselect.js +11 -11
  164. package/lib/collection/components/duet-nav/duet-nav.js +1 -1
  165. package/lib/collection/components/duet-notification/duet-notification.js +2 -2
  166. package/lib/collection/components/duet-notification-drawer/duet-notification-drawer.js +4 -4
  167. package/lib/collection/components/duet-number-input/duet-number-input.js +14 -13
  168. package/lib/collection/components/duet-overlay/duet-overlay.js +2 -2
  169. package/lib/collection/components/duet-page-heading/duet-page-heading.css +20 -1
  170. package/lib/collection/components/duet-page-heading/duet-page-heading.js +58 -2
  171. package/lib/collection/components/duet-pagination/duet-pagination.js +14 -15
  172. package/lib/collection/components/duet-panel/duet-panel.js +3 -3
  173. package/lib/collection/components/duet-paragraph/duet-paragraph.js +5 -5
  174. package/lib/collection/components/duet-phone-input/duet-phone-input.js +42 -5
  175. package/lib/collection/components/duet-popup-menu/duet-popup-menu.js +1 -1
  176. package/lib/collection/components/duet-popup-menu-item/duet-popup-menu-item.js +4 -4
  177. package/lib/collection/components/duet-promo-card/duet-promo-card.css +4 -0
  178. package/lib/collection/components/duet-promo-card/duet-promo-card.js +39 -2
  179. package/lib/collection/components/duet-radio/duet-radio.js +6 -9
  180. package/lib/collection/components/duet-radio-group/duet-radio-group.js +1 -1
  181. package/lib/collection/components/duet-range-slider/duet-range-slider.js +4 -4
  182. package/lib/collection/components/duet-range-stepper/duet-range-stepper.js +3 -3
  183. package/lib/collection/components/duet-scrollable/duet-scrollable.js +5 -5
  184. package/lib/collection/components/duet-section-layout/duet-section-layout.js +3 -3
  185. package/lib/collection/components/duet-select/duet-select.js +10 -10
  186. package/lib/collection/components/duet-shaped-image/duet-shaped-image.js +2 -2
  187. package/lib/collection/components/duet-share-chart/duet-share-chart.js +2 -2
  188. package/lib/collection/components/duet-share-chart-item/duet-share-chart-item.js +1 -1
  189. package/lib/collection/components/duet-show-more/duet-show-more.js +3 -3
  190. package/lib/collection/components/duet-slideout/duet-slideout.js +12 -6
  191. package/lib/collection/components/duet-slideout-lang/duet-slideout-lang.js +1 -1
  192. package/lib/collection/components/duet-slideout-link/duet-slideout-link.js +2 -2
  193. package/lib/collection/components/duet-slideout-panel/duet-slideout-panel.js +6 -6
  194. package/lib/collection/components/duet-slideout-panel-dropdown/duet-slideout-panel-dropdown.js +4 -4
  195. package/lib/collection/components/duet-spacer/duet-spacer.js +3 -3
  196. package/lib/collection/components/duet-spinner/duet-spinner.js +2 -2
  197. package/lib/collection/components/duet-status-icon/duet-status-icon.js +2 -2
  198. package/lib/collection/components/duet-step/duet-step.js +4 -4
  199. package/lib/collection/components/duet-stepper/duet-stepper.js +2 -2
  200. package/lib/collection/components/duet-submenu-bar/duet-submenu-bar.js +5 -5
  201. package/lib/collection/components/duet-submenu-bar-dropdown/duet-submenu-bar-dropdown.js +4 -4
  202. package/lib/collection/components/duet-submenu-bar-dropdown-link/duet-submenu-bar-dropdown-link.js +2 -2
  203. package/lib/collection/components/duet-submenu-bar-item/duet-submenu-bar-item.js +1 -1
  204. package/lib/collection/components/duet-submenu-bar-link/duet-submenu-bar-link.js +1 -1
  205. package/lib/collection/components/duet-tab/duet-tab.js +2 -2
  206. package/lib/collection/components/duet-tab-group/duet-tab-group.js +9 -9
  207. package/lib/collection/components/duet-table/duet-table-styles.js +5 -5
  208. package/lib/collection/components/duet-table/duet-table.js +2 -2
  209. package/lib/collection/components/duet-textarea/duet-textarea.js +7 -7
  210. package/lib/collection/components/duet-toggle/duet-toggle.js +4 -4
  211. package/lib/collection/components/duet-toolbar/duet-toolbar.js +2 -2
  212. package/lib/collection/components/duet-toolbar-dropdown/duet-toolbar-dropdown.js +4 -4
  213. package/lib/collection/components/duet-toolbar-dropdown-link/duet-toolbar-dropdown-link.js +2 -2
  214. package/lib/collection/components/duet-toolbar-item/duet-toolbar-item.js +3 -3
  215. package/lib/collection/components/duet-toolbar-link/duet-toolbar-link.js +2 -2
  216. package/lib/collection/components/duet-tooltip/duet-tooltip-button.css +18 -4
  217. package/lib/collection/components/duet-tooltip/duet-tooltip-button.js +25 -3
  218. package/lib/collection/components/duet-tooltip/duet-tooltip-popup.css +1 -1
  219. package/lib/collection/components/duet-tooltip/duet-tooltip-popup.js +3 -3
  220. package/lib/collection/components/duet-tooltip/duet-tooltip.js +48 -5
  221. package/lib/collection/components/duet-tray/duet-tray.js +2 -2
  222. package/lib/collection/components/duet-upload/duet-upload.js +16 -16
  223. package/lib/collection/components/duet-upload-aria-status/duet-upload-aria-status.js +1 -1
  224. package/lib/collection/components/duet-upload-item/duet-upload-item.js +4 -4
  225. package/lib/collection/components/duet-visually-hidden/duet-visually-hidden.js +1 -1
  226. package/lib/collection/utils/keyboard-utils.js +1 -0
  227. package/lib/collection/utils/math.utils.js +1 -0
  228. package/lib/duet/duet.esm.js +1 -1
  229. package/lib/duet/p-054c334d.entry.js +4 -0
  230. package/lib/duet/{p-81332db1.entry.js → p-0e10e36b.entry.js} +1 -1
  231. package/lib/duet/{p-428db44b.entry.js → p-12d7fdf6.entry.js} +1 -1
  232. package/lib/duet/{p-494755d0.entry.js → p-1579bdf5.entry.js} +1 -1
  233. package/lib/duet/{p-e8bd6dab.entry.js → p-174935bc.entry.js} +1 -1
  234. package/lib/duet/p-1d7a9425.entry.js +4 -0
  235. package/lib/duet/{p-2e413951.entry.js → p-20066df8.entry.js} +1 -1
  236. package/lib/duet/{p-6988c81c.entry.js → p-20c8226c.entry.js} +1 -1
  237. package/lib/duet/{p-1ee400e7.entry.js → p-210bc161.entry.js} +1 -1
  238. package/lib/duet/{p-fea479fd.entry.js → p-244bfbf9.entry.js} +1 -1
  239. package/lib/duet/{p-adecab91.entry.js → p-264688ae.entry.js} +1 -1
  240. package/lib/duet/{p-1dcbbd67.entry.js → p-2bf78fe4.entry.js} +1 -1
  241. package/lib/duet/{p-1bdef0e0.entry.js → p-2e44c6b8.entry.js} +1 -1
  242. package/lib/duet/{p-3c26d300.entry.js → p-304a9a55.entry.js} +1 -1
  243. package/lib/duet/{p-a63327c3.entry.js → p-30d8a1e4.entry.js} +1 -1
  244. package/lib/duet/p-3445529c.entry.js +4 -0
  245. package/lib/duet/{p-1666aeaf.entry.js → p-3533d6ee.entry.js} +1 -1
  246. package/lib/duet/{p-87bb797c.entry.js → p-374b48f6.entry.js} +1 -1
  247. package/lib/duet/{p-bcced6eb.entry.js → p-3b9d7f6a.entry.js} +1 -1
  248. package/lib/duet/{p-dc87f3f4.entry.js → p-3def9480.entry.js} +1 -1
  249. package/lib/duet/p-3fbe466a.entry.js +4 -0
  250. package/lib/duet/{p-12e4e9b6.entry.js → p-407d4e5a.entry.js} +1 -1
  251. package/lib/duet/p-41230630.entry.js +4 -0
  252. package/lib/duet/p-44e53564.entry.js +4 -0
  253. package/lib/duet/p-46287d85.entry.js +4 -0
  254. package/lib/duet/p-48e77341.entry.js +4 -0
  255. package/lib/duet/{p-fbce84d5.entry.js → p-4a041c60.entry.js} +1 -1
  256. package/lib/duet/p-4a251661.entry.js +4 -0
  257. package/lib/duet/p-4a4e5bb5.entry.js +4 -0
  258. package/lib/duet/{p-184d53a7.entry.js → p-4acdc586.entry.js} +1 -1
  259. package/lib/duet/{p-afd7d87a.entry.js → p-4b07ce36.entry.js} +1 -1
  260. package/lib/duet/{p-c71f6942.entry.js → p-4cee693b.entry.js} +1 -1
  261. package/lib/duet/{p-01f3e30c.entry.js → p-4e1c2676.entry.js} +1 -1
  262. package/lib/duet/{p-d181c624.entry.js → p-4e5532c8.entry.js} +1 -1
  263. package/lib/duet/{p-3bd45b5b.entry.js → p-512d18c8.entry.js} +1 -1
  264. package/lib/duet/p-555e0c78.entry.js +4 -0
  265. package/lib/duet/{p-13b7f4e0.entry.js → p-5b322a86.entry.js} +1 -1
  266. package/lib/duet/p-5f72134e.entry.js +4 -0
  267. package/lib/duet/{p-f210e405.entry.js → p-61abccd4.entry.js} +1 -1
  268. package/lib/duet/p-6a11ba26.entry.js +4 -0
  269. package/lib/duet/p-6bd78205.entry.js +4 -0
  270. package/lib/duet/p-6c239923.entry.js +4 -0
  271. package/lib/duet/{p-7a5066b8.entry.js → p-6ce82324.entry.js} +1 -1
  272. package/lib/duet/{p-526fa31c.entry.js → p-6d1d1199.entry.js} +1 -1
  273. package/lib/duet/p-81c5d3e3.entry.js +4 -0
  274. package/lib/duet/{p-f652a9c7.entry.js → p-829bccb7.entry.js} +1 -1
  275. package/lib/duet/p-83dcbb64.entry.js +4 -0
  276. package/lib/duet/{p-a4a1b8e3.entry.js → p-84f8bee8.entry.js} +1 -1
  277. package/lib/duet/{p-07c4b435.entry.js → p-8927ccc1.entry.js} +1 -1
  278. package/lib/duet/{p-2d43de54.entry.js → p-8bdcfd1f.entry.js} +1 -1
  279. package/lib/duet/{p-b64b3e2f.entry.js → p-8fbcea55.entry.js} +1 -1
  280. package/lib/duet/{p-84420fbf.entry.js → p-914ee7ac.entry.js} +1 -1
  281. package/lib/duet/{p-7a668cee.entry.js → p-95bb2a8d.entry.js} +1 -1
  282. package/lib/duet/{p-4c5a8ed3.entry.js → p-985213bb.entry.js} +1 -1
  283. package/lib/duet/{p-d2c91ed0.entry.js → p-9889218e.entry.js} +1 -1
  284. package/lib/duet/{p-c1d4542d.entry.js → p-9b2731b9.entry.js} +1 -1
  285. package/lib/duet/{p-46300680.entry.js → p-9b448008.entry.js} +1 -1
  286. package/lib/duet/p-9c41f1d5.entry.js +4 -0
  287. package/lib/duet/p-BDgGHTHh.js +4 -0
  288. package/lib/duet/p-BZev46O8.js +4 -0
  289. package/lib/duet/p-BaefVzkx.js +4 -0
  290. package/lib/duet/p-CcoGR9T9.js +4 -0
  291. package/lib/duet/{p-BW3SZS4F.js → p-CyfEm8iD.js} +1 -1
  292. package/lib/duet/p-D3450NfA.js +5 -0
  293. package/lib/duet/{p-DWIjWGAD.js → p-D9N9LBeD.js} +1 -1
  294. package/lib/duet/{p-2HU78SJ-.js → p-DI7IXBXp.js} +1 -1
  295. package/lib/duet/{p-D2ly4TZR.js → p-DYmL1tSl.js} +1 -1
  296. package/lib/duet/p-Dk60lC7n.js +4 -0
  297. package/lib/duet/p-JFwTD5kM.js +4 -0
  298. package/lib/duet/{p-D2EBd3cT.js → p-KbNgo0QF.js} +1 -1
  299. package/lib/duet/p-a01f3141.entry.js +4 -0
  300. package/lib/duet/p-a49b5d93.entry.js +4 -0
  301. package/lib/duet/p-a6dbe893.entry.js +4 -0
  302. package/lib/duet/{p-a690a165.entry.js → p-aa1256f9.entry.js} +1 -1
  303. package/lib/duet/{p-9d8027aa.entry.js → p-aa7e4c81.entry.js} +1 -1
  304. package/lib/duet/{p-d2c04a7e.entry.js → p-ac4fc44c.entry.js} +1 -1
  305. package/lib/duet/{p-376f9d06.entry.js → p-ae382e2e.entry.js} +1 -1
  306. package/lib/duet/p-bc41d13d.entry.js +4 -0
  307. package/lib/duet/{p-5dde8fbb.entry.js → p-c54ecb23.entry.js} +1 -1
  308. package/lib/duet/{p-5ffc4081.entry.js → p-d72dee5d.entry.js} +1 -1
  309. package/lib/duet/{p-2168e431.entry.js → p-d7abb7fa.entry.js} +1 -1
  310. package/lib/duet/{p-3648404d.entry.js → p-dbb9e1d4.entry.js} +1 -1
  311. package/lib/duet/{p-b3ec9b98.entry.js → p-e40d9c21.entry.js} +1 -1
  312. package/lib/duet/p-e43df9c2.entry.js +4 -0
  313. package/lib/duet/{p-14d4a45a.entry.js → p-e442943d.entry.js} +1 -1
  314. package/lib/duet/p-eb7bc989.entry.js +4 -0
  315. package/lib/duet/{p-3361387d.entry.js → p-ec1d2e0a.entry.js} +1 -1
  316. package/lib/duet/p-edcdf0b7.entry.js +4 -0
  317. package/lib/duet/{p-d0a54e6d.entry.js → p-ee369233.entry.js} +1 -1
  318. package/lib/duet/{p-816caa58.entry.js → p-f297f8f2.entry.js} +1 -1
  319. package/lib/duet/{p-0453edd0.entry.js → p-f30c3cfe.entry.js} +1 -1
  320. package/lib/duet/{p-0395eb34.entry.js → p-f4538e9d.entry.js} +1 -1
  321. package/lib/duet/{p-1ed82a27.entry.js → p-f4de7ac0.entry.js} +1 -1
  322. package/lib/duet/{p-4d39941c.entry.js → p-f8d640ba.entry.js} +1 -1
  323. package/lib/duet/{p-61b6962a.entry.js → p-f9db8670.entry.js} +1 -1
  324. package/lib/duet/p-fc1a18f8.entry.js +4 -0
  325. package/lib/duet/{p-dfd55180.entry.js → p-fc2be136.entry.js} +1 -1
  326. package/lib/duet/p-fdc4a97c.entry.js +4 -0
  327. package/lib/duet/p-kkZE1C6Z.js +4 -0
  328. package/lib/esm/{a11y-utils-sgAajRY0.js → a11y-utils--wwGTL0T.js} +1 -1
  329. package/lib/esm/{app-globals-NNQmI_gc.js → app-globals-Diuuep9d.js} +1 -1
  330. package/lib/esm/duet-action-button.entry.js +6 -6
  331. package/lib/esm/duet-alert.entry.js +4 -4
  332. package/lib/esm/duet-badge.entry.js +29 -6
  333. package/lib/esm/duet-banner.entry.js +15 -16
  334. package/lib/esm/duet-breadcrumb.entry.js +7 -7
  335. package/lib/esm/duet-breadcrumbs.entry.js +7 -7
  336. package/lib/esm/duet-button_2.entry.js +9 -9
  337. package/lib/esm/duet-callout.entry.js +5 -5
  338. package/lib/esm/duet-caption_4.entry.js +13 -13
  339. package/lib/esm/duet-card.entry.js +22 -11
  340. package/lib/esm/duet-checkbox.entry.js +3 -3
  341. package/lib/esm/duet-checkmark.entry.js +4 -4
  342. package/lib/esm/duet-chip.entry.js +29 -16
  343. package/lib/esm/duet-choice_2.entry.js +20 -22
  344. package/lib/esm/duet-collapsible.entry.js +4 -4
  345. package/lib/esm/duet-combobox.entry.js +6 -7
  346. package/lib/esm/duet-contact-card.entry.js +17 -7
  347. package/lib/esm/duet-cookie-consent.entry.js +3 -3
  348. package/lib/esm/duet-date-picker.entry.js +128 -14
  349. package/lib/esm/duet-divider_2.entry.js +6 -6
  350. package/lib/esm/duet-editable-table_3.entry.js +17 -17
  351. package/lib/esm/duet-empty-state.entry.js +4 -4
  352. package/lib/esm/duet-fieldset.entry.js +6 -6
  353. package/lib/esm/duet-file-chooser.entry.js +3 -3
  354. package/lib/esm/duet-footer.entry.js +9 -9
  355. package/lib/esm/duet-grid_2.entry.js +7 -7
  356. package/lib/esm/duet-header_2.entry.js +7 -7
  357. package/lib/esm/duet-hero.entry.js +22 -21
  358. package/lib/esm/duet-icon.entry.js +7 -7
  359. package/lib/esm/duet-indicator.entry.js +5 -5
  360. package/lib/esm/duet-input_2.entry.js +132 -23
  361. package/lib/esm/duet-layout.entry.js +7 -7
  362. package/lib/esm/duet-list_2.entry.js +5 -5
  363. package/lib/esm/duet-menu-bar-button.entry.js +4 -4
  364. package/lib/esm/duet-menu-bar-dropdown-link.entry.js +5 -5
  365. package/lib/esm/duet-menu-bar-dropdown.entry.js +7 -7
  366. package/lib/esm/duet-menu-bar-item.entry.js +7 -7
  367. package/lib/esm/duet-menu-bar-link.entry.js +4 -4
  368. package/lib/esm/duet-menu-bar.entry.js +6 -6
  369. package/lib/esm/duet-modal.entry.js +15 -15
  370. package/lib/esm/duet-multiselect.entry.js +11 -11
  371. package/lib/esm/duet-nav.entry.js +3 -3
  372. package/lib/esm/duet-notification_2.entry.js +10 -10
  373. package/lib/esm/duet-number-input.entry.js +14 -12
  374. package/lib/esm/duet-overlay.entry.js +3 -3
  375. package/lib/esm/duet-page-heading.entry.js +20 -5
  376. package/lib/esm/duet-pagination_2.entry.js +20 -21
  377. package/lib/esm/duet-panel.entry.js +4 -4
  378. package/lib/esm/duet-phone-input.entry.js +23 -6
  379. package/lib/esm/duet-popup-menu_2.entry.js +10 -10
  380. package/lib/esm/duet-progress.entry.js +3 -3
  381. package/lib/esm/duet-promo-card.entry.js +20 -8
  382. package/lib/esm/duet-radio_2.entry.js +7 -10
  383. package/lib/esm/duet-range-slider.entry.js +8 -8
  384. package/lib/esm/duet-scrollable_3.entry.js +18 -18
  385. package/lib/esm/duet-section-layout.entry.js +4 -4
  386. package/lib/esm/duet-select.entry.js +9 -9
  387. package/lib/esm/duet-shaped-image.entry.js +4 -4
  388. package/lib/esm/duet-share-chart-item.entry.js +2 -2
  389. package/lib/esm/duet-share-chart.entry.js +8 -8
  390. package/lib/esm/duet-show-more.entry.js +6 -6
  391. package/lib/esm/duet-slideout-lang.entry.js +4 -4
  392. package/lib/esm/duet-slideout-link.entry.js +7 -7
  393. package/lib/esm/duet-slideout-panel-dropdown.entry.js +6 -6
  394. package/lib/esm/duet-slideout-panel.entry.js +13 -13
  395. package/lib/esm/duet-slideout.entry.js +20 -14
  396. package/lib/esm/duet-status-icon.entry.js +3 -3
  397. package/lib/esm/duet-step_2.entry.js +7 -7
  398. package/lib/esm/duet-submenu-bar-dropdown-link.entry.js +5 -5
  399. package/lib/esm/duet-submenu-bar-dropdown.entry.js +7 -7
  400. package/lib/esm/duet-submenu-bar-item.entry.js +7 -7
  401. package/lib/esm/duet-submenu-bar-link.entry.js +4 -4
  402. package/lib/esm/duet-submenu-bar.entry.js +7 -7
  403. package/lib/esm/duet-textarea.entry.js +8 -8
  404. package/lib/esm/duet-toggle.entry.js +9 -9
  405. package/lib/esm/duet-toolbar-dropdown-link.entry.js +5 -5
  406. package/lib/esm/duet-toolbar-dropdown.entry.js +7 -7
  407. package/lib/esm/duet-toolbar-item.entry.js +8 -8
  408. package/lib/esm/duet-toolbar-link.entry.js +4 -4
  409. package/lib/esm/duet-toolbar.entry.js +4 -4
  410. package/lib/esm/duet-tooltip-button_2.entry.js +14 -12
  411. package/lib/esm/duet-tooltip.entry.js +26 -9
  412. package/lib/esm/duet-tray.entry.js +7 -7
  413. package/lib/esm/duet-upload-aria-status.entry.js +2 -2
  414. package/lib/esm/duet-upload-item.entry.js +6 -6
  415. package/lib/esm/duet-visually-hidden.entry.js +2 -2
  416. package/lib/esm/duet.js +4 -4
  417. package/lib/esm/{errorcodes.utils-CqW0-HM8.js → errorcodes.utils-S_WrUPeV.js} +1 -1
  418. package/lib/esm/{focus-utils-Dokkd7xz.js → focus-utils-C4oaajGr.js} +1 -1
  419. package/lib/esm/{index-Cwhi6_oZ.js → index-D3450NfA.js} +9 -9
  420. package/lib/esm/{keyboard-utils-Db8rvjPI.js → keyboard-utils-BaefVzkx.js} +2 -1
  421. package/lib/esm/{label-CyQlly6Z.js → label-C1HF2o4Y.js} +1 -1
  422. package/lib/esm/{language-utils-LZh-sc2s.js → language-utils-D4WVl8Ph.js} +1 -1
  423. package/lib/esm/loader.js +4 -4
  424. package/lib/esm/picture-utils-MSeJTkDk.js +13 -0
  425. package/lib/esm/{slot-utils-CEZnAp61.js → slot-utils-Dxcjtmp3.js} +1 -1
  426. package/lib/esm/{themeable-component-D_FVcjsD.js → themeable-component-QHdUfcat.js} +1 -1
  427. package/lib/esm/{token-utils-B0KAgyj_.js → token-utils-BILzD7LX.js} +1 -1
  428. package/lib/esm/{tokens.module-DEzE2U5T.js → tokens.module-kkZE1C6Z.js} +1 -1
  429. package/lib/types/components/duet-badge/duet-badge.d.ts +14 -0
  430. package/lib/types/components/duet-banner/duet-banner.d.ts +5 -1
  431. package/lib/types/components/duet-button/duet-button.d.ts +1 -1
  432. package/lib/types/components/duet-card/duet-card.d.ts +5 -0
  433. package/lib/types/components/duet-chip/duet-chip.d.ts +16 -9
  434. package/lib/types/components/duet-contact-card/duet-contact-card.d.ts +5 -0
  435. package/lib/types/components/duet-date-picker/date-picker-month.d.ts +3 -0
  436. package/lib/types/components/duet-date-picker/date-utils.d.ts +4 -0
  437. package/lib/types/components/duet-date-picker/disallowed-days.d.ts +9 -0
  438. package/lib/types/components/duet-date-picker/duet-date-picker.d.ts +14 -0
  439. package/lib/types/components/duet-date-picker/finnish-bank-holidays.d.ts +11 -0
  440. package/lib/types/components/duet-hero/duet-hero.d.ts +5 -0
  441. package/lib/types/components/duet-input/duet-input.d.ts +42 -3
  442. package/lib/types/components/duet-number-input/duet-number-input.d.ts +2 -1
  443. package/lib/types/components/duet-page-heading/duet-page-heading.d.ts +10 -0
  444. package/lib/types/components/duet-phone-input/duet-phone-input.d.ts +7 -0
  445. package/lib/types/components/duet-promo-card/duet-promo-card.d.ts +6 -0
  446. package/lib/types/components/duet-radio/duet-radio.d.ts +0 -1
  447. package/lib/types/components/duet-tooltip/duet-tooltip-button.d.ts +1 -0
  448. package/lib/types/components/duet-tooltip/duet-tooltip.d.ts +6 -0
  449. package/lib/types/components.d.ts +183 -20
  450. package/lib/types/utils/keyboard-utils.d.ts +1 -0
  451. package/lib/types/utils/math.utils.d.ts +1 -0
  452. package/package.json +5 -5
  453. package/lib/duet/p--fmK3qPb.js +0 -4
  454. package/lib/duet/p-07aa40df.entry.js +0 -4
  455. package/lib/duet/p-0eb0e582.entry.js +0 -4
  456. package/lib/duet/p-104ddbf2.entry.js +0 -4
  457. package/lib/duet/p-1705b6cf.entry.js +0 -4
  458. package/lib/duet/p-4420973e.entry.js +0 -4
  459. package/lib/duet/p-455e8ebe.entry.js +0 -4
  460. package/lib/duet/p-4f7b0699.entry.js +0 -4
  461. package/lib/duet/p-58496fb1.entry.js +0 -4
  462. package/lib/duet/p-58a70b3d.entry.js +0 -4
  463. package/lib/duet/p-592a6542.entry.js +0 -4
  464. package/lib/duet/p-5c8c691b.entry.js +0 -4
  465. package/lib/duet/p-73ed0008.entry.js +0 -4
  466. package/lib/duet/p-7a2ca711.entry.js +0 -4
  467. package/lib/duet/p-7e640c8e.entry.js +0 -4
  468. package/lib/duet/p-7eaa1fb5.entry.js +0 -4
  469. package/lib/duet/p-870dc953.entry.js +0 -4
  470. package/lib/duet/p-Chf7ZRmW.js +0 -4
  471. package/lib/duet/p-CtBx3Trd.js +0 -4
  472. package/lib/duet/p-Cwhi6_oZ.js +0 -5
  473. package/lib/duet/p-DCDM41Ef.js +0 -4
  474. package/lib/duet/p-DEzE2U5T.js +0 -4
  475. package/lib/duet/p-Db8rvjPI.js +0 -4
  476. package/lib/duet/p-a4db8c29.entry.js +0 -4
  477. package/lib/duet/p-a7bb038a.entry.js +0 -4
  478. package/lib/duet/p-af9c8169.entry.js +0 -4
  479. package/lib/duet/p-c7851c15.entry.js +0 -4
  480. package/lib/duet/p-cbd1069e.entry.js +0 -4
  481. package/lib/duet/p-cd4f52a9.entry.js +0 -4
  482. package/lib/duet/p-d3dac8af.entry.js +0 -4
  483. package/lib/duet/p-e9ed96cf.entry.js +0 -4
  484. package/lib/duet/p-eab349f2.entry.js +0 -4
  485. package/lib/duet/p-eebf150c.entry.js +0 -4
  486. package/lib/duet/p-f600e215.entry.js +0 -4
@@ -8,7 +8,7 @@ import { inheritGlobalTheme } from "../../common";
8
8
  import { DuetInternalLabel } from "../../common/label";
9
9
  import { createID } from "../../utils/create-id";
10
10
  import { cleanValue, resetCursor } from "../../utils/input-utils";
11
- import { isArrowLeftKey, isArrowRightKey, isBackspaceKey, isEnterKey, isEscapeKey } from "../../utils/keyboard-utils";
11
+ import { isArrowLeftKey, isArrowRightKey, isBackspaceKey, isCharacterInsertKey, isEnterKey, isEscapeKey, } from "../../utils/keyboard-utils";
12
12
  import { connectLanguageChangeObserver, disconnectLanguageChangeObserver, getLanguage, getLocaleString, } from "../../utils/language-utils";
13
13
  import { checkNamedSlotElement, proxyInputToSlot } from "../../utils/slot-utils";
14
14
  const icons = {
@@ -27,10 +27,13 @@ export class DuetInput {
27
27
  this.proxyId = createID("DuetInput");
28
28
  this.clearId = createID("DuetInputClear");
29
29
  this.labelId = createID("DuetLabel");
30
+ this.prefixId = createID("DuetInputPrefix");
31
+ this.suffixId = createID("DuetInputSuffix");
30
32
  this.topCaptionId = createID("DuetCaptionTop");
31
33
  this.topCaptionPlaceholderId = createID("DuetCaptionPlaceholderTop");
32
34
  this.chipCountId = createID("DuetInputChipCount");
33
35
  this.errorId = createID("DuetError");
36
+ this.maxlengthAnnouncementKey = 0;
34
37
  this.disallowPatternRegex = null;
35
38
  this.clearLabel = {
36
39
  en: "Clear",
@@ -67,6 +70,11 @@ export class DuetInput {
67
70
  fi: "valittu",
68
71
  sv: "valt",
69
72
  };
73
+ this.maxlengthReachedLabel = {
74
+ en: "This field has a maximum length of {max} characters. Limit reached.",
75
+ fi: "Tämän kentän enimmäispituus on {max} merkkiä. Raja on saavutettu.",
76
+ sv: "Det här fältet har en maximal längd på {max} tecken. Gränsen är nådd.",
77
+ };
70
78
  /**
71
79
  * State() variables
72
80
  */
@@ -76,6 +84,10 @@ export class DuetInput {
76
84
  */
77
85
  this.isFocused = false;
78
86
  this._accessiblePopup = undefined;
87
+ /**
88
+ * Text announced to screen readers when the maxlength limit is reached.
89
+ */
90
+ this.maxlengthAnnouncement = "";
79
91
  /**
80
92
  * Indicates the id or a string of space seperated ids of a component(s) that describes the input.
81
93
  */
@@ -173,7 +185,7 @@ export class DuetInput {
173
185
  */
174
186
  this.labelHidden = false;
175
187
  /**
176
- * Enable numeric keyboard for the input.
188
+ * Enable numeric keyboard for the input. Note that on iOS the numeric keyboard does not contain minus.
177
189
  */
178
190
  this.numericKeyboard = false;
179
191
  /**
@@ -182,7 +194,9 @@ export class DuetInput {
182
194
  */
183
195
  this.component = "input";
184
196
  /**
185
- * Enable or disable automatic completion by the browser
197
+ * Set the type of automatic completion by the browser. If possible use the standard tokens like "name", "given-name",
198
+ * "family-name", "postal-code", "street-address" etc. The component adds automatically "tel" and "email". If you must
199
+ * disable autocomplete use "off" (but avoid disabling unless absolutely necessary).
186
200
  */
187
201
  this.autoComplete = "on";
188
202
  /**
@@ -204,9 +218,22 @@ export class DuetInput {
204
218
  * Component event handling.
205
219
  */
206
220
  this.onInput = (ev) => {
207
- if (this.maxlength && this.nativeInput.value.length > this.maxlength) {
221
+ var _a;
222
+ // In addition to input event, maxlength handling uses also keyDown and paste events as input event may not be
223
+ // triggered when entry is truncated by the browser.
224
+ if (this.maxlength) {
225
+ const wasAtMaxlength = (((_a = this.value) === null || _a === void 0 ? void 0 : _a.length) || 0) >= this.maxlength;
226
+ const nativeLength = this.nativeInput.value.length;
208
227
  // Android doesn't honor maxlength
209
- this.nativeInput.value = this.nativeInput.value.slice(0, this.maxlength);
228
+ const inputOverflow = nativeLength > this.maxlength;
229
+ if (inputOverflow) {
230
+ this.nativeInput.value = this.nativeInput.value.slice(0, this.maxlength);
231
+ }
232
+ const limitJustReached = !wasAtMaxlength && nativeLength === this.maxlength;
233
+ const limitExceededWhileFull = wasAtMaxlength && inputOverflow;
234
+ if (limitJustReached || limitExceededWhileFull) {
235
+ this.handleMaxlengthLimitReached();
236
+ }
210
237
  }
211
238
  if (this.disallowPatternRegex) {
212
239
  cleanValue(this.nativeInput, this.disallowPatternRegex);
@@ -252,9 +279,35 @@ export class DuetInput {
252
279
  component: "duet-input",
253
280
  });
254
281
  };
282
+ this.onInputKeyDown = (ev) => {
283
+ if (this.maxlength && isCharacterInsertKey(ev) && this.isAtMaxlengthWithoutSelection()) {
284
+ this.handleMaxlengthLimitReached();
285
+ }
286
+ };
287
+ this.onInputPaste = () => {
288
+ if (this.maxlength && this.isAtMaxlengthWithoutSelection()) {
289
+ this.handleMaxlengthLimitReached();
290
+ }
291
+ };
292
+ this.isAtMaxlengthWithoutSelection = () => {
293
+ const input = this.nativeInput;
294
+ const inputIsWithoutSelection = input.selectionStart === input.selectionEnd;
295
+ const inputIsAtMaxlength = input.value.length >= this.maxlength;
296
+ return inputIsWithoutSelection && inputIsAtMaxlength;
297
+ };
298
+ this.handleMaxlengthLimitReached = () => {
299
+ clearTimeout(this.maxlengthAnnouncementTimeoutId);
300
+ this.maxlengthAnnouncement = "";
301
+ this.maxlengthAnnouncementTimeoutId = setTimeout(() => {
302
+ this.maxlengthAnnouncementKey++;
303
+ this.maxlengthAnnouncement = this.maxlengthReachedLabel[this.language].replace("{max}", String(this.maxlength));
304
+ }, 300);
305
+ };
255
306
  /**
256
307
  * Private functions
257
308
  */
309
+ // As comma may be used as decimal separator normalize value to have dot before parsing as number
310
+ this.valueAsNormalizedFloat = () => { var _a; return Number.parseFloat((_a = this.value) === null || _a === void 0 ? void 0 : _a.replace(/,/g, ".")); };
258
311
  this.getAriaDescribedBy = () => {
259
312
  const describedBy = [];
260
313
  if (this.isCaptionVisible && this.topCaptionId) {
@@ -275,6 +328,19 @@ export class DuetInput {
275
328
  }
276
329
  return describedBy.length > 0 ? describedBy.join(" ") : null;
277
330
  };
331
+ this.getAriaLabelledBy = () => {
332
+ const labelledBy = [this.labelId];
333
+ if (!!this.fieldPrefix) {
334
+ labelledBy.push(this.prefixId);
335
+ }
336
+ if (!!this.fieldSuffix) {
337
+ labelledBy.push(this.suffixId);
338
+ }
339
+ if (!!this.accessibleLabelledBy) {
340
+ labelledBy.push(this.accessibleLabelledBy);
341
+ }
342
+ return labelledBy.join(" ");
343
+ };
278
344
  this.handleClearClick = (event) => {
279
345
  const clearing = this.clearInput();
280
346
  this.onClear(event);
@@ -365,7 +431,31 @@ export class DuetInput {
365
431
  * This is a proxy for the enclosed native inputs validity
366
432
  */
367
433
  get validity() {
368
- return this.nativeInput.validity;
434
+ var _a, _b;
435
+ // Copy the value of the native validity state to a proxy object, as native validity is readonly.
436
+ const validity = {
437
+ badInput: false,
438
+ customError: false,
439
+ patternMismatch: false,
440
+ rangeOverflow: false,
441
+ rangeUnderflow: false,
442
+ stepMismatch: false,
443
+ tooLong: false,
444
+ tooShort: false,
445
+ typeMismatch: false,
446
+ valid: true,
447
+ valueMissing: false,
448
+ };
449
+ Object.keys(validity).forEach(key => (validity[key] = this.nativeInput.validity[key]));
450
+ if (typeof this.max !== "undefined" && ((_a = this.value) === null || _a === void 0 ? void 0 : _a.length) && this.max < this.valueAsNormalizedFloat()) {
451
+ validity.rangeOverflow = true;
452
+ validity.valid = false;
453
+ }
454
+ if (typeof this.min !== "undefined" && ((_b = this.value) === null || _b === void 0 ? void 0 : _b.length) && this.min > this.valueAsNormalizedFloat()) {
455
+ validity.rangeUnderflow = true;
456
+ validity.valid = false;
457
+ }
458
+ return validity;
369
459
  }
370
460
  /**
371
461
  * @internal
@@ -380,7 +470,8 @@ export class DuetInput {
380
470
  inheritGlobalTheme(this);
381
471
  this.disallowedPatternChange();
382
472
  this.isCaptionVisible = !!this.caption;
383
- checkNamedSlotElement(this.element, "tooltip", "duet-tooltip", 1, true);
473
+ // Accept also slot element so that other components using duet-input can pass their tooltip slots here.
474
+ checkNamedSlotElement(this.element, "tooltip", "duet-tooltip, slot", 1, true);
384
475
  }
385
476
  componentDidLoad() {
386
477
  if (this.variation === "revealable" && this.nativeInput.form) {
@@ -488,6 +579,21 @@ export class DuetInput {
488
579
  }
489
580
  }
490
581
  }
582
+ getAutocomplete() {
583
+ if (this.type === "password") {
584
+ return "off";
585
+ }
586
+ const tokens = this.autoComplete.split(/\s+/);
587
+ // If attribute includes "email", e.g. "work email", don't overwrite it
588
+ if (this.type === "email" && this.autoComplete !== "off" && !tokens.includes("email")) {
589
+ return "email";
590
+ }
591
+ // If attribute includes "tel", e.g. "mobile tel", don't overwrite it
592
+ if (this.type === "tel" && this.autoComplete !== "off" && !tokens.includes("tel")) {
593
+ return "tel";
594
+ }
595
+ return this.autoComplete;
596
+ }
491
597
  /**
492
598
  * Add a chip to the input. Property "chips" must be true.
493
599
  */
@@ -527,7 +633,7 @@ export class DuetInput {
527
633
  const identifier = this.identifier || this.inputId;
528
634
  const inputProps = {};
529
635
  if (this.numericKeyboard) {
530
- inputProps.inputmode = "numeric";
636
+ inputProps.inputmode = "decimal";
531
637
  }
532
638
  // Set validation regexes
533
639
  if (this.pattern && this.type !== "tel") {
@@ -552,7 +658,7 @@ export class DuetInput {
552
658
  this.type !== "password" &&
553
659
  this.type !== "time" &&
554
660
  this.variation !== "button";
555
- return (h(Host, { key: 'c36aabb598d1ab24aede9cacbbc0f8dfeaf7ff2f', class: { "duet-expand": this.expand, "duet-m-0": this.margin === "none" }, onKeyUp: e => this.keyHandler(e) }, this.type === "time" && (h("duet-visually-hidden", { key: 'ee9481c94a8beeeb5b22e5f9f3dc92a96111e3e8', "aria-live": "polite", "aria-atomic": "true" }, selectedTime ? `${this.timeAnnouncement[this.language]} ${selectedTime.toLocaleTimeString()}` : "")), h("div", { key: 'a75cdb69696761e21eb42620bc3162f3ffbe062e', class: {
661
+ return (h(Host, { key: '1119e8e51f3a490e34665e77ce32ec21f7bc70c7', class: { "duet-expand": this.expand, "duet-m-0": this.margin === "none" }, onKeyUp: e => this.keyHandler(e) }, this.type === "time" && (h("duet-visually-hidden", { key: '31afa65dcb1b161f8c5a87c65953a26a552066b8', "aria-live": "polite", "aria-atomic": "true" }, selectedTime ? `${this.timeAnnouncement[this.language]} ${selectedTime.toLocaleTimeString()}` : "")), h("div", { key: '5574afef8c592593193cbf0c99eaf8eaa84dbf11', class: {
556
662
  "duet-input-container": true,
557
663
  "duet-theme-turva": this.theme === "turva",
558
664
  [`duet-input-variation-${this.variation}`]: true,
@@ -565,12 +671,15 @@ export class DuetInput {
565
671
  "has-chips": this.chips,
566
672
  "has-clear": this.clear,
567
673
  "has-focus": this.isFocused,
674
+ "has-adornment": !!this.fieldPrefix || !!this.fieldSuffix,
675
+ "has-prefix": !!this.fieldPrefix,
676
+ "has-suffix": !!this.fieldSuffix,
568
677
  disabled: this.disabled,
569
- } }, h("div", { key: '84b4ba43c2fbbdf7b390dba0a7f0dc839626b5ed', class: "duet-input-label-container" }, h(DuetInternalLabel, { key: 'a7134e94f657eab2c9c5156a81269712c83ec270', theme: this.theme === "turva" ? "turva" : "default", margin: this.isCaptionVisible ? "small" : "auto", color: this.labelColor, weight: this.labelWeight, id: this.labelId, for: identifier }, this.label), this.tooltip && (h("duet-tooltip", { key: '669a1461aedfebd1c2e66077beda1c298b77458c', class: "duet-input-tooltip", direction: this.tooltipDirection, accessibleInputLabel: this.label, theme: this.theme === "turva" ? "turva" : "default" }, this.tooltip)), h("slot", { key: 'ad5e55d3a36ade247c1508eeffe9de96df514c51', name: "tooltip" })), this.caption && (h("duet-caption", { key: '5c4bfb71d79efe8be226ba521c95c5d8fbec67de', id: this.topCaptionId, size: "medium" }, this.caption)), h("div", { key: '4dfa6f211f3d00f6906d8e18ea9c4fdcc8ec3877', class: {
678
+ } }, h("div", { key: 'cd0dfb4e8ef821c84d342fff017da9b3e6938134', class: "duet-input-label-container" }, h(DuetInternalLabel, { key: '7ef9a4e3ccbc5b7ac030ca66912eb0471103ed10', theme: this.theme === "turva" ? "turva" : "default", margin: this.isCaptionVisible ? "small" : "auto", color: this.labelColor, weight: this.labelWeight, id: this.labelId, for: identifier }, this.label), this.tooltip && (h("duet-tooltip", { key: 'f263424aa51a59f4252cad4b4a1347b5986869ae', class: "duet-input-tooltip", direction: this.tooltipDirection, accessibleInputLabel: this.label, theme: this.theme === "turva" ? "turva" : "default" }, this.tooltip)), h("slot", { key: 'b4afd5ae65bbc03083b81996965cb354d6fd2a35', name: "tooltip" })), this.caption && (h("duet-caption", { key: '1d126824ee2ef4b7a4dae8650363e9da0b58c288', id: this.topCaptionId, size: "medium" }, this.caption)), h("div", { key: 'adb5b8fa3b3de37c96d74fd1b888de75689a3ce0', class: {
570
679
  "duet-input-relative": true,
571
680
  "duet-theme-turva": this.theme === "turva",
572
681
  "has-error": !!this.error,
573
- } }, this.placeholder && this.echoPlaceholder && (this.value || this.type === "time") && (h("duet-caption", { key: 'f7811efcc2acfa5b01b1efd6d334a35c35350ca1', id: this.topCaptionPlaceholderId, class: "duet-input-placeholder", margin: "none", size: "small" }, this.placeholder)), this.chips && (h("duet-visually-hidden", { key: 'f4c6f4a8974bfca86248b528b05f84d50c73ba4c', id: this.chipCountId }, ", ", `${this.getAllChips().length} ${getLocaleString(this.chipsSelectedDesriptionLabel)}`, ",")), this.variation === "button-left" && h("slot", { key: 'b270e8b1fe5c958c76b9ba82e7c25aedf35ae710', name: "button-left" }), h("input", Object.assign({ key: 'ee3e9844d6fd27bafb895d0f08a2ce2282237024', ref: input => (this.nativeInput = input), onInput: this.onInput, onBlur: this.onBlur, onFocus: this.onFocus, type: this.getInputType(), class: {
682
+ } }, this.placeholder && this.echoPlaceholder && (this.value || this.type === "time") && (h("duet-caption", { key: 'fcadd06bf9e0dc4115c0bd004de23fa5692b03fc', id: this.topCaptionPlaceholderId, class: "duet-input-placeholder", margin: "none", size: "small" }, this.placeholder)), this.chips && (h("duet-visually-hidden", { key: '84a8a1feed5a0895936f5e1d5ee310c6282f1678', id: this.chipCountId }, ", ", `${this.getAllChips().length} ${getLocaleString(this.chipsSelectedDesriptionLabel)}`, ",")), this.variation === "button-left" && h("slot", { key: '90533c1b234e2644eb97317f903abbf04fee8138', name: "button-left" }), this.fieldPrefix && (h("span", { key: '151fd6757766b8c7e86ded73639d87bb32814089', class: "input-adornment prefix", id: this.prefixId }, this.fieldPrefix)), h("input", Object.assign({ key: '06811722717032661d4ba5e3bfa9c2b6196cf082', ref: input => (this.nativeInput = input), onInput: this.onInput, onKeyDown: this.onInputKeyDown, onPaste: this.onInputPaste, onBlur: this.onBlur, onFocus: this.onFocus, type: this.getInputType(), class: {
574
683
  "duet-input": true,
575
684
  disabled: this.disabled,
576
685
  "is-number": this.component === "number",
@@ -578,17 +687,17 @@ export class DuetInput {
578
687
  "after-chip": this.getAllChips().length > 0,
579
688
  "align-right": this.inputAlign === "right",
580
689
  [`input-padding-${this.inputPadding}`]: true,
581
- }, value: this.value, disabled: this.disabled, "aria-invalid": this.error ? "true" : "false", "aria-labelledby": this.accessibleLabelledBy ? `${this.labelId} ${this.accessibleLabelledBy}` : this.labelId, "aria-controls": this.accessibleControls, "aria-autocomplete": this.accessibleAutocomplete, "aria-activedescendant": this.accessibleActiveDescendant, "aria-details": this.accessibleDetails, "aria-description": this.accessibleDescription, "aria-expanded": this.accessibleExpanded, "aria-haspopup": this.accessibleHasPopup, "aria-owns": this.accessibleOwns, "aria-describedby": this.getAriaDescribedBy(), placeholder: this.placeholder, spellcheck: "false", minlength: this.minlength, maxlength: this.maxlength, autocomplete: this.type === "password" ? "off" : this.autoComplete, required: this.required, role: this.role, name: this.name, id: identifier }, inputProps)), !this.value && hasInputIcon && (h("div", { key: 'f021ac46e0c9738775a03965e2c3497d80c4dced', class: "duet-input-icon" }, h("duet-icon", { key: '56bff364b7c70d530c3dd809b2a8a2f7fe1fff5b', margin: "none", size: "small", icon: icons[this.type].svg, color: "currentColor" }))), this.clear && this.value && (h("div", { key: '7eb63087db85f1095034e2584cf4d1d4b124c82a', class: {
690
+ }, value: this.value, disabled: this.disabled, "aria-invalid": this.error ? "true" : "false", "aria-labelledby": this.getAriaLabelledBy(), "aria-controls": this.accessibleControls, "aria-autocomplete": this.accessibleAutocomplete, "aria-activedescendant": this.accessibleActiveDescendant, "aria-details": this.accessibleDetails, "aria-description": this.accessibleDescription, "aria-expanded": this.accessibleExpanded, "aria-haspopup": this.accessibleHasPopup, "aria-owns": this.accessibleOwns, "aria-describedby": this.getAriaDescribedBy(), placeholder: this.placeholder, spellcheck: "false", minlength: this.minlength, maxlength: this.maxlength, autocomplete: this.getAutocomplete(), required: this.required, role: this.role, name: this.name, id: identifier }, inputProps)), this.maxlength && (h("duet-visually-hidden", { key: `maxlength-announcement-${this.maxlengthAnnouncementKey}`, "aria-live": "polite", "aria-atomic": "true" }, this.maxlengthAnnouncement)), this.fieldSuffix && (h("span", { key: 'b2d284fc05798f7dab08555f524cabf4f94f0e19', class: "input-adornment suffix", id: this.suffixId }, this.fieldSuffix)), !this.value && hasInputIcon && (h("div", { key: '8364a8a7687b6e37279585edf55da9005673f4df', class: "duet-input-icon" }, h("duet-icon", { key: '1b420da3e76241f1e105ce5ef8b9f40e6490424d', margin: "none", size: "small", icon: icons[this.type].svg, color: "currentColor" }))), this.clear && this.value && (h("div", { key: 'c67978258fbf64a22563a8e139b7a7de012bb4ca', class: {
582
691
  "duet-input-clear-icon": true,
583
692
  "duet-input-clear-icon-single": !hasInputIcon,
584
693
  "duet-input-clear-icon-double": !!this.icon,
585
694
  "duet-input-clear-icon-button": this.variation === "button",
586
695
  [`input-padding-${this.inputPadding}`]: true,
587
- } }, h("button", { key: '72fb4efe7f5d0ea161c7401acb59f2b20a77adac', onClick: this.handleClearClick, id: this.clearId, "aria-label": this.clearLabel[this.language], "aria-keyshortcuts": "Escape" }, h("duet-icon", { key: 'f9df024692c1be597b37cedc74c8203e8fabb908', margin: "none", size: "medium", name: "action-clear-input", color: "currentColor" })))), this.icon && this.variation !== "button" && (h("div", { key: 'bca090dc2f20e1febe6674059e0a3b22c2d79d2f', class: "duet-input-icon" }, h("duet-icon", { key: '9066e27643ad85bc683cd36a5998e7bd0fcad572', margin: "none", size: "small", name: this.icon, color: "currentColor" }))), this.variation === "button" && h("slot", { key: 'c83a2b95a969c7f1c2f7a3915cdfce56d1c525b8', name: "button" }), this.variation === "revealable" && (h("duet-button", { key: '86fc4aaddb775f76d602b699bdc8c811f41f2561', ref: button => (this.togglePasswordRevealedButton = button), onBlur: this.onBlur, onFocus: this.onFocus, onClick: this.togglePasswordRevealed, icon: this.isPasswordRevealed ? "action-hide" : "action-show", accessibleLabel: this.isPasswordRevealed
696
+ } }, h("button", { key: 'b243244d6d5184c42a9afb93483479a0b07bad7d', onClick: this.handleClearClick, id: this.clearId, "aria-label": this.clearLabel[this.language], "aria-keyshortcuts": "Escape" }, h("duet-icon", { key: '2ff21863005e55dc7a4dc1a16e2e2e40ad7f85cf', margin: "none", size: "medium", name: "action-clear-input", color: "currentColor" })))), this.icon && this.variation !== "button" && (h("div", { key: '7732892f159a6c7c9ad7c89b0031052b1ed45502', class: "duet-input-icon" }, h("duet-icon", { key: '97de6dc8ff0c506db494dc36edc6d0107792c2b9', margin: "none", size: "small", name: this.icon, color: "currentColor" }))), this.variation === "button" && h("slot", { key: '5c940caf605e2eaff4db2a36c63548db78f36f41', name: "button" }), this.variation === "revealable" && (h("duet-button", { key: 'caf0a7c8bec4a620e2ca5f897eaabc1814f32c5d', ref: button => (this.togglePasswordRevealedButton = button), onBlur: this.onBlur, onFocus: this.onFocus, onClick: this.togglePasswordRevealed, icon: this.isPasswordRevealed ? "action-hide" : "action-show", accessibleLabel: this.isPasswordRevealed
588
697
  ? this.hidePasswordLabel[this.language]
589
- : this.showPasswordLabel[this.language], margin: "none", variation: "input-button-embedded", fixed: true, iconOnly: true })), this.variation === "revealable" && this.isPasswordRevealed !== undefined && (h("duet-visually-hidden", { key: 'dfa0a59d038af09b5115dae28772c108918154ab' }, h("span", { key: '00408d3c2616c8e1aa64b41503ae7760c1fd60af', "aria-live": "polite" }, this.isPasswordRevealed
698
+ : this.showPasswordLabel[this.language], margin: "none", variation: "input-button-embedded", fixed: true, iconOnly: true })), this.variation === "revealable" && this.isPasswordRevealed !== undefined && (h("duet-visually-hidden", { key: 'cc394dbd7d28fc9e1cf0a864c67e7e7a6a835d1a' }, h("span", { key: '20033ed28c86634d6faf03180e53cff84def1329', "aria-live": "polite" }, this.isPasswordRevealed
590
699
  ? this.passwordShownAriaAnnouncement[this.language]
591
- : this.passwordHiddenAriaAnnouncement[this.language]))), h("slot", { key: '3b539164f49b311fcdc82ce75cb75d360e148c4b' })), h("span", { key: '2f2f5abff72831b7257d404dfedecb8bea316762', class: "duet-input-help", id: this.errorId, "aria-atomic": "true", "aria-live": this.accessibleLiveError, "aria-relevant": "additions removals" }, this.error && h("span", { key: '63e8da0c2b2638d8af7f0b87f4e00ab5d5b7aa8c', class: "duet-input-error" }, this.error)))));
700
+ : this.passwordHiddenAriaAnnouncement[this.language]))), h("slot", { key: 'b72c50503fa80fd1ba6764b7b3348bc5d7b2813c' })), h("span", { key: '25790e8c5147bb271fefa6cbce2343287b57c816', class: "duet-input-help", id: this.errorId, "aria-atomic": "true", "aria-live": this.accessibleLiveError, "aria-relevant": "additions removals" }, this.error && h("span", { key: 'c62d261a03ebec492aed9c65a836525e47660cfc', class: "duet-input-error" }, this.error)))));
592
701
  }
593
702
  static get is() { return "duet-input"; }
594
703
  static get encapsulation() { return "shadow"; }
@@ -636,7 +745,7 @@ export class DuetInput {
636
745
  "optional": false,
637
746
  "docs": {
638
747
  "tags": [],
639
- "text": "Indicates what kind of user input completion suggestions are provided."
748
+ "text": "Indicates in what mode user input completion suggestions are provided. Valid values are: \"none\", \"inline\",\n\"list\", \"both\""
640
749
  },
641
750
  "getter": false,
642
751
  "setter": false,
@@ -1108,7 +1217,7 @@ export class DuetInput {
1108
1217
  "references": {
1109
1218
  "DuetInputType": {
1110
1219
  "location": "local",
1111
- "path": "/Users/juha-matti.laaksonen/duetds/packages/components/src/components/duet-input/duet-input.tsx",
1220
+ "path": "/Users/kasimir/projects/lahitapiola/duet-design-system/packages/components/src/components/duet-input/duet-input.tsx",
1112
1221
  "id": "src/components/duet-input/duet-input.tsx::DuetInputType"
1113
1222
  }
1114
1223
  }
@@ -1134,7 +1243,7 @@ export class DuetInput {
1134
1243
  "references": {
1135
1244
  "DuetVariationType": {
1136
1245
  "location": "local",
1137
- "path": "/Users/juha-matti.laaksonen/duetds/packages/components/src/components/duet-input/duet-input.tsx",
1246
+ "path": "/Users/kasimir/projects/lahitapiola/duet-design-system/packages/components/src/components/duet-input/duet-input.tsx",
1138
1247
  "id": "src/components/duet-input/duet-input.tsx::DuetVariationType"
1139
1248
  }
1140
1249
  }
@@ -1274,6 +1383,44 @@ export class DuetInput {
1274
1383
  "reflect": false,
1275
1384
  "defaultValue": "false"
1276
1385
  },
1386
+ "fieldPrefix": {
1387
+ "type": "string",
1388
+ "attribute": "field-prefix",
1389
+ "mutable": false,
1390
+ "complexType": {
1391
+ "original": "string",
1392
+ "resolved": "string",
1393
+ "references": {}
1394
+ },
1395
+ "required": false,
1396
+ "optional": false,
1397
+ "docs": {
1398
+ "tags": [],
1399
+ "text": "Text to show before the start (left) of the input's editable area. Also used in accessible labelling."
1400
+ },
1401
+ "getter": false,
1402
+ "setter": false,
1403
+ "reflect": false
1404
+ },
1405
+ "fieldSuffix": {
1406
+ "type": "string",
1407
+ "attribute": "field-suffix",
1408
+ "mutable": false,
1409
+ "complexType": {
1410
+ "original": "string",
1411
+ "resolved": "string",
1412
+ "references": {}
1413
+ },
1414
+ "required": false,
1415
+ "optional": false,
1416
+ "docs": {
1417
+ "tags": [],
1418
+ "text": "Text to show after the end (right) of the input's editable area. Also used in accessible labelling."
1419
+ },
1420
+ "getter": false,
1421
+ "setter": false,
1422
+ "reflect": false
1423
+ },
1277
1424
  "numericKeyboard": {
1278
1425
  "type": "boolean",
1279
1426
  "attribute": "numeric-keyboard",
@@ -1287,7 +1434,7 @@ export class DuetInput {
1287
1434
  "optional": false,
1288
1435
  "docs": {
1289
1436
  "tags": [],
1290
- "text": "Enable numeric keyboard for the input."
1437
+ "text": "Enable numeric keyboard for the input. Note that on iOS the numeric keyboard does not contain minus."
1291
1438
  },
1292
1439
  "getter": false,
1293
1440
  "setter": false,
@@ -1370,6 +1517,44 @@ export class DuetInput {
1370
1517
  "setter": false,
1371
1518
  "reflect": false
1372
1519
  },
1520
+ "max": {
1521
+ "type": "number",
1522
+ "attribute": "max",
1523
+ "mutable": false,
1524
+ "complexType": {
1525
+ "original": "number",
1526
+ "resolved": "number",
1527
+ "references": {}
1528
+ },
1529
+ "required": false,
1530
+ "optional": false,
1531
+ "docs": {
1532
+ "tags": [],
1533
+ "text": "When max is set and getting validity, the value of the input is interpreted as a number - possible comma as\ndecimal seprator changed to dot and the value then parsed as float - and compared to max and validity set\naccordingly. This simulates the behavior of max attribute of input[type=number]."
1534
+ },
1535
+ "getter": false,
1536
+ "setter": false,
1537
+ "reflect": false
1538
+ },
1539
+ "min": {
1540
+ "type": "number",
1541
+ "attribute": "min",
1542
+ "mutable": false,
1543
+ "complexType": {
1544
+ "original": "number",
1545
+ "resolved": "number",
1546
+ "references": {}
1547
+ },
1548
+ "required": false,
1549
+ "optional": false,
1550
+ "docs": {
1551
+ "tags": [],
1552
+ "text": "When min is set and getting validity, the value of the input is interpreted as a number - possible comma as\ndecimal seprator changed to dot and the value then parsed as float - and compared to min and validity set\naccordingly. This simulates the behavior of min attribute of input[type=number]."
1553
+ },
1554
+ "getter": false,
1555
+ "setter": false,
1556
+ "reflect": false
1557
+ },
1373
1558
  "placeholder": {
1374
1559
  "type": "string",
1375
1560
  "attribute": "placeholder",
@@ -1399,7 +1584,7 @@ export class DuetInput {
1399
1584
  "references": {
1400
1585
  "DuetInputComponentType": {
1401
1586
  "location": "local",
1402
- "path": "/Users/juha-matti.laaksonen/duetds/packages/components/src/components/duet-input/duet-input.tsx",
1587
+ "path": "/Users/kasimir/projects/lahitapiola/duet-design-system/packages/components/src/components/duet-input/duet-input.tsx",
1403
1588
  "id": "src/components/duet-input/duet-input.tsx::DuetInputComponentType"
1404
1589
  }
1405
1590
  }
@@ -1475,7 +1660,7 @@ export class DuetInput {
1475
1660
  "optional": false,
1476
1661
  "docs": {
1477
1662
  "tags": [],
1478
- "text": "Enable or disable automatic completion by the browser"
1663
+ "text": "Set the type of automatic completion by the browser. If possible use the standard tokens like \"name\", \"given-name\",\n\"family-name\", \"postal-code\", \"street-address\" etc. The component adds automatically \"tel\" and \"email\". If you must\ndisable autocomplete use \"off\" (but avoid disabling unless absolutely necessary)."
1479
1664
  },
1480
1665
  "getter": false,
1481
1666
  "setter": false,
@@ -1623,7 +1808,8 @@ export class DuetInput {
1623
1808
  "language": {},
1624
1809
  "isPasswordRevealed": {},
1625
1810
  "isFocused": {},
1626
- "_accessiblePopup": {}
1811
+ "_accessiblePopup": {},
1812
+ "maxlengthAnnouncement": {}
1627
1813
  };
1628
1814
  }
1629
1815
  static get events() {
@@ -1643,7 +1829,7 @@ export class DuetInput {
1643
1829
  "references": {
1644
1830
  "DuetInputEvent": {
1645
1831
  "location": "local",
1646
- "path": "/Users/juha-matti.laaksonen/duetds/packages/components/src/components/duet-input/duet-input.tsx",
1832
+ "path": "/Users/kasimir/projects/lahitapiola/duet-design-system/packages/components/src/components/duet-input/duet-input.tsx",
1647
1833
  "id": "src/components/duet-input/duet-input.tsx::DuetInputEvent"
1648
1834
  }
1649
1835
  }
@@ -1664,7 +1850,7 @@ export class DuetInput {
1664
1850
  "references": {
1665
1851
  "DuetInputEvent": {
1666
1852
  "location": "local",
1667
- "path": "/Users/juha-matti.laaksonen/duetds/packages/components/src/components/duet-input/duet-input.tsx",
1853
+ "path": "/Users/kasimir/projects/lahitapiola/duet-design-system/packages/components/src/components/duet-input/duet-input.tsx",
1668
1854
  "id": "src/components/duet-input/duet-input.tsx::DuetInputEvent"
1669
1855
  }
1670
1856
  }
@@ -1685,7 +1871,7 @@ export class DuetInput {
1685
1871
  "references": {
1686
1872
  "DuetInputEvent": {
1687
1873
  "location": "local",
1688
- "path": "/Users/juha-matti.laaksonen/duetds/packages/components/src/components/duet-input/duet-input.tsx",
1874
+ "path": "/Users/kasimir/projects/lahitapiola/duet-design-system/packages/components/src/components/duet-input/duet-input.tsx",
1689
1875
  "id": "src/components/duet-input/duet-input.tsx::DuetInputEvent"
1690
1876
  }
1691
1877
  }
@@ -1706,7 +1892,7 @@ export class DuetInput {
1706
1892
  "references": {
1707
1893
  "DuetInputEvent": {
1708
1894
  "location": "local",
1709
- "path": "/Users/juha-matti.laaksonen/duetds/packages/components/src/components/duet-input/duet-input.tsx",
1895
+ "path": "/Users/kasimir/projects/lahitapiola/duet-design-system/packages/components/src/components/duet-input/duet-input.tsx",
1710
1896
  "id": "src/components/duet-input/duet-input.tsx::DuetInputEvent"
1711
1897
  }
1712
1898
  }
@@ -1727,7 +1913,7 @@ export class DuetInput {
1727
1913
  "references": {
1728
1914
  "DuetInputEvent": {
1729
1915
  "location": "local",
1730
- "path": "/Users/juha-matti.laaksonen/duetds/packages/components/src/components/duet-input/duet-input.tsx",
1916
+ "path": "/Users/kasimir/projects/lahitapiola/duet-design-system/packages/components/src/components/duet-input/duet-input.tsx",
1731
1917
  "id": "src/components/duet-input/duet-input.tsx::DuetInputEvent"
1732
1918
  }
1733
1919
  }
@@ -121,7 +121,7 @@ export class DuetLabel {
121
121
  "references": {
122
122
  "DuetLabelMargin": {
123
123
  "location": "local",
124
- "path": "/Users/juha-matti.laaksonen/duetds/packages/components/src/components/duet-label/duet-label.tsx",
124
+ "path": "/Users/kasimir/projects/lahitapiola/duet-design-system/packages/components/src/components/duet-label/duet-label.tsx",
125
125
  "id": "src/components/duet-label/duet-label.tsx::DuetLabelMargin"
126
126
  }
127
127
  }
@@ -147,7 +147,7 @@ export class DuetLabel {
147
147
  "references": {
148
148
  "DuetLabelSize": {
149
149
  "location": "local",
150
- "path": "/Users/juha-matti.laaksonen/duetds/packages/components/src/components/duet-label/duet-label.tsx",
150
+ "path": "/Users/kasimir/projects/lahitapiola/duet-design-system/packages/components/src/components/duet-label/duet-label.tsx",
151
151
  "id": "src/components/duet-label/duet-label.tsx::DuetLabelSize"
152
152
  }
153
153
  }
@@ -66,24 +66,24 @@ export class DuetLayout {
66
66
  * Always the last one in the class.
67
67
  */
68
68
  render() {
69
- return (h(Host, { key: '53712da1e22dc258d30906570bf1271624379ed8', class: {
69
+ return (h(Host, { key: 'c3ba619c0c3088257b425ba8f5022ebef33c1100', class: {
70
70
  center: this.center,
71
71
  "duet-middle": this.middle,
72
72
  "duet-ie": isInternetExplorer(),
73
- } }, h("div", { key: '80dc2f3b86a02c22c7aebd8802bd332154c4a273', class: { "duet-layout-wrapper": true, "duet-m-0": this.margin === "none" } }, this.hasTop && (h("div", { key: '9f3f4c713d5b921ad78480072e3dcea4d4867d04', class: {
73
+ } }, h("div", { key: 'd627f63579dfb957bf3abe17191e8a8e943f0aae', class: { "duet-layout-wrapper": true, "duet-m-0": this.margin === "none" } }, this.hasTop && (h("div", { key: '4586ff77f2ef4209020a2401eef63273527a2e27', class: {
74
74
  "duet-layout-top": true,
75
75
  "duet-center": this.center,
76
- } }, h("div", { key: '7cd44f76b96b5e2bd6033cc044f08e75a10760ed', class: "duet-layout-top-wrapper" }, h("slot", { key: '7743f1fe659f31925b27a85a970e934506b935e7', name: "top" })))), h("div", { key: '637a68f8376e073f146c63f2c866b6f52722577e', class: {
76
+ } }, h("div", { key: 'daebb47e73054b59bb0459dc3327e0e60b17ebbe', class: "duet-layout-top-wrapper" }, h("slot", { key: '339fac00b53c0b4f532cfc77d5743217b5f72057', name: "top" })))), h("div", { key: 'bbf287d1f0aa701c40553a426b7a77b0a1c24c17', class: {
77
77
  "duet-layout": true,
78
78
  "has-sidebar": this.hasSidebar,
79
79
  "duet-center": this.center,
80
80
  [`padding-${this.paddingBreakpoint}`]: !!this.paddingBreakpoint,
81
- } }, h("main", { key: 'f6b2682dfb675be08976b23a485cf1a7ad76de0c', class: "duet-main" }, this.hasPageHeading && h("slot", { key: '9ec618959d54d768b880f95e05df0e5aaf76de75', name: "page-heading" }), h("slot", { key: 'b3c960b48d55fb863854fc34e126b1a143b3d194', name: "main" })), this.hasSidebar && (h("aside", { key: '68671aab139ba365d60284909e489a78bd7438d3', class: "duet-sidebar" }, h("div", { key: '60a53e1fa61ccec8fa2b85f20b475c52e016b963', class: {
81
+ } }, h("main", { key: '0d75aa9aeb65fa61f8e0ff114cee467abe49f1cd', class: "duet-main" }, this.hasPageHeading && h("slot", { key: 'fd0ed7464c54122f1cfbbfbfc40f78d8c9ab41c7', name: "page-heading" }), h("slot", { key: '1004e4007a1d82e22147ddf3a883e8ddc9c7b0dc', name: "main" })), this.hasSidebar && (h("aside", { key: '167c6d2495c8bbc7cd0275f723e0810b9fc311b6', class: "duet-sidebar" }, h("div", { key: 'f0bbcbeb756bf18ba1b678c405c3890fb00ad857', class: {
82
82
  "duet-sidebar-container": true,
83
83
  "has-tabs": this.tabs,
84
84
  sticky: this.sticky,
85
85
  [this.stickyDistance]: this.sticky,
86
- } }, h("slot", { key: 'a6131a1af98bb5cf2c6c808b15cea9e6996143f3', name: "sidebar" }))))))));
86
+ } }, h("slot", { key: 'b8b30e8b29bb87ea6a0c0891ca5f841d0921f72b', name: "sidebar" }))))))));
87
87
  }
88
88
  static get is() { return "duet-layout"; }
89
89
  static get encapsulation() { return "shadow"; }
@@ -155,7 +155,7 @@ export class DuetLayout {
155
155
  "references": {
156
156
  "DuetLayoutStickyDistance": {
157
157
  "location": "local",
158
- "path": "/Users/juha-matti.laaksonen/duetds/packages/components/src/components/duet-layout/duet-layout.tsx",
158
+ "path": "/Users/kasimir/projects/lahitapiola/duet-design-system/packages/components/src/components/duet-layout/duet-layout.tsx",
159
159
  "id": "src/components/duet-layout/duet-layout.tsx::DuetLayoutStickyDistance"
160
160
  }
161
161
  }
@@ -187,10 +187,10 @@ export class DuetLink {
187
187
  const Tag = !this.url && this.variation !== "default" ? "button" : "a";
188
188
  const role = !this.url && this.variation === "default" ? "button" : null;
189
189
  const isButton = Tag === "button";
190
- return (h(Host, { key: '7fc9958dae390b84feaddc854bf6b039d3bd00a4', class: {
190
+ return (h(Host, { key: '07cf184d2f321700e665e358f8a0cb988e798da8', class: {
191
191
  [`duet-link-${this.variation}`]: true,
192
192
  "duet-m-0": this.margin === "none",
193
- } }, h(Tag, { key: '1d0baa8ee391bbfc51eb30936564d9e7d1a7de97', href: this.url, class: {
193
+ } }, h(Tag, { key: 'bb416240f5adc73c8eeacbd4ca0524619326a954', href: this.url, class: {
194
194
  "duet-link": true,
195
195
  "duet-link-is-external": this.external,
196
196
  "duet-link-is-download": !!this.download,
@@ -101,7 +101,7 @@ export class DuetList {
101
101
  * Always the last one in the class.
102
102
  */
103
103
  render() {
104
- return (h("dl", { key: '82930dea1fe1193f295b5888ed5f06a85693faaa', class: { "duet-list-component": true, "duet-m-0": this.margin === "none" } }, h("slot", { key: '44602efe41782f5dc0221b0fe2dd2ac6dc905ae3' })));
104
+ return (h("dl", { key: 'c83e43f3d82e32198e0a5d45a0812b8358f6be07', class: { "duet-list-component": true, "duet-m-0": this.margin === "none" } }, h("slot", { key: '7a65328f555edf10f4da02166eebcfcf8b8f68f7' })));
105
105
  }
106
106
  static get is() { return "duet-list"; }
107
107
  static get encapsulation() { return "shadow"; }
@@ -205,7 +205,7 @@ export class DuetList {
205
205
  "references": {
206
206
  "DuetListMobileAlignment": {
207
207
  "location": "local",
208
- "path": "/Users/juha-matti.laaksonen/duetds/packages/components/src/components/duet-list/duet-list.tsx",
208
+ "path": "/Users/kasimir/projects/lahitapiola/duet-design-system/packages/components/src/components/duet-list/duet-list.tsx",
209
209
  "id": "src/components/duet-list/duet-list.tsx::DuetListMobileAlignment"
210
210
  }
211
211
  }
@@ -257,7 +257,7 @@ export class DuetList {
257
257
  "references": {
258
258
  "DuetListVariation": {
259
259
  "location": "local",
260
- "path": "/Users/juha-matti.laaksonen/duetds/packages/components/src/components/duet-list/duet-list.tsx",
260
+ "path": "/Users/kasimir/projects/lahitapiola/duet-design-system/packages/components/src/components/duet-list/duet-list.tsx",
261
261
  "id": "src/components/duet-list/duet-list.tsx::DuetListVariation"
262
262
  }
263
263
  }
@@ -283,7 +283,7 @@ export class DuetList {
283
283
  "references": {
284
284
  "DuetListLabelWidth": {
285
285
  "location": "local",
286
- "path": "/Users/juha-matti.laaksonen/duetds/packages/components/src/components/duet-list/duet-list.tsx",
286
+ "path": "/Users/kasimir/projects/lahitapiola/duet-design-system/packages/components/src/components/duet-list/duet-list.tsx",
287
287
  "id": "src/components/duet-list/duet-list.tsx::DuetListLabelWidth"
288
288
  }
289
289
  }
@@ -34,7 +34,7 @@ export class DuetListItem {
34
34
  * Always the last one in the class.
35
35
  */
36
36
  render() {
37
- return (h(Host, { key: 'e4cd01b6b0c03f3d82beba7c85400711e49f6582', class: {
37
+ return (h(Host, { key: '83029afa5ebc666926eb1572b8ad9a311bdbfcf1', class: {
38
38
  "duet-theme-turva": this.theme === "turva",
39
39
  "duet-no-stacking": !this.responsive,
40
40
  "duet-list-item-breakpoint-x-small": this.breakpoint === "x-small",
@@ -42,7 +42,7 @@ export class DuetListItem {
42
42
  "duet-list-item-breakpoint-medium": this.breakpoint === "medium",
43
43
  "duet-list-item-breakpoint-large": this.breakpoint === "large",
44
44
  "duet-list-item-breakpoint-x-large": this.breakpoint === "x-large",
45
- } }, h("dt", { key: '9644bd50dfb2d6b45bd136bedcb6968f9a2675ba' }, h("slot", { key: 'db3550984b29dd4dad07eb4ab7d047652e83ac22', name: "label" })), h("dd", { key: '1e01b0449b667d1de8e9ba3ed9593725c5ce8353' }, h("slot", { key: 'c0662c72ff8ba3c2a13041b741b15ee1f9b0f544', name: "value" }))));
45
+ } }, h("dt", { key: '884936458d12b95cd553cd4dc4d8a237cd8e5830' }, h("slot", { key: 'b17473caf7b410acf49f8c68f9ae53b3071397d7', name: "label" })), h("dd", { key: 'e5c6aa8b8d8998d500d27493896a288f71861df6' }, h("slot", { key: '7a6a3b223c394bb3376d7734791cfd439076d5f7', name: "value" }))));
46
46
  }
47
47
  static get is() { return "duet-list-item"; }
48
48
  static get encapsulation() { return "shadow"; }