@duetds/components 6.11.2 → 7.0.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 (640) hide show
  1. package/hydrate/index.js +309 -230
  2. package/lib/cjs/duet-action-button.cjs.entry.js +3 -3
  3. package/lib/cjs/duet-alert.cjs.entry.js +14 -2
  4. package/lib/cjs/duet-badge.cjs.entry.js +1 -1
  5. package/lib/cjs/duet-banner.cjs.entry.js +3 -3
  6. package/lib/cjs/duet-breadcrumb.cjs.entry.js +1 -1
  7. package/lib/cjs/duet-breadcrumbs.cjs.entry.js +1 -1
  8. package/lib/cjs/duet-button_2.cjs.entry.js +3 -3
  9. package/lib/cjs/duet-callout.cjs.entry.js +1 -1
  10. package/lib/cjs/duet-caption_4.cjs.entry.js +3 -3
  11. package/lib/cjs/duet-card.cjs.entry.js +3 -3
  12. package/lib/cjs/duet-checkbox.cjs.entry.js +1 -1
  13. package/lib/cjs/duet-checkmark.cjs.entry.js +1 -1
  14. package/lib/cjs/duet-chip.cjs.entry.js +1 -1
  15. package/lib/cjs/duet-choice_2.cjs.entry.js +2 -2
  16. package/lib/cjs/duet-collapsible.cjs.entry.js +1 -1
  17. package/lib/cjs/duet-combobox.cjs.entry.js +1 -1
  18. package/lib/cjs/duet-contact-card.cjs.entry.js +1 -1
  19. package/lib/cjs/duet-cookie-consent.cjs.entry.js +1 -1
  20. package/lib/cjs/duet-date-picker.cjs.entry.js +2 -2
  21. package/lib/cjs/duet-divider_2.cjs.entry.js +3 -3
  22. package/lib/cjs/duet-editable-table_3.cjs.entry.js +25 -19
  23. package/lib/cjs/duet-empty-state.cjs.entry.js +1 -1
  24. package/lib/cjs/duet-fieldset.cjs.entry.js +3 -2
  25. package/lib/cjs/duet-footer.cjs.entry.js +1 -1
  26. package/lib/cjs/duet-grid_2.cjs.entry.js +1 -1
  27. package/lib/cjs/duet-header_2.cjs.entry.js +14 -9
  28. package/lib/cjs/duet-hero.cjs.entry.js +1 -1
  29. package/lib/cjs/duet-icon.cjs.entry.js +3 -3
  30. package/lib/cjs/duet-input_2.cjs.entry.js +1 -1
  31. package/lib/cjs/duet-layout.cjs.entry.js +1 -1
  32. package/lib/cjs/duet-list_2.cjs.entry.js +1 -1
  33. package/lib/cjs/duet-menu-bar-button.cjs.entry.js +1 -1
  34. package/lib/cjs/duet-menu-bar-dropdown-link.cjs.entry.js +1 -1
  35. package/lib/cjs/duet-menu-bar-dropdown.cjs.entry.js +1 -1
  36. package/lib/cjs/duet-menu-bar-link.cjs.entry.js +1 -1
  37. package/lib/cjs/duet-menu-bar.cjs.entry.js +1 -1
  38. package/lib/cjs/duet-modal.cjs.entry.js +6 -2
  39. package/lib/cjs/duet-multiselect.cjs.entry.js +1 -1
  40. package/lib/cjs/duet-nav.cjs.entry.js +1 -1
  41. package/lib/cjs/duet-notification_2.cjs.entry.js +1 -1
  42. package/lib/cjs/duet-number-input.cjs.entry.js +4 -1
  43. package/lib/cjs/duet-page-heading.cjs.entry.js +1 -1
  44. package/lib/cjs/duet-pagination_2.cjs.entry.js +1 -1
  45. package/lib/cjs/duet-popup-menu-item.cjs.entry.js +1 -1
  46. package/lib/cjs/duet-popup-menu.cjs.entry.js +5 -5
  47. package/lib/cjs/duet-progress.cjs.entry.js +1 -1
  48. package/lib/cjs/duet-promo-card.cjs.entry.js +3 -3
  49. package/lib/cjs/duet-radio_2.cjs.entry.js +1 -1
  50. package/lib/cjs/duet-range-slider.cjs.entry.js +2 -2
  51. package/lib/cjs/duet-scrollable_3.cjs.entry.js +1 -1
  52. package/lib/cjs/duet-section-layout.cjs.entry.js +1 -1
  53. package/lib/cjs/duet-select.cjs.entry.js +1 -1
  54. package/lib/cjs/duet-shaped-image.cjs.entry.js +1 -1
  55. package/lib/cjs/duet-show-more.cjs.entry.js +1 -1
  56. package/lib/cjs/duet-slideout-lang.cjs.entry.js +1 -1
  57. package/lib/cjs/duet-slideout-link.cjs.entry.js +1 -1
  58. package/lib/cjs/duet-slideout-panel-dropdown.cjs.entry.js +1 -1
  59. package/lib/cjs/duet-slideout-panel.cjs.entry.js +4 -4
  60. package/lib/cjs/duet-slideout.cjs.entry.js +4 -4
  61. package/lib/cjs/duet-step_2.cjs.entry.js +1 -1
  62. package/lib/cjs/duet-submenu-bar-dropdown-link.cjs.entry.js +1 -1
  63. package/lib/cjs/duet-submenu-bar-dropdown.cjs.entry.js +1 -1
  64. package/lib/cjs/duet-submenu-bar-link.cjs.entry.js +1 -1
  65. package/lib/cjs/duet-submenu-bar.cjs.entry.js +1 -1
  66. package/lib/cjs/duet-textarea.cjs.entry.js +1 -1
  67. package/lib/cjs/duet-toggle.cjs.entry.js +1 -1
  68. package/lib/cjs/duet-toolbar-dropdown-link.cjs.entry.js +1 -1
  69. package/lib/cjs/duet-toolbar-dropdown.cjs.entry.js +1 -1
  70. package/lib/cjs/duet-toolbar-link.cjs.entry.js +1 -1
  71. package/lib/cjs/duet-toolbar.cjs.entry.js +1 -1
  72. package/lib/cjs/duet-tooltip-button_2.cjs.entry.js +2 -2
  73. package/lib/cjs/duet-tooltip.cjs.entry.js +5 -5
  74. package/lib/cjs/duet-tray.cjs.entry.js +2 -2
  75. package/lib/cjs/duet-upload-aria-status.cjs.entry.js +1 -1
  76. package/lib/cjs/duet-upload-item.cjs.entry.js +5 -4
  77. package/lib/cjs/duet-visually-hidden.cjs.entry.js +1 -1
  78. package/lib/cjs/duet.cjs.js +2 -2
  79. package/lib/cjs/{teleport-d79735ca.js → floating-ui.dom.esm-d537b048.js} +154 -195
  80. package/lib/cjs/{focus-utils-e486f272.js → focus-utils-6d4f01d9.js} +1 -1
  81. package/lib/cjs/{index-04de4d35.js → index-b7f668db.js} +1 -1
  82. package/lib/cjs/loader.cjs.js +2 -2
  83. package/lib/cjs/teleport-04ad16c2.js +88 -0
  84. package/lib/cjs/{token-utils-18a05118.js → token-utils-c1864408.js} +1 -1
  85. package/lib/cjs/{tokens.module-d30fb52a.js → tokens.module-5fe478ed.js} +0 -1
  86. package/lib/collection/components/duet-action-button/duet-action-button.js +2 -2
  87. package/lib/collection/components/duet-alert/duet-alert.js +54 -2
  88. package/lib/collection/components/duet-button/duet-button.js +5 -5
  89. package/lib/collection/components/duet-caption/duet-caption.js +1 -1
  90. package/lib/collection/components/duet-card/duet-card.js +3 -3
  91. package/lib/collection/components/duet-checkbox/duet-checkbox.js +3 -3
  92. package/lib/collection/components/duet-chip/duet-chip.js +4 -4
  93. package/lib/collection/components/duet-choice/duet-choice.js +3 -3
  94. package/lib/collection/components/duet-collapsible/duet-collapsible.js +3 -3
  95. package/lib/collection/components/duet-combobox/duet-combobox.js +3 -3
  96. package/lib/collection/components/duet-cookie-consent/duet-cookie-consent.js +1 -1
  97. package/lib/collection/components/duet-date-picker/duet-date-picker.js +4 -4
  98. package/lib/collection/components/duet-divider/duet-divider.js +1 -1
  99. package/lib/collection/components/duet-editable-table/duet-editable-table.js +5 -5
  100. package/lib/collection/components/duet-empty-state/duet-empty-state.js +1 -1
  101. package/lib/collection/components/duet-fieldset/duet-fieldset.js +25 -1
  102. package/lib/collection/components/duet-footer/duet-footer.js +7 -7
  103. package/lib/collection/components/duet-grid/duet-grid.js +3 -3
  104. package/lib/collection/components/duet-header/duet-header.js +28 -23
  105. package/lib/collection/components/duet-heading/duet-heading.js +1 -1
  106. package/lib/collection/components/duet-hero/duet-hero.js +5 -5
  107. package/lib/collection/components/duet-icon/duet-icon.js +1 -1
  108. package/lib/collection/components/duet-input/duet-input.js +8 -8
  109. package/lib/collection/components/duet-label/duet-label.js +2 -2
  110. package/lib/collection/components/duet-layout/duet-layout.js +1 -1
  111. package/lib/collection/components/duet-list/duet-list.js +3 -3
  112. package/lib/collection/components/duet-logo/duet-logo.js +1 -1
  113. package/lib/collection/components/duet-menu-bar/duet-menu-bar.js +1 -1
  114. package/lib/collection/components/duet-modal/duet-modal.js +7 -3
  115. package/lib/collection/components/duet-multiselect/duet-multiselect.js +5 -5
  116. package/lib/collection/components/duet-notification-drawer/duet-notification-drawer.js +1 -1
  117. package/lib/collection/components/duet-number-input/duet-number-input.js +4 -4
  118. package/lib/collection/components/duet-pagination/duet-pagination.js +2 -2
  119. package/lib/collection/components/duet-paragraph/duet-paragraph.js +3 -3
  120. package/lib/collection/components/duet-popup-menu/duet-popup-menu.js +1 -1
  121. package/lib/collection/components/duet-popup-menu-item/duet-popup-menu-item.js +2 -2
  122. package/lib/collection/components/duet-radio/duet-radio.js +3 -3
  123. package/lib/collection/components/duet-range-slider/duet-range-slider.js +2 -2
  124. package/lib/collection/components/duet-range-stepper/duet-range-stepper.js +1 -1
  125. package/lib/collection/components/duet-select/duet-select.js +5 -5
  126. package/lib/collection/components/duet-show-more/duet-show-more.js +1 -1
  127. package/lib/collection/components/duet-slideout/duet-slideout.js +1 -1
  128. package/lib/collection/components/duet-spacer/duet-spacer.js +2 -2
  129. package/lib/collection/components/duet-spinner/duet-spinner.js +1 -1
  130. package/lib/collection/components/duet-step/duet-step.js +2 -2
  131. package/lib/collection/components/duet-stepper/duet-stepper.js +1 -1
  132. package/lib/collection/components/duet-tab-group/duet-tab-group.js +5 -5
  133. package/lib/collection/components/duet-textarea/duet-textarea.js +4 -4
  134. package/lib/collection/components/duet-toggle/duet-toggle.js +1 -1
  135. package/lib/collection/components/duet-tooltip/duet-tooltip.js +1 -1
  136. package/lib/collection/components/duet-upload/duet-upload.js +53 -29
  137. package/lib/collection/components/duet-upload/upload-item-header.js +6 -1
  138. package/lib/collection/components/duet-upload-item/duet-upload-item.js +5 -4
  139. package/lib/collection/utils/math.utils.js +3 -0
  140. package/lib/collection/utils/teleport.js +55 -7
  141. package/lib/dist-custom-elements/duet-action-button.js +1 -1
  142. package/lib/dist-custom-elements/duet-alert.js +1 -1
  143. package/lib/dist-custom-elements/duet-badge.js +1 -1
  144. package/lib/dist-custom-elements/duet-banner.js +5 -5
  145. package/lib/dist-custom-elements/duet-breadcrumb.js +2 -2
  146. package/lib/dist-custom-elements/duet-breadcrumbs.js +2 -2
  147. package/lib/dist-custom-elements/duet-button.js +1 -1
  148. package/lib/dist-custom-elements/duet-callout.js +3 -3
  149. package/lib/dist-custom-elements/duet-caption.js +1 -1
  150. package/lib/dist-custom-elements/duet-card.js +4 -4
  151. package/lib/dist-custom-elements/duet-checkbox.js +1 -1
  152. package/lib/dist-custom-elements/duet-checkmark.js +1 -1
  153. package/lib/dist-custom-elements/duet-chip.js +2 -2
  154. package/lib/dist-custom-elements/duet-choice-group.js +8 -8
  155. package/lib/dist-custom-elements/duet-choice.js +5 -5
  156. package/lib/dist-custom-elements/duet-collapsible.js +2 -2
  157. package/lib/dist-custom-elements/duet-combobox.js +2 -2
  158. package/lib/dist-custom-elements/duet-contact-card.js +8 -8
  159. package/lib/dist-custom-elements/duet-cookie-consent.js +6 -6
  160. package/lib/dist-custom-elements/duet-date-picker.js +12 -12
  161. package/lib/dist-custom-elements/duet-divider.js +1 -1
  162. package/lib/dist-custom-elements/duet-editable-table.js +7 -7
  163. package/lib/dist-custom-elements/duet-empty-state.js +1 -1
  164. package/lib/dist-custom-elements/duet-fieldset.js +1 -1
  165. package/lib/dist-custom-elements/duet-footer.js +4 -4
  166. package/lib/dist-custom-elements/duet-grid-item.js +1 -1
  167. package/lib/dist-custom-elements/duet-grid.js +1 -1
  168. package/lib/dist-custom-elements/duet-header.js +20 -15
  169. package/lib/dist-custom-elements/duet-heading.js +1 -1
  170. package/lib/dist-custom-elements/duet-hero.js +9 -9
  171. package/lib/dist-custom-elements/duet-icon.js +1 -1
  172. package/lib/dist-custom-elements/duet-input.js +1 -1
  173. package/lib/dist-custom-elements/duet-label.js +1 -1
  174. package/lib/dist-custom-elements/duet-layout.js +1 -1
  175. package/lib/dist-custom-elements/duet-link.js +1 -1
  176. package/lib/dist-custom-elements/duet-list-item.js +1 -1
  177. package/lib/dist-custom-elements/duet-list.js +1 -1
  178. package/lib/dist-custom-elements/duet-logo.js +1 -1
  179. package/lib/dist-custom-elements/duet-menu-bar-button.js +2 -2
  180. package/lib/dist-custom-elements/duet-menu-bar-dropdown-link.js +2 -2
  181. package/lib/dist-custom-elements/duet-menu-bar-dropdown.js +2 -2
  182. package/lib/dist-custom-elements/duet-menu-bar-link.js +2 -2
  183. package/lib/dist-custom-elements/duet-menu-bar.js +2 -2
  184. package/lib/dist-custom-elements/duet-modal.js +11 -7
  185. package/lib/dist-custom-elements/duet-multiselect.js +10 -10
  186. package/lib/dist-custom-elements/duet-nav.js +1 -1
  187. package/lib/dist-custom-elements/duet-notification-drawer.js +4 -4
  188. package/lib/dist-custom-elements/duet-notification.js +2 -2
  189. package/lib/dist-custom-elements/duet-number-input.js +14 -11
  190. package/lib/dist-custom-elements/duet-page-heading.js +2 -2
  191. package/lib/dist-custom-elements/duet-pagination.js +7 -7
  192. package/lib/dist-custom-elements/duet-paragraph.js +1 -1
  193. package/lib/dist-custom-elements/duet-popup-menu-item.js +2 -2
  194. package/lib/dist-custom-elements/duet-popup-menu.js +3 -2
  195. package/lib/dist-custom-elements/duet-progress.js +1 -1
  196. package/lib/dist-custom-elements/duet-promo-card.js +4 -4
  197. package/lib/dist-custom-elements/duet-radio-group.js +8 -8
  198. package/lib/dist-custom-elements/duet-radio.js +1 -1
  199. package/lib/dist-custom-elements/duet-range-slider.js +3 -3
  200. package/lib/dist-custom-elements/duet-range-stepper.js +4 -4
  201. package/lib/dist-custom-elements/duet-scrollable.js +1 -1
  202. package/lib/dist-custom-elements/duet-section-layout.js +1 -1
  203. package/lib/dist-custom-elements/duet-select.js +1 -1
  204. package/lib/dist-custom-elements/duet-shaped-image.js +1 -1
  205. package/lib/dist-custom-elements/duet-show-more.js +5 -5
  206. package/lib/dist-custom-elements/duet-slideout-lang.js +2 -2
  207. package/lib/dist-custom-elements/duet-slideout-link.js +2 -2
  208. package/lib/dist-custom-elements/duet-slideout-panel-dropdown.js +2 -2
  209. package/lib/dist-custom-elements/duet-slideout-panel.js +3 -3
  210. package/lib/dist-custom-elements/duet-slideout.js +3 -3
  211. package/lib/dist-custom-elements/duet-spacer.js +1 -1
  212. package/lib/dist-custom-elements/duet-spinner.js +1 -1
  213. package/lib/dist-custom-elements/duet-step.js +4 -4
  214. package/lib/dist-custom-elements/duet-stepper.js +2 -2
  215. package/lib/dist-custom-elements/duet-submenu-bar-dropdown-link.js +2 -2
  216. package/lib/dist-custom-elements/duet-submenu-bar-dropdown.js +2 -2
  217. package/lib/dist-custom-elements/duet-submenu-bar-link.js +2 -2
  218. package/lib/dist-custom-elements/duet-submenu-bar.js +2 -2
  219. package/lib/dist-custom-elements/duet-tab-group.js +13 -13
  220. package/lib/dist-custom-elements/duet-tab.js +1 -1
  221. package/lib/dist-custom-elements/duet-table.js +1 -1
  222. package/lib/dist-custom-elements/duet-textarea.js +10 -10
  223. package/lib/dist-custom-elements/duet-toggle.js +2 -2
  224. package/lib/dist-custom-elements/duet-toolbar-dropdown-link.js +2 -2
  225. package/lib/dist-custom-elements/duet-toolbar-dropdown.js +2 -2
  226. package/lib/dist-custom-elements/duet-toolbar-link.js +2 -2
  227. package/lib/dist-custom-elements/duet-toolbar.js +1 -1
  228. package/lib/dist-custom-elements/duet-tooltip-button.js +1 -1
  229. package/lib/dist-custom-elements/duet-tooltip-popup.js +1 -1
  230. package/lib/dist-custom-elements/duet-tooltip.js +1 -1
  231. package/lib/dist-custom-elements/duet-tray.js +4 -4
  232. package/lib/dist-custom-elements/duet-upload-aria-status.js +1 -1
  233. package/lib/dist-custom-elements/duet-upload-item.js +1 -1
  234. package/lib/dist-custom-elements/duet-upload.js +41 -34
  235. package/lib/dist-custom-elements/duet-visually-hidden.js +1 -1
  236. package/lib/dist-custom-elements/index.js +1 -1
  237. package/lib/dist-custom-elements/{p-e354b687.js → p-19b04293.js} +1 -1
  238. package/lib/dist-custom-elements/{p-b260c7b8.js → p-1fef65c4.js} +1 -1
  239. package/lib/dist-custom-elements/{p-f9076d3e.js → p-20d8a7ab.js} +14 -13
  240. package/lib/dist-custom-elements/{p-a5cb00f4.js → p-28facbdc.js} +2 -2
  241. package/lib/dist-custom-elements/{p-2bd44c3c.js → p-32a42529.js} +4 -4
  242. package/lib/dist-custom-elements/{p-4f3d4b28.js → p-34d193a7.js} +1 -1
  243. package/lib/dist-custom-elements/{p-411af53d.js → p-371290d2.js} +3 -3
  244. package/lib/dist-custom-elements/{p-44316a49.js → p-47bc3fc6.js} +1 -1
  245. package/lib/dist-custom-elements/{p-67584a63.js → p-4fa0d10e.js} +3 -3
  246. package/lib/dist-custom-elements/{p-df34106b.js → p-507ae246.js} +2 -2
  247. package/lib/dist-custom-elements/{p-f79fe19b.js → p-591040e5.js} +1 -1
  248. package/lib/dist-custom-elements/p-63c149ab.js +86 -0
  249. package/lib/dist-custom-elements/{p-baa9e0f3.js → p-66206ea5.js} +1 -1
  250. package/lib/dist-custom-elements/{p-9dc40c4f.js → p-80bd412e.js} +10 -10
  251. package/lib/dist-custom-elements/{p-2ca516d3.js → p-84003069.js} +5 -3
  252. package/lib/dist-custom-elements/{p-b244b9d4.js → p-86f35893.js} +1 -1
  253. package/lib/dist-custom-elements/{p-784fe90e.js → p-8adb9463.js} +155 -195
  254. package/lib/dist-custom-elements/{p-e4198c92.js → p-8dbc5e4b.js} +1 -1
  255. package/lib/dist-custom-elements/{p-748fb4e9.js → p-8e9d78b5.js} +1 -1
  256. package/lib/dist-custom-elements/{p-726f277c.js → p-91f98ca2.js} +5 -5
  257. package/lib/dist-custom-elements/{p-c56b4bad.js → p-93609c40.js} +2 -2
  258. package/lib/dist-custom-elements/{p-b4163126.js → p-960b00e1.js} +2 -2
  259. package/lib/dist-custom-elements/{p-2159ffc3.js → p-9fb22951.js} +2 -2
  260. package/lib/dist-custom-elements/{p-32fdcec8.js → p-a7cc7bd9.js} +2 -2
  261. package/lib/dist-custom-elements/{p-e22956bf.js → p-b1fa6ee7.js} +2 -2
  262. package/lib/dist-custom-elements/{p-351b0f8c.js → p-b95006a5.js} +2 -2
  263. package/lib/dist-custom-elements/{p-7a906a81.js → p-c2a056b1.js} +2 -2
  264. package/lib/dist-custom-elements/{p-c624c26b.js → p-c85f0028.js} +8 -8
  265. package/lib/dist-custom-elements/{p-229871c3.js → p-cbc43bac.js} +21 -7
  266. package/lib/dist-custom-elements/{p-d9bf49cf.js → p-da75f5d9.js} +1 -1
  267. package/lib/dist-custom-elements/{p-66ab9994.js → p-dd112690.js} +5 -5
  268. package/lib/dist-custom-elements/{p-7c68ac5a.js → p-de10f837.js} +7 -6
  269. package/lib/dist-custom-elements/{p-661e7864.js → p-de68431d.js} +1 -1
  270. package/lib/dist-custom-elements/{p-f13081a0.js → p-e78bd379.js} +3 -3
  271. package/lib/dist-custom-elements/{p-cd9b5f96.js → p-e8475b3c.js} +1 -1
  272. package/lib/dist-custom-elements/{p-ce09b821.js → p-eb0475d3.js} +1 -1
  273. package/lib/dist-custom-elements/{p-f30df343.js → p-f3ffb5b4.js} +2 -2
  274. package/lib/dist-custom-elements/{p-7ece12ec.js → p-f933f857.js} +1 -1
  275. package/lib/duet/duet.esm.js +1 -1
  276. package/lib/duet/duet.js +1 -1
  277. package/lib/duet/{p-31441d04.system.entry.js → p-01aaac6a.system.entry.js} +1 -1
  278. package/lib/duet/{p-cc9f1e7e.system.entry.js → p-01f3e23e.system.entry.js} +1 -1
  279. package/lib/duet/{p-5d5f6c7c.entry.js → p-02ce139d.entry.js} +1 -1
  280. package/lib/duet/{p-e0af1e68.system.entry.js → p-02fa277e.system.entry.js} +1 -1
  281. package/lib/duet/{p-581baf04.system.entry.js → p-04dd24ca.system.entry.js} +1 -1
  282. package/lib/duet/p-05545e81.entry.js +4 -0
  283. package/lib/duet/{p-beb2fcfd.entry.js → p-07871336.entry.js} +1 -1
  284. package/lib/duet/{p-4aa7c43e.entry.js → p-090b0eb4.entry.js} +1 -1
  285. package/lib/duet/{p-fb763129.system.entry.js → p-0c3cfb88.system.entry.js} +1 -1
  286. package/lib/duet/{p-97b7d224.entry.js → p-0ec7bc0d.entry.js} +1 -1
  287. package/lib/duet/{p-20a3bf2b.entry.js → p-104758cf.entry.js} +1 -1
  288. package/lib/duet/{p-02c5180a.entry.js → p-10b014f5.entry.js} +1 -1
  289. package/lib/duet/{p-ff433afd.entry.js → p-1137a234.entry.js} +1 -1
  290. package/lib/duet/{p-27c853fe.system.entry.js → p-11a22107.system.entry.js} +1 -1
  291. package/lib/duet/{p-8b533166.system.entry.js → p-125fff3c.system.entry.js} +1 -1
  292. package/lib/duet/{p-da62279b.system.entry.js → p-15c364ef.system.entry.js} +1 -1
  293. package/lib/duet/p-180b9ef7.entry.js +4 -0
  294. package/lib/duet/{p-9e675661.entry.js → p-1e2689a2.entry.js} +1 -1
  295. package/lib/duet/{p-23ba8301.entry.js → p-231e217b.entry.js} +1 -1
  296. package/lib/duet/{p-7d15ac32.system.entry.js → p-2362c81c.system.entry.js} +1 -1
  297. package/lib/duet/{p-e8323345.system.entry.js → p-236348a6.system.entry.js} +1 -1
  298. package/lib/duet/{p-2ec51250.entry.js → p-26082482.entry.js} +1 -1
  299. package/lib/duet/{p-d67196da.entry.js → p-27831ad1.entry.js} +1 -1
  300. package/lib/duet/{p-a47b67e2.system.entry.js → p-27cbcb00.system.entry.js} +1 -1
  301. package/lib/duet/{p-a262eecf.entry.js → p-28cbcde9.entry.js} +1 -1
  302. package/lib/duet/{p-abdf2879.system.entry.js → p-2b90e0bf.system.entry.js} +1 -1
  303. package/lib/duet/{p-994fd476.entry.js → p-2f8baf13.entry.js} +1 -1
  304. package/lib/duet/{p-a1d40591.entry.js → p-2f8ff010.entry.js} +1 -1
  305. package/lib/duet/{p-bd3fd83f.system.entry.js → p-31f51b63.system.entry.js} +1 -1
  306. package/lib/duet/{p-05dc550e.entry.js → p-3351f110.entry.js} +1 -1
  307. package/lib/duet/{p-3c2ae0d5.js → p-33620d03.js} +1 -1
  308. package/lib/duet/{p-cc6b57eb.entry.js → p-3493bd62.entry.js} +1 -1
  309. package/lib/duet/{p-262f4bf7.system.entry.js → p-361a40a6.system.entry.js} +1 -1
  310. package/lib/duet/{p-57fbcba7.entry.js → p-399ae33f.entry.js} +1 -1
  311. package/lib/duet/{p-5e96a337.system.entry.js → p-3a48878a.system.entry.js} +1 -1
  312. package/lib/duet/{p-dae9d8eb.entry.js → p-3addfa0b.entry.js} +1 -1
  313. package/lib/duet/{p-c4917f80.system.entry.js → p-3bd38a60.system.entry.js} +1 -1
  314. package/lib/duet/{p-475d6e82.entry.js → p-3bdaca53.entry.js} +1 -1
  315. package/lib/duet/{p-e380af5d.system.entry.js → p-3bf13db2.system.entry.js} +1 -1
  316. package/lib/duet/{p-ef2eb6d8.entry.js → p-3ddc61bc.entry.js} +1 -1
  317. package/lib/duet/p-3e3f76cc.entry.js +4 -0
  318. package/lib/duet/{p-b5ea61f3.entry.js → p-407bc2e8.entry.js} +1 -1
  319. package/lib/duet/{p-6753d3e9.entry.js → p-4525bb7b.entry.js} +1 -1
  320. package/lib/duet/p-45d92a24.system.js +4 -0
  321. package/lib/duet/{p-e6ebe252.system.entry.js → p-46ae0197.system.entry.js} +1 -1
  322. package/lib/duet/{p-a77b749b.system.entry.js → p-4908aa39.system.entry.js} +1 -1
  323. package/lib/duet/{p-00cf42c2.system.js → p-491006e1.system.js} +1 -1
  324. package/lib/duet/{p-9915e4e4.system.entry.js → p-494e7691.system.entry.js} +1 -1
  325. package/lib/duet/{p-07bea2fe.system.entry.js → p-49e39bc1.system.entry.js} +1 -1
  326. package/lib/duet/p-4b3bef47.entry.js +4 -0
  327. package/lib/duet/{p-c674c251.system.entry.js → p-4b57b898.system.entry.js} +1 -1
  328. package/lib/duet/{p-37fb65e4.entry.js → p-4d272de8.entry.js} +1 -1
  329. package/lib/duet/{p-aec52fd0.system.entry.js → p-4ee4938c.system.entry.js} +1 -1
  330. package/lib/duet/{p-de07a6c7.system.entry.js → p-4f99c879.system.entry.js} +1 -1
  331. package/lib/duet/{p-3b651d8c.entry.js → p-5003f2f7.entry.js} +1 -1
  332. package/lib/duet/p-501d76ac.system.entry.js +4 -0
  333. package/lib/duet/{p-c3c627fe.entry.js → p-51ea8a1e.entry.js} +1 -1
  334. package/lib/duet/{p-66dfe352.entry.js → p-56e8e51e.entry.js} +1 -1
  335. package/lib/duet/{p-df3c0a26.system.entry.js → p-5700d7df.system.entry.js} +1 -1
  336. package/lib/duet/{p-d7cb8511.system.entry.js → p-5726b0c6.system.entry.js} +1 -1
  337. package/lib/duet/{p-5aa537c3.system.entry.js → p-57c81cdf.system.entry.js} +1 -1
  338. package/lib/duet/{p-fc25294f.entry.js → p-58d191e0.entry.js} +1 -1
  339. package/lib/duet/{p-2dd573a3.system.entry.js → p-5bb44d21.system.entry.js} +1 -1
  340. package/lib/duet/{p-99cc8fb5.entry.js → p-5be89661.entry.js} +1 -1
  341. package/lib/duet/{p-1dc34d52.entry.js → p-5c682b2c.entry.js} +1 -1
  342. package/lib/duet/{p-892dab61.system.entry.js → p-5d06caee.system.entry.js} +1 -1
  343. package/lib/duet/{p-e8bef1aa.entry.js → p-5d1f9c44.entry.js} +1 -1
  344. package/lib/duet/{p-e500eae6.system.entry.js → p-61c551d2.system.entry.js} +1 -1
  345. package/lib/duet/{p-6049c423.system.entry.js → p-63330f08.system.entry.js} +1 -1
  346. package/lib/duet/{p-5b27a74d.system.entry.js → p-63566970.system.entry.js} +1 -1
  347. package/lib/duet/p-63c149ab.js +4 -0
  348. package/lib/duet/{p-a8ea10a9.system.entry.js → p-66ab3c0e.system.entry.js} +1 -1
  349. package/lib/duet/{p-3d94b518.system.entry.js → p-6c1482e6.system.entry.js} +1 -1
  350. package/lib/duet/{p-e7ddaaf0.entry.js → p-715db5f9.entry.js} +1 -1
  351. package/lib/duet/{p-277d9e45.system.js → p-71a46879.system.js} +1 -1
  352. package/lib/duet/{p-a829f5f4.entry.js → p-720ffaf8.entry.js} +1 -1
  353. package/lib/duet/{p-19babdcf.entry.js → p-74bee1d0.entry.js} +1 -1
  354. package/lib/duet/{p-dd6874b5.entry.js → p-7709b117.entry.js} +1 -1
  355. package/lib/duet/{p-107887be.entry.js → p-7a3c5568.entry.js} +1 -1
  356. package/lib/duet/{p-807acf6d.system.entry.js → p-7d1b0468.system.entry.js} +1 -1
  357. package/lib/duet/{p-b6e0c13e.entry.js → p-7d5e5659.entry.js} +1 -1
  358. package/lib/duet/{p-f08bc317.entry.js → p-7e43823e.entry.js} +1 -1
  359. package/lib/duet/{p-00ff74e5.system.entry.js → p-8894b5f8.system.entry.js} +1 -1
  360. package/lib/duet/p-892b0784.system.js +5 -0
  361. package/lib/duet/p-8ace7a8f.entry.js +4 -0
  362. package/lib/duet/{p-6ecf1c48.entry.js → p-8adadd0e.entry.js} +1 -1
  363. package/lib/duet/p-8adb9463.js +4 -0
  364. package/lib/duet/{p-2d1e8451.system.entry.js → p-8aee7f16.system.entry.js} +1 -1
  365. package/lib/duet/{p-7431d1f1.system.entry.js → p-8b01d5ae.system.entry.js} +1 -1
  366. package/lib/duet/p-8be782cb.system.entry.js +4 -0
  367. package/lib/duet/{p-6999dcca.system.entry.js → p-8bfe774e.system.entry.js} +1 -1
  368. package/lib/duet/{p-10695d55.system.js → p-8c6e3c4f.system.js} +1 -1
  369. package/lib/duet/{p-1a5b2354.system.entry.js → p-8e64876c.system.entry.js} +1 -1
  370. package/lib/duet/p-90b90630.system.entry.js +4 -0
  371. package/lib/duet/p-90d5fb9a.entry.js +4 -0
  372. package/lib/duet/{p-72e1da72.system.entry.js → p-9116810a.system.entry.js} +1 -1
  373. package/lib/duet/{p-e232c9a6.entry.js → p-91e92ff0.entry.js} +1 -1
  374. package/lib/duet/{p-1f2686b7.system.entry.js → p-92a26eb7.system.entry.js} +1 -1
  375. package/lib/duet/{p-a11c326b.entry.js → p-939bceb1.entry.js} +1 -1
  376. package/lib/duet/{p-a6b44386.system.entry.js → p-968c8724.system.entry.js} +1 -1
  377. package/lib/duet/{p-2f3e999c.system.entry.js → p-9837720e.system.entry.js} +1 -1
  378. package/lib/duet/{p-164aa67a.entry.js → p-99a6c65d.entry.js} +1 -1
  379. package/lib/duet/{p-9793321f.system.entry.js → p-9a9f4f83.system.entry.js} +1 -1
  380. package/lib/duet/{p-60b48a3d.entry.js → p-9ad54264.entry.js} +1 -1
  381. package/lib/duet/{p-3f96bb94.entry.js → p-9bad6410.entry.js} +1 -1
  382. package/lib/duet/{p-f601fb92.entry.js → p-9ef41dff.entry.js} +1 -1
  383. package/lib/duet/{p-9364781c.system.entry.js → p-a04538da.system.entry.js} +2 -2
  384. package/lib/duet/{p-b482b06d.system.entry.js → p-a4dc39b7.system.entry.js} +1 -1
  385. package/lib/duet/{p-2a49661d.entry.js → p-a61f629f.entry.js} +1 -1
  386. package/lib/duet/p-a659351d.system.js +4 -0
  387. package/lib/duet/{p-ac93ef4d.entry.js → p-a6a78989.entry.js} +1 -1
  388. package/lib/duet/{p-75f7a572.js → p-a76ceaf6.js} +1 -1
  389. package/lib/duet/{p-78207603.entry.js → p-acfd55b1.entry.js} +1 -1
  390. package/lib/duet/{p-2f35384b.entry.js → p-afd647b4.entry.js} +1 -1
  391. package/lib/duet/{p-6586bc19.entry.js → p-b150413c.entry.js} +1 -1
  392. package/lib/duet/{p-5ccd0a8a.system.entry.js → p-b4548652.system.entry.js} +1 -1
  393. package/lib/duet/{p-88b565dc.system.entry.js → p-b50fe6a3.system.entry.js} +1 -1
  394. package/lib/duet/p-b63e9d32.system.entry.js +4 -0
  395. package/lib/duet/p-b63fdf97.entry.js +4 -0
  396. package/lib/duet/{p-c84acb8f.entry.js → p-b70632f4.entry.js} +1 -1
  397. package/lib/duet/{p-d202fbd4.system.entry.js → p-b8f45b9b.system.entry.js} +1 -1
  398. package/lib/duet/{p-ab7d36e8.system.entry.js → p-ba8d654e.system.entry.js} +1 -1
  399. package/lib/duet/{p-1507d44f.entry.js → p-c047dce3.entry.js} +1 -1
  400. package/lib/duet/{p-2d4c9a5b.system.entry.js → p-c06dd7ff.system.entry.js} +1 -1
  401. package/lib/duet/{p-3ba5bafd.system.entry.js → p-c1aa415d.system.entry.js} +1 -1
  402. package/lib/duet/p-c6265d54.system.entry.js +4 -0
  403. package/lib/duet/{p-11c031c1.system.entry.js → p-c7f078b4.system.entry.js} +1 -1
  404. package/lib/duet/{p-18607658.entry.js → p-ca587193.entry.js} +1 -1
  405. package/lib/duet/{p-66604d21.system.entry.js → p-cc2c3bda.system.entry.js} +1 -1
  406. package/lib/duet/{p-aa6a1a0e.system.entry.js → p-ccbd26f8.system.entry.js} +1 -1
  407. package/lib/duet/{p-7b8bd6ae.system.entry.js → p-cd494ec0.system.entry.js} +1 -1
  408. package/lib/duet/{p-a9997645.entry.js → p-d0517764.entry.js} +1 -1
  409. package/lib/duet/{p-b4b2f99a.entry.js → p-d1ada824.entry.js} +1 -1
  410. package/lib/duet/{p-94ecf766.system.entry.js → p-d23f5574.system.entry.js} +1 -1
  411. package/lib/duet/{p-14fc2fba.entry.js → p-d38f4401.entry.js} +1 -1
  412. package/lib/duet/{p-eb3a72fc.system.entry.js → p-d5a72abd.system.entry.js} +1 -1
  413. package/lib/duet/{p-375a323f.system.entry.js → p-d976e355.system.entry.js} +1 -1
  414. package/lib/duet/p-dafb7efd.js +5 -0
  415. package/lib/duet/{p-a9a34171.system.entry.js → p-dc00285e.system.entry.js} +1 -1
  416. package/lib/duet/{p-ab26e29d.entry.js → p-ddec1906.entry.js} +1 -1
  417. package/lib/duet/{p-cfea40ab.system.entry.js → p-dfecd542.system.entry.js} +1 -1
  418. package/lib/duet/{p-a93132ea.entry.js → p-e1a2ad9b.entry.js} +1 -1
  419. package/lib/duet/{p-2b1d7c14.entry.js → p-e26224c8.entry.js} +1 -1
  420. package/lib/duet/{p-a6307cb3.entry.js → p-e2674cbd.entry.js} +1 -1
  421. package/lib/duet/{p-489c0d61.entry.js → p-e464c127.entry.js} +1 -1
  422. package/lib/duet/{p-2a6ca4ea.system.entry.js → p-e62bcf02.system.entry.js} +1 -1
  423. package/lib/duet/{p-9355b478.system.entry.js → p-e73904ab.system.entry.js} +1 -1
  424. package/lib/duet/{p-8459e611.entry.js → p-e775f206.entry.js} +1 -1
  425. package/lib/duet/{p-7de54682.entry.js → p-e8496052.entry.js} +1 -1
  426. package/lib/duet/p-e8e50fdb.entry.js +4 -0
  427. package/lib/duet/{p-dee965b3.system.entry.js → p-ecfdc7d9.system.entry.js} +1 -1
  428. package/lib/duet/p-edddef22.entry.js +4 -0
  429. package/lib/duet/{p-6a640a77.system.entry.js → p-ee2dc527.system.entry.js} +1 -1
  430. package/lib/duet/{p-86c132c9.entry.js → p-ee3d6a73.entry.js} +1 -1
  431. package/lib/duet/{p-9fbdd8b6.entry.js → p-ef194759.entry.js} +1 -1
  432. package/lib/duet/{p-747807c9.system.entry.js → p-f06b4b03.system.entry.js} +1 -1
  433. package/lib/duet/{p-3fcc6db9.entry.js → p-f29123b4.entry.js} +1 -1
  434. package/lib/duet/{p-e3b90925.system.js → p-f36c856d.system.js} +1 -1
  435. package/lib/duet/{p-197496f4.system.entry.js → p-f36ee41c.system.entry.js} +1 -1
  436. package/lib/duet/p-fa56fe59.entry.js +4 -0
  437. package/lib/duet/{p-e91ebfb3.system.entry.js → p-fa7cdc28.system.entry.js} +1 -1
  438. package/lib/duet/{p-8ac9042e.system.entry.js → p-fc3275ba.system.entry.js} +1 -1
  439. package/lib/duet/p-fd4785ab.js +4 -0
  440. package/lib/duet/{p-1274aa0f.system.entry.js → p-fd54a219.system.entry.js} +1 -1
  441. package/lib/duet/{p-3d8f8731.entry.js → p-fe4cd626.entry.js} +1 -1
  442. package/lib/esm/duet-action-button.entry.js +3 -3
  443. package/lib/esm/duet-alert.entry.js +14 -2
  444. package/lib/esm/duet-badge.entry.js +1 -1
  445. package/lib/esm/duet-banner.entry.js +3 -3
  446. package/lib/esm/duet-breadcrumb.entry.js +1 -1
  447. package/lib/esm/duet-breadcrumbs.entry.js +1 -1
  448. package/lib/esm/duet-button_2.entry.js +3 -3
  449. package/lib/esm/duet-callout.entry.js +1 -1
  450. package/lib/esm/duet-caption_4.entry.js +3 -3
  451. package/lib/esm/duet-card.entry.js +3 -3
  452. package/lib/esm/duet-checkbox.entry.js +1 -1
  453. package/lib/esm/duet-checkmark.entry.js +1 -1
  454. package/lib/esm/duet-chip.entry.js +1 -1
  455. package/lib/esm/duet-choice_2.entry.js +2 -2
  456. package/lib/esm/duet-collapsible.entry.js +1 -1
  457. package/lib/esm/duet-combobox.entry.js +1 -1
  458. package/lib/esm/duet-contact-card.entry.js +1 -1
  459. package/lib/esm/duet-cookie-consent.entry.js +1 -1
  460. package/lib/esm/duet-date-picker.entry.js +2 -2
  461. package/lib/esm/duet-divider_2.entry.js +3 -3
  462. package/lib/esm/duet-editable-table_3.entry.js +25 -19
  463. package/lib/esm/duet-empty-state.entry.js +1 -1
  464. package/lib/esm/duet-fieldset.entry.js +3 -2
  465. package/lib/esm/duet-footer.entry.js +1 -1
  466. package/lib/esm/duet-grid_2.entry.js +1 -1
  467. package/lib/esm/duet-header_2.entry.js +14 -9
  468. package/lib/esm/duet-hero.entry.js +1 -1
  469. package/lib/esm/duet-icon.entry.js +3 -3
  470. package/lib/esm/duet-input_2.entry.js +1 -1
  471. package/lib/esm/duet-layout.entry.js +1 -1
  472. package/lib/esm/duet-list_2.entry.js +1 -1
  473. package/lib/esm/duet-menu-bar-button.entry.js +1 -1
  474. package/lib/esm/duet-menu-bar-dropdown-link.entry.js +1 -1
  475. package/lib/esm/duet-menu-bar-dropdown.entry.js +1 -1
  476. package/lib/esm/duet-menu-bar-link.entry.js +1 -1
  477. package/lib/esm/duet-menu-bar.entry.js +1 -1
  478. package/lib/esm/duet-modal.entry.js +6 -2
  479. package/lib/esm/duet-multiselect.entry.js +1 -1
  480. package/lib/esm/duet-nav.entry.js +1 -1
  481. package/lib/esm/duet-notification_2.entry.js +1 -1
  482. package/lib/esm/duet-number-input.entry.js +4 -1
  483. package/lib/esm/duet-page-heading.entry.js +1 -1
  484. package/lib/esm/duet-pagination_2.entry.js +1 -1
  485. package/lib/esm/duet-popup-menu-item.entry.js +1 -1
  486. package/lib/esm/duet-popup-menu.entry.js +3 -3
  487. package/lib/esm/duet-progress.entry.js +1 -1
  488. package/lib/esm/duet-promo-card.entry.js +3 -3
  489. package/lib/esm/duet-radio_2.entry.js +1 -1
  490. package/lib/esm/duet-range-slider.entry.js +2 -2
  491. package/lib/esm/duet-scrollable_3.entry.js +1 -1
  492. package/lib/esm/duet-section-layout.entry.js +1 -1
  493. package/lib/esm/duet-select.entry.js +1 -1
  494. package/lib/esm/duet-shaped-image.entry.js +1 -1
  495. package/lib/esm/duet-show-more.entry.js +1 -1
  496. package/lib/esm/duet-slideout-lang.entry.js +1 -1
  497. package/lib/esm/duet-slideout-link.entry.js +1 -1
  498. package/lib/esm/duet-slideout-panel-dropdown.entry.js +1 -1
  499. package/lib/esm/duet-slideout-panel.entry.js +4 -4
  500. package/lib/esm/duet-slideout.entry.js +4 -4
  501. package/lib/esm/duet-step_2.entry.js +1 -1
  502. package/lib/esm/duet-submenu-bar-dropdown-link.entry.js +1 -1
  503. package/lib/esm/duet-submenu-bar-dropdown.entry.js +1 -1
  504. package/lib/esm/duet-submenu-bar-link.entry.js +1 -1
  505. package/lib/esm/duet-submenu-bar.entry.js +1 -1
  506. package/lib/esm/duet-textarea.entry.js +1 -1
  507. package/lib/esm/duet-toggle.entry.js +1 -1
  508. package/lib/esm/duet-toolbar-dropdown-link.entry.js +1 -1
  509. package/lib/esm/duet-toolbar-dropdown.entry.js +1 -1
  510. package/lib/esm/duet-toolbar-link.entry.js +1 -1
  511. package/lib/esm/duet-toolbar.entry.js +1 -1
  512. package/lib/esm/duet-tooltip-button_2.entry.js +2 -2
  513. package/lib/esm/duet-tooltip.entry.js +3 -3
  514. package/lib/esm/duet-tray.entry.js +2 -2
  515. package/lib/esm/duet-upload-aria-status.entry.js +1 -1
  516. package/lib/esm/duet-upload-item.entry.js +5 -4
  517. package/lib/esm/duet-visually-hidden.entry.js +1 -1
  518. package/lib/esm/duet.js +3 -3
  519. package/lib/esm/{teleport-542f423e.js → floating-ui.dom.esm-6025c98f.js} +155 -195
  520. package/lib/esm/{focus-utils-8008bc82.js → focus-utils-8a8cfffd.js} +1 -1
  521. package/lib/esm/{index-79528b07.js → index-d48e2c74.js} +1 -1
  522. package/lib/esm/loader.js +3 -3
  523. package/lib/esm/teleport-4ede216d.js +86 -0
  524. package/lib/esm/{token-utils-058d6220.js → token-utils-a1dcaa4b.js} +1 -1
  525. package/lib/esm/{tokens.module-f436c2cd.js → tokens.module-ed773027.js} +1 -1
  526. package/lib/esm-es5/duet-action-button.entry.js +1 -1
  527. package/lib/esm-es5/duet-alert.entry.js +2 -2
  528. package/lib/esm-es5/duet-badge.entry.js +1 -1
  529. package/lib/esm-es5/duet-banner.entry.js +1 -1
  530. package/lib/esm-es5/duet-breadcrumb.entry.js +1 -1
  531. package/lib/esm-es5/duet-breadcrumbs.entry.js +1 -1
  532. package/lib/esm-es5/duet-button_2.entry.js +1 -1
  533. package/lib/esm-es5/duet-callout.entry.js +1 -1
  534. package/lib/esm-es5/duet-caption_4.entry.js +1 -1
  535. package/lib/esm-es5/duet-card.entry.js +1 -1
  536. package/lib/esm-es5/duet-checkbox.entry.js +1 -1
  537. package/lib/esm-es5/duet-checkmark.entry.js +1 -1
  538. package/lib/esm-es5/duet-chip.entry.js +1 -1
  539. package/lib/esm-es5/duet-choice_2.entry.js +1 -1
  540. package/lib/esm-es5/duet-collapsible.entry.js +1 -1
  541. package/lib/esm-es5/duet-combobox.entry.js +1 -1
  542. package/lib/esm-es5/duet-contact-card.entry.js +1 -1
  543. package/lib/esm-es5/duet-cookie-consent.entry.js +1 -1
  544. package/lib/esm-es5/duet-date-picker.entry.js +1 -1
  545. package/lib/esm-es5/duet-divider_2.entry.js +1 -1
  546. package/lib/esm-es5/duet-editable-table_3.entry.js +2 -2
  547. package/lib/esm-es5/duet-empty-state.entry.js +1 -1
  548. package/lib/esm-es5/duet-fieldset.entry.js +1 -1
  549. package/lib/esm-es5/duet-footer.entry.js +1 -1
  550. package/lib/esm-es5/duet-grid_2.entry.js +1 -1
  551. package/lib/esm-es5/duet-header_2.entry.js +1 -1
  552. package/lib/esm-es5/duet-hero.entry.js +1 -1
  553. package/lib/esm-es5/duet-icon.entry.js +1 -1
  554. package/lib/esm-es5/duet-input_2.entry.js +1 -1
  555. package/lib/esm-es5/duet-layout.entry.js +1 -1
  556. package/lib/esm-es5/duet-list_2.entry.js +1 -1
  557. package/lib/esm-es5/duet-menu-bar-button.entry.js +1 -1
  558. package/lib/esm-es5/duet-menu-bar-dropdown-link.entry.js +1 -1
  559. package/lib/esm-es5/duet-menu-bar-dropdown.entry.js +1 -1
  560. package/lib/esm-es5/duet-menu-bar-link.entry.js +1 -1
  561. package/lib/esm-es5/duet-menu-bar.entry.js +1 -1
  562. package/lib/esm-es5/duet-modal.entry.js +1 -1
  563. package/lib/esm-es5/duet-multiselect.entry.js +1 -1
  564. package/lib/esm-es5/duet-nav.entry.js +1 -1
  565. package/lib/esm-es5/duet-notification_2.entry.js +1 -1
  566. package/lib/esm-es5/duet-number-input.entry.js +1 -1
  567. package/lib/esm-es5/duet-page-heading.entry.js +1 -1
  568. package/lib/esm-es5/duet-pagination_2.entry.js +1 -1
  569. package/lib/esm-es5/duet-popup-menu-item.entry.js +1 -1
  570. package/lib/esm-es5/duet-popup-menu.entry.js +1 -1
  571. package/lib/esm-es5/duet-progress.entry.js +1 -1
  572. package/lib/esm-es5/duet-promo-card.entry.js +1 -1
  573. package/lib/esm-es5/duet-radio_2.entry.js +1 -1
  574. package/lib/esm-es5/duet-range-slider.entry.js +1 -1
  575. package/lib/esm-es5/duet-scrollable_3.entry.js +1 -1
  576. package/lib/esm-es5/duet-section-layout.entry.js +1 -1
  577. package/lib/esm-es5/duet-select.entry.js +1 -1
  578. package/lib/esm-es5/duet-shaped-image.entry.js +1 -1
  579. package/lib/esm-es5/duet-show-more.entry.js +1 -1
  580. package/lib/esm-es5/duet-slideout-lang.entry.js +1 -1
  581. package/lib/esm-es5/duet-slideout-link.entry.js +1 -1
  582. package/lib/esm-es5/duet-slideout-panel-dropdown.entry.js +1 -1
  583. package/lib/esm-es5/duet-slideout-panel.entry.js +1 -1
  584. package/lib/esm-es5/duet-slideout.entry.js +2 -2
  585. package/lib/esm-es5/duet-step_2.entry.js +1 -1
  586. package/lib/esm-es5/duet-submenu-bar-dropdown-link.entry.js +1 -1
  587. package/lib/esm-es5/duet-submenu-bar-dropdown.entry.js +1 -1
  588. package/lib/esm-es5/duet-submenu-bar-link.entry.js +1 -1
  589. package/lib/esm-es5/duet-submenu-bar.entry.js +1 -1
  590. package/lib/esm-es5/duet-textarea.entry.js +1 -1
  591. package/lib/esm-es5/duet-toggle.entry.js +2 -2
  592. package/lib/esm-es5/duet-toolbar-dropdown-link.entry.js +1 -1
  593. package/lib/esm-es5/duet-toolbar-dropdown.entry.js +1 -1
  594. package/lib/esm-es5/duet-toolbar-link.entry.js +1 -1
  595. package/lib/esm-es5/duet-toolbar.entry.js +1 -1
  596. package/lib/esm-es5/duet-tooltip-button_2.entry.js +1 -1
  597. package/lib/esm-es5/duet-tooltip.entry.js +1 -1
  598. package/lib/esm-es5/duet-tray.entry.js +1 -1
  599. package/lib/esm-es5/duet-upload-aria-status.entry.js +1 -1
  600. package/lib/esm-es5/duet-upload-item.entry.js +1 -1
  601. package/lib/esm-es5/duet-visually-hidden.entry.js +1 -1
  602. package/lib/esm-es5/duet.js +1 -1
  603. package/lib/esm-es5/floating-ui.dom.esm-6025c98f.js +4 -0
  604. package/lib/esm-es5/focus-utils-8a8cfffd.js +4 -0
  605. package/lib/esm-es5/index-d48e2c74.js +5 -0
  606. package/lib/esm-es5/loader.js +1 -1
  607. package/lib/esm-es5/teleport-4ede216d.js +4 -0
  608. package/lib/esm-es5/{token-utils-058d6220.js → token-utils-a1dcaa4b.js} +1 -1
  609. package/lib/esm-es5/{tokens.module-f436c2cd.js → tokens.module-ed773027.js} +1 -1
  610. package/lib/types/components/duet-alert/duet-alert.d.ts +12 -0
  611. package/lib/types/components/duet-fieldset/duet-fieldset.d.ts +6 -1
  612. package/lib/types/components/duet-header/duet-header.d.ts +3 -0
  613. package/lib/types/components/duet-modal/duet-modal.d.ts +1 -0
  614. package/lib/types/components/duet-upload/duet-upload.d.ts +20 -16
  615. package/lib/types/components.d.ts +32 -4
  616. package/lib/types/utils/teleport.d.ts +14 -2
  617. package/package.json +5 -5
  618. package/lib/duet/p-042b1636.entry.js +0 -4
  619. package/lib/duet/p-0e6350bf.system.entry.js +0 -4
  620. package/lib/duet/p-1002e2ae.system.entry.js +0 -4
  621. package/lib/duet/p-247f5600.entry.js +0 -4
  622. package/lib/duet/p-27530b53.js +0 -5
  623. package/lib/duet/p-30218ca6.system.entry.js +0 -4
  624. package/lib/duet/p-3ca2dafc.entry.js +0 -4
  625. package/lib/duet/p-4c063f5f.entry.js +0 -4
  626. package/lib/duet/p-7649b95e.js +0 -4
  627. package/lib/duet/p-7a0c7e22.system.entry.js +0 -4
  628. package/lib/duet/p-8c7ae2a9.system.js +0 -4
  629. package/lib/duet/p-8f416ae3.entry.js +0 -4
  630. package/lib/duet/p-949c4fd0.entry.js +0 -4
  631. package/lib/duet/p-be192c5b.js +0 -4
  632. package/lib/duet/p-be52bfd0.system.entry.js +0 -4
  633. package/lib/duet/p-be567ab1.entry.js +0 -4
  634. package/lib/duet/p-d86d90f2.entry.js +0 -4
  635. package/lib/duet/p-e15bdc0f.entry.js +0 -4
  636. package/lib/duet/p-ea8d7c61.system.js +0 -5
  637. package/lib/duet/p-f1d9862a.entry.js +0 -4
  638. package/lib/esm-es5/focus-utils-8008bc82.js +0 -4
  639. package/lib/esm-es5/index-79528b07.js +0 -5
  640. package/lib/esm-es5/teleport-542f423e.js +0 -4
