@duetds/components 5.3.2 → 5.3.5

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 (260) hide show
  1. package/hydrate/index.js +89 -45
  2. package/lib/cjs/duet-action-button.cjs.entry.js +1 -1
  3. package/lib/cjs/duet-alert.cjs.entry.js +1 -1
  4. package/lib/cjs/duet-badge.cjs.entry.js +1 -1
  5. package/lib/cjs/duet-breadcrumb.cjs.entry.js +1 -1
  6. package/lib/cjs/duet-breadcrumbs.cjs.entry.js +1 -1
  7. package/lib/cjs/duet-button_2.cjs.entry.js +1 -1
  8. package/lib/cjs/duet-caption_4.cjs.entry.js +1 -1
  9. package/lib/cjs/duet-card.cjs.entry.js +1 -1
  10. package/lib/cjs/duet-checkbox.cjs.entry.js +1 -1
  11. package/lib/cjs/duet-choice_2.cjs.entry.js +2 -2
  12. package/lib/cjs/duet-collapsible.cjs.entry.js +1 -1
  13. package/lib/cjs/duet-combobox.cjs.entry.js +1 -1
  14. package/lib/cjs/duet-cookie-consent.cjs.entry.js +1 -1
  15. package/lib/cjs/duet-date-picker.cjs.entry.js +2 -2
  16. package/lib/cjs/duet-divider_2.cjs.entry.js +1 -1
  17. package/lib/cjs/duet-editable-table_3.cjs.entry.js +75 -43
  18. package/lib/cjs/duet-empty-state.cjs.entry.js +1 -1
  19. package/lib/cjs/duet-fieldset.cjs.entry.js +1 -1
  20. package/lib/cjs/duet-footer.cjs.entry.js +1 -1
  21. package/lib/cjs/duet-grid_2.cjs.entry.js +1 -1
  22. package/lib/cjs/duet-header_2.cjs.entry.js +2 -2
  23. package/lib/cjs/duet-hero.cjs.entry.js +1 -1
  24. package/lib/cjs/duet-icon.cjs.entry.js +1 -1
  25. package/lib/cjs/duet-input_2.cjs.entry.js +1 -1
  26. package/lib/cjs/duet-layout.cjs.entry.js +1 -1
  27. package/lib/cjs/duet-list_2.cjs.entry.js +1 -1
  28. package/lib/cjs/duet-modal.cjs.entry.js +2 -2
  29. package/lib/cjs/duet-notification_2.cjs.entry.js +1 -1
  30. package/lib/cjs/duet-number-input.cjs.entry.js +1 -1
  31. package/lib/cjs/duet-pagination_2.cjs.entry.js +1 -1
  32. package/lib/cjs/duet-progress.cjs.entry.js +1 -1
  33. package/lib/cjs/duet-radio_2.cjs.entry.js +1 -1
  34. package/lib/cjs/duet-range-slider.cjs.entry.js +1 -1
  35. package/lib/cjs/duet-scrollable_3.cjs.entry.js +1 -1
  36. package/lib/cjs/duet-select.cjs.entry.js +1 -1
  37. package/lib/cjs/duet-step_2.cjs.entry.js +1 -1
  38. package/lib/cjs/duet-textarea.cjs.entry.js +1 -1
  39. package/lib/cjs/duet-toggle.cjs.entry.js +1 -1
  40. package/lib/cjs/duet-tooltip.cjs.entry.js +1 -1
  41. package/lib/cjs/duet-tray.cjs.entry.js +1 -1
  42. package/lib/cjs/duet-upload-aria-status.cjs.entry.js +1 -1
  43. package/lib/cjs/duet-visually-hidden.cjs.entry.js +1 -1
  44. package/lib/cjs/duet.cjs.js +2 -2
  45. package/lib/cjs/{focus-utils-1de1fb9e.js → focus-utils-84c29960.js} +1 -1
  46. package/lib/cjs/{index-e25673c3.js → index-772cc42f.js} +1 -1
  47. package/lib/cjs/loader.cjs.js +2 -2
  48. package/lib/collection/components/duet-action-button/duet-action-button.js +3 -3
  49. package/lib/collection/components/duet-header/duet-header.css +28 -5
  50. package/lib/collection/components/duet-pagination/duet-pagination.js +6 -0
  51. package/lib/collection/components/duet-range-stepper/duet-range-stepper.js +4 -0
  52. package/lib/collection/components/duet-upload/duet-upload.css +3 -3
  53. package/lib/collection/components/duet-upload/duet-upload.js +113 -27
  54. package/lib/collection/components/duet-upload/errorcodes.utils.js +5 -4
  55. package/lib/collection/components/duet-upload/mock.helpers.js +16 -5
  56. package/lib/collection/components/duet-upload/upload-editable-item-error.js +4 -4
  57. package/lib/collection/components/duet-upload/upload-editable-item-inprogres.js +5 -2
  58. package/lib/collection/components/duet-upload/upload-editable-item-pending.js +4 -3
  59. package/lib/collection/components/duet-upload/upload-validators.js +6 -6
  60. package/lib/collection/components/duet-upload/xhr.helpers.js +1 -0
  61. package/lib/custom-elements-bundle/index.js +76 -44
  62. package/lib/duet/duet.esm.js +1 -1
  63. package/lib/duet/duet.js +1 -1
  64. package/lib/duet/{p-a79524ea.system.entry.js → p-01ccafd3.system.entry.js} +2 -2
  65. package/lib/duet/{p-a164b64d.entry.js → p-05ff2672.entry.js} +1 -1
  66. package/lib/duet/{p-b2351491.entry.js → p-083e39cc.entry.js} +1 -1
  67. package/lib/duet/{p-fdfa9d96.system.entry.js → p-0b426a83.system.entry.js} +1 -1
  68. package/lib/duet/{p-dfa83a7b.entry.js → p-0d188b2d.entry.js} +1 -1
  69. package/lib/duet/{p-7065da4f.entry.js → p-0f144788.entry.js} +1 -1
  70. package/lib/duet/{p-9518a50d.entry.js → p-100b6a91.entry.js} +1 -1
  71. package/lib/duet/{p-0a399341.system.entry.js → p-12b8cb2f.system.entry.js} +1 -1
  72. package/lib/duet/{p-8544ac3e.system.entry.js → p-16bc9a7e.system.entry.js} +1 -1
  73. package/lib/duet/{p-9b762624.entry.js → p-1717ed62.entry.js} +1 -1
  74. package/lib/duet/{p-6c4bb84d.system.entry.js → p-1a8dfe6e.system.entry.js} +1 -1
  75. package/lib/duet/{p-07a4933d.system.entry.js → p-20f4d5d2.system.entry.js} +1 -1
  76. package/lib/duet/{p-62f76416.entry.js → p-2553a64a.entry.js} +1 -1
  77. package/lib/duet/{p-14532cbb.system.entry.js → p-2d58c660.system.entry.js} +1 -1
  78. package/lib/duet/{p-d2eec878.entry.js → p-32dd246d.entry.js} +1 -1
  79. package/lib/duet/{p-e8a19b86.system.entry.js → p-35159c88.system.entry.js} +1 -1
  80. package/lib/duet/{p-1147c2f3.system.entry.js → p-35d6061d.system.entry.js} +1 -1
  81. package/lib/duet/{p-943a6f4f.entry.js → p-36924c8f.entry.js} +1 -1
  82. package/lib/duet/{p-dd1cebc6.system.entry.js → p-3d27e5ed.system.entry.js} +1 -1
  83. package/lib/duet/{p-8e84cb24.system.entry.js → p-3f1e781d.system.entry.js} +1 -1
  84. package/lib/duet/{p-de007928.system.entry.js → p-3f50d9bd.system.entry.js} +1 -1
  85. package/lib/duet/{p-efd2027f.system.entry.js → p-411bec39.system.entry.js} +1 -1
  86. package/lib/duet/{p-7f720f3d.system.entry.js → p-4260e8b5.system.entry.js} +1 -1
  87. package/lib/duet/{p-06d6fcbb.entry.js → p-43c1dcf5.entry.js} +1 -1
  88. package/lib/duet/{p-9e9a00fa.entry.js → p-442f1dd5.entry.js} +1 -1
  89. package/lib/duet/{p-e5541622.entry.js → p-4903478e.entry.js} +1 -1
  90. package/lib/duet/{p-324c6a7f.system.entry.js → p-4dcbaccf.system.entry.js} +1 -1
  91. package/lib/duet/{p-f36d233f.entry.js → p-4e8f57dd.entry.js} +1 -1
  92. package/lib/duet/{p-eab71bc1.entry.js → p-4fd4ddda.entry.js} +1 -1
  93. package/lib/duet/{p-cd6016c3.system.entry.js → p-5184e972.system.entry.js} +1 -1
  94. package/lib/duet/{p-96bd5181.entry.js → p-56ae348b.entry.js} +1 -1
  95. package/lib/duet/{p-a00567c5.entry.js → p-61507bc8.entry.js} +1 -1
  96. package/lib/duet/{p-195cbb65.system.js → p-631054f3.system.js} +1 -1
  97. package/lib/duet/{p-b15a7acd.entry.js → p-634fda0f.entry.js} +1 -1
  98. package/lib/duet/{p-5f751350.entry.js → p-64a691e3.entry.js} +1 -1
  99. package/lib/duet/{p-f62c6c1a.entry.js → p-661f842b.entry.js} +1 -1
  100. package/lib/duet/{p-eed733d0.entry.js → p-6dd1cf98.entry.js} +1 -1
  101. package/lib/duet/{p-05503430.system.entry.js → p-7382c47e.system.entry.js} +1 -1
  102. package/lib/duet/{p-7acbb1cf.entry.js → p-7de54632.entry.js} +1 -1
  103. package/lib/duet/{p-94a68b9a.entry.js → p-7dfe1c16.entry.js} +1 -1
  104. package/lib/duet/{p-e60b6064.system.entry.js → p-815f4a10.system.entry.js} +1 -1
  105. package/lib/duet/{p-7f501fed.system.entry.js → p-85c68d48.system.entry.js} +1 -1
  106. package/lib/duet/{p-b7a56046.entry.js → p-86a47942.entry.js} +1 -1
  107. package/lib/duet/{p-195f6e6b.system.entry.js → p-8708f306.system.entry.js} +1 -1
  108. package/lib/duet/{p-3e8e00aa.system.entry.js → p-89f53f18.system.entry.js} +1 -1
  109. package/lib/duet/{p-27e1329c.system.entry.js → p-8a472df4.system.entry.js} +1 -1
  110. package/lib/duet/{p-dfec73ab.system.entry.js → p-8b7adbf6.system.entry.js} +1 -1
  111. package/lib/duet/{p-29f6749b.system.js → p-8c282db8.system.js} +1 -1
  112. package/lib/duet/{p-fe7a158d.system.entry.js → p-8eb6610c.system.entry.js} +1 -1
  113. package/lib/duet/{p-abb3619b.entry.js → p-8f74030a.entry.js} +1 -1
  114. package/lib/duet/p-8fa7559b.system.entry.js +4 -0
  115. package/lib/duet/{p-ed86e7b8.system.entry.js → p-9027d0a4.system.entry.js} +1 -1
  116. package/lib/duet/{p-bc4dbe8f.system.entry.js → p-9071d4e1.system.entry.js} +1 -1
  117. package/lib/duet/{p-bd361dca.entry.js → p-909aaac4.entry.js} +1 -1
  118. package/lib/duet/{p-76502a6e.system.entry.js → p-923b03a6.system.entry.js} +1 -1
  119. package/lib/duet/{p-096d3138.system.entry.js → p-97bb6fdd.system.entry.js} +1 -1
  120. package/lib/duet/{p-c5353e57.system.entry.js → p-9df4bfa0.system.entry.js} +1 -1
  121. package/lib/duet/{p-47a3d44a.entry.js → p-a818e289.entry.js} +1 -1
  122. package/lib/duet/p-acaedb00.system.js +5 -0
  123. package/lib/duet/{p-6d6af360.entry.js → p-b48811b5.entry.js} +1 -1
  124. package/lib/duet/{p-e1dc474f.entry.js → p-b74364d3.entry.js} +1 -1
  125. package/lib/duet/{p-4eca850e.system.entry.js → p-b787e777.system.entry.js} +1 -1
  126. package/lib/duet/{p-58f4df49.entry.js → p-b88b18c3.entry.js} +1 -1
  127. package/lib/duet/{p-3a587bea.system.entry.js → p-b972e7b7.system.entry.js} +1 -1
  128. package/lib/duet/{p-be2cc769.system.entry.js → p-ba0a4b7e.system.entry.js} +1 -1
  129. package/lib/duet/p-bacb27a1.js +5 -0
  130. package/lib/duet/{p-b046cc6d.entry.js → p-c069f560.entry.js} +1 -1
  131. package/lib/duet/{p-781803f9.system.entry.js → p-c0d98307.system.entry.js} +1 -1
  132. package/lib/duet/{p-f1ac8970.entry.js → p-c4b6bf46.entry.js} +1 -1
  133. package/lib/duet/p-c60f00e7.system.entry.js +4 -0
  134. package/lib/duet/{p-40ba3e58.entry.js → p-c9f704c9.entry.js} +1 -1
  135. package/lib/duet/p-cdba4c82.entry.js +4 -0
  136. package/lib/duet/{p-e53b41b1.js → p-ce276fc8.js} +1 -1
  137. package/lib/duet/{p-44430576.entry.js → p-d06f9b6c.entry.js} +1 -1
  138. package/lib/duet/{p-a541f140.entry.js → p-dbb2579c.entry.js} +1 -1
  139. package/lib/duet/{p-3a196674.entry.js → p-dfa92326.entry.js} +1 -1
  140. package/lib/duet/{p-eda03e7a.system.entry.js → p-e00170a2.system.entry.js} +1 -1
  141. package/lib/duet/{p-2980439e.system.entry.js → p-e36b95e0.system.entry.js} +1 -1
  142. package/lib/duet/{p-c33d40b4.entry.js → p-e40b610d.entry.js} +1 -1
  143. package/lib/duet/{p-a2f33ea2.entry.js → p-e6fdaa31.entry.js} +1 -1
  144. package/lib/duet/{p-606f0e3e.system.entry.js → p-e908bfdc.system.entry.js} +1 -1
  145. package/lib/duet/{p-99fc1806.system.entry.js → p-e980faf9.system.entry.js} +1 -1
  146. package/lib/duet/{p-27df7993.entry.js → p-ea806947.entry.js} +1 -1
  147. package/lib/duet/{p-b2d8afd1.system.entry.js → p-f2dab640.system.entry.js} +1 -1
  148. package/lib/duet/{p-f68f4f90.entry.js → p-f301004d.entry.js} +1 -1
  149. package/lib/duet/{p-13b08905.system.entry.js → p-f9045aab.system.entry.js} +2 -2
  150. package/lib/duet/{p-83ccb4d1.system.entry.js → p-fab89c9d.system.entry.js} +1 -1
  151. package/lib/duet/{p-cd55d122.entry.js → p-fdaaa3ad.entry.js} +1 -1
  152. package/lib/duet/{p-60bc3fd1.entry.js → p-ff94713b.entry.js} +1 -1
  153. package/lib/esm/duet-action-button.entry.js +1 -1
  154. package/lib/esm/duet-alert.entry.js +1 -1
  155. package/lib/esm/duet-badge.entry.js +1 -1
  156. package/lib/esm/duet-breadcrumb.entry.js +1 -1
  157. package/lib/esm/duet-breadcrumbs.entry.js +1 -1
  158. package/lib/esm/duet-button_2.entry.js +1 -1
  159. package/lib/esm/duet-caption_4.entry.js +1 -1
  160. package/lib/esm/duet-card.entry.js +1 -1
  161. package/lib/esm/duet-checkbox.entry.js +1 -1
  162. package/lib/esm/duet-choice_2.entry.js +2 -2
  163. package/lib/esm/duet-collapsible.entry.js +1 -1
  164. package/lib/esm/duet-combobox.entry.js +1 -1
  165. package/lib/esm/duet-cookie-consent.entry.js +1 -1
  166. package/lib/esm/duet-date-picker.entry.js +2 -2
  167. package/lib/esm/duet-divider_2.entry.js +1 -1
  168. package/lib/esm/duet-editable-table_3.entry.js +75 -43
  169. package/lib/esm/duet-empty-state.entry.js +1 -1
  170. package/lib/esm/duet-fieldset.entry.js +1 -1
  171. package/lib/esm/duet-footer.entry.js +1 -1
  172. package/lib/esm/duet-grid_2.entry.js +1 -1
  173. package/lib/esm/duet-header_2.entry.js +2 -2
  174. package/lib/esm/duet-hero.entry.js +1 -1
  175. package/lib/esm/duet-icon.entry.js +1 -1
  176. package/lib/esm/duet-input_2.entry.js +1 -1
  177. package/lib/esm/duet-layout.entry.js +1 -1
  178. package/lib/esm/duet-list_2.entry.js +1 -1
  179. package/lib/esm/duet-modal.entry.js +2 -2
  180. package/lib/esm/duet-notification_2.entry.js +1 -1
  181. package/lib/esm/duet-number-input.entry.js +1 -1
  182. package/lib/esm/duet-pagination_2.entry.js +1 -1
  183. package/lib/esm/duet-progress.entry.js +1 -1
  184. package/lib/esm/duet-radio_2.entry.js +1 -1
  185. package/lib/esm/duet-range-slider.entry.js +1 -1
  186. package/lib/esm/duet-scrollable_3.entry.js +1 -1
  187. package/lib/esm/duet-select.entry.js +1 -1
  188. package/lib/esm/duet-step_2.entry.js +1 -1
  189. package/lib/esm/duet-textarea.entry.js +1 -1
  190. package/lib/esm/duet-toggle.entry.js +1 -1
  191. package/lib/esm/duet-tooltip.entry.js +1 -1
  192. package/lib/esm/duet-tray.entry.js +1 -1
  193. package/lib/esm/duet-upload-aria-status.entry.js +1 -1
  194. package/lib/esm/duet-visually-hidden.entry.js +1 -1
  195. package/lib/esm/duet.js +2 -2
  196. package/lib/esm/{focus-utils-634e7bc9.js → focus-utils-07c543df.js} +1 -1
  197. package/lib/esm/{index-59261780.js → index-bcca1cb8.js} +1 -1
  198. package/lib/esm/loader.js +2 -2
  199. package/lib/esm-es5/duet-action-button.entry.js +1 -1
  200. package/lib/esm-es5/duet-alert.entry.js +1 -1
  201. package/lib/esm-es5/duet-badge.entry.js +1 -1
  202. package/lib/esm-es5/duet-breadcrumb.entry.js +1 -1
  203. package/lib/esm-es5/duet-breadcrumbs.entry.js +1 -1
  204. package/lib/esm-es5/duet-button_2.entry.js +1 -1
  205. package/lib/esm-es5/duet-caption_4.entry.js +1 -1
  206. package/lib/esm-es5/duet-card.entry.js +1 -1
  207. package/lib/esm-es5/duet-checkbox.entry.js +1 -1
  208. package/lib/esm-es5/duet-choice_2.entry.js +1 -1
  209. package/lib/esm-es5/duet-collapsible.entry.js +1 -1
  210. package/lib/esm-es5/duet-combobox.entry.js +1 -1
  211. package/lib/esm-es5/duet-cookie-consent.entry.js +1 -1
  212. package/lib/esm-es5/duet-date-picker.entry.js +1 -1
  213. package/lib/esm-es5/duet-divider_2.entry.js +1 -1
  214. package/lib/esm-es5/duet-editable-table_3.entry.js +1 -1
  215. package/lib/esm-es5/duet-empty-state.entry.js +1 -1
  216. package/lib/esm-es5/duet-fieldset.entry.js +1 -1
  217. package/lib/esm-es5/duet-footer.entry.js +1 -1
  218. package/lib/esm-es5/duet-grid_2.entry.js +1 -1
  219. package/lib/esm-es5/duet-header_2.entry.js +2 -2
  220. package/lib/esm-es5/duet-hero.entry.js +1 -1
  221. package/lib/esm-es5/duet-icon.entry.js +1 -1
  222. package/lib/esm-es5/duet-input_2.entry.js +1 -1
  223. package/lib/esm-es5/duet-layout.entry.js +1 -1
  224. package/lib/esm-es5/duet-list_2.entry.js +1 -1
  225. package/lib/esm-es5/duet-modal.entry.js +1 -1
  226. package/lib/esm-es5/duet-notification_2.entry.js +1 -1
  227. package/lib/esm-es5/duet-number-input.entry.js +1 -1
  228. package/lib/esm-es5/duet-pagination_2.entry.js +1 -1
  229. package/lib/esm-es5/duet-progress.entry.js +1 -1
  230. package/lib/esm-es5/duet-radio_2.entry.js +1 -1
  231. package/lib/esm-es5/duet-range-slider.entry.js +1 -1
  232. package/lib/esm-es5/duet-scrollable_3.entry.js +1 -1
  233. package/lib/esm-es5/duet-select.entry.js +1 -1
  234. package/lib/esm-es5/duet-step_2.entry.js +1 -1
  235. package/lib/esm-es5/duet-textarea.entry.js +1 -1
  236. package/lib/esm-es5/duet-toggle.entry.js +1 -1
  237. package/lib/esm-es5/duet-tooltip.entry.js +1 -1
  238. package/lib/esm-es5/duet-tray.entry.js +1 -1
  239. package/lib/esm-es5/duet-upload-aria-status.entry.js +1 -1
  240. package/lib/esm-es5/duet-visually-hidden.entry.js +1 -1
  241. package/lib/esm-es5/duet.js +1 -1
  242. package/lib/esm-es5/{focus-utils-634e7bc9.js → focus-utils-07c543df.js} +1 -1
  243. package/lib/esm-es5/index-bcca1cb8.js +5 -0
  244. package/lib/esm-es5/loader.js +1 -1
  245. package/lib/types/components/duet-action-button/duet-action-button.d.ts +3 -3
  246. package/lib/types/components/duet-pagination/duet-pagination.d.ts +6 -0
  247. package/lib/types/components/duet-range-stepper/duet-range-stepper.d.ts +4 -0
  248. package/lib/types/components/duet-upload/duet-upload.d.ts +22 -1
  249. package/lib/types/components/duet-upload/errorcodes.utils.d.ts +3 -2
  250. package/lib/types/components/duet-upload/mock.helpers.d.ts +0 -1
  251. package/lib/types/components/duet-upload/upload-editable-item-error.d.ts +2 -0
  252. package/lib/types/components/duet-upload/upload-validators.d.ts +2 -1
  253. package/lib/types/components.d.ts +22 -1
  254. package/package.json +5 -5
  255. package/lib/duet/p-18f1a32e.js +0 -5
  256. package/lib/duet/p-2bc92bf3.entry.js +0 -4
  257. package/lib/duet/p-3b90bf38.system.entry.js +0 -4
  258. package/lib/duet/p-8342d3f7.system.entry.js +0 -4
  259. package/lib/duet/p-fc847cc0.system.js +0 -5
  260. package/lib/esm-es5/index-59261780.js +0 -5
