@duetds/components 8.0.6 → 8.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1247) hide show
  1. package/hydrate/index.d.ts +2 -2
  2. package/hydrate/index.js +19204 -17910
  3. package/lib/cjs/app-globals-aece069f.js +28 -0
  4. package/lib/cjs/{common-strings-86913e94.js → common-strings-22c70ef0.js} +6 -6
  5. package/lib/cjs/create-id-1f8c438f.js +13 -0
  6. package/lib/cjs/duet-action-button.cjs.entry.js +134 -134
  7. package/lib/cjs/duet-alert.cjs.entry.js +109 -106
  8. package/lib/cjs/duet-badge.cjs.entry.js +29 -29
  9. package/lib/cjs/duet-banner.cjs.entry.js +52 -52
  10. package/lib/cjs/duet-breadcrumb.cjs.entry.js +50 -41
  11. package/lib/cjs/duet-breadcrumbs.cjs.entry.js +51 -51
  12. package/lib/cjs/duet-button_2.cjs.entry.js +229 -229
  13. package/lib/cjs/duet-callout.cjs.entry.js +28 -28
  14. package/lib/cjs/duet-caption_4.cjs.entry.js +197 -187
  15. package/lib/cjs/duet-card.cjs.entry.js +100 -94
  16. package/lib/cjs/duet-checkbox.cjs.entry.js +85 -85
  17. package/lib/cjs/duet-checkmark.cjs.entry.js +23 -23
  18. package/lib/cjs/duet-chip.cjs.entry.js +189 -182
  19. package/lib/cjs/duet-choice_2.cjs.entry.js +395 -393
  20. package/lib/cjs/duet-collapsible.cjs.entry.js +105 -99
  21. package/lib/cjs/duet-combobox.cjs.entry.js +363 -363
  22. package/lib/cjs/duet-contact-card.cjs.entry.js +49 -49
  23. package/lib/cjs/duet-cookie-consent.cjs.entry.js +42 -35
  24. package/lib/cjs/duet-date-picker.cjs.entry.js +610 -610
  25. package/lib/cjs/duet-divider_2.cjs.entry.js +53 -53
  26. package/lib/cjs/duet-editable-table_3.cjs.entry.js +1248 -1248
  27. package/lib/cjs/duet-empty-state.cjs.entry.js +26 -26
  28. package/lib/cjs/duet-fieldset.cjs.entry.js +50 -50
  29. package/lib/cjs/duet-file-chooser.cjs.entry.js +44 -44
  30. package/lib/cjs/duet-footer.cjs.entry.js +121 -118
  31. package/lib/cjs/duet-grid_2.cjs.entry.js +185 -185
  32. package/lib/cjs/duet-header_2.cjs.entry.js +613 -611
  33. package/lib/cjs/duet-hero.cjs.entry.js +172 -172
  34. package/lib/cjs/duet-icon.cjs.entry.js +141 -141
  35. package/lib/cjs/duet-input_2.cjs.entry.js +347 -347
  36. package/lib/cjs/duet-layout.cjs.entry.js +51 -51
  37. package/lib/cjs/duet-list_2.cjs.entry.js +99 -99
  38. package/lib/cjs/duet-menu-bar-button.cjs.entry.js +70 -70
  39. package/lib/cjs/duet-menu-bar-dropdown-link.cjs.entry.js +45 -45
  40. package/lib/cjs/duet-menu-bar-dropdown.cjs.entry.js +94 -94
  41. package/lib/cjs/duet-menu-bar-link.cjs.entry.js +58 -58
  42. package/lib/cjs/duet-menu-bar.cjs.entry.js +116 -116
  43. package/lib/cjs/duet-modal.cjs.entry.js +189 -189
  44. package/lib/cjs/duet-multiselect.cjs.entry.js +207 -207
  45. package/lib/cjs/duet-nav.cjs.entry.js +20 -20
  46. package/lib/cjs/duet-notification_2.cjs.entry.js +145 -140
  47. package/lib/cjs/duet-number-input.cjs.entry.js +340 -338
  48. package/lib/cjs/duet-page-heading.cjs.entry.js +26 -26
  49. package/lib/cjs/duet-pagination_2.cjs.entry.js +512 -512
  50. package/lib/cjs/duet-popup-menu-item.cjs.entry.js +62 -62
  51. package/lib/cjs/duet-popup-menu.cjs.entry.js +148 -148
  52. package/lib/cjs/duet-progress.cjs.entry.js +54 -54
  53. package/lib/cjs/duet-promo-card.cjs.entry.js +40 -40
  54. package/lib/cjs/duet-radio_2.cjs.entry.js +197 -197
  55. package/lib/cjs/duet-range-slider.cjs.entry.js +112 -105
  56. package/lib/cjs/duet-scrollable_3.cjs.entry.js +387 -387
  57. package/lib/cjs/duet-section-layout.cjs.entry.js +21 -21
  58. package/lib/cjs/duet-select.cjs.entry.js +156 -156
  59. package/lib/cjs/duet-shaped-image.cjs.entry.js +28 -28
  60. package/lib/cjs/duet-show-more.cjs.entry.js +99 -99
  61. package/lib/cjs/duet-slideout-lang.cjs.entry.js +36 -36
  62. package/lib/cjs/duet-slideout-link.cjs.entry.js +33 -33
  63. package/lib/cjs/duet-slideout-panel-dropdown.cjs.entry.js +50 -50
  64. package/lib/cjs/duet-slideout-panel.cjs.entry.js +120 -120
  65. package/lib/cjs/duet-slideout.cjs.entry.js +196 -196
  66. package/lib/cjs/duet-step_2.cjs.entry.js +189 -185
  67. package/lib/cjs/duet-submenu-bar-dropdown-link.cjs.entry.js +37 -37
  68. package/lib/cjs/duet-submenu-bar-dropdown.cjs.entry.js +104 -104
  69. package/lib/cjs/duet-submenu-bar-link.cjs.entry.js +60 -60
  70. package/lib/cjs/duet-submenu-bar.cjs.entry.js +110 -110
  71. package/lib/cjs/duet-textarea.cjs.entry.js +160 -160
  72. package/lib/cjs/duet-toggle.cjs.entry.js +79 -72
  73. package/lib/cjs/duet-toolbar-dropdown-link.cjs.entry.js +36 -36
  74. package/lib/cjs/duet-toolbar-dropdown.cjs.entry.js +60 -60
  75. package/lib/cjs/duet-toolbar-link.cjs.entry.js +31 -31
  76. package/lib/cjs/duet-toolbar.cjs.entry.js +34 -34
  77. package/lib/cjs/duet-tooltip-button_2.cjs.entry.js +93 -80
  78. package/lib/cjs/duet-tooltip.cjs.entry.js +190 -188
  79. package/lib/cjs/duet-tray.cjs.entry.js +85 -82
  80. package/lib/cjs/duet-upload-aria-status.cjs.entry.js +65 -65
  81. package/lib/cjs/duet-upload-item.cjs.entry.js +81 -81
  82. package/lib/cjs/duet-visually-hidden.cjs.entry.js +12 -12
  83. package/lib/cjs/duet.cjs.js +4 -4
  84. package/lib/cjs/errorcodes.utils-a86b1f94.js +39 -0
  85. package/lib/cjs/focus-utils-d0b70745.js +21 -0
  86. package/lib/cjs/{index-2cce7b13.js → index-2dc54a15.js} +106 -45
  87. package/lib/cjs/input-utils-1096a2c5.js +56 -0
  88. package/lib/cjs/{is-internet-explorer-76c3b538.js → is-internet-explorer-e7f58ebc.js} +2 -2
  89. package/lib/cjs/{js-utils-b20cfc79.js → js-utils-92e24ba1.js} +27 -27
  90. package/lib/cjs/keyboard-utils-7248dd0a.js +69 -0
  91. package/lib/cjs/{language-utils-dc19e8b6.js → language-utils-e8a527e5.js} +74 -74
  92. package/lib/cjs/loader.cjs.js +3 -3
  93. package/lib/cjs/{slot-query-b7555763.js → slot-query-3259af5b.js} +1 -1
  94. package/lib/cjs/string-utils-053749ff.js +59 -0
  95. package/lib/cjs/teleport-e9d05bca.js +99 -0
  96. package/lib/cjs/themeable-component-83a2a0d4.js +15 -0
  97. package/lib/cjs/token-utils-84b3bca6.js +124 -0
  98. package/lib/cjs/watch-options-30a12622.js +61 -0
  99. package/lib/collection/collection-manifest.json +3 -3
  100. package/lib/collection/common/slot-query.js +3 -3
  101. package/lib/collection/common/themeable-component.js +6 -6
  102. package/lib/collection/common-strings.js +6 -6
  103. package/lib/collection/components/duet-action-button/duet-action-button.a11y.e2e.js +5 -5
  104. package/lib/collection/components/duet-action-button/duet-action-button.js +570 -569
  105. package/lib/collection/components/duet-alert/duet-alert.a11y.e2e.js +10 -10
  106. package/lib/collection/components/duet-alert/duet-alert.e2e.js +47 -47
  107. package/lib/collection/components/duet-alert/duet-alert.js +445 -441
  108. package/lib/collection/components/duet-badge/duet-badge.a11y.e2e.js +10 -10
  109. package/lib/collection/components/duet-badge/duet-badge.e2e.js +21 -21
  110. package/lib/collection/components/duet-badge/duet-badge.js +134 -134
  111. package/lib/collection/components/duet-banner/duet-banner.a11y.e2e.js +5 -5
  112. package/lib/collection/components/duet-banner/duet-banner.e2e.js +16 -16
  113. package/lib/collection/components/duet-banner/duet-banner.js +309 -309
  114. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumb.js +172 -139
  115. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumbs.a11y.e2e.js +5 -5
  116. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumbs.e2e.js +6 -6
  117. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumbs.js +112 -112
  118. package/lib/collection/components/duet-button/duet-button.a11y.e2e.js +30 -30
  119. package/lib/collection/components/duet-button/duet-button.e2e.js +187 -187
  120. package/lib/collection/components/duet-button/duet-button.js +1068 -1067
  121. package/lib/collection/components/duet-callout/duet-callout.a11y.e2e.js +5 -5
  122. package/lib/collection/components/duet-callout/duet-callout.e2e.js +15 -15
  123. package/lib/collection/components/duet-callout/duet-callout.js +88 -88
  124. package/lib/collection/components/duet-caption/duet-caption.a11y.e2e.js +5 -5
  125. package/lib/collection/components/duet-caption/duet-caption.e2e.js +20 -20
  126. package/lib/collection/components/duet-caption/duet-caption.js +131 -131
  127. package/lib/collection/components/duet-card/duet-card.a11y.e2e.js +10 -10
  128. package/lib/collection/components/duet-card/duet-card.e2e.js +85 -85
  129. package/lib/collection/components/duet-card/duet-card.js +498 -491
  130. package/lib/collection/components/duet-checkbox/duet-checkbox.a11y.e2e.js +10 -10
  131. package/lib/collection/components/duet-checkbox/duet-checkbox.e2e.js +103 -103
  132. package/lib/collection/components/duet-checkbox/duet-checkbox.js +553 -549
  133. package/lib/collection/components/duet-chip/duet-chip.a11y.e2e.js +10 -10
  134. package/lib/collection/components/duet-chip/duet-chip.e2e.js +40 -40
  135. package/lib/collection/components/duet-chip/duet-chip.js +494 -486
  136. package/lib/collection/components/duet-choice/duet-checkmark.js +136 -136
  137. package/lib/collection/components/duet-choice/duet-choice.a11y.e2e.js +25 -25
  138. package/lib/collection/components/duet-choice/duet-choice.e2e.js +171 -171
  139. package/lib/collection/components/duet-choice/duet-choice.js +1095 -1089
  140. package/lib/collection/components/duet-choice-group/duet-choice-group.a11y.e2e.js +5 -5
  141. package/lib/collection/components/duet-choice-group/duet-choice-group.e2e.js +63 -63
  142. package/lib/collection/components/duet-choice-group/duet-choice-group.js +456 -453
  143. package/lib/collection/components/duet-collapsible/duet-collapsible.a11y.e2e.js +10 -10
  144. package/lib/collection/components/duet-collapsible/duet-collapsible.e2e.js +87 -87
  145. package/lib/collection/components/duet-collapsible/duet-collapsible.js +370 -363
  146. package/lib/collection/components/duet-combobox/duet-combobox-select-single.js +2 -2
  147. package/lib/collection/components/duet-combobox/duet-combobox-select.js +8 -8
  148. package/lib/collection/components/duet-combobox/duet-combobox.a11y.e2e.js +5 -5
  149. package/lib/collection/components/duet-combobox/duet-combobox.e2e.js +115 -115
  150. package/lib/collection/components/duet-combobox/duet-combobox.js +670 -669
  151. package/lib/collection/components/duet-contact-card/duet-contact-card.a11y.e2e.js +5 -5
  152. package/lib/collection/components/duet-contact-card/duet-contact-card.js +255 -255
  153. package/lib/collection/components/duet-cookie-consent/duet-cookie-consent.a11y.e2e.js +5 -5
  154. package/lib/collection/components/duet-cookie-consent/duet-cookie-consent.e2e.js +16 -16
  155. package/lib/collection/components/duet-cookie-consent/duet-cookie-consent.js +134 -127
  156. package/lib/collection/components/duet-date-picker/date-i18n.js +97 -97
  157. package/lib/collection/components/duet-date-picker/date-picker-day.js +9 -9
  158. package/lib/collection/components/duet-date-picker/date-picker-input.js +5 -5
  159. package/lib/collection/components/duet-date-picker/date-picker-month.js +16 -16
  160. package/lib/collection/components/duet-date-picker/date-utils.js +95 -95
  161. package/lib/collection/components/duet-date-picker/date-utils.spec.js +323 -323
  162. package/lib/collection/components/duet-date-picker/duet-date-picker.a11y.e2e.js +5 -5
  163. package/lib/collection/components/duet-date-picker/duet-date-picker.e2e.js +618 -618
  164. package/lib/collection/components/duet-date-picker/duet-date-picker.js +1049 -1044
  165. package/lib/collection/components/duet-date-picker/utils.js +29 -29
  166. package/lib/collection/components/duet-divider/duet-divider.a11y.e2e.js +5 -5
  167. package/lib/collection/components/duet-divider/duet-divider.e2e.js +24 -24
  168. package/lib/collection/components/duet-divider/duet-divider.js +112 -112
  169. package/lib/collection/components/duet-editable-table/duet-editable-table-tabledata.js +7 -7
  170. package/lib/collection/components/duet-editable-table/duet-editable-table.a11y.e2e.js +5 -5
  171. package/lib/collection/components/duet-editable-table/duet-editable-table.e2e.js +19 -19
  172. package/lib/collection/components/duet-editable-table/duet-editable-table.js +501 -498
  173. package/lib/collection/components/duet-empty-state/duet-empty-state.a11y.e2e.js +5 -5
  174. package/lib/collection/components/duet-empty-state/duet-empty-state.e2e.js +10 -10
  175. package/lib/collection/components/duet-empty-state/duet-empty-state.js +110 -110
  176. package/lib/collection/components/duet-fieldset/duet-fieldset.a11y.e2e.js +5 -5
  177. package/lib/collection/components/duet-fieldset/duet-fieldset.e2e.js +5 -5
  178. package/lib/collection/components/duet-fieldset/duet-fieldset.js +245 -245
  179. package/lib/collection/components/duet-file-chooser/duet-file-chooser.js +179 -179
  180. package/lib/collection/components/duet-footer/duet-footer.a11y.e2e.js +5 -5
  181. package/lib/collection/components/duet-footer/duet-footer.e2e.js +163 -163
  182. package/lib/collection/components/duet-footer/duet-footer.js +488 -485
  183. package/lib/collection/components/duet-grid/duet-grid.a11y.e2e.js +5 -5
  184. package/lib/collection/components/duet-grid/duet-grid.e2e.js +36 -36
  185. package/lib/collection/components/duet-grid/duet-grid.js +345 -342
  186. package/lib/collection/components/duet-grid-item/duet-grid-item.js +233 -230
  187. package/lib/collection/components/duet-header/duet-header-dropdown.js +12 -12
  188. package/lib/collection/components/duet-header/duet-header-icon.js +2 -2
  189. package/lib/collection/components/duet-header/duet-header.a11y.e2e.js +5 -5
  190. package/lib/collection/components/duet-header/duet-header.e2e.js +430 -430
  191. package/lib/collection/components/duet-header/duet-header.js +1300 -1296
  192. package/lib/collection/components/duet-heading/duet-heading.a11y.e2e.js +5 -5
  193. package/lib/collection/components/duet-heading/duet-heading.e2e.js +21 -21
  194. package/lib/collection/components/duet-heading/duet-heading.js +230 -230
  195. package/lib/collection/components/duet-hero/duet-hero.a11y.e2e.js +15 -15
  196. package/lib/collection/components/duet-hero/duet-hero.e2e.js +166 -166
  197. package/lib/collection/components/duet-hero/duet-hero.js +814 -814
  198. package/lib/collection/components/duet-icon/duet-icon.a11y.e2e.js +5 -5
  199. package/lib/collection/components/duet-icon/duet-icon.e2e.js +26 -26
  200. package/lib/collection/components/duet-icon/duet-icon.js +392 -392
  201. package/lib/collection/components/duet-icon/icon-utils.js +59 -59
  202. package/lib/collection/components/duet-icon/icon-utils.spec.js +76 -76
  203. package/lib/collection/components/duet-input/duet-input.a11y.e2e.js +20 -20
  204. package/lib/collection/components/duet-input/duet-input.e2e.js +195 -195
  205. package/lib/collection/components/duet-input/duet-input.js +1249 -1245
  206. package/lib/collection/components/duet-label/duet-label.a11y.e2e.js +5 -5
  207. package/lib/collection/components/duet-label/duet-label.e2e.js +26 -26
  208. package/lib/collection/components/duet-label/duet-label.js +134 -131
  209. package/lib/collection/components/duet-layout/duet-layout.a11y.e2e.js +5 -5
  210. package/lib/collection/components/duet-layout/duet-layout.e2e.js +26 -26
  211. package/lib/collection/components/duet-layout/duet-layout.js +207 -207
  212. package/lib/collection/components/duet-link/duet-link.a11y.e2e.js +15 -15
  213. package/lib/collection/components/duet-link/duet-link.e2e.js +47 -47
  214. package/lib/collection/components/duet-link/duet-link.js +446 -435
  215. package/lib/collection/components/duet-list/duet-list.a11y.e2e.js +11 -11
  216. package/lib/collection/components/duet-list/duet-list.e2e.js +50 -50
  217. package/lib/collection/components/duet-list/duet-list.js +292 -292
  218. package/lib/collection/components/duet-list-item/duet-list-item.js +81 -81
  219. package/lib/collection/components/duet-logo/duet-logo.a11y.e2e.js +5 -5
  220. package/lib/collection/components/duet-logo/duet-logo.e2e.js +36 -36
  221. package/lib/collection/components/duet-logo/duet-logo.js +293 -292
  222. package/lib/collection/components/duet-menu-bar/duet-menu-bar.a11y.e2e.js +5 -5
  223. package/lib/collection/components/duet-menu-bar/duet-menu-bar.js +261 -261
  224. package/lib/collection/components/duet-menu-bar-button/duet-menu-bar-button.js +347 -346
  225. package/lib/collection/components/duet-menu-bar-dropdown/duet-menu-bar-dropdown.js +224 -223
  226. package/lib/collection/components/duet-menu-bar-dropdown-link/duet-menu-bar-dropdown-link.js +133 -133
  227. package/lib/collection/components/duet-menu-bar-link/duet-menu-bar-link.js +170 -170
  228. package/lib/collection/components/duet-modal/duet-modal.a11y.e2e.js +10 -10
  229. package/lib/collection/components/duet-modal/duet-modal.e2e.js +78 -78
  230. package/lib/collection/components/duet-modal/duet-modal.js +687 -687
  231. package/lib/collection/components/duet-multiselect/duet-multiselect.a11y.e2e.js +5 -5
  232. package/lib/collection/components/duet-multiselect/duet-multiselect.e2e.js +87 -87
  233. package/lib/collection/components/duet-multiselect/duet-multiselect.js +654 -653
  234. package/lib/collection/components/duet-nav/duet-nav.js +56 -56
  235. package/lib/collection/components/duet-notification/duet-notification.a11y.e2e.js +5 -5
  236. package/lib/collection/components/duet-notification/duet-notification.e2e.js +6 -6
  237. package/lib/collection/components/duet-notification/duet-notification.js +260 -259
  238. package/lib/collection/components/duet-notification-drawer/duet-notification-drawer.a11y.e2e.js +10 -10
  239. package/lib/collection/components/duet-notification-drawer/duet-notification-drawer.e2e.js +141 -141
  240. package/lib/collection/components/duet-notification-drawer/duet-notification-drawer.js +382 -383
  241. package/lib/collection/components/duet-number-input/duet-number-input-negative.e2e.js +26 -26
  242. package/lib/collection/components/duet-number-input/duet-number-input.a11y.e2e.js +5 -5
  243. package/lib/collection/components/duet-number-input/duet-number-input.e2e.js +232 -232
  244. package/lib/collection/components/duet-number-input/duet-number-input.js +1120 -1114
  245. package/lib/collection/components/duet-page-heading/duet-page-heading.a11y.e2e.js +5 -5
  246. package/lib/collection/components/duet-page-heading/duet-page-heading.js +104 -104
  247. package/lib/collection/components/duet-pagination/duet-pagination-utils.js +4 -4
  248. package/lib/collection/components/duet-pagination/duet-pagination.a11y.e2e.js +10 -10
  249. package/lib/collection/components/duet-pagination/duet-pagination.e2e.js +79 -79
  250. package/lib/collection/components/duet-pagination/duet-pagination.js +677 -677
  251. package/lib/collection/components/duet-paragraph/duet-paragraph.a11y.e2e.js +5 -5
  252. package/lib/collection/components/duet-paragraph/duet-paragraph.e2e.js +21 -21
  253. package/lib/collection/components/duet-paragraph/duet-paragraph.js +190 -190
  254. package/lib/collection/components/duet-popup-menu/duet-popup-menu.a11y.e2e.js +5 -5
  255. package/lib/collection/components/duet-popup-menu/duet-popup-menu.js +407 -407
  256. package/lib/collection/components/duet-popup-menu-item/duet-popup-menu-item.js +344 -343
  257. package/lib/collection/components/duet-progress/duet-progress.a11y.e2e.js +7 -7
  258. package/lib/collection/components/duet-progress/duet-progress.e2e.js +6 -6
  259. package/lib/collection/components/duet-progress/duet-progress.js +276 -273
  260. package/lib/collection/components/duet-promo-card/duet-promo-card.a11y.e2e.js +5 -5
  261. package/lib/collection/components/duet-promo-card/duet-promo-card.e2e.js +16 -16
  262. package/lib/collection/components/duet-promo-card/duet-promo-card.js +206 -206
  263. package/lib/collection/components/duet-radio/duet-radio.a11y.e2e.js +5 -5
  264. package/lib/collection/components/duet-radio/duet-radio.e2e.js +126 -126
  265. package/lib/collection/components/duet-radio/duet-radio.js +609 -605
  266. package/lib/collection/components/duet-radio-group/duet-radio-group.a11y.e2e.js +10 -10
  267. package/lib/collection/components/duet-radio-group/duet-radio-group.e2e.js +39 -39
  268. package/lib/collection/components/duet-radio-group/duet-radio-group.js +423 -420
  269. package/lib/collection/components/duet-range-slider/duet-range-slider.a11y.e2e.js +5 -5
  270. package/lib/collection/components/duet-range-slider/duet-range-slider.e2e.js +51 -51
  271. package/lib/collection/components/duet-range-slider/duet-range-slider.js +568 -557
  272. package/lib/collection/components/duet-range-stepper/duet-range-stepper.a11y.e2e.js +5 -5
  273. package/lib/collection/components/duet-range-stepper/duet-range-stepper.e2e.js +46 -46
  274. package/lib/collection/components/duet-range-stepper/duet-range-stepper.js +341 -341
  275. package/lib/collection/components/duet-range-stepper/duet-range-stepper.spec.js +17 -17
  276. package/lib/collection/components/duet-scrollable/duet-scrollable.a11y.e2e.js +5 -5
  277. package/lib/collection/components/duet-scrollable/duet-scrollable.e2e.js +6 -6
  278. package/lib/collection/components/duet-scrollable/duet-scrollable.js +294 -294
  279. package/lib/collection/components/duet-section-layout/duet-section-layout.a11y.e2e.js +5 -5
  280. package/lib/collection/components/duet-section-layout/duet-section-layout.e2e.js +16 -16
  281. package/lib/collection/components/duet-section-layout/duet-section-layout.js +75 -75
  282. package/lib/collection/components/duet-select/duet-select.a11y.e2e.js +10 -10
  283. package/lib/collection/components/duet-select/duet-select.e2e.js +201 -201
  284. package/lib/collection/components/duet-select/duet-select.js +722 -718
  285. package/lib/collection/components/duet-shaped-image/duet-shaped-image.a11y.e2e.js +5 -5
  286. package/lib/collection/components/duet-shaped-image/duet-shaped-image.js +143 -143
  287. package/lib/collection/components/duet-show-more/duet-show-more.a11y.e2e.js +5 -5
  288. package/lib/collection/components/duet-show-more/duet-show-more.js +436 -436
  289. package/lib/collection/components/duet-slideout/duet-slideout.a11y.e2e.js +5 -5
  290. package/lib/collection/components/duet-slideout/duet-slideout.css +4 -10
  291. package/lib/collection/components/duet-slideout/duet-slideout.js +408 -407
  292. package/lib/collection/components/duet-slideout-lang/duet-slideout-lang.js +75 -75
  293. package/lib/collection/components/duet-slideout-link/duet-slideout-link.js +215 -215
  294. package/lib/collection/components/duet-slideout-panel/duet-slideout-panel.js +282 -281
  295. package/lib/collection/components/duet-slideout-panel-dropdown/duet-slideout-panel-dropdown.js +177 -176
  296. package/lib/collection/components/duet-spacer/duet-spacer.a11y.e2e.js +5 -5
  297. package/lib/collection/components/duet-spacer/duet-spacer.e2e.js +21 -21
  298. package/lib/collection/components/duet-spacer/duet-spacer.js +110 -110
  299. package/lib/collection/components/duet-spinner/duet-spinner.a11y.e2e.js +5 -5
  300. package/lib/collection/components/duet-spinner/duet-spinner.e2e.js +23 -23
  301. package/lib/collection/components/duet-spinner/duet-spinner.js +131 -131
  302. package/lib/collection/components/duet-step/duet-step.e2e.js +83 -83
  303. package/lib/collection/components/duet-step/duet-step.js +299 -291
  304. package/lib/collection/components/duet-stepper/duet-stepper.a11y.e2e.js +8 -8
  305. package/lib/collection/components/duet-stepper/duet-stepper.e2e.js +49 -49
  306. package/lib/collection/components/duet-stepper/duet-stepper.js +243 -243
  307. package/lib/collection/components/duet-submenu-bar/duet-submenu-bar.a11y.e2e.js +5 -5
  308. package/lib/collection/components/duet-submenu-bar/duet-submenu-bar.js +218 -217
  309. package/lib/collection/components/duet-submenu-bar-dropdown/duet-submenu-bar-dropdown.js +235 -234
  310. package/lib/collection/components/duet-submenu-bar-dropdown-link/duet-submenu-bar-dropdown-link.js +162 -162
  311. package/lib/collection/components/duet-submenu-bar-link/duet-submenu-bar-link.js +154 -154
  312. package/lib/collection/components/duet-tab/duet-tab.e2e.js +10 -10
  313. package/lib/collection/components/duet-tab/duet-tab.js +162 -161
  314. package/lib/collection/components/duet-tab-group/duet-tab-group.a11y.e2e.js +5 -5
  315. package/lib/collection/components/duet-tab-group/duet-tab-group.e2e.js +60 -60
  316. package/lib/collection/components/duet-tab-group/duet-tab-group.js +636 -633
  317. package/lib/collection/components/duet-table/duet-table.a11y.e2e.js +5 -5
  318. package/lib/collection/components/duet-table/duet-table.e2e.js +25 -25
  319. package/lib/collection/components/duet-table/duet-table.js +284 -281
  320. package/lib/collection/components/duet-textarea/duet-textarea.a11y.e2e.js +10 -10
  321. package/lib/collection/components/duet-textarea/duet-textarea.e2e.js +193 -193
  322. package/lib/collection/components/duet-textarea/duet-textarea.js +849 -845
  323. package/lib/collection/components/duet-toggle/duet-toggle.a11y.e2e.js +5 -5
  324. package/lib/collection/components/duet-toggle/duet-toggle.e2e.js +66 -66
  325. package/lib/collection/components/duet-toggle/duet-toggle.js +475 -464
  326. package/lib/collection/components/duet-toolbar/duet-toolbar.a11y.e2e.js +5 -5
  327. package/lib/collection/components/duet-toolbar/duet-toolbar.js +105 -105
  328. package/lib/collection/components/duet-toolbar-dropdown/duet-toolbar-dropdown.js +221 -220
  329. package/lib/collection/components/duet-toolbar-dropdown-link/duet-toolbar-dropdown-link.js +160 -160
  330. package/lib/collection/components/duet-toolbar-link/duet-toolbar-link.js +156 -156
  331. package/lib/collection/components/duet-tooltip/duet-tooltip-button.js +172 -164
  332. package/lib/collection/components/duet-tooltip/duet-tooltip-popup.js +258 -251
  333. package/lib/collection/components/duet-tooltip/duet-tooltip.a11y.e2e.js +14 -14
  334. package/lib/collection/components/duet-tooltip/duet-tooltip.e2e.js +76 -76
  335. package/lib/collection/components/duet-tooltip/duet-tooltip.js +537 -529
  336. package/lib/collection/components/duet-tray/duet-tray.a11y.e2e.js +5 -5
  337. package/lib/collection/components/duet-tray/duet-tray.e2e.js +67 -67
  338. package/lib/collection/components/duet-tray/duet-tray.js +318 -315
  339. package/lib/collection/components/duet-upload/duet-upload.e2e.js +40 -40
  340. package/lib/collection/components/duet-upload/duet-upload.js +2282 -2276
  341. package/lib/collection/components/duet-upload/errorcodes.utils.js +22 -22
  342. package/lib/collection/components/duet-upload/mock.helpers.js +85 -85
  343. package/lib/collection/components/duet-upload/upload-editable-item-error.js +4 -4
  344. package/lib/collection/components/duet-upload/upload-editable-item-success.js +15 -15
  345. package/lib/collection/components/duet-upload/upload-item-category.js +2 -2
  346. package/lib/collection/components/duet-upload/upload-item-header.js +4 -4
  347. package/lib/collection/components/duet-upload/upload-validators.js +96 -96
  348. package/lib/collection/components/duet-upload/upload-validators.spec.js +35 -35
  349. package/lib/collection/components/duet-upload/upload.helpers.js +8 -8
  350. package/lib/collection/components/duet-upload/xhr.helpers.js +26 -26
  351. package/lib/collection/components/duet-upload-aria-status/duet-upload-aria-status.js +194 -194
  352. package/lib/collection/components/duet-upload-item/duet-upload-item.js +306 -306
  353. package/lib/collection/components/duet-visually-hidden/duet-visually-hidden.a11y.e2e.js +5 -5
  354. package/lib/collection/components/duet-visually-hidden/duet-visually-hidden.e2e.js +6 -6
  355. package/lib/collection/components/duet-visually-hidden/duet-visually-hidden.js +20 -20
  356. package/lib/collection/global/duet-global.js +1 -27
  357. package/lib/collection/global/log-wrapper.js +29 -29
  358. package/lib/collection/utils/axe-core-utils.js +24 -24
  359. package/lib/collection/utils/create-id.js +2 -2
  360. package/lib/collection/utils/create-id.spec.js +6 -6
  361. package/lib/collection/utils/fixture-utils.js +25 -25
  362. package/lib/collection/utils/focus-utils.js +7 -7
  363. package/lib/collection/utils/group-by.js +9 -9
  364. package/lib/collection/utils/input-utils.js +25 -25
  365. package/lib/collection/utils/is-internet-explorer.js +2 -2
  366. package/lib/collection/utils/js-utils.js +38 -38
  367. package/lib/collection/utils/js-utils.spec.js +14 -14
  368. package/lib/collection/utils/keyboard-utils.js +43 -12
  369. package/lib/collection/utils/language-utils.js +73 -73
  370. package/lib/collection/utils/language-utils.spec.js +151 -151
  371. package/lib/collection/utils/math.utils.js +59 -59
  372. package/lib/collection/utils/math.utils.spec.js +130 -130
  373. package/lib/collection/utils/picture-utils.js +2 -2
  374. package/lib/collection/utils/string-utils.js +31 -31
  375. package/lib/collection/utils/string-utils.spec.js +32 -32
  376. package/lib/collection/utils/teleport.js +77 -77
  377. package/lib/collection/utils/template-utils.js +18 -18
  378. package/lib/collection/utils/template-utils.spec.js +33 -33
  379. package/lib/collection/utils/test-utils.js +31 -31
  380. package/lib/collection/utils/token-utils.js +96 -96
  381. package/lib/collection/utils/token-utils.spec.js +170 -170
  382. package/lib/collection/utils/watch-options.js +44 -44
  383. package/lib/dist-custom-elements/duet-action-button.d.ts +2 -2
  384. package/lib/dist-custom-elements/duet-action-button.js +1 -1
  385. package/lib/dist-custom-elements/duet-alert.d.ts +2 -2
  386. package/lib/dist-custom-elements/duet-alert.js +1 -1
  387. package/lib/dist-custom-elements/duet-badge.d.ts +2 -2
  388. package/lib/dist-custom-elements/duet-badge.js +1 -1
  389. package/lib/dist-custom-elements/duet-banner.d.ts +2 -2
  390. package/lib/dist-custom-elements/duet-banner.js +96 -96
  391. package/lib/dist-custom-elements/duet-breadcrumb.d.ts +2 -2
  392. package/lib/dist-custom-elements/duet-breadcrumb.js +82 -66
  393. package/lib/dist-custom-elements/duet-breadcrumbs.d.ts +2 -2
  394. package/lib/dist-custom-elements/duet-breadcrumbs.js +68 -68
  395. package/lib/dist-custom-elements/duet-button.d.ts +2 -2
  396. package/lib/dist-custom-elements/duet-button.js +1 -1
  397. package/lib/dist-custom-elements/duet-callout.d.ts +2 -2
  398. package/lib/dist-custom-elements/duet-callout.js +57 -57
  399. package/lib/dist-custom-elements/duet-caption.d.ts +2 -2
  400. package/lib/dist-custom-elements/duet-caption.js +1 -1
  401. package/lib/dist-custom-elements/duet-card.d.ts +2 -2
  402. package/lib/dist-custom-elements/duet-card.js +144 -138
  403. package/lib/dist-custom-elements/duet-checkbox.d.ts +2 -2
  404. package/lib/dist-custom-elements/duet-checkbox.js +1 -1
  405. package/lib/dist-custom-elements/duet-checkmark.d.ts +2 -2
  406. package/lib/dist-custom-elements/duet-checkmark.js +1 -1
  407. package/lib/dist-custom-elements/duet-chip.d.ts +2 -2
  408. package/lib/dist-custom-elements/duet-chip.js +226 -219
  409. package/lib/dist-custom-elements/duet-choice-group.d.ts +2 -2
  410. package/lib/dist-custom-elements/duet-choice-group.js +189 -189
  411. package/lib/dist-custom-elements/duet-choice.d.ts +2 -2
  412. package/lib/dist-custom-elements/duet-choice.js +360 -358
  413. package/lib/dist-custom-elements/duet-collapsible.d.ts +2 -2
  414. package/lib/dist-custom-elements/duet-collapsible.js +137 -131
  415. package/lib/dist-custom-elements/duet-combobox.d.ts +2 -2
  416. package/lib/dist-custom-elements/duet-combobox.js +406 -406
  417. package/lib/dist-custom-elements/duet-contact-card.d.ts +2 -2
  418. package/lib/dist-custom-elements/duet-contact-card.js +116 -116
  419. package/lib/dist-custom-elements/duet-cookie-consent.d.ts +2 -2
  420. package/lib/dist-custom-elements/duet-cookie-consent.js +89 -82
  421. package/lib/dist-custom-elements/duet-date-picker.d.ts +2 -2
  422. package/lib/dist-custom-elements/duet-date-picker.js +728 -728
  423. package/lib/dist-custom-elements/duet-divider.d.ts +2 -2
  424. package/lib/dist-custom-elements/duet-divider.js +1 -1
  425. package/lib/dist-custom-elements/duet-editable-table.d.ts +2 -2
  426. package/lib/dist-custom-elements/duet-editable-table.js +231 -231
  427. package/lib/dist-custom-elements/duet-empty-state.d.ts +2 -2
  428. package/lib/dist-custom-elements/duet-empty-state.js +1 -1
  429. package/lib/dist-custom-elements/duet-fieldset.d.ts +2 -2
  430. package/lib/dist-custom-elements/duet-fieldset.js +1 -1
  431. package/lib/dist-custom-elements/duet-file-chooser.d.ts +2 -2
  432. package/lib/dist-custom-elements/duet-file-chooser.js +70 -70
  433. package/lib/dist-custom-elements/duet-footer.d.ts +2 -2
  434. package/lib/dist-custom-elements/duet-footer.js +170 -167
  435. package/lib/dist-custom-elements/duet-grid-item.d.ts +2 -2
  436. package/lib/dist-custom-elements/duet-grid-item.js +1 -1
  437. package/lib/dist-custom-elements/duet-grid.d.ts +2 -2
  438. package/lib/dist-custom-elements/duet-grid.js +1 -1
  439. package/lib/dist-custom-elements/duet-header.d.ts +2 -2
  440. package/lib/dist-custom-elements/duet-header.js +640 -638
  441. package/lib/dist-custom-elements/duet-heading.d.ts +2 -2
  442. package/lib/dist-custom-elements/duet-heading.js +1 -1
  443. package/lib/dist-custom-elements/duet-hero.d.ts +2 -2
  444. package/lib/dist-custom-elements/duet-hero.js +270 -270
  445. package/lib/dist-custom-elements/duet-icon.d.ts +2 -2
  446. package/lib/dist-custom-elements/duet-icon.js +1 -1
  447. package/lib/dist-custom-elements/duet-input.d.ts +2 -2
  448. package/lib/dist-custom-elements/duet-input.js +1 -1
  449. package/lib/dist-custom-elements/duet-label.d.ts +2 -2
  450. package/lib/dist-custom-elements/duet-label.js +1 -1
  451. package/lib/dist-custom-elements/duet-layout.d.ts +2 -2
  452. package/lib/dist-custom-elements/duet-layout.js +73 -73
  453. package/lib/dist-custom-elements/duet-link.d.ts +2 -2
  454. package/lib/dist-custom-elements/duet-link.js +1 -1
  455. package/lib/dist-custom-elements/duet-list-item.d.ts +2 -2
  456. package/lib/dist-custom-elements/duet-list-item.js +1 -1
  457. package/lib/dist-custom-elements/duet-list.d.ts +2 -2
  458. package/lib/dist-custom-elements/duet-list.js +1 -1
  459. package/lib/dist-custom-elements/duet-logo.d.ts +2 -2
  460. package/lib/dist-custom-elements/duet-logo.js +1 -1
  461. package/lib/dist-custom-elements/duet-menu-bar-button.d.ts +2 -2
  462. package/lib/dist-custom-elements/duet-menu-bar-button.js +106 -106
  463. package/lib/dist-custom-elements/duet-menu-bar-dropdown-link.d.ts +2 -2
  464. package/lib/dist-custom-elements/duet-menu-bar-dropdown-link.js +70 -70
  465. package/lib/dist-custom-elements/duet-menu-bar-dropdown.d.ts +2 -2
  466. package/lib/dist-custom-elements/duet-menu-bar-dropdown.js +121 -121
  467. package/lib/dist-custom-elements/duet-menu-bar-link.d.ts +2 -2
  468. package/lib/dist-custom-elements/duet-menu-bar-link.js +85 -85
  469. package/lib/dist-custom-elements/duet-menu-bar.d.ts +2 -2
  470. package/lib/dist-custom-elements/duet-menu-bar.js +145 -145
  471. package/lib/dist-custom-elements/duet-modal.d.ts +2 -2
  472. package/lib/dist-custom-elements/duet-modal.js +263 -263
  473. package/lib/dist-custom-elements/duet-multiselect.d.ts +2 -2
  474. package/lib/dist-custom-elements/duet-multiselect.js +300 -300
  475. package/lib/dist-custom-elements/duet-nav.d.ts +2 -2
  476. package/lib/dist-custom-elements/duet-nav.js +36 -36
  477. package/lib/dist-custom-elements/duet-notification-drawer.d.ts +2 -2
  478. package/lib/dist-custom-elements/duet-notification-drawer.js +145 -142
  479. package/lib/dist-custom-elements/duet-notification.d.ts +2 -2
  480. package/lib/dist-custom-elements/duet-notification.js +79 -76
  481. package/lib/dist-custom-elements/duet-number-input.d.ts +2 -2
  482. package/lib/dist-custom-elements/duet-number-input.js +451 -449
  483. package/lib/dist-custom-elements/duet-page-heading.d.ts +2 -2
  484. package/lib/dist-custom-elements/duet-page-heading.js +50 -50
  485. package/lib/dist-custom-elements/duet-pagination.d.ts +2 -2
  486. package/lib/dist-custom-elements/duet-pagination.js +450 -450
  487. package/lib/dist-custom-elements/duet-paragraph.d.ts +2 -2
  488. package/lib/dist-custom-elements/duet-paragraph.js +1 -1
  489. package/lib/dist-custom-elements/duet-popup-menu-item.d.ts +2 -2
  490. package/lib/dist-custom-elements/duet-popup-menu-item.js +95 -95
  491. package/lib/dist-custom-elements/duet-popup-menu.d.ts +2 -2
  492. package/lib/dist-custom-elements/duet-popup-menu.js +177 -177
  493. package/lib/dist-custom-elements/duet-progress.d.ts +2 -2
  494. package/lib/dist-custom-elements/duet-progress.js +1 -1
  495. package/lib/dist-custom-elements/duet-promo-card.d.ts +2 -2
  496. package/lib/dist-custom-elements/duet-promo-card.js +74 -74
  497. package/lib/dist-custom-elements/duet-radio-group.d.ts +2 -2
  498. package/lib/dist-custom-elements/duet-radio-group.js +183 -183
  499. package/lib/dist-custom-elements/duet-radio.d.ts +2 -2
  500. package/lib/dist-custom-elements/duet-radio.js +130 -130
  501. package/lib/dist-custom-elements/duet-range-slider.d.ts +2 -2
  502. package/lib/dist-custom-elements/duet-range-slider.js +153 -146
  503. package/lib/dist-custom-elements/duet-range-stepper.d.ts +2 -2
  504. package/lib/dist-custom-elements/duet-range-stepper.js +207 -207
  505. package/lib/dist-custom-elements/duet-scrollable.d.ts +2 -2
  506. package/lib/dist-custom-elements/duet-scrollable.js +1 -1
  507. package/lib/dist-custom-elements/duet-section-layout.d.ts +2 -2
  508. package/lib/dist-custom-elements/duet-section-layout.js +38 -38
  509. package/lib/dist-custom-elements/duet-select.d.ts +2 -2
  510. package/lib/dist-custom-elements/duet-select.js +1 -1
  511. package/lib/dist-custom-elements/duet-shaped-image.d.ts +2 -2
  512. package/lib/dist-custom-elements/duet-shaped-image.js +48 -48
  513. package/lib/dist-custom-elements/duet-show-more.d.ts +2 -2
  514. package/lib/dist-custom-elements/duet-show-more.js +152 -152
  515. package/lib/dist-custom-elements/duet-slideout-lang.d.ts +2 -2
  516. package/lib/dist-custom-elements/duet-slideout-lang.js +58 -58
  517. package/lib/dist-custom-elements/duet-slideout-link.d.ts +2 -2
  518. package/lib/dist-custom-elements/duet-slideout-link.js +63 -63
  519. package/lib/dist-custom-elements/duet-slideout-panel-dropdown.d.ts +2 -2
  520. package/lib/dist-custom-elements/duet-slideout-panel-dropdown.js +76 -76
  521. package/lib/dist-custom-elements/duet-slideout-panel.d.ts +2 -2
  522. package/lib/dist-custom-elements/duet-slideout-panel.js +149 -149
  523. package/lib/dist-custom-elements/duet-slideout.d.ts +2 -2
  524. package/lib/dist-custom-elements/duet-slideout.js +227 -227
  525. package/lib/dist-custom-elements/duet-spacer.d.ts +2 -2
  526. package/lib/dist-custom-elements/duet-spacer.js +1 -1
  527. package/lib/dist-custom-elements/duet-spinner.d.ts +2 -2
  528. package/lib/dist-custom-elements/duet-spinner.js +1 -1
  529. package/lib/dist-custom-elements/duet-step.d.ts +2 -2
  530. package/lib/dist-custom-elements/duet-step.js +123 -119
  531. package/lib/dist-custom-elements/duet-stepper.d.ts +2 -2
  532. package/lib/dist-custom-elements/duet-stepper.js +129 -129
  533. package/lib/dist-custom-elements/duet-submenu-bar-dropdown-link.d.ts +2 -2
  534. package/lib/dist-custom-elements/duet-submenu-bar-dropdown-link.js +64 -64
  535. package/lib/dist-custom-elements/duet-submenu-bar-dropdown.d.ts +2 -2
  536. package/lib/dist-custom-elements/duet-submenu-bar-dropdown.js +132 -132
  537. package/lib/dist-custom-elements/duet-submenu-bar-link.d.ts +2 -2
  538. package/lib/dist-custom-elements/duet-submenu-bar-link.js +86 -86
  539. package/lib/dist-custom-elements/duet-submenu-bar.d.ts +2 -2
  540. package/lib/dist-custom-elements/duet-submenu-bar.js +139 -139
  541. package/lib/dist-custom-elements/duet-tab-group.d.ts +2 -2
  542. package/lib/dist-custom-elements/duet-tab-group.js +312 -310
  543. package/lib/dist-custom-elements/duet-tab.d.ts +2 -2
  544. package/lib/dist-custom-elements/duet-tab.js +50 -52
  545. package/lib/dist-custom-elements/duet-table.d.ts +2 -2
  546. package/lib/dist-custom-elements/duet-table.js +1 -1
  547. package/lib/dist-custom-elements/duet-textarea.d.ts +2 -2
  548. package/lib/dist-custom-elements/duet-textarea.js +262 -262
  549. package/lib/dist-custom-elements/duet-toggle.d.ts +2 -2
  550. package/lib/dist-custom-elements/duet-toggle.js +120 -113
  551. package/lib/dist-custom-elements/duet-toolbar-dropdown-link.d.ts +2 -2
  552. package/lib/dist-custom-elements/duet-toolbar-dropdown-link.js +63 -63
  553. package/lib/dist-custom-elements/duet-toolbar-dropdown.d.ts +2 -2
  554. package/lib/dist-custom-elements/duet-toolbar-dropdown.js +88 -88
  555. package/lib/dist-custom-elements/duet-toolbar-link.d.ts +2 -2
  556. package/lib/dist-custom-elements/duet-toolbar-link.js +58 -58
  557. package/lib/dist-custom-elements/duet-toolbar.d.ts +2 -2
  558. package/lib/dist-custom-elements/duet-toolbar.js +52 -52
  559. package/lib/dist-custom-elements/duet-tooltip-button.d.ts +2 -2
  560. package/lib/dist-custom-elements/duet-tooltip-button.js +1 -1
  561. package/lib/dist-custom-elements/duet-tooltip-popup.d.ts +2 -2
  562. package/lib/dist-custom-elements/duet-tooltip-popup.js +1 -1
  563. package/lib/dist-custom-elements/duet-tooltip.d.ts +2 -2
  564. package/lib/dist-custom-elements/duet-tooltip.js +1 -1
  565. package/lib/dist-custom-elements/duet-tray.d.ts +2 -2
  566. package/lib/dist-custom-elements/duet-tray.js +122 -119
  567. package/lib/dist-custom-elements/duet-upload-aria-status.d.ts +2 -2
  568. package/lib/dist-custom-elements/duet-upload-aria-status.js +1 -1
  569. package/lib/dist-custom-elements/duet-upload-item.d.ts +2 -2
  570. package/lib/dist-custom-elements/duet-upload-item.js +1 -1
  571. package/lib/dist-custom-elements/duet-upload.d.ts +2 -2
  572. package/lib/dist-custom-elements/duet-upload.js +1163 -1163
  573. package/lib/dist-custom-elements/duet-visually-hidden.d.ts +2 -2
  574. package/lib/dist-custom-elements/duet-visually-hidden.js +1 -1
  575. package/lib/dist-custom-elements/index.js +15 -41
  576. package/lib/dist-custom-elements/{p-7247d0b2.js → p-04a295c6.js} +65 -43
  577. package/lib/dist-custom-elements/p-064f1578.js +273 -0
  578. package/lib/dist-custom-elements/{p-e4355989.js → p-0b123cad.js} +95 -88
  579. package/lib/dist-custom-elements/p-0e052642.js +55 -0
  580. package/lib/dist-custom-elements/p-0f8e290f.js +226 -0
  581. package/lib/dist-custom-elements/{p-d0987122.js → p-10a15ea1.js} +48 -48
  582. package/lib/{esm/slot-query-7877f18f.js → dist-custom-elements/p-11230037.js} +1 -1
  583. package/lib/dist-custom-elements/{p-2b1a35cd.js → p-1224c98d.js} +278 -278
  584. package/lib/dist-custom-elements/p-1b2fea2b.js +59 -0
  585. package/lib/dist-custom-elements/p-1e4ca38f.js +126 -0
  586. package/lib/dist-custom-elements/{p-bcfb9e03.js → p-24ae0332.js} +50 -50
  587. package/lib/dist-custom-elements/p-2613ae6a.js +265 -0
  588. package/lib/dist-custom-elements/{p-4883df66.js → p-2e36d5bf.js} +74 -74
  589. package/lib/dist-custom-elements/p-435c14fe.js +60 -0
  590. package/lib/dist-custom-elements/p-4391eb0d.js +110 -0
  591. package/lib/dist-custom-elements/p-43b89e38.js +9 -0
  592. package/lib/dist-custom-elements/p-47247d7e.js +465 -0
  593. package/lib/dist-custom-elements/{p-ba870310.js → p-490933fd.js} +47 -47
  594. package/lib/dist-custom-elements/{p-274d11e3.js → p-4ab776f4.js} +6 -6
  595. package/lib/dist-custom-elements/p-5788a98f.js +123 -0
  596. package/lib/dist-custom-elements/p-57a1cba9.js +117 -0
  597. package/lib/dist-custom-elements/p-5e1cd480.js +79 -0
  598. package/lib/dist-custom-elements/p-5e59e970.js +11 -0
  599. package/lib/dist-custom-elements/{p-9dd26401.js → p-618174a5.js} +128 -128
  600. package/lib/dist-custom-elements/{p-6c2e13f0.js → p-6222a43f.js} +56 -56
  601. package/lib/dist-custom-elements/{p-52014bb2.js → p-63ec7678.js} +37 -37
  602. package/lib/dist-custom-elements/{p-180c0d2d.js → p-65d472d7.js} +174 -174
  603. package/lib/dist-custom-elements/p-68bd36c7.js +38 -0
  604. package/lib/dist-custom-elements/p-76e8ab22.js +98 -0
  605. package/lib/dist-custom-elements/p-7d8a2628.js +57 -0
  606. package/lib/dist-custom-elements/p-8b89622f.js +177 -0
  607. package/lib/dist-custom-elements/p-8e357cfb.js +137 -0
  608. package/lib/dist-custom-elements/p-8f253845.js +51 -0
  609. package/lib/dist-custom-elements/{p-d49389d2.js → p-916e66c9.js} +171 -171
  610. package/lib/dist-custom-elements/p-994556c0.js +151 -0
  611. package/lib/dist-custom-elements/{p-3d8d557b.js → p-9e371678.js} +27 -27
  612. package/lib/dist-custom-elements/p-a58bd561.js +13 -0
  613. package/lib/dist-custom-elements/{p-c0af301d.js → p-adef0aaa.js} +64 -64
  614. package/lib/dist-custom-elements/p-b2e550a3.js +97 -0
  615. package/lib/dist-custom-elements/p-ba28f5ce.js +205 -0
  616. package/lib/dist-custom-elements/{p-21b815ae.js → p-beb5db77.js} +42 -42
  617. package/lib/dist-custom-elements/p-d0e52a83.js +76 -0
  618. package/lib/dist-custom-elements/p-df7874f9.js +53 -0
  619. package/lib/dist-custom-elements/{p-3ccd454b.js → p-e034dfea.js} +43 -43
  620. package/lib/dist-custom-elements/p-e929268c.js +62 -0
  621. package/lib/dist-custom-elements/p-eef66341.js +18 -0
  622. package/lib/dist-custom-elements/p-fc1fa737.js +206 -0
  623. package/lib/dist-custom-elements/p-ff591309.js +93 -0
  624. package/lib/duet/duet.esm.js +1 -1
  625. package/lib/duet/duet.js +15 -15
  626. package/lib/duet/{p-bfeeee67.system.entry.js → p-00da8ac7.system.entry.js} +2 -2
  627. package/lib/duet/{p-0c702d36.entry.js → p-023ee57b.entry.js} +1 -1
  628. package/lib/duet/{p-39078c27.system.entry.js → p-02f49953.system.entry.js} +2 -2
  629. package/lib/duet/{p-0558a17e.system.entry.js → p-060a790b.system.entry.js} +1 -1
  630. package/lib/duet/{p-80013513.system.entry.js → p-07ce89ff.system.entry.js} +1 -1
  631. package/lib/duet/{p-301ddafe.entry.js → p-07f5193f.entry.js} +1 -1
  632. package/lib/duet/{p-c801ebee.entry.js → p-094eedb8.entry.js} +1 -1
  633. package/lib/duet/{p-ac367891.entry.js → p-0981fdb2.entry.js} +1 -1
  634. package/lib/duet/{p-051488a0.system.entry.js → p-0a5966c8.system.entry.js} +1 -1
  635. package/lib/duet/p-0b16d4ca.system.entry.js +4 -0
  636. package/lib/duet/{p-445523a8.entry.js → p-0f162710.entry.js} +1 -1
  637. package/lib/duet/{p-6da4db52.system.entry.js → p-0f3f2906.system.entry.js} +1 -1
  638. package/lib/duet/{p-c4e79927.entry.js → p-11653c1e.entry.js} +1 -1
  639. package/lib/duet/p-1276c914.js +5 -0
  640. package/lib/duet/{p-59b9c68b.entry.js → p-16203527.entry.js} +1 -1
  641. package/lib/duet/{p-57afa4b8.system.entry.js → p-1753cb05.system.entry.js} +2 -2
  642. package/lib/duet/{p-032a613f.system.entry.js → p-176fa0e5.system.entry.js} +1 -1
  643. package/lib/duet/{p-e4aa049f.system.entry.js → p-1a44a9e5.system.entry.js} +1 -1
  644. package/lib/duet/p-1bd21f27.entry.js +4 -0
  645. package/lib/duet/{p-e90b5865.system.entry.js → p-1d772039.system.entry.js} +1 -1
  646. package/lib/duet/{p-0606cea3.entry.js → p-218eba4d.entry.js} +1 -1
  647. package/lib/duet/{p-8972381a.system.js → p-224f6c46.system.js} +1 -1
  648. package/lib/duet/{p-8eff5e91.system.entry.js → p-23eaa3b4.system.entry.js} +2 -2
  649. package/lib/duet/{p-a91c8a42.system.entry.js → p-24423276.system.entry.js} +1 -1
  650. package/lib/duet/{p-0d0101d9.system.entry.js → p-245dedef.system.entry.js} +1 -1
  651. package/lib/duet/{p-58a08a7b.system.entry.js → p-24f96782.system.entry.js} +1 -1
  652. package/lib/duet/p-259a297a.system.js +4 -0
  653. package/lib/duet/{p-1dadf501.entry.js → p-25c78304.entry.js} +1 -1
  654. package/lib/duet/p-26332d59.system.entry.js +4 -0
  655. package/lib/duet/{p-3639371a.system.entry.js → p-26de4395.system.entry.js} +1 -1
  656. package/lib/duet/{p-cef36d14.system.entry.js → p-27560f1b.system.entry.js} +1 -1
  657. package/lib/duet/{p-716329a7.system.entry.js → p-27c6aebd.system.entry.js} +1 -1
  658. package/lib/duet/{p-1a877bd1.system.entry.js → p-27d40494.system.entry.js} +1 -1
  659. package/lib/duet/p-2877f5d2.system.entry.js +4 -0
  660. package/lib/duet/p-2bb2b022.js +4 -0
  661. package/lib/duet/{p-95df823b.entry.js → p-2c67f7a8.entry.js} +1 -1
  662. package/lib/duet/p-2ddd31db.entry.js +4 -0
  663. package/lib/duet/{p-4883df66.js → p-2e36d5bf.js} +1 -1
  664. package/lib/duet/{p-ed961bc6.system.entry.js → p-2efce50b.system.entry.js} +1 -1
  665. package/lib/duet/{p-05e3a2cc.entry.js → p-3009021d.entry.js} +1 -1
  666. package/lib/duet/{p-4f770f51.system.entry.js → p-309546c3.system.entry.js} +1 -1
  667. package/lib/duet/p-3126ade6.entry.js +4 -0
  668. package/lib/duet/{p-089043d5.entry.js → p-31c8c180.entry.js} +1 -1
  669. package/lib/duet/{p-da9fe13c.system.entry.js → p-32aed830.system.entry.js} +1 -1
  670. package/lib/duet/{p-def3df7d.entry.js → p-3640cb93.entry.js} +1 -1
  671. package/lib/duet/{p-6f3f2e66.entry.js → p-3772cde9.entry.js} +1 -1
  672. package/lib/duet/p-37811477.system.entry.js +4 -0
  673. package/lib/duet/{p-e7a22d84.system.entry.js → p-37d0ea90.system.entry.js} +1 -1
  674. package/lib/duet/{p-50f4319b.system.entry.js → p-380ee907.system.entry.js} +1 -1
  675. package/lib/duet/{p-8aa7771f.entry.js → p-3aa3de10.entry.js} +1 -1
  676. package/lib/duet/{p-e6168195.entry.js → p-3efd29e1.entry.js} +1 -1
  677. package/lib/duet/{p-3fd4c411.entry.js → p-4196e4ba.entry.js} +1 -1
  678. package/lib/duet/p-43249fcf.system.entry.js +4 -0
  679. package/lib/duet/p-461d8a0b.entry.js +4 -0
  680. package/lib/duet/{p-b0ab2ead.system.entry.js → p-461fd4d8.system.entry.js} +1 -1
  681. package/lib/duet/{p-566668e1.entry.js → p-46cacf4b.entry.js} +1 -1
  682. package/lib/duet/p-470f5db7.entry.js +4 -0
  683. package/lib/duet/{p-f75a1805.system.entry.js → p-482cb8b5.system.entry.js} +1 -1
  684. package/lib/duet/{p-d4d7d607.system.entry.js → p-4d081cf5.system.entry.js} +1 -1
  685. package/lib/duet/{p-d02b92fa.entry.js → p-4da0332f.entry.js} +1 -1
  686. package/lib/duet/p-4dc4f2de.system.entry.js +4 -0
  687. package/lib/duet/{p-8bf363f4.system.entry.js → p-50108ac2.system.entry.js} +1 -1
  688. package/lib/duet/{p-9e2a2cf7.entry.js → p-507f463e.entry.js} +1 -1
  689. package/lib/duet/{p-79faf440.system.entry.js → p-52471579.system.entry.js} +1 -1
  690. package/lib/duet/p-530dd0b2.entry.js +4 -0
  691. package/lib/duet/p-538a7c32.system.entry.js +4 -0
  692. package/lib/duet/{p-3b0969dc.entry.js → p-548b740e.entry.js} +1 -1
  693. package/lib/duet/{p-a8878fd3.entry.js → p-55fbe6bc.entry.js} +1 -1
  694. package/lib/duet/p-5795b0d9.system.js +4 -0
  695. package/lib/duet/p-57f6f292.system.entry.js +4 -0
  696. package/lib/duet/p-582f1599.system.entry.js +4 -0
  697. package/lib/duet/{p-07401f31.entry.js → p-5aaf2889.entry.js} +1 -1
  698. package/lib/duet/{p-80d1a5d3.entry.js → p-5bab6421.entry.js} +1 -1
  699. package/lib/duet/{p-56bdad28.system.entry.js → p-5bb41296.system.entry.js} +1 -1
  700. package/lib/duet/{p-afd00506.entry.js → p-5be3bb6e.entry.js} +1 -1
  701. package/lib/duet/{p-d5a9cfac.entry.js → p-5e777157.entry.js} +1 -1
  702. package/lib/duet/p-5ef65fd9.entry.js +4 -0
  703. package/lib/duet/p-609aaedd.entry.js +4 -0
  704. package/lib/duet/{p-faa6ea94.system.entry.js → p-6399c03a.system.entry.js} +1 -1
  705. package/lib/duet/{p-b8db6e02.system.entry.js → p-63bdc921.system.entry.js} +1 -1
  706. package/lib/duet/p-644b687c.system.entry.js +4 -0
  707. package/lib/duet/p-68625c53.system.entry.js +4 -0
  708. package/lib/duet/{p-5c0de81a.system.entry.js → p-693ebab3.system.entry.js} +1 -1
  709. package/lib/duet/p-6a4fa614.entry.js +4 -0
  710. package/lib/duet/{p-30bd8807.entry.js → p-6b4c9fe2.entry.js} +1 -1
  711. package/lib/duet/p-6d839458.js +4 -0
  712. package/lib/duet/{p-2b70d58a.system.entry.js → p-7206856c.system.entry.js} +1 -1
  713. package/lib/duet/p-737f4f78.entry.js +4 -0
  714. package/lib/duet/p-75655f00.entry.js +4 -0
  715. package/lib/duet/{p-d02e3fe0.system.entry.js → p-77216458.system.entry.js} +1 -1
  716. package/lib/duet/{p-7a46b4ef.system.entry.js → p-773d5541.system.entry.js} +1 -1
  717. package/lib/duet/p-785b629e.entry.js +4 -0
  718. package/lib/duet/{p-98d01f1c.system.entry.js → p-78e18f90.system.entry.js} +1 -1
  719. package/lib/duet/{p-ff7a57a9.entry.js → p-7c3de686.entry.js} +1 -1
  720. package/lib/duet/{p-13915ce0.entry.js → p-7f2e3a82.entry.js} +1 -1
  721. package/lib/duet/{p-ed011021.system.entry.js → p-82b6d775.system.entry.js} +1 -1
  722. package/lib/duet/p-868deb49.entry.js +4 -0
  723. package/lib/duet/p-8693a1f3.entry.js +4 -0
  724. package/lib/duet/{p-c23bf76f.system.entry.js → p-87421fc1.system.entry.js} +1 -1
  725. package/lib/duet/p-89f7e363.system.entry.js +4 -0
  726. package/lib/duet/p-8bb9591d.system.js +4 -0
  727. package/lib/duet/{p-ded28a6e.system.entry.js → p-917d8b40.system.entry.js} +1 -1
  728. package/lib/duet/{p-ed8f7cac.entry.js → p-92d45100.entry.js} +1 -1
  729. package/lib/duet/p-93fd3aa5.system.entry.js +4 -0
  730. package/lib/duet/{p-6da7b933.entry.js → p-95f33440.entry.js} +1 -1
  731. package/lib/duet/{p-a0ecfa13.system.entry.js → p-9865ef30.system.entry.js} +1 -1
  732. package/lib/duet/p-9b877798.system.entry.js +4 -0
  733. package/lib/duet/{p-9cba7f04.system.entry.js → p-9ce2bf89.system.entry.js} +1 -1
  734. package/lib/duet/{p-fd1fb3f9.system.entry.js → p-9d6c89df.system.entry.js} +1 -1
  735. package/lib/duet/{p-77b43a95.entry.js → p-9f19cdc2.entry.js} +1 -1
  736. package/lib/duet/p-9fc19072.entry.js +4 -0
  737. package/lib/duet/{p-b46fa994.system.entry.js → p-a2a3b572.system.entry.js} +2 -2
  738. package/lib/duet/{p-ee796d5e.system.entry.js → p-a57b06db.system.entry.js} +1 -1
  739. package/lib/duet/p-a5f0d126.entry.js +4 -0
  740. package/lib/duet/{p-96f66e14.system.entry.js → p-a69a6b39.system.entry.js} +1 -1
  741. package/lib/duet/p-a931d71d.entry.js +4 -0
  742. package/lib/duet/{p-6205bcb4.entry.js → p-ab4e6587.entry.js} +1 -1
  743. package/lib/duet/{p-8ba72fa0.system.entry.js → p-abe0caff.system.entry.js} +1 -1
  744. package/lib/duet/{p-e3ffb537.system.entry.js → p-ac0a0c5f.system.entry.js} +1 -1
  745. package/lib/duet/{p-ccef6554.system.entry.js → p-b294d764.system.entry.js} +1 -1
  746. package/lib/duet/{p-c08928e1.system.entry.js → p-b32624a6.system.entry.js} +1 -1
  747. package/lib/duet/{p-e9be64de.system.entry.js → p-ba95cf16.system.entry.js} +1 -1
  748. package/lib/duet/{p-4630d3cb.entry.js → p-ba993fed.entry.js} +1 -1
  749. package/lib/duet/p-bb05780d.entry.js +4 -0
  750. package/lib/duet/{p-37af6296.system.entry.js → p-bca48b8e.system.entry.js} +1 -1
  751. package/lib/duet/p-bcee8104.entry.js +4 -0
  752. package/lib/duet/{p-c79a0641.entry.js → p-bd2b785a.entry.js} +1 -1
  753. package/lib/duet/p-bec206f3.entry.js +4 -0
  754. package/lib/duet/{p-501f62eb.system.entry.js → p-befd7146.system.entry.js} +1 -1
  755. package/lib/duet/{p-4aa91f55.entry.js → p-c13fcc8d.entry.js} +1 -1
  756. package/lib/duet/{p-0f1ec9c0.entry.js → p-c172f523.entry.js} +1 -1
  757. package/lib/duet/{p-e1d3c21e.entry.js → p-c17932bc.entry.js} +1 -1
  758. package/lib/duet/p-c23ab199.entry.js +4 -0
  759. package/lib/duet/{p-c5725fee.system.entry.js → p-c6296393.system.entry.js} +1 -1
  760. package/lib/duet/{p-35990684.entry.js → p-c71634ee.entry.js} +1 -1
  761. package/lib/duet/{p-33765ffd.entry.js → p-ca5dfafc.entry.js} +1 -1
  762. package/lib/duet/{p-68f3526e.entry.js → p-cab7ff29.entry.js} +1 -1
  763. package/lib/duet/{p-efdbddb5.system.js → p-cbfdaac4.system.js} +1 -1
  764. package/lib/duet/{p-113d90cb.system.entry.js → p-d0270ec7.system.entry.js} +1 -1
  765. package/lib/duet/p-d1ef0249.system.entry.js +4 -0
  766. package/lib/duet/{p-bdc59646.entry.js → p-d23f7bd1.entry.js} +1 -1
  767. package/lib/duet/p-d328922e.entry.js +4 -0
  768. package/lib/duet/p-d5271b57.entry.js +4 -0
  769. package/lib/duet/{p-1b3fde48.entry.js → p-d5c70827.entry.js} +1 -1
  770. package/lib/duet/{p-89b82e5a.entry.js → p-d832be12.entry.js} +1 -1
  771. package/lib/duet/{p-7671b7b7.system.js → p-da20db91.system.js} +1 -1
  772. package/lib/duet/p-db4ca364.js +4 -0
  773. package/lib/duet/p-db7ec3f2.system.entry.js +4 -0
  774. package/lib/duet/{p-604175d2.entry.js → p-dba55421.entry.js} +1 -1
  775. package/lib/duet/{p-a7e7c277.system.entry.js → p-de9c3476.system.entry.js} +1 -1
  776. package/lib/duet/p-df073faa.entry.js +4 -0
  777. package/lib/duet/p-df5f7376.entry.js +4 -0
  778. package/lib/duet/{p-dc63462c.entry.js → p-e3ba4d89.entry.js} +1 -1
  779. package/lib/duet/{p-64b323bf.entry.js → p-ef4a09e9.entry.js} +1 -1
  780. package/lib/duet/p-ef66a3c3.system.entry.js +4 -0
  781. package/lib/duet/p-f18c2892.system.js +5 -0
  782. package/lib/duet/{p-8855bd51.entry.js → p-f19b59f8.entry.js} +1 -1
  783. package/lib/duet/p-f1f5dfa4.system.entry.js +4 -0
  784. package/lib/duet/{p-fab7c1ed.entry.js → p-f20d29b8.entry.js} +1 -1
  785. package/lib/duet/{p-c3289020.system.entry.js → p-f2b556d7.system.entry.js} +1 -1
  786. package/lib/duet/p-f3efe8c2.system.entry.js +4 -0
  787. package/lib/duet/p-fabb616b.js +4 -0
  788. package/lib/duet/{p-1e9f1c45.entry.js → p-fb5877c4.entry.js} +1 -1
  789. package/lib/duet/p-fc366b12.system.entry.js +4 -0
  790. package/lib/duet/{p-54fbdedf.entry.js → p-fc788a9a.entry.js} +1 -1
  791. package/lib/duet/{p-bf3331ed.entry.js → p-fcfe83b1.entry.js} +1 -1
  792. package/lib/duet/{p-6ae7579a.system.entry.js → p-ffc50558.system.entry.js} +1 -1
  793. package/lib/esm/app-globals-45aa6d20.js +26 -0
  794. package/lib/esm/{common-strings-c0ac5a0b.js → common-strings-59db6973.js} +6 -6
  795. package/lib/esm/create-id-149a1b6d.js +11 -0
  796. package/lib/esm/duet-action-button.entry.js +134 -134
  797. package/lib/esm/duet-alert.entry.js +109 -106
  798. package/lib/esm/duet-badge.entry.js +29 -29
  799. package/lib/esm/duet-banner.entry.js +52 -52
  800. package/lib/esm/duet-breadcrumb.entry.js +50 -41
  801. package/lib/esm/duet-breadcrumbs.entry.js +51 -51
  802. package/lib/esm/duet-button_2.entry.js +229 -229
  803. package/lib/esm/duet-callout.entry.js +28 -28
  804. package/lib/esm/duet-caption_4.entry.js +197 -187
  805. package/lib/esm/duet-card.entry.js +100 -94
  806. package/lib/esm/duet-checkbox.entry.js +85 -85
  807. package/lib/esm/duet-checkmark.entry.js +23 -23
  808. package/lib/esm/duet-chip.entry.js +189 -182
  809. package/lib/esm/duet-choice_2.entry.js +395 -393
  810. package/lib/esm/duet-collapsible.entry.js +105 -99
  811. package/lib/esm/duet-combobox.entry.js +363 -363
  812. package/lib/esm/duet-contact-card.entry.js +49 -49
  813. package/lib/esm/duet-cookie-consent.entry.js +42 -35
  814. package/lib/esm/duet-date-picker.entry.js +610 -610
  815. package/lib/esm/duet-divider_2.entry.js +53 -53
  816. package/lib/esm/duet-editable-table_3.entry.js +1248 -1248
  817. package/lib/esm/duet-empty-state.entry.js +26 -26
  818. package/lib/esm/duet-fieldset.entry.js +50 -50
  819. package/lib/esm/duet-file-chooser.entry.js +44 -44
  820. package/lib/esm/duet-footer.entry.js +121 -118
  821. package/lib/esm/duet-grid_2.entry.js +185 -185
  822. package/lib/esm/duet-header_2.entry.js +613 -611
  823. package/lib/esm/duet-hero.entry.js +172 -172
  824. package/lib/esm/duet-icon.entry.js +141 -141
  825. package/lib/esm/duet-input_2.entry.js +347 -347
  826. package/lib/esm/duet-layout.entry.js +51 -51
  827. package/lib/esm/duet-list_2.entry.js +99 -99
  828. package/lib/esm/duet-menu-bar-button.entry.js +70 -70
  829. package/lib/esm/duet-menu-bar-dropdown-link.entry.js +45 -45
  830. package/lib/esm/duet-menu-bar-dropdown.entry.js +94 -94
  831. package/lib/esm/duet-menu-bar-link.entry.js +58 -58
  832. package/lib/esm/duet-menu-bar.entry.js +116 -116
  833. package/lib/esm/duet-modal.entry.js +189 -189
  834. package/lib/esm/duet-multiselect.entry.js +207 -207
  835. package/lib/esm/duet-nav.entry.js +20 -20
  836. package/lib/esm/duet-notification_2.entry.js +145 -140
  837. package/lib/esm/duet-number-input.entry.js +340 -338
  838. package/lib/esm/duet-page-heading.entry.js +26 -26
  839. package/lib/esm/duet-pagination_2.entry.js +512 -512
  840. package/lib/esm/duet-popup-menu-item.entry.js +62 -62
  841. package/lib/esm/duet-popup-menu.entry.js +148 -148
  842. package/lib/esm/duet-progress.entry.js +54 -54
  843. package/lib/esm/duet-promo-card.entry.js +40 -40
  844. package/lib/esm/duet-radio_2.entry.js +197 -197
  845. package/lib/esm/duet-range-slider.entry.js +112 -105
  846. package/lib/esm/duet-scrollable_3.entry.js +387 -387
  847. package/lib/esm/duet-section-layout.entry.js +21 -21
  848. package/lib/esm/duet-select.entry.js +156 -156
  849. package/lib/esm/duet-shaped-image.entry.js +28 -28
  850. package/lib/esm/duet-show-more.entry.js +99 -99
  851. package/lib/esm/duet-slideout-lang.entry.js +36 -36
  852. package/lib/esm/duet-slideout-link.entry.js +33 -33
  853. package/lib/esm/duet-slideout-panel-dropdown.entry.js +50 -50
  854. package/lib/esm/duet-slideout-panel.entry.js +120 -120
  855. package/lib/esm/duet-slideout.entry.js +196 -196
  856. package/lib/esm/duet-step_2.entry.js +189 -185
  857. package/lib/esm/duet-submenu-bar-dropdown-link.entry.js +37 -37
  858. package/lib/esm/duet-submenu-bar-dropdown.entry.js +104 -104
  859. package/lib/esm/duet-submenu-bar-link.entry.js +60 -60
  860. package/lib/esm/duet-submenu-bar.entry.js +110 -110
  861. package/lib/esm/duet-textarea.entry.js +160 -160
  862. package/lib/esm/duet-toggle.entry.js +79 -72
  863. package/lib/esm/duet-toolbar-dropdown-link.entry.js +36 -36
  864. package/lib/esm/duet-toolbar-dropdown.entry.js +60 -60
  865. package/lib/esm/duet-toolbar-link.entry.js +31 -31
  866. package/lib/esm/duet-toolbar.entry.js +34 -34
  867. package/lib/esm/duet-tooltip-button_2.entry.js +93 -80
  868. package/lib/esm/duet-tooltip.entry.js +190 -188
  869. package/lib/esm/duet-tray.entry.js +85 -82
  870. package/lib/esm/duet-upload-aria-status.entry.js +65 -65
  871. package/lib/esm/duet-upload-item.entry.js +81 -81
  872. package/lib/esm/duet-visually-hidden.entry.js +12 -12
  873. package/lib/esm/duet.js +5 -5
  874. package/lib/esm/errorcodes.utils-e681347c.js +36 -0
  875. package/lib/esm/focus-utils-23aad0c9.js +18 -0
  876. package/lib/esm/{index-b3bf9761.js → index-02e78bbf.js} +106 -45
  877. package/lib/esm/input-utils-85681162.js +53 -0
  878. package/lib/esm/is-internet-explorer-2c48f686.js +9 -0
  879. package/lib/esm/{js-utils-a35dcc8c.js → js-utils-9b9e0039.js} +27 -27
  880. package/lib/esm/keyboard-utils-eba88365.js +51 -0
  881. package/lib/esm/{language-utils-9ff76444.js → language-utils-00ca4c55.js} +74 -74
  882. package/lib/esm/loader.js +4 -4
  883. package/lib/{dist-custom-elements/p-f8c76b25.js → esm/slot-query-022710bb.js} +1 -1
  884. package/lib/esm/string-utils-ca039233.js +55 -0
  885. package/lib/esm/teleport-4462e8c1.js +97 -0
  886. package/lib/esm/themeable-component-724c0f7e.js +13 -0
  887. package/lib/esm/token-utils-b4bd3ec7.js +117 -0
  888. package/lib/esm/watch-options-e96ecd92.js +57 -0
  889. package/lib/esm-es5/app-globals-45aa6d20.js +4 -0
  890. package/lib/esm-es5/duet-action-button.entry.js +1 -1
  891. package/lib/esm-es5/duet-alert.entry.js +2 -2
  892. package/lib/esm-es5/duet-badge.entry.js +1 -1
  893. package/lib/esm-es5/duet-banner.entry.js +1 -1
  894. package/lib/esm-es5/duet-breadcrumb.entry.js +1 -1
  895. package/lib/esm-es5/duet-breadcrumbs.entry.js +1 -1
  896. package/lib/esm-es5/duet-button_2.entry.js +1 -1
  897. package/lib/esm-es5/duet-callout.entry.js +1 -1
  898. package/lib/esm-es5/duet-caption_4.entry.js +1 -1
  899. package/lib/esm-es5/duet-card.entry.js +1 -1
  900. package/lib/esm-es5/duet-checkbox.entry.js +1 -1
  901. package/lib/esm-es5/duet-checkmark.entry.js +1 -1
  902. package/lib/esm-es5/duet-chip.entry.js +2 -2
  903. package/lib/esm-es5/duet-choice_2.entry.js +1 -1
  904. package/lib/esm-es5/duet-collapsible.entry.js +2 -2
  905. package/lib/esm-es5/duet-combobox.entry.js +1 -1
  906. package/lib/esm-es5/duet-contact-card.entry.js +1 -1
  907. package/lib/esm-es5/duet-cookie-consent.entry.js +1 -1
  908. package/lib/esm-es5/duet-date-picker.entry.js +1 -1
  909. package/lib/esm-es5/duet-divider_2.entry.js +1 -1
  910. package/lib/esm-es5/duet-editable-table_3.entry.js +1 -1
  911. package/lib/esm-es5/duet-empty-state.entry.js +1 -1
  912. package/lib/esm-es5/duet-fieldset.entry.js +1 -1
  913. package/lib/esm-es5/duet-file-chooser.entry.js +1 -1
  914. package/lib/esm-es5/duet-footer.entry.js +1 -1
  915. package/lib/esm-es5/duet-grid_2.entry.js +1 -1
  916. package/lib/esm-es5/duet-header_2.entry.js +1 -1
  917. package/lib/esm-es5/duet-hero.entry.js +1 -1
  918. package/lib/esm-es5/duet-icon.entry.js +1 -1
  919. package/lib/esm-es5/duet-input_2.entry.js +1 -1
  920. package/lib/esm-es5/duet-layout.entry.js +1 -1
  921. package/lib/esm-es5/duet-list_2.entry.js +1 -1
  922. package/lib/esm-es5/duet-menu-bar-button.entry.js +1 -1
  923. package/lib/esm-es5/duet-menu-bar-dropdown-link.entry.js +1 -1
  924. package/lib/esm-es5/duet-menu-bar-dropdown.entry.js +1 -1
  925. package/lib/esm-es5/duet-menu-bar-link.entry.js +1 -1
  926. package/lib/esm-es5/duet-menu-bar.entry.js +1 -1
  927. package/lib/esm-es5/duet-modal.entry.js +1 -1
  928. package/lib/esm-es5/duet-multiselect.entry.js +1 -1
  929. package/lib/esm-es5/duet-nav.entry.js +1 -1
  930. package/lib/esm-es5/duet-notification_2.entry.js +2 -2
  931. package/lib/esm-es5/duet-number-input.entry.js +1 -1
  932. package/lib/esm-es5/duet-page-heading.entry.js +1 -1
  933. package/lib/esm-es5/duet-pagination_2.entry.js +1 -1
  934. package/lib/esm-es5/duet-popup-menu-item.entry.js +1 -1
  935. package/lib/esm-es5/duet-popup-menu.entry.js +1 -1
  936. package/lib/esm-es5/duet-progress.entry.js +1 -1
  937. package/lib/esm-es5/duet-promo-card.entry.js +1 -1
  938. package/lib/esm-es5/duet-radio_2.entry.js +1 -1
  939. package/lib/esm-es5/duet-range-slider.entry.js +1 -1
  940. package/lib/esm-es5/duet-scrollable_3.entry.js +2 -2
  941. package/lib/esm-es5/duet-section-layout.entry.js +1 -1
  942. package/lib/esm-es5/duet-select.entry.js +1 -1
  943. package/lib/esm-es5/duet-shaped-image.entry.js +1 -1
  944. package/lib/esm-es5/duet-show-more.entry.js +1 -1
  945. package/lib/esm-es5/duet-slideout-lang.entry.js +1 -1
  946. package/lib/esm-es5/duet-slideout-link.entry.js +1 -1
  947. package/lib/esm-es5/duet-slideout-panel-dropdown.entry.js +1 -1
  948. package/lib/esm-es5/duet-slideout-panel.entry.js +1 -1
  949. package/lib/esm-es5/duet-slideout.entry.js +2 -2
  950. package/lib/esm-es5/duet-step_2.entry.js +2 -2
  951. package/lib/esm-es5/duet-submenu-bar-dropdown-link.entry.js +1 -1
  952. package/lib/esm-es5/duet-submenu-bar-dropdown.entry.js +1 -1
  953. package/lib/esm-es5/duet-submenu-bar-link.entry.js +1 -1
  954. package/lib/esm-es5/duet-submenu-bar.entry.js +1 -1
  955. package/lib/esm-es5/duet-textarea.entry.js +1 -1
  956. package/lib/esm-es5/duet-toggle.entry.js +2 -2
  957. package/lib/esm-es5/duet-toolbar-dropdown-link.entry.js +1 -1
  958. package/lib/esm-es5/duet-toolbar-dropdown.entry.js +1 -1
  959. package/lib/esm-es5/duet-toolbar-link.entry.js +1 -1
  960. package/lib/esm-es5/duet-toolbar.entry.js +1 -1
  961. package/lib/esm-es5/duet-tooltip-button_2.entry.js +1 -1
  962. package/lib/esm-es5/duet-tooltip.entry.js +1 -1
  963. package/lib/esm-es5/duet-tray.entry.js +1 -1
  964. package/lib/esm-es5/duet-upload-aria-status.entry.js +1 -1
  965. package/lib/esm-es5/duet-upload-item.entry.js +1 -1
  966. package/lib/esm-es5/duet-visually-hidden.entry.js +1 -1
  967. package/lib/esm-es5/duet.js +1 -1
  968. package/lib/esm-es5/{errorcodes.utils-424b1197.js → errorcodes.utils-e681347c.js} +1 -1
  969. package/lib/esm-es5/focus-utils-23aad0c9.js +4 -0
  970. package/lib/esm-es5/index-02e78bbf.js +5 -0
  971. package/lib/esm-es5/keyboard-utils-eba88365.js +4 -0
  972. package/lib/esm-es5/{language-utils-9ff76444.js → language-utils-00ca4c55.js} +1 -1
  973. package/lib/esm-es5/loader.js +1 -1
  974. package/lib/types/common/a11y-component.d.ts +7 -7
  975. package/lib/types/common/form-components.d.ts +15 -15
  976. package/lib/types/common/themeable-component.d.ts +4 -4
  977. package/lib/types/common-types.d.ts +11 -0
  978. package/lib/types/components/duet-action-button/duet-action-button.d.ts +126 -126
  979. package/lib/types/components/duet-alert/duet-alert.d.ts +100 -100
  980. package/lib/types/components/duet-badge/duet-badge.d.ts +27 -27
  981. package/lib/types/components/duet-banner/duet-banner.d.ts +58 -58
  982. package/lib/types/components/duet-breadcrumbs/duet-breadcrumb.d.ts +38 -33
  983. package/lib/types/components/duet-breadcrumbs/duet-breadcrumbs.d.ts +23 -23
  984. package/lib/types/components/duet-button/duet-button.d.ts +219 -219
  985. package/lib/types/components/duet-callout/duet-callout.d.ts +19 -19
  986. package/lib/types/components/duet-caption/duet-caption.d.ts +26 -26
  987. package/lib/types/components/duet-card/duet-card.d.ts +121 -119
  988. package/lib/types/components/duet-checkbox/duet-checkbox.d.ts +132 -132
  989. package/lib/types/components/duet-chip/duet-chip.d.ts +111 -109
  990. package/lib/types/components/duet-choice/duet-checkmark.d.ts +27 -27
  991. package/lib/types/components/duet-choice/duet-choice.d.ts +259 -259
  992. package/lib/types/components/duet-choice-group/duet-choice-group.d.ts +103 -103
  993. package/lib/types/components/duet-collapsible/duet-collapsible.d.ts +90 -88
  994. package/lib/types/components/duet-combobox/duet-combobox-select-single.d.ts +3 -3
  995. package/lib/types/components/duet-combobox/duet-combobox-select.d.ts +8 -8
  996. package/lib/types/components/duet-combobox/duet-combobox.d.ts +135 -135
  997. package/lib/types/components/duet-contact-card/duet-contact-card.d.ts +60 -60
  998. package/lib/types/components/duet-cookie-consent/duet-cookie-consent.d.ts +31 -29
  999. package/lib/types/components/duet-date-picker/date-i18n.d.ts +13 -13
  1000. package/lib/types/components/duet-date-picker/date-picker-day.d.ts +9 -9
  1001. package/lib/types/components/duet-date-picker/date-picker-input.d.ts +28 -28
  1002. package/lib/types/components/duet-date-picker/date-picker-month.d.ts +12 -12
  1003. package/lib/types/components/duet-date-picker/duet-date-picker.d.ts +220 -220
  1004. package/lib/types/components/duet-divider/duet-divider.d.ts +26 -26
  1005. package/lib/types/components/duet-editable-table/duet-editable-table-tabledata.d.ts +3 -3
  1006. package/lib/types/components/duet-editable-table/duet-editable-table.d.ts +133 -133
  1007. package/lib/types/components/duet-empty-state/duet-empty-state.d.ts +22 -22
  1008. package/lib/types/components/duet-fieldset/duet-fieldset.d.ts +60 -60
  1009. package/lib/types/components/duet-file-chooser/duet-file-chooser.d.ts +35 -35
  1010. package/lib/types/components/duet-footer/duet-footer.d.ts +143 -143
  1011. package/lib/types/components/duet-grid/duet-grid.d.ts +73 -73
  1012. package/lib/types/components/duet-grid-item/duet-grid-item.d.ts +49 -49
  1013. package/lib/types/components/duet-header/duet-header-dropdown.d.ts +11 -11
  1014. package/lib/types/components/duet-header/duet-header-icon.d.ts +4 -4
  1015. package/lib/types/components/duet-header/duet-header.d.ts +347 -347
  1016. package/lib/types/components/duet-heading/duet-heading.d.ts +49 -49
  1017. package/lib/types/components/duet-hero/duet-hero.d.ts +198 -198
  1018. package/lib/types/components/duet-icon/duet-icon.d.ts +80 -81
  1019. package/lib/types/components/duet-input/duet-input.d.ts +279 -279
  1020. package/lib/types/components/duet-label/duet-label.d.ts +26 -26
  1021. package/lib/types/components/duet-layout/duet-layout.d.ts +48 -48
  1022. package/lib/types/components/duet-link/duet-link.d.ts +95 -94
  1023. package/lib/types/components/duet-list/duet-list.d.ts +60 -60
  1024. package/lib/types/components/duet-list-item/duet-list-item.d.ts +17 -17
  1025. package/lib/types/components/duet-logo/duet-logo.d.ts +59 -59
  1026. package/lib/types/components/duet-menu-bar/duet-menu-bar.d.ts +68 -68
  1027. package/lib/types/components/duet-menu-bar-button/duet-menu-bar-button.d.ts +85 -86
  1028. package/lib/types/components/duet-menu-bar-dropdown/duet-menu-bar-dropdown.d.ts +50 -51
  1029. package/lib/types/components/duet-menu-bar-dropdown-link/duet-menu-bar-dropdown-link.d.ts +36 -36
  1030. package/lib/types/components/duet-menu-bar-link/duet-menu-bar-link.d.ts +45 -46
  1031. package/lib/types/components/duet-modal/duet-modal.d.ts +155 -155
  1032. package/lib/types/components/duet-multiselect/duet-multiselect.d.ts +153 -153
  1033. package/lib/types/components/duet-nav/duet-nav.d.ts +20 -20
  1034. package/lib/types/components/duet-notification/duet-notification.d.ts +55 -55
  1035. package/lib/types/components/duet-notification-drawer/duet-notification-drawer.d.ts +83 -83
  1036. package/lib/types/components/duet-number-input/duet-number-input.d.ts +230 -230
  1037. package/lib/types/components/duet-page-heading/duet-page-heading.d.ts +25 -25
  1038. package/lib/types/components/duet-pagination/duet-pagination.d.ts +129 -129
  1039. package/lib/types/components/duet-paragraph/duet-paragraph.d.ts +38 -38
  1040. package/lib/types/components/duet-popup-menu/duet-popup-menu.d.ts +80 -80
  1041. package/lib/types/components/duet-popup-menu-item/duet-popup-menu-item.d.ts +73 -73
  1042. package/lib/types/components/duet-progress/duet-progress.d.ts +71 -71
  1043. package/lib/types/components/duet-promo-card/duet-promo-card.d.ts +42 -42
  1044. package/lib/types/components/duet-radio/duet-radio.d.ts +145 -145
  1045. package/lib/types/components/duet-radio-group/duet-radio-group.d.ts +93 -93
  1046. package/lib/types/components/duet-range-slider/duet-range-slider.d.ts +132 -130
  1047. package/lib/types/components/duet-range-stepper/duet-range-stepper.d.ts +68 -68
  1048. package/lib/types/components/duet-scrollable/duet-scrollable.d.ts +61 -61
  1049. package/lib/types/components/duet-section-layout/duet-section-layout.d.ts +17 -17
  1050. package/lib/types/components/duet-select/duet-select.d.ts +179 -179
  1051. package/lib/types/components/duet-shaped-image/duet-shaped-image.d.ts +30 -30
  1052. package/lib/types/components/duet-show-more/duet-show-more.d.ts +83 -83
  1053. package/lib/types/components/duet-slideout/duet-slideout.d.ts +86 -86
  1054. package/lib/types/components/duet-slideout-lang/duet-slideout-lang.d.ts +24 -24
  1055. package/lib/types/components/duet-slideout-link/duet-slideout-link.d.ts +55 -55
  1056. package/lib/types/components/duet-slideout-panel/duet-slideout-panel.d.ts +55 -55
  1057. package/lib/types/components/duet-slideout-panel-dropdown/duet-slideout-panel-dropdown.d.ts +39 -39
  1058. package/lib/types/components/duet-spacer/duet-spacer.d.ts +18 -18
  1059. package/lib/types/components/duet-spinner/duet-spinner.d.ts +30 -30
  1060. package/lib/types/components/duet-step/duet-step.d.ts +68 -66
  1061. package/lib/types/components/duet-stepper/duet-stepper.d.ts +47 -47
  1062. package/lib/types/components/duet-submenu-bar/duet-submenu-bar.d.ts +50 -50
  1063. package/lib/types/components/duet-submenu-bar-dropdown/duet-submenu-bar-dropdown.d.ts +48 -49
  1064. package/lib/types/components/duet-submenu-bar-dropdown-link/duet-submenu-bar-dropdown-link.d.ts +43 -43
  1065. package/lib/types/components/duet-submenu-bar-link/duet-submenu-bar-link.d.ts +40 -41
  1066. package/lib/types/components/duet-tab/duet-tab.d.ts +37 -37
  1067. package/lib/types/components/duet-tab-group/duet-tab-group.d.ts +132 -132
  1068. package/lib/types/components/duet-table/duet-table.d.ts +66 -66
  1069. package/lib/types/components/duet-textarea/duet-textarea.d.ts +200 -200
  1070. package/lib/types/components/duet-toggle/duet-toggle.d.ts +115 -113
  1071. package/lib/types/components/duet-toolbar/duet-toolbar.d.ts +30 -30
  1072. package/lib/types/components/duet-toolbar-dropdown/duet-toolbar-dropdown.d.ts +50 -50
  1073. package/lib/types/components/duet-toolbar-dropdown-link/duet-toolbar-dropdown-link.d.ts +43 -43
  1074. package/lib/types/components/duet-toolbar-link/duet-toolbar-link.d.ts +42 -42
  1075. package/lib/types/components/duet-tooltip/duet-tooltip-button.d.ts +21 -19
  1076. package/lib/types/components/duet-tooltip/duet-tooltip-popup.d.ts +33 -31
  1077. package/lib/types/components/duet-tooltip/duet-tooltip.d.ts +122 -122
  1078. package/lib/types/components/duet-tray/duet-tray.d.ts +84 -84
  1079. package/lib/types/components/duet-upload/duet-upload.d.ts +484 -484
  1080. package/lib/types/components/duet-upload/errorcodes.utils.d.ts +3 -3
  1081. package/lib/types/components/duet-upload/upload-editable-item-error.d.ts +2 -2
  1082. package/lib/types/components/duet-upload/upload-editable-item-inprogres.d.ts +2 -2
  1083. package/lib/types/components/duet-upload/upload-editable-item-pending.d.ts +1 -1
  1084. package/lib/types/components/duet-upload/upload-editable-item-success.d.ts +2 -2
  1085. package/lib/types/components/duet-upload/upload-item-header.d.ts +2 -2
  1086. package/lib/types/components/duet-upload/upload-validators.d.ts +4 -4
  1087. package/lib/types/components/duet-upload/xhr.helpers.d.ts +10 -10
  1088. package/lib/types/components/duet-upload-aria-status/duet-upload-aria-status.d.ts +40 -40
  1089. package/lib/types/components/duet-upload-item/duet-upload-item.d.ts +54 -54
  1090. package/lib/types/components/duet-visually-hidden/duet-visually-hidden.d.ts +6 -6
  1091. package/lib/types/components.d.ts +10 -4
  1092. package/lib/types/stencil-public-runtime.d.ts +8 -0
  1093. package/lib/types/utils/axe-core-utils.d.ts +3 -3
  1094. package/lib/types/utils/fixture-utils.d.ts +2 -2
  1095. package/lib/types/utils/focus-utils.d.ts +2 -2
  1096. package/lib/types/utils/keyboard-utils.d.ts +2 -0
  1097. package/lib/types/utils/language-utils.d.ts +10 -10
  1098. package/lib/types/utils/picture-utils.d.ts +10 -10
  1099. package/lib/types/utils/teleport.d.ts +20 -20
  1100. package/lib/types/utils/template-utils.d.ts +1 -1
  1101. package/lib/types/utils/test-utils.d.ts +2 -2
  1102. package/lib/types/utils/token-utils.d.ts +9 -9
  1103. package/package.json +6 -6
  1104. package/lib/cjs/app-globals-4ab83f59.js +0 -54
  1105. package/lib/cjs/create-id-167cd350.js +0 -13
  1106. package/lib/cjs/errorcodes.utils-8e928de5.js +0 -39
  1107. package/lib/cjs/focus-utils-aea9f4e1.js +0 -21
  1108. package/lib/cjs/input-utils-b4615782.js +0 -56
  1109. package/lib/cjs/keyboard-utils-02441bc5.js +0 -36
  1110. package/lib/cjs/string-utils-51a2f59f.js +0 -59
  1111. package/lib/cjs/teleport-af825e04.js +0 -99
  1112. package/lib/cjs/themeable-component-0be6d1f4.js +0 -15
  1113. package/lib/cjs/token-utils-dbfeff2e.js +0 -124
  1114. package/lib/cjs/watch-options-1773d69f.js +0 -61
  1115. package/lib/dist-custom-elements/p-03ac3eb3.js +0 -137
  1116. package/lib/dist-custom-elements/p-1a395a8d.js +0 -55
  1117. package/lib/dist-custom-elements/p-1ce55654.js +0 -265
  1118. package/lib/dist-custom-elements/p-1f56e02f.js +0 -174
  1119. package/lib/dist-custom-elements/p-24853ebf.js +0 -97
  1120. package/lib/dist-custom-elements/p-268171f7.js +0 -9
  1121. package/lib/dist-custom-elements/p-3049dfd5.js +0 -147
  1122. package/lib/dist-custom-elements/p-45f71a69.js +0 -11
  1123. package/lib/dist-custom-elements/p-4687ca41.js +0 -465
  1124. package/lib/dist-custom-elements/p-56ac3289.js +0 -20
  1125. package/lib/dist-custom-elements/p-5d8d9a52.js +0 -98
  1126. package/lib/dist-custom-elements/p-62e68de8.js +0 -38
  1127. package/lib/dist-custom-elements/p-64cd1abb.js +0 -93
  1128. package/lib/dist-custom-elements/p-665418f0.js +0 -205
  1129. package/lib/dist-custom-elements/p-759c725f.js +0 -226
  1130. package/lib/dist-custom-elements/p-77f2dbee.js +0 -53
  1131. package/lib/dist-custom-elements/p-80ec4336.js +0 -123
  1132. package/lib/dist-custom-elements/p-8be301dd.js +0 -62
  1133. package/lib/dist-custom-elements/p-9541f0b6.js +0 -59
  1134. package/lib/dist-custom-elements/p-a1371eee.js +0 -57
  1135. package/lib/dist-custom-elements/p-a3923b18.js +0 -126
  1136. package/lib/dist-custom-elements/p-c5032d3a.js +0 -18
  1137. package/lib/dist-custom-elements/p-d48735b6.js +0 -13
  1138. package/lib/dist-custom-elements/p-e19d1e27.js +0 -117
  1139. package/lib/dist-custom-elements/p-e6b07569.js +0 -271
  1140. package/lib/dist-custom-elements/p-e77f7fff.js +0 -60
  1141. package/lib/dist-custom-elements/p-f27e355b.js +0 -76
  1142. package/lib/dist-custom-elements/p-f46be918.js +0 -110
  1143. package/lib/dist-custom-elements/p-fd4877d1.js +0 -72
  1144. package/lib/dist-custom-elements/p-fe8a2205.js +0 -206
  1145. package/lib/duet/p-038ac494.system.entry.js +0 -4
  1146. package/lib/duet/p-08764d71.entry.js +0 -4
  1147. package/lib/duet/p-08f2114a.entry.js +0 -4
  1148. package/lib/duet/p-0a664ebb.entry.js +0 -4
  1149. package/lib/duet/p-0e89cbae.system.entry.js +0 -4
  1150. package/lib/duet/p-0fd024c9.system.js +0 -4
  1151. package/lib/duet/p-11571ab9.entry.js +0 -4
  1152. package/lib/duet/p-177c55aa.entry.js +0 -4
  1153. package/lib/duet/p-18e2e6c8.system.entry.js +0 -4
  1154. package/lib/duet/p-21f3a17a.system.js +0 -4
  1155. package/lib/duet/p-2c78c637.system.entry.js +0 -4
  1156. package/lib/duet/p-34b5285b.system.entry.js +0 -4
  1157. package/lib/duet/p-3b147393.entry.js +0 -4
  1158. package/lib/duet/p-463ddc2c.system.entry.js +0 -4
  1159. package/lib/duet/p-4669b0af.js +0 -4
  1160. package/lib/duet/p-486eec2d.entry.js +0 -4
  1161. package/lib/duet/p-4dc0fff9.entry.js +0 -4
  1162. package/lib/duet/p-50ec2074.entry.js +0 -4
  1163. package/lib/duet/p-52806dad.system.entry.js +0 -4
  1164. package/lib/duet/p-5311f96e.system.entry.js +0 -4
  1165. package/lib/duet/p-5ae9b74f.entry.js +0 -4
  1166. package/lib/duet/p-5c5012f6.system.entry.js +0 -4
  1167. package/lib/duet/p-5eb2a31f.system.entry.js +0 -4
  1168. package/lib/duet/p-61d39730.entry.js +0 -4
  1169. package/lib/duet/p-6c4c0279.js +0 -5
  1170. package/lib/duet/p-76b68b44.entry.js +0 -4
  1171. package/lib/duet/p-789365cb.system.entry.js +0 -4
  1172. package/lib/duet/p-7bca584a.entry.js +0 -4
  1173. package/lib/duet/p-7c36b779.entry.js +0 -4
  1174. package/lib/duet/p-7de467b8.entry.js +0 -4
  1175. package/lib/duet/p-7e1f37e2.entry.js +0 -4
  1176. package/lib/duet/p-821c350f.system.entry.js +0 -4
  1177. package/lib/duet/p-8d0d6e06.system.js +0 -4
  1178. package/lib/duet/p-995e1b11.system.entry.js +0 -4
  1179. package/lib/duet/p-9a613a25.system.entry.js +0 -4
  1180. package/lib/duet/p-9f835123.system.entry.js +0 -4
  1181. package/lib/duet/p-a0660ffa.system.js +0 -5
  1182. package/lib/duet/p-aa6d7d97.entry.js +0 -4
  1183. package/lib/duet/p-ac9f6601.entry.js +0 -4
  1184. package/lib/duet/p-b1db3006.js +0 -4
  1185. package/lib/duet/p-b3ae5641.system.entry.js +0 -4
  1186. package/lib/duet/p-c1bc9249.entry.js +0 -4
  1187. package/lib/duet/p-c36a1bb7.entry.js +0 -4
  1188. package/lib/duet/p-cc1909de.js +0 -4
  1189. package/lib/duet/p-d098d59c.system.entry.js +0 -4
  1190. package/lib/duet/p-d9353709.entry.js +0 -4
  1191. package/lib/duet/p-e1e89fd5.entry.js +0 -4
  1192. package/lib/duet/p-e491c098.system.entry.js +0 -4
  1193. package/lib/duet/p-e95d09bb.system.entry.js +0 -4
  1194. package/lib/duet/p-efa6152d.entry.js +0 -4
  1195. package/lib/duet/p-f58eb425.js +0 -4
  1196. package/lib/duet/p-fab6160a.entry.js +0 -4
  1197. package/lib/duet/p-fcbb30e1.entry.js +0 -4
  1198. package/lib/duet/p-ff09528c.system.entry.js +0 -4
  1199. package/lib/esm/app-globals-de2a5510.js +0 -52
  1200. package/lib/esm/create-id-2b0cd46d.js +0 -11
  1201. package/lib/esm/errorcodes.utils-424b1197.js +0 -36
  1202. package/lib/esm/focus-utils-74961919.js +0 -18
  1203. package/lib/esm/input-utils-a0225b92.js +0 -53
  1204. package/lib/esm/is-internet-explorer-032d4dae.js +0 -9
  1205. package/lib/esm/keyboard-utils-5746e126.js +0 -20
  1206. package/lib/esm/string-utils-59ad4cb2.js +0 -55
  1207. package/lib/esm/teleport-15747328.js +0 -97
  1208. package/lib/esm/themeable-component-fdce4fd7.js +0 -13
  1209. package/lib/esm/token-utils-46c8fe31.js +0 -117
  1210. package/lib/esm/watch-options-f189118b.js +0 -57
  1211. package/lib/esm-es5/app-globals-de2a5510.js +0 -4
  1212. package/lib/esm-es5/focus-utils-74961919.js +0 -4
  1213. package/lib/esm-es5/index-b3bf9761.js +0 -5
  1214. package/lib/esm-es5/keyboard-utils-5746e126.js +0 -4
  1215. /package/lib/duet/{p-1a395a8d.js → p-0e052642.js} +0 -0
  1216. /package/lib/duet/{p-f8c76b25.js → p-11230037.js} +0 -0
  1217. /package/lib/duet/{p-0b31864f.js → p-38320af8.js} +0 -0
  1218. /package/lib/duet/{p-c30a5f7c.system.js → p-41982d26.system.js} +0 -0
  1219. /package/lib/duet/{p-268171f7.js → p-43b89e38.js} +0 -0
  1220. /package/lib/duet/{p-274d11e3.js → p-4ab776f4.js} +0 -0
  1221. /package/lib/duet/{p-77b6e4ba.system.js → p-50f4bca2.system.js} +0 -0
  1222. /package/lib/duet/{p-45f71a69.js → p-5e59e970.js} +0 -0
  1223. /package/lib/duet/{p-75daef16.system.js → p-634e8787.system.js} +0 -0
  1224. /package/lib/duet/{p-719b38fe.system.js → p-67c653f9.system.js} +0 -0
  1225. /package/lib/duet/{p-b99c00fa.system.js → p-6ef75455.system.js} +0 -0
  1226. /package/lib/duet/{p-a1371eee.js → p-7d8a2628.js} +0 -0
  1227. /package/lib/duet/{p-ecf1f6cd.system.js → p-9e36548d.system.js} +0 -0
  1228. /package/lib/duet/{p-3d8d557b.js → p-9e371678.js} +0 -0
  1229. /package/lib/duet/{p-d48735b6.js → p-a58bd561.js} +0 -0
  1230. /package/lib/duet/{p-8e1da663.system.js → p-afad5fd3.system.js} +0 -0
  1231. /package/lib/duet/{p-24853ebf.js → p-b2e550a3.js} +0 -0
  1232. /package/lib/duet/{p-7c29d36a.system.js → p-b864159a.system.js} +0 -0
  1233. /package/lib/duet/{p-88a50491.system.js → p-d1cedaa1.system.js} +0 -0
  1234. /package/lib/duet/{p-77f2dbee.js → p-df7874f9.js} +0 -0
  1235. /package/lib/duet/{p-87dd7bf3.system.js → p-e12066c8.system.js} +0 -0
  1236. /package/lib/duet/{p-1a91e22a.system.js → p-e6b5a1c7.system.js} +0 -0
  1237. /package/lib/esm-es5/{common-strings-c0ac5a0b.js → common-strings-59db6973.js} +0 -0
  1238. /package/lib/esm-es5/{create-id-2b0cd46d.js → create-id-149a1b6d.js} +0 -0
  1239. /package/lib/esm-es5/{input-utils-a0225b92.js → input-utils-85681162.js} +0 -0
  1240. /package/lib/esm-es5/{is-internet-explorer-032d4dae.js → is-internet-explorer-2c48f686.js} +0 -0
  1241. /package/lib/esm-es5/{js-utils-a35dcc8c.js → js-utils-9b9e0039.js} +0 -0
  1242. /package/lib/esm-es5/{slot-query-7877f18f.js → slot-query-022710bb.js} +0 -0
  1243. /package/lib/esm-es5/{string-utils-59ad4cb2.js → string-utils-ca039233.js} +0 -0
  1244. /package/lib/esm-es5/{teleport-15747328.js → teleport-4462e8c1.js} +0 -0
  1245. /package/lib/esm-es5/{themeable-component-fdce4fd7.js → themeable-component-724c0f7e.js} +0 -0
  1246. /package/lib/esm-es5/{token-utils-46c8fe31.js → token-utils-b4bd3ec7.js} +0 -0
  1247. /package/lib/esm-es5/{watch-options-f189118b.js → watch-options-e96ecd92.js} +0 -0
