@designsystem-se/af 38.2.1-beta.dark-mode → 39.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/components/digi-bar-chart.js +1 -1
  2. package/components/digi-button.js +1 -1
  3. package/components/digi-calendar-datepicker.js +4 -4
  4. package/components/digi-calendar-week-view.js +1 -1
  5. package/components/digi-calendar.js +1 -1
  6. package/components/digi-chart-line.js +1 -1
  7. package/components/digi-code-block.js +1 -1
  8. package/components/digi-code-example.js +3 -3
  9. package/components/digi-context-menu.js +6 -6
  10. package/components/digi-dialog.js +3 -3
  11. package/components/digi-expandable-faq-item.js +1 -1
  12. package/components/digi-footer.js +1 -1
  13. package/components/digi-form-category-filter.js +1 -1
  14. package/components/digi-form-checkbox.js +1 -1
  15. package/components/digi-form-error-list.js +3 -3
  16. package/components/digi-form-file-upload.js +1 -1
  17. package/components/digi-form-filter.js +3 -3
  18. package/components/digi-form-input-search.js +1 -1
  19. package/components/digi-form-receipt.js +1 -1
  20. package/components/digi-form-select-filter.js +87 -50
  21. package/components/digi-form-select.js +1 -1
  22. package/components/digi-header-avatar.js +1 -1
  23. package/components/digi-header-navigation.js +2 -2
  24. package/components/digi-header.js +5 -5
  25. package/components/digi-info-card-multi.js +1 -1
  26. package/components/digi-info-card.js +2 -2
  27. package/components/digi-link-button.js +1 -1
  28. package/components/digi-link-internal.js +1 -1
  29. package/components/digi-navigation-pagination.js +2 -2
  30. package/components/digi-navigation-sidebar-button.js +1 -1
  31. package/components/digi-navigation-sidebar.js +1 -1
  32. package/components/digi-navigation-vertical-menu-item.js +1 -1
  33. package/components/digi-notification-alert.js +1 -1
  34. package/components/digi-notification-error-page.js +1 -1
  35. package/components/digi-progress-indicator.js +1 -1
  36. package/components/digi-quote.js +1 -1
  37. package/components/digi-tag.js +1 -1
  38. package/components/digi-title-logo.js +1 -1
  39. package/components/digi-tools-feedback.js +3 -3
  40. package/components/digi-tools-theme-provider.js +5 -18
  41. package/components/index.js +1 -1
  42. package/components/p-4bad4fb0.js +7 -0
  43. package/components/p-70fad0ea.js +165 -0
  44. package/components/{p-78154d00.js → p-75c8d67e.js} +2 -2
  45. package/components/{p-0207ebef.js → p-9df35672.js} +1 -1
  46. package/components/p-ab07faba.js +66 -0
  47. package/components/{p-8562da9d.js → p-bc5b7057.js} +2 -2
  48. package/components/{p-99793659.js → p-dbb0665a.js} +2 -2
  49. package/components/{p-b94458ed.js → p-e2a68e2b.js} +1 -1
  50. package/components/p-f84f590e.js +177 -0
  51. package/custom-elements.json +1 -5
  52. package/dist/cjs/digi-arbetsformedlingen.cjs.js +1 -1
  53. package/dist/cjs/digi-button_11.cjs.entry.js +1194 -0
  54. package/dist/cjs/digi-calendar-datepicker.cjs.entry.js +2601 -0
  55. package/dist/cjs/digi-calendar-week-view.cjs.entry.js +51 -50
  56. package/dist/cjs/digi-calendar_2.cjs.entry.js +464 -0
  57. package/dist/cjs/{digi-code-block_2.cjs.entry.js → digi-code-block_3.cjs.entry.js} +132 -1
  58. package/dist/cjs/digi-code-example.cjs.entry.js +1 -1
  59. package/dist/cjs/digi-context-menu.cjs.entry.js +240 -0
  60. package/dist/cjs/digi-dialog.cjs.entry.js +18 -2
  61. package/dist/cjs/digi-expandable-faq-item.cjs.entry.js +97 -0
  62. package/dist/cjs/digi-footer-card.cjs.entry.js +29 -0
  63. package/dist/cjs/digi-footer.cjs.entry.js +74 -0
  64. package/dist/cjs/digi-form-category-filter.cjs.entry.js +121 -0
  65. package/dist/cjs/digi-form-checkbox.cjs.entry.js +139 -0
  66. package/dist/cjs/digi-form-error-list.cjs.entry.js +17 -1
  67. package/dist/cjs/digi-form-file-upload.cjs.entry.js +601 -0
  68. package/dist/cjs/digi-form-filter.cjs.entry.js +248 -0
  69. package/dist/cjs/digi-form-receipt.cjs.entry.js +17 -1
  70. package/dist/cjs/digi-form-select_2.cjs.entry.js +186 -0
  71. package/dist/cjs/digi-header-avatar.cjs.entry.js +114 -0
  72. package/dist/cjs/digi-header-navigation-item.cjs.entry.js +27 -0
  73. package/dist/cjs/digi-header-navigation.cjs.entry.js +228 -0
  74. package/dist/cjs/digi-header-notification.cjs.entry.js +23 -0
  75. package/dist/cjs/digi-header.cjs.entry.js +115 -0
  76. package/dist/cjs/digi-icon-accessibility-universal.cjs.entry.js +30 -0
  77. package/dist/cjs/digi-icon-bars.cjs.entry.js +30 -0
  78. package/dist/cjs/digi-icon-bell-filled.cjs.entry.js +30 -0
  79. package/dist/cjs/digi-icon-check-circle-solid_4.cjs.entry.js +99 -0
  80. package/dist/cjs/digi-icon-chevron-left_2.cjs.entry.js +53 -0
  81. package/dist/cjs/digi-icon-copy.cjs.entry.js +30 -0
  82. package/dist/cjs/digi-icon-envelope.cjs.entry.js +30 -0
  83. package/dist/cjs/digi-icon-external-link-alt_2.cjs.entry.js +60 -0
  84. package/dist/cjs/digi-icon-globe.cjs.entry.js +30 -0
  85. package/dist/cjs/digi-icon-list-ul_6.cjs.entry.js +145 -0
  86. package/dist/cjs/digi-icon-minus_2.cjs.entry.js +53 -0
  87. package/dist/cjs/digi-icon-notification-error_4.cjs.entry.js +99 -0
  88. package/dist/cjs/digi-icon-sign.cjs.entry.js +30 -0
  89. package/dist/cjs/digi-icon-spinner.cjs.entry.js +31 -0
  90. package/dist/cjs/digi-icon-x.cjs.entry.js +30 -0
  91. package/dist/cjs/digi-info-card-multi-container.cjs.entry.js +22 -0
  92. package/dist/cjs/digi-info-card-multi.cjs.entry.js +58 -0
  93. package/dist/cjs/digi-info-card.cjs.entry.js +79 -0
  94. package/dist/cjs/digi-layout-block_2.cjs.entry.js +92 -0
  95. package/dist/cjs/digi-layout-columns.cjs.entry.js +33 -0
  96. package/dist/cjs/digi-link-button.cjs.entry.js +66 -0
  97. package/dist/cjs/digi-link-internal.cjs.entry.js +37 -0
  98. package/dist/cjs/digi-link.cjs.entry.js +75 -0
  99. package/dist/cjs/digi-logo.cjs.entry.js +49 -0
  100. package/dist/cjs/digi-media-image_2.cjs.entry.js +167 -0
  101. package/dist/cjs/digi-navigation-pagination.cjs.entry.js +17 -1
  102. package/dist/cjs/digi-navigation-sidebar-button.cjs.entry.js +30 -0
  103. package/dist/cjs/digi-navigation-vertical-menu-item.cjs.entry.js +150 -0
  104. package/dist/cjs/digi-navigation-vertical-menu.cjs.entry.js +177 -0
  105. package/dist/cjs/digi-notification-alert.cjs.entry.js +112 -0
  106. package/dist/cjs/digi-notification-error-page.cjs.entry.js +17 -1
  107. package/dist/cjs/digi-progress-indicator.cjs.entry.js +137 -0
  108. package/dist/cjs/digi-quote.cjs.entry.js +1 -1
  109. package/dist/cjs/digi-tag-media.cjs.entry.js +47 -0
  110. package/dist/cjs/digi-title-logo.cjs.entry.js +133 -0
  111. package/dist/cjs/digi-tools-feedback.cjs.entry.js +18 -2
  112. package/dist/cjs/digi-tools-theme-provider.cjs.entry.js +28 -0
  113. package/dist/cjs/digi-typography-heading-jumbo.cjs.entry.js +38 -0
  114. package/dist/cjs/digi-typography-preamble.cjs.entry.js +20 -0
  115. package/dist/cjs/digi-typography.cjs.entry.js +26 -0
  116. package/dist/cjs/digi-util-breakpoint-observer.cjs.entry.js +48 -0
  117. package/dist/cjs/digi-util-mutation-observer.cjs.entry.js +64 -0
  118. package/dist/cjs/expandable-faq-item-variation.enum-89427195.js +18 -0
  119. package/dist/cjs/footer-card-variation.enum-99555edc.js +8 -0
  120. package/dist/cjs/form-checkbox-variation.enum-d2ca879e.js +19 -0
  121. package/dist/cjs/form-select-variation.enum-528c1bf0.js +16 -0
  122. package/dist/cjs/form-validation-message-variation.enum-c5ec3e2d.js +31 -0
  123. package/dist/cjs/index-7a477838.js +220 -4
  124. package/dist/cjs/{index-acb7b350.js → index-ac8e01b4.js} +19 -189
  125. package/dist/cjs/index-cad91a90.js +66 -0
  126. package/dist/cjs/index-e8333bcc.js +174 -0
  127. package/dist/cjs/index.cjs.js +189 -179
  128. package/dist/cjs/info-card-multi-type.enum-14746572.js +8 -0
  129. package/dist/cjs/info-card-variation.enum-64cef637.js +24 -0
  130. package/dist/cjs/layout-columns-variation.enum-65675649.js +23 -0
  131. package/dist/cjs/layout-container-max-width.enum-7e637f44.js +21 -0
  132. package/dist/cjs/link-button-variation.enum-137785e3.js +9 -0
  133. package/dist/cjs/loader.cjs.js +1 -1
  134. package/dist/cjs/logo-color.enum-76f6c506.js +7 -0
  135. package/dist/cjs/navigation-vertical-menu-variation.enum-c237edd3.js +13 -0
  136. package/dist/cjs/progress-indicator-variation.enum-7cf8e0e4.js +13 -0
  137. package/dist/cjs/tag-media-icon.enum-372563c5.js +11 -0
  138. package/dist/cjs/tools-theme-provider.brand.enum-bc855272.js +7 -0
  139. package/dist/cjs/typography-heading-jumbo-variation.enum-8677e099.js +17 -0
  140. package/dist/cjs/{typography-variation.enum-ad1b2403.js → typography-variation.enum-9aab5027.js} +0 -235
  141. package/dist/collection/components/_button/button/button.css +14 -14
  142. package/dist/collection/components/_calendar/calendar/calendar.css +3 -8
  143. package/dist/collection/components/_calendar/calendar-datepicker/calendar-datepicker.css +106 -426
  144. package/dist/collection/components/_code/code-example/code-example.css +0 -6
  145. package/dist/collection/components/_dialog/dialog/dialog.css +1 -1
  146. package/dist/collection/components/_expandable/expandable-faq-item/expandable-faq-item.css +2 -2
  147. package/dist/collection/components/_form/form-checkbox/form-checkbox.css +106 -426
  148. package/dist/collection/components/_form/form-file-upload/form-file-upload.css +5 -6
  149. package/dist/collection/components/_form/form-filter/form-filter.css +2 -2
  150. package/dist/collection/components/_form/form-select/form-select.css +2 -2
  151. package/dist/collection/components/_form/form-select-filter/form-select-filter.css +3 -3
  152. package/dist/collection/components/_form/form-select-filter/form-select-filter.js +85 -48
  153. package/dist/collection/components/_header/header/header.js +2 -2
  154. package/dist/collection/components/_header/header-avatar/header-avatar.css +105 -425
  155. package/dist/collection/components/_info-card/info-card/info-card.css +2 -2
  156. package/dist/collection/components/_info-card/info-card-multi/info-card-multi.css +1 -1
  157. package/dist/collection/components/_link/link-button/link-button.css +3 -3
  158. package/dist/collection/components/_link/link-internal/link-internal.css +105 -425
  159. package/dist/collection/components/_navigation/navigation-context-menu/navigation-context-menu.css +2 -3
  160. package/dist/collection/components/_navigation/navigation-context-menu/navigation-context-menu.js +6 -6
  161. package/dist/collection/components/_navigation/navigation-vertical-menu-item/navigation-vertical-menu-item.css +3 -3
  162. package/dist/collection/components/_progress/progress-indicator/progress-indicator.css +3 -4
  163. package/dist/collection/components/_quote/quote/quote.css +2 -2
  164. package/dist/collection/components/_tools/tools-feedback/tools-feedback.css +1 -1
  165. package/dist/collection/components/_tools/tools-theme-provider/tools-theme-provider.css +2 -166
  166. package/dist/collection/components/_tools/tools-theme-provider/tools-theme-provider.js +2 -43
  167. package/dist/collection/design-tokens/components/_button.variables.scss +14 -14
  168. package/dist/collection/design-tokens/components/_calendar-datepicker.variables.scss +1 -1
  169. package/dist/collection/design-tokens/components/_calendar.variables.scss +3 -4
  170. package/dist/collection/design-tokens/components/_dialog.variables.scss +1 -1
  171. package/dist/collection/design-tokens/components/_expandable-faq-item.variables.scss +2 -2
  172. package/dist/collection/design-tokens/components/_form-checkbox.variables.scss +1 -1
  173. package/dist/collection/design-tokens/components/_form-file-upload.variables.scss +0 -2
  174. package/dist/collection/design-tokens/components/_form-filter.variables.scss +2 -2
  175. package/dist/collection/design-tokens/components/_form-select-filter.variables.scss +3 -3
  176. package/dist/collection/design-tokens/components/_form-select.variables.scss +2 -2
  177. package/dist/collection/design-tokens/components/_info-card-multi.variables.scss +1 -1
  178. package/dist/collection/design-tokens/components/_info-card.variables.scss +2 -2
  179. package/dist/collection/design-tokens/components/_link-button.variables.scss +3 -3
  180. package/dist/collection/design-tokens/components/_navigation-context-menu.variables.scss +1 -1
  181. package/dist/collection/design-tokens/components/_navigation-vertical-menu-item.variables.scss +3 -3
  182. package/dist/collection/design-tokens/components/_quote.variables.scss +2 -2
  183. package/dist/collection/design-tokens/components/_tools-feedback.variables.scss +1 -1
  184. package/dist/collection/enums.js +0 -1
  185. package/dist/collection/styles/src/_alias.mixin.scss +105 -252
  186. package/dist/collection/styles/src/themes/_brand-af18.mixin.scss +0 -19
  187. package/dist/collection/styles/src/themes/_brand-af25.mixin.scss +0 -144
  188. package/dist/collection/styles/src/themes/_brand-common.mixin.scss +0 -7
  189. package/dist/collection/styles/src/tokens-documentation/web-AF25.json +4 -160
  190. package/dist/digi-arbetsformedlingen/design-tokens/components/_button.variables.scss +14 -14
  191. package/dist/digi-arbetsformedlingen/design-tokens/components/_calendar-datepicker.variables.scss +1 -1
  192. package/dist/digi-arbetsformedlingen/design-tokens/components/_calendar.variables.scss +3 -4
  193. package/dist/digi-arbetsformedlingen/design-tokens/components/_dialog.variables.scss +1 -1
  194. package/dist/digi-arbetsformedlingen/design-tokens/components/_expandable-faq-item.variables.scss +2 -2
  195. package/dist/digi-arbetsformedlingen/design-tokens/components/_form-checkbox.variables.scss +1 -1
  196. package/dist/digi-arbetsformedlingen/design-tokens/components/_form-file-upload.variables.scss +0 -2
  197. package/dist/digi-arbetsformedlingen/design-tokens/components/_form-filter.variables.scss +2 -2
  198. package/dist/digi-arbetsformedlingen/design-tokens/components/_form-select-filter.variables.scss +3 -3
  199. package/dist/digi-arbetsformedlingen/design-tokens/components/_form-select.variables.scss +2 -2
  200. package/dist/digi-arbetsformedlingen/design-tokens/components/_info-card-multi.variables.scss +1 -1
  201. package/dist/digi-arbetsformedlingen/design-tokens/components/_info-card.variables.scss +2 -2
  202. package/dist/digi-arbetsformedlingen/design-tokens/components/_link-button.variables.scss +3 -3
  203. package/dist/digi-arbetsformedlingen/design-tokens/components/_navigation-context-menu.variables.scss +1 -1
  204. package/dist/digi-arbetsformedlingen/design-tokens/components/_navigation-vertical-menu-item.variables.scss +3 -3
  205. package/dist/digi-arbetsformedlingen/design-tokens/components/_quote.variables.scss +2 -2
  206. package/dist/digi-arbetsformedlingen/design-tokens/components/_tools-feedback.variables.scss +1 -1
  207. package/dist/digi-arbetsformedlingen/digi-arbetsformedlingen.css +1 -1
  208. package/dist/digi-arbetsformedlingen/digi-arbetsformedlingen.esm.js +1 -1
  209. package/dist/digi-arbetsformedlingen/index.esm.js +1 -1
  210. package/dist/digi-arbetsformedlingen/p-02731621.entry.js +1 -0
  211. package/dist/digi-arbetsformedlingen/p-07303cb5.js +1 -0
  212. package/dist/digi-arbetsformedlingen/p-0ef5ec06.entry.js +1 -0
  213. package/dist/digi-arbetsformedlingen/p-0f6c0360.js +1 -0
  214. package/dist/digi-arbetsformedlingen/p-0fbe6e50.entry.js +1 -0
  215. package/dist/digi-arbetsformedlingen/p-10261517.entry.js +1 -0
  216. package/dist/digi-arbetsformedlingen/p-13ee320b.entry.js +1 -0
  217. package/dist/digi-arbetsformedlingen/p-1486034d.entry.js +1 -0
  218. package/dist/digi-arbetsformedlingen/p-1f3345e9.js +1 -0
  219. package/dist/digi-arbetsformedlingen/p-2295239c.entry.js +1 -0
  220. package/dist/digi-arbetsformedlingen/p-25371300.entry.js +1 -0
  221. package/dist/digi-arbetsformedlingen/p-2a023831.js +1 -0
  222. package/dist/digi-arbetsformedlingen/p-2c685e4f.entry.js +1 -0
  223. package/dist/digi-arbetsformedlingen/p-300aa9ef.js +1 -0
  224. package/dist/digi-arbetsformedlingen/p-366e18f4.entry.js +1 -0
  225. package/dist/digi-arbetsformedlingen/p-3887bb40.js +1 -0
  226. package/dist/digi-arbetsformedlingen/p-398d0f60.entry.js +1 -0
  227. package/dist/digi-arbetsformedlingen/p-3b20ec86.js +1 -0
  228. package/dist/digi-arbetsformedlingen/p-3c9195db.entry.js +1 -0
  229. package/dist/digi-arbetsformedlingen/p-3efa2f0b.entry.js +1 -0
  230. package/dist/digi-arbetsformedlingen/p-3f9dfdb0.entry.js +1 -0
  231. package/dist/digi-arbetsformedlingen/p-408e9b2a.entry.js +1 -0
  232. package/dist/digi-arbetsformedlingen/p-416992c0.entry.js +1 -0
  233. package/dist/digi-arbetsformedlingen/p-4b8cae8a.entry.js +1 -0
  234. package/dist/digi-arbetsformedlingen/p-4bad4fb0.js +1 -0
  235. package/dist/digi-arbetsformedlingen/p-4e9f2f05.entry.js +1 -0
  236. package/dist/digi-arbetsformedlingen/p-51149879.entry.js +1 -0
  237. package/dist/digi-arbetsformedlingen/p-55bcba7c.entry.js +1 -0
  238. package/dist/digi-arbetsformedlingen/p-55d02ef7.entry.js +1 -0
  239. package/dist/digi-arbetsformedlingen/p-5f20045a.entry.js +1 -0
  240. package/dist/digi-arbetsformedlingen/p-5f4ece29.entry.js +1 -0
  241. package/dist/digi-arbetsformedlingen/{p-1efcad5b.entry.js → p-655cda00.entry.js} +1 -1
  242. package/dist/digi-arbetsformedlingen/p-6abd8d58.entry.js +1 -0
  243. package/dist/digi-arbetsformedlingen/p-6fb0f1a4.entry.js +1 -0
  244. package/dist/digi-arbetsformedlingen/p-70da2307.entry.js +1 -0
  245. package/dist/digi-arbetsformedlingen/p-7aacd45f.js +1 -0
  246. package/dist/digi-arbetsformedlingen/p-7e77bbe7.entry.js +1 -0
  247. package/dist/digi-arbetsformedlingen/p-7e85c9e3.entry.js +1 -0
  248. package/dist/digi-arbetsformedlingen/p-8142cc73.js +1 -0
  249. package/dist/digi-arbetsformedlingen/p-814ca2ad.js +1 -0
  250. package/dist/digi-arbetsformedlingen/p-820e795b.js +1 -0
  251. package/dist/digi-arbetsformedlingen/p-8713df13.entry.js +1 -0
  252. package/dist/digi-arbetsformedlingen/p-8d9f4f10.entry.js +1 -0
  253. package/dist/digi-arbetsformedlingen/p-8ef41ad9.entry.js +1 -0
  254. package/dist/digi-arbetsformedlingen/p-8fa50755.entry.js +1 -0
  255. package/dist/digi-arbetsformedlingen/p-915b2a14.entry.js +1 -0
  256. package/dist/digi-arbetsformedlingen/p-986a1582.entry.js +1 -0
  257. package/dist/digi-arbetsformedlingen/p-9dd41cc4.js +1 -0
  258. package/dist/digi-arbetsformedlingen/p-9dd5d6c8.js +1 -0
  259. package/dist/digi-arbetsformedlingen/p-9f47d4b7.entry.js +1 -0
  260. package/dist/digi-arbetsformedlingen/p-a0c77dff.entry.js +1 -0
  261. package/dist/digi-arbetsformedlingen/p-a2008b0a.entry.js +1 -0
  262. package/dist/digi-arbetsformedlingen/p-a969ba67.entry.js +1 -0
  263. package/dist/digi-arbetsformedlingen/p-af72f16f.entry.js +1 -0
  264. package/dist/digi-arbetsformedlingen/{p-160165b9.entry.js → p-b3283953.entry.js} +1 -1
  265. package/dist/digi-arbetsformedlingen/p-b3d93b8b.entry.js +1 -0
  266. package/dist/digi-arbetsformedlingen/p-beba49c2.entry.js +1 -0
  267. package/dist/digi-arbetsformedlingen/p-bf80a488.entry.js +1 -0
  268. package/dist/digi-arbetsformedlingen/p-c04ae2fc.entry.js +1 -0
  269. package/dist/digi-arbetsformedlingen/p-c06930c2.entry.js +1 -0
  270. package/dist/digi-arbetsformedlingen/{p-06704534.entry.js → p-c3e0f6dd.entry.js} +1 -1
  271. package/dist/digi-arbetsformedlingen/p-c461917d.entry.js +1 -0
  272. package/dist/digi-arbetsformedlingen/p-c553b73b.entry.js +1 -0
  273. package/dist/digi-arbetsformedlingen/p-c604694f.entry.js +1 -0
  274. package/dist/digi-arbetsformedlingen/p-c604a480.entry.js +1 -0
  275. package/dist/digi-arbetsformedlingen/p-c7949525.js +1 -0
  276. package/dist/digi-arbetsformedlingen/p-c7a512ee.entry.js +1 -0
  277. package/dist/digi-arbetsformedlingen/p-c7d079d0.entry.js +1 -0
  278. package/dist/digi-arbetsformedlingen/p-c9dfda73.js +1 -0
  279. package/dist/digi-arbetsformedlingen/p-d182d8bb.entry.js +1 -0
  280. package/dist/digi-arbetsformedlingen/p-d1886fff.js +1 -0
  281. package/dist/digi-arbetsformedlingen/p-d6d7b1d8.entry.js +1 -0
  282. package/dist/digi-arbetsformedlingen/p-db246e29.entry.js +1 -0
  283. package/dist/digi-arbetsformedlingen/p-de22ce43.entry.js +1 -0
  284. package/dist/digi-arbetsformedlingen/p-ecc2e481.entry.js +1 -0
  285. package/dist/digi-arbetsformedlingen/p-ee88e3f1.js +1 -0
  286. package/dist/digi-arbetsformedlingen/p-f2e16531.entry.js +1 -0
  287. package/dist/digi-arbetsformedlingen/p-f40f4b2a.js +1 -0
  288. package/dist/digi-arbetsformedlingen/p-f447b984.js +1 -0
  289. package/dist/digi-arbetsformedlingen/p-f4edca16.entry.js +1 -0
  290. package/dist/digi-arbetsformedlingen/p-f5bcd77b.entry.js +1 -0
  291. package/dist/digi-arbetsformedlingen/p-f87c0b45.entry.js +1 -0
  292. package/dist/digi-arbetsformedlingen/p-fa77fcf7.entry.js +1 -0
  293. package/dist/digi-arbetsformedlingen/p-fb9b3544.entry.js +1 -0
  294. package/dist/digi-arbetsformedlingen/p-fdca581c.entry.js +1 -0
  295. package/dist/digi-arbetsformedlingen/styles/src/_alias.mixin.scss +105 -252
  296. package/dist/digi-arbetsformedlingen/styles/src/themes/_brand-af18.mixin.scss +0 -19
  297. package/dist/digi-arbetsformedlingen/styles/src/themes/_brand-af25.mixin.scss +0 -144
  298. package/dist/digi-arbetsformedlingen/styles/src/themes/_brand-common.mixin.scss +0 -7
  299. package/dist/digi-arbetsformedlingen/styles/src/tokens-documentation/web-AF25.json +4 -160
  300. package/dist/esm/digi-arbetsformedlingen.js +1 -1
  301. package/dist/esm/digi-button_11.entry.js +1180 -0
  302. package/dist/esm/digi-calendar-datepicker.entry.js +2597 -0
  303. package/dist/esm/digi-calendar-week-view.entry.js +2 -1
  304. package/dist/esm/digi-calendar_2.entry.js +459 -0
  305. package/dist/esm/{digi-code-block_2.entry.js → digi-code-block_3.entry.js} +133 -3
  306. package/dist/esm/digi-code-example.entry.js +1 -1
  307. package/dist/esm/digi-context-menu.entry.js +236 -0
  308. package/dist/esm/digi-dialog.entry.js +18 -2
  309. package/dist/esm/digi-expandable-faq-item.entry.js +93 -0
  310. package/dist/esm/digi-footer-card.entry.js +25 -0
  311. package/dist/esm/digi-footer.entry.js +70 -0
  312. package/dist/esm/digi-form-category-filter.entry.js +117 -0
  313. package/dist/esm/digi-form-checkbox.entry.js +135 -0
  314. package/dist/esm/digi-form-error-list.entry.js +17 -1
  315. package/dist/esm/digi-form-file-upload.entry.js +597 -0
  316. package/dist/esm/digi-form-filter.entry.js +244 -0
  317. package/dist/esm/digi-form-receipt.entry.js +17 -1
  318. package/dist/esm/digi-form-select_2.entry.js +181 -0
  319. package/dist/esm/digi-header-avatar.entry.js +110 -0
  320. package/dist/esm/digi-header-navigation-item.entry.js +23 -0
  321. package/dist/esm/digi-header-navigation.entry.js +224 -0
  322. package/dist/esm/digi-header-notification.entry.js +19 -0
  323. package/dist/esm/digi-header.entry.js +111 -0
  324. package/dist/esm/digi-icon-accessibility-universal.entry.js +26 -0
  325. package/dist/esm/digi-icon-bars.entry.js +26 -0
  326. package/dist/esm/digi-icon-bell-filled.entry.js +26 -0
  327. package/dist/esm/digi-icon-check-circle-solid_4.entry.js +92 -0
  328. package/dist/esm/digi-icon-chevron-left_2.entry.js +48 -0
  329. package/dist/esm/digi-icon-copy.entry.js +26 -0
  330. package/dist/esm/digi-icon-envelope.entry.js +26 -0
  331. package/dist/esm/digi-icon-external-link-alt_2.entry.js +55 -0
  332. package/dist/esm/digi-icon-globe.entry.js +26 -0
  333. package/dist/esm/digi-icon-list-ul_6.entry.js +136 -0
  334. package/dist/esm/digi-icon-minus_2.entry.js +48 -0
  335. package/dist/esm/digi-icon-notification-error_4.entry.js +92 -0
  336. package/dist/esm/digi-icon-sign.entry.js +26 -0
  337. package/dist/esm/digi-icon-spinner.entry.js +27 -0
  338. package/dist/esm/digi-icon-x.entry.js +26 -0
  339. package/dist/esm/digi-info-card-multi-container.entry.js +18 -0
  340. package/dist/esm/digi-info-card-multi.entry.js +54 -0
  341. package/dist/esm/digi-info-card.entry.js +75 -0
  342. package/dist/esm/digi-layout-block_2.entry.js +87 -0
  343. package/dist/esm/digi-layout-columns.entry.js +29 -0
  344. package/dist/esm/digi-link-button.entry.js +62 -0
  345. package/dist/esm/digi-link-internal.entry.js +33 -0
  346. package/dist/esm/digi-link.entry.js +71 -0
  347. package/dist/esm/digi-logo.entry.js +45 -0
  348. package/dist/esm/digi-media-image_2.entry.js +162 -0
  349. package/dist/esm/digi-navigation-pagination.entry.js +17 -1
  350. package/dist/esm/digi-navigation-sidebar-button.entry.js +26 -0
  351. package/dist/esm/digi-navigation-vertical-menu-item.entry.js +146 -0
  352. package/dist/esm/digi-navigation-vertical-menu.entry.js +173 -0
  353. package/dist/esm/digi-notification-alert.entry.js +108 -0
  354. package/dist/esm/digi-notification-error-page.entry.js +17 -1
  355. package/dist/esm/digi-progress-indicator.entry.js +133 -0
  356. package/dist/esm/digi-quote.entry.js +1 -1
  357. package/dist/esm/digi-tag-media.entry.js +43 -0
  358. package/dist/esm/digi-title-logo.entry.js +129 -0
  359. package/dist/esm/digi-tools-feedback.entry.js +18 -2
  360. package/dist/esm/digi-tools-theme-provider.entry.js +24 -0
  361. package/dist/esm/digi-typography-heading-jumbo.entry.js +34 -0
  362. package/dist/esm/digi-typography-preamble.entry.js +16 -0
  363. package/dist/esm/digi-typography.entry.js +22 -0
  364. package/dist/esm/digi-util-breakpoint-observer.entry.js +44 -0
  365. package/dist/esm/digi-util-mutation-observer.entry.js +60 -0
  366. package/dist/esm/expandable-faq-item-variation.enum-a8cb225b.js +18 -0
  367. package/dist/esm/footer-card-variation.enum-cc732148.js +8 -0
  368. package/dist/esm/form-checkbox-variation.enum-83e906fc.js +19 -0
  369. package/dist/esm/form-select-variation.enum-f2f6098d.js +16 -0
  370. package/dist/esm/form-validation-message-variation.enum-f7835fc5.js +31 -0
  371. package/dist/esm/index-148a7577.js +220 -4
  372. package/dist/esm/{index-dc6b83f7.js → index-2fce392f.js} +3 -170
  373. package/dist/esm/index-5b6c95c6.js +63 -0
  374. package/dist/esm/index-8685f88d.js +170 -0
  375. package/dist/esm/index.js +17 -1
  376. package/dist/esm/info-card-multi-type.enum-07ee124f.js +8 -0
  377. package/dist/esm/info-card-variation.enum-2ccc52c1.js +24 -0
  378. package/dist/esm/layout-columns-variation.enum-34f7754e.js +23 -0
  379. package/dist/esm/layout-container-max-width.enum-c40018ac.js +21 -0
  380. package/dist/esm/link-button-variation.enum-84d4976f.js +9 -0
  381. package/dist/esm/loader.js +1 -1
  382. package/dist/esm/logo-color.enum-8593dca6.js +7 -0
  383. package/dist/esm/navigation-vertical-menu-variation.enum-c30b0ea9.js +13 -0
  384. package/dist/esm/progress-indicator-variation.enum-b12ba50a.js +13 -0
  385. package/dist/esm/tag-media-icon.enum-fefa191c.js +11 -0
  386. package/dist/esm/tools-theme-provider.brand.enum-8c5a98c9.js +7 -0
  387. package/dist/esm/typography-heading-jumbo-variation.enum-eb737f1b.js +17 -0
  388. package/dist/esm/typography-variation.enum-fdda731c.js +266 -0
  389. package/dist/types/components/_form/form-select-filter/form-select-filter.d.ts +22 -3
  390. package/dist/types/components/_navigation/navigation-context-menu/navigation-context-menu.d.ts +2 -2
  391. package/dist/types/components/_tools/tools-theme-provider/tools-theme-provider.d.ts +0 -9
  392. package/dist/types/components.d.ts +6 -18
  393. package/dist/types/enums.d.ts +0 -1
  394. package/hydrate/index.js +114 -96
  395. package/hydrate/index.mjs +114 -96
  396. package/package.json +4 -2
  397. package/components/p-24e68936.js +0 -165
  398. package/components/p-4b1d11d0.js +0 -66
  399. package/components/p-8c4cbca6.js +0 -177
  400. package/components/p-d7ef9cb1.js +0 -13
  401. package/dist/cjs/digi-button_84.cjs.entry.js +0 -8421
  402. package/dist/collection/components/_tools/tools-theme-provider/tools-theme-provider.theme.enum.js +0 -5
  403. package/dist/digi-arbetsformedlingen/p-3ae13b8a.entry.js +0 -1
  404. package/dist/digi-arbetsformedlingen/p-72ef7f99.entry.js +0 -1
  405. package/dist/digi-arbetsformedlingen/p-80500b2d.entry.js +0 -1
  406. package/dist/digi-arbetsformedlingen/p-8d055a17.js +0 -1
  407. package/dist/digi-arbetsformedlingen/p-922f4556.entry.js +0 -1
  408. package/dist/digi-arbetsformedlingen/p-a105d9fe.js +0 -1
  409. package/dist/digi-arbetsformedlingen/p-c59e5f69.entry.js +0 -1
  410. package/dist/digi-arbetsformedlingen/p-ca8d7464.entry.js +0 -1
  411. package/dist/digi-arbetsformedlingen/p-ede12626.entry.js +0 -1
  412. package/dist/digi-arbetsformedlingen/p-f601908d.entry.js +0 -1
  413. package/dist/esm/digi-button_84.entry.js +0 -8334
  414. package/dist/esm/typography-variation.enum-7319240b.js +0 -501
  415. package/dist/types/components/_tools/tools-theme-provider/tools-theme-provider.theme.enum.d.ts +0 -4