@@ -2,7 +2,7 @@
2
2
  * Built with Duet Design System
3
3
  */
4
4
  const NAMESPACE = 'duet';
5
- const Env = /* duet */ {"cdnURILocal":"http://0.0.0.0:3334","cdnURIProd":"https://cdn.duetds.com/api","duetIconVersion":"2.3.15"};
5
+ const Env = /* duet */ {"cdnURILocal":"http://0.0.0.0:3334","cdnURIProd":"https://cdn.duetds.com/api","duetIconVersion":"2.4.1"};
6
6
 
7
7
  let scopeId;
8
8
  let contentRef;
@@ -6627,7 +6627,7 @@ const DuetHeaderHamburger = () => (h("div", { class: "duet-header-hamburger" },
6627
6627
  h("span", { class: "duet-header-bar" }),
6628
6628
  h("span", { class: "duet-header-bar" })));
6629
6629
 
6630
- const duetHeaderCss = "*,*::after,*::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}:host{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;display:block;width:100%}@supports (position: -webkit-sticky){:host{position:-webkit-sticky;top:-4rem;z-index:400}}@supports (position: sticky){:host{position:sticky;top:-4rem;z-index:400}}@supports (position: -webkit-sticky){:host(.duet-header-multi-level-desktop-variation){top:0}}@supports (position: sticky){:host(.duet-header-multi-level-desktop-variation){top:0}}.duet-header-reserved-space{height:4rem}@media (min-width: 62em){.duet-header-reserved-space.duet-with-links{height:7rem}}.duet-header{-webkit-user-select:none;user-select:none;position:fixed;top:0;left:0;z-index:400;display:block;width:100%;font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";font-size:0.875rem;font-weight:400;line-height:1.5;color:#00294d;text-align:left}.duet-header.duet-theme-turva{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:#171c3a}@media (min-width: 62em){.duet-header.duet-theme-turva{box-shadow:0 2px 6px 0 rgba(117, 117, 117, 0.13)}}@media (min-width: 62em){.duet-header{position:absolute;box-shadow:0 2px 6px 0 rgba(0, 41, 77, 0.07)}.duet-header.duet-header-inactive{position:fixed}}.duet-header *{-webkit-tap-highlight-color:rgba(0, 0, 0, 0)}.duet-header-top{position:relative;z-index:200;display:flex;flex-direction:row;align-items:center;width:100%;height:4rem;padding:0 16px;background:white;border-bottom:1px solid #e1e3e6;box-shadow:0 2px 6px 0 rgba(0, 41, 77, 0.07)}@media (min-width: 62em){.duet-header-top{z-index:100;padding:0 28px;box-shadow:none}.duet-header-top duet-logo{padding-right:4px}}@media (min-width: 106.25em){.duet-header-top{padding:0 48px}}.duet-theme-turva .duet-header-top{border-color:#e4e4e6;box-shadow:0 2px 6px 0 rgba(117, 117, 117, 0.13)}@media (min-width: 62em){.duet-theme-turva .duet-header-top{box-shadow:none}}.duet-theme-turva .duet-header-top duet-logo{left:-80px !important;margin-top:-8px !important}.duet-header-top .duet-header-region{max-width:200px;padding-left:16px;margin-top:1px;margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-left:1px solid #cfd2d4}.duet-theme-turva .duet-header-top .duet-header-region{border-color:#cfcfd1}@media (max-width: 35.9375em){.duet-header-top .duet-header-region{display:none}}@media (min-width: 62em){.duet-header-top .duet-header-region{padding-left:19px}}.duet-header-bottom{position:fixed;top:4rem;bottom:0;left:0;z-index:100;display:flex;flex-direction:column;width:100%;overflow-y:auto;visibility:hidden;background:#f3f9fc;opacity:0;-webkit-overflow-scrolling:touch}.duet-theme-turva .duet-header-bottom{background:#f5f5f7}@media (min-width: 62em){.duet-header-bottom{position:relative;top:auto;bottom:auto;z-index:200;flex-direction:row;overflow:visible;visibility:visible;background:white;opacity:1}.duet-header-bottom.duet-header-inactive{position:relative}}.duet-header-bottom.active{visibility:visible;opacity:1;transition:opacity 300ms ease, visibility 300ms ease}@media (min-width: 62em){.duet-header-bottom{position:relative;transition:none !important}}.duet-header-items,.duet-header-bottom-utils,.duet-header-utils{opacity:0;transition:transform 600ms ease, opacity 600ms ease;transform:translateY(-28px)}@media (min-width: 62em){.duet-header-items,.duet-header-bottom-utils,.duet-header-utils{opacity:1;transition:none !important;transform:none}}.active .duet-header-items,.active .duet-header-bottom-utils,.active .duet-header-utils{opacity:1;transform:translateY(0)}.duet-header-items{position:relative;z-index:300;display:block;width:100%;font-size:1rem;font-weight:400;line-height:1.5;background:white}@media (min-width: 62em){.duet-header-items{z-index:100;display:flex;flex-direction:row;padding:0 21.5384615385px}}@media (min-width: 106.25em){.duet-header-items{padding-left:43.6363636364px}}.duet-header-items .duet-header-item-container{border-bottom:1px solid #e1e3e6;border-radius:0}@media (min-width: 62em){.duet-header-items .duet-header-item-container{border:0}}.duet-header-items .duet-header-second-level .duet-header-item{padding:0 40px;border:0}.duet-header-items .duet-header-second-level .duet-header-button{border:0}.duet-header-items .duet-header-second-level .duet-header-dropdown-content{padding:0;border:0}.duet-header-items .duet-header-third-level .duet-header-item{padding:0 75px}.duet-header-items .duet-header-item{position:relative;display:flex;align-items:center;width:100%;padding:0 20px;overflow:hidden;font-size:1rem;line-height:48px;color:#00294d;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}@media (min-width: 62em){.duet-header-items .duet-header-item{font-weight:600;border-radius:4px}}.duet-theme-turva .duet-header-items .duet-header-item{color:#171c3a;border-color:#e1e3e6}.duet-header-items .duet-header-item:hover{color:#004d80}.duet-theme-turva .duet-header-items .duet-header-item:hover{color:#444445}.duet-header-items .duet-header-item:focus{outline:0}:host(.user-is-tabbing) .duet-header-items .duet-header-item:focus{box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3}:host(.user-is-tabbing) .duet-theme-turva .duet-header-items .duet-header-item:focus{box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a}@media (min-width: 62em){.duet-header-items .duet-header-item{width:auto;max-width:300px;padding:0 12px;overflow:hidden;font-size:0.875rem;text-overflow:ellipsis;border:0}}.duet-header-items .duet-header-item.active{color:#0077b3}.duet-theme-turva .duet-header-items .duet-header-item.active{color:#c60c30}.duet-header-items .duet-header-item.active:hover{color:#0077b3}.duet-theme-turva .duet-header-items .duet-header-item.active:hover{color:#c60c30}.duet-header-items .duet-header-item.active::after{position:absolute;top:0;bottom:0;left:0;width:4px;content:\"\";background:#0077b3}.duet-theme-turva .duet-header-items .duet-header-item.active::after{background:#c60c30}@media (min-width: 62em){.duet-header-items .duet-header-item.active::after{top:auto;left:12px;width:calc(100% - 24px);height:3px}}.duet-header-toggle{display:flex;align-items:center;justify-content:center;width:48px;height:48px;margin-right:-8px;margin-left:auto;cursor:pointer;border-radius:4px;-webkit-appearance:none;appearance:none}.duet-header-toggle:focus{outline:0}:host(.user-is-tabbing) .duet-header-toggle:focus{box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3}:host(.user-is-tabbing) .duet-theme-turva .duet-header-toggle:focus{box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a}@media (min-width: 62em){.duet-header-toggle{display:none}}.duet-header-hamburger{position:relative;width:24px;height:24px;margin-top:5px !important;pointer-events:none;transition:0.4s ease-in-out;backface-visibility:hidden}.duet-header-hamburger .duet-header-bar{position:absolute;left:0;display:block;width:100%;height:2px;background:#00294d;border-radius:20rem;opacity:1;transition:0.25s ease-in-out;transform:rotate(0deg) scale(0.98)}.duet-theme-turva .duet-header-hamburger .duet-header-bar{background:#171c3a}.duet-header-hamburger .duet-header-bar:nth-child(1){top:0}.duet-header-hamburger .duet-header-bar:nth-child(2),.duet-header-hamburger .duet-header-bar:nth-child(3){top:7px}.duet-header-hamburger .duet-header-bar:nth-child(4){top:14px}button.active .duet-header-hamburger .duet-header-bar:nth-child(1){top:7px;left:50%;width:0%}button.active .duet-header-hamburger .duet-header-bar:nth-child(2){transform:rotate(45deg)}button.active .duet-header-hamburger .duet-header-bar:nth-child(3){transform:rotate(-45deg)}button.active .duet-header-hamburger .duet-header-bar:nth-child(4){top:7px;left:50%;width:0%}.duet-header-utils{display:flex;flex-direction:column;width:100%}@media (min-width: 62em){.duet-header-utils{position:absolute;top:-4rem;right:0;z-index:999999999;flex-direction:row;align-items:center;justify-content:space-between;width:auto;margin-right:20px}}@media (min-width: 106.25em){.duet-header-utils{margin-right:36px}}@media (min-width: 62em){.duet-header-bottom-utils{position:absolute;top:0;right:0;z-index:999999999;margin-right:20px}}@media (min-width: 106.25em){.duet-header-bottom-utils{margin-right:36px}}button{font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"}.duet-theme-turva button{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"}.duet-header-button{position:relative;display:flex;align-items:center;width:100%;height:48px;padding:0 20px;overflow:hidden;font-size:1rem;font-weight:400;line-height:48px;color:#00294d;text-align:left;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;border-bottom:1px solid #e1e3e6;border-radius:4px;-webkit-appearance:none;appearance:none}.duet-theme-turva .duet-header-button{color:#171c3a;border-color:#e4e4e6}.duet-header-button:hover{color:#004d80}.duet-theme-turva .duet-header-button:hover{color:#444445}.duet-header-button:focus{outline:0}:host(.user-is-tabbing) .duet-header-button:focus{box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3}:host(.user-is-tabbing) .duet-theme-turva .duet-header-button:focus{box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a}.duet-header-button:active{opacity:0.75}@media (min-width: 62em){.duet-header-button{width:auto;max-width:200px;height:4rem;padding:0 16px;font-size:0.875rem;line-height:4rem;border:0}.duet-header-button::before{position:absolute;top:50%;right:0;width:1px;height:20px;content:\"\";background:#cfd2d4;transform:translateY(-50%)}.duet-theme-turva .duet-header-button::before{background:#cfcfd1}}.duet-header-button.active{color:#0077b3;border-radius:0}.duet-theme-turva .duet-header-button.active{color:#c60c30}.duet-header-button.active:hover{color:#0077b3}.duet-theme-turva .duet-header-button.active:hover{color:#c60c30}@media (min-width: 62em){.duet-header-button.active::after{position:absolute;top:0;bottom:0;left:0;width:3px;content:\"\";background:#0077b3}.duet-theme-turva .duet-header-button.active::after{color:#c60c30}}.duet-header-utils .duet-header-button.duet-header-logout{align-self:center;justify-content:center;width:auto;height:2.5rem;margin:2.25rem 0;font-weight:600;border:2px solid #00294d;border-radius:20rem}.duet-theme-turva .duet-header-utils .duet-header-button.duet-header-logout{border-color:#171c3a}.duet-header-utils .duet-header-button.duet-header-logout .duet-header-icon{margin-right:0.5rem}.duet-header-utils .duet-header-button.duet-header-logout .duet-header-button-label{font-size:0.875rem}@media (min-width: 62em){.duet-header-utils .duet-header-button.duet-header-logout{height:4rem;margin:0;font-weight:400;border:0}.duet-header-utils .duet-header-button.duet-header-logout .duet-header-icon{margin-right:0.75rem}}.duet-header-no-action{pointer-events:none}.duet-header-user-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (min-width: 62em){.duet-header-utils>*:last-child::before,.duet-header-utils>*:last-child button::before{display:none}}@media (min-width: 62em){.duet-header-utils>*:last-child .duet-header-dropdown-content{right:0;left:auto}}.duet-header-language{text-transform:uppercase}.duet-header-language.active,.duet-header-language.active:hover,.duet-header-contact.active,.duet-header-contact.active:hover{color:inherit}.duet-theme-turva .duet-header-language.active,.duet-theme-turva .duet-header-language.active:hover,.duet-theme-turva .duet-header-contact.active,.duet-theme-turva .duet-header-contact.active:hover{color:inherit}.duet-header-dropdown .duet-header-language.duet-header-dropdown-toggle.active::after,.duet-header-dropdown .duet-header-language.duet-header-dropdown-toggle.active:hover::after,.duet-header-dropdown .duet-header-contact.duet-header-dropdown-toggle.active::after,.duet-header-dropdown .duet-header-contact.duet-header-dropdown-toggle.active:hover::after{width:0}@media (min-width: 62em){.duet-header-dropdown .duet-header-language.duet-header-dropdown-toggle.active::after,.duet-header-dropdown .duet-header-language.duet-header-dropdown-toggle.active:hover::after,.duet-header-dropdown .duet-header-contact.duet-header-dropdown-toggle.active::after,.duet-header-dropdown .duet-header-contact.duet-header-dropdown-toggle.active:hover::after{width:100%}}.duet-header-icon{display:inline-flex;min-width:12px;margin-right:12px;font-size:0;line-height:normal;vertical-align:baseline}@media (min-width: 62em){.duet-header-icon{margin-right:8px}}.duet-header-caret{position:absolute;top:50%;right:20px;display:flex;width:10px;height:10px;margin-left:8px;line-height:normal;pointer-events:none;transition:300ms ease;transform:translateY(-50%);transform-origin:50% 50%}@media (min-width: 62em){.duet-header-caret{width:7px;height:7px}}.duet-header-caret duet-icon{width:10px}.duet-header-dropdown-toggle.active .duet-header-caret{transform:translateY(-50%) rotate(180deg)}.duet-header-dropdown-toggle:focus{outline:0}:host(.user-is-tabbing) .duet-header-dropdown-toggle:focus{box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3}:host(.user-is-tabbing) .duet-theme-turva .duet-header-dropdown-toggle:focus{box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a}.duet-header-dropdown-toggle:active{outline:none}.duet-header-badge{display:inline-block;width:6px;height:6px;margin-top:-1rem;margin-left:5px;vertical-align:top;background:#f7b228;border-radius:50%;box-shadow:0 0 0 1px #c18b1f}.duet-theme-turva .duet-header-badge{background:#faa40f}.active-bar{color:#0077b3}.active-bar::after{position:absolute;top:0;bottom:0;left:0;width:4px;content:\"\";background:#0077b3}.duet-theme-turva .active-bar::after{background:#c60c30}.duet-header-dropdown{position:relative}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-toggle{z-index:200;padding-right:36px;overflow:hidden;transition:border 300ms ease}}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-toggle::after{position:absolute;top:auto;bottom:0;left:0;display:block !important;width:100%;height:3px !important;content:\"\";background:#0077b3;transition:300ms ease;transform:translateY(3px)}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle::after{background:#c60c30}}.duet-header-dropdown .duet-header-dropdown-toggle.active,.duet-header-dropdown .duet-header-dropdown-toggle.active:hover{border-bottom:1px solid #f5f8fa}.duet-header-dropdown .duet-header-dropdown-toggle.active::after,.duet-header-dropdown .duet-header-dropdown-toggle.active:hover::after{position:absolute;top:0;bottom:0;left:0;width:4px;content:\"\";background:#0077b3}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle.active::after,.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle.active:hover::after{background:#c60c30}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle.active,.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle.active:hover{border-color:#f5f5f7}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-toggle.active,.duet-header-dropdown .duet-header-dropdown-toggle.active:hover{color:#004d80;border:0}.duet-header-dropdown .duet-header-dropdown-toggle.active::after,.duet-header-dropdown .duet-header-dropdown-toggle.active:hover::after{position:absolute;top:auto;bottom:0;left:0;width:100%;height:3px;transform:translateY(0)}}.duet-header-dropdown .duet-header-dropdown-content{display:none;padding-bottom:16px;background:#f3f9fc;border-bottom:1px solid #e1e3e6}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-content{background:#f5f5f7;border-color:#e1e3e6}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-content{position:absolute;top:100%;left:0;z-index:600;display:block;min-width:150px;padding-top:16px;padding-left:0;visibility:hidden;border:0;border-radius:4px;border-top-left-radius:0;border-top-right-radius:0;box-shadow:0 4px 10px 0 rgba(0, 41, 77, 0.15);opacity:0;transition:300ms ease;transform:scale(0.85) translateZ(0) translateY(-20px)}.duet-header-dropdown .duet-header-dropdown-content.duet-header-session-items{right:0%;left:auto;min-width:225px}.duet-header-dropdown .duet-header-dropdown-content.duet-header-session-items .duet-header-session-label{padding:0 20px;font-weight:600}}@media (min-width: 64.0625em){.duet-header-dropdown .duet-header-dropdown-content{min-width:170px}.duet-header-dropdown .duet-header-dropdown-content.duet-header-session-items{min-width:225px}}.duet-header-dropdown .duet-header-dropdown-content.active{display:block}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-content.active{visibility:visible;opacity:1;transform:translateZ(0) translateY(0)}}.duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item){padding:3px 8px 4px !important;position:relative;display:block;width:100%;padding-right:16px;padding-left:48px !important;overflow:hidden;font-size:0.875rem;font-weight:400;line-height:1.5;color:#00294d;text-align:left;text-decoration:none;white-space:nowrap;cursor:pointer;transition:300ms ease}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item){color:#171c3a}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item){padding-right:20px !important;padding-left:20px !important}}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item):hover{background:#e6f2f8}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item):hover{background:#f9e6ea}}.duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item):focus{outline:0}:host(.user-is-tabbing) .duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item):focus{box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3}:host(.user-is-tabbing) .duet-theme-turva .duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item):focus{box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a}.duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item).active{padding-right:36px;font-weight:600;vertical-align:baseline}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item).active{font-weight:700}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item).active{color:white;background:#0077b3}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item).active{background:#c60c30}}.duet-header-dropdown .duet-header-dropdown-content .duet-header-link-external{margin-left:4px}.duet-header-back .duet-header-top{flex-direction:row;align-items:center;justify-content:center}.duet-header-back duet-button{position:absolute;top:50%;left:36px;transform:translateY(-50%)}@media (max-width: 35.9375em){.duet-header-back duet-button{left:20px;max-width:40px;padding:0 12px;overflow:hidden}}.duet-header-back .duet-header-toggle{display:none !important}.duet-header-skip{padding:15px 28px 16px !important;position:absolute;top:-100%;left:-100%;z-index:200;width:1px;min-width:190px;height:1px;overflow:hidden;font-weight:600;color:#0077b3;text-align:center;text-decoration:none;background:white;border-radius:4px;opacity:0}.duet-header-skip:focus{outline:0;box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3}.duet-theme-turva .duet-header-skip:focus,.duet-header-skip:focus.duet-theme-turva{box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a}.duet-theme-turva .duet-header-skip{min-width:120px;color:#171c3a}@media (min-width: 106.25em){.duet-header-skip{margin-left:20px}}.duet-header-skip:focus{top:12px;left:20px;width:auto;height:auto;outline:0;opacity:1}.duet-header-multi-level-desktop{height:6rem}.duet-header-multi-level-desktop .duet-header-top{justify-content:space-between;height:6rem}.duet-header-multi-level-desktop .duet-header-button{height:6rem}.duet-header-multi-level-desktop .logo-and-segment{display:flex;flex-basis:0;flex-direction:column;flex-grow:1;padding-top:1rem}.duet-header-multi-level-desktop .logo-and-segment .duet-header-dropdown{z-index:400;margin-left:2rem}.duet-header-multi-level-desktop .logo-and-segment .duet-header-dropdown .duet-header-dropdown-content{background:#f3f9fc}.duet-header-multi-level-desktop .logo-and-segment button{align-items:flex-start;height:2rem;font-weight:600;line-height:1rem}.duet-header-multi-level-desktop .logo-and-segment button::before{display:none}.duet-header-multi-level-desktop .logo-and-segment .duet-header-caret{top:25%}.duet-header-multi-level-desktop-nav{display:flex}.duet-header-multi-level-desktop-nav .duet-header-dropdown{position:static}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-toggle{z-index:400;padding-right:1rem;font-size:1rem;font-weight:600}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-toggle.active{color:#0077b3}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-toggle.active:not(.open) .duet-header-caret{transform:translateY(-50%) rotate(0deg)}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content{z-index:399;display:flex;justify-content:center;width:100%;height:4.5rem;padding:0;background:#f3f9fc;border-top:1px solid #e1e3e6;border-bottom:1px solid #e1e3e6;box-shadow:0 2px 6px 0 rgba(0, 41, 77, 0.07);transition:none}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content a{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;width:auto;min-width:6rem;height:100%;padding:0 1rem !important;font-weight:600}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content a::after{position:absolute;top:auto;bottom:0;left:0;display:block !important;width:100%;height:3px;content:\"\";background:#0077b3;transition:300ms ease;transform:translateY(3px)}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content a.active{font-weight:600;color:#0077b3;background:none}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content a.active::after{transform:translateY(0)}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content a .duet-header-icon{margin:0}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content .duet-header-badge{position:absolute;margin-top:-2rem;margin-right:-2.25rem}.duet-header-multi-level-desktop-nav button::before{display:none}.duet-header-multi-level-desktop-nav .duet-header-caret{right:1%}.duet-header-multi-level-desktop-utils{display:flex;flex-basis:0;flex-grow:1;justify-content:flex-end}.duet-header-multi-level-desktop-utils>:last-child::before{display:none}.duet-header-multi-level-desktop-utils>:last-child.duet-header-dropdown .duet-header-button::before{display:none}.duet-header-multi-level-desktop-utils .duet-header-dropdown{z-index:400}.duet-header-multi-level-desktop-utils .duet-header-dropdown .duet-header-dropdown-content{background:#f3f9fc}.duet-header-multi-level-desktop-utils .duet-header-button-label,.duet-header-multi-level-desktop-utils .duet-header-dropdown-label{display:none}@media (min-width: 64.0625em){.duet-header-multi-level-desktop-utils .duet-header-button-label,.duet-header-multi-level-desktop-utils .duet-header-dropdown-label{display:initial}}.duet-header-multi-level-desktop .duet-theme-turva .logo-and-segment .duet-header-dropdown .duet-header-dropdown-content{background:#fcf3f4}.duet-header-multi-level-desktop .duet-theme-turva .duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-toggle.active{color:#c60c30}.duet-header-multi-level-desktop .duet-theme-turva .duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content{background:#fcf3f4;border-color:#e4e4e6}.duet-header-multi-level-desktop .duet-theme-turva .duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content a::after{background:#c60c30}.duet-header-multi-level-desktop .duet-theme-turva .duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content a.active{color:#c60c30;background:none}.duet-header-multi-level-desktop .duet-theme-turva .duet-header-multi-level-desktop-utils .duet-header-dropdown .duet-header-dropdown-content{background:#fcf3f4}";
6630
+ const duetHeaderCss = "*,*::after,*::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}:host{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;display:block;width:100%}@supports (position: -webkit-sticky){:host{position:-webkit-sticky;top:-4rem;z-index:400}}@supports (position: sticky){:host{position:sticky;top:-4rem;z-index:400}}@supports (position: -webkit-sticky){:host(.duet-header-multi-level-desktop-variation){top:0}}@supports (position: sticky){:host(.duet-header-multi-level-desktop-variation){top:0}}.duet-header-reserved-space{height:4rem}@media (min-width: 62em){.duet-header-reserved-space.duet-with-links{height:7rem}}.duet-header{-webkit-user-select:none;user-select:none;position:fixed;top:0;left:0;z-index:400;display:block;width:100%;font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";font-size:0.875rem;font-weight:400;line-height:1.5;color:#00294d;text-align:left}.duet-header.duet-theme-turva{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:#171c3a}@media (min-width: 62em){.duet-header.duet-theme-turva{box-shadow:0 2px 6px 0 rgba(117, 117, 117, 0.13)}}@media (min-width: 62em){.duet-header{position:absolute;box-shadow:0 2px 6px 0 rgba(0, 41, 77, 0.07)}.duet-header.duet-header-inactive{position:fixed}}.duet-header *{-webkit-tap-highlight-color:rgba(0, 0, 0, 0)}.duet-header-top{position:relative;z-index:200;display:flex;flex-direction:row;align-items:center;width:100%;height:4rem;padding:0 16px;background:white;border-bottom:1px solid #e1e3e6;box-shadow:0 2px 6px 0 rgba(0, 41, 77, 0.07)}@media (min-width: 62em){.duet-header-top{z-index:100;padding:0 28px;box-shadow:none}.duet-header-top duet-logo{padding-right:4px}}@media (min-width: 106.25em){.duet-header-top{padding:0 48px}}.duet-theme-turva .duet-header-top{border-color:#e4e4e6;box-shadow:0 2px 6px 0 rgba(117, 117, 117, 0.13)}@media (min-width: 62em){.duet-theme-turva .duet-header-top{box-shadow:none}}.duet-theme-turva .duet-header-top duet-logo{left:-80px !important;margin-top:-8px !important}.duet-header-top .duet-header-region{max-width:200px;padding-left:16px;margin-top:1px;margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-left:1px solid #cfd2d4}.duet-theme-turva .duet-header-top .duet-header-region{border-color:#cfcfd1}@media (max-width: 35.9375em){.duet-header-top .duet-header-region{display:none}}@media (min-width: 62em){.duet-header-top .duet-header-region{padding-left:19px}}.duet-header-bottom{position:fixed;top:4rem;bottom:0;left:0;z-index:100;display:flex;flex-direction:column;width:100%;overflow-y:auto;visibility:hidden;background:#f3f9fc;opacity:0;-webkit-overflow-scrolling:touch}.duet-theme-turva .duet-header-bottom{background:#f5f5f7}@media (min-width: 62em){.duet-header-bottom{position:relative;top:auto;bottom:auto;z-index:200;flex-direction:row;overflow:visible;visibility:visible;background:white;opacity:1}.duet-header-bottom.duet-header-inactive{position:relative}}.duet-header-bottom.active{visibility:visible;opacity:1;transition:opacity 300ms ease, visibility 300ms ease}@media (min-width: 62em){.duet-header-bottom{position:relative;transition:none !important}}.duet-header-items,.duet-header-bottom-utils,.duet-header-utils{opacity:0;transition:transform 600ms ease, opacity 600ms ease;transform:translateY(-28px)}@media (min-width: 62em){.duet-header-items,.duet-header-bottom-utils,.duet-header-utils{opacity:1;transition:none !important;transform:none}}.active .duet-header-items,.active .duet-header-bottom-utils,.active .duet-header-utils{opacity:1;transform:translateY(0)}.duet-header-items{position:relative;z-index:300;display:block;width:100%;font-size:1rem;font-weight:400;line-height:1.5;background:white}@media (min-width: 62em){.duet-header-items{z-index:100;display:flex;flex-direction:row;padding:0 21.5384615385px}}@media (min-width: 106.25em){.duet-header-items{padding-left:43.6363636364px}}.duet-header-items .duet-header-item-container{border-bottom:1px solid #e1e3e6;border-radius:0}@media (min-width: 62em){.duet-header-items .duet-header-item-container{border:0}}.duet-header-items .duet-header-second-level .duet-header-item{padding:0 40px;border:0}.duet-header-items .duet-header-second-level .duet-header-button{border:0}.duet-header-items .duet-header-second-level .duet-header-dropdown-content{padding:0;border:0}.duet-header-items .duet-header-third-level .duet-header-item{padding:0 75px}.duet-header-items .duet-header-item{position:relative;display:flex;align-items:center;width:100%;padding:0 20px;overflow:hidden;font-size:1rem;line-height:48px;color:#00294d;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}@media (min-width: 62em){.duet-header-items .duet-header-item{font-weight:600;border-radius:4px}}.duet-theme-turva .duet-header-items .duet-header-item{color:#171c3a;border-color:#e1e3e6}.duet-header-items .duet-header-item:hover{color:#004d80}.duet-theme-turva .duet-header-items .duet-header-item:hover{color:#444445}.duet-header-items .duet-header-item:focus{outline:0}:host(.user-is-tabbing) .duet-header-items .duet-header-item:focus{box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3}:host(.user-is-tabbing) .duet-theme-turva .duet-header-items .duet-header-item:focus{box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a}@media (min-width: 62em){.duet-header-items .duet-header-item{width:auto;max-width:300px;padding:0 12px;overflow:hidden;font-size:0.875rem;text-overflow:ellipsis;border:0}}.duet-header-items .duet-header-item.active{color:#0077b3}.duet-theme-turva .duet-header-items .duet-header-item.active{color:#c60c30}.duet-header-items .duet-header-item.active:hover{color:#0077b3}.duet-theme-turva .duet-header-items .duet-header-item.active:hover{color:#c60c30}.duet-header-items .duet-header-item.active::after{position:absolute;top:0;bottom:0;left:0;width:4px;content:\"\";background:#0077b3}.duet-theme-turva .duet-header-items .duet-header-item.active::after{background:#c60c30}@media (min-width: 62em){.duet-header-items .duet-header-item.active::after{top:auto;left:12px;width:calc(100% - 24px);height:3px}}.duet-header-toggle{display:flex;align-items:center;justify-content:center;width:48px;height:48px;margin-right:-8px;margin-left:auto;cursor:pointer;border-radius:4px;-webkit-appearance:none;appearance:none}.duet-header-toggle:focus{outline:0}:host(.user-is-tabbing) .duet-header-toggle:focus{box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3}:host(.user-is-tabbing) .duet-theme-turva .duet-header-toggle:focus{box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a}@media (min-width: 62em){.duet-header-toggle{display:none}}.duet-header-hamburger{position:relative;width:24px;height:24px;margin-top:5px !important;pointer-events:none;transition:0.4s ease-in-out;backface-visibility:hidden}.duet-header-hamburger .duet-header-bar{position:absolute;left:0;display:block;width:100%;height:2px;background:#00294d;border-radius:20rem;opacity:1;transition:0.25s ease-in-out;transform:rotate(0deg) scale(0.98)}.duet-theme-turva .duet-header-hamburger .duet-header-bar{background:#171c3a}.duet-header-hamburger .duet-header-bar:nth-child(1){top:0}.duet-header-hamburger .duet-header-bar:nth-child(2),.duet-header-hamburger .duet-header-bar:nth-child(3){top:7px}.duet-header-hamburger .duet-header-bar:nth-child(4){top:14px}button.active .duet-header-hamburger .duet-header-bar:nth-child(1){top:7px;left:50%;width:0%}button.active .duet-header-hamburger .duet-header-bar:nth-child(2){transform:rotate(45deg)}button.active .duet-header-hamburger .duet-header-bar:nth-child(3){transform:rotate(-45deg)}button.active .duet-header-hamburger .duet-header-bar:nth-child(4){top:7px;left:50%;width:0%}.duet-header-utils{display:flex;flex-direction:column;width:100%}@media (min-width: 62em){.duet-header-utils{position:absolute;top:-4rem;right:0;z-index:999999999;flex-direction:row;align-items:center;justify-content:space-between;width:auto;margin-right:20px}}@media (min-width: 106.25em){.duet-header-utils{margin-right:36px}}@media (min-width: 62em){.duet-header-bottom-utils{position:absolute;top:0;right:0;z-index:999999999;margin-right:20px}}@media (min-width: 106.25em){.duet-header-bottom-utils{margin-right:36px}}button{font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"}.duet-theme-turva button{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"}.duet-header-button{position:relative;display:flex;align-items:center;width:100%;height:48px;padding:0 20px;overflow:hidden;font-size:1rem;font-weight:400;line-height:48px;color:#00294d;text-align:left;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;border-bottom:1px solid #e1e3e6;border-radius:4px;-webkit-appearance:none;appearance:none}.duet-theme-turva .duet-header-button{color:#171c3a;border-color:#e4e4e6}.duet-header-button:hover{color:#004d80}.duet-theme-turva .duet-header-button:hover{color:#940925}.duet-header-button:focus{outline:0}:host(.user-is-tabbing) .duet-header-button:focus{box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3}:host(.user-is-tabbing) .duet-theme-turva .duet-header-button:focus{box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a}.duet-header-button:active{opacity:0.75}@media (min-width: 62em){.duet-header-button{width:auto;max-width:200px;height:4rem;padding:0 16px;font-size:0.875rem;line-height:4rem;border:0}.duet-header-button::before{position:absolute;top:50%;right:0;width:1px;height:20px;content:\"\";background:#cfd2d4;transform:translateY(-50%)}.duet-theme-turva .duet-header-button::before{background:#cfcfd1}}.duet-header-button.active{color:#0077b3;border-radius:0}.duet-theme-turva .duet-header-button.active{color:#c60c30}.duet-header-button.active:hover{color:#0077b3}.duet-theme-turva .duet-header-button.active:hover{color:#c60c30}@media (min-width: 62em){.duet-header-button.active::after{position:absolute;top:0;bottom:0;left:0;width:3px;content:\"\";background:#0077b3}.duet-theme-turva .duet-header-button.active::after{color:#c60c30}}.duet-header-utils .duet-header-button.duet-header-logout{align-self:center;justify-content:center;width:auto;height:2.5rem;margin:2.25rem 0;font-weight:600;border:2px solid #00294d;border-radius:20rem}.duet-theme-turva .duet-header-utils .duet-header-button.duet-header-logout{border-color:#171c3a}.duet-header-utils .duet-header-button.duet-header-logout .duet-header-icon{margin-right:0.5rem}.duet-header-utils .duet-header-button.duet-header-logout .duet-header-button-label{font-size:0.875rem}@media (min-width: 62em){.duet-header-utils .duet-header-button.duet-header-logout{height:4rem;margin:0;font-weight:400;border:0}.duet-header-utils .duet-header-button.duet-header-logout .duet-header-icon{margin-right:0.75rem}}.duet-header-no-action{pointer-events:none}.duet-header-user-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (min-width: 62em){.duet-header-utils>*:last-child::before,.duet-header-utils>*:last-child button::before{display:none}}@media (min-width: 62em){.duet-header-utils>*:last-child .duet-header-dropdown-content{right:0;left:auto}}.duet-header-language{text-transform:uppercase}.duet-header-language.active,.duet-header-language.active:hover,.duet-header-contact.active,.duet-header-contact.active:hover{color:inherit}.duet-theme-turva .duet-header-language.active,.duet-theme-turva .duet-header-language.active:hover,.duet-theme-turva .duet-header-contact.active,.duet-theme-turva .duet-header-contact.active:hover{color:inherit}.duet-header-dropdown .duet-header-language.duet-header-dropdown-toggle.active::after,.duet-header-dropdown .duet-header-language.duet-header-dropdown-toggle.active:hover::after,.duet-header-dropdown .duet-header-contact.duet-header-dropdown-toggle.active::after,.duet-header-dropdown .duet-header-contact.duet-header-dropdown-toggle.active:hover::after{width:0}@media (min-width: 62em){.duet-header-dropdown .duet-header-language.duet-header-dropdown-toggle.active::after,.duet-header-dropdown .duet-header-language.duet-header-dropdown-toggle.active:hover::after,.duet-header-dropdown .duet-header-contact.duet-header-dropdown-toggle.active::after,.duet-header-dropdown .duet-header-contact.duet-header-dropdown-toggle.active:hover::after{width:100%}}.duet-header-icon{display:inline-flex;min-width:12px;margin-right:12px;font-size:0;line-height:normal;vertical-align:baseline}@media (min-width: 62em){.duet-header-icon{margin-right:8px}}.duet-header-caret{position:absolute;top:50%;right:20px;display:flex;width:10px;height:10px;margin-left:8px;line-height:normal;pointer-events:none;transition:300ms ease;transform:translateY(-50%);transform-origin:50% 50%}@media (min-width: 62em){.duet-header-caret{width:7px;height:7px}}.duet-header-caret duet-icon{width:10px}.duet-header-dropdown-toggle.active .duet-header-caret{transform:translateY(-50%) rotate(180deg)}.duet-header-dropdown-toggle:focus{outline:0}:host(.user-is-tabbing) .duet-header-dropdown-toggle:focus{box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3}:host(.user-is-tabbing) .duet-theme-turva .duet-header-dropdown-toggle:focus{box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a}.duet-header-dropdown-toggle:active{outline:none}.duet-header-badge{display:inline-block;width:6px;height:6px;margin-top:-1rem;margin-left:5px;vertical-align:top;background:#f7b228;border-radius:50%;box-shadow:0 0 0 1px #c18b1f}.duet-theme-turva .duet-header-badge{background:#faa40f}.active-bar{color:#0077b3}.active-bar::after{position:absolute;top:0;bottom:0;left:0;width:4px;content:\"\";background:#0077b3}.duet-theme-turva .active-bar::after{background:#c60c30}.duet-header-dropdown{position:relative}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-toggle{z-index:200;padding-right:36px;overflow:hidden;transition:border 300ms ease}}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-toggle::after{position:absolute;top:auto;bottom:0;left:0;display:block !important;width:100%;height:3px !important;content:\"\";background:#0077b3;transition:300ms ease;transform:translateY(3px)}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle::after{background:#c60c30}}.duet-header-dropdown .duet-header-dropdown-toggle.active,.duet-header-dropdown .duet-header-dropdown-toggle.active:hover{border-bottom:1px solid #f5f8fa}.duet-header-dropdown .duet-header-dropdown-toggle.active::after,.duet-header-dropdown .duet-header-dropdown-toggle.active:hover::after{position:absolute;top:0;bottom:0;left:0;width:4px;content:\"\";background:#0077b3}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle.active::after,.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle.active:hover::after{background:#c60c30}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle.active,.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle.active:hover{border-color:#f5f5f7}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-toggle.active,.duet-header-dropdown .duet-header-dropdown-toggle.active:hover{color:#004d80;border:0}.duet-header-dropdown .duet-header-dropdown-toggle.active::after,.duet-header-dropdown .duet-header-dropdown-toggle.active:hover::after{position:absolute;top:auto;bottom:0;left:0;width:100%;height:3px;transform:translateY(0)}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle.active,.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle.active:hover{color:#940925}}@media (min-width: 62em){.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle.duet-header-session{color:white;background:#c60c30;border-radius:0}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle.duet-header-session:hover,.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle.duet-header-session.active,.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-toggle.duet-header-session.active:hover{color:white;background:#940925}}.duet-header-dropdown .duet-header-dropdown-content{display:none;padding-bottom:16px;background:#f3f9fc;border-bottom:1px solid #e1e3e6}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-content{background:#f5f5f7;border-color:#e1e3e6}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-content{position:absolute;top:100%;left:0;z-index:600;display:block;min-width:150px;padding-top:16px;padding-left:0;visibility:hidden;border:0;border-radius:4px;border-top-left-radius:0;border-top-right-radius:0;box-shadow:0 4px 10px 0 rgba(0, 41, 77, 0.15);opacity:0;transition:300ms ease;transform:scale(0.85) translateZ(0) translateY(-20px)}.duet-header-dropdown .duet-header-dropdown-content.duet-header-session-items{right:0%;left:auto;min-width:225px}.duet-header-dropdown .duet-header-dropdown-content.duet-header-session-items .duet-header-session-label{padding:0 20px;font-weight:600}}@media (min-width: 64.0625em){.duet-header-dropdown .duet-header-dropdown-content{min-width:170px}.duet-header-dropdown .duet-header-dropdown-content.duet-header-session-items{min-width:225px}}.duet-header-dropdown .duet-header-dropdown-content.active{display:block}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-content.active{visibility:visible;opacity:1;transform:translateZ(0) translateY(0)}}.duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item){padding:3px 8px 4px !important;position:relative;display:block;width:100%;padding-right:16px;padding-left:48px !important;overflow:hidden;font-size:0.875rem;font-weight:400;line-height:1.5;color:#00294d;text-align:left;text-decoration:none;white-space:nowrap;cursor:pointer;transition:300ms ease}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item){color:#171c3a}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item){padding-right:20px !important;padding-left:20px !important}}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item):hover{background:#e6f2f8}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item):hover{background:#e4e4e6}}.duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item):focus{outline:0}:host(.user-is-tabbing) .duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item):focus{box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3}:host(.user-is-tabbing) .duet-theme-turva .duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item):focus{box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a}.duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item).active{padding-right:36px;font-weight:600;vertical-align:baseline}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item).active{font-weight:700}@media (min-width: 62em){.duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item).active{color:white;background:#0077b3}.duet-theme-turva .duet-header-dropdown .duet-header-dropdown-content a:not(.duet-header-item).active{background:#c60c30}}.duet-header-dropdown .duet-header-dropdown-content .duet-header-link-external{margin-left:4px}.duet-header-back .duet-header-top{flex-direction:row;align-items:center;justify-content:center}.duet-header-back duet-button{position:absolute;top:50%;left:36px;transform:translateY(-50%)}@media (max-width: 35.9375em){.duet-header-back duet-button{left:20px;max-width:40px;padding:0 12px;overflow:hidden}}.duet-header-back .duet-header-toggle{display:none !important}.duet-header-skip{padding:15px 28px 16px !important;position:absolute;top:-100%;left:-100%;z-index:200;width:1px;min-width:190px;height:1px;overflow:hidden;font-weight:600;color:#0077b3;text-align:center;text-decoration:none;background:white;border-radius:4px;opacity:0}.duet-header-skip:focus{outline:0;box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3}.duet-theme-turva .duet-header-skip:focus,.duet-header-skip:focus.duet-theme-turva{box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a}.duet-theme-turva .duet-header-skip{min-width:120px;color:#171c3a}@media (min-width: 106.25em){.duet-header-skip{margin-left:20px}}.duet-header-skip:focus{top:12px;left:20px;width:auto;height:auto;outline:0;opacity:1}.duet-header-multi-level-desktop{height:6rem}.duet-header-multi-level-desktop .duet-header-top{justify-content:space-between;height:6rem}.duet-header-multi-level-desktop .duet-header-button{height:6rem}.duet-header-multi-level-desktop .logo-and-segment{display:flex;flex-basis:0;flex-direction:column;flex-grow:1;padding-top:1rem}.duet-header-multi-level-desktop .logo-and-segment .duet-header-dropdown{z-index:400;margin-left:2rem}.duet-header-multi-level-desktop .logo-and-segment .duet-header-dropdown .duet-header-dropdown-content{background:#f3f9fc}.duet-header-multi-level-desktop .logo-and-segment button{align-items:flex-start;height:2rem;font-weight:600;line-height:1rem}.duet-header-multi-level-desktop .logo-and-segment button::before{display:none}.duet-header-multi-level-desktop .logo-and-segment .duet-header-caret{top:25%}.duet-header-multi-level-desktop-nav{display:flex}.duet-header-multi-level-desktop-nav .duet-header-dropdown{position:static}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-toggle{z-index:400;padding-right:1rem;font-size:1rem;font-weight:600}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-toggle.active{color:#0077b3}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-toggle.active:not(.open) .duet-header-caret{transform:translateY(-50%) rotate(0deg)}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content{z-index:399;display:flex;justify-content:center;width:100%;height:4.5rem;padding:0;background:#f3f9fc;border-top:1px solid #e1e3e6;border-bottom:1px solid #e1e3e6;box-shadow:0 2px 6px 0 rgba(0, 41, 77, 0.07);transition:none}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content a{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;width:auto;min-width:6rem;height:100%;padding:0 1rem !important;font-weight:600}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content a::after{position:absolute;top:auto;bottom:0;left:0;display:block !important;width:100%;height:3px;content:\"\";background:#0077b3;transition:300ms ease;transform:translateY(3px)}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content a.active{font-weight:600;color:#0077b3;background:none}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content a.active::after{transform:translateY(0)}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content a .duet-header-icon{margin:0}.duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content .duet-header-badge{position:absolute;margin-top:-2rem;margin-right:-2.25rem}.duet-header-multi-level-desktop-nav button::before{display:none}.duet-header-multi-level-desktop-nav .duet-header-caret{right:1%}.duet-header-multi-level-desktop-utils{display:flex;flex-basis:0;flex-grow:1;justify-content:flex-end}.duet-header-multi-level-desktop-utils>:last-child::before{display:none}.duet-header-multi-level-desktop-utils>:last-child.duet-header-dropdown .duet-header-button::before{display:none}.duet-header-multi-level-desktop-utils .duet-header-dropdown{z-index:400}.duet-header-multi-level-desktop-utils .duet-header-dropdown .duet-header-dropdown-content{background:#f3f9fc}.duet-header-multi-level-desktop-utils .duet-header-button-label,.duet-header-multi-level-desktop-utils .duet-header-dropdown-label{display:none}@media (min-width: 64.0625em){.duet-header-multi-level-desktop-utils .duet-header-button-label,.duet-header-multi-level-desktop-utils .duet-header-dropdown-label{display:initial}}.duet-header-multi-level-desktop .duet-theme-turva .logo-and-segment .duet-header-dropdown{margin-left:0}.duet-header-multi-level-desktop .duet-theme-turva .logo-and-segment .duet-header-dropdown-toggle{padding-left:0.5rem}.duet-header-multi-level-desktop .duet-theme-turva .logo-and-segment .duet-header-dropdown .duet-header-dropdown-content{background:#f5f5f7}.duet-header-multi-level-desktop .duet-theme-turva .duet-header-multi-level-desktop-utils>:nth-last-child(2).duet-header-dropdown .duet-header-button::before{display:none}.duet-header-multi-level-desktop .duet-theme-turva .duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-toggle.active{color:#c60c30}.duet-header-multi-level-desktop .duet-theme-turva .duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content{background:#f5f5f7;border-color:#e4e4e6}.duet-header-multi-level-desktop .duet-theme-turva .duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content a::after{background:#c60c30}.duet-header-multi-level-desktop .duet-theme-turva .duet-header-multi-level-desktop-nav .duet-header-dropdown .duet-header-dropdown-content a.active{color:#c60c30;background:none}.duet-header-multi-level-desktop .duet-theme-turva .duet-header-multi-level-desktop-utils .duet-header-dropdown .duet-header-dropdown-content{background:#f5f5f7}";
6631
6631
 