@@ -5,301 +5,301 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-2cce7b13.js');
9
- const themeableComponent = require('./themeable-component-0be6d1f4.js');
10
- const jsUtils = require('./js-utils-b20cfc79.js');
11
- const keyboardUtils = require('./keyboard-utils-02441bc5.js');
12
- const languageUtils = require('./language-utils-dc19e8b6.js');
8
+ const index = require('./index-2dc54a15.js');
9
+ const themeableComponent = require('./themeable-component-83a2a0d4.js');
10
+ const jsUtils = require('./js-utils-92e24ba1.js');
11
+ const keyboardUtils = require('./keyboard-utils-7248dd0a.js');
12
+ const languageUtils = require('./language-utils-e8a527e5.js');
13
13
  const tokens_module = require('./tokens.module-10f42b21.js');
14
- const tokenUtils = require('./token-utils-dbfeff2e.js');
15
- const createId = require('./create-id-167cd350.js');
16
- const errorcodes_utils = require('./errorcodes.utils-8e928de5.js');
17
- require('./string-utils-51a2f59f.js');
14
+ const tokenUtils = require('./token-utils-84b3bca6.js');
15
+ const createId = require('./create-id-1f8c438f.js');
16
+ const errorcodes_utils = require('./errorcodes.utils-a86b1f94.js');
17
+ require('./string-utils-053749ff.js');
18
18
 