@@ -0,0 +1,597 @@
1
+ import { r as registerInstance, c as createEvent, h, F as Fragment, g as getElement } from './index-148a7577.js';
2
+ import { _ as _t } from './text-8f88c0f6.js';
3
+ import { r as randomIdGenerator } from './randomIdGenerator.util-56406f2e.js';
4
+ import { b as FormFileUploadVariation, a as FormFileUploadValidation, F as FormFileUploadHeadingLevel, c as FormValidationMessageVariation } from './form-validation-message-variation.enum-f7835fc5.js';
5
+ import { U as UtilBreakpointObserverBreakpoints } from './util-breakpoint-observer-breakpoints.enum-6d004731.js';
6
+
7
+ const formFileUploadCss = ".sc-digi-form-file-upload-h {\n --digi--form-file-upload--color--background--small--default: var(--digi--color--background--interactive--default--quaternary);\n --digi--form-file-upload--color--background--small--hover: var(--digi--color--background--interactive--hover--secondary);\n --digi--form-file-upload--color--background--medium--default: var(--digi--color--background--interactive--default--quaternary);\n --digi--form-file-upload--color--background--medium--hover: var(--digi--color--background--interactive--hover--secondary);\n --digi--form-file-upload--color--background--large--default: var(--digi--color--background--interactive--default--quaternary);\n --digi--form-file-upload--color--background--large--hover: var(--digi--color--background--interactive--hover--secondary);\n --digi--form-file-upload--color--border--small--default: var(--digi--color--border--interactive--default--on-input-nuance);\n --digi--form-file-upload--color--border--small--hover: var(--digi--color--border--interactive--hover--primary);\n --digi--form-file-upload--color--border--medium--default: var(--digi--color--border--interactive--default--on-input-nuance);\n --digi--form-file-upload--color--border--medium--hover: var(--digi--color--border--interactive--hover--primary);\n --digi--form-file-upload--color--border--large--default: var(--digi--color--border--interactive--default--on-input-nuance);\n --digi--form-file-upload--color--border--large--hover: var(--digi--color--border--interactive--hover--primary);\n --digi--form-file-upload--border-width--small--default: var(--digi--border-width--secondary);\n --digi--form-file-upload--border-width--small--hover: var(--digi--border-width--primary);\n --digi--form-file-upload--border-width--medium--default: var(--digi--border-width--secondary);\n --digi--form-file-upload--border-width--medium--hover: var(--digi--border-width--primary);\n --digi--form-file-upload--border-width--large--default: var(--digi--border-width--secondary);\n --digi--form-file-upload--border-width--large--hover: var(--digi--border-width--primary);\n --digi--form-file-upload--border-style--small--default: var(--digi--global--border-style--none);\n --digi--form-file-upload--border-style--medium--default: var(--digi--global--border-style--dashed);\n --digi--form-file-upload--border-style--large--default: var(--digi--global--border-style--dashed);\n --digi--form-file-upload--border-radius--small--default: var(--digi--border-radius--secondary);\n --digi--form-file-upload--border-radius--medium--default: var(--digi--border-radius--secondary);\n --digi--form-file-upload--border-radius--large--default: var(--digi--border-radius--secondary);\n --digi--form-file-upload--padding--small: var(--digi--gutter--medium) var(--digi--gutter--largest);\n --digi--form-file-upload--padding--medium: var(--digi--gutter--medium) var(--digi--gutter--medium) var(--digi--global--spacing--largest-2) var(--digi--gutter--medium);\n --digi--form-file-upload--padding--large: var(--digi--gutter--medium) var(--digi--gutter--medium) var(--digi--global--spacing--largest-2) var(--digi--gutter--medium);\n --digi--form-file-upload--font-size--small: var(--digi--global--typography--font-size--small);\n --digi--form-file-upload--font-size--medium: var(--digi--global--typography--font-size--base);\n --digi--form-file-upload--font-size--large: var(--digi--global--typography--font-size--large);\n --digi--form-file-upload--heading--font-family: var(--digi--global--typography--font-family--default);\n --digi--form-file-upload--heading--font-weight: var(--digi--typography--heading-4--font-weight--desktop);\n --digi--form-file-upload--heading--font-size: var(--digi--typography--heading-4--font-size--desktop);\n --digi--form-file-upload--heading--font-size--large: var(--digi--typography--heading-4--font-size--desktop-large);\n --digi--form-file-upload--font-family: var(--digi--global--typography--font-family--default);\n --digi--form-file-upload--font-weight: var(--digi--typography--form-file-upload--font-weight--desktop);\n --digi--form-file-upload--button-text--color--default: var(--digi--color--text--interactive--primary);\n --digi--form-file-upload--button-text--color--hover: var(--digi--color--text--interactive--primary);\n --digi--form-file-upload--padding--small--icon: var(--digi--global--spacing--smaller) var(--digi--global--spacing--smallest-2);\n --digi--form-file-upload--padding--medium--icon: var(--digi--global--spacing--base) var(--digi--global--spacing--smallest-2);\n --digi--form-file-upload--width--small: 132px;\n --digi--form-file-upload--width--medium: 304px;\n --digi--form-file-upload--width--large: inherit;\n --digi--form-file-upload--border--error: var(--digi--global--border-style--solid) solid;\n --digi--form-file-upload--border-color--error: var(--digi--color--border--interactive--validation--error);\n --digi--form-file-upload--border--error--width: var(--digi--border-width--secondary);\n --digi--form-file-upload--background--error: var(--digi--color--background--interactive--validation--error);\n container-type: inline-size;\n display: block;\n width: 100%;\n}\n.sc-digi-form-file-upload-h a.sc-digi-form-file-upload {\n font-weight: var(--digi--global--typography--font-weight--semibold);\n color: var(--digi--color--text--interactive--primary);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload.sc-digi-form-file-upload {\n font-family: var(--digi--global--typography--font-family--default);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload--small.sc-digi-form-file-upload {\n --COLOR--BACKGROUND--FILE-LIST: var(--digi--form-file-upload--color--background--small--default);\n --COLOR--BACKGROUND--DEFAULT: var(--digi--form-file-upload--color--background--small--default);\n --COLOR--BACKGROUND--HOVER: var(--digi--form-file-upload--color--background--small--hover);\n --COLOR--BORDER--DEFAULT: var(--digi--form-file-upload--color--border--small--default);\n --COLOR--BORDER--HOVER: var(--digi--form-file-upload--color--border--small--hover);\n --BORDER-STYLE--DEFAULT: var(--digi--form-file-upload--border-style--small--default);\n --BORDER-RADIUS--DEFAULT: var(--digi--form-file-upload--border-radius--small--default);\n --BORDER-WIDTH--DEFAULT: var(--digi--form-file-upload--border-width--small--default);\n --WIDTH: var(--digi--form-file-upload--width--small);\n --FONT-WEIGHT: var(--digi--form-file-upload--font-weight);\n --PADDING: var(--digi--form-file-upload--padding--small);\n --ICON--PADDING: var(--digi--form-file-upload--padding--small--icon);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload--medium.sc-digi-form-file-upload {\n --COLOR--BACKGROUND--FILE-LIST: var(--digi--form-file-upload--color--background--small--default);\n --COLOR--BACKGROUND--DEFAULT: var(--digi--form-file-upload--color--background--medium--default);\n --COLOR--BACKGROUND--HOVER: var(--digi--form-file-upload--color--background--medium--hover);\n --COLOR--BORDER--DEFAULT: var(--digi--form-file-upload--color--border--medium--default);\n --COLOR--BORDER--HOVER: var(--digi--form-file-upload--color--border--medium--hover);\n --BORDER-STYLE--DEFAULT: var(--digi--form-file-upload--border-style--medium--default);\n --BORDER-RADIUS--DEFAULT: var(--digi--form-file-upload--border-radius--medium--default);\n --BORDER-WIDTH--DEFAULT: var(--digi--form-file-upload--border-width--medium--default);\n --WIDTH: var(--digi--form-file-upload--width--medium);\n --FONT-WEIGHT: var(--digi--form-file-upload--font-weight);\n --PADDING: var(--digi--form-file-upload--padding--medium);\n --ICON--PADDING: var(--digi--form-file-upload--padding--medium--icon);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload--large.sc-digi-form-file-upload {\n --COLOR--BACKGROUND--FILE-LIST: var(--digi--form-file-upload--color--background--small--default);\n --COLOR--BACKGROUND--DEFAULT: var(--digi--form-file-upload--color--background--large--default);\n --COLOR--BACKGROUND--HOVER: var(--digi--form-file-upload--color--background--large--hover);\n --COLOR--BORDER--DEFAULT: var(--digi--form-file-upload--color--border--large--default);\n --COLOR--BORDER--HOVER: var(--digi--form-file-upload--color--border--large--hover);\n --BORDER-STYLE--DEFAULT: var(--digi--form-file-upload--border-style--large--default);\n --BORDER-RADIUS--DEFAULT: var(--digi--form-file-upload--border-radius--large--default);\n --BORDER-WIDTH--DEFAULT: var(--digi--form-file-upload--border-width--large--default);\n --WIDTH: var(--digi--form-file-upload--width--large);\n --FONT-WEIGHT: var(--digi--form-file-upload--font-weight);\n --PADDING: var(--digi--form-file-upload--padding--large);\n --ICON--PADDING: var(--digi--form-file-upload--padding--medium--icon);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload--has-errors.sc-digi-form-file-upload {\n --BORDER-STYLE--DEFAULT: var(--digi--form-file-upload--border--error);\n --COLOR--BORDER--DEFAULT: var(--digi--form-file-upload--border-color--error);\n --COLOR--BACKGROUND--HOVER: var(--digi--form-file-upload--border-color--error);\n --BORDER-WIDTH--DEFAULT: var(--digi--form-file-upload--border--error--width);\n --COLOR--BACKGROUND--DEFAULT: var(--digi--form-file-upload--background--error);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__spinner.sc-digi-form-file-upload {\n margin-right: 0.5rem;\n animation: animation__rotation 3s infinite linear;\n transform-origin: center;\n --digi--icon--height: 1rem;\n}\n@media (prefers-reduced-motion) {\n .sc-digi-form-file-upload-h .digi-form-file-upload__spinner.sc-digi-form-file-upload {\n animation: none;\n }\n}\n@keyframes animation__rotation {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(359deg);\n }\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__input.sc-digi-form-file-upload {\n display: none;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__button.sc-digi-form-file-upload {\n margin: 0 0 auto 0.5rem;\n text-align: center;\n white-space: nowrap;\n background: none;\n border: none;\n cursor: pointer;\n font-weight: var(--digi--typography--button--font-weight--desktop);\n font-size: var(--digi--typography--body--font-size--desktop);\n color: var(--digi--form-file-upload--button-text--color--default);\n display: flex;\n align-items: center;\n font-family: var(--digi--global--typography--font-family--default);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__button.sc-digi-form-file-upload:hover {\n color: var(--digi--form-file-upload--button-text--color--hover);\n text-decoration: underline;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__button.sc-digi-form-file-upload:hover .digi-form-file-upload__button-icon.sc-digi-form-file-upload {\n --digi--icon--color: var(--digi--form-file-upload--button-text--color--hover);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__button.sc-digi-form-file-upload:focus-visible {\n outline: 2px solid black;\n outline-offset: 2px;\n box-shadow: 0px 0px 0px 5px white;\n text-decoration: underline;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__button-icon.sc-digi-form-file-upload {\n --digi--icon--height: 1.25rem;\n --digi--icon--width: 1.25rem;\n --digi--icon--color: var(--digi--color--text--interactive--primary);\n margin-left: 5px;\n padding: var(--ICON--PADDING);\n padding-right: 0;\n padding-left: 0;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__button-icon.sc-digi-form-file-upload:hover {\n --digi--icon--color: var(--digi--form-file-upload--button-text--color--hover);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__upload-area.sc-digi-form-file-upload {\n border-color: var(--COLOR--BORDER--DEFAULT);\n border-radius: var(--BORDER-RADIUS--DEFAULT);\n border-width: var(--BORDER-WIDTH--DEFAULT);\n border-style: var(--BORDER-STYLE--DEFAULT);\n max-width: var(--WIDTH);\n margin: 0;\n display: flex;\n flex-direction: column;\n background-color: var(--COLOR--BACKGROUND--DEFAULT);\n align-items: center;\n padding: var(--PADDING);\n margin-bottom: var(--digi--gutter--medium);\n margin-top: var(--digi--gutter--button-block-small);\n position: relative;\n cursor: pointer;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__upload-area--hover.sc-digi-form-file-upload {\n border-color: var(--COLOR--BORDER--HOVER);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__upload-area-overlay.sc-digi-form-file-upload {\n position: absolute;\n width: 100%;\n height: 100%;\n background-color: var(--COLOR--BACKGROUND--HOVER);\n opacity: 0.1;\n top: 0;\n left: 0;\n z-index: 10;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__text-area.sc-digi-form-file-upload {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__text-area.sc-digi-form-file-upload .paper-clip.sc-digi-form-file-upload {\n padding-right: 0.5rem;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__files-list.sc-digi-form-file-upload {\n max-width: none;\n padding: 0;\n margin: 0;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__files.sc-digi-form-file-upload {\n border-radius: var(--BORDER-RADIUS--DEFAULT);\n max-width: 100%;\n width: 100%;\n box-sizing: border-box;\n background-color: var(--COLOR--BACKGROUND--FILE-LIST);\n padding: var(--digi--gutter--largest-2) var(--digi--padding--large);\n margin-bottom: var(--digi--gutter--medium);\n margin-top: var(--digi--gutter--medium);\n padding-bottom: var(--digi--padding--smaller);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__files-heading.sc-digi-form-file-upload {\n font-family: var(--digi--form-file-upload--heading--font-family);\n font-size: var(--digi--typography--label--font-size--desktop);\n font-weight: var(--digi--form-file-upload--heading--font-weight);\n color: var(--digi--color--text--primary);\n margin: var(--digi--margin--small) 0 var(--digi--margin--medium) 0;\n display: block;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__files-heading--and-errors.sc-digi-form-file-upload {\n margin-top: var(--digi--margin--largest);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__error-list-container.sc-digi-form-file-upload {\n display: flex;\n justify-content: space-between;\n padding-bottom: 0.75rem;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__error-list-container.with-files.sc-digi-form-file-upload {\n border-bottom: var(--BORDER-WIDTH--DEFAULT) solid var(--digi--color--divider--primary);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__error-list-container.sc-digi-form-file-upload .clear-button.sc-digi-form-file-upload {\n max-height: 1.5rem;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__error-list-container.sc-digi-form-file-upload .clear-button.sc-digi-form-file-upload .clear-icon.sc-digi-form-file-upload {\n padding-right: 0;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__error-list.sc-digi-form-file-upload {\n margin: 0;\n padding: 0;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__error-list.sc-digi-form-file-upload li.sc-digi-form-file-upload {\n list-style: none;\n margin-bottom: 0.75rem;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__error-list.sc-digi-form-file-upload li.sc-digi-form-file-upload:last-of-type {\n margin-bottom: 0;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item.sc-digi-form-file-upload {\n margin: var(--digi--margin--small) 0;\n margin-bottom: var(--digi--margin--medium);\n width: 100%;\n box-sizing: border-box;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-container.sc-digi-form-file-upload {\n list-style-type: none;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-container.sc-digi-form-file-upload:nth-child(n+2) {\n border-top: var(--BORDER-WIDTH--DEFAULT) solid var(--digi--color--divider--primary);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-pending-container.sc-digi-form-file-upload {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-pending-container.sc-digi-form-file-upload .info-wrapper.sc-digi-form-file-upload {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n height: auto;\n min-width: 20%;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-pending-container.sc-digi-form-file-upload .button-wrapper.sc-digi-form-file-upload {\n display: flex;\n min-width: 20%;\n justify-content: flex-end;\n align-items: center;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-pending-container.sc-digi-form-file-upload p.sc-digi-form-file-upload {\n margin: auto var(--digi--margin--small) !important;\n font-weight: var(--digi--form-file-upload--font-weight);\n font-size: var(--digi--typography--body--font-size--desktop);\n white-space: nowrap;\n height: max-content;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-pending-container.sc-digi-form-file-upload .digi-form-file-upload__button-abort.sc-digi-form-file-upload {\n margin: 0;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-text-and-thumbnail-container.sc-digi-form-file-upload {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n width: 100%;\n min-width: 20%;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-green-check.sc-digi-form-file-upload {\n width: 1.375rem;\n height: 1.375rem;\n display: flex;\n align-self: baseline;\n position: relative;\n top: 4px;\n left: 0px;\n margin-right: 4px;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-green-check.sc-digi-form-file-upload svg.sc-digi-form-file-upload {\n --digi--icon--height: 16px;\n --digi--icon--width: 16px;\n --digi--icon--color: var(--digi--color--icon--validation--success);\n background-color: var(--digi--color--background--primary);\n border-radius: 50%;\n align-self: flex-start;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-name.sc-digi-form-file-upload {\n width: 100%;\n margin: auto 0;\n font-weight: var(--digi--typography--button--font-weight--desktop);\n font-size: var(--digi--typography--body--font-size--desktop);\n height: max-content;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-name--thumbnail.sc-digi-form-file-upload {\n font-weight: var(--digi--typography--button--font-weight--desktop);\n font-size: var(--digi--typography--body--font-size--desktop);\n margin: auto 0 auto var(--digi--margin--small);\n color: var(--digi--form-file-upload--button-text--color--default);\n}\n@media (max-width: 500px) {\n .sc-digi-form-file-upload-h .digi-form-file-upload__item-name.sc-digi-form-file-upload {\n max-width: 17.5rem;\n }\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-name.sc-digi-form-file-upload:focus-visible {\n outline: 2px solid black;\n outline-offset: 2px;\n box-shadow: 0px 0px 0px 5px white;\n}\n@container (max-width: 620px) {\n .sc-digi-form-file-upload-h .digi-form-file-upload__item .digi-form-file-upload__item-name {\n max-width: 17.5rem;\n }\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-text-container.sc-digi-form-file-upload {\n position: relative;\n display: flex;\n padding: 0;\n margin: 0;\n justify-content: space-between;\n align-items: center;\n overflow-wrap: break-word;\n gap: 32px;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-text-container-inner.sc-digi-form-file-upload {\n display: flex;\n width: 100%;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-text-container-figure.sc-digi-form-file-upload {\n margin: 0;\n align-self: flex-start;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-text-container-figure.sc-digi-form-file-upload::after {\n position: absolute;\n content: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23FFF' cx='8' cy='8' r='6'/%3E%3Cpath d='M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-8.925 4.236L13.01 6.3a.516.516 0 0 0 0-.73l-.73-.73a.516.516 0 0 0-.73 0L6.71 9.682l-2.26-2.26a.516.516 0 0 0-.73 0l-.73.73a.516.516 0 0 0 0 .73l3.355 3.355a.516.516 0 0 0 .73 0Z' fill='%23009322'/%3E%3C/g%3E%3C/svg%3E\");\n top: -6px;\n left: 24px;\n width: 18px;\n height: 18px;\n overflow: hidden;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-text-container.sc-digi-form-file-upload .thumbnail.sc-digi-form-file-upload {\n width: 2rem;\n height: 2rem;\n object-fit: cover;\n flex-grow: 0;\n margin-right: 0.75rem;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-text-container.sc-digi-form-file-upload .hidden.sc-digi-form-file-upload {\n margin-left: var(--digi--margin--larger);\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-pdf-preview-bis.sc-digi-form-file-upload {\n position: relative;\n top: 6px;\n left: 5px;\n margin-right: 1.25rem;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-pdf-preview-bis.sc-digi-form-file-upload::after {\n position: absolute;\n content: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23FFF' cx='8' cy='8' r='6'/%3E%3Cpath d='M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-8.925 4.236L13.01 6.3a.516.516 0 0 0 0-.73l-.73-.73a.516.516 0 0 0-.73 0L6.71 9.682l-2.26-2.26a.516.516 0 0 0-.73 0l-.73.73a.516.516 0 0 0 0 .73l3.355 3.355a.516.516 0 0 0 .73 0Z' fill='%23009322'/%3E%3C/g%3E%3C/svg%3E\");\n top: -7px;\n left: 15px;\n width: 18px;\n height: 18px;\n overflow: hidden;\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__item-info.sc-digi-form-file-upload {\n width: 100%;\n}\n@container (max-width: 500px) {\n .sc-digi-form-file-upload-h .digi-form-file-upload__item .digi-form-file-upload__item span {\n margin-left: 0;\n margin-right: auto;\n }\n}\n.sc-digi-form-file-upload-h .digi-form-file-upload__error.sc-digi-form-file-upload {\n color: var(--digi--color--icon--validation--error);\n}\n.sc-digi-form-file-upload-h .visually-hidden.sc-digi-form-file-upload {\n border: 0;\n clip: rect(1px, 1px, 1px, 1px);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n white-space: nowrap;\n}\n@container (min-width: 500px) {\n .sc-digi-form-file-upload-h .hidden-desktop {\n display: none !important;\n }\n}\n@container (max-width: 499px) {\n .sc-digi-form-file-upload-h .hidden-mobile {\n display: none !important;\n }\n}";
8
+ const DigiFormFileUploadStyle0 = formFileUploadCss;
9
+
10
+ const FormFileUpload = class {
11
+ constructor(hostRef) {
12
+ registerInstance(this, hostRef);
13
+ this.afOnUploadFile = createEvent(this, "afOnUploadFile", 7);
14
+ this.afOnRemoveFile = createEvent(this, "afOnRemoveFile", 7);
15
+ this.afOnCancelFile = createEvent(this, "afOnCancelFile", 7);
16
+ this.afOnReady = createEvent(this, "afOnReady", 3);
17
+ this.afShowModal = createEvent(this, "afShowModal", 7);
18
+ this.toBase64 = (file) => new Promise((resolve, reject) => {
19
+ const reader = new FileReader();
20
+ reader.readAsDataURL(file);
21
+ reader.onload = () => {
22
+ const encoded = reader.result.toString().replace(/^data:(.*,)?/, '');
23
+ resolve(encoded);
24
+ };
25
+ reader.onerror = (error) => reject(error);
26
+ });
27
+ this._input = undefined;
28
+ this._fileList = undefined;
29
+ this._uploadButton = undefined;
30
+ this._srTextContainer = undefined;
31
+ this.files = [];
32
+ this.error = false;
33
+ this.errorMessages = [];
34
+ this.fileHover = false;
35
+ this.afLabel = _t.form.file_upload;
36
+ this.afLabelDescription = undefined;
37
+ this.afVariation = FormFileUploadVariation.SMALL;
38
+ this.afId = randomIdGenerator('digi-form-file-upload');
39
+ this.afFileTypes = undefined;
40
+ this.afFileMaxSize = 10;
41
+ this.afMaxFiles = undefined;
42
+ this.afName = undefined;
43
+ this.afUploadBtnText = undefined;
44
+ this.afRequired = undefined;
45
+ this.afRequiredText = undefined;
46
+ this.afAnnounceIfOptional = false;
47
+ this.afHeadingFiles = _t.form.file_uploaded_files;
48
+ this.afAnnounceIfOptionalText = undefined;
49
+ this.afFileMaxSizeText = undefined;
50
+ this.afShowThumbnail = false;
51
+ this.afEnablePreview = false;
52
+ this.afValidationText = undefined;
53
+ this.afValidation = FormFileUploadValidation.DISABLED;
54
+ this.afHeadingLevel = FormFileUploadHeadingLevel.H2;
55
+ this.afErrorMessageIsAlert = true;
56
+ }
57
+ afValidationTextChange() {
58
+ this.setValidationText();
59
+ }
60
+ get errorMessageIsAlert() {
61
+ return (this.afErrorMessageIsAlert !== false &&
62
+ this.afErrorMessageIsAlert !== 'false');
63
+ }
64
+ breakpointHandler(e) {
65
+ if (e.detail.value) {
66
+ if (e.detail.value === UtilBreakpointObserverBreakpoints.SMALL) {
67
+ this.afVariation = FormFileUploadVariation.SMALL;
68
+ }
69
+ else {
70
+ this.afVariation = this.aforiginalVariation;
71
+ }
72
+ }
73
+ }
74
+ /**
75
+ * Används för att skicka in en validerad fil tillbaks till komponenten. Förväntar sig att filen redan finns i komponenten med status "pending".
76
+ * @en Send a validated file to the component. Expects file to exist in component with status "pending".
77
+ */
78
+ async afMValidateFile(file) {
79
+ if (!this.fileExistInFiles(file)) {
80
+ return;
81
+ }
82
+ this.removeFileFromList(file['id']);
83
+ if (file['status'] !== 'error') {
84
+ /* Måste göra en kopia av filen för att komponenten ska rendera om sig.
85
+ * Annars kan den peka på samma referens och förstår inte att statusen har ändrats. */
86
+ const copiedFile = new File([file], file.name, { type: file.type });
87
+ copiedFile['id'] = file['id'];
88
+ copiedFile['status'] = file['status'];
89
+ copiedFile['base64'] = await this.toBase64(file);
90
+ this.files = [...this.files, copiedFile];
91
+ }
92
+ else {
93
+ this.validateFile(file);
94
+ }
95
+ }
96
+ /**
97
+ * Få ut alla uppladdade filer
98
+ * @en Get all uploaded files
99
+ */
100
+ async afMGetAllFiles() {
101
+ return this.files;
102
+ }
103
+ /**
104
+ * Hämta ut komponentens validitets-state och felmeddelanden
105
+ * @en Get component validity and error messages
106
+ */
107
+ async afMGetValidationState() {
108
+ return { isValid: !this.error, errorMessages: this.errorMessages };
109
+ }
110
+ /**
111
+ * Importera lista med filer utan att trigga uppladdningsevent. Ett objekt måste innehålla id, status och filen själv.
112
+ * @en Import array with files without triggering upload event. A file object needs to contain an id, status and the file itself.
113
+ */
114
+ async afMImportFiles(files) {
115
+ this.resetErrors();
116
+ if (files && files.length > 0) {
117
+ for (const importedFile of files) {
118
+ this.validateFile(importedFile);
119
+ }
120
+ }
121
+ const filesThatArOK = this.errorMessages.length === 0 ? files : this.getFilesThatAreOK(files);
122
+ if (filesThatArOK.length === 0) {
123
+ return;
124
+ }
125
+ this.files = this.files.concat(filesThatArOK);
126
+ }
127
+ async afMGetFormControlElement() {
128
+ return this._input;
129
+ }
130
+ /**
131
+ * Rensar komponentens fillista och eventuella felmeddelanden.
132
+ * @en Clears the component's file list and any error messages.
133
+ */
134
+ async afMClearFiles() {
135
+ this.files = [];
136
+ this.resetErrors();
137
+ }
138
+ /**
139
+ * Lyssnar på om fokus sätts på custom-elementet och propagerar ner det till själva input-elementet.
140
+ * @en Listens for when focus is set on the custom element and propagates it down to the actual input element.
141
+ */
142
+ focusOnInput() {
143
+ this._input.focus();
144
+ }
145
+ componentWillLoad() {
146
+ this.aforiginalVariation = this.afVariation;
147
+ }
148
+ componentDidLoad() {
149
+ this.hostElement.setAttribute('tabindex', '-1');
150
+ this.afOnReady.emit();
151
+ /* Vid första renderingen så fungerar inte propertyn korrekt om vi inte kallar på setValidationText härifrån.
152
+ * Gissar att det är en tajmin-issue mellan prop och state, men hinner inte gräva i det mer nu. */
153
+ this.setValidationText();
154
+ }
155
+ get fileMaxSize() {
156
+ const MEGABYTE = 1048576;
157
+ return this.afFileMaxSize * MEGABYTE;
158
+ }
159
+ setValidationText() {
160
+ if (this.afValidationText && this.afValidationText.length > 0) {
161
+ let isDuplicated = false;
162
+ if (this.errorMessages.length > 0) {
163
+ this.errorMessages.forEach((error) => {
164
+ if (error.message === this.afValidationText) {
165
+ isDuplicated = true;
166
+ }
167
+ });
168
+ }
169
+ if (!isDuplicated) {
170
+ this.errorMessages.push({
171
+ fileName: '',
172
+ message: this.afValidationText
173
+ });
174
+ }
175
+ this.error = true;
176
+ }
177
+ else {
178
+ this.resetErrors();
179
+ }
180
+ }
181
+ fileExistInFiles(fileToCheck) {
182
+ let exist = false;
183
+ if (this.files.length > 0) {
184
+ this.files.forEach((file) => {
185
+ if (file['id'] === fileToCheck['id']) {
186
+ exist = true;
187
+ return;
188
+ }
189
+ else if (file.name === fileToCheck.name) {
190
+ exist = true;
191
+ }
192
+ });
193
+ }
194
+ return exist;
195
+ }
196
+ checkAcceptedTypes(file) {
197
+ const acceptedTypes = this.afFileTypes.replace(/\s/g, '').split(',');
198
+ const fileMimeType = file.type;
199
+ const fileNameExtension = file.name
200
+ .split('.')
201
+ .slice(-1)
202
+ .map((item) => '.' + item.toLowerCase())
203
+ .toString();
204
+ return acceptedTypes.some((item) => {
205
+ // Checking against group of mime types
206
+ if (item.includes('/*')) {
207
+ const mimeTypeCategory = item.split('/').slice(0, 1).toString();
208
+ const fileMimeTypeCategory = fileMimeType
209
+ .split('/')
210
+ .slice(0, 1)
211
+ .toString();
212
+ return mimeTypeCategory == fileMimeTypeCategory;
213
+ }
214
+ // Checking against mimetype and extension
215
+ return (item === fileMimeType || item === fileNameExtension || item === '*');
216
+ });
217
+ }
218
+ resetErrors(handleFocus = false) {
219
+ this.error = false;
220
+ this._srTextContainer.textContent = '';
221
+ this.errorMessages = [];
222
+ /* Timeouten behövs för att state och element ska hinna renderas om innan fokus flyttas.
223
+ Vi märkte att det blir problem för hjälpmedel om den inte är på plats. */
224
+ if (handleFocus) {
225
+ setTimeout(() => {
226
+ this._uploadButton.focus();
227
+ }, 100);
228
+ }
229
+ }
230
+ addErrorMessage(fileName, message) {
231
+ this.errorMessages.push({
232
+ fileName: fileName,
233
+ message: message
234
+ });
235
+ }
236
+ validateFileStatus(file) {
237
+ if (file['status'] &&
238
+ file['status'] === FormValidationMessageVariation.ERROR) {
239
+ const message = file['error']
240
+ ? file['error']
241
+ : _t.form.file_error_unknown_error;
242
+ this.addErrorMessage(file.name, message);
243
+ }
244
+ }
245
+ validateMaxSize(file) {
246
+ if (file.size > this.fileMaxSize) {
247
+ const message = this.afFileMaxSizeText
248
+ ? this.afFileMaxSizeText
249
+ : _t.form.file_error_too_large(file.name, this.afFileMaxSize);
250
+ this.addErrorMessage(file.name, message);
251
+ }
252
+ }
253
+ validateFileType(file) {
254
+ if (!this.checkAcceptedTypes(file)) {
255
+ this.addErrorMessage(file.name, _t.form.file_error_filetype_not_allowed(file.name, this.afFileTypes));
256
+ }
257
+ }
258
+ validateFile(file) {
259
+ this.validateIfFileIsAlreadyUploaded(file);
260
+ this.validateFileStatus(file);
261
+ this.validateMaxSize(file);
262
+ this.validateFileType(file);
263
+ this.error = this.errorMessages.length > 0;
264
+ }
265
+ onCancelFileHandler(e, id) {
266
+ e.preventDefault();
267
+ const fileFromList = this.removeFileFromList(id);
268
+ fileFromList['status'] = 'error';
269
+ fileFromList['error'] = _t.form.file_upload_canceled;
270
+ this.afOnCancelFile.emit(fileFromList);
271
+ }
272
+ removeFileFromList(id) {
273
+ const index = this.getIndexOfFile(id);
274
+ if (index === -1) {
275
+ return;
276
+ }
277
+ const removedFile = this.files[index];
278
+ this.files = [
279
+ ...this.files.slice(0, index),
280
+ ...this.files.slice(index + 1)
281
+ ];
282
+ return removedFile;
283
+ }
284
+ getIndexOfFile(id) {
285
+ const index = this.files.findIndex((file) => file['id'] == id);
286
+ return index;
287
+ }
288
+ getFilesThatAreOK(files) {
289
+ const validFiles = [];
290
+ files.forEach((file) => {
291
+ let isValid = true;
292
+ this.errorMessages.forEach((message) => {
293
+ if (message.fileName === file.name) {
294
+ isValid = false;
295
+ }
296
+ });
297
+ if (isValid) {
298
+ validFiles.push(file);
299
+ }
300
+ });
301
+ return validFiles;
302
+ }
303
+ validateIfFileIsAlreadyUploaded(file) {
304
+ for (const item of this.files) {
305
+ if (item.name === file.name) {
306
+ this.addErrorMessage(file.name, _t.form.file_error_exists(file.name));
307
+ }
308
+ }
309
+ }
310
+ handleFiles(e) {
311
+ var _a, _b;
312
+ this.resetErrors();
313
+ const fileList = e.dataTransfer ? (_a = e.dataTransfer) === null || _a === void 0 ? void 0 : _a.files : (_b = e.target) === null || _b === void 0 ? void 0 : _b.files;
314
+ const filesToValidate = [];
315
+ Array.from(fileList).forEach((file) => {
316
+ filesToValidate.push(file);
317
+ });
318
+ if (!filesToValidate || filesToValidate.length === 0) {
319
+ return;
320
+ }
321
+ const numberOfFiles = filesToValidate.length + this.files.length;
322
+ if (numberOfFiles > this.afMaxFiles) {
323
+ this.addErrorMessage('', _t.form.file_error_too_many);
324
+ this.error = true;
325
+ return;
326
+ }
327
+ filesToValidate.forEach((file) => {
328
+ this.validateFile(file);
329
+ });
330
+ const filesThatArOK = this.errorMessages.length === 0
331
+ ? filesToValidate
332
+ : this.getFilesThatAreOK(filesToValidate);
333
+ if (filesThatArOK.length === 0) {
334
+ return;
335
+ }
336
+ const formData = new FormData();
337
+ filesThatArOK.forEach((file) => {
338
+ formData.append('file', file);
339
+ });
340
+ for (const obj of formData.entries()) {
341
+ this.addFileStatusAndEmitFiles(obj[1]);
342
+ }
343
+ this._input.value = '';
344
+ }
345
+ onButtonUploadFileHandler(e) {
346
+ e.preventDefault();
347
+ if (!e.target.files)
348
+ return;
349
+ this.handleFiles(e);
350
+ }
351
+ onRemoveFileHandler(e, id) {
352
+ e.preventDefault();
353
+ this.resetErrors();
354
+ const fileToRemove = this.removeFileFromList(id);
355
+ this.afOnRemoveFile.emit(fileToRemove);
356
+ this._input.value = '';
357
+ this.handleFocusAfterFileRemoved();
358
+ }
359
+ handleFocusAfterFileRemoved() {
360
+ /* Timeouten behövs för att state och element ska hinna renderas om innan fokus flyttas.
361
+ Vi märkte att det blir problem för hjälpmedel om den inte är på plats. */
362
+ setTimeout(() => {
363
+ if (this.files.length > 0) {
364
+ this._fileList.focus();
365
+ }
366
+ else {
367
+ this._uploadButton.focus();
368
+ }
369
+ }, 100);
370
+ }
371
+ emitFile(file) {
372
+ const index = this.getIndexOfFile(file['id']);
373
+ if (this.afValidation === FormFileUploadValidation.ENABLED) {
374
+ this.afOnUploadFile.emit(this.files[index]);
375
+ }
376
+ else {
377
+ this.files[index]['status'] = 'OK';
378
+ this.afOnUploadFile.emit(this.files[index]);
379
+ }
380
+ }
381
+ async addFileStatusAndEmitFiles(file) {
382
+ file['id'] = randomIdGenerator('file');
383
+ file['status'] = 'pending';
384
+ file['base64'] = await this.toBase64(file);
385
+ this.files = [...this.files, file];
386
+ this.emitFile(file);
387
+ }
388
+ handleDrop(e) {
389
+ e.stopPropagation();
390
+ e.preventDefault();
391
+ this.fileHover = false;
392
+ if (e.dataTransfer.files) {
393
+ this.handleFiles(e);
394
+ }
395
+ }
396
+ handleAllowDrop(e) {
397
+ if (this.afVariation === FormFileUploadVariation.SMALL)
398
+ return;
399
+ e.stopPropagation();
400
+ e.preventDefault();
401
+ }
402
+ handleOnDragEnterLeave(e) {
403
+ this.handleAllowDrop(e);
404
+ this.fileHover = !this.fileHover;
405
+ }
406
+ handleInputClick(e) {
407
+ e.stopPropagation();
408
+ this.afShowModal.emit();
409
+ this._input.click();
410
+ }
411
+ getFiletypeAndShortFileName(file) {
412
+ let fileType = null;
413
+ let fileName = file.name;
414
+ const fileExtension = fileName.split('.').pop();
415
+ const fileWithoutExtension = fileName.replace('.' + fileExtension, '');
416
+ const minChars = window.innerWidth < 769 ? 6 : fileName.length;
417
+ const maxChars = window.innerWidth < 769 ? 14 : fileName.length;
418
+ if (String(file['type']).split('/')[0] === 'image') {
419
+ fileType = 'image';
420
+ }
421
+ else if (String(file['type']).split('/')[1] === 'pdf') {
422
+ fileType = 'pdf';
423
+ }
424
+ else {
425
+ fileType = 'default';
426
+ }
427
+ if (fileName.length > minChars) {
428
+ fileName =
429
+ fileWithoutExtension.substring(0, minChars) + '...' + fileExtension;
430
+ }
431
+ else if (fileName.length > maxChars) {
432
+ fileName = fileWithoutExtension.substring(0, 6) + '...' + fileExtension;
433
+ }
434
+ else {
435
+ fileName = file.name;
436
+ }
437
+ return { type: fileType, name: fileName };
438
+ }
439
+ // If its a pdf or an image the file is opened on another tab, any other file formats are downloaded
440
+ async viewUploadedFile(e, file) {
441
+ e.preventDefault();
442
+ if (this.getFiletypeAndShortFileName(file).type === 'image') {
443
+ const w = window.open();
444
+ w.document.write(`<img src="data:${file['type']};base64,${file['base64']}" alt="${file.name}" />`);
445
+ w.document.title = file['name'];
446
+ }
447
+ else if (this.getFiletypeAndShortFileName(file).type === 'pdf') {
448
+ (async () => {
449
+ const pdfstr = await fetch(`data:application/pdf;base64,${file['base64']}`);
450
+ const blobFromFetch = await pdfstr.blob();
451
+ const blob = new Blob([blobFromFetch], { type: 'application/pdf' });
452
+ const blobUrl = URL.createObjectURL(blob);
453
+ setTimeout(() => {
454
+ window.open(blobUrl, '_blank');
455
+ }, 30);
456
+ })();
457
+ }
458
+ else {
459
+ const fileURL = URL.createObjectURL(file);
460
+ const a = document.createElement('a');
461
+ a.href = fileURL;
462
+ a.target = '_blank';
463
+ a.download = file.name;
464
+ a.click();
465
+ }
466
+ }
467
+ get cssModifiers() {
468
+ return {
469
+ 'digi-form-file-upload--small': this.afVariation == 'small',
470
+ 'digi-form-file-upload--medium': this.afVariation == 'medium',
471
+ 'digi-form-file-upload--large': this.afVariation == 'large',
472
+ 'digi-form-file-upload--has-errors': this.errorMessages.length > 0
473
+ };
474
+ }
475
+ renderErrorMessage() {
476
+ if (!this.error) {
477
+ return;
478
+ }
479
+ this.readErrorMessagesToAssistiveTechnologies();
480
+ const showBorder = this.files.length > 0 ? 'with-files' : '';
481
+ return (h("div", { class: 'digi-form-file-upload__error-list-container ' + showBorder }, h("ul", { class: "digi-form-file-upload__error-list", "aria-hidden": "true" }, this.renderErrorMessages()), h("button", { type: "button", "aria-label": _t.form.file_upload_reset_errors_aria_label, class: "digi-form-file-upload__button clear-button hidden-mobile", onClick: () => {
482
+ this.resetErrors(true);
483
+ } }, h("span", null, _t.form.file_upload_reset_errors)), h("button", { type: "button", onClick: () => {
484
+ this.resetErrors(true);
485
+ }, class: "digi-form-file-upload__button clear-button hidden-desktop", "aria-label": _t.form.file_upload_reset_errors_aria_label }, h("digi-icon-x-button-outline", { class: "digi-form-file-upload__button-icon clear-icon", "aria-hidden": "true" }))));
486
+ }
487
+ readErrorMessagesToAssistiveTechnologies() {
488
+ this._srTextContainer.textContent = '';
489
+ const srTexts = this.errorMessages.map((error) => {
490
+ return error.message + ' ';
491
+ });
492
+ /* Timeouten behövs för att state och element ska hinna renderas om innan innehållet ändras.
493
+ Vi märkte att det blir problem för hjälpmedel om den inte är på plats. */
494
+ setTimeout(() => {
495
+ this._srTextContainer.textContent = srTexts.toString();
496
+ }, 200);
497
+ }
498
+ renderErrorMessages() {
499
+ return this.errorMessages.map((error) => {
500
+ return (h("li", null, h("digi-form-validation-message", { id: "digi-form-file-upload__error", class: "digi-form-file-upload__error", "af-variation": "error" }, error.message)));
501
+ });
502
+ }
503
+ renderPendingFile(file) {
504
+ return (h("div", { class: "digi-form-file-upload__item-pending-container" }, h("span", { class: "info-wrapper" }, h("digi-icon-spinner", { class: "digi-form-file-upload__spinner" }), h("span", { style: { margin: '0' } }, _t.form.file_upload_progress, " ", h("span", { class: "hidden-mobile" }, "|")), h("p", { class: "digi-form-file-upload__item-name-pending hidden-mobile" }, this.getFiletypeAndShortFileName(file).name)), h("span", { class: "button-wrapper" }, h("button", { type: "button", onClick: (e) => this.onCancelFileHandler(e, file['id']), class: "digi-form-file-upload__button digi-form-file-upload__button-abort hidden-mobile", "aria-label": _t.form.file_cancel_upload_long(file.name) }, _t.form.file_cancel_upload), h("button", { type: "button", onClick: (e) => this.onCancelFileHandler(e, file['id']), class: "digi-form-file-upload__button hidden-desktop", "aria-label": _t.form.file_cancel_upload_long(file.name) }, h("digi-icon-x-button-outline", { class: "digi-form-file-upload__button-icon", "aria-hidden": "true" })))));
505
+ }
506
+ renderImageThumbnail(file) {
507
+ if (this.afShowThumbnail) {
508
+ return (h("figure", { class: "digi-form-file-upload__item-text-container-figure", style: { margin: '0' } }, h("img", { "aria-hidden": "true", class: "thumbnail", src: `data:${file['type']};base64,${file['base64']}` }), h("figcaption", { class: "visually-hidden" }, "Miniatyr av ", file.name)));
509
+ }
510
+ return this.renderCheckmark();
511
+ }
512
+ renderCheckmark() {
513
+ return (h("span", { class: "digi-form-file-upload__item-green-check" }, h("digi-icon-check-circle-solid", null)));
514
+ }
515
+ renderPDFThumbnail(file) {
516
+ if (this.afShowThumbnail) {
517
+ return (h("span", { class: `${this.afShowThumbnail ? 'digi-form-file-upload__item-pdf-preview-bis' : null}`, "aria-label": file.name }, h("svg", { style: { scale: '1' }, width: "23.76", height: "32", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M22.888 6.124 17.696.88A2.955 2.955 0 0 0 15.6 0H2.97C1.33.006 0 1.35 0 3.006V29C0 30.657 1.33 32 2.97 32h17.82c1.64 0 2.97-1.343 2.97-3V8.249a3.03 3.03 0 0 0-.872-2.124Zm-2.34 1.88H15.84V3.25l4.709 4.756ZM2.97 29.002V3.006h9.9v6.498c0 .831.662 1.5 1.485 1.5h6.435v17.997H2.97Zm15.481-8.98c-.755-.75-2.908-.544-3.985-.406-1.064-.656-1.775-1.562-2.277-2.893.242-1.006.625-2.537.335-3.5-.26-1.637-2.34-1.474-2.636-.368-.273 1.006-.025 2.406.433 4.193-.619 1.493-1.54 3.499-2.19 4.649-1.238.643-2.909 1.637-3.156 2.887-.204.987 1.609 3.449 4.708-1.95 1.386-.462 2.896-1.031 4.233-1.256 1.17.637 2.537 1.062 3.452 1.062 1.578 0 1.733-1.762 1.083-2.418ZM6.194 24.883c.315-.856 1.516-1.844 1.88-2.187-1.175 1.893-1.88 2.23-1.88 2.187Zm5.049-11.91c.458 0 .414 2.005.111 2.549-.272-.869-.266-2.55-.111-2.55Zm-1.51 8.535c.6-1.056 1.114-2.312 1.528-3.418.514.944 1.17 1.7 1.863 2.219-1.287.268-2.407.818-3.391 1.2Zm8.143-.312s-.31.375-2.308-.488c2.172-.162 2.53.338 2.308.488Z", fill: "var(--digi--color--icon--cta)", "fill-rule": "evenodd" }))));
518
+ }
519
+ return this.renderCheckmark();
520
+ }
521
+ renderThumbnail(file) {
522
+ const fileType = this.getFiletypeAndShortFileName(file).type;
523
+ switch (fileType) {
524
+ case 'pdf':
525
+ return this.renderPDFThumbnail(file);
526
+ case 'image':
527
+ return this.renderImageThumbnail(file);
528
+ default:
529
+ return this.renderCheckmark();
530
+ }
531
+ }
532
+ renderFileName(file) {
533
+ if (this.afEnablePreview) {
534
+ return (h("a", { class: "digi-form-file-upload__item-name", href: "#", onClick: (e) => {
535
+ this.viewUploadedFile(e, file);
536
+ } }, file.name));
537
+ }
538
+ else {
539
+ return h("span", { class: "digi-form-file-upload__item-name" }, file.name);
540
+ }
541
+ }
542
+ renderOKFile(file) {
543
+ return (h(Fragment, null, h("span", { class: "digi-form-file-upload__item-text-and-thumbnail-container" }, this.renderThumbnail(file), this.renderFileName(file)), h("button", { type: "button", onClick: (e) => this.onRemoveFileHandler(e, file['id']), class: "digi-form-file-upload__button digi-form-file-upload__button--mobile", "aria-label": _t.form.file_remove(file.name) }, h("span", { class: "hidden-mobile" }, _t.form.file_remove()), h("digi-icon-trash", { class: "digi-form-file-upload__button-icon hidden-desktop" }))));
544
+ }
545
+ renderFile(file) {
546
+ switch (file['status']) {
547
+ case 'pending':
548
+ return this.renderPendingFile(file);
549
+ default:
550
+ return this.renderOKFile(file);
551
+ }
552
+ }
553
+ renderFiles() {
554
+ const filesMap = this.files.map((file, index) => {
555
+ {
556
+ return (h("li", { class: "digi-form-file-upload__item-container", key: 'file-' + index }, h("div", { class: "digi-form-file-upload__item" }, h("div", { class: "digi-form-file-upload__item-text-container" }, this.renderFile(file)))));
557
+ }
558
+ });
559
+ return filesMap;
560
+ }
561
+ renderFileContainer() {
562
+ if (this.files.length === 0) {
563
+ return;
564
+ }
565
+ return (h(Fragment, null, h(this.afHeadingLevel, { class: {
566
+ 'digi-form-file-upload__files-heading': true,
567
+ 'digi-form-file-upload__files-heading--and-errors': this.error
568
+ } }, this.afHeadingFiles), h("ul", { class: "digi-form-file-upload__files-list", tabindex: -1, ref: (el) => {
569
+ this._fileList = el;
570
+ } }, this.renderFiles())));
571
+ }
572
+ render() {
573
+ return (h(Fragment, { key: 'bec280d44d534a720927ab737b34335600c3fe80' }, h("digi-util-breakpoint-observer", { key: '93983b718eda1869ff95f7a0abe8c6704395a1e0', onAfOnChange: (e) => this.breakpointHandler(e) }), h("div", { key: '23f30473aa0dd681c6c4ea20138d3f13391bb070', class: Object.assign({ 'digi-form-file-upload': true }, this.cssModifiers) }, h("digi-form-label", { key: 'c42a873187b3bf30ddfdb71561d6902a8b2f98fe', afFor: this.afId, afLabel: this.afLabel, afDescription: this.afLabelDescription, afRequired: this.afRequired, afAnnounceIfOptional: this.afAnnounceIfOptional, afRequiredText: this.afRequiredText, afAnnounceIfOptionalText: this.afAnnounceIfOptionalText }), h("div", { key: 'db1082e11bafb320c13a790d639d37ca821617ac', class: {
574
+ 'digi-form-file-upload__upload-area': true,
575
+ 'digi-form-file-upload__upload-area--hover': this.fileHover
576
+ }, onDrop: (e) => this.handleDrop(e), onDragOver: (e) => this.handleAllowDrop(e), onDragEnter: (e) => this.handleOnDragEnterLeave(e), onDragLeave: (e) => this.handleOnDragEnterLeave(e), onClick: (e) => this.handleInputClick(e) }, this.fileHover &&
577
+ this.afVariation != FormFileUploadVariation.SMALL && (h("div", { key: 'f58d5f61b5568263e9b60b255f47e6ef418c78e5', class: "digi-form-file-upload__upload-area-overlay" })), h("div", { key: 'c58c52f7e2c8aa8d17fe510ef90435d488844237', class: "digi-form-file-upload__text-area" }, h("button", { key: '1bb7fa84e0778702d0e77008f7d468d560ac8e17', type: "button", id: this.afId + '-button', ref: (el) => {
578
+ this._uploadButton = el;
579
+ }, onClick: (e) => this.handleInputClick(e), class: "digi-form-file-upload__button hidden_mobile", style: {
580
+ margin: '0'
581
+ } }, h("digi-icon-paperclip", { key: 'a84b67ad055682b1c1b013ec948af0935c35ed0c', "aria-hidden": "true", class: "digi-form-file-upload__button-icon paper-clip", slot: "icon" }), this.afUploadBtnText
582
+ ? this.afUploadBtnText
583
+ : _t.form.file_choose), h("input", { key: 'd0babe3bcbc5d03f2436c0f4a7ee23a93ecb0474', ref: (el) => {
584
+ this._input = el;
585
+ }, onChange: (e) => this.onButtonUploadFileHandler(e), class: "digi-form-file-upload__input", multiple: true, type: "file", id: this.afId, accept: this.afFileTypes, name: this.afName ? this.afName : null, required: this.afRequired ? this.afRequired : null, onDrop: (e) => this.handleDrop(e), onDragOver: (e) => this.handleAllowDrop(e), "aria-errormessage": "digi-form-file-upload__error", "aria-describedBy": "digi-form-file-upload__error" }), h("span", { key: '20a4158d0462ee2f871bddb57b9e168d356573ed' }, this.afVariation !== FormFileUploadVariation.SMALL &&
586
+ _t.form.file_dropzone))), h("p", { key: 'ade6d22fde218536ce42daff285a1605ac16bdb1', class: "visually-hidden", role: this.errorMessageIsAlert ? 'alert' : null, "aria-atomic": "true", ref: (el) => {
587
+ this._srTextContainer = el;
588
+ } }), (this.files.length > 0 || this.error) && (h("div", { key: '06044ba8e2a5d7e76374af1dfa479c891554ab45', class: "digi-form-file-upload__files" }, this.renderErrorMessage(), this.renderFileContainer())))));
589
+ }
590
+ get hostElement() { return getElement(this); }
591
+ static get watchers() { return {
592
+ "afValidationText": ["afValidationTextChange"]
593
+ }; }
594
+ };
595
+ FormFileUpload.style = DigiFormFileUploadStyle0;
596
+
597
+ export { FormFileUpload as digi_form_file_upload };