6632
6632
  const createEvent = (ev, data) => ({
6633
6633
  component: "duet-header",
@@ -12191,12 +12191,13 @@ const errorCodes = [
12191
12191
  }
12192
12192
  ];
12193
12193
 
12194
- const getError = (code) => {
12194
+ const getError = (code, errorCodes) => {
12195
12195
  let error = {
12196
12196
  type: undefined,
12197
12197
  system_message: undefined,
12198
12198
  message: undefined,
12199
12199
  };
12200
+ errorCodes = parsePossibleJSON(errorCodes);
12200
12201
  error = errorCodes.filter(errorItem => {
12201
12202
  // the == is intentional we may be comparing numbers to strings - and that is ok here
12202
12203
  return errorItem.type == code;
@@ -12208,8 +12209,8 @@ const getError = (code) => {
12208
12209
  }
12209
12210
  return error;
12210
12211
  };
12211
- const getI18nError = (errorCode) => {
12212
- const errorFromJson = getError(errorCode);
12212
+ const getI18nError = (errorCode, errorCodes) => {
12213
+ const errorFromJson = getError(errorCode, errorCodes);
12213
12214
  const i18String = getLocaleString(errorFromJson.message);
12214
12215
  if (i18String === "" || !i18String) {
12215
12216
  return errorFromJson.system_message;
@@ -12219,25 +12220,29 @@ const getI18nError = (errorCode) => {
12219
12220
  }
12220
12221
  };
12221
12222
 
12222
- const ErrorItem = ({ data }) => {
12223
+ const ErrorItem = ({ data, errorCodes }) => {
12223
12224
  const { item, error } = data;
12224
12225
  const { name } = item;
12225
12226
  const { type } = error;
12226
12227
  return (h("span", { class: "duet-upload-item-error", role: "status" },
12227
12228
  h("duet-paragraph", { class: "duet-upload-item-name", color: "danger", margin: "none", weight: "semi-bold" },
12228
- h("duet-icon", { margin: "none", size: "xx-small", name: "messaging-attachment" }),
12229
- " ",
12229
+ h("duet-icon", { margin: "none", size: "x-small", name: "messaging-attachment" }),
12230
+ h("duet-spacer", { size: "xx-small", direction: "horizontal" }),
12230
12231
  name),
12231
- h("duet-paragraph", { class: "duet-upload-item-error-label", size: "small", margin: "none", color: "danger" }, getI18nError(type))));
12232
+ h("duet-paragraph", { class: "duet-upload-item-error-label", size: "small", margin: "none", color: "danger" }, getI18nError(type, errorCodes))));
12232
12233
  };
12233
12234
 
12234
- const ProgressItem = ({ progress, name }) => (h("span", null,
12235
- h("duet-paragraph", { color: "secondary", margin: "none", size: "small" }, name),
12235
+ const ProgressItem = ({ progress, name }) => (h("span", { class: "duet-upload-item-name" },
12236
+ h("duet-icon", { margin: "none", size: "x-small", name: "messaging-attachment" }),
12237
+ h("duet-spacer", { size: "xx-small", direction: "horizontal" }),
12238
+ name,
12239
+ h("br", null),
12236
12240
  h("duet-progress", { progress: Math.ceil(progress), "aria-hidden": true })));
12237
12241
 
12238
- const PendingItem = ({ name }) => (h("span", null,
12239
- h("duet-paragraph", { color: "secondary", margin: "none", size: "small" }, name),
12240
- h("duet-spacer", { size: "xx-small" })));
12242
+ const PendingItem = ({ name }) => (h("span", { class: "duet-upload-item-name" },
12243
+ h("duet-icon", { margin: "none", size: "x-small", name: "messaging-attachment" }),
12244
+ h("duet-spacer", { size: "xx-small", direction: "horizontal" }),
12245
+ name));
12241
12246
 
12242
12247
  const formatBytes = (bytes, decimals = 2) => {
12243
12248
  if (bytes === 0) {
@@ -12306,23 +12311,23 @@ const validateFileSize = (size, maxBytes) => {
12306
12311
  }
12307
12312
  return maxBytes >= size;
12308
12313
  };
12309
- const validateFile = (item, validators) => {
12314
+ const validateFile = (item, validators, errorCodes) => {
12310
12315
  const { allowedMimetypes, allowedExtensions, maxBytes } = validators;
12311
12316
  let valid = false;
12312
- let errorMessage = getError("default");
12317
+ let errorMessage = getError("default", errorCodes);
12313
12318
  if (item) {
12314
12319
  const { name, type, size } = item;
12315
12320
  const mime = validateFileMime(type, allowedMimetypes);
12316
12321
  const ext = validateFileExtension(name.toLowerCase(), allowedExtensions);
12317
12322
  const bytes = validateFileSize(size, maxBytes);
12318
12323
  if (!mime) {
12319
- errorMessage = getError("duet-upload-101");
12324
+ errorMessage = getError("duet-upload-101", errorCodes);
12320
12325
  }
12321
12326
  if (!ext) {
12322
- errorMessage = getError("duet-upload-100");
12327
+ errorMessage = getError("duet-upload-100", errorCodes);
12323
12328
  }
12324
12329
  if (!bytes) {
12325
- errorMessage = getError("duet-upload-201");
12330
+ errorMessage = getError("duet-upload-201", errorCodes);
12326
12331
  }
12327
12332
  valid = mime && ext && bytes;
12328
12333
  }
@@ -12344,7 +12349,7 @@ const validateTotalSizeIsAboveMax = (filelist, maxTotalBytes) => {
12344
12349
  total += item.size;
12345
12350
  }
12346
12351
  });
12347
- if (total < maxTotalBytes) {
12352
+ if (total > maxTotalBytes) {
12348
12353
  return true;
12349
12354
  }
12350
12355
  }
@@ -12366,6 +12371,7 @@ const validateTotalAmountIsAboveMax = (filelist, maxFiles) => {
12366
12371
  };
12367
12372
 
12368
12373
  const makeXhrRequest = ({ payload, options, onFailure, onSuccess, onProgress }) => {
12374
+ // @ts-ignore
12369
12375
  const { type = "POST", xhr, uri, argument = null, headers = null } = options;
12370
12376
  xhr.open(type, `${uri}${argument || ""}`, true);
12371
12377
  const { data, name } = payload;
@@ -12393,7 +12399,7 @@ const makeXhrRequest = ({ payload, options, onFailure, onSuccess, onProgress })
12393
12399
  return xhr;
12394
12400
  };
12395
12401
 
12396
- const duetUploadCss = "*,*::after,*::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}:host{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}::slotted([slot=header]){margin-bottom:16px}::slotted([slot=fileheader]){margin:16px 0 0 0}::slotted([slot=filefooter]){margin-top:16px}.duet-upload{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}.duet-upload-item-size{font-size:0.75rem;font-weight:400}.duet-upload-filelist{margin-bottom:25px}.duet-upload-filelist-empty{display:flex;align-items:center;justify-content:center;width:100%;height:75px;margin:0 auto;font-size:1rem;font-weight:400;background-color:#f5f8fa}.duet-upload-filelist-empty-label{font-size:1rem;font-weight:400}.duet-upload-editable-table-header-hidden{display:none}.duet-upload-editable-table tbody .duet-upload-editable-table-data{padding:0 !important;border:0}.duet-upload-editable-table duet-editable-table tfoot,.duet-upload-editable-table duet-editable-table thead{display:none}.duet-upload-editable-table duet-editable-table .duet-editable-table-content{padding-right:0 !important;padding-left:0 !important}.duet-upload-editable-table duet-editable-table duet-table .duet-table-action-row td{padding: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{position:relative}.duet-upload-editable-table duet-editable-table .duet-editable-table-row-inprogress 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){border:0}.duet-upload-editable-table .duet-upload-item-name duet-icon{position:relative;top:2px}duet-paragraph::part(duet-paragraph){word-break:break-word}";
12402
+ const duetUploadCss = "*,*::after,*::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}:host{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}::slotted([slot=header]){margin-bottom:16px}::slotted([slot=fileheader]){margin:16px 0 0 0}::slotted([slot=filefooter]){margin-top:16px}.duet-upload{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}.duet-upload-item-size{font-size:0.75rem;font-weight:400}.duet-upload-filelist{margin-bottom:25px}.duet-upload-filelist-empty{display:flex;align-items:center;justify-content:center;width:100%;height:75px;margin:0 auto;font-size:1rem;font-weight:400;background-color:#f5f8fa}.duet-upload-filelist-empty-label{font-size:1rem;font-weight:400}.duet-upload-editable-table-header-hidden{display:none}.duet-upload-editable-table tbody .duet-upload-editable-table-data{padding:0 !important;border:0}.duet-upload-editable-table duet-editable-table tfoot,.duet-upload-editable-table duet-editable-table thead{display:none}.duet-upload-editable-table duet-editable-table .duet-editable-table-content{padding-right:0 !important;padding-left:0 !important}.duet-upload-editable-table duet-editable-table duet-table .duet-table-action-row td{padding: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-upload-editable-table .duet-upload-item-name duet-icon{position:relative;top:2px}duet-paragraph::part(duet-paragraph){word-break:break-word}";
12397
12403
 
12398
12404
  const DuetUpload$1 = class extends H {
12399
12405
  constructor() {
@@ -12403,6 +12409,7 @@ const DuetUpload$1 = class extends H {
12403
12409
  this.duetChange = createEvent$2(this, "duetChange", 3);
12404
12410
  this.duetBlur = createEvent$2(this, "duetBlur", 7);
12405
12411
  this.duetFocus = createEvent$2(this, "duetFocus", 7);
12412
+ this.duetReady = createEvent$2(this, "duetReady", 7);
12406
12413
  this.duetDone = createEvent$2(this, "duetDone", 3);
12407
12414
  this.duetState = createEvent$2(this, "duetState", 3);
12408
12415
  this.duetDelete = createEvent$2(this, "duetDelete", 3);
@@ -12418,6 +12425,10 @@ const DuetUpload$1 = class extends H {
12418
12425
  * it will be up to you to handle the upload and return progress information to the upload-component
12419
12426
  */
12420
12427
  this.external = false;
12428
+ /**
12429
+ * If internal upload method is used, and this has been set to a function - it will be called with the XHR options before the reqeust is sent, return an updated XHR options object in order to manipulate the request
12430
+ */
12431
+ this.middleware = null;
12421
12432
  /**
12422
12433
  * If defer-upload is true, duet-upload will not (as recommended) instantly upload files but await a call to uploadPending()
12423
12434
  */
@@ -12437,7 +12448,7 @@ const DuetUpload$1 = class extends H {
12437
12448
  size: "x-small",
12438
12449
  background: "gray-lightest",
12439
12450
  name: "delete",
12440
- map: ["success", "failure", "pending"],
12451
+ map: ["success", "failure"],
12441
12452
  label: {
12442
12453
  fi: "Poista tiedosto",
12443
12454
  en: "Poista tiedosto",
@@ -12450,7 +12461,7 @@ const DuetUpload$1 = class extends H {
12450
12461
  size: "x-small",
12451
12462
  background: "gray-lightest",
12452
12463
  name: "cancel",
12453
- map: ["inprogress"],
12464
+ map: ["inprogress", "pending"],
12454
12465
  label: {
12455
12466
  fi: "Keskeytä lähetys",
12456
12467
  en: "Cancel the upload",
@@ -12644,6 +12655,10 @@ const DuetUpload$1 = class extends H {
12644
12655
  * Display the input in error state along with an error message.
12645
12656
  */
12646
12657
  this.error = "";
12658
+ /**
12659
+ * Default errorcodes used by the component, modifiable via javascript
12660
+ */
12661
+ this.errorCodes = errorCodes;
12647
12662
  /**
12648
12663
  * Use maxBytes to specify the maximum size in Bytes of a file that can be uploaded.
12649
12664
  */
@@ -12713,7 +12728,7 @@ const DuetUpload$1 = class extends H {
12713
12728
  label: {
12714
12729
  en: "Files to upload",
12715
12730
  sv: "Filer att ladda",
12716
- fi: "Tiedostot ladattavat",
12731
+ fi: "Ladattavat tiedostot",
12717
12732
  },
12718
12733
  },
12719
12734
  {
@@ -12799,7 +12814,7 @@ const DuetUpload$1 = class extends H {
12799
12814
  return h$1(PendingItem, { name: data.item.name });
12800
12815
  }
12801
12816
  else if (group === this.DefaultGroups.failure) {
12802
- return h$1(ErrorItem, { data: data });
12817
+ return h$1(ErrorItem, { data: data, errorCodes: this.errorCodes });
12803
12818
  }
12804
12819
  else if (data.group) {
12805
12820
  return data.html;
@@ -12914,7 +12929,7 @@ const DuetUpload$1 = class extends H {
12914
12929
  this.updateValueInMap(name, "valid", false, true);
12915
12930
  };
12916
12931
  this.transferFailed = name => {
12917
- this.updateValueInMap(name, "error", getError("duet-upload-001"));
12932
+ this.updateValueInMap(name, "error", getI18nError("duet-upload-001", this.errorCodes));
12918
12933
  };
12919
12934
  this.transferCanceled = name => {
12920
12935
  this.files.delete(name);
@@ -12925,10 +12940,10 @@ const DuetUpload$1 = class extends H {
12925
12940
  const isTotalSizeOverMaxSize = validateTotalSizeIsAboveMax(this.files, this.maxBytesTotal);
12926
12941
  const isTotalFileAmountAboveMax = validateTotalAmountIsAboveMax(this.files, this.maxFiles);
12927
12942
  if (isTotalSizeOverMaxSize && name) {
12928
- this.updateValueInMap(name, "error", getError("duet-upload-202"), false);
12943
+ this.updateValueInMap(name, "error", getI18nError("duet-upload-202", this.errorCodes), false);
12929
12944
  }
12930
12945
  if (isTotalFileAmountAboveMax && name) {
12931
- this.updateValueInMap(name, "error", getError("duet-upload-301"), false);
12946
+ this.updateValueInMap(name, "error", getI18nError("duet-upload-301", this.errorCodes), false);
12932
12947
  }
12933
12948
  this.bytesMaxReached = isTotalSizeOverMaxSize;
12934
12949
  this.fileMaxReached = isTotalFileAmountAboveMax;
@@ -13009,7 +13024,9 @@ const DuetUpload$1 = class extends H {
13009
13024
  this.files.delete(retrievedKey);
13010
13025
  if (!this.external) {
13011
13026
  const { xhr } = cancelledItem;
13012
- xhr.abort();
13027
+ if (xhr) {
13028
+ xhr.abort();
13029
+ }
13013
13030
  }
13014
13031
  else {
13015
13032
  this.kick();
@@ -13050,6 +13067,11 @@ const DuetUpload$1 = class extends H {
13050
13067
  component: "duet-upload",
13051
13068
  });
13052
13069
  };
13070
+ this.onReady = () => {
13071
+ this.duetReady.emit({
13072
+ component: "duet-upload",
13073
+ });
13074
+ };
13053
13075
  this.onDone = () => {
13054
13076
  this.duetDone.emit({
13055
13077
  component: "duet-upload",
@@ -13156,6 +13178,7 @@ const DuetUpload$1 = class extends H {
13156
13178
  }
13157
13179
  inheritGlobalTheme(this);
13158
13180
  this.listenForActionEvents();
13181
+ this.onReady();
13159
13182
  }
13160
13183
  componentWillRender() {
13161
13184
  // listen to the events from the component
@@ -13217,7 +13240,7 @@ const DuetUpload$1 = class extends H {
13217
13240
  render() {
13218
13241
  const identifier = this.identifier || this.uploadId;
13219
13242
  let caption = this.description.replace(/{maxfiles}/g, this.maxFiles.toString());
13220
- caption = caption.replace(/{maxbytes}/g, `${Math.floor(this.maxBytes / 1024 / 1024)} MB`);
13243
+ caption = caption.replace(/{maxbytes}/g, `${Math.floor((this.maxBytesTotal || this.maxFiles * this.maxBytes) / 1024 / 1024)} MB`);
13221
13244
  caption = caption.replace(/{filetypes}/g, this.allowedExtensions.split(",").join(", "));
13222
13245
  return (h$1(Host, { class: { "duet-m-0": this.margin === "none" } }, h$1("duet-fieldset", { label: this.label, caption: caption }, h$1("slot", { name: "header" }), !this.files.size && (h$1("duet-label", { part: this.identifier ? `${this.identifier}-empty-state` : "duet-upload-empty-state", theme: this.theme === "turva" ? "turva" : "default", size: "small", class: {
13223
13246
  "duet-upload-filelist-empty": !this.files.size,
@@ -13225,7 +13248,7 @@ const DuetUpload$1 = class extends H {
13225
13248
  "duet-upload-filelist-filled": this.files.size,
13226
13249
  }, id: this.labelId, for: identifier }, h$1("span", { class: {
13227
13250
  "duet-upload-filelist-empty-label": !this.files.size,
13228
- } }, this.fileListEmpty))), !!this.files.size && h$1("slot", { name: "fileheader" }), !!this.files.size && (h$1("duet-upload-aria-status", { invalid: this.getFilesAsArray().invalid.length, valid: this.getFilesAsArray().valid.length, inprogress: this.filesInProgress.size, total: this.files.size, statusMessageLabel: this.internalStatusMessageLabel })), !!this.files.size && this.renderEditableTableGroups(), !!this.files.size && h$1("slot", { name: "filefooter" }), h$1("duet-spacer", { size: "large" }), !this.hideButton && (h$1("duet-button", { id: this.buttonId, onClick: this.startUpload, "accessible-controls": identifier, disabled: this.fileMaxReached, "accessible-label": this.accessibleButtonLabel, "accessible-owns": identifier, size: "small", variation: "secondary", fixed: true, icon: "action-add-circle", part: this.identifier ? `${this.identifier}-button-upload` : "duet-upload-button-upload" }, this.buttonLabel)), h$1("duet-spacer", { size: "medium" }), (this.fileMaxReached || this.bytesMaxReached) && (h$1("duet-alert", { part: this.identifier ? `${this.identifier}-error-notification` : "duet-upload-error-notification" }, this.fileMaxReached && getI18nError("duet-upload-301"), this.bytesMaxReached && getI18nError("duet-upload-202"))), h$1("duet-spacer", { size: "medium" }), h$1("duet-visually-hidden", null, h$1("input", { ref: input => {
13251
+ } }, this.fileListEmpty))), !!this.files.size && h$1("slot", { name: "fileheader" }), !!this.files.size && (h$1("duet-upload-aria-status", { invalid: this.getFilesAsArray().invalid.length, valid: this.getFilesAsArray().valid.length, inprogress: this.filesInProgress.size, total: this.files.size, statusMessageLabel: this.internalStatusMessageLabel })), !!this.files.size && this.renderEditableTableGroups(), !!this.files.size && h$1("slot", { name: "filefooter" }), h$1("duet-spacer", { size: "large" }), !this.hideButton && (h$1("duet-button", { id: this.buttonId, onClick: this.startUpload, "accessible-controls": identifier, disabled: this.fileMaxReached, "accessible-label": this.accessibleButtonLabel, "accessible-owns": identifier, size: "small", variation: "secondary", fixed: true, icon: "action-add-circle", part: this.identifier ? `${this.identifier}-button-upload` : "duet-upload-button-upload" }, this.buttonLabel)), h$1("duet-spacer", { size: "medium" }), (this.fileMaxReached || this.bytesMaxReached) && (h$1("duet-alert", { part: this.identifier ? `${this.identifier}-error-notification` : "duet-upload-error-notification" }, this.fileMaxReached && getI18nError("duet-upload-301", this.errorCodes), this.bytesMaxReached && getI18nError("duet-upload-202", this.errorCodes))), h$1("duet-spacer", { size: "medium" }), h$1("duet-visually-hidden", null, h$1("input", { ref: input => {
13229
13252
  this.nativeInput = input;
13230
13253
  }, accept: !this.limitSelection ? undefined : `${this.allowedMimetypes},${this.allowedExtensions}`, onBlur: this.onBlur, onFocus: this.onFocus, onChange: e => this.onChange(e), type: "file", class: {
13231
13254
  "duet-upload": true,
@@ -13249,34 +13272,43 @@ const DuetUpload$1 = class extends H {
13249
13272
  xhr.upload.addEventListener("abort", () => {
13250
13273
  this.transferCanceled(name);
13251
13274
  });
13252
- return makeXhrRequest({
13275
+ let options = {
13253
13276
  payload: { data, name },
13254
- options: { type: "POST", uri: this.uri, xhr, argument: null, headers: null },
13277
+ options: { type: "POST", uri: this.uri, xhr, argument: null, headers: undefined },
13255
13278
  onFailure: this.transferDoneWithFailure,
13256
13279
  onSuccess: this.transferDone,
13257
13280
  onProgress: this.trackProgress,
13258
- });
13281
+ };
13282
+ if (this.middleware) {
13283
+ options = this.middleware(options);
13284
+ }
13285
+ return makeXhrRequest(options);
13259
13286
  }
13260
13287
  makeXHRDeleteRequest(data) {
13261
13288
  const { uid, item } = data;
13262
13289
  const xhr = new XMLHttpRequest();
13263
- // don't present server issues to user on deletes, just remove them from the visible list
13264
- return makeXhrRequest({
13290
+ const headers = {
13291
+ "x-fileuid": uid,
13292
+ "x-filename": item.name,
13293
+ };
13294
+ let options = {
13265
13295
  payload: { data: null, name },
13266
13296
  options: {
13267
13297
  type: "DELETE",
13268
13298
  xhr,
13269
13299
  uri: this.uri,
13270
- arguments: `?key=${uid}&name=${item.name}`,
13271
- headers: {
13272
- "x-fileuid": uid,
13273
- "x-filename": item.name,
13274
- },
13300
+ argument: `?key=${uid}&name=${item.name}`,
13301
+ headers,
13275
13302
  },
13276
13303
  onFailure: this.transferDoneWithFailure,
13277
13304
  onSuccess: this.transferDone,
13278
13305
  onProgress: this.trackProgress,
13279
- });
13306
+ };
13307
+ if (this.middleware) {
13308
+ options = this.middleware(options);
13309
+ }
13310
+ // don't present server issues to user on deletes, just remove them from the visible list
13311
+ return makeXhrRequest(options);
13280
13312
  }
13281
13313
  /**
13282
13314
  * Component event handling.
@@ -13293,7 +13325,7 @@ const DuetUpload$1 = class extends H {
13293
13325
  maxBytes: this.maxBytes,
13294
13326
  allowedExtensions: this.allowedExtensions,
13295
13327
  allowedMimetypes: this.allowedMimetypes,
13296
- });
13328
+ }, this.errorCodes);
13297
13329
  const uid = this.genHashName();
13298
13330
  const fileListItem = {
13299
13331
  uid,
@@ -13522,7 +13554,7 @@ const DuetTextarea = /*@__PURE__*/proxyCustomElement(DuetTextarea$1, [2,"duet-te
13522
13554
  const DuetToggle = /*@__PURE__*/proxyCustomElement(DuetToggle$1, [2,"duet-toggle",{"theme":[1025],"margin":[1],"accessibleActiveDescendant":[1,"accessible-active-descendant"],"accessibleControls":[1,"accessible-controls"],"accessibleOwns":[1,"accessible-owns"],"accessibleDescribedBy":[1,"accessible-described-by"],"accessibleDetails":[1,"accessible-details"],"accessibleLabelledBy":[1,"accessible-labelled-by"],"accessibleDescription":[1,"accessible-description"],"label":[1],"required":[4],"disabled":[516],"checked":[1540],"value":[1537],"identifier":[1],"name":[1],"role":[1]}]);
13523
13555
  const DuetTooltip = /*@__PURE__*/proxyCustomElement(DuetTooltip$1, [1,"duet-tooltip",{"theme":[1025],"language":[1025],"accessibleLabelDefault":[1,"accessible-label-default"],"accessibleLabel":[1,"accessible-label"],"accessibleInputLabel":[1,"accessible-input-label"],"accessibleCloseLabelDefault":[1,"accessible-close-label-default"],"accessibleCloseLabel":[1,"accessible-close-label"],"label":[1],"breakpoint":[1],"direction":[1],"positionVertical":[513,"position-vertical"],"positionHorizontal":[513,"position-horizontal"],"active":[1540],"openDown":[32]},[[9,"scroll","onScroll"],[4,"click","handleDocumentClick"]]]);
13524
13556
  const DuetTray = /*@__PURE__*/proxyCustomElement(DuetTray$1, [1,"duet-tray",{"language":[1025],"accessibleCloseLabelDefaults":[1,"accessible-close-label-default"],"accessibleCloseLabel":[1,"accessible-close-label"],"accessibleOpenLabelDefaults":[1,"accessible-open-label-default"],"accessibleOpenLabel":[1,"accessible-open-label"],"theme":[1025],"active":[516],"autoHide":[4,"auto-hide"],"responsive":[4],"expanded":[32],"hiddenState":[32]},[[9,"scroll","getFrame"],[16,"click","handleBodyClick"]]]);
13525
- const DuetUpload = /*@__PURE__*/proxyCustomElement(DuetUpload$1, [1,"duet-upload",{"accessibleActiveDescendant":[1,"accessible-active-descendant"],"accessibleDescribedBy":[1,"accessible-described-by"],"accessibleControls":[1,"accessible-controls"],"accessibleOwns":[1,"accessible-owns"],"external":[4],"deferUpload":[4,"defer-upload"],"hideButton":[4,"hide-upload-button"],"actions":[16],"uri":[1],"showLinks":[4,"show-links"],"caption":[1],"statusLabelDefaults":[1,"status-label-default"],"statusMessageLabel":[1,"status-message-label"],"buttonLabelDefaults":[1,"button-label-default"],"buttonLabel":[1,"button-label"],"accessibleButtonLabel":[1,"accessible-button-label"],"theme":[1025],"disabled":[516],"identifier":[1],"margin":[1],"required":[4],"alignment":[1],"hideGroups":[4,"hide-table-labels"],"files":[1040],"valid":[1540],"labelDefaults":[1,"label-default"],"label":[1],"descriptionDefaults":[1,"description-default"],"description":[1],"fileListEmptyDefaults":[1,"list-empty-default"],"fileListEmpty":[1,"file-list-empty"],"error":[1],"name":[1],"maxBytes":[2,"max-bytes"],"maxBytesTotal":[2,"max-bytes-total"],"maxFiles":[2,"max-files"],"allowedExtensions":[1,"allowed-extensions"],"allowedMimetypes":[1,"allowed-mimetypes"],"multiple":[4],"limitSelection":[4,"limit-selection"],"value":[1025],"groups":[16],"tick":[32]}]);
13557
+ const DuetUpload = /*@__PURE__*/proxyCustomElement(DuetUpload$1, [1,"duet-upload",{"accessibleActiveDescendant":[1,"accessible-active-descendant"],"accessibleDescribedBy":[1,"accessible-described-by"],"accessibleControls":[1,"accessible-controls"],"accessibleOwns":[1,"accessible-owns"],"external":[4],"middleware":[16],"deferUpload":[4,"defer-upload"],"hideButton":[4,"hide-upload-button"],"actions":[16],"uri":[1],"showLinks":[4,"show-links"],"caption":[1],"statusLabelDefaults":[1,"status-label-default"],"statusMessageLabel":[1,"status-message-label"],"buttonLabelDefaults":[1,"button-label-default"],"buttonLabel":[1,"button-label"],"accessibleButtonLabel":[1,"accessible-button-label"],"theme":[1025],"disabled":[516],"identifier":[1],"margin":[1],"required":[4],"alignment":[1],"hideGroups":[4,"hide-table-labels"],"files":[1040],"valid":[1540],"labelDefaults":[1,"label-default"],"label":[1],"descriptionDefaults":[1,"description-default"],"description":[1],"fileListEmptyDefaults":[1,"list-empty-default"],"fileListEmpty":[1,"file-list-empty"],"error":[1],"errorCodes":[16],"name":[1],"maxBytes":[2,"max-bytes"],"maxBytesTotal":[2,"max-bytes-total"],"maxFiles":[2,"max-files"],"allowedExtensions":[1,"allowed-extensions"],"allowedMimetypes":[1,"allowed-mimetypes"],"multiple":[4],"limitSelection":[4,"limit-selection"],"value":[1025],"groups":[16],"tick":[32]}]);
13526
13558
  const DuetUploadAriaStatus = /*@__PURE__*/proxyCustomElement(DuetUploadAriaStatus$1, [1,"duet-upload-aria-status",{"statusMessageLabel":[16],"accessibleAriaLive":[1,"accessible-aria-live"],"valid":[2],"total":[2],"invalid":[2],"inprogress":[2],"statusMessage":[32]}]);
13527
13559
  const DuetVisuallyHidden = /*@__PURE__*/proxyCustomElement(DuetVisuallyHidden$1, [1,"duet-visually-hidden"]);
13528
13560
  const defineCustomElements = (opts) => {