19
19
  //simple functional component that renders the data in the table
20
20
  const TableData = ({ data, groupId, alignment }, _children) => {
21
- const classNames = `duet-editable-table duet-editable-table-content-${groupId}`;
22
- if (typeof data === "string") {
23
- return index.h("td", { innerHTML: data, class: classNames, part: `${groupId}content`, style: { verticalAlign: alignment } });
24
- }
25
- else {
26
- return (index.h("td", { class: classNames, part: `${groupId}content`, style: { verticalAlign: alignment } }, data));
27
- }
21
+ const classNames = `duet-editable-table duet-editable-table-content-${groupId}`;
22
+ if (typeof data === "string") {
23
+ return index.h("td", { innerHTML: data, class: classNames, part: `${groupId}content`, style: { verticalAlign: alignment } });
24
+ }
25
+ else {
26
+ return (index.h("td", { class: classNames, part: `${groupId}content`, style: { verticalAlign: alignment } }, data));
27
+ }
28
28
  };
29
29
 
30
30
  const duetEditableTableCss = ".sc-duet-editable-table-h{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}.duet-editable-table-actions-menu.sc-duet-editable-table{position:relative;padding:0 !important;margin:0}.duet-editable-table-actions-menu-button.sc-duet-editable-table{position:relative;right:-16px;float:right;padding:0}.duet-editable-table-actions-menu-icon.sc-duet-editable-table .duet-icon.sc-duet-editable-table{max-width:16px;max-height:16px}.duet-editable-table-row.duet-table-action-row.sc-duet-editable-table .duet-text-right.sc-duet-editable-table{text-align:right}.duet-editable-table-header.sc-duet-editable-table tr.sc-duet-editable-table .duet-editable-table-header-hidden.sc-duet-editable-table{padding:0 !important;font-size:0;border-bottom:0}";