package/hydrate/index.js CHANGED
@@ -6678,6 +6678,7 @@ class DuetAlert {
6678
6678
  this.padding = "auto";
6679
6679
  this.variation = "default";
6680
6680
  this.dismissible = false;
6681
+ this.focusable = false;
6681
6682
  }
6682
6683
  watchLanguageStateHandler(newValue, oldValue) {
6683
6684
  if (newValue !== oldValue && this.accessibleLabel === this.accessibleLabelDefaults[oldValue]) {
@@ -6716,6 +6717,15 @@ class DuetAlert {
6716
6717
  async hide() {
6717
6718
  this.handleHide();
6718
6719
  }
6720
+ /**
6721
+ * Sets focus on the specified `duet-alert`.
6722
+ * Works only when focusable property is set to true.
6723
+ * Use this method instead of the global
6724
+ * `button.focus()`.
6725
+ */
6726
+ async setFocus(options) {
6727
+ this.alertContainer.focus(options);
6728
+ }
6719
6729
  /**
6720
6730
  * There is bug in NVDA screen reader
6721
6731
  * that is causing multiple alert readings
@@ -6739,7 +6749,9 @@ class DuetAlert {
6739
6749
  "duet-m-0": this.margin === "none",
6740
6750
  [this.variation]: true,
6741
6751
  "duet-theme-turva": this.theme === "turva",
6742
- } }, hAsync("div", { class: "duet-alert-container" }, this.icon && (hAsync("div", { class: "duet-alert-icon" }, hAsync("duet-icon", { size: "auto", name: this.icon, color: "currentColor" }))), hAsync("span", { id: this.descriptiveId }, hAsync("slot", null))), this.dismissible && (hAsync("div", { class: "duet-alert-dismiss" }, hAsync("duet-button", { variation: "plain", accessibleLabel: this.accessibleLabel, accessibleDescribedBy: this.descriptiveId, color: closeColor, iconSize: "medium", icon: "navigation-close", iconOnly: true, margin: "none", theme: this.theme, onClick: this.handleDismiss, fixed: true }))))));
6752
+ } }, hAsync("div", { class: "duet-alert-container", ref: element => {
6753
+ this.alertContainer = element;
6754
+ }, tabindex: this.focusable ? "0" : undefined }, this.icon && (hAsync("div", { class: "duet-alert-icon" }, hAsync("duet-icon", { size: "auto", name: this.icon, color: "currentColor" }))), hAsync("span", { id: this.descriptiveId }, hAsync("slot", null))), this.dismissible && (hAsync("div", { class: "duet-alert-dismiss" }, hAsync("duet-button", { variation: "plain", accessibleLabel: this.accessibleLabel, accessibleDescribedBy: this.descriptiveId, color: closeColor, iconSize: "medium", icon: "navigation-close", iconOnly: true, margin: "none", theme: this.theme, onClick: this.handleDismiss, fixed: true }))))));
6743
6755
  }
6744
6756
  static get watchers() { return {
6745
6757
  "language": ["watchLanguageStateHandler"]
@@ -6759,11 +6771,13 @@ class DuetAlert {
6759
6771
  "padding": [1],
6760
6772
  "variation": [1],
6761
6773
  "dismissible": [4],
6774
+ "focusable": [4],
6762
6775
  "isDismissed": [32],
6763
6776
  "timeoutID": [32],
6764
6777
  "language": [32],
6765
6778
  "show": [64],
6766
- "hide": [64]
6779
+ "hide": [64],
6780
+ "setFocus": [64]
6767
6781
  },
6768
6782
  "$listeners$": undefined,
6769
6783
  "$lazyBundleId$": "-",
@@ -9688,12 +9702,12 @@ function setYear(date, year) {
9688
9702
  * Check if date is within a min and max
9689
9703
  */
9690
9704
  function inRange(date, min, max) {
9691
- return clamp$1(date, min, max) === date;
9705
+ return clamp$2(date, min, max) === date;
9692
9706
  }
9693
9707
  /**
9694
9708
  * Ensures date is within range, returns min or max if out of bounds
9695
9709
  */
9696
- function clamp$1(date, min, max) {
9710
+ function clamp$2(date, min, max) {
9697
9711
  const time = date.getTime();
9698
9712
  if (min && min instanceof Date && time < min.getTime()) {
9699
9713
  return min;
@@ -10073,16 +10087,16 @@ class DuetDatePicker {
10073
10087
  const min = setMonth(startOfMonth(this.focusedDay), month);
10074
10088
  const max = endOfMonth(min);
10075
10089
  const date = setMonth(this.focusedDay, month);
10076
- this.setFocusedDay(clamp$1(date, min, max));
10090
+ this.setFocusedDay(clamp$2(date, min, max));
10077
10091
  }
10078
10092
  setYear(year) {
10079
10093
  const min = setYear(startOfMonth(this.focusedDay), year);
10080
10094
  const max = endOfMonth(min);
10081
10095
  const date = setYear(this.focusedDay, year);
10082
- this.setFocusedDay(clamp$1(date, min, max));
10096
+ this.setFocusedDay(clamp$2(date, min, max));
10083
10097
  }
10084
10098
  setFocusedDay(day) {
10085
- this.focusedDay = clamp$1(day, parseISODate(this.min), parseISODate(this.max));
10099
+ this.focusedDay = clamp$2(day, parseISODate(this.min), parseISODate(this.max));
10086
10100
  }
10087
10101
  determineValidity(date) {
10088
10102
  var _a, _b;
@@ -10529,6 +10543,7 @@ class DuetFieldset {
10529
10543
  this.label = undefined;
10530
10544
  this.error = undefined;
10531
10545
  this.accessibleLiveError = "polite";
10546
+ this.labelHeadingLevel = "h3";
10532
10547
  this.labelHidden = false;
10533
10548
  }
10534
10549
  /**
@@ -10550,7 +10565,7 @@ class DuetFieldset {
10550
10565
  class: {
10551
10566
  "duet-fieldset": true,
10552
10567
  "duet-theme-turva": this.theme === "turva",
10553
- } }, hAsync("legend", { id: this.labelId }, hAsync("span", null, this.label), this.caption && hAsync("span", null, this.caption)), hAsync("div", { class: {
10568
+ } }, hAsync("legend", { id: this.labelId }, hAsync(this.labelHeadingLevel, null, this.label), this.caption && hAsync("span", null, this.caption)), hAsync("div", { class: {
10554
10569
  "duet-legend-wrapper": true,
10555
10570
  "duet-legend-has-caption": !!this.caption,
10556
10571
  "duet-legend-has-tooltip": this.hasTooltip,
@@ -10569,6 +10584,7 @@ class DuetFieldset {
10569
10584
  "label": [1],
10570
10585
  "error": [1],
10571
10586
  "accessibleLiveError": [1, "accessible-live-error"],
10587
+ "labelHeadingLevel": [1, "label-heading-level"],
10572
10588
  "labelHidden": [4, "label-hidden"],
10573
10589
  "hasTooltip": [32]
10574
10590
  },
@@ -11240,7 +11256,7 @@ class DuetHeader {
11240
11256
  this.hasLanguageChanged = false;
11241
11257
  this.mql = [window.matchMedia(media_query_large.replace(/'/g, ""))];
11242
11258
  this.boundMqlFunctions = [];
11243
- this.handleClick = (event) => {
11259
+ this.handleClick = (event, moveFocusToButton = false) => {
11244
11260
  if (event.data.analyticsId) {
11245
11261
  this.duetAnalytics.emit({
11246
11262
  component: "duet-header",
@@ -11248,8 +11264,8 @@ class DuetHeader {
11248
11264
  });
11249
11265
  }
11250
11266
  this.duetChange.emit(event);
11251
- this.closeMenus();
11252
- this.closeMobileNavigation();
11267
+ this.closeMenus(moveFocusToButton);
11268
+ this.closeMobileNavigation(moveFocusToButton);
11253
11269
  };
11254
11270
  this.handleSessionClick = (ev) => {
11255
11271
  const e = createEvent(ev, this.processedSession);
@@ -11501,7 +11517,7 @@ class DuetHeader {
11501
11517
  // When Esc is pressed
11502
11518
  if (isEscapeKey(ev)) {
11503
11519
  this.closeMenus(true);
11504
- this.closeMobileNavigation();
11520
+ this.closeMobileNavigation(true);
11505
11521
  }
11506
11522
  }
11507
11523
  handleKeyDown(ev) {
@@ -11535,7 +11551,7 @@ class DuetHeader {
11535
11551
  this.language = data.country;
11536
11552
  this.hasLanguageChanged = true;
11537
11553
  const e = createEvent(ev, data);
11538
- this.handleClick(e);
11554
+ this.handleClick(e, true);
11539
11555
  this.duetLanguageSelect.emit(e);
11540
11556
  }
11541
11557
  handleContactClick(ev, data) {
@@ -11571,10 +11587,15 @@ class DuetHeader {
11571
11587
  /**
11572
11588
  * Closes mobile menu in header when called.
11573
11589
  */
11574
- async closeMobileNavigation() {
11590
+ async closeMobileNavigation(moveFocusToButton = false) {
11575
11591
  if (this.isSlideOutOpen) {
11576
11592
  this.isSlideOutOpen = false;
11577
11593
  enableBodyScroll(this.navigationEl);
11594
+ if (moveFocusToButton) {
11595
+ this.navigationElButton.focus({
11596
+ preventScroll: true,
11597
+ });
11598
+ }
11578
11599
  }
11579
11600
  }
11580
11601
  /**
@@ -11666,7 +11687,7 @@ class DuetHeader {
11666
11687
  languageDropdown() ||
11667
11688
  contactDropdown() ||
11668
11689
  this.processedSession ||
11669
- this.processedUser) && (hAsync("button", { class: { "duet-header-toggle": true, active: this.isSlideOutOpen }, onClick: event => this.toggleMenu(event, "mobile"), type: "button" }, hAsync("duet-visually-hidden", null, this.accessibleLabel), hAsync(DuetHeaderHamburger, null)))), hAsync("div", { ref: el => (this.navigationEl = el), class: {
11690
+ this.processedUser) && (hAsync("button", { ref: el => (this.navigationElButton = el), class: { "duet-header-toggle": true, active: this.isSlideOutOpen }, onClick: event => this.toggleMenu(event, "mobile"), type: "button", "aria-controls": "duet-header-bottom", "aria-expanded": this.isSlideOutOpen ? "true" : "false" }, hAsync("duet-visually-hidden", null, this.accessibleLabel), hAsync(DuetHeaderHamburger, null)))), hAsync("div", { ref: el => (this.navigationEl = el), id: "duet-header-bottom", class: {
11670
11691
  "duet-header-bottom": true,
11671
11692
  active: this.isSlideOutOpen,
11672
11693
  inactive: !this.processedItems,
@@ -13623,6 +13644,88 @@ class DuetMenuBarLink {
13623
13644
  }; }
13624
13645
  }
13625
13646
 
13647
+ /**
13648
+ * Teleport helps resolving z-index issues of overlapping popup elements.
13649
+ * Initiate it in your component's willLoad or didLoad lifecycle hook.
13650
+ * When you open the popup, call teleport.go() and move focus to the popup.
13651
+ * When you close the popup, call teleport.resume() and move focus to the element that opened the popup.
13652
+ * If your popup has closing animation, use the timeout parameter.
13653
+ */
13654
+ class Teleport {
13655
+ constructor(element, target) {
13656
+ this.element = element;
13657
+ this.target = target || document.body;
13658
+ this.teleportId = `${Math.random()}-${Date.now()}`.substring(2);
13659
+ }
13660
+ /**
13661
+ * @param makeSiblingsInert - make all siblings of the element inert, use only with modals
13662
+ */
13663
+ go(makeSiblingsInert = false) {
13664
+ this.stub = document.createElement("div");
13665
+ this.element.insertAdjacentElement("afterend", this.stub);
13666
+ this.target.appendChild(this.element);
13667
+ if (makeSiblingsInert) {
13668
+ this._makeSiblingsInert();
13669
+ }
13670
+ this.deletionObserver = new MutationObserver(this._deletionObserverCallback.bind(this));
13671
+ this.deletionObserver.observe(document.documentElement, { childList: true, subtree: true });
13672
+ }
13673
+ resume(delay = 0) {
13674
+ if (delay) {
13675
+ setTimeout(this._resume.bind(this), delay);
13676
+ }
13677
+ else {
13678
+ this._resume();
13679
+ }
13680
+ }
13681
+ _resume() {
13682
+ this.stub.insertAdjacentElement("beforebegin", this.element);
13683
+ this.stub.remove();
13684
+ this._removeInertFromSiblings();
13685
+ this.deletionObserver.disconnect();
13686
+ }
13687
+ _remove() {
13688
+ var _a, _b;
13689
+ (_a = this.element) === null || _a === void 0 ? void 0 : _a.remove();
13690
+ (_b = this.stub) === null || _b === void 0 ? void 0 : _b.remove();
13691
+ this._removeInertFromSiblings();
13692
+ this.deletionObserver.disconnect();
13693
+ }
13694
+ _makeSiblingsInert() {
13695
+ const siblings = Array.from(this.target.children);
13696
+ siblings.forEach(sibling => {
13697
+ if (sibling !== this.element) {
13698
+ sibling.dataset.duetTeleportId = (sibling.dataset.duetTeleportId || "") + this.teleportId;
13699
+ sibling.inert = true;
13700
+ }
13701
+ });
13702
+ }
13703
+ _removeInertFromSiblings() {
13704
+ const siblings = Array.from(this.target.children);
13705
+ siblings.forEach(sibling => {
13706
+ var _a;
13707
+ if ((_a = sibling.dataset.duetTeleportId) === null || _a === void 0 ? void 0 : _a.includes(this.teleportId)) {
13708
+ sibling.dataset.duetTeleportId = sibling.dataset.duetTeleportId.replace(this.teleportId, "");
13709
+ if (sibling.dataset.duetTeleportId === "") {
13710
+ delete sibling.dataset.duetTeleportId;
13711
+ sibling.inert = false;
13712
+ }
13713
+ }
13714
+ });
13715
+ }
13716
+ /**
13717
+ * If the teleported element or its component (observed via stub) is removed from DOM, clean up the teleport.
13718
+ */
13719
+ _deletionObserverCallback(mutationList) {
13720
+ mutationList.forEach(mutation => {
13721
+ if (Array.from(mutation.removedNodes).includes(this.element) ||
13722
+ Array.from(mutation.removedNodes).some(n => n.contains(this.stub))) {
13723
+ this._remove();
13724
+ }
13725
+ });
13726
+ }
13727
+ }
13728
+
13626
13729
  const duetModalCss = "/*!@*,\n*::after,\n*::before*/*.sc-duet-modal,*.sc-duet-modal::after,*.sc-duet-modal::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}/*!@:host*/.sc-duet-modal-h{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}/*!@.duet-modal-overlay*/.duet-modal-overlay.sc-duet-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:900;max-height:100vh;overflow-y:auto;visibility:hidden;background:rgba(0, 41, 77, 0.85);opacity:0;transition:300ms ease;transition-delay:200ms}/*!@.duet-modal-overlay.duet-theme-turva*/.duet-modal-overlay.duet-theme-turva.sc-duet-modal{background:rgba(23, 28, 58, 0.85)}/*!@.duet-modal-overlay.duet-modal-active*/.duet-modal-overlay.duet-modal-active.sc-duet-modal{visibility:visible;opacity:1;transition:300ms ease;transition-delay:0s}/*!@.duet-modal-overlay.duet-disable-transitions*/.duet-modal-overlay.duet-disable-transitions.sc-duet-modal{transition:none}/*!@::slotted(img)*/.sc-duet-modal-s>img{width:100%}/*!@.duet-modal-inner*/.duet-modal-inner.sc-duet-modal{display:flex;align-items:center;width:100%;min-height:100%;padding:20px 16px}@media (min-width: 36em){/*!@.duet-modal-inner*/.duet-modal-inner.sc-duet-modal{padding:48px 16px}}@media (max-width: 35.9375em){/*!@.duet-modal-inner.duet-modal-large*/.duet-modal-inner.duet-modal-large.sc-duet-modal{padding-right:0;padding-left:0}}/*!@.duet-modal*/.duet-modal.sc-duet-modal{position:relative;width:100%;max-width:686px;margin:auto;font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";font-weight:400;font-variant-numeric:tabular-nums;line-height:1.5;color:rgb(0, 41, 77);background:rgb(255, 255, 255);border-radius:4px;opacity:0;transition:300ms ease;transition-delay:0ms;transform:scale(0.96)}/*!@.duet-theme-turva .duet-modal*/.duet-theme-turva.sc-duet-modal .duet-modal.sc-duet-modal{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:rgb(23, 28, 58)}/*!@.duet-modal-active .duet-modal*/.duet-modal-active.sc-duet-modal .duet-modal.sc-duet-modal{opacity:1;transition:300ms ease;transition-delay:200ms;transform:none}/*!@.duet-disable-transitions .duet-modal*/.duet-disable-transitions.sc-duet-modal .duet-modal.sc-duet-modal{transition:none}/*!@.duet-modal.small*/.duet-modal.small.sc-duet-modal{max-width:545px}/*!@.duet-modal.large*/.duet-modal.large.sc-duet-modal{max-width:100%}@media (min-width: 36em){/*!@.duet-modal.large*/.duet-modal.large.sc-duet-modal{max-width:1110px}}/*!@.duet-modal:focus*/.duet-modal.sc-duet-modal:focus{outline:0}/*!@.duet-modal-body*/.duet-modal-body.sc-duet-modal{width:100%;padding:36px 28px}/*!@.duet-modal-body.duet-modal-gutter-none*/.duet-modal-body.duet-modal-gutter-none.sc-duet-modal{padding:0 !important}/*!@.duet-modal-body.duet-modal-gutter-small*/.duet-modal-body.duet-modal-gutter-small.sc-duet-modal{padding:36px 20px}/*!@.duet-modal-body.duet-modal-gutter-large*/.duet-modal-body.duet-modal-gutter-large.sc-duet-modal{padding:48px 36px}@media (max-width: 22.5em){/*!@.duet-modal-body*/.duet-modal-body.sc-duet-modal{padding:36px 20px}/*!@.duet-modal-body.duet-modal-gutter-large*/.duet-modal-body.duet-modal-gutter-large.sc-duet-modal{padding:48px 28px}}@media (max-width: 35.9375em){/*!@.duet-modal-body*/.duet-modal-body.sc-duet-modal{padding:36px 20px}/*!@.duet-modal-body.duet-modal-gutter-large*/.duet-modal-body.duet-modal-gutter-large.sc-duet-modal{padding:48px 36px}}@media (min-width: 36em){/*!@.duet-modal-body*/.duet-modal-body.sc-duet-modal{padding:36px}/*!@.duet-modal-body.duet-modal-gutter-large*/.duet-modal-body.duet-modal-gutter-large.sc-duet-modal{padding:28px 72px}}@media (min-width: 48em){/*!@.duet-modal-body*/.duet-modal-body.sc-duet-modal{padding:36px 72px}/*!@.duet-modal-body.duet-modal-gutter-large*/.duet-modal-body.duet-modal-gutter-large.sc-duet-modal{padding:36px 72px}}@media (min-width: 76.25em){/*!@.duet-modal-body*/.duet-modal-body.sc-duet-modal{padding:36px 48px 48px}/*!@.duet-modal-body.duet-modal-gutter-large*/.duet-modal-body.duet-modal-gutter-large.sc-duet-modal{padding:48px 94px}/*!@.small .duet-modal-body*/.small.sc-duet-modal .duet-modal-body.sc-duet-modal{padding:36px 48px}}/*!@.duet-modal-header*/.duet-modal-header.sc-duet-modal{text-align:center}/*!@.duet-modal-close*/.duet-modal-close.sc-duet-modal{position:absolute;top:12px;right:12px}/*!@.duet-modal-heading*/.duet-modal-heading.sc-duet-modal{width:100%;padding-right:60px;overflow:hidden;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:1.25rem;font-style:normal;font-weight:600;font-variant-numeric:tabular-nums;line-height:1.25;color:rgb(0, 41, 77);text-decoration:none;text-overflow:ellipsis;letter-spacing:-0.01rem;white-space:nowrap}/*!@.duet-modal-heading.duet-p-0*/.duet-modal-heading.duet-p-0.sc-duet-modal{padding:0 !important}/*!@.duet-modal-heading.duet-m-0*/.duet-modal-heading.duet-m-0.sc-duet-modal{margin:0 !important}";
13627
13730
 
13628
13731
  // The transition below is slightly higher than the actual CSS transition as VoiceOver on
@@ -13691,6 +13794,7 @@ class DuetModal {
13691
13794
  }
13692
13795
  this.focusedElBeforeOpen = document.activeElement;
13693
13796
  disableBodyScroll(this.modalEl, { reserveScrollBarGap: true });
13797
+ this.teleport.go(true);
13694
13798
  setTimeout(() => {
13695
13799
  this.buttonEl.setFocus();
13696
13800
  }, TRANSITION_MS);
@@ -13708,6 +13812,7 @@ class DuetModal {
13708
13812
  this.modalEl.classList.remove("duet-disable-transitions");
13709
13813
  enableBodyScroll(this.modalEl);
13710
13814
  this.duetClose.emit();
13815
+ this.teleport.resume(TRANSITION_MS);
13711
13816
  setTimeout(() => {
13712
13817
  focusElement(this.focusedElBeforeOpen);
13713
13818
  }, TRANSITION_MS);
@@ -13731,6 +13836,7 @@ class DuetModal {
13731
13836
  inheritGlobalTheme(this);
13732
13837
  }
13733
13838
  componentDidLoad() {
13839
+ this.teleport = new Teleport(this.element);
13734
13840
  if (this.active) {
13735
13841
  // This specific line below can’t be moved to componentWillLoad()
13736
13842
  // as it breaks body scroll enabling.
@@ -14356,6 +14462,9 @@ var actionSubtract={"title":"action-subtract","tags":"action subtract minus remo
14356
14462
  function SafeParseFloat(value, locale) {
14357
14463
  let results;
14358
14464
  if (typeof value === "string") {
14465
+ if (value === "") {
14466
+ return null;
14467
+ }
14359
14468
  //the minuses are NOT the same characters, they differ in unicode for some languages
14360
14469
  // "‐", "−", "–", and "—"
14361
14470
  let convertedMinus = value.replace("−", "-").replace("‐", "-").replace("−", "-").replace("–", "-").replace("—", "-");
@@ -14418,7 +14527,7 @@ function ConvertToEnUS(value, locale, replaceThousands = false) {
14418
14527
  return replacedValue;
14419
14528
  }
14420
14529
  const roundTo = (val, multiple) => Math.round(val / multiple) * multiple;
14421
- const clamp = (val, min, max) => Math.min(Math.max(val, min), max);
14530
+ const clamp$1 = (val, min, max) => Math.min(Math.max(val, min), max);
14422
14531
 
14423
14532
  const duetNumberInputCss = "*.sc-duet-number-input,*.sc-duet-number-input::after,*.sc-duet-number-input::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}.sc-duet-number-input-h{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;margin-right:16px !important;margin-bottom:12px !important;display:inline-flex;width:100%;min-width:calc(33.333% - 8px);max-width:100%;line-height:1.25;text-align:left;vertical-align:bottom}.sc-duet-number-input-h:last-child,.sc-duet-number-input-h:last-of-type{margin-right:0 !important}@media (min-width: 36em){.sc-duet-number-input-h{width:calc(50% - 16px - 3px)}}.duet-expand.sc-duet-number-input-h{width:100% !important}.duet-m-0.sc-duet-number-input-h{margin:0 !important}.duet-number-container.sc-duet-number-input{position:relative;width:100%}.duet-number-buttons.sc-duet-number-input{-webkit-user-select:none;user-select:none;position:absolute;top:1px;right:1px;z-index:200;width:96px;height:calc(100% - 2px)}.duet-number-buttons.sc-duet-number-input .duet-number-button.sc-duet-number-input{position:relative;display:inline-flex;align-items:center;justify-content:center;width:50%;height:100%;text-align:center;cursor:pointer;background:transparent;-webkit-appearance:none;appearance:none}.duet-number-buttons.sc-duet-number-input .duet-number-button[aria-disabled=true].sc-duet-number-input,.duet-number-buttons.sc-duet-number-input .duet-number-button.sc-duet-number-input:disabled{pointer-events:none}.duet-number-buttons.sc-duet-number-input .duet-number-button[aria-disabled=true].sc-duet-number-input duet-icon.sc-duet-number-input,.duet-number-buttons.sc-duet-number-input .duet-number-button.sc-duet-number-input:disabled duet-icon.sc-duet-number-input{opacity:0.4}.duet-number-buttons.sc-duet-number-input .duet-number-button.sc-duet-number-input:active duet-icon.sc-duet-number-input{transform:translateY(1px)}.duet-number-buttons.sc-duet-number-input .duet-number-button.sc-duet-number-input:focus{outline:0}.user-is-tabbing.sc-duet-number-input-h .duet-number-buttons.sc-duet-number-input .duet-number-button.sc-duet-number-input:focus{z-index:2;box-shadow:0 0 0 2px rgb(0, 119, 179)}.duet-theme-turva .user-is-tabbing.sc-duet-number-input-h .duet-number-buttons.sc-duet-number-input .duet-number-button.sc-duet-number-input:focus{box-shadow:0 0 0 2px rgb(23, 28, 58)}.duet-number-buttons.sc-duet-number-input .duet-number-button.sc-duet-number-input:first-of-type{border-left:1px solid rgb(207, 210, 212)}.duet-number-buttons.sc-duet-number-input .duet-number-button.sc-duet-number-input:first-of-type::before{position:absolute;top:0;left:-6px;width:6px;height:100%;content:\"\";background:linear-gradient(to left, rgba(207, 210, 212, 0.2) 0%, rgba(207, 210, 212, 0.2) 1px, rgba(207, 210, 212, 0.1) 1px, rgba(207, 210, 212, 0) 100%)}.duet-number-buttons.sc-duet-number-input .duet-number-button.sc-duet-number-input:last-of-type{border-top-right-radius:4px;border-bottom-right-radius:4px}.duet-number-buttons.sc-duet-number-input .duet-number-button.sc-duet-number-input:last-of-type::before{position:absolute;top:20%;left:0;width:1px;height:60%;content:\"\";background:rgb(225, 227, 230)}.duet-theme-turva.sc-duet-number-input-h .duet-number-buttons.sc-duet-number-input .duet-number-button.sc-duet-number-input:first-of-type::before{background:linear-gradient(to left, rgba(207, 207, 209, 0.2) 0%, rgba(207, 207, 209, 0.2) 1px, rgba(207, 207, 209, 0.1) 1px, rgba(207, 207, 209, 0) 100%)}.duet-theme-turva.sc-duet-number-input-h .duet-number-buttons.sc-duet-number-input .duet-number-button.sc-duet-number-input:last-of-type::before{background:rgb(228, 228, 230)}";
14424
14533
 
@@ -14497,7 +14606,7 @@ class DuetNumberInput {
14497
14606
  if (this.rounding) {
14498
14607
  value = roundTo(value, this.step);
14499
14608
  }
14500
- value = clamp(value, this.min, this.max);
14609
+ value = clamp$1(value, this.min, this.max);
14501
14610
  if (value !== SafeParseFloat(this.value, this.locale) ||
14502
14611
  value !== SafeParseFloat(this.focusedValue, this.locale)) {
14503
14612
  this.setValue(value);
@@ -14562,7 +14671,7 @@ class DuetNumberInput {
14562
14671
  const adjustment = newValue % this.step;
14563
14672
  newValue -= adjustment;
14564
14673
  }
14565
- const clampedValue = clamp(newValue, this.min, this.max);
14674
+ const clampedValue = clamp$1(newValue, this.min, this.max);
14566
14675
  this.value = this.localizeValue(clampedValue);
14567
14676
  this.emitChange(ev);
14568
14677
  };
@@ -14585,7 +14694,7 @@ class DuetNumberInput {
14585
14694
  const adjustment = this.step - (newValue % this.step);
14586
14695
  newValue += adjustment;
14587
14696
  }
14588
- newValue = clamp(newValue, this.min, this.max);
14697
+ newValue = clamp$1(newValue, this.min, this.max);
14589
14698
  this.value = this.localizeValue(newValue);
14590
14699
  this.emitChange(ev);
14591
14700
  };
@@ -15161,20 +15270,118 @@ class DuetParagraph {
15161
15270
  }; }
15162
15271
  }
15163
15272
 
15273
+ const min$1 = Math.min;
15274
+ const max$1 = Math.max;
15275
+ const oppositeSideMap = {
15276
+ left: 'right',
15277
+ right: 'left',
15278
+ bottom: 'top',
15279
+ top: 'bottom'
15280
+ };
15281
+ const oppositeAlignmentMap = {
15282
+ start: 'end',
15283
+ end: 'start'
15284
+ };
15285
+ function clamp(start, value, end) {
15286
+ return max$1(start, min$1(value, end));
15287
+ }
15288
+ function evaluate(value, param) {
15289
+ return typeof value === 'function' ? value(param) : value;
15290
+ }
15291
+ function getSide(placement) {
15292
+ return placement.split('-')[0];
15293
+ }
15164
15294
  function getAlignment(placement) {
15165
15295
  return placement.split('-')[1];
15166
15296
  }
15167
-
15168
- function getLengthFromAxis(axis) {
15297
+ function getOppositeAxis(axis) {
15298
+ return axis === 'x' ? 'y' : 'x';
15299
+ }
15300
+ function getAxisLength(axis) {
15169
15301
  return axis === 'y' ? 'height' : 'width';
15170
15302
  }
15171
-
15172
- function getSide(placement) {
15173
- return placement.split('-')[0];
15303
+ function getSideAxis(placement) {
15304
+ return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';
15174
15305
  }
15175
-
15176
- function getMainAxisFromPlacement(placement) {
15177
- return ['top', 'bottom'].includes(getSide(placement)) ? 'x' : 'y';
15306
+ function getAlignmentAxis(placement) {
15307
+ return getOppositeAxis(getSideAxis(placement));
15308
+ }
15309
+ function getAlignmentSides(placement, rects, rtl) {
15310
+ if (rtl === void 0) {
15311
+ rtl = false;
15312
+ }
15313
+ const alignment = getAlignment(placement);
15314
+ const alignmentAxis = getAlignmentAxis(placement);
15315
+ const length = getAxisLength(alignmentAxis);
15316
+ let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';
15317
+ if (rects.reference[length] > rects.floating[length]) {
15318
+ mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
15319
+ }
15320
+ return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];
15321
+ }
15322
+ function getExpandedPlacements(placement) {
15323
+ const oppositePlacement = getOppositePlacement(placement);
15324
+ return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
15325
+ }
15326
+ function getOppositeAlignmentPlacement(placement) {
15327
+ return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);
15328
+ }
15329
+ function getSideList(side, isStart, rtl) {
15330
+ const lr = ['left', 'right'];
15331
+ const rl = ['right', 'left'];
15332
+ const tb = ['top', 'bottom'];
15333
+ const bt = ['bottom', 'top'];
15334
+ switch (side) {
15335
+ case 'top':
15336
+ case 'bottom':
15337
+ if (rtl) return isStart ? rl : lr;
15338
+ return isStart ? lr : rl;
15339
+ case 'left':
15340
+ case 'right':
15341
+ return isStart ? tb : bt;
15342
+ default:
15343
+ return [];
15344
+ }
15345
+ }
15346
+ function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
15347
+ const alignment = getAlignment(placement);
15348
+ let list = getSideList(getSide(placement), direction === 'start', rtl);
15349
+ if (alignment) {
15350
+ list = list.map(side => side + "-" + alignment);
15351
+ if (flipAlignment) {
15352
+ list = list.concat(list.map(getOppositeAlignmentPlacement));
15353
+ }
15354
+ }
15355
+ return list;
15356
+ }
15357
+ function getOppositePlacement(placement) {
15358
+ return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);
15359
+ }
15360
+ function expandPaddingObject(padding) {
15361
+ return {
15362
+ top: 0,
15363
+ right: 0,
15364
+ bottom: 0,
15365
+ left: 0,
15366
+ ...padding
15367
+ };
15368
+ }
15369
+ function getPaddingObject(padding) {
15370
+ return typeof padding !== 'number' ? expandPaddingObject(padding) : {
15371
+ top: padding,
15372
+ right: padding,
15373
+ bottom: padding,
15374
+ left: padding
15375
+ };
15376
+ }
15377
+ function rectToClientRect(rect) {
15378
+ return {
15379
+ ...rect,
15380
+ top: rect.y,
15381
+ left: rect.x,
15382
+ right: rect.x + rect.width,
15383
+ bottom: rect.y + rect.height
15384
+ };
15178
15385
  }
15179
15386
 
15180
15387
  function computeCoordsFromPlacement(_ref, placement, rtl) {
@@ -15182,13 +15389,14 @@ function computeCoordsFromPlacement(_ref, placement, rtl) {
15182
15389
  reference,
15183
15390
  floating
15184
15391
  } = _ref;
15392
+ const sideAxis = getSideAxis(placement);
15393
+ const alignmentAxis = getAlignmentAxis(placement);
15394
+ const alignLength = getAxisLength(alignmentAxis);
15395
+ const side = getSide(placement);
15396
+ const isVertical = sideAxis === 'y';
15185
15397
  const commonX = reference.x + reference.width / 2 - floating.width / 2;
15186
15398
  const commonY = reference.y + reference.height / 2 - floating.height / 2;
15187
- const mainAxis = getMainAxisFromPlacement(placement);
15188
- const length = getLengthFromAxis(mainAxis);
15189
- const commonAlign = reference[length] / 2 - floating[length] / 2;
15190
- const side = getSide(placement);
15191
- const isVertical = mainAxis === 'x';
15399
+ const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;
15192
15400
  let coords;
15193
15401
  switch (side) {
15194
15402
  case 'top':
@@ -15223,10 +15431,10 @@ function computeCoordsFromPlacement(_ref, placement, rtl) {
15223
15431
  }
15224
15432
  switch (getAlignment(placement)) {
15225
15433
  case 'start':
15226
- coords[mainAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
15434
+ coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
15227
15435
  break;
15228
15436
  case 'end':
15229
- coords[mainAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
15437
+ coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
15230
15438
  break;
15231
15439
  }
15232
15440
  return coords;
@@ -15324,35 +15532,6 @@ const computePosition$1 = async (reference, floating, config) => {
15324
15532
  };
15325
15533
  };
15326
15534
 
15327
- function expandPaddingObject(padding) {
15328
- return {
15329
- top: 0,
15330
- right: 0,
15331
- bottom: 0,
15332
- left: 0,
15333
- ...padding
15334
- };
15335
- }
15336
-
15337
- function getSideObjectFromPadding(padding) {
15338
- return typeof padding !== 'number' ? expandPaddingObject(padding) : {
15339
- top: padding,
15340
- right: padding,
15341
- bottom: padding,
15342
- left: padding
15343
- };
15344
- }
15345
-
15346
- function rectToClientRect(rect) {
15347
- return {
15348
- ...rect,
15349
- top: rect.y,
15350
- left: rect.x,
15351
- right: rect.x + rect.width,
15352
- bottom: rect.y + rect.height
15353
- };
15354
- }
15355
-
15356
15535
  /**
15357
15536
  * Resolves with an object of overflow side offsets that determine how much the
15358
15537
  * element is overflowing a given clipping boundary on each side.
@@ -15380,8 +15559,8 @@ async function detectOverflow(state, options) {
15380
15559
  elementContext = 'floating',
15381
15560
  altBoundary = false,
15382
15561
  padding = 0
15383
- } = options;
15384
- const paddingObject = getSideObjectFromPadding(padding);
15562
+ } = evaluate(options, state);
15563
+ const paddingObject = getPaddingObject(padding);
15385
15564
  const altContext = elementContext === 'floating' ? 'reference' : 'floating';
15386
15565
  const element = elements[altBoundary ? altContext : elementContext];
15387
15566
  const clippingClientRect = rectToClientRect(await platform.getClippingRect({
@@ -15416,13 +15595,6 @@ async function detectOverflow(state, options) {
15416
15595
  };
15417
15596
  }
15418
15597
 
15419
- const min$1 = Math.min;
15420
- const max$1 = Math.max;
15421
-
15422
- function within(min$1$1, value, max$1$1) {
15423
- return max$1(min$1$1, min$1(value, max$1$1));
15424
- }
15425
-
15426
15598
  /**
15427
15599
  * Provides data to position an inner element of the floating element so that it
15428
15600
  * appears centered to the reference element.
@@ -15432,11 +15604,6 @@ const arrow = options => ({
15432
15604
  name: 'arrow',
15433
15605
  options,
15434
15606
  async fn(state) {
15435
- // Since `element` is required, we don't Partial<> the type.
15436
- const {
15437
- element,
15438
- padding = 0
15439
- } = options || {};
15440
15607
  const {
15441
15608
  x,
15442
15609
  y,
@@ -15445,16 +15612,21 @@ const arrow = options => ({
15445
15612
  platform,
15446
15613
  elements
15447
15614
  } = state;
15615
+ // Since `element` is required, we don't Partial<> the type.
15616
+ const {
15617
+ element,
15618
+ padding = 0
15619
+ } = evaluate(options, state) || {};
15448
15620
  if (element == null) {
15449
15621
  return {};
15450
15622
  }
15451
- const paddingObject = getSideObjectFromPadding(padding);
15623
+ const paddingObject = getPaddingObject(padding);
15452
15624
  const coords = {
15453
15625
  x,
15454
15626
  y
15455
15627
  };
15456
- const axis = getMainAxisFromPlacement(placement);
15457
- const length = getLengthFromAxis(axis);
15628
+ const axis = getAlignmentAxis(placement);
15629
+ const length = getAxisLength(axis);
15458
15630
  const arrowDimensions = await platform.getDimensions(element);
15459
15631
  const isYAxis = axis === 'y';
15460
15632
  const minProp = isYAxis ? 'top' : 'left';
@@ -15471,98 +15643,35 @@ const arrow = options => ({
15471
15643
  }
15472
15644
  const centerToReference = endDiff / 2 - startDiff / 2;
15473
15645
 
15646
+ // If the padding is large enough that it causes the arrow to no longer be
15647
+ // centered, modify the padding so that it is centered.
15648
+ const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;
15649
+ const minPadding = min$1(paddingObject[minProp], largestPossiblePadding);
15650
+ const maxPadding = min$1(paddingObject[maxProp], largestPossiblePadding);
15651
+
15474
15652
  // Make sure the arrow doesn't overflow the floating element if the center
15475
15653
  // point is outside the floating element's bounds.
15476
- const min = paddingObject[minProp];
15477
- const max = clientSize - arrowDimensions[length] - paddingObject[maxProp];
15654
+ const min$1$1 = minPadding;
15655
+ const max = clientSize - arrowDimensions[length] - maxPadding;
15478
15656
  const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
15479
- const offset = within(min, center, max);
15657
+ const offset = clamp(min$1$1, center, max);
15480
15658
 
15481
15659
  // If the reference is small enough that the arrow's padding causes it to
15482
15660
  // to point to nothing for an aligned placement, adjust the offset of the
15483
15661
  // floating element itself. This stops `shift()` from taking action, but can
15484
15662
  // be worked around by calling it again after the `arrow()` if desired.
15485
- const shouldAddOffset = getAlignment(placement) != null && center != offset && rects.reference[length] / 2 - (center < min ? paddingObject[minProp] : paddingObject[maxProp]) - arrowDimensions[length] / 2 < 0;
15486
- const alignmentOffset = shouldAddOffset ? center < min ? min - center : max - center : 0;
15663
+ const shouldAddOffset = getAlignment(placement) != null && center != offset && rects.reference[length] / 2 - (center < min$1$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
15664
+ const alignmentOffset = shouldAddOffset ? center < min$1$1 ? min$1$1 - center : max - center : 0;
15487
15665
  return {
15488
15666
  [axis]: coords[axis] - alignmentOffset,
15489
15667
  data: {
15490
15668
  [axis]: offset,
15491
- centerOffset: center - offset
15669
+ centerOffset: center - offset + alignmentOffset
15492
15670
  }
15493
15671
  };
15494
15672
  }
15495
15673
  });
15496
15674
 
15497
- const oppositeSideMap = {
15498
- left: 'right',
15499
- right: 'left',
15500
- bottom: 'top',
15501
- top: 'bottom'
15502
- };
15503
- function getOppositePlacement(placement) {
15504
- return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);
15505
- }
15506
-
15507
- function getAlignmentSides(placement, rects, rtl) {
15508
- if (rtl === void 0) {
15509
- rtl = false;
15510
- }
15511
- const alignment = getAlignment(placement);
15512
- const mainAxis = getMainAxisFromPlacement(placement);
15513
- const length = getLengthFromAxis(mainAxis);
15514
- let mainAlignmentSide = mainAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';
15515
- if (rects.reference[length] > rects.floating[length]) {
15516
- mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
15517
- }
15518
- return {
15519
- main: mainAlignmentSide,
15520
- cross: getOppositePlacement(mainAlignmentSide)
15521
- };
15522
- }
15523
-
15524
- const oppositeAlignmentMap = {
15525
- start: 'end',
15526
- end: 'start'
15527
- };
15528
- function getOppositeAlignmentPlacement(placement) {
15529
- return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);
15530
- }
15531
-
15532
- function getExpandedPlacements(placement) {
15533
- const oppositePlacement = getOppositePlacement(placement);
15534
- return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
15535
- }
15536
-
15537
- function getSideList(side, isStart, rtl) {
15538
- const lr = ['left', 'right'];
15539
- const rl = ['right', 'left'];
15540
- const tb = ['top', 'bottom'];
15541
- const bt = ['bottom', 'top'];
15542
- switch (side) {
15543
- case 'top':
15544
- case 'bottom':
15545
- if (rtl) return isStart ? rl : lr;
15546
- return isStart ? lr : rl;
15547
- case 'left':
15548
- case 'right':
15549
- return isStart ? tb : bt;
15550
- default:
15551
- return [];
15552
- }
15553
- }
15554
- function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
15555
- const alignment = getAlignment(placement);
15556
- let list = getSideList(getSide(placement), direction === 'start', rtl);
15557
- if (alignment) {
15558
- list = list.map(side => side + "-" + alignment);
15559
- if (flipAlignment) {
15560
- list = list.concat(list.map(getOppositeAlignmentPlacement));
15561
- }
15562
- }
15563
- return list;
15564
- }
15565
-
15566
15675
  /**
15567
15676
  * Optimizes the visibility of the floating element by flipping the `placement`
15568
15677
  * in order to keep it in view when the preferred placement(s) will overflow the
@@ -15594,7 +15703,7 @@ const flip = function (options) {
15594
15703
  fallbackAxisSideDirection = 'none',
15595
15704
  flipAlignment = true,
15596
15705
  ...detectOverflowOptions
15597
- } = options;
15706
+ } = evaluate(options, state);
15598
15707
  const side = getSide(placement);
15599
15708
  const isBasePlacement = getSide(initialPlacement) === initialPlacement;
15600
15709
  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
@@ -15610,11 +15719,8 @@ const flip = function (options) {
15610
15719
  overflows.push(overflow[side]);
15611
15720
  }
15612
15721
  if (checkCrossAxis) {
15613
- const {
15614
- main,
15615
- cross
15616
- } = getAlignmentSides(placement, rects, rtl);
15617
- overflows.push(overflow[main], overflow[cross]);
15722
+ const sides = getAlignmentSides(placement, rects, rtl);
15723
+ overflows.push(overflow[sides[0]], overflow[sides[1]]);
15618
15724
  }
15619
15725
  overflowsData = [...overflowsData, {
15620
15726
  placement,
@@ -15673,7 +15779,9 @@ const flip = function (options) {
15673
15779
  };
15674
15780
  };
15675
15781
 
15676
- async function convertValueToCoords(state, value) {
15782
+ // For type backwards-compatibility, the `OffsetOptions` type was also
15783
+ // Derivable.
15784
+ async function convertValueToCoords(state, options) {
15677
15785
  const {
15678
15786
  placement,
15679
15787
  platform,
@@ -15682,10 +15790,10 @@ async function convertValueToCoords(state, value) {
15682
15790
  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
15683
15791
  const side = getSide(placement);
15684
15792
  const alignment = getAlignment(placement);
15685
- const isVertical = getMainAxisFromPlacement(placement) === 'x';
15793
+ const isVertical = getSideAxis(placement) === 'y';
15686
15794
  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;
15687
15795
  const crossAxisMulti = rtl && isVertical ? -1 : 1;
15688
- const rawValue = typeof value === 'function' ? value(state) : value;
15796
+ const rawValue = evaluate(options, state);
15689
15797
 
15690
15798
  // eslint-disable-next-line prefer-const
15691
15799
  let {
@@ -15721,19 +15829,19 @@ async function convertValueToCoords(state, value) {
15721
15829
  * object may be passed.
15722
15830
  * @see https://floating-ui.com/docs/offset
15723
15831
  */
15724
- const offset = function (value) {
15725
- if (value === void 0) {
15726
- value = 0;
15832
+ const offset = function (options) {
15833
+ if (options === void 0) {
15834
+ options = 0;
15727
15835
  }
15728
15836
  return {
15729
15837
  name: 'offset',
15730
- options: value,
15838
+ options,
15731
15839
  async fn(state) {
15732
15840
  const {
15733
15841
  x,
15734
15842
  y
15735
15843
  } = state;
15736
- const diffCoords = await convertValueToCoords(state, value);
15844
+ const diffCoords = await convertValueToCoords(state, options);
15737
15845
  return {
15738
15846
  x: x + diffCoords.x,
15739
15847
  y: y + diffCoords.y,
@@ -15743,10 +15851,6 @@ const offset = function (value) {
15743
15851
  };
15744
15852
  };
15745
15853
 
15746
- function getCrossAxis(axis) {
15747
- return axis === 'x' ? 'y' : 'x';
15748
- }
15749
-
15750
15854
  /**
15751
15855
  * Optimizes the visibility of the floating element by shifting it in order to
15752
15856
  * keep it in view when it will overflow the clipping boundary.
@@ -15781,14 +15885,14 @@ const shift = function (options) {
15781
15885
  }
15782
15886
  },
15783
15887
  ...detectOverflowOptions
15784
- } = options;
15888
+ } = evaluate(options, state);
15785
15889
  const coords = {
15786
15890
  x,
15787
15891
  y
15788
15892
  };
15789
15893
  const overflow = await detectOverflow(state, detectOverflowOptions);
15790
- const mainAxis = getMainAxisFromPlacement(getSide(placement));
15791
- const crossAxis = getCrossAxis(mainAxis);
15894
+ const crossAxis = getSideAxis(getSide(placement));
15895
+ const mainAxis = getOppositeAxis(crossAxis);
15792
15896
  let mainAxisCoord = coords[mainAxis];
15793
15897
  let crossAxisCoord = coords[crossAxis];
15794
15898
  if (checkMainAxis) {
@@ -15796,14 +15900,14 @@ const shift = function (options) {
15796
15900
  const maxSide = mainAxis === 'y' ? 'bottom' : 'right';
15797
15901
  const min = mainAxisCoord + overflow[minSide];
15798
15902
  const max = mainAxisCoord - overflow[maxSide];
15799
- mainAxisCoord = within(min, mainAxisCoord, max);
15903
+ mainAxisCoord = clamp(min, mainAxisCoord, max);
15800
15904
  }
15801
15905
  if (checkCrossAxis) {
15802
15906
  const minSide = crossAxis === 'y' ? 'top' : 'left';
15803
15907
  const maxSide = crossAxis === 'y' ? 'bottom' : 'right';
15804
15908
  const min = crossAxisCoord + overflow[minSide];
15805
15909
  const max = crossAxisCoord - overflow[maxSide];
15806
- crossAxisCoord = within(min, crossAxisCoord, max);
15910
+ crossAxisCoord = clamp(min, crossAxisCoord, max);
15807
15911
  }
15808
15912
  const limitedCoords = limiter.fn({
15809
15913
  ...state,
@@ -16402,39 +16506,6 @@ const computePosition = (reference, floating, options) => {
16402
16506
  });
16403
16507
  };
16404
16508
 
16405
- /**
16406
- * Teleport helps resolving z-index issues of overlapping popup elements.
16407
- * Initiate it in your component's willLoad or didLoad lifecycle hook.
16408
- * When you open the popup, call teleport.go() and move focus to the popup.
16409
- * When you close the popup, call teleport.resume() and move focus to the element that opened the popup.
16410
- * If your popup has closing animation, use the timeout parameter.
16411
- */
16412
- class Teleport {
16413
- constructor(element, target) {
16414
- this.element = element;
16415
- this.target = target || document.body;
16416
- }
16417
- go() {
16418
- this.stub = document.createElement("div");
16419
- this.element.insertAdjacentElement("afterend", this.stub);
16420
- this.target.appendChild(this.element);
16421
- this.element.style.zIndex = zIndexPopup;
16422
- }
16423
- resume(timeout = 0) {
16424
- if (timeout) {
16425
- setTimeout(this._resume.bind(this), timeout);
16426
- }
16427
- else {
16428
- this._resume();
16429
- }
16430
- }
16431
- _resume() {
16432
- this.element.style.zIndex = "";
16433
- this.stub.insertAdjacentElement("beforebegin", this.element);
16434
- this.stub.remove();
16435
- }
16436
- }
16437
-
16438
16509
  const duetPopupMenuCss = "/*!@*,\n*::after,\n*::before*/*.sc-duet-popup-menu,*.sc-duet-popup-menu::after,*.sc-duet-popup-menu::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}/*!@:host*/.sc-duet-popup-menu-h{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}/*!@.duet-popup-menu-list*/.duet-popup-menu-list.sc-duet-popup-menu{position:absolute;top:0;left:0;z-index:950;width:max-content;min-width:175px;padding:0;padding:1rem 0;margin:0;color:rgb(0, 41, 77);list-style:none;visibility:hidden !important;background:rgb(243, 249, 252);border-radius:0 0 8px 8px;box-shadow:0 6px 6px 0 rgba(0, 41, 77, 0.1);opacity:0;transition:transform 300ms ease, visibility 300ms ease, opacity 300ms ease;transform:scaleY(0);transform-origin:top center}/*!@.duet-popup-menu-list.open*/.duet-popup-menu-list.open.sc-duet-popup-menu{visibility:visible !important;opacity:1;transform:scaleY(1)}/*!@.duet-popup-menu-list.fixed*/.duet-popup-menu-list.fixed.sc-duet-popup-menu{position:fixed}/*!@.duet-popup-menu-list.duet-theme-turva*/.duet-popup-menu-list.duet-theme-turva.sc-duet-popup-menu{color:rgb(23, 28, 58) !important;background:rgb(245, 245, 247)}";
16439
16510
 
16440
16511
  class DuetPopupMenu {
@@ -20767,10 +20838,15 @@ const getI18nError = (errorCode, errorCodes) => {
20767
20838
  }
20768
20839
  };
20769
20840
 
20841
+ const headerAriaLabel = {
20842
+ fi: "Liiteluettelo",
20843
+ sv: "Lista över bilagor",
20844
+ en: "Attachments list",
20845
+ };
20770
20846
  const UploadItemHeader = ({ label, categoryLabel }) => {
20771
- return (hAsync("div", { class: "items-header" },
20772
- categoryLabel && (hAsync("duet-heading", { class: "category-header", border: "solid", color: "gray-darker", level: "h3", "visual-level": "h6", weight: "semibold", margin: "none" }, getLocaleString(categoryLabel))),
20773
- hAsync("duet-heading", { class: { "filename-header": true, "no-category": !categoryLabel }, border: "solid", color: "gray-darker", level: "h3", "visual-level": "h6", weight: "semibold", margin: "none" }, getLocaleString(label))));
20847
+ return (hAsync("div", { class: "items-header", tabindex: "0", "aria-label": getLocaleString(headerAriaLabel) },
20848
+ categoryLabel && (hAsync("duet-heading", { class: "category-header", border: "solid", color: "gray-darker", level: "h3", "visual-level": "h6", weight: "semibold", margin: "none", "aria-hidden": "true" }, getLocaleString(categoryLabel))),
20849
+ hAsync("duet-heading", { class: { "filename-header": true, "no-category": !categoryLabel }, border: "solid", color: "gray-darker", level: "h3", "visual-level": "h6", weight: "semibold", margin: "none", "aria-hidden": "true" }, getLocaleString(label))));
20774
20850
  };
20775
20851
 
20776
20852
  const validateFileExtension = (name, allowedExtensions) => {
@@ -21447,27 +21523,27 @@ class DuetUpload {
21447
21523
  this.caption = undefined;
21448
21524
  this.statusLabelDefaults = {
21449
21525
  fi: {
21450
- inProgress: "Lähetetään {filesUploaded} lähetettävästä {filesTotal} tiedostosta",
21451
- inProgressWithErrors: "Lähetetään {filesInProgress} tiedostoa, lähetetty {filesUploaded} lähetettävästä {filesTotal} tiedostosta, {filesWithErrors} tiedostossa on virheitä",
21452
- done: "Kaikki {filesTotal} tiedostoa lähetetty onnistuneesti",
21453
- doneWithErrors: "Lataus valmis, {filesUploaded} tiedostoa ladattu onnistuneesti, {filesWithErrors} tiedostossa oli virheitä",
21454
- files: "tiedostot",
21526
+ inProgress: "Lähetetään {filesUploaded}, yhteensä lähetettävänä {filesTotal}.",
21527
+ inProgressWithErrors: "Lähetetään {filesInProgress}, lähetetty {filesUploaded}, yhteensä lähetettävänä {filesTotal}, {filesWithErrors} epäonnistui",
21528
+ done: "Lähetys valmis, {filesTotal} lisätty onnistuneesti",
21529
+ doneWithErrors: "Lähetys valmis, {filesUploaded} lisätty onnistuneesti, {filesWithErrors} epäonnistui",
21530
+ files: "tiedostoa",
21455
21531
  file: "tiedosto",
21456
21532
  },
21457
21533
  sv: {
21458
- inProgress: "Adding {filesUploaded} of {filesTotal}",
21534
+ inProgress: "Laddar upp {filesUploaded} av {filesTotal}",
21459
21535
  inProgressWithErrors: "Laddar upp {filesInProgress}, {filesUploaded} uppladdad av {filesTotal}, {filesWithErrors} misslyckades",
21460
- done: "Alla {filesTotal} har lagts till",
21461
- doneWithErrors: "Handling slutförd, {filesUploaded} har lagts till, {filesWithErrors} misslyckades",
21536
+ done: "Uppladdningen slutförd, {filesTotal} har lagts till",
21537
+ doneWithErrors: "Uppladdningen slutförd, {filesUploaded} har lagts till, {filesWithErrors} misslyckades",
21462
21538
  files: "filer",
21463
21539
  file: "fil",
21464
21540
  },
21465
21541
  en: {
21466
- inProgress: "Adding {filesUploaded} of {filesTotal}",
21542
+ inProgress: "Uploading {filesUploaded} of {filesTotal}",
21467
21543
  inProgressWithErrors: "Uploading {filesInProgress}, {filesUploaded} uploaded of {filesTotal}, {filesWithErrors} failed",
21468
- done: "All {filesTotal} added successfully",
21469
- doneWithErrors: "Action completed, {filesUploaded} has been added successfully, {filesWithErrors} had errors",
21470
- files: "File",
21544
+ done: "Upload completed, {filesTotal} added successfully",
21545
+ doneWithErrors: "Upload completed, {filesUploaded} added successfully, {filesWithErrors} failed.",
21546
+ files: "files",
21471
21547
  file: "file",
21472
21548
  },
21473
21549
  };
@@ -21525,6 +21601,7 @@ class DuetUpload {
21525
21601
  sv: "Lägg till en bilaga",
21526
21602
  en: "Uploaded file",
21527
21603
  };
21604
+ this.headerHeadingLevel = "h3";
21528
21605
  this.hideHeader = false;
21529
21606
  this.emitEvent = false;
21530
21607
  this.groups = [
@@ -21661,7 +21738,7 @@ class DuetUpload {
21661
21738
  this.externalUploadButton.ariaLabel = caption;
21662
21739
  }
21663
21740
  // @ts-ignore
21664
- return (hAsync(Host, { class: { "duet-m-0": this.margin === "none" } }, hAsync("duet-fieldset", { "label-hidden": this.hideHeader, label: this.label, caption: !this.captionOnBottom ? caption : undefined }, hAsync("slot", { name: "header" }), !this.files.size && (hAsync("duet-empty-state", { id: this.labelId, part: this.identifier ? `${this.identifier}-empty-state` : "duet-upload-empty-state", icon: "messaging-attachment" }, hAsync("duet-paragraph", { margin: "none" }, this.fileListEmpty))), !!this.files.size && hAsync("slot", { name: "fileheader" }), !!this.files.size && (hAsync("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.renderUploadedItems(), !!this.files.size && hAsync("slot", { name: "filefooter" }), hAsync("slot", { name: "uploadfooter" }), this.captionOnBottom && (hAsync("duet-caption", { margin: "none", size: "small" }, hAsync("div", { class: "upload-bottom-caption" }, caption))), hAsync("slot", { name: "afterfooter" }), !this.hideButton && (hAsync(Fragment, null, hAsync("duet-spacer", { size: "large" }), hAsync("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))), (this.fileMaxReached ||
21741
+ return (hAsync(Host, { class: { "duet-m-0": this.margin === "none" } }, hAsync("duet-fieldset", { "label-heading-level": this.headerHeadingLevel, "label-hidden": this.hideHeader, label: this.label, caption: !this.captionOnBottom ? caption : undefined }, hAsync("slot", { name: "header" }), !this.files.size && (hAsync("duet-empty-state", { id: this.labelId, part: this.identifier ? `${this.identifier}-empty-state` : "duet-upload-empty-state", icon: "messaging-attachment" }, hAsync("duet-paragraph", { margin: "none" }, this.fileListEmpty))), !!this.files.size && hAsync("slot", { name: "fileheader" }), !!this.files.size && (hAsync("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.renderUploadedItems(), !!this.files.size && hAsync("slot", { name: "filefooter" }), hAsync("slot", { name: "uploadfooter" }), this.captionOnBottom && (hAsync("duet-caption", { margin: "none", size: "small" }, hAsync("div", { class: "upload-bottom-caption" }, caption))), hAsync("slot", { name: "afterfooter" }), !this.hideButton && (hAsync(Fragment, null, hAsync("duet-spacer", { size: "large" }), hAsync("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))), (this.fileMaxReached ||
21665
21742
  this.bytesMaxReached ||
21666
21743
  this.filesToUploadExceedsLimit ||
21667
21744
  this.filesToUploadTotalSizeIsAboveMax) && (hAsync(Fragment, null, hAsync("duet-spacer", { size: "medium" }), hAsync("duet-alert", { part: this.identifier ? `${this.identifier}-error-notification` : "duet-upload-error-notification" }, this.fileMaxReached && getI18nError("duet-upload-301", this.errorCodes), this.bytesMaxReached && getI18nError("duet-upload-202", this.errorCodes), this.filesToUploadExceedsLimit && getI18nError("duet-upload-302", this.errorCodes), this.filesToUploadTotalSizeIsAboveMax && getI18nError("duet-upload-203", this.errorCodes)))), hAsync("duet-visually-hidden", { "aria-hidden": "true" }, hAsync("input", { ref: input => {
@@ -21853,6 +21930,7 @@ class DuetUpload {
21853
21930
  "captionOnBottom": [4, "caption-on-bottom"],
21854
21931
  "showUploadedItemsHeader": [4, "show-uploaded-items-header"],
21855
21932
  "uploadedItemsHeaderLabel": [16],
21933
+ "headerHeadingLevel": [1, "header-heading-level"],
21856
21934
  "hideHeader": [4, "hide-header"],
21857
21935
  "emitEvent": [4, "link-click-event"],
21858
21936
  "groups": [16],
@@ -22004,7 +22082,8 @@ class DuetUploadItem {
22004
22082
  }
22005
22083
  async focusActionButton() {
22006
22084
  if (this.actionButton) {
22007
- await this.actionButton.setFocus();
22085
+ await this.actionButton.setFocus({ preventScroll: true });
22086
+ this.actionButton.scrollIntoView({ behavior: "smooth", block: "center", inline: "nearest" });
22008
22087
  }
22009
22088
  }
22010
22089
  getFileNameLine() {
@@ -22024,9 +22103,9 @@ class DuetUploadItem {
22024
22103
  }
22025
22104
  }
22026
22105
  render() {
22027
- const { uid, meta } = this.data;
22106
+ const { uid, meta, item } = this.data;
22028
22107
  const Badges = meta && meta.badges ? (hAsync("span", null, meta.badges.map(badgeText => (hAsync("duet-badge", { color: "primary" }, badgeText))))) : undefined;
22029
- const actionDescription = `${meta && meta.badges ? meta.badges.join(",") : ""} ${name}`;
22108
+ const actionDescription = `${meta && meta.badges ? meta.badges.join(",") : ""} ${item.name}`;
22030
22109
  return (hAsync("div", { class: {
22031
22110
  "upload-item-row": true,
22032
22111
  } }, this.showCategory && (hAsync("div", { class: "item-categories" }, hAsync("duet-heading", { class: "heading", color: "color-secondary", level: "h6", weight: "semibold" }, getLocaleString(this.categoryLabel)), Badges)), hAsync("div", { class: { "item-name": true, "no-category": !this.showCategory } }, !!this.label && (hAsync("duet-heading", { class: "heading", color: "color-secondary", level: "h6", weight: "semibold" }, getLocaleString(this.label))), this.getFileNameLine()), hAsync("div", { class: "item-actions" }, this.actions.map(actionItem => {