31
31
 
32
32
  const DuetEditableTable = class {
33
- constructor(hostRef) {
34
- index.registerInstance(this, hostRef);
35
- this.duetTableToggle = index.createEvent(this, "duetTableToggle", 7);
36
- this.duetMenuClick = index.createEvent(this, "duetMenuClick", 7);
37
- this.hasHeadSlotFirst = false;
38
- this.hasHeadSlotLast = false;
39
- this.hasFootSlot = false;
40
- this.sortableDefaultLabel = {
41
- fi: "Järjestä",
42
- en: "Click to sort",
43
- sv: "Klicka för att sortera",
44
- };
45
- this.actionColumnLabel = {
46
- en: "Actions for rows",
47
- fi: "Toiminnot rivillä",
48
- sv: "Åtgärder för rader",
49
- };
33
+ constructor(hostRef) {
34
+ index.registerInstance(this, hostRef);
35
+ this.duetTableToggle = index.createEvent(this, "duetTableToggle", 7);
36
+ this.duetMenuClick = index.createEvent(this, "duetMenuClick", 7);
37
+ this.hasHeadSlotFirst = false;
38
+ this.hasHeadSlotLast = false;
39
+ this.hasFootSlot = false;
40
+ this.sortableDefaultLabel = {
41
+ fi: "Järjestä",
42
+ en: "Click to sort",
43
+ sv: "Klicka för att sortera",
44
+ };
45
+ this.actionColumnLabel = {
46
+ en: "Actions for rows",
47
+ fi: "Toiminnot rivillä",
48
+ sv: "Åtgärder för rader",
49
+ };
50
+ /**
51
+ * Private methods.
52
+ */
53
+ this.toggleColumn = (column, e) => {
54
+ e.preventDefault();
55
+ const { sort_order, direction, index, key } = column;
56
+ this.duetTableToggle.emit({
57
+ sort_order,
58
+ index,
59
+ direction,
60
+ key,
61
+ component: "duet-editable-table",
62
+ originalEvent: e,
63
+ });
64
+ };
65
+ this.handleKeyDown = (column, e) => {
66
+ if (keyboardUtils.isKeyboardClick(e)) {
67
+ this.toggleColumn(column, e);
68
+ }
69
+ };
70
+ this.language = languageUtils.getLanguage();
71
+ this.margin = "auto";
72
+ this.variation = "striped";
73
+ this.sticky = false;
74
+ this.stickyDistance = "with-links";
75
+ this.breakpoint = "small";
76
+ this.actions = undefined;
77
+ this.columns = undefined;
78
+ this.rows = undefined;
79
+ this.sortable = false;
80
+ this.groupId = "";
81
+ this.theme = "";
82
+ this.accessibleRole = undefined;
83
+ this.hideHeadVisually = false;
84
+ }
50
85
  /**
51
- * Private methods.
86
+ * Component lifecycle events.
52
87
  */
53
- this.toggleColumn = (column, e) => {
54
- e.preventDefault();
55
- const { sort_order, direction, index, key } = column;
56
- this.duetTableToggle.emit({
57
- sort_order,
58
- index,
59
- direction,
60
- key,
61
- component: "duet-editable-table",
62
- originalEvent: e,
63
- });
64
- };
65
- this.handleKeyDown = (column, e) => {
66
- if (keyboardUtils.isKeyboardClick(e)) {
67
- this.toggleColumn(column, e);
68
- }
69
- };
70
- this.language = languageUtils.getLanguage();
71
- this.margin = "auto";
72
- this.variation = "striped";
73
- this.sticky = false;
74
- this.stickyDistance = "with-links";
75
- this.breakpoint = "small";
76
- this.actions = undefined;
77
- this.columns = undefined;
78
- this.rows = undefined;
79
- this.sortable = false;
80
- this.groupId = "";
81
- this.theme = "";
82
- this.accessibleRole = undefined;
83
- this.hideHeadVisually = false;
84
- }
85
- /**
86
- * Component lifecycle events.
87
- */
88
- componentWillLoad() {
89
- themeableComponent.inheritGlobalTheme(this);
90
- this.hasHeadSlotFirst = !!this.element.querySelector("[slot='thead-first']");
91
- this.hasHeadSlotLast = !!this.element.querySelector("[slot='thead-last']");
92
- this.hasFootSlot = !!this.element.querySelector("[slot='tfoot']");
93
- }
94
- connectedCallback() {
95
- languageUtils.connectLanguageChangeObserver(this);
96
- }
97
- disconnectedCallback() {
98
- languageUtils.disconnectLanguageChangeObserver(this);
99
- }
100
- createLabel(column) {
101
- const { sort_order, direction, index: index$1, label } = column;
102
- const i18nLabel = languageUtils.getLocaleString(label);
103
- if (!this.sortable) {
104
- return i18nLabel;
88
+ componentWillLoad() {
89
+ themeableComponent.inheritGlobalTheme(this);
90
+ this.hasHeadSlotFirst = !!this.element.querySelector("[slot='thead-first']");
91
+ this.hasHeadSlotLast = !!this.element.querySelector("[slot='thead-last']");
92
+ this.hasFootSlot = !!this.element.querySelector("[slot='tfoot']");
105
93
  }
106
- const getButtonIcon = () => {
107
- // "action-subtract-small" https://cdn.duetds.com/api/icons/2.2.12/lib/assets/action-subtract-small.svg
108
- // "action-arrow-down-small" https://cdn.duetds.com/api/icons/2.2.12/lib/assets/action-arrow-down-small.svg
109
- // "action-arrow-up-small" https://cdn.duetds.com/api/icons/2.2.12/lib/assets/action-arrow-up-small.svg
110
- if (!!sort_order && direction === 1) {
111
- return "action-arrow-down-small";
112
- }
113
- else if (!!sort_order && direction === -1) {
114
- return "action-arrow-up-small";
115
- }
116
- return "action-subtract-small";
117
- };
118
- return (index.h("span", { class: "duet-table-label", "data-index": index$1 }, index.h("duet-button", { size: "small", icon: getButtonIcon(), "icon-size": "medium-small", "accessible-label": this.sortableDefaultLabel[this.language], variation: "plain", margin: "none", "icon-right": true, onClick: event => this.toggleColumn(column, event), onKeyDown: event => this.handleKeyDown(column, event) }, i18nLabel)));
119
- }
120
- getSortedColumns() {
121
- //create a new array from sort instead of mutating original
122
- return [...this.columns].sort(jsUtils.fieldSorter(["index"]));
123
- }
124
- getRowSortOrder() {
125
- //create a new array from sort instead of mutating original
126
- const fields = [...this.columns].sort(jsUtils.fieldSorter(["sort_order"]));
127
- //return only key from objects that have sort_order
128
- return fields
129
- .filter(column => column.sort_order)
130
- .map(column => {
131
- // add - in-front of descending direction (required by field-sorter)
132
- return column.direction === -1 ? `-${column.key}` : column.key;
133
- });
134
- }
135
- renderTableHeader() {
136
- if (!this.columns) {
137
- return;
94
+ connectedCallback() {
95
+ languageUtils.connectLanguageChangeObserver(this);
138
96
  }
139
- const sortedColumns = this.getSortedColumns();
140
- return (index.h("tr", { class: {
141
- "duet-table-action-header": !!this.actions,
142
- } }, sortedColumns.map(column => {
143
- if (column.display !== false) {
144
- const label = this.createLabel(column);
145
- return label !== "" ? index.h("th", { scope: "col" }, label) : index.h("td", null);
146
- }
147
- }), this.actions && (index.h("th", { scope: "col", class: "duet-table-action-header-heading" }, this.actions && index.h("duet-visually-hidden", null, this.actionColumnLabel[this.language])))));
148
- }
149
- renderActions(rowItem, index$1) {
150
- // escape early
151
- if (!this.actions) {
152
- return;
97
+ disconnectedCallback() {
98
+ languageUtils.disconnectLanguageChangeObserver(this);
99
+ }
100
+ createLabel(column) {
101
+ const { sort_order, direction, index: index$1, label } = column;
102
+ const i18nLabel = languageUtils.getLocaleString(label);
103
+ if (!this.sortable) {
104
+ return i18nLabel;
105
+ }
106
+ const getButtonIcon = () => {
107
+ // "action-subtract-small" https://cdn.duetds.com/api/icons/2.2.12/lib/assets/action-subtract-small.svg
108
+ // "action-arrow-down-small" https://cdn.duetds.com/api/icons/2.2.12/lib/assets/action-arrow-down-small.svg
109
+ // "action-arrow-up-small" https://cdn.duetds.com/api/icons/2.2.12/lib/assets/action-arrow-up-small.svg
110
+ if (!!sort_order && direction === 1) {
111
+ return "action-arrow-down-small";
112
+ }
113
+ else if (!!sort_order && direction === -1) {
114
+ return "action-arrow-up-small";
115
+ }
116
+ return "action-subtract-small";
117
+ };
118
+ return (index.h("span", { class: "duet-table-label", "data-index": index$1 }, index.h("duet-button", { size: "small", icon: getButtonIcon(), "icon-size": "medium-small", "accessible-label": this.sortableDefaultLabel[this.language], variation: "plain", margin: "none", "icon-right": true, onClick: event => this.toggleColumn(column, event), onKeyDown: event => this.handleKeyDown(column, event) }, i18nLabel)));
119
+ }
120
+ getSortedColumns() {
121
+ //create a new array from sort instead of mutating original
122
+ return [...this.columns].sort(jsUtils.fieldSorter(["index"]));
123
+ }
124
+ getRowSortOrder() {
125
+ //create a new array from sort instead of mutating original
126
+ const fields = [...this.columns].sort(jsUtils.fieldSorter(["sort_order"]));
127
+ //return only key from objects that have sort_order
128
+ return fields
129
+ .filter(column => column.sort_order)
130
+ .map(column => {
131
+ // add - in-front of descending direction (required by field-sorter)
132
+ return column.direction === -1 ? `-${column.key}` : column.key;
133
+ });
134
+ }
135
+ renderTableHeader() {
136
+ if (!this.columns) {
137
+ return;
138
+ }
139
+ const sortedColumns = this.getSortedColumns();
140
+ return (index.h("tr", { class: {
141
+ "duet-table-action-header": !!this.actions,
142
+ } }, sortedColumns.map(column => {
143
+ if (column.display !== false) {
144
+ const label = this.createLabel(column);
145
+ return label !== "" ? index.h("th", { scope: "col" }, label) : index.h("td", null);
146
+ }
147
+ }), this.actions && (index.h("th", { scope: "col", class: "duet-table-action-header-heading" }, this.actions && index.h("duet-visually-hidden", null, this.actionColumnLabel[this.language])))));
148
+ }
149
+ renderActions(rowItem, index$1) {
150
+ // escape early
151
+ if (!this.actions) {
152
+ return;
153
+ }
154
+ // iterate through actions and add them in the sidebar
155
+ return (index.h("td", { class: "duet-text-right" }, this.actions.map(actionItem => {
156
+ return (index.h("duet-action-button", { actionMeta: Object.assign({}, (rowItem === null || rowItem === void 0 ? void 0 : rowItem.meta) || {}, { index: index$1 }), actionId: (rowItem === null || rowItem === void 0 ? void 0 : rowItem.uid) || (rowItem === null || rowItem === void 0 ? void 0 : rowItem.id) || null, actionName: actionItem.name, theme: this.theme, iconName: actionItem.icon, iconColor: actionItem.color, iconSize: actionItem.size, background: actionItem.background, "accessible-label": `${rowItem.actionDescription || ""} ${languageUtils.getLocaleString(actionItem.label)} ` }));
157
+ })));
158
+ }
159
+ renderTableBody() {
160
+ const columns = this.getSortedColumns();
161
+ const rowSortOrder = this.getRowSortOrder();
162
+ const sortedRows = [...this.rows].sort(jsUtils.fieldSorter(rowSortOrder));
163
+ // return a tbody with rows for each item in sortedRows
164
+ return sortedRows.map((row, index$1) => (index.h("tr", { class: {
165
+ "duet-table-action-row": !!this.actions,
166
+ "duet-editable-table-row": true,
167
+ [`duet-editable-table-row-${this.groupId}`]: true,
168
+ }, "data-meta": JSON.stringify(row.meta) }, columns.map(column => {
169
+ //if we don't have any data for this column, try getting an item instead (for backwards compatibility
170
+ const value = row[column.key] ? row[column.key] : row.item;
171
+ if (column.display !== false) {
172
+ return index.h(TableData, { data: value, groupId: this.groupId });
173
+ }
174
+ }), this.actions && this.renderActions(row, index$1))));
175
+ }
176
+ /**
177
+ * Render Methods
178
+ */
179
+ render() {
180
+ return (index.h(index.Host, { class: {
181
+ [`duet-editable-table-${this.variation}`]: true,
182
+ "duet-editable-table": true,
183
+ [`duet-editable-table-${this.theme}`]: true,
184
+ // sticky only valid when in regular table layout
185
+ "duet-editable-table-scrollable": this.breakpoint === "none-scrollable",
186
+ "duet-editable-table-sortable": this.sortable,
187
+ "duet-editable-table-actions": !!this.actions,
188
+ "duet-m-0": this.margin === "none",
189
+ "duet-theme-turva": this.theme === "turva",
190
+ } }, index.h("duet-table", { class: "duet-editable-table-table", sticky: this.sticky, stickyDistance: this.stickyDistance, margin: this.margin, theme: this.theme, variation: this.variation, breakpoint: this.breakpoint, "hide-head-visually": this.hideHeadVisually }, index.h("table", { role: this.accessibleRole }, index.h("caption", null, index.h("slot", { name: "tcaption" })), index.h("thead", null, this.hasHeadSlotFirst && (index.h("tr", null, index.h("td", { class: "duet-editable-table-actions-menu", colSpan: 99 }, index.h("slot", { name: "thead-first" })))), this.renderTableHeader(), this.hasHeadSlotLast && (index.h("tr", null, index.h("td", { class: "duet-editable-table-actions-menu", colSpan: 99 }, index.h("slot", { name: "thead-last" }))))), index.h("tbody", null, this.renderTableBody()), this.hasFootSlot && (index.h("tfoot", null, index.h("tr", null, index.h("td", { class: "duet-editable-table-footer-menu", colSpan: 99 }, index.h("slot", { name: "tfoot" })))))))));
153
191
  }
154
- // iterate through actions and add them in the sidebar
155
- return (index.h("td", { class: "duet-text-right" }, this.actions.map(actionItem => {
156
- return (index.h("duet-action-button", { actionMeta: Object.assign({}, (rowItem === null || rowItem === void 0 ? void 0 : rowItem.meta) || {}, { index: index$1 }), actionId: (rowItem === null || rowItem === void 0 ? void 0 : rowItem.uid) || (rowItem === null || rowItem === void 0 ? void 0 : rowItem.id) || null, actionName: actionItem.name, theme: this.theme, iconName: actionItem.icon, iconColor: actionItem.color, iconSize: actionItem.size, background: actionItem.background, "accessible-label": `${rowItem.actionDescription || ""} ${languageUtils.getLocaleString(actionItem.label)} ` }));
157
- })));
158
- }
159
- renderTableBody() {
160
- const columns = this.getSortedColumns();
161
- const rowSortOrder = this.getRowSortOrder();
162
- const sortedRows = [...this.rows].sort(jsUtils.fieldSorter(rowSortOrder));
163
- // return a tbody with rows for each item in sortedRows
164
- return sortedRows.map((row, index$1) => (index.h("tr", { class: {
165
- "duet-table-action-row": !!this.actions,
166
- "duet-editable-table-row": true,
167
- [`duet-editable-table-row-${this.groupId}`]: true,
168
- }, "data-meta": JSON.stringify(row.meta) }, columns.map(column => {
169
- //if we don't have any data for this column, try getting an item instead (for backwards compatibility
170
- const value = row[column.key] ? row[column.key] : row.item;
171
- if (column.display !== false) {
172
- return index.h(TableData, { data: value, groupId: this.groupId });
173
- }
174
- }), this.actions && this.renderActions(row, index$1))));
175
- }
176
- /**
177
- * Render Methods
178
- */
179
- render() {
180
- return (index.h(index.Host, { class: {
181
- [`duet-editable-table-${this.variation}`]: true,
182
- "duet-editable-table": true,
183
- [`duet-editable-table-${this.theme}`]: true,
184
- // sticky only valid when in regular table layout
185
- "duet-editable-table-scrollable": this.breakpoint === "none-scrollable",
186
- "duet-editable-table-sortable": this.sortable,
187
- "duet-editable-table-actions": !!this.actions,
188
- "duet-m-0": this.margin === "none",
189
- "duet-theme-turva": this.theme === "turva",
190
- } }, index.h("duet-table", { class: "duet-editable-table-table", sticky: this.sticky, stickyDistance: this.stickyDistance, margin: this.margin, theme: this.theme, variation: this.variation, breakpoint: this.breakpoint, "hide-head-visually": this.hideHeadVisually }, index.h("table", { role: this.accessibleRole }, index.h("caption", null, index.h("slot", { name: "tcaption" })), index.h("thead", null, this.hasHeadSlotFirst && (index.h("tr", null, index.h("td", { class: "duet-editable-table-actions-menu", colSpan: 99 }, index.h("slot", { name: "thead-first" })))), this.renderTableHeader(), this.hasHeadSlotLast && (index.h("tr", null, index.h("td", { class: "duet-editable-table-actions-menu", colSpan: 99 }, index.h("slot", { name: "thead-last" }))))), index.h("tbody", null, this.renderTableBody()), this.hasFootSlot && (index.h("tfoot", null, index.h("tr", null, index.h("td", { class: "duet-editable-table-footer-menu", colSpan: 99 }, index.h("slot", { name: "tfoot" })))))))));
191
- }
192
- get element() { return index.getElement(this); }
192
+ get element() { return index.getElement(this); }
193
193
  };
194
194
  DuetEditableTable.style = duetEditableTableCss;
195
195
 
196
196
  const duetTableCss = "duet-table{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;margin-bottom:20px !important;display:block;font-variant-numeric:tabular-nums}duet-table table,duet-table thead,duet-table tbody,duet-table tfoot,duet-table th,duet-table td,duet-table tr{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}duet-table.duet-m-0{margin:0 !important}duet-table table{width:100%;font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";font-size:1rem;text-align:left;border-spacing:0;border-collapse:separate}duet-table.duet-table-hide-head-visually.duet-table-hide-head-visually thead,duet-table.duet-table-hide-head-visually.duet-table-hide-head-visually thead *{position:absolute !important;top:0;width:1px !important;height:1px !important;padding:0 !important;overflow:hidden !important;clip:rect(1px, 1px, 1px, 1px) !important;border:0 !important}duet-table.duet-theme-turva table{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"}duet-table td{-webkit-hyphens:auto;hyphens:auto;color:rgb(0, 41, 77)}duet-table.duet-theme-turva td{color:rgb(23, 28, 58)}duet-table th{font-weight:600;line-height:1.25;color:rgb(101, 119, 135);text-align:left}duet-table.duet-theme-turva th{color:rgb(116, 116, 117)}duet-table tbody th{font-weight:600;color:rgb(0, 41, 77)}duet-table.duet-theme-turva tbody th{color:rgb(23, 28, 58)}duet-table .duet-table-action-row td:last-child{justify-self:end;padding-right:20px !important;white-space:nowrap}duet-table span.duet-table-cell-heading{display:none}.duet-table-flattened table,.duet-table-flattened thead,.duet-table-flattened tbody,.duet-table-flattened tfoot,.duet-table-flattened th,.duet-table-flattened td,.duet-table-flattened tr{display:block}.duet-table-flattened thead tr{position:absolute !important;top:0;width:1px !important;height:1px !important;padding:0 !important;overflow:hidden !important;clip:rect(1px, 1px, 1px, 1px) !important;border:0 !important}.duet-table-flattened td{line-height:1.25}.duet-table-flattened td:not(:last-child){margin-bottom:16px !important}.duet-table-flattened td span.duet-table-cell-heading{margin-bottom:4px !important;display:block;font-size:1rem;font-weight:600;color:rgb(0, 41, 77)}.duet-table-flattened.duet-theme-turva td span.duet-table-cell-heading{color:rgb(23, 28, 58)}.duet-table-flattened tbody td,.duet-table-flattened tbody th,.duet-table-flattened tfoot td{padding:0 !important;text-align:left !important}.duet-table-flattened tbody th{font-weight:600;line-height:1.25;color:rgb(101, 119, 135);text-align:left}.duet-table-sticky thead th{position:sticky;top:0;background:rgb(255, 255, 255)}.duet-table-striped td,.duet-table-striped th{padding:20px !important}@media (max-width: 35.9375em){.duet-table-striped td,.duet-table-striped th{padding:20px 12px !important}}.duet-table-striped tbody th{background:rgb(255, 255, 255)}.duet-table-striped.duet-table-sticky thead th{border-bottom:1px solid rgb(225, 227, 230)}.duet-table-striped.duet-table-sticky.duet-theme-turva thead th{border-bottom-color:rgb(228, 228, 230)}.duet-table-striped tbody:not(:first-of-type) th{padding-top:40px !important}.duet-table-striped tbody:only-of-type tr:nth-of-type(odd){background:rgba(0, 80, 128, 0.04)}.duet-table-striped.duet-theme-turva tbody:only-of-type tr:nth-of-type(odd){background:rgba(23, 28, 58, 0.04)}.duet-table-striped tbody:not(:only-of-type) tr:nth-of-type(even){background:rgba(0, 80, 128, 0.04)}.duet-table-striped.duet-theme-turva tbody:not(:only-of-type) tr:nth-of-type(even){background:rgba(23, 28, 58, 0.04)}.duet-table-striped tfoot td{border-top:1px solid rgb(225, 227, 230)}.duet-table-striped.duet-theme-turva tfoot td{border-top-color:rgb(228, 228, 230)}.duet-table-striped.duet-table-flattened tbody:not(:first-of-type) th{padding-top:20px !important}.duet-table-striped.duet-table-flattened tr{padding:20px !important}.duet-table-striped.duet-table-flattened tfoot td{border-top:0}.duet-table-striped.duet-table-flattened tfoot tr{border-top:1px solid rgb(225, 227, 230)}.duet-table-striped.duet-table-flattened.duet-theme-turva tfoot tr{border-top-color:rgb(228, 228, 230)}.duet-table-fixed th,.duet-table-minimal th,.duet-table-plain th{padding:16px !important;border-bottom:1px solid rgb(101, 119, 135)}.duet-table-fixed th:first-child,.duet-table-minimal th:first-child,.duet-table-plain th:first-child{padding-left:0 !important}.duet-table-fixed th:last-child,.duet-table-minimal th:last-child,.duet-table-plain th:last-child{padding-right:0 !important}.duet-theme-turva.duet-table-fixed th,.duet-theme-turva.duet-table-minimal th,.duet-theme-turva.duet-table-plain th{border-bottom-color:rgb(68, 68, 69)}.duet-table-fixed tbody th,.duet-table-minimal tbody th,.duet-table-plain tbody th{padding-top:40px !important;border-bottom-color:rgb(225, 227, 230)}.duet-theme-turva.duet-table-fixed tbody th,.duet-theme-turva.duet-table-minimal tbody th,.duet-theme-turva.duet-table-plain tbody th{border-bottom-color:rgb(228, 228, 230)}.duet-table-fixed td,.duet-table-minimal td,.duet-table-plain td{padding:16px !important}.duet-table-fixed td:first-child,.duet-table-minimal td:first-child,.duet-table-plain td:first-child{padding-left:0 !important}.duet-table-fixed td:last-child,.duet-table-minimal td:last-child,.duet-table-plain td:last-child{padding-right:0 !important}.duet-table-fixed tbody td,.duet-table-minimal tbody td,.duet-table-plain tbody td{border-bottom:1px solid rgb(225, 227, 230)}.duet-theme-turva.duet-table-fixed tbody td,.duet-theme-turva.duet-table-minimal tbody td,.duet-theme-turva.duet-table-plain tbody td{border-bottom-color:rgb(228, 228, 230)}.duet-table-flattened.duet-table-fixed tbody:first-of-type th,.duet-table-flattened.duet-table-minimal tbody:first-of-type th,.duet-table-flattened.duet-table-plain tbody:first-of-type th{padding-top:0 !important}.duet-table-flattened.duet-table-fixed td,.duet-table-flattened.duet-table-minimal td,.duet-table-flattened.duet-table-plain td,.duet-table-flattened.duet-table-fixed tbody th,.duet-table-flattened.duet-table-minimal tbody th,.duet-table-flattened.duet-table-plain tbody th{border-bottom:0}.duet-table-flattened.duet-table-fixed tr,.duet-table-flattened.duet-table-minimal tr,.duet-table-flattened.duet-table-plain tr{padding:20px 0 !important}.duet-table-flattened.duet-table-fixed tbody th,.duet-table-flattened.duet-table-minimal tbody th,.duet-table-flattened.duet-table-plain tbody th{padding-top:20px !important}.duet-table-flattened.duet-table-fixed tfoot td,.duet-table-flattened.duet-table-minimal tfoot td,.duet-table-flattened.duet-table-plain tfoot td{margin-bottom:4px !important}.duet-table-flattened.duet-table-fixed tbody:not(:only-of-type) tr:first-child,.duet-table-flattened.duet-table-minimal tbody:not(:only-of-type) tr:first-child,.duet-table-flattened.duet-table-plain tbody:not(:only-of-type) tr:first-child{border-bottom:0}.duet-table-plain.duet-table-flattened tbody tr{border-bottom:1px solid rgb(225, 227, 230)}.duet-table-plain.duet-table-flattened.duet-theme-turva tbody tr{border-bottom-color:rgb(228, 228, 230)}.duet-table-minimal tbody tr,.duet-table-minimal tbody tr td{vertical-align:top;border-bottom:0 none}.duet-table-minimal tbody tr:last-of-type,.duet-table-minimal tbody tr:last-of-type td{border-bottom:1px solid rgb(225, 227, 230)}.duet-table-minimal.duet-table-flattened tbody tr,.duet-table-minimal.duet-table-flattened tbody tr td{border-bottom:0 none}.duet-table-minimal.duet-table-flattened tbody tr td[data-heading]::before{display:none}.duet-table-minimal.duet-table-flattened tfoot{border-top:1px solid rgb(225, 227, 230)}.duet-table-minimal.duet-table-flattened.duet-theme-turva tfoot{border-top-color:rgb(228, 228, 230)}.duet-table-fixed table{table-layout:fixed}.duet-table-fixed tbody tr,.duet-table-fixed tbody tr td,.duet-table-fixed tbody tr td:first-child{padding:4px !important;vertical-align:text-bottom;border-bottom:0 none}.duet-table-fixed thead{display:none}.duet-table-fixed tbody tr,.duet-table-fixed tbody tr td{border-bottom:0 none}.duet-table-fixed:not(.duet-table-flattened) tfoot{border-top:1px solid rgb(225, 227, 230)}.duet-table-fixed:not(.duet-table-flattened).duet-theme-turva tfoot{border-top-color:rgb(228, 228, 230)}.duet-table-scrollable{position:relative;width:100%;overflow-x:auto;background:linear-gradient(90deg, #fff 0%, rgba(255, 255, 255, 0)), linear-gradient(-90deg, #fff 0%, rgba(255, 255, 255, 0)) 100% 0, radial-gradient(farthest-side at 0% 50%, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0)), radial-gradient(farthest-side at 100% 50%, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0)) 100% 0%;background-repeat:no-repeat;background-attachment:local, local, scroll, scroll;background-size:100px 100%, 100px 100%, 12px 100%, 12px 100%}.duet-table-selected-column{background:rgba(0, 119, 179, 0.08)}.duet-theme-turva .duet-table-selected-column{background:rgba(68, 68, 69, 0.08)}.duet-table-sortable tbody tr td:first-child,.duet-table-sortable thead tr th:first-child{padding:20px}.duet-table-sortable:not(.duet-table-flattened) tfoot{border-top:1px solid rgb(225, 227, 230)}.duet-table-sortable:not(.duet-table-flattened).duet-theme-turva tfoot{border-top-color:rgb(228, 228, 230)}.duet-table-actions table{table-layout:auto}.duet-table-actions thead th:last-child{width:1px;white-space:nowrap}.duet-editable-table-table.duet-table-flattened tr{display:grid;grid-template-columns:repeat(2, 1fr);grid-auto-rows:auto;gap:10px}.duet-editable-table-table.duet-table-flattened tr.duet-table-action-row td:last-child::before{padding:0;content:\"\"}.duet-editable-table-table.duet-table-flattened td{grid-column:1/2}.duet-editable-table-table.duet-table-flattened td:first-child{grid-row:1;grid-column:1}.duet-editable-table-table.duet-table-flattened td:last-child{grid-row:1;grid-column:2}";
197
197
 
198
198
  const stickyTopValues = {
199
- none: 0,
200
- "with-links": parseFloat(tokens_module.sizeNavigation) * 16,
201
- "without-links": parseFloat(tokens_module.sizeHeader) * 16,
199
+ none: 0,
200
+ "with-links": parseFloat(tokens_module.sizeNavigation) * 16, // convert rem -> px
201
+ "without-links": parseFloat(tokens_module.sizeHeader) * 16,
202
202
  };
203
203
  const DuetTable = class {
204
- constructor(hostRef) {
205
- index.registerInstance(this, hostRef);
206
- this.headingSelector = "thead tr > :not(*.duet-editable-table-actions-menu)";
207
- this.handleMediaQueryChange = (mq) => {
208
- this.matchesBreakpoint = tokenUtils.breakpointTokensUpTo.includes(this.breakpoint) ? !mq.matches : mq.matches;
209
- };
210
- this.matchesBreakpoint = true;
211
- this.language = languageUtils.getLanguage();
212
- this.theme = undefined;
213
- this.margin = "auto";
214
- this.variation = "striped";
215
- this.sticky = false;
216
- this.stickyDistance = "with-links";
217
- this.breakpoint = "small";
218
- this.hideHeadVisually = false;
219
- }
220
- watchLanguageStateHandler(newValue, oldValue) {
221
- if (newValue !== oldValue) {
222
- setTimeout(() => this.copyHeadingsToCells(), 50);
204
+ constructor(hostRef) {
205
+ index.registerInstance(this, hostRef);
206
+ this.headingSelector = "thead tr > :not(*.duet-editable-table-actions-menu)";
207
+ this.handleMediaQueryChange = (mq) => {
208
+ this.matchesBreakpoint = tokenUtils.breakpointTokensUpTo.includes(this.breakpoint) ? !mq.matches : mq.matches;
209
+ };
210
+ this.matchesBreakpoint = true;
211
+ this.language = languageUtils.getLanguage();
212
+ this.theme = undefined;
213
+ this.margin = "auto";
214
+ this.variation = "striped";
215
+ this.sticky = false;
216
+ this.stickyDistance = "with-links";
217
+ this.breakpoint = "small";
218
+ this.hideHeadVisually = false;
223
219
  }
224
- }
225
- connectedCallback() {
226
- const token = this.breakpoint === "none" || this.breakpoint === "none-scrollable" ? "all" : tokenUtils.breakpointToToken[this.breakpoint];
227
- this.mq = matchMedia(token);
228
- this.mq.addEventListener("change", jsUtils.debounce(this.handleMediaQueryChange, 50));
229
- this.handleMediaQueryChange(this.mq);
230
- this.observer = new MutationObserver(() => jsUtils.debounce(this.copyHeadingsToCells(), 50));
231
- this.observer.observe(this.element, {
232
- childList: true,
233
- subtree: true,
234
- });
235
- }
236
- componentWillLoad() {
237
- themeableComponent.inheritGlobalTheme(this);
238
- this.copyHeadingsToCells();
239
- if (this.sticky && this.breakpoint === "none-scrollable") {
240
- console.warn(`[DUET WARNING]: sticky and breakpoint="none-scrollable" are incompatible. Scrollable takes precedence`);
220
+ watchLanguageStateHandler(newValue, oldValue) {
221
+ if (newValue !== oldValue) {
222
+ setTimeout(() => this.copyHeadingsToCells(), 50);
223
+ }
241
224
  }
242
- if (this.sticky) {
243
- const stickyTop = stickyTopValues[this.stickyDistance];
244
- const headingElements = this.element.querySelectorAll(this.headingSelector);
245
- headingElements.forEach(th => (th.style.top = `${stickyTop}px`));
225
+ connectedCallback() {
226
+ const token = this.breakpoint === "none" || this.breakpoint === "none-scrollable" ? "all" : tokenUtils.breakpointToToken[this.breakpoint];
227
+ this.mq = matchMedia(token);
228
+ this.mq.addEventListener("change", jsUtils.debounce(this.handleMediaQueryChange, 50));
229
+ this.handleMediaQueryChange(this.mq);
230
+ this.observer = new MutationObserver(() => jsUtils.debounce(this.copyHeadingsToCells(), 50));
231
+ this.observer.observe(this.element, {
232
+ childList: true,
233
+ subtree: true,
234
+ });
246
235
  }
247
- }
248
- componentDidLoad() {
249
- // this clears all pending mutations,
250
- // that way we avoid dealing with any initial changes
251
- // and only get genuine mutations as rows are added/removed
252
- this.observer ? this.observer.takeRecords() : null;
253
- languageUtils.connectLanguageChangeObserver(this);
254
- }
255
- disconnectedCallback() {
256
- this.observer.disconnect();
257
- this.observer = null;
258
- this.mq.removeListener(this.handleMediaQueryChange);
259
- this.mq = null;
260
- this.matchesBreakpoint = true;
261
- languageUtils.disconnectLanguageChangeObserver(this);
262
- }
263
- /**
264
- * Local methods.
265
- */
266
- copyHeadingsToCells() {
267
- const headingElements = this.element.querySelectorAll(this.headingSelector);
268
- const rowElements = this.element.querySelectorAll("tbody tr");
269
- const headings = Array.from(headingElements).map(th => th.textContent.trim());
270
- rowElements.forEach(tr => {
271
- tr.querySelectorAll("td").forEach((td, i) => {
272
- if (headings[i]) {
273
- const previousSpan = td.querySelector(".duet-table-cell-heading");
274
- if (!previousSpan || previousSpan.textContent !== headings[i]) {
275
- previousSpan === null || previousSpan === void 0 ? void 0 : previousSpan.remove();
276
- const span = document.createElement("span");
277
- span.textContent = headings[i];
278
- span.classList.add("duet-table-cell-heading");
279
- span.setAttribute("aria-hidden", "true");
280
- span.inert = true;
281
- td.prepend(span);
282
- }
236
+ componentWillLoad() {
237
+ themeableComponent.inheritGlobalTheme(this);
238
+ this.copyHeadingsToCells();
239
+ if (this.sticky && this.breakpoint === "none-scrollable") {
240
+ console.warn(`[DUET WARNING]: sticky and breakpoint="none-scrollable" are incompatible. Scrollable takes precedence`);
283
241
  }
284
- });
285
- });
286
- }
287
- render() {
288
- return (index.h(index.Host, { class: {
289
- [`duet-table-${this.variation}`]: true,
290
- "duet-table-flattened": !this.matchesBreakpoint,
291
- // sticky only valid when in regular table layout
292
- "duet-table-sticky": this.matchesBreakpoint && this.sticky,
293
- "duet-table-scrollable": this.breakpoint === "none-scrollable",
294
- "duet-m-0": this.margin === "none",
295
- "duet-theme-turva": this.theme === "turva",
296
- "duet-table-hide-head-visually": this.hideHeadVisually,
297
- } }, index.h("slot", null)));
298
- }
299
- get element() { return index.getElement(this); }
300
- static get watchers() { return {
301
- "language": ["watchLanguageStateHandler"]
302
- }; }
242
+ if (this.sticky) {
243
+ const stickyTop = stickyTopValues[this.stickyDistance];
244
+ const headingElements = this.element.querySelectorAll(this.headingSelector);
245
+ headingElements.forEach(th => (th.style.top = `${stickyTop}px`));
246
+ }
247
+ }
248
+ componentDidLoad() {
249
+ // this clears all pending mutations,
250
+ // that way we avoid dealing with any initial changes
251
+ // and only get genuine mutations as rows are added/removed
252
+ this.observer ? this.observer.takeRecords() : null;
253
+ languageUtils.connectLanguageChangeObserver(this);
254
+ }
255
+ disconnectedCallback() {
256
+ this.observer.disconnect();
257
+ this.observer = null;
258
+ this.mq.removeListener(this.handleMediaQueryChange);
259
+ this.mq = null;
260
+ this.matchesBreakpoint = true;
261
+ languageUtils.disconnectLanguageChangeObserver(this);
262
+ }
263
+ /**
264
+ * Local methods.
265
+ */
266
+ copyHeadingsToCells() {
267
+ const headingElements = this.element.querySelectorAll(this.headingSelector);
268
+ const rowElements = this.element.querySelectorAll("tbody tr");
269
+ const headings = Array.from(headingElements).map(th => th.textContent.trim());
270
+ rowElements.forEach(tr => {
271
+ tr.querySelectorAll("td").forEach((td, i) => {
272
+ if (headings[i]) {
273
+ const previousSpan = td.querySelector(".duet-table-cell-heading");
274
+ if (!previousSpan || previousSpan.textContent !== headings[i]) {
275
+ previousSpan === null || previousSpan === void 0 ? void 0 : previousSpan.remove();
276
+ const span = document.createElement("span");
277
+ span.textContent = headings[i];
278
+ span.classList.add("duet-table-cell-heading");
279
+ span.setAttribute("aria-hidden", "true");
280
+ span.inert = true;
281
+ td.prepend(span);
282
+ }
283
+ }
284
+ });
285
+ });
286
+ }
287
+ render() {
288
+ return (index.h(index.Host, { class: {
289
+ [`duet-table-${this.variation}`]: true,
290
+ "duet-table-flattened": !this.matchesBreakpoint,
291
+ // sticky only valid when in regular table layout
292
+ "duet-table-sticky": this.matchesBreakpoint && this.sticky,
293
+ "duet-table-scrollable": this.breakpoint === "none-scrollable",
294
+ "duet-m-0": this.margin === "none",
295
+ "duet-theme-turva": this.theme === "turva",
296
+ "duet-table-hide-head-visually": this.hideHeadVisually,
297
+ } }, index.h("slot", null)));
298
+ }
299
+ get element() { return index.getElement(this); }
300
+ static get watchers() { return {
301
+ "language": ["watchLanguageStateHandler"]
302
+ }; }
303
303
  };
304
304
  DuetTable.style = duetTableCss;
305
305
 
@@ -451,1042 +451,1042 @@ const errorCodes = [
451
451
  ];
452
452
 
453
453
  const headerAriaLabel = {
454
- fi: "Liiteluettelo",
455
- sv: "Lista över bilagor",
456
- en: "Attachments list",
454
+ fi: "Liiteluettelo",
455
+ sv: "Lista över bilagor",
456
+ en: "Attachments list",
457
457
  };
458
458
  const UploadItemHeader = ({ label, categoryLabel }) => {
459
- return (index.h("div", { class: "items-header", tabindex: "0", "aria-label": languageUtils.getLocaleString(headerAriaLabel) },
460
- categoryLabel && (index.h("duet-heading", { class: "category-header", border: "solid", color: "gray-darker", level: "h3", "visual-level": "h6", weight: "semibold", margin: "none", "aria-hidden": "true" }, languageUtils.getLocaleString(categoryLabel))),
461
- index.h("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" }, languageUtils.getLocaleString(label))));
459
+ return (index.h("div", { class: "items-header", tabindex: "-1", "aria-label": languageUtils.getLocaleString(headerAriaLabel) },
460
+ categoryLabel && (index.h("duet-heading", { class: "category-header", border: "solid", color: "gray-darker", level: "h3", "visual-level": "h6", weight: "semibold", margin: "none", "aria-hidden": "true" }, languageUtils.getLocaleString(categoryLabel))),
461
+ index.h("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" }, languageUtils.getLocaleString(label))));
462
462
  };
463
463
 
464
464
  const validateFileExtension = (name, allowedExtensions) => {
465
- if (!allowedExtensions) {
466
- return true;
467
- }
468
- const ext = name.split(".");
469
- const validExtension = allowedExtensions.split(",");
470
- const extension = ext[ext.length - 1];
471
- return validExtension.includes(extension);
465
+ if (!allowedExtensions) {
466
+ return true;
467
+ }
468
+ const ext = name.split(".");
469
+ const validExtension = allowedExtensions.split(",");
470
+ const extension = ext[ext.length - 1];
471
+ return validExtension.includes(extension);
472
472
  };
473
473
  const validateFileMime = (type, allowedMimetypes) => {
474
- if (!allowedMimetypes || !type) {
475
- return true;
476
- }
477
- const validMimeTypes = allowedMimetypes.split(",");
478
- let valid = false;
479
- validMimeTypes.forEach(mimeType => {
480
- const allowedTypes = mimeType.split("/");
481
- const fileType = type.split("/");
482
- if (allowedTypes[0] === fileType[0] && (allowedTypes[1] === fileType[1] || allowedTypes[1] === "*")) {
483
- valid = true;
474
+ if (!allowedMimetypes || !type) {
475
+ return true;
484
476
  }
485
- });
486
- return valid;
477
+ const validMimeTypes = allowedMimetypes.split(",");
478
+ let valid = false;
479
+ validMimeTypes.forEach(mimeType => {
480
+ const allowedTypes = mimeType.split("/");
481
+ const fileType = type.split("/");
482
+ if (allowedTypes[0] === fileType[0] && (allowedTypes[1] === fileType[1] || allowedTypes[1] === "*")) {
483
+ valid = true;
484
+ }
485
+ });
486
+ return valid;
487
487
  };
488
488
  const validateFileSize = (size, maxBytes) => {
489
- if (!maxBytes || !size) {
490
- return true;
491
- }
492
- return maxBytes >= size;
489
+ if (!maxBytes || !size) {
490
+ return true;
491
+ }
492
+ return maxBytes >= size;
493
493
  };
494
494
  const validateFile = (item, validators, errorCodes) => {
495
- const { allowedMimetypes, allowedExtensions, maxBytes } = validators;
496
- let valid = false;
497
- let errorMessage = errorcodes_utils.getError("default", errorCodes);
498
- if (item) {
499
- const { name, type, size } = item;
500
- const mime = validateFileMime(type, allowedMimetypes);
501
- const ext = allowedExtensions === "all" ||
502
- allowedExtensions === "" ||
503
- allowedExtensions === " " ||
504
- allowedExtensions === undefined
505
- ? true
506
- : validateFileExtension(name.toLowerCase(), allowedExtensions);
507
- const bytes = validateFileSize(size, maxBytes);
508
- if (!mime) {
509
- errorMessage = errorcodes_utils.getError("duet-upload-101", errorCodes);
510
- }
511
- if (!ext) {
512
- errorMessage = errorcodes_utils.getError("duet-upload-100", errorCodes);
495
+ const { allowedMimetypes, allowedExtensions, maxBytes } = validators;
496
+ let valid = false;
497
+ let errorMessage = errorcodes_utils.getError("default", errorCodes);
498
+ if (item) {
499
+ const { name, type, size } = item;
500
+ const mime = validateFileMime(type, allowedMimetypes);
501
+ const ext = allowedExtensions === "all" ||
502
+ allowedExtensions === "" ||
503
+ allowedExtensions === " " ||
504
+ allowedExtensions === undefined
505
+ ? true
506
+ : validateFileExtension(name.toLowerCase(), allowedExtensions);
507
+ const bytes = validateFileSize(size, maxBytes);
508
+ if (!mime) {
509
+ errorMessage = errorcodes_utils.getError("duet-upload-101", errorCodes);
510
+ }
511
+ if (!ext) {
512
+ errorMessage = errorcodes_utils.getError("duet-upload-100", errorCodes);
513
+ }
514
+ if (!bytes) {
515
+ errorMessage = errorcodes_utils.getError("duet-upload-201", errorCodes);
516
+ }
517
+ valid = mime && ext && bytes;
513
518
  }
514
- if (!bytes) {
515
- errorMessage = errorcodes_utils.getError("duet-upload-201", errorCodes);
519
+ else {
520
+ valid = false;
516
521
  }
517
- valid = mime && ext && bytes;
518
- }
519
- else {
520
- valid = false;
521
- }
522
- return {
523
- valid,
524
- errorMessage: valid ? undefined : languageUtils.getLocaleString(errorMessage.message),
525
- errorSystem: valid ? undefined : errorMessage.system_message,
526
- errorType: valid ? undefined : errorMessage.type,
527
- };
522
+ return {
523
+ valid,
524
+ errorMessage: valid ? undefined : languageUtils.getLocaleString(errorMessage.message),
525
+ errorSystem: valid ? undefined : errorMessage.system_message,
526
+ errorType: valid ? undefined : errorMessage.type,
527
+ };
528
528
  };
529
529
  const validateTotalSizeIsAboveMax = (filelist, maxTotalBytes) => {
530
- let total = 0;
531
- if (maxTotalBytes) {
532
- filelist.forEach(item => {
533
- if (item.valid && item.size) {
534
- total += item.size;
535
- }
536
- });
537
- if (total >= maxTotalBytes) {
538
- return true;
530
+ let total = 0;
531
+ if (maxTotalBytes) {
532
+ filelist.forEach(item => {
533
+ if (item.valid && item.size) {
534
+ total += item.size;
535
+ }
536
+ });
537
+ if (total >= maxTotalBytes) {
538
+ return true;
539
+ }
539
540
  }
540
- }
541
- return false;
541
+ return false;
542
542
  };
543
543
  const validateTotalAmountIsAboveMax = (filelist, maxFiles) => {
544
- let total = 0;
545
- if (maxFiles) {
546
- filelist.forEach(item => {
547
- if (item.valid) {
548
- total++;
549
- }
550
- });
551
- if (total >= maxFiles) {
552
- return true;
544
+ let total = 0;
545
+ if (maxFiles) {
546
+ filelist.forEach(item => {
547
+ if (item.valid) {
548
+ total++;
549
+ }
550
+ });
551
+ if (total >= maxFiles) {
552
+ return true;
553
+ }
553
554
  }
554
- }
555
- return false;
555
+ return false;
556
556
  };
557
557
  const filesToUploadCountAboveMax = (currentFilesCount, filesToUploadCount, maxFiles) => {
558
- if (currentFilesCount + filesToUploadCount > maxFiles) {
559
- return true;
560
- }
561
- return false;
558
+ if (currentFilesCount + filesToUploadCount > maxFiles) {
559
+ return true;
560
+ }
561
+ return false;
562
562
  };
563
563
  const filesToUploadTotalSizeIsAboveMax = (currentFiles, filesToUpload, maxTotalBytes) => {
564
- let total = 0;
565
- if (maxTotalBytes) {
566
- currentFiles.forEach(item => {
567
- if (item.valid && item.size) {
568
- total += item.size;
569
- }
570
- });
571
- filesToUpload.forEach(item => {
572
- if (item.size) {
573
- total += item.size;
574
- }
575
- });
576
- if (total >= maxTotalBytes) {
577
- return true;
564
+ let total = 0;
565
+ if (maxTotalBytes) {
566
+ currentFiles.forEach(item => {
567
+ if (item.valid && item.size) {
568
+ total += item.size;
569
+ }
570
+ });
571
+ filesToUpload.forEach(item => {
572
+ if (item.size) {
573
+ total += item.size;
574
+ }
575
+ });
576
+ if (total >= maxTotalBytes) {
577
+ return true;
578
+ }
578
579
  }
579
- }
580
- return false;
580
+ return false;
581
581
  };
582
582
 
583
583
  const makeXhrRequest = ({ payload, options, onFailure, onSuccess, onProgress }) => {
584
- // @ts-ignore
585
- const { type = "POST", xhr, uri, argument = null, headers = null } = options;
586
- xhr.open(type, `${uri}${argument || ""}`, true);
587
- const { data, name } = payload;
588
- // headers must be added after open
589
- if (headers) {
590
- Object.keys(headers).forEach(key => {
591
- xhr.setRequestHeader(key, headers[key]);
592
- });
593
- }
594
- if (type === "POST") {
595
- xhr.onreadystatechange = () => {
596
- // Call a function when the state changes.
597
- if (xhr.readyState === XMLHttpRequest.DONE && xhr.status >= 200 && xhr.status < 300) {
598
- // Request finished without errors
599
- onSuccess(xhr, name, xhr.status);
600
- }
601
- if (xhr.readyState === XMLHttpRequest.DONE && xhr.status >= 300 && xhr.status < 999) {
602
- // Request finished with errors
603
- onFailure(xhr, name, xhr.status);
604
- }
605
- };
606
- onProgress(name);
607
- }
608
- xhr.send(data);
609
- return xhr;
584
+ // @ts-ignore
585
+ const { type = "POST", xhr, uri, argument = null, headers = null } = options;
586
+ xhr.open(type, `${uri}${argument || ""}`, true);
587
+ const { data, name } = payload;
588
+ // headers must be added after open
589
+ if (headers) {
590
+ Object.keys(headers).forEach(key => {
591
+ xhr.setRequestHeader(key, headers[key]);
592
+ });
593
+ }
594
+ if (type === "POST") {
595
+ xhr.onreadystatechange = () => {
596
+ // Call a function when the state changes.
597
+ if (xhr.readyState === XMLHttpRequest.DONE && xhr.status >= 200 && xhr.status < 300) {
598
+ // Request finished without errors
599
+ onSuccess(xhr, name, xhr.status);
600
+ }
601
+ if (xhr.readyState === XMLHttpRequest.DONE && xhr.status >= 300 && xhr.status < 999) {
602
+ // Request finished with errors
603
+ onFailure(xhr, name, xhr.status);
604
+ }
605
+ };
606
+ onProgress(name);
607
+ }
608
+ xhr.send(data);
609
+ return xhr;
610
610
  };
611
611
 
612
612
  const duetUploadCss = "*,*::after,*::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}:host{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}::slotted([slot=header]){margin-bottom:16px}::slotted([slot=fileheader]){margin:16px 0 0 0}::slotted([slot=filefooter]){margin-top:16px}::slotted([slot=uploadfooter]){margin-top:20px}.duet-upload{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}.duet-upload-item-size{font-size:0.75rem;font-weight:400}.duet-upload-filelist{margin-bottom:25px}.duet-upload-filelist-empty{display:flex;align-items:center;justify-content:center;width:100%;height:75px;margin:0 auto;font-size:1rem;font-weight:400;background-color:rgb(245, 248, 250)}.duet-upload-filelist-empty-label{font-size:1rem;font-weight:400}.duet-upload-editable-table-header-hidden{display:none}.duet-upload-editable-table tbody .duet-upload-editable-table-data{padding:0 !important;border:0}.duet-upload-editable-table duet-editable-table tfoot,.duet-upload-editable-table duet-editable-table thead{display:none}.duet-upload-editable-table duet-editable-table .duet-editable-table-content{padding-right:0 !important;padding-left:0 !important}.duet-upload-editable-table duet-editable-table duet-table .duet-table-action-row td{padding:1rem 0 !important}.duet-upload-editable-table duet-editable-table duet-table .duet-table-action-row td:last-child{padding-right:0 !important}.duet-upload-editable-table duet-editable-table .duet-editable-table-row-inprogress,.duet-upload-editable-table duet-editable-table .duet-editable-table-row-pending{position:relative}.duet-upload-editable-table duet-editable-table .duet-editable-table-row-inprogress duet-progress,.duet-upload-editable-table duet-editable-table .duet-editable-table-row-pending duet-progress{position:absolute;bottom:0;width:100%}.duet-upload-editable-table duet-editable-table .duet-editable-table-row-inprogress duet-action-button::part(button),.duet-upload-editable-table duet-editable-table .duet-editable-table-row-pending duet-action-button::part(button){border:0}duet-paragraph::part(duet-paragraph){word-break:break-word}duet-editable-table tfoot{display:none}.upload-bottom-caption{margin-top:12px;margin-bottom:16px;line-height:1.4rem}.items-header{display:none;flex-direction:row;margin-bottom:0}@media (min-width: 36em){.items-header{display:flex}}.items-header:not(:last-child),.items-header:not(:first-child){margin-top:12px}.items-header .category-header{width:35%}.items-header .filename-header{width:65%}.items-header .filename-header.no-category{width:100%}.upload-item-row{display:flex;flex-direction:column;gap:16px;align-content:center;align-items:center;padding:16px 0 16px 0;border-bottom:1px solid rgb(225, 227, 230)}@media (min-width: 36em){.upload-item-row{flex-direction:row;gap:10px}}.upload-item-row .item-categories{width:100%}@media (min-width: 36em){.upload-item-row .item-categories{width:35%}}.upload-item-row .item-name{position:relative;bottom:2px;width:100%;text-align:left}@media (min-width: 36em){.upload-item-row .item-name{width:50%}.upload-item-row .item-name.no-category{width:85%}}.upload-item-row .item-categories .heading,.upload-item-row .item-name .heading{display:block}@media (min-width: 36em){.upload-item-row .item-categories .heading,.upload-item-row .item-name .heading{display:none}}.upload-item-row .item-actions{width:100%;margin-left:-8px;text-align:left}@media (min-width: 36em){.upload-item-row .item-actions{width:15%;padding-top:0;margin-left:auto;text-align:right}}.upload-item-row .duet-upload-item-name duet-icon{position:relative;top:4px}.upload-item-row .duet-upload-item-name duet-progress{display:block;margin-top:16px}";
613
613
 
614
614
  const DuetUpload = class {
615
- constructor(hostRef) {
616
- index.registerInstance(this, hostRef);
617
- this.duetChange = index.createEvent(this, "duetChange", 3);
618
- this.duetBlur = index.createEvent(this, "duetBlur", 7);
619
- this.duetFocus = index.createEvent(this, "duetFocus", 7);
620
- this.duetReady = index.createEvent(this, "duetReady", 7);
621
- this.duetDone = index.createEvent(this, "duetDone", 3);
622
- this.duetState = index.createEvent(this, "duetState", 3);
623
- this.duetDelete = index.createEvent(this, "duetDelete", 3);
624
- this.duetCancel = index.createEvent(this, "duetCancel", 3);
625
- this.duetProgress = index.createEvent(this, "duetProgress", 3);
626
- this.duetUpload = index.createEvent(this, "duetUpload", 3);
627
- this.linkClick = index.createEvent(this, "linkClick", 3);
628
- /**
629
- * Own Properties
630
- */
631
- this.buttonId = createId.createID("DuetButton");
632
- this.labelId = createId.createID("DuetLabel");
633
- this.uploadId = createId.createID("DuetUpload");
634
- this.filesInProgress = new Map();
635
- this.fileMaxReached = false;
636
- this.bytesMaxReached = false;
637
- this.filesToUploadExceedsLimit = false;
638
- this.filesToUploadTotalSizeIsAboveMax = false;
639
- this.internalStatusMessageLabel = undefined;
640
- this.itemRefs = new Map();
641
- /**
642
- * Properties
643
- */
644
- this.DefaultGroups = {
645
- inprogress: "inprogress",
646
- success: "success",
647
- pending: "pending",
648
- failure: "failure",
649
- };
650
- this.kick = jsUtils.debounce(() => {
651
- this.tick = Date.now();
652
- }, 30); // will trigger re-render
653
- this.categoryLabel = {
654
- en: "Category",
655
- sv: "Filtyp",
656
- fi: "Tiedostotyyppi",
657
- };
615
+ constructor(hostRef) {
616
+ index.registerInstance(this, hostRef);
617
+ this.duetChange = index.createEvent(this, "duetChange", 3);
618
+ this.duetBlur = index.createEvent(this, "duetBlur", 7);
619
+ this.duetFocus = index.createEvent(this, "duetFocus", 7);
620
+ this.duetReady = index.createEvent(this, "duetReady", 7);
621
+ this.duetDone = index.createEvent(this, "duetDone", 3);
622
+ this.duetState = index.createEvent(this, "duetState", 3);
623
+ this.duetDelete = index.createEvent(this, "duetDelete", 3);
624
+ this.duetCancel = index.createEvent(this, "duetCancel", 3);
625
+ this.duetProgress = index.createEvent(this, "duetProgress", 3);
626
+ this.duetUpload = index.createEvent(this, "duetUpload", 3);
627
+ this.linkClick = index.createEvent(this, "linkClick", 3);
628
+ /**
629
+ * Own Properties
630
+ */
631
+ this.buttonId = createId.createID("DuetButton");
632
+ this.labelId = createId.createID("DuetLabel");
633
+ this.uploadId = createId.createID("DuetUpload");
634
+ this.filesInProgress = new Map();
635
+ this.fileMaxReached = false;
636
+ this.bytesMaxReached = false;
637
+ this.filesToUploadExceedsLimit = false;
638
+ this.filesToUploadTotalSizeIsAboveMax = false;
639
+ this.internalStatusMessageLabel = undefined;
640
+ this.itemRefs = new Map();
641
+ /**
642
+ * Properties
643
+ */
644
+ this.DefaultGroups = {
645
+ inprogress: "inprogress",
646
+ success: "success",
647
+ pending: "pending",
648
+ failure: "failure",
649
+ };
650
+ this.kick = jsUtils.debounce(() => {
651
+ this.tick = Date.now();
652
+ }, 30); // will trigger re-render
653
+ this.categoryLabel = {
654
+ en: "Category",
655
+ sv: "Filtyp",
656
+ fi: "Tiedostotyyppi",
657
+ };
658
+ /**
659
+ * Private functions
660
+ */
661
+ this.listenForActionEvents = () => {
662
+ this.element.addEventListener("duetActionEvent", (e) => {
663
+ const detail = e.detail;
664
+ const { action, id, originalEvent } = detail;
665
+ switch (action) {
666
+ case "delete":
667
+ this.onDelete(id, originalEvent);
668
+ break;
669
+ case "cancel":
670
+ this.onCancel(id, originalEvent);
671
+ break;
672
+ // code block
673
+ }
674
+ });
675
+ };
676
+ this.verifyValidity = () => {
677
+ const { invalid, valid } = this.getFilesAsArray();
678
+ const oldValid = this.valid;
679
+ this.valid = invalid.length === 0 && valid.length !== 0;
680
+ if (this.valid !== oldValid) {
681
+ this.duetState.emit({
682
+ originalEvent: undefined,
683
+ data: { valid: this.valid, from: "componentWillRender" },
684
+ component: "duet-upload",
685
+ });
686
+ }
687
+ };
688
+ this.getGroupFromItemData = (item) => {
689
+ if (item.valid && item.progress === 100) {
690
+ // if the item has a group, move the file to that group instead
691
+ // of into the standard success group
692
+ return this.DefaultGroups.success;
693
+ }
694
+ else if (item.progress > 0 && item.progress !== 100) {
695
+ return this.DefaultGroups.inprogress;
696
+ }
697
+ else if (!item.valid) {
698
+ return this.DefaultGroups.failure;
699
+ }
700
+ else if (item.pending) {
701
+ return this.DefaultGroups.pending;
702
+ }
703
+ else if (item.group) {
704
+ return item.group;
705
+ }
706
+ else {
707
+ return "none";
708
+ }
709
+ };
710
+ this.mapFilesToUploadItems = (data, group, showCategory, filteredActions) => {
711
+ if (group === this.DefaultGroups.success) {
712
+ return (index.h("duet-upload-item", { theme: this.theme, actions: this.getActions(group, filteredActions), type: "success", data: data, showLinks: this.showLinks, linkClickEvent: this.emitEvent ? this.linkClick : undefined, categoryLabel: this.categoryLabel, label: this.uploadedItemsHeaderLabel, showCategory: showCategory, ref: item => {
713
+ this.itemRefs.set(data.uid, item);
714
+ } }));
715
+ }
716
+ else if (group === this.DefaultGroups.inprogress) {
717
+ return (index.h("duet-upload-item", { theme: this.theme, actions: this.getActions(group, filteredActions), type: "inprogress", data: data, showLinks: this.showLinks, categoryLabel: this.categoryLabel, label: this.uploadedItemsHeaderLabel, showCategory: showCategory, ref: item => {
718
+ this.itemRefs.set(data.uid, item);
719
+ } }));
720
+ }
721
+ else if (group === this.DefaultGroups.pending) {
722
+ return (index.h("duet-upload-item", { theme: this.theme, actions: this.getActions(group, filteredActions), type: "pending", data: data, showLinks: this.showLinks, categoryLabel: this.categoryLabel, label: this.uploadedItemsHeaderLabel, showCategory: showCategory, ref: item => {
723
+ this.itemRefs.set(data.uid, item);
724
+ } }));
725
+ }
726
+ else if (group === this.DefaultGroups.failure) {
727
+ return (index.h("duet-upload-item", { theme: this.theme, actions: this.getActions(group, filteredActions), type: "failure", data: data, showLinks: this.showLinks, errorCodes: this.errorCodes, categoryLabel: this.categoryLabel, label: this.uploadedItemsHeaderLabel, showCategory: showCategory, ref: item => {
728
+ this.itemRefs.set(data.uid, item);
729
+ } }));
730
+ }
731
+ else if (data.group) {
732
+ return data.html;
733
+ }
734
+ else {
735
+ return "none";
736
+ }
737
+ };
738
+ this.genHashName = () => Date.now().toString(36) + Math.random();
739
+ this.updateValueInMap = (item, key, value, kick = true) => {
740
+ try {
741
+ const fileItem = this.files.get(item);
742
+ fileItem[key] = value;
743
+ this.files.set(item, fileItem);
744
+ if (this.external && key !== "url") {
745
+ this.trackProgress(item, key === "uploaded");
746
+ }
747
+ }
748
+ catch (e) {
749
+ // if a users tries to update entries on a file that doesn't exist,
750
+ // this will blow up - so we're swallowing the errors here on purpose
751
+ // console.warn("operation on missing items")
752
+ }
753
+ if (kick) {
754
+ this.kick();
755
+ }
756
+ };
757
+ this.updateProgress = (ev, name) => {
758
+ const updateProgressHelper = percentComplete => {
759
+ this.updateValueInMap(name, "progress", percentComplete);
760
+ this.onProgress(name, percentComplete, ev);
761
+ };
762
+ if (ev.lengthComputable) {
763
+ const percentComplete = (ev.loaded / ev.total) * 100;
764
+ updateProgressHelper(percentComplete);
765
+ }
766
+ else {
767
+ console.log("cant read progress");
768
+ }
769
+ };
770
+ this.trackProgress = (name, remove = false) => {
771
+ if (remove) {
772
+ this.filesInProgress.delete(name);
773
+ }
774
+ else {
775
+ this.filesInProgress.set(name, "inprogress");
776
+ }
777
+ if (this.filesInProgress.size === 0) {
778
+ this.onDone();
779
+ }
780
+ };
781
+ this.getFilesAsArray = () => {
782
+ const filesInQueue = [];
783
+ const filesInError = [];
784
+ this.files.forEach(value => {
785
+ if (value.valid && !value.deleted) {
786
+ filesInQueue.push(value);
787
+ }
788
+ else if (!value.valid && !value.deleted) {
789
+ filesInError.push(value);
790
+ }
791
+ });
792
+ return { valid: filesInQueue, invalid: filesInError };
793
+ };
794
+ this.resetFormFields = () => {
795
+ /**
796
+ * You cannot modify a FileList, nor remove single items from it
797
+ * This completely removes all items in the FileList
798
+ * We reset the form fields to always be able to re-upload files
799
+ * and because we handle all uploads and states internally in the component (not relying on native form elements)
800
+ */
801
+ /* TODO: it may be a good idea to just update the list so that this always matches what is in the files map,
802
+ * TODO: this would remove the capability of Re-uploading, unless we can catch and remove the user file from the form filelist before the upload is canceled by the browser
803
+ * TODO: but for now we'll just reset the form fields
804
+ */
805
+ this.nativeInput.value = "";
806
+ };
807
+ this.startUpload = async (ev, metaData = undefined) => {
808
+ // validate that we haven't hit any maxfiles or maxbytes limits before we upload
809
+ const { bytesMaxReached, fileMaxReached } = this.validateTotals();
810
+ if (bytesMaxReached || fileMaxReached) {
811
+ this.kick();
812
+ return;
813
+ }
814
+ this.metaData = metaData;
815
+ this.nativeInput.click();
816
+ this.onUpload(ev, metaData);
817
+ ev.stopPropagation();
818
+ ev.preventDefault();
819
+ return;
820
+ };
821
+ /**
822
+ * Eventlisteners for the XHR requests
823
+ */
824
+ this.transferComplete = name => {
825
+ this.updateValueInMap(name, "progress", 100, false);
826
+ this.trackProgress(name, true);
827
+ };
828
+ this.transferDone = (xhr, name, status) => {
829
+ this.updateValueInMap(name, "status", status, false);
830
+ this.updateValueInMap(name, "uploaded", true, false);
831
+ try {
832
+ const response = JSON.parse(xhr.response);
833
+ this.updateValueInMap(name, "url", response.url);
834
+ }
835
+ catch (e) {
836
+ this.updateValueInMap(name, "url", null);
837
+ console.error("Server did not respond with expected response {url: string}");
838
+ }
839
+ return;
840
+ };
841
+ this.transferDoneWithFailure = (xhr, name, status) => {
842
+ try {
843
+ const { error } = JSON.parse(xhr.response);
844
+ this.updateValueInMap(name, "error", { message: error.message, type: error.type }, false);
845
+ }
846
+ catch (e) {
847
+ console.error("Server did not respond with expected response error:{message: string, type: int}");
848
+ this.updateValueInMap(name, "error", { type: status }, false);
849
+ }
850
+ this.updateValueInMap(name, "valid", false, true);
851
+ };
852
+ this.transferFailed = name => {
853
+ this.updateValueInMap(name, "error", errorcodes_utils.getI18nError("duet-upload-001", this.errorCodes));
854
+ };
855
+ this.transferCanceled = name => {
856
+ this.files.delete(name);
857
+ this.validateTotals(name);
858
+ this.kick();
859
+ };
860
+ this.validateTotals = (name) => {
861
+ const isTotalSizeOverMaxSize = validateTotalSizeIsAboveMax(this.files, this.maxBytesTotal);
862
+ const isTotalFileAmountAboveMax = validateTotalAmountIsAboveMax(this.files, this.maxFiles);
863
+ if (isTotalSizeOverMaxSize && name) {
864
+ this.updateValueInMap(name, "error", errorcodes_utils.getI18nError("duet-upload-202", this.errorCodes), false);
865
+ }
866
+ if (isTotalFileAmountAboveMax && name) {
867
+ this.updateValueInMap(name, "error", errorcodes_utils.getI18nError("duet-upload-301", this.errorCodes), false);
868
+ }
869
+ this.bytesMaxReached = isTotalSizeOverMaxSize;
870
+ this.fileMaxReached = isTotalFileAmountAboveMax;
871
+ return {
872
+ bytesMaxReached: isTotalSizeOverMaxSize,
873
+ fileMaxReached: isTotalFileAmountAboveMax,
874
+ };
875
+ };
876
+ this.uploadFile = async (fileListItem, force = false, key) => {
877
+ if (!force && this.deferUpload) {
878
+ this.updateValueInMap(fileListItem.item.name, "pending", true, false);
879
+ this.updateValueInMap(fileListItem.item.name, "group", "pending", true);
880
+ }
881
+ else if (force) {
882
+ this.updateValueInMap(fileListItem.item.name, "pending", false, false);
883
+ this.updateValueInMap(fileListItem.item.name, "group", undefined, true);
884
+ }
885
+ try {
886
+ if (!this.deferUpload || force) {
887
+ // if all is well AND external file upload handling has not been set, start upload
888
+ const data = new FormData();
889
+ data.append("file", fileListItem.item);
890
+ if (key) {
891
+ data.append("key", key);
892
+ }
893
+ data.append("uid", fileListItem.uid);
894
+ data.append("name", fileListItem.item.name);
895
+ data.append("metadata", JSON.stringify({
896
+ uid: fileListItem.uid,
897
+ url: this.uri,
898
+ size: fileListItem.item.size,
899
+ meta: fileListItem.meta,
900
+ }));
901
+ fileListItem.xhr = await this.makeXHRPostRequest(data);
902
+ }
903
+ }
904
+ catch (e) {
905
+ // in case one of the global maxes have been reached, invalidate the file
906
+ this.updateValueInMap(fileListItem.item.name, "valid", false, false);
907
+ }
908
+ };
909
+ this.uploadPendingFiles = () => {
910
+ for (const [key, value] of Array.from(this.files.entries())) {
911
+ if (value.group === "pending" && value.pending === true) {
912
+ this.uploadFile(value, true, key);
913
+ }
914
+ }
915
+ };
916
+ this.getItemFromUID = (uid) => {
917
+ for (const [key, value] of Array.from(this.files.entries())) {
918
+ if (value.uid === uid) {
919
+ return { value, key };
920
+ }
921
+ }
922
+ return null;
923
+ };
924
+ this.handleExternalUploadButton = (bytesMaxReached, fileMaxReached) => {
925
+ if (this.externalUploadButton) {
926
+ if (bytesMaxReached || fileMaxReached) {
927
+ this.externalUploadButton.disabled = true;
928
+ }
929
+ else {
930
+ this.externalUploadButton.disabled = false;
931
+ }
932
+ }
933
+ };
934
+ this.onDelete = (key, ev) => {
935
+ const item = this.getItemFromUID(key);
936
+ const retrievedKey = item.key;
937
+ const deletedItem = this.files.get(retrievedKey);
938
+ this.files.delete(retrievedKey);
939
+ const { bytesMaxReached, fileMaxReached } = this.validateTotals();
940
+ this.handleExternalUploadButton(bytesMaxReached, fileMaxReached);
941
+ this.kick();
942
+ this.duetDelete.emit({
943
+ originalEvent: ev,
944
+ data: { deletion: deletedItem },
945
+ component: "duet-upload",
946
+ });
947
+ // don't send a xhr request if the item was pending, just remove it from the list
948
+ if (!this.external && !deletedItem.pending) {
949
+ this.makeXHRDeleteRequest(deletedItem);
950
+ }
951
+ this.resetFormFields();
952
+ };
953
+ this.onCancel = (key, ev) => {
954
+ const retrievedKey = this.getItemFromUID(key).key;
955
+ const cancelledItem = this.files.get(retrievedKey);
956
+ this.files.delete(retrievedKey);
957
+ const { bytesMaxReached, fileMaxReached } = this.validateTotals();
958
+ this.handleExternalUploadButton(bytesMaxReached, fileMaxReached);
959
+ if (!this.external) {
960
+ const { xhr } = cancelledItem;
961
+ if (xhr) {
962
+ xhr.abort();
963
+ }
964
+ }
965
+ this.kick();
966
+ this.resetFormFields();
967
+ this.duetCancel.emit({
968
+ originalEvent: ev,
969
+ data: { cancelled: cancelledItem },
970
+ component: "duet-upload",
971
+ });
972
+ };
973
+ this.onUpload = (ev, metaData) => {
974
+ this.duetUpload.emit({
975
+ originalEvent: ev,
976
+ metaData,
977
+ component: "duet-upload",
978
+ });
979
+ };
980
+ this.onBlur = (ev) => {
981
+ this.duetBlur.emit({
982
+ originalEvent: ev,
983
+ component: "duet-upload",
984
+ });
985
+ };
986
+ this.onProgress = (key, percentComplete, ev) => {
987
+ this.duetChange.emit({
988
+ originalEvent: ev,
989
+ data: {
990
+ key,
991
+ percentComplete,
992
+ },
993
+ component: "duet-upload",
994
+ });
995
+ };
996
+ this.onFocus = (ev) => {
997
+ this.duetFocus.emit({
998
+ originalEvent: ev,
999
+ component: "duet-upload",
1000
+ });
1001
+ };
1002
+ this.onReady = () => {
1003
+ this.duetReady.emit({
1004
+ component: "duet-upload",
1005
+ });
1006
+ };
1007
+ this.onDone = () => {
1008
+ this.duetDone.emit({
1009
+ component: "duet-upload",
1010
+ data: { files: this.files },
1011
+ });
1012
+ };
1013
+ /**
1014
+ * @description This functions return sorted map items byg condition which are:
1015
+ */
1016
+ this.filterMap = () => {
1017
+ const all = Array.from(this.files.values());
1018
+ const inprogress = [];
1019
+ const failure = [];
1020
+ const pending = [];
1021
+ const success = [];
1022
+ let hasCategory = false;
1023
+ all.forEach(data => {
1024
+ const group = this.getGroupFromItemData(data);
1025
+ // const item = mapFn(data, group)
1026
+ // const category = <UploadCategory meta={data.meta} />
1027
+ // const categories = data.meta?.badges?.join(",")
1028
+ if (data.meta && !!data.meta.badges) {
1029
+ hasCategory = true;
1030
+ }
1031
+ if (group === this.DefaultGroups.success) {
1032
+ success.push({
1033
+ uid: data.uid,
1034
+ data,
1035
+ });
1036
+ }
1037
+ else if (group === this.DefaultGroups.inprogress) {
1038
+ inprogress.push({
1039
+ uid: data.uid,
1040
+ data,
1041
+ });
1042
+ }
1043
+ else if (group === this.DefaultGroups.pending) {
1044
+ pending.push({
1045
+ uid: data.uid,
1046
+ data,
1047
+ });
1048
+ }
1049
+ else if (group === this.DefaultGroups.failure) {
1050
+ failure.push({
1051
+ uid: data.uid,
1052
+ data,
1053
+ });
1054
+ }
1055
+ else if (data.group) {
1056
+ inprogress.push({
1057
+ uid: data.uid,
1058
+ data,
1059
+ });
1060
+ }
1061
+ });
1062
+ return {
1063
+ pending,
1064
+ failure,
1065
+ success,
1066
+ inprogress,
1067
+ hasCategory,
1068
+ };
1069
+ };
1070
+ this.getActions = (id, actions) => {
1071
+ return actions.filter(item => item.map.includes(id));
1072
+ };
1073
+ this.renderUploadedItems = () => {
1074
+ this.itemRefs.clear();
1075
+ const filteredItems = this.filterMap();
1076
+ const hasCategory = filteredItems.hasCategory;
1077
+ const filteredActions = this.hideCancelButton
1078
+ ? this.actions.filter(action => action.name !== "cancel")
1079
+ : this.actions;
1080
+ const ItemRows = this.groups.map(group => {
1081
+ const currentItems = filteredItems[group.id];
1082
+ if (!(currentItems === null || currentItems === void 0 ? void 0 : currentItems.length)) {
1083
+ return;
1084
+ }
1085
+ return (index.h(index.Fragment, null, !this.hideGroups && (index.h(UploadItemHeader, { categoryLabel: hasCategory ? this.categoryLabel : undefined, label: group.label })), currentItems.map(item => this.mapFilesToUploadItems(item.data, group.id, hasCategory, filteredActions))));
1086
+ });
1087
+ return (index.h(index.Fragment, null, this.showUploadedItemsHeader && (index.h(UploadItemHeader, { categoryLabel: hasCategory ? this.categoryLabel : undefined, label: this.uploadedItemsHeaderLabel })), ItemRows));
1088
+ };
1089
+ this.tick = Date.now();
1090
+ this.accessibleActiveDescendant = undefined;
1091
+ this.accessibleDescribedBy = undefined;
1092
+ this.accessibleControls = undefined;
1093
+ this.accessibleOwns = undefined;
1094
+ this.external = false;
1095
+ this.middleware = null;
1096
+ this.deferUpload = false;
1097
+ this.hideButton = false;
1098
+ this.actions = [
1099
+ {
1100
+ icon: "action-delete",
1101
+ color: "color-danger",
1102
+ size: "x-small",
1103
+ background: "gray-lightest",
1104
+ name: "delete",
1105
+ map: ["success", "failure"],
1106
+ label: {
1107
+ fi: "Poista tiedosto",
1108
+ en: "Delete the file",
1109
+ sv: "Ta bort filen",
1110
+ },
1111
+ },
1112
+ {
1113
+ icon: "navigation-close",
1114
+ color: "primary",
1115
+ size: "x-small",
1116
+ background: "gray-lightest",
1117
+ name: "cancel",
1118
+ map: ["inprogress", "pending"],
1119
+ label: {
1120
+ fi: "Keskeytä lähetys",
1121
+ en: "Cancel the upload",
1122
+ sv: "Stop överföringen",
1123
+ },
1124
+ },
1125
+ ];
1126
+ this.uri = undefined;
1127
+ this.showLinks = false;
1128
+ this.caption = undefined;
1129
+ this.statusLabelDefaults = {
1130
+ fi: {
1131
+ inProgress: "Lähetetään {filesUploaded}, yhteensä lähetettävänä {filesTotal}.",
1132
+ inProgressWithErrors: "Lähetetään {filesInProgress}, lähetetty {filesUploaded}, yhteensä lähetettävänä {filesTotal}, {filesWithErrors} epäonnistui",
1133
+ done: "Lähetys valmis, {filesTotal} lisätty onnistuneesti",
1134
+ doneWithErrors: "Lähetys valmis, {filesUploaded} lisätty onnistuneesti, {filesWithErrors} epäonnistui",
1135
+ files: "tiedostoa",
1136
+ file: "tiedosto",
1137
+ },
1138
+ sv: {
1139
+ inProgress: "Laddar upp {filesUploaded} av {filesTotal}",
1140
+ inProgressWithErrors: "Laddar upp {filesInProgress}, {filesUploaded} uppladdad av {filesTotal}, {filesWithErrors} misslyckades",
1141
+ done: "Uppladdningen slutförd, {filesTotal} har lagts till",
1142
+ doneWithErrors: "Uppladdningen slutförd, {filesUploaded} har lagts till, {filesWithErrors} misslyckades",
1143
+ files: "filer",
1144
+ file: "fil",
1145
+ },
1146
+ en: {
1147
+ inProgress: "Uploading {filesUploaded} of {filesTotal}",
1148
+ inProgressWithErrors: "Uploading {filesInProgress}, {filesUploaded} uploaded of {filesTotal}, {filesWithErrors} failed",
1149
+ done: "Upload completed, {filesTotal} added successfully",
1150
+ doneWithErrors: "Upload completed, {filesUploaded} added successfully, {filesWithErrors} failed.",
1151
+ files: "files",
1152
+ file: "file",
1153
+ },
1154
+ };
1155
+ this.statusMessageLabel = languageUtils.getLocaleString(this.statusLabelDefaults);
1156
+ this.buttonLabelDefaults = {
1157
+ fi: "Lisää liite",
1158
+ sv: "Lägg till en bilaga",
1159
+ en: "Add an attachment",
1160
+ };
1161
+ this.buttonLabel = languageUtils.getLocaleString(this.buttonLabelDefaults);
1162
+ this.accessibleButtonLabel = undefined;
1163
+ this.theme = "";
1164
+ this.disabled = false;
1165
+ this.identifier = undefined;
1166
+ this.margin = "auto";
1167
+ this.required = false;
1168
+ this.alignment = "middle";
1169
+ this.hideGroups = false;
1170
+ this.files = new Map();
1171
+ this.valid = !this.required;
1172
+ this.labelDefaults = {
1173
+ fi: "Lisää liite",
1174
+ sv: "Lägg till en bilaga",
1175
+ en: "Add attachments",
1176
+ };
1177
+ this.label = languageUtils.getLocaleString(this.labelDefaults);
1178
+ this.descriptionDefaults = {
1179
+ en: "You may attach the following filetypes: {filetypes} - as well as the most common video files. You can upload {maxbytestotal} of files at a time, and add up to {maxfiles} attachments at a time each no larger than {maxbytes}.",
1180
+ sv: "Du kan bifoga följande filtyper: {filetypes} - samt de vanligaste videofilerna. Du kan ladda upp {maxbytestotal} av filer åt gången, och lägga till upp till {maxfiles} bilagor åt gången varje inte större än {maxbytes}.",
1181
+ fi: "Voit liittää seuraavat tiedostotyypit: {filetypes} - sekä yleisimmät videotiedostot. Voit lähettää {maxbytestotal} tiedostoa kerrallaan, ja lisätä enintään {maxfiles} liitettä kerrallaan, jokainen enintään {maxbytes} kokoisena.",
1182
+ };
1183
+ this.description = languageUtils.getLocaleString(this.descriptionDefaults);
1184
+ this.fileListEmptyDefaults = {
1185
+ fi: "Ei vielä lisättyjä tiedostoja.",
1186
+ sv: "Inga filer har lagts till ännu.",
1187
+ en: "No files added yet.",
1188
+ };
1189
+ this.fileListEmpty = languageUtils.getLocaleString(this.fileListEmptyDefaults);
1190
+ this.error = "";
1191
+ this.errorCodes = errorCodes;
1192
+ this.name = undefined;
1193
+ this.maxBytes = 200000000;
1194
+ this.maxBytesTotal = undefined;
1195
+ this.maxFiles = 99;
1196
+ this.allowedExtensions = "all";
1197
+ this.allowedMimetypes = "";
1198
+ this.multiple = true;
1199
+ this.limitSelection = false;
1200
+ this.hideCancelButton = false;
1201
+ this.value = undefined;
1202
+ this.externalUploadButtonId = undefined;
1203
+ this.captionOnBottom = false;
1204
+ this.showUploadedItemsHeader = false;
1205
+ this.uploadedItemsHeaderLabel = {
1206
+ fi: "Ladattu tiedosto",
1207
+ sv: "Lägg till en bilaga",
1208
+ en: "Uploaded file",
1209
+ };
1210
+ this.headerHeadingLevel = "h3";
1211
+ this.hideHeader = false;
1212
+ this.emitEvent = false;
1213
+ this.groups = [
1214
+ {
1215
+ id: this.DefaultGroups.success,
1216
+ label: {
1217
+ fi: "Valmiit tiedostot",
1218
+ sv: "Files success",
1219
+ en: "Files success",
1220
+ },
1221
+ },
1222
+ {
1223
+ id: this.DefaultGroups.failure,
1224
+ label: {
1225
+ fi: "Tiedostot, joissa on virheitä",
1226
+ sv: "Filer med fel",
1227
+ en: "Files with errors",
1228
+ },
1229
+ },
1230
+ {
1231
+ id: this.DefaultGroups.inprogress,
1232
+ label: {
1233
+ fi: "Kesken olevat tiedostot",
1234
+ sv: "Filer inprogress",
1235
+ en: "Files inprogress",
1236
+ },
1237
+ },
1238
+ {
1239
+ id: this.DefaultGroups.pending,
1240
+ label: {
1241
+ en: "Files to upload",
1242
+ sv: "Filer att ladda",
1243
+ fi: "Ladattavat tiedostot",
1244
+ },
1245
+ },
1246
+ ];
1247
+ }
1248
+ watchValidHandler(newValue, oldValue) {
1249
+ if (newValue !== oldValue) {
1250
+ this.kick();
1251
+ }
1252
+ }
658
1253
  /**
659
- * Private functions
1254
+ * Component lifecycle events.
660
1255
  */
661
- this.listenForActionEvents = () => {
662
- this.element.addEventListener("duetActionEvent", (e) => {
663
- const detail = e.detail;
664
- const { action, id, originalEvent } = detail;
665
- switch (action) {
666
- case "delete":
667
- this.onDelete(id, originalEvent);
668
- break;
669
- case "cancel":
670
- this.onCancel(id, originalEvent);
671
- break;
672
- // code block
673
- }
674
- });
675
- };
676
- this.verifyValidity = () => {
677
- const { invalid, valid } = this.getFilesAsArray();
678
- const oldValid = this.valid;
679
- this.valid = invalid.length === 0 && valid.length !== 0;
680
- if (this.valid !== oldValid) {
681
- this.duetState.emit({
682
- originalEvent: undefined,
683
- data: { valid: this.valid, from: "componentWillRender" },
684
- component: "duet-upload",
685
- });
686
- }
687
- };
688
- this.getGroupFromItemData = (item) => {
689
- if (item.valid && item.progress === 100) {
690
- // if the item has a group, move the file to that group instead
691
- // of into the standard success group
692
- return this.DefaultGroups.success;
693
- }
694
- else if (item.progress > 0 && item.progress !== 100) {
695
- return this.DefaultGroups.inprogress;
696
- }
697
- else if (!item.valid) {
698
- return this.DefaultGroups.failure;
699
- }
700
- else if (item.pending) {
701
- return this.DefaultGroups.pending;
702
- }
703
- else if (item.group) {
704
- return item.group;
705
- }
706
- else {
707
- return "none";
708
- }
709
- };
710
- this.mapFilesToUploadItems = (data, group, showCategory, filteredActions) => {
711
- if (group === this.DefaultGroups.success) {
712
- return (index.h("duet-upload-item", { theme: this.theme, actions: this.getActions(group, filteredActions), type: "success", data: data, showLinks: this.showLinks, linkClickEvent: this.emitEvent ? this.linkClick : undefined, categoryLabel: this.categoryLabel, label: this.uploadedItemsHeaderLabel, showCategory: showCategory, ref: item => {
713
- this.itemRefs.set(data.uid, item);
714
- } }));
715
- }
716
- else if (group === this.DefaultGroups.inprogress) {
717
- return (index.h("duet-upload-item", { theme: this.theme, actions: this.getActions(group, filteredActions), type: "inprogress", data: data, showLinks: this.showLinks, categoryLabel: this.categoryLabel, label: this.uploadedItemsHeaderLabel, showCategory: showCategory, ref: item => {
718
- this.itemRefs.set(data.uid, item);
719
- } }));
720
- }
721
- else if (group === this.DefaultGroups.pending) {
722
- return (index.h("duet-upload-item", { theme: this.theme, actions: this.getActions(group, filteredActions), type: "pending", data: data, showLinks: this.showLinks, categoryLabel: this.categoryLabel, label: this.uploadedItemsHeaderLabel, showCategory: showCategory, ref: item => {
723
- this.itemRefs.set(data.uid, item);
724
- } }));
725
- }
726
- else if (group === this.DefaultGroups.failure) {
727
- return (index.h("duet-upload-item", { theme: this.theme, actions: this.getActions(group, filteredActions), type: "failure", data: data, showLinks: this.showLinks, errorCodes: this.errorCodes, categoryLabel: this.categoryLabel, label: this.uploadedItemsHeaderLabel, showCategory: showCategory, ref: item => {
728
- this.itemRefs.set(data.uid, item);
729
- } }));
730
- }
731
- else if (data.group) {
732
- return data.html;
733
- }
734
- else {
735
- return "none";
736
- }
737
- };
738
- this.genHashName = () => Date.now().toString(36) + Math.random();
739
- this.updateValueInMap = (item, key, value, kick = true) => {
740
- try {
741
- const fileItem = this.files.get(item);
742
- fileItem[key] = value;
743
- this.files.set(item, fileItem);
744
- if (this.external && key !== "url") {
745
- this.trackProgress(item, key === "uploaded");
1256
+ componentWillLoad() {
1257
+ if (typeof this.statusMessageLabel === "string") {
1258
+ this.internalStatusMessageLabel = languageUtils.sanitizeString(this.groups);
746
1259
  }
747
- }
748
- catch (e) {
749
- // if a users tries to update entries on a file that doesn't exist,
750
- // this will blow up - so we're swallowing the errors here on purpose
751
- // console.warn("operation on missing items")
752
- }
753
- if (kick) {
754
- this.kick();
755
- }
756
- };
757
- this.updateProgress = (ev, name) => {
758
- const updateProgressHelper = percentComplete => {
759
- this.updateValueInMap(name, "progress", percentComplete);
760
- this.onProgress(name, percentComplete, ev);
761
- };
762
- if (ev.lengthComputable) {
763
- const percentComplete = (ev.loaded / ev.total) * 100;
764
- updateProgressHelper(percentComplete);
765
- }
766
- else {
767
- console.log("cant read progress");
768
- }
769
- };
770
- this.trackProgress = (name, remove = false) => {
771
- if (remove) {
772
- this.filesInProgress.delete(name);
773
- }
774
- else {
775
- this.filesInProgress.set(name, "inprogress");
776
- }
777
- if (this.filesInProgress.size === 0) {
778
- this.onDone();
779
- }
780
- };
781
- this.getFilesAsArray = () => {
782
- const filesInQueue = [];
783
- const filesInError = [];
784
- this.files.forEach(value => {
785
- if (value.valid && !value.deleted) {
786
- filesInQueue.push(value);
1260
+ else {
1261
+ this.internalStatusMessageLabel = this.statusMessageLabel;
787
1262
  }
788
- else if (!value.valid && !value.deleted) {
789
- filesInError.push(value);
1263
+ themeableComponent.inheritGlobalTheme(this);
1264
+ this.listenForActionEvents();
1265
+ this.onReady();
1266
+ this.externalUploadButton = document.querySelector(`#${this.externalUploadButtonId}`);
1267
+ }
1268
+ componentWillRender() {
1269
+ // listen to the events from the component
1270
+ this.verifyValidity();
1271
+ }
1272
+ /**
1273
+ * Sets focus on the specified `duet-input`. Use this method instead of the global
1274
+ * `input.focus()`.
1275
+ */
1276
+ async setFocus(options) {
1277
+ if (this.nativeInput) {
1278
+ this.nativeInput.focus(options);
790
1279
  }
791
- });
792
- return { valid: filesInQueue, invalid: filesInError };
793
- };
794
- this.resetFormFields = () => {
795
- /**
796
- * You cannot modify a FileList, nor remove single items from it
797
- * This completely removes all items in the FileList
798
- * We reset the form fields to always be able to re-upload files
799
- * and because we handle all uploads and states internally in the component (not relying on native form elements)
800
- */
801
- /* TODO: it may be a good idea to just update the list so that this always matches what is in the files map,
802
- * TODO: this would remove the capability of Re-uploading, unless we can catch and remove the user file from the form filelist before the upload is canceled by the browser
803
- * TODO: but for now we'll just reset the form fields
804
- */
805
- this.nativeInput.value = "";
806
- };
807
- this.startUpload = async (ev, metaData = undefined) => {
808
- // validate that we haven't hit any maxfiles or maxbytes limits before we upload
809
- const { bytesMaxReached, fileMaxReached } = this.validateTotals();
810
- if (bytesMaxReached || fileMaxReached) {
811
- this.kick();
812
1280
  return;
813
- }
814
- this.metaData = metaData;
815
- this.nativeInput.click();
816
- this.onUpload(ev, metaData);
817
- ev.stopPropagation();
818
- ev.preventDefault();
819
- return;
820
- };
1281
+ }
821
1282
  /**
822
- * Eventlisteners for the XHR requests
1283
+ * Method for invoking the upload sequence
823
1284
  */
824
- this.transferComplete = name => {
825
- this.updateValueInMap(name, "progress", 100, false);
826
- this.trackProgress(name, true);
827
- };
828
- this.transferDone = (xhr, name, status) => {
829
- this.updateValueInMap(name, "status", status, false);
830
- this.updateValueInMap(name, "uploaded", true, false);
831
- try {
832
- const response = JSON.parse(xhr.response);
833
- this.updateValueInMap(name, "url", response.url);
834
- }
835
- catch (e) {
836
- this.updateValueInMap(name, "url", null);
837
- console.error("Server did not respond with expected response {url: string}");
838
- }
839
- return;
840
- };
841
- this.transferDoneWithFailure = (xhr, name, status) => {
842
- try {
843
- const { error } = JSON.parse(xhr.response);
844
- this.updateValueInMap(name, "error", { message: error.message, type: error.type }, false);
845
- }
846
- catch (e) {
847
- console.error("Server did not respond with expected response error:{message: string, type: int}");
848
- this.updateValueInMap(name, "error", { type: status }, false);
849
- }
850
- this.updateValueInMap(name, "valid", false, true);
851
- };
852
- this.transferFailed = name => {
853
- this.updateValueInMap(name, "error", errorcodes_utils.getI18nError("duet-upload-001", this.errorCodes));
854
- };
855
- this.transferCanceled = name => {
856
- this.files.delete(name);
857
- this.validateTotals(name);
858
- this.kick();
859
- };
860
- this.validateTotals = (name) => {
861
- const isTotalSizeOverMaxSize = validateTotalSizeIsAboveMax(this.files, this.maxBytesTotal);
862
- const isTotalFileAmountAboveMax = validateTotalAmountIsAboveMax(this.files, this.maxFiles);
863
- if (isTotalSizeOverMaxSize && name) {
864
- this.updateValueInMap(name, "error", errorcodes_utils.getI18nError("duet-upload-202", this.errorCodes), false);
865
- }
866
- if (isTotalFileAmountAboveMax && name) {
867
- this.updateValueInMap(name, "error", errorcodes_utils.getI18nError("duet-upload-301", this.errorCodes), false);
868
- }
869
- this.bytesMaxReached = isTotalSizeOverMaxSize;
870
- this.fileMaxReached = isTotalFileAmountAboveMax;
871
- return {
872
- bytesMaxReached: isTotalSizeOverMaxSize,
873
- fileMaxReached: isTotalFileAmountAboveMax,
874
- };
875
- };
876
- this.uploadFile = async (fileListItem, force = false, key) => {
877
- if (!force && this.deferUpload) {
878
- this.updateValueInMap(fileListItem.item.name, "pending", true, false);
879
- this.updateValueInMap(fileListItem.item.name, "group", "pending", true);
880
- }
881
- else if (force) {
882
- this.updateValueInMap(fileListItem.item.name, "pending", false, false);
883
- this.updateValueInMap(fileListItem.item.name, "group", undefined, true);
884
- }
885
- try {
886
- if (!this.deferUpload || force) {
887
- // if all is well AND external file upload handling has not been set, start upload
888
- const data = new FormData();
889
- data.append("file", fileListItem.item);
890
- if (key) {
891
- data.append("key", key);
892
- }
893
- data.append("uid", fileListItem.uid);
894
- data.append("name", fileListItem.item.name);
895
- data.append("metadata", JSON.stringify({
896
- uid: fileListItem.uid,
897
- url: this.uri,
898
- size: fileListItem.item.size,
899
- meta: fileListItem.meta,
900
- }));
901
- fileListItem.xhr = await this.makeXHRPostRequest(data);
902
- }
903
- }
904
- catch (e) {
905
- // in case one of the global maxes have been reached, invalidate the file
906
- this.updateValueInMap(fileListItem.item.name, "valid", false, false);
907
- }
908
- };
909
- this.uploadPendingFiles = () => {
910
- for (const [key, value] of Array.from(this.files.entries())) {
911
- if (value.group === "pending" && value.pending === true) {
912
- this.uploadFile(value, true, key);
913
- }
914
- }
915
- };
916
- this.getItemFromUID = (uid) => {
917
- for (const [key, value] of Array.from(this.files.entries())) {
918
- if (value.uid === uid) {
919
- return { value, key };
920
- }
921
- }
922
- return null;
923
- };
924
- this.handleExternalUploadButton = (bytesMaxReached, fileMaxReached) => {
925
- if (this.externalUploadButton) {
1285
+ async upload(metaData = undefined) {
1286
+ // validate that we haven't hit any maxfiles or maxbytes limits before we upload
1287
+ const { bytesMaxReached, fileMaxReached } = this.validateTotals();
926
1288
  if (bytesMaxReached || fileMaxReached) {
927
- this.externalUploadButton.disabled = true;
928
- }
929
- else {
930
- this.externalUploadButton.disabled = false;
1289
+ this.handleExternalUploadButton(bytesMaxReached, fileMaxReached);
1290
+ this.kick();
1291
+ return;
931
1292
  }
932
- }
933
- };
934
- this.onDelete = (key, ev) => {
935
- const item = this.getItemFromUID(key);
936
- const retrievedKey = item.key;
937
- const deletedItem = this.files.get(retrievedKey);
938
- this.files.delete(retrievedKey);
939
- const { bytesMaxReached, fileMaxReached } = this.validateTotals();
940
- this.handleExternalUploadButton(bytesMaxReached, fileMaxReached);
941
- this.kick();
942
- this.duetDelete.emit({
943
- originalEvent: ev,
944
- data: { deletion: deletedItem },
945
- component: "duet-upload",
946
- });
947
- // don't send a xhr request if the item was pending, just remove it from the list
948
- if (!this.external && !deletedItem.pending) {
949
- this.makeXHRDeleteRequest(deletedItem);
950
- }
951
- this.resetFormFields();
952
- };
953
- this.onCancel = (key, ev) => {
954
- const retrievedKey = this.getItemFromUID(key).key;
955
- const cancelledItem = this.files.get(retrievedKey);
956
- this.files.delete(retrievedKey);
957
- const { bytesMaxReached, fileMaxReached } = this.validateTotals();
958
- this.handleExternalUploadButton(bytesMaxReached, fileMaxReached);
959
- if (!this.external) {
960
- const { xhr } = cancelledItem;
961
- if (xhr) {
962
- xhr.abort();
963
- }
964
- }
965
- this.kick();
966
- this.resetFormFields();
967
- this.duetCancel.emit({
968
- originalEvent: ev,
969
- data: { cancelled: cancelledItem },
970
- component: "duet-upload",
971
- });
972
- };
973
- this.onUpload = (ev, metaData) => {
974
- this.duetUpload.emit({
975
- originalEvent: ev,
976
- metaData,
977
- component: "duet-upload",
978
- });
979
- };
980
- this.onBlur = (ev) => {
981
- this.duetBlur.emit({
982
- originalEvent: ev,
983
- component: "duet-upload",
984
- });
985
- };
986
- this.onProgress = (key, percentComplete, ev) => {
987
- this.duetChange.emit({
988
- originalEvent: ev,
989
- data: {
990
- key,
991
- percentComplete,
992
- },
993
- component: "duet-upload",
994
- });
995
- };
996
- this.onFocus = (ev) => {
997
- this.duetFocus.emit({
998
- originalEvent: ev,
999
- component: "duet-upload",
1000
- });
1001
- };
1002
- this.onReady = () => {
1003
- this.duetReady.emit({
1004
- component: "duet-upload",
1005
- });
1006
- };
1007
- this.onDone = () => {
1008
- this.duetDone.emit({
1009
- component: "duet-upload",
1010
- data: { files: this.files },
1011
- });
1012
- };
1293
+ this.metaData = metaData;
1294
+ this.nativeInput.click();
1295
+ return;
1296
+ }
1013
1297
  /**
1014
- * @description This functions return sorted map items byg condition which are:
1298
+ * Method for uploading pending files
1015
1299
  */
1016
- this.filterMap = () => {
1017
- const all = Array.from(this.files.values());
1018
- const inprogress = [];
1019
- const failure = [];
1020
- const pending = [];
1021
- const success = [];
1022
- let hasCategory = false;
1023
- all.forEach(data => {
1024
- const group = this.getGroupFromItemData(data);
1025
- // const item = mapFn(data, group)
1026
- // const category = <UploadCategory meta={data.meta} />
1027
- // const categories = data.meta?.badges?.join(",")
1028
- if (data.meta && !!data.meta.badges) {
1029
- hasCategory = true;
1030
- }
1031
- if (group === this.DefaultGroups.success) {
1032
- success.push({
1033
- uid: data.uid,
1034
- data,
1035
- });
1036
- }
1037
- else if (group === this.DefaultGroups.inprogress) {
1038
- inprogress.push({
1039
- uid: data.uid,
1040
- data,
1041
- });
1042
- }
1043
- else if (group === this.DefaultGroups.pending) {
1044
- pending.push({
1045
- uid: data.uid,
1046
- data,
1047
- });
1048
- }
1049
- else if (group === this.DefaultGroups.failure) {
1050
- failure.push({
1051
- uid: data.uid,
1052
- data,
1053
- });
1054
- }
1055
- else if (data.group) {
1056
- inprogress.push({
1057
- uid: data.uid,
1058
- data,
1059
- });
1060
- }
1061
- });
1062
- return {
1063
- pending,
1064
- failure,
1065
- success,
1066
- inprogress,
1067
- hasCategory,
1068
- };
1069
- };
1070
- this.getActions = (id, actions) => {
1071
- return actions.filter(item => item.map.includes(id));
1072
- };
1073
- this.renderUploadedItems = () => {
1074
- this.itemRefs.clear();
1075
- const filteredItems = this.filterMap();
1076
- const hasCategory = filteredItems.hasCategory;
1077
- const filteredActions = this.hideCancelButton
1078
- ? this.actions.filter(action => action.name !== "cancel")
1079
- : this.actions;
1080
- const ItemRows = this.groups.map(group => {
1081
- const currentItems = filteredItems[group.id];
1082
- if (!(currentItems === null || currentItems === void 0 ? void 0 : currentItems.length)) {
1083
- return;
1084
- }
1085
- return (index.h(index.Fragment, null, !this.hideGroups && (index.h(UploadItemHeader, { categoryLabel: hasCategory ? this.categoryLabel : undefined, label: group.label })), currentItems.map(item => this.mapFilesToUploadItems(item.data, group.id, hasCategory, filteredActions))));
1086
- });
1087
- return (index.h(index.Fragment, null, this.showUploadedItemsHeader && (index.h(UploadItemHeader, { categoryLabel: hasCategory ? this.categoryLabel : undefined, label: this.uploadedItemsHeaderLabel })), ItemRows));
1088
- };
1089
- this.tick = Date.now();
1090
- this.accessibleActiveDescendant = undefined;
1091
- this.accessibleDescribedBy = undefined;
1092
- this.accessibleControls = undefined;
1093
- this.accessibleOwns = undefined;
1094
- this.external = false;
1095
- this.middleware = null;
1096
- this.deferUpload = false;
1097
- this.hideButton = false;
1098
- this.actions = [
1099
- {
1100
- icon: "action-delete",
1101
- color: "color-danger",
1102
- size: "x-small",
1103
- background: "gray-lightest",
1104
- name: "delete",
1105
- map: ["success", "failure"],
1106
- label: {
1107
- fi: "Poista tiedosto",
1108
- en: "Delete the file",
1109
- sv: "Ta bort filen",
1110
- },
1111
- },
1112
- {
1113
- icon: "navigation-close",
1114
- color: "primary",
1115
- size: "x-small",
1116
- background: "gray-lightest",
1117
- name: "cancel",
1118
- map: ["inprogress", "pending"],
1119
- label: {
1120
- fi: "Keskeytä lähetys",
1121
- en: "Cancel the upload",
1122
- sv: "Stop överföringen",
1123
- },
1124
- },
1125
- ];
1126
- this.uri = undefined;
1127
- this.showLinks = false;
1128
- this.caption = undefined;
1129
- this.statusLabelDefaults = {
1130
- fi: {
1131
- inProgress: "Lähetetään {filesUploaded}, yhteensä lähetettävänä {filesTotal}.",
1132
- inProgressWithErrors: "Lähetetään {filesInProgress}, lähetetty {filesUploaded}, yhteensä lähetettävänä {filesTotal}, {filesWithErrors} epäonnistui",
1133
- done: "Lähetys valmis, {filesTotal} lisätty onnistuneesti",
1134
- doneWithErrors: "Lähetys valmis, {filesUploaded} lisätty onnistuneesti, {filesWithErrors} epäonnistui",
1135
- files: "tiedostoa",
1136
- file: "tiedosto",
1137
- },
1138
- sv: {
1139
- inProgress: "Laddar upp {filesUploaded} av {filesTotal}",
1140
- inProgressWithErrors: "Laddar upp {filesInProgress}, {filesUploaded} uppladdad av {filesTotal}, {filesWithErrors} misslyckades",
1141
- done: "Uppladdningen slutförd, {filesTotal} har lagts till",
1142
- doneWithErrors: "Uppladdningen slutförd, {filesUploaded} har lagts till, {filesWithErrors} misslyckades",
1143
- files: "filer",
1144
- file: "fil",
1145
- },
1146
- en: {
1147
- inProgress: "Uploading {filesUploaded} of {filesTotal}",
1148
- inProgressWithErrors: "Uploading {filesInProgress}, {filesUploaded} uploaded of {filesTotal}, {filesWithErrors} failed",
1149
- done: "Upload completed, {filesTotal} added successfully",
1150
- doneWithErrors: "Upload completed, {filesUploaded} added successfully, {filesWithErrors} failed.",
1151
- files: "files",
1152
- file: "file",
1153
- },
1154
- };
1155
- this.statusMessageLabel = languageUtils.getLocaleString(this.statusLabelDefaults);
1156
- this.buttonLabelDefaults = {
1157
- fi: "Lisää liite",
1158
- sv: "Lägg till en bilaga",
1159
- en: "Add an attachment",
1160
- };
1161
- this.buttonLabel = languageUtils.getLocaleString(this.buttonLabelDefaults);
1162
- this.accessibleButtonLabel = undefined;
1163
- this.theme = "";
1164
- this.disabled = false;
1165
- this.identifier = undefined;
1166
- this.margin = "auto";
1167
- this.required = false;
1168
- this.alignment = "middle";
1169
- this.hideGroups = false;
1170
- this.files = new Map();
1171
- this.valid = !this.required;
1172
- this.labelDefaults = {
1173
- fi: "Lisää liite",
1174
- sv: "Lägg till en bilaga",
1175
- en: "Add attachments",
1176
- };
1177
- this.label = languageUtils.getLocaleString(this.labelDefaults);
1178
- this.descriptionDefaults = {
1179
- en: "You may attach the following filetypes: {filetypes} - as well as the most common video files. You can upload {maxbytestotal} of files at a time, and add up to {maxfiles} attachments at a time each no larger than {maxbytes}.",
1180
- sv: "Du kan bifoga följande filtyper: {filetypes} - samt de vanligaste videofilerna. Du kan ladda upp {maxbytestotal} av filer åt gången, och lägga till upp till {maxfiles} bilagor åt gången varje inte större än {maxbytes}.",
1181
- fi: "Voit liittää seuraavat tiedostotyypit: {filetypes} - sekä yleisimmät videotiedostot. Voit lähettää {maxbytestotal} tiedostoa kerrallaan, ja lisätä enintään {maxfiles} liitettä kerrallaan, jokainen enintään {maxbytes} kokoisena.",
1182
- };
1183
- this.description = languageUtils.getLocaleString(this.descriptionDefaults);
1184
- this.fileListEmptyDefaults = {
1185
- fi: "Ei vielä lisättyjä tiedostoja.",
1186
- sv: "Inga filer har lagts till ännu.",
1187
- en: "No files added yet.",
1188
- };
1189
- this.fileListEmpty = languageUtils.getLocaleString(this.fileListEmptyDefaults);
1190
- this.error = "";
1191
- this.errorCodes = errorCodes;
1192
- this.name = undefined;
1193
- this.maxBytes = 200000000;
1194
- this.maxBytesTotal = undefined;
1195
- this.maxFiles = 99;
1196
- this.allowedExtensions = "all";
1197
- this.allowedMimetypes = "";
1198
- this.multiple = true;
1199
- this.limitSelection = false;
1200
- this.hideCancelButton = false;
1201
- this.value = undefined;
1202
- this.externalUploadButtonId = undefined;
1203
- this.captionOnBottom = false;
1204
- this.showUploadedItemsHeader = false;
1205
- this.uploadedItemsHeaderLabel = {
1206
- fi: "Ladattu tiedosto",
1207
- sv: "Lägg till en bilaga",
1208
- en: "Uploaded file",
1209
- };
1210
- this.headerHeadingLevel = "h3";
1211
- this.hideHeader = false;
1212
- this.emitEvent = false;
1213
- this.groups = [
1214
- {
1215
- id: this.DefaultGroups.success,
1216
- label: {
1217
- fi: "Valmiit tiedostot",
1218
- sv: "Files success",
1219
- en: "Files success",
1220
- },
1221
- },
1222
- {
1223
- id: this.DefaultGroups.failure,
1224
- label: {
1225
- fi: "Tiedostot, joissa on virheitä",
1226
- sv: "Filer med fel",
1227
- en: "Files with errors",
1228
- },
1229
- },
1230
- {
1231
- id: this.DefaultGroups.inprogress,
1232
- label: {
1233
- fi: "Kesken olevat tiedostot",
1234
- sv: "Filer inprogress",
1235
- en: "Files inprogress",
1236
- },
1237
- },
1238
- {
1239
- id: this.DefaultGroups.pending,
1240
- label: {
1241
- en: "Files to upload",
1242
- sv: "Filer att ladda",
1243
- fi: "Ladattavat tiedostot",
1244
- },
1245
- },
1246
- ];
1247
- }
1248
- watchValidHandler(newValue, oldValue) {
1249
- if (newValue !== oldValue) {
1250
- this.kick();
1300
+ async uploadPending() {
1301
+ this.uploadPendingFiles();
1251
1302
  }
1252
- }
1253
- /**
1254
- * Component lifecycle events.
1255
- */
1256
- componentWillLoad() {
1257
- if (typeof this.statusMessageLabel === "string") {
1258
- this.internalStatusMessageLabel = languageUtils.sanitizeString(this.groups);
1259
- }
1260
- else {
1261
- this.internalStatusMessageLabel = this.statusMessageLabel;
1262
- }
1263
- themeableComponent.inheritGlobalTheme(this);
1264
- this.listenForActionEvents();
1265
- this.onReady();
1266
- this.externalUploadButton = document.querySelector(`#${this.externalUploadButtonId}`);
1267
- }
1268
- componentWillRender() {
1269
- // listen to the events from the component
1270
- this.verifyValidity();
1271
- }
1272
- /**
1273
- * Sets focus on the specified `duet-input`. Use this method instead of the global
1274
- * `input.focus()`.
1275
- */
1276
- async setFocus(options) {
1277
- if (this.nativeInput) {
1278
- this.nativeInput.focus(options);
1279
- }
1280
- return;
1281
- }
1282
- /**
1283
- * Method for invoking the upload sequence
1284
- */
1285
- async upload(metaData = undefined) {
1286
- // validate that we haven't hit any maxfiles or maxbytes limits before we upload
1287
- const { bytesMaxReached, fileMaxReached } = this.validateTotals();
1288
- if (bytesMaxReached || fileMaxReached) {
1289
- this.handleExternalUploadButton(bytesMaxReached, fileMaxReached);
1290
- this.kick();
1291
- return;
1292
- }
1293
- this.metaData = metaData;
1294
- this.nativeInput.click();
1295
- return;
1296
- }
1297
- /**
1298
- * Method for uploading pending files
1299
- */
1300
- async uploadPending() {
1301
- this.uploadPendingFiles();
1302
- }
1303
- /**
1304
- * Method for forcing a render of the upload list, element.files can be changed externally
1305
- * But it will only rerender on a new Map or a top Level change - this can be used to update
1306
- * the tabular data if the automatic re-render is no sufficient
1307
- */
1308
- async refresh() {
1309
- this.kick();
1310
- await this.setFocus();
1311
- }
1312
- /**
1313
- * Get list of files, divided in errors and valid sections
1314
- */
1315
- async getFiles() {
1316
- if (!this.files || this.files.size === 0) {
1317
- return false;
1303
+ /**
1304
+ * Method for forcing a render of the upload list, element.files can be changed externally
1305
+ * But it will only rerender on a new Map or a top Level change - this can be used to update
1306
+ * the tabular data if the automatic re-render is no sufficient
1307
+ */
1308
+ async refresh() {
1309
+ this.kick();
1310
+ await this.setFocus();
1318
1311
  }
1319
- return this.getFilesAsArray();
1320
- }
1321
- /**
1322
- * Convenience method for updating the value of a key:value inside an item in the files attribute
1323
- */
1324
- async updateValue(item, key, value) {
1325
- this.updateValueInMap(item, key, value);
1326
- }
1327
- /**
1328
- * focusActionButton.
1329
- */
1330
- async focusActionButton(uid) {
1331
- var _a;
1332
- await ((_a = this.itemRefs.get(uid)) === null || _a === void 0 ? void 0 : _a.focusActionButton());
1333
- }
1334
- /**
1335
- * render() function
1336
- * Always the last one in the class.
1337
- */
1338
- render() {
1339
- const identifier = this.identifier || this.uploadId;
1340
- const maxMegaBytesTotal = Math.round((this.maxBytesTotal ? this.maxBytesTotal : this.maxBytes * this.maxFiles) / 1024 / 1024);
1341
- const maxMegaBytesPrFile = Math.round(this.maxBytes / 1024 / 1024);
1342
- let caption = this.description.replace(/{maxfiles}/g, this.maxFiles.toString());
1343
- caption = caption.replace(/{maxbytes}/g, `${maxMegaBytesPrFile.toString()} MB`);
1344
- caption = caption.replace(/{maxbytestotal}/g, `${maxMegaBytesTotal.toString()} MB`);
1345
- caption = caption.replace(/{filetypes}/g, this.allowedExtensions.split(",").join(", "));
1346
- if (this.externalUploadButton) {
1347
- this.externalUploadButton.ariaLabel = caption;
1312
+ /**
1313
+ * Get list of files, divided in errors and valid sections
1314
+ */
1315
+ async getFiles() {
1316
+ if (!this.files || this.files.size === 0) {
1317
+ return false;
1318
+ }
1319
+ return this.getFilesAsArray();
1348
1320
  }
1349
- // @ts-ignore
1350
- return (index.h(index.Host, { class: { "duet-m-0": this.margin === "none" } }, index.h("duet-fieldset", { "label-heading-level": this.headerHeadingLevel, "label-hidden": this.hideHeader, label: this.label, caption: !this.captionOnBottom ? caption : undefined }, index.h("slot", { name: "header" }), !this.files.size && (index.h("duet-empty-state", { id: this.labelId, part: this.identifier ? `${this.identifier}-empty-state` : "duet-upload-empty-state", icon: "messaging-attachment" }, index.h("duet-paragraph", { margin: "none" }, this.fileListEmpty))), !!this.files.size && index.h("slot", { name: "fileheader" }), !!this.files.size && (index.h("duet-upload-aria-status", { invalid: this.getFilesAsArray().invalid.length, valid: this.getFilesAsArray().valid.length, inprogress: this.filesInProgress.size, total: this.files.size, statusMessageLabel: this.internalStatusMessageLabel })), !!this.files.size && this.renderUploadedItems(), !!this.files.size && index.h("slot", { name: "filefooter" }), index.h("slot", { name: "uploadfooter" }), this.captionOnBottom && (index.h("duet-caption", { margin: "none", size: "small" }, index.h("div", { class: "upload-bottom-caption" }, caption))), index.h("slot", { name: "afterfooter" }), !this.hideButton && (index.h(index.Fragment, null, index.h("duet-spacer", { size: "large" }), index.h("duet-button", { id: this.buttonId, onClick: this.startUpload, "accessible-controls": identifier, disabled: this.fileMaxReached, "accessible-label": this.accessibleButtonLabel, "accessible-owns": identifier, size: "small", variation: "secondary", fixed: true, icon: "action-add-circle", part: this.identifier ? `${this.identifier}-button-upload` : "duet-upload-button-upload" }, this.buttonLabel))), (this.fileMaxReached ||
1351
- this.bytesMaxReached ||
1352
- this.filesToUploadExceedsLimit ||
1353
- this.filesToUploadTotalSizeIsAboveMax) && (index.h(index.Fragment, null, index.h("duet-spacer", { size: "medium" }), index.h("duet-alert", { part: this.identifier ? `${this.identifier}-error-notification` : "duet-upload-error-notification" }, this.fileMaxReached && errorcodes_utils.getI18nError("duet-upload-301", this.errorCodes), this.bytesMaxReached && errorcodes_utils.getI18nError("duet-upload-202", this.errorCodes), this.filesToUploadExceedsLimit && errorcodes_utils.getI18nError("duet-upload-302", this.errorCodes), this.filesToUploadTotalSizeIsAboveMax && errorcodes_utils.getI18nError("duet-upload-203", this.errorCodes)))), index.h("duet-visually-hidden", { "aria-hidden": "true" }, index.h("input", { ref: input => {
1354
- this.nativeInput = input;
1355
- }, accept: !this.limitSelection ? undefined : `${this.allowedMimetypes},${this.allowedExtensions}`, onBlur: this.onBlur, onFocus: this.onFocus, onChange: e => this.onChange(e), type: "file", class: {
1356
- "duet-upload": true,
1357
- }, disabled: this.disabled, "aria-hidden": "true", required: this.required, name: this.name, id: this.identifier, multiple: this.multiple, tabIndex: -1 })))));
1358
- }
1359
- /**
1360
- * XHR request utilities
1361
- */
1362
- makeXHRPostRequest(data) {
1363
- const xhr = new XMLHttpRequest();
1364
- const name = data.get("name");
1365
- xhr.upload.addEventListener("progress", ev => {
1366
- this.updateProgress(ev, name);
1367
- });
1368
- xhr.upload.addEventListener("load", () => {
1369
- this.transferComplete(name);
1370
- });
1371
- xhr.upload.addEventListener("error", () => {
1372
- this.transferFailed(name);
1373
- });
1374
- xhr.upload.addEventListener("abort", () => {
1375
- this.transferCanceled(name);
1376
- });
1377
- let options = {
1378
- payload: { data, name },
1379
- options: { type: "POST", uri: this.uri, xhr, argument: null, headers: undefined },
1380
- onFailure: this.transferDoneWithFailure,
1381
- onSuccess: this.transferDone,
1382
- onProgress: this.trackProgress,
1383
- };
1384
- if (this.middleware) {
1385
- options = this.middleware(options);
1321
+ /**
1322
+ * Convenience method for updating the value of a key:value inside an item in the files attribute
1323
+ */
1324
+ async updateValue(item, key, value) {
1325
+ this.updateValueInMap(item, key, value);
1386
1326
  }
1387
- return makeXhrRequest(options);
1388
- }
1389
- makeXHRDeleteRequest(data) {
1390
- const { uid, item } = data;
1391
- const xhr = new XMLHttpRequest();
1392
- const headers = {
1393
- "x-fileuid": uid,
1394
- "x-filename": item.name,
1395
- };
1396
- let options = {
1397
- payload: { data: null, name },
1398
- options: {
1399
- type: "DELETE",
1400
- xhr,
1401
- uri: this.uri,
1402
- argument: `?key=${uid}&name=${item.name}`,
1403
- headers,
1404
- },
1405
- onFailure: this.transferDoneWithFailure,
1406
- onSuccess: this.transferDone,
1407
- onProgress: this.trackProgress,
1408
- };
1409
- if (this.middleware) {
1410
- options = this.middleware(options);
1327
+ /**
1328
+ * focusActionButton.
1329
+ */
1330
+ async focusActionButton(uid) {
1331
+ var _a;
1332
+ await ((_a = this.itemRefs.get(uid)) === null || _a === void 0 ? void 0 : _a.focusActionButton());
1411
1333
  }
1412
- // don't present server issues to user on deletes, just remove them from the visible list
1413
- return makeXhrRequest(options);
1414
- }
1415
- /**
1416
- * Component event handling.
1417
- */
1418
- async onChange(ev) {
1419
- var _a;
1420
- const selectedFiles = Array.from((_a = this.nativeInput) === null || _a === void 0 ? void 0 : _a.files);
1421
- // FileList is a nice array like structure but
1422
- // to ensure uniqueness of files we use a mapping structure and
1423
- // key to the name (makes it easier to delete as well)
1424
- this.filesToUploadExceedsLimit = false;
1425
- if (filesToUploadCountAboveMax(this.files.size, selectedFiles.length, this.maxFiles)) {
1426
- this.filesToUploadExceedsLimit = true;
1427
- this.kick();
1428
- return;
1334
+ /**
1335
+ * render() function
1336
+ * Always the last one in the class.
1337
+ */
1338
+ render() {
1339
+ const identifier = this.identifier || this.uploadId;
1340
+ const maxMegaBytesTotal = Math.round((this.maxBytesTotal ? this.maxBytesTotal : this.maxBytes * this.maxFiles) / 1024 / 1024);
1341
+ const maxMegaBytesPrFile = Math.round(this.maxBytes / 1024 / 1024);
1342
+ let caption = this.description.replace(/{maxfiles}/g, this.maxFiles.toString());
1343
+ caption = caption.replace(/{maxbytes}/g, `${maxMegaBytesPrFile.toString()} MB`);
1344
+ caption = caption.replace(/{maxbytestotal}/g, `${maxMegaBytesTotal.toString()} MB`);
1345
+ caption = caption.replace(/{filetypes}/g, this.allowedExtensions.split(",").join(", "));
1346
+ if (this.externalUploadButton) {
1347
+ this.externalUploadButton.accessibleLabel = caption;
1348
+ }
1349
+ // @ts-ignore
1350
+ return (index.h(index.Host, { class: { "duet-m-0": this.margin === "none" } }, index.h("duet-fieldset", { "label-heading-level": this.headerHeadingLevel, "label-hidden": this.hideHeader, label: this.label, caption: !this.captionOnBottom ? caption : undefined }, index.h("slot", { name: "header" }), !this.files.size && (index.h("duet-empty-state", { id: this.labelId, part: this.identifier ? `${this.identifier}-empty-state` : "duet-upload-empty-state", icon: "messaging-attachment" }, index.h("duet-paragraph", { margin: "none" }, this.fileListEmpty))), !!this.files.size && index.h("slot", { name: "fileheader" }), !!this.files.size && (index.h("duet-upload-aria-status", { invalid: this.getFilesAsArray().invalid.length, valid: this.getFilesAsArray().valid.length, inprogress: this.filesInProgress.size, total: this.files.size, statusMessageLabel: this.internalStatusMessageLabel })), !!this.files.size && this.renderUploadedItems(), !!this.files.size && index.h("slot", { name: "filefooter" }), index.h("slot", { name: "uploadfooter" }), this.captionOnBottom && (index.h("duet-caption", { margin: "none", size: "small" }, index.h("div", { class: "upload-bottom-caption" }, caption))), index.h("slot", { name: "afterfooter" }), !this.hideButton && (index.h(index.Fragment, null, index.h("duet-spacer", { size: "large" }), index.h("duet-button", { id: this.buttonId, onClick: this.startUpload, "accessible-controls": identifier, disabled: this.fileMaxReached, "accessible-label": this.accessibleButtonLabel, "accessible-owns": identifier, size: "small", variation: "secondary", fixed: true, icon: "action-add-circle", part: this.identifier ? `${this.identifier}-button-upload` : "duet-upload-button-upload" }, this.buttonLabel))), (this.fileMaxReached ||
1351
+ this.bytesMaxReached ||
1352
+ this.filesToUploadExceedsLimit ||
1353
+ this.filesToUploadTotalSizeIsAboveMax) && (index.h(index.Fragment, null, index.h("duet-spacer", { size: "medium" }), index.h("duet-alert", { part: this.identifier ? `${this.identifier}-error-notification` : "duet-upload-error-notification" }, this.fileMaxReached && errorcodes_utils.getI18nError("duet-upload-301", this.errorCodes), this.bytesMaxReached && errorcodes_utils.getI18nError("duet-upload-202", this.errorCodes), this.filesToUploadExceedsLimit && errorcodes_utils.getI18nError("duet-upload-302", this.errorCodes), this.filesToUploadTotalSizeIsAboveMax && errorcodes_utils.getI18nError("duet-upload-203", this.errorCodes)))), index.h("duet-visually-hidden", { "aria-hidden": "true" }, index.h("input", { ref: input => {
1354
+ this.nativeInput = input;
1355
+ }, accept: !this.limitSelection ? undefined : `${this.allowedMimetypes},${this.allowedExtensions}`, onBlur: this.onBlur, onFocus: this.onFocus, onChange: e => this.onChange(e), type: "file", class: {
1356
+ "duet-upload": true,
1357
+ }, disabled: this.disabled, "aria-hidden": "true", required: this.required, name: this.name, id: this.identifier, multiple: this.multiple, tabIndex: -1 })))));
1429
1358
  }
1430
- this.filesToUploadTotalSizeIsAboveMax = false;
1431
- if (filesToUploadTotalSizeIsAboveMax(this.files, selectedFiles, this.maxBytesTotal)) {
1432
- this.filesToUploadTotalSizeIsAboveMax = true;
1433
- this.kick();
1434
- return;
1359
+ /**
1360
+ * XHR request utilities
1361
+ */
1362
+ makeXHRPostRequest(data) {
1363
+ const xhr = new XMLHttpRequest();
1364
+ const name = data.get("name");
1365
+ xhr.upload.addEventListener("progress", ev => {
1366
+ this.updateProgress(ev, name);
1367
+ });
1368
+ xhr.upload.addEventListener("load", () => {
1369
+ this.transferComplete(name);
1370
+ });
1371
+ xhr.upload.addEventListener("error", () => {
1372
+ this.transferFailed(name);
1373
+ });
1374
+ xhr.upload.addEventListener("abort", () => {
1375
+ this.transferCanceled(name);
1376
+ });
1377
+ let options = {
1378
+ payload: { data, name },
1379
+ options: { type: "POST", uri: this.uri, xhr, argument: null, headers: undefined },
1380
+ onFailure: this.transferDoneWithFailure,
1381
+ onSuccess: this.transferDone,
1382
+ onProgress: this.trackProgress,
1383
+ };
1384
+ if (this.middleware) {
1385
+ options = this.middleware(options);
1386
+ }
1387
+ return makeXhrRequest(options);
1435
1388
  }
1436
- if (selectedFiles) {
1437
- for (const item of selectedFiles) {
1438
- const { valid, errorMessage, errorType, errorSystem } = validateFile(item, {
1439
- maxBytes: this.maxBytes,
1440
- allowedExtensions: this.allowedExtensions,
1441
- allowedMimetypes: this.allowedMimetypes,
1442
- }, this.errorCodes);
1443
- const uid = this.genHashName();
1444
- const fileListItem = {
1445
- uid,
1446
- item: item,
1447
- size: item.size,
1448
- meta: this.metaData,
1449
- uploaded: false,
1450
- valid,
1451
- error: {
1452
- type: valid ? undefined : errorType,
1453
- message: valid ? undefined : errorMessage,
1454
- system_message: valid ? undefined : errorSystem,
1455
- },
1456
- progress: 0,
1457
- deleted: false,
1458
- xhr: false,
1459
- url: false,
1389
+ makeXHRDeleteRequest(data) {
1390
+ const { uid, item } = data;
1391
+ const xhr = new XMLHttpRequest();
1392
+ const headers = {
1393
+ "x-fileuid": uid,
1394
+ "x-filename": item.name,
1395
+ };
1396
+ let options = {
1397
+ payload: { data: null, name },
1398
+ options: {
1399
+ type: "DELETE",
1400
+ xhr,
1401
+ uri: this.uri,
1402
+ argument: `?key=${uid}&name=${item.name}`,
1403
+ headers,
1404
+ },
1405
+ onFailure: this.transferDoneWithFailure,
1406
+ onSuccess: this.transferDone,
1407
+ onProgress: this.trackProgress,
1460
1408
  };
1461
- this.files.set(item.name, fileListItem);
1462
- if (valid && !this.external) {
1463
- await this.uploadFile(fileListItem);
1409
+ if (this.middleware) {
1410
+ options = this.middleware(options);
1464
1411
  }
1465
- else if (valid && this.external) {
1466
- this.updateValueInMap(fileListItem.item.name, "pending", true, false);
1467
- this.updateValueInMap(fileListItem.item.name, "group", "pending", true);
1412
+ // don't present server issues to user on deletes, just remove them from the visible list
1413
+ return makeXhrRequest(options);
1414
+ }
1415
+ /**
1416
+ * Component event handling.
1417
+ */
1418
+ async onChange(ev) {
1419
+ var _a;
1420
+ const selectedFiles = Array.from((_a = this.nativeInput) === null || _a === void 0 ? void 0 : _a.files);
1421
+ // FileList is a nice array like structure but
1422
+ // to ensure uniqueness of files we use a mapping structure and
1423
+ // key to the name (makes it easier to delete as well)
1424
+ this.filesToUploadExceedsLimit = false;
1425
+ if (filesToUploadCountAboveMax(this.files.size, selectedFiles.length, this.maxFiles)) {
1426
+ this.filesToUploadExceedsLimit = true;
1427
+ this.kick();
1428
+ return;
1468
1429
  }
1469
- else if (!valid) {
1470
- this.updateValueInMap(item.name, "valid", false, true);
1430
+ this.filesToUploadTotalSizeIsAboveMax = false;
1431
+ if (filesToUploadTotalSizeIsAboveMax(this.files, selectedFiles, this.maxBytesTotal)) {
1432
+ this.filesToUploadTotalSizeIsAboveMax = true;
1433
+ this.kick();
1434
+ return;
1471
1435
  }
1472
- // kick the stat to force update
1473
- this.kick();
1474
- }
1436
+ if (selectedFiles) {
1437
+ for (const item of selectedFiles) {
1438
+ const { valid, errorMessage, errorType, errorSystem } = validateFile(item, {
1439
+ maxBytes: this.maxBytes,
1440
+ allowedExtensions: this.allowedExtensions,
1441
+ allowedMimetypes: this.allowedMimetypes,
1442
+ }, this.errorCodes);
1443
+ const uid = this.genHashName();
1444
+ const fileListItem = {
1445
+ uid,
1446
+ item: item,
1447
+ size: item.size,
1448
+ meta: this.metaData,
1449
+ uploaded: false,
1450
+ valid,
1451
+ error: {
1452
+ type: valid ? undefined : errorType,
1453
+ message: valid ? undefined : errorMessage,
1454
+ system_message: valid ? undefined : errorSystem,
1455
+ },
1456
+ progress: 0,
1457
+ deleted: false,
1458
+ xhr: false,
1459
+ url: false,
1460
+ };
1461
+ this.files.set(item.name, fileListItem);
1462
+ if (valid && !this.external) {
1463
+ await this.uploadFile(fileListItem);
1464
+ }
1465
+ else if (valid && this.external) {
1466
+ this.updateValueInMap(fileListItem.item.name, "pending", true, false);
1467
+ this.updateValueInMap(fileListItem.item.name, "group", "pending", true);
1468
+ }
1469
+ else if (!valid) {
1470
+ this.updateValueInMap(item.name, "valid", false, true);
1471
+ }
1472
+ // kick the stat to force update
1473
+ this.kick();
1474
+ }
1475
+ }
1476
+ // reset the form, so that a user may upload a file again (with the same name)
1477
+ this.resetFormFields();
1478
+ // reset the internal metaData state
1479
+ this.metaData = undefined;
1480
+ this.duetChange.emit({
1481
+ originalEvent: ev,
1482
+ data: { files: this.files },
1483
+ component: "duet-upload",
1484
+ });
1475
1485
  }
1476
- // reset the form, so that a user may upload a file again (with the same name)
1477
- this.resetFormFields();
1478
- // reset the internal metaData state
1479
- this.metaData = undefined;
1480
- this.duetChange.emit({
1481
- originalEvent: ev,
1482
- data: { files: this.files },
1483
- component: "duet-upload",
1484
- });
1485
- }
1486
- get element() { return index.getElement(this); }
1487
- static get watchers() { return {
1488
- "valid": ["watchValidHandler"]
1489
- }; }
1486
+ get element() { return index.getElement(this); }
1487
+ static get watchers() { return {
1488
+ "valid": ["watchValidHandler"]
1489
+ }; }
1490
1490
  };
1491
1491
  DuetUpload.style = duetUploadCss;
1492
1492