@erst-vg/dkfds-vite 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1183) hide show
  1. package/LICENSE.md +42 -0
  2. package/README.md +55 -0
  3. package/dist/README.md +55 -0
  4. package/dist/css/dkfds-borgerdk.css +12066 -0
  5. package/dist/css/dkfds-borgerdk.min.css +4 -0
  6. package/dist/css/dkfds-borgerdk.min.css.map +1 -0
  7. package/dist/css/dkfds-virkdk.css +12066 -0
  8. package/dist/css/dkfds-virkdk.min.css +4 -0
  9. package/dist/css/dkfds-virkdk.min.css.map +1 -0
  10. package/dist/css/dkfds.css +12066 -0
  11. package/dist/css/dkfds.min.css +4 -0
  12. package/dist/css/dkfds.min.css.map +1 -0
  13. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-Bold.eot +0 -0
  14. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-BoldItalic.eot +0 -0
  15. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-ExtraLight.eot +0 -0
  16. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-ExtraLightItalic.eot +0 -0
  17. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-Italic.eot +0 -0
  18. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-Light.eot +0 -0
  19. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-LightItalic.eot +0 -0
  20. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-Medium.eot +0 -0
  21. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-MediumItalic.eot +0 -0
  22. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-Regular.eot +0 -0
  23. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-SemiBold.eot +0 -0
  24. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-SemiBoldItalic.eot +0 -0
  25. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-Text.eot +0 -0
  26. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-TextItalic.eot +0 -0
  27. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-Thin.eot +0 -0
  28. package/dist/fonts/IBMPlexSans/complete/eot/IBMPlexSans-ThinItalic.eot +0 -0
  29. package/dist/fonts/IBMPlexSans/complete/eot/license.txt +92 -0
  30. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-Bold.otf +0 -0
  31. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-BoldItalic.otf +0 -0
  32. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-ExtraLight.otf +0 -0
  33. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-ExtraLightItalic.otf +0 -0
  34. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-Italic.otf +0 -0
  35. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-Light.otf +0 -0
  36. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-LightItalic.otf +0 -0
  37. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-Medium.otf +0 -0
  38. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-MediumItalic.otf +0 -0
  39. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-Regular.otf +0 -0
  40. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-SemiBold.otf +0 -0
  41. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-SemiBoldItalic.otf +0 -0
  42. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-Text.otf +0 -0
  43. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-TextItalic.otf +0 -0
  44. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-Thin.otf +0 -0
  45. package/dist/fonts/IBMPlexSans/complete/otf/IBMPlexSans-ThinItalic.otf +0 -0
  46. package/dist/fonts/IBMPlexSans/complete/otf/license.txt +92 -0
  47. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-Bold.ttf +0 -0
  48. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-BoldItalic.ttf +0 -0
  49. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-ExtraLight.ttf +0 -0
  50. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-ExtraLightItalic.ttf +0 -0
  51. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-Italic.ttf +0 -0
  52. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-Light.ttf +0 -0
  53. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-LightItalic.ttf +0 -0
  54. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-Medium.ttf +0 -0
  55. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-MediumItalic.ttf +0 -0
  56. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-Regular.ttf +0 -0
  57. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-SemiBold.ttf +0 -0
  58. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-SemiBoldItalic.ttf +0 -0
  59. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-Text.ttf +0 -0
  60. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-TextItalic.ttf +0 -0
  61. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-Thin.ttf +0 -0
  62. package/dist/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-ThinItalic.ttf +0 -0
  63. package/dist/fonts/IBMPlexSans/complete/ttf/license.txt +92 -0
  64. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-Bold.woff +0 -0
  65. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-BoldItalic.woff +0 -0
  66. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-ExtraLight.woff +0 -0
  67. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-ExtraLightItalic.woff +0 -0
  68. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-Italic.woff +0 -0
  69. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-Light.woff +0 -0
  70. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-LightItalic.woff +0 -0
  71. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-Medium.woff +0 -0
  72. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-MediumItalic.woff +0 -0
  73. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-Regular.woff +0 -0
  74. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-SemiBold.woff +0 -0
  75. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-SemiBoldItalic.woff +0 -0
  76. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-Text.woff +0 -0
  77. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-TextItalic.woff +0 -0
  78. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-Thin.woff +0 -0
  79. package/dist/fonts/IBMPlexSans/complete/woff/IBMPlexSans-ThinItalic.woff +0 -0
  80. package/dist/fonts/IBMPlexSans/complete/woff/license.txt +92 -0
  81. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-Bold.woff2 +0 -0
  82. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-BoldItalic.woff2 +0 -0
  83. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-ExtraLight.woff2 +0 -0
  84. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-ExtraLightItalic.woff2 +0 -0
  85. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-Italic.woff2 +0 -0
  86. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-Light.woff2 +0 -0
  87. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-LightItalic.woff2 +0 -0
  88. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-Medium.woff2 +0 -0
  89. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-MediumItalic.woff2 +0 -0
  90. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-Regular.woff2 +0 -0
  91. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-SemiBold.woff2 +0 -0
  92. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-SemiBoldItalic.woff2 +0 -0
  93. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-Text.woff2 +0 -0
  94. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-TextItalic.woff2 +0 -0
  95. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-Thin.woff2 +0 -0
  96. package/dist/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-ThinItalic.woff2 +0 -0
  97. package/dist/fonts/IBMPlexSans/complete/woff2/license.txt +92 -0
  98. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Bold-Cyrillic.woff +0 -0
  99. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Bold-Greek.woff +0 -0
  100. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Bold-Latin1.woff +0 -0
  101. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Bold-Latin2.woff +0 -0
  102. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Bold-Latin3.woff +0 -0
  103. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Bold-Pi.woff +0 -0
  104. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-BoldItalic-Cyrillic.woff +0 -0
  105. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-BoldItalic-Greek.woff +0 -0
  106. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-BoldItalic-Latin1.woff +0 -0
  107. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-BoldItalic-Latin2.woff +0 -0
  108. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-BoldItalic-Latin3.woff +0 -0
  109. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-BoldItalic-Pi.woff +0 -0
  110. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLight-Cyrillic.woff +0 -0
  111. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLight-Greek.woff +0 -0
  112. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLight-Latin1.woff +0 -0
  113. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLight-Latin2.woff +0 -0
  114. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLight-Latin3.woff +0 -0
  115. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLight-Pi.woff +0 -0
  116. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLightItalic-Cyrillic.woff +0 -0
  117. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLightItalic-Greek.woff +0 -0
  118. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLightItalic-Latin1.woff +0 -0
  119. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLightItalic-Latin2.woff +0 -0
  120. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLightItalic-Latin3.woff +0 -0
  121. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLightItalic-Pi.woff +0 -0
  122. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Italic-Cyrillic.woff +0 -0
  123. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Italic-Greek.woff +0 -0
  124. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Italic-Latin1.woff +0 -0
  125. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Italic-Latin2.woff +0 -0
  126. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Italic-Latin3.woff +0 -0
  127. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Italic-Pi.woff +0 -0
  128. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Light-Cyrillic.woff +0 -0
  129. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Light-Greek.woff +0 -0
  130. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Light-Latin1.woff +0 -0
  131. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Light-Latin2.woff +0 -0
  132. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Light-Latin3.woff +0 -0
  133. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Light-Pi.woff +0 -0
  134. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-LightItalic-Cyrillic.woff +0 -0
  135. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-LightItalic-Greek.woff +0 -0
  136. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-LightItalic-Latin1.woff +0 -0
  137. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-LightItalic-Latin2.woff +0 -0
  138. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-LightItalic-Latin3.woff +0 -0
  139. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-LightItalic-Pi.woff +0 -0
  140. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Medium-Cyrillic.woff +0 -0
  141. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Medium-Greek.woff +0 -0
  142. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Medium-Latin1.woff +0 -0
  143. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Medium-Latin2.woff +0 -0
  144. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Medium-Latin3.woff +0 -0
  145. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Medium-Pi.woff +0 -0
  146. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-MediumItalic-Cyrillic.woff +0 -0
  147. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-MediumItalic-Greek.woff +0 -0
  148. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-MediumItalic-Latin1.woff +0 -0
  149. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-MediumItalic-Latin2.woff +0 -0
  150. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-MediumItalic-Latin3.woff +0 -0
  151. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-MediumItalic-Pi.woff +0 -0
  152. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Regular-Cyrillic.woff +0 -0
  153. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Regular-Greek.woff +0 -0
  154. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Regular-Latin1.woff +0 -0
  155. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Regular-Latin2.woff +0 -0
  156. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Regular-Latin3.woff +0 -0
  157. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Regular-Pi.woff +0 -0
  158. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBold-Cyrillic.woff +0 -0
  159. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBold-Greek.woff +0 -0
  160. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBold-Latin1.woff +0 -0
  161. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBold-Latin2.woff +0 -0
  162. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBold-Latin3.woff +0 -0
  163. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBold-Pi.woff +0 -0
  164. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBoldItalic-Cyrillic.woff +0 -0
  165. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBoldItalic-Greek.woff +0 -0
  166. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBoldItalic-Latin1.woff +0 -0
  167. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBoldItalic-Latin2.woff +0 -0
  168. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBoldItalic-Latin3.woff +0 -0
  169. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBoldItalic-Pi.woff +0 -0
  170. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Text-Cyrillic.woff +0 -0
  171. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Text-Greek.woff +0 -0
  172. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Text-Latin1.woff +0 -0
  173. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Text-Latin2.woff +0 -0
  174. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Text-Latin3.woff +0 -0
  175. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Text-Pi.woff +0 -0
  176. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-TextItalic-Cyrillic.woff +0 -0
  177. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-TextItalic-Greek.woff +0 -0
  178. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-TextItalic-Latin1.woff +0 -0
  179. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-TextItalic-Latin2.woff +0 -0
  180. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-TextItalic-Latin3.woff +0 -0
  181. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-TextItalic-Pi.woff +0 -0
  182. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Thin-Cyrillic.woff +0 -0
  183. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Thin-Greek.woff +0 -0
  184. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Thin-Latin1.woff +0 -0
  185. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Thin-Latin2.woff +0 -0
  186. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Thin-Latin3.woff +0 -0
  187. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-Thin-Pi.woff +0 -0
  188. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ThinItalic-Cyrillic.woff +0 -0
  189. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ThinItalic-Greek.woff +0 -0
  190. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ThinItalic-Latin1.woff +0 -0
  191. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ThinItalic-Latin2.woff +0 -0
  192. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ThinItalic-Latin3.woff +0 -0
  193. package/dist/fonts/IBMPlexSans/split/woff/IBMPlexSans-ThinItalic-Pi.woff +0 -0
  194. package/dist/fonts/IBMPlexSans/split/woff/license.txt +92 -0
  195. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Bold-Cyrillic.woff2 +0 -0
  196. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Bold-Greek.woff2 +0 -0
  197. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Bold-Latin1.woff2 +0 -0
  198. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Bold-Latin2.woff2 +0 -0
  199. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Bold-Latin3.woff2 +0 -0
  200. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Bold-Pi.woff2 +0 -0
  201. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-BoldItalic-Cyrillic.woff2 +0 -0
  202. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-BoldItalic-Greek.woff2 +0 -0
  203. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-BoldItalic-Latin1.woff2 +0 -0
  204. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-BoldItalic-Latin2.woff2 +0 -0
  205. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-BoldItalic-Latin3.woff2 +0 -0
  206. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-BoldItalic-Pi.woff2 +0 -0
  207. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLight-Cyrillic.woff2 +0 -0
  208. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLight-Greek.woff2 +0 -0
  209. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLight-Latin1.woff2 +0 -0
  210. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLight-Latin2.woff2 +0 -0
  211. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLight-Latin3.woff2 +0 -0
  212. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLight-Pi.woff2 +0 -0
  213. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLightItalic-Cyrillic.woff2 +0 -0
  214. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLightItalic-Greek.woff2 +0 -0
  215. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLightItalic-Latin1.woff2 +0 -0
  216. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLightItalic-Latin2.woff2 +0 -0
  217. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLightItalic-Latin3.woff2 +0 -0
  218. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLightItalic-Pi.woff2 +0 -0
  219. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Italic-Cyrillic.woff2 +0 -0
  220. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Italic-Greek.woff2 +0 -0
  221. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Italic-Latin1.woff2 +0 -0
  222. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Italic-Latin2.woff2 +0 -0
  223. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Italic-Latin3.woff2 +0 -0
  224. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Italic-Pi.woff2 +0 -0
  225. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Light-Cyrillic.woff2 +0 -0
  226. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Light-Greek.woff2 +0 -0
  227. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Light-Latin1.woff2 +0 -0
  228. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Light-Latin2.woff2 +0 -0
  229. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Light-Latin3.woff2 +0 -0
  230. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Light-Pi.woff2 +0 -0
  231. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-LightItalic-Cyrillic.woff2 +0 -0
  232. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-LightItalic-Greek.woff2 +0 -0
  233. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-LightItalic-Latin1.woff2 +0 -0
  234. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-LightItalic-Latin2.woff2 +0 -0
  235. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-LightItalic-Latin3.woff2 +0 -0
  236. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-LightItalic-Pi.woff2 +0 -0
  237. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Medium-Cyrillic.woff2 +0 -0
  238. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Medium-Greek.woff2 +0 -0
  239. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Medium-Latin1.woff2 +0 -0
  240. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Medium-Latin2.woff2 +0 -0
  241. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Medium-Latin3.woff2 +0 -0
  242. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Medium-Pi.woff2 +0 -0
  243. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-MediumItalic-Cyrillic.woff2 +0 -0
  244. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-MediumItalic-Greek.woff2 +0 -0
  245. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-MediumItalic-Latin1.woff2 +0 -0
  246. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-MediumItalic-Latin2.woff2 +0 -0
  247. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-MediumItalic-Latin3.woff2 +0 -0
  248. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-MediumItalic-Pi.woff2 +0 -0
  249. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Regular-Cyrillic.woff2 +0 -0
  250. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Regular-Greek.woff2 +0 -0
  251. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Regular-Latin1.woff2 +0 -0
  252. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Regular-Latin2.woff2 +0 -0
  253. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Regular-Latin3.woff2 +0 -0
  254. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Regular-Pi.woff2 +0 -0
  255. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBold-Cyrillic.woff2 +0 -0
  256. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBold-Greek.woff2 +0 -0
  257. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBold-Latin1.woff2 +0 -0
  258. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBold-Latin2.woff2 +0 -0
  259. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBold-Latin3.woff2 +0 -0
  260. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBold-Pi.woff2 +0 -0
  261. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBoldItalic-Cyrillic.woff2 +0 -0
  262. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBoldItalic-Greek.woff2 +0 -0
  263. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBoldItalic-Latin1.woff2 +0 -0
  264. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBoldItalic-Latin2.woff2 +0 -0
  265. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBoldItalic-Latin3.woff2 +0 -0
  266. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBoldItalic-Pi.woff2 +0 -0
  267. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Text-Cyrillic.woff2 +0 -0
  268. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Text-Greek.woff2 +0 -0
  269. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Text-Latin1.woff2 +0 -0
  270. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Text-Latin2.woff2 +0 -0
  271. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Text-Latin3.woff2 +0 -0
  272. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Text-Pi.woff2 +0 -0
  273. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-TextItalic-Cyrillic.woff2 +0 -0
  274. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-TextItalic-Greek.woff2 +0 -0
  275. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-TextItalic-Latin1.woff2 +0 -0
  276. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-TextItalic-Latin2.woff2 +0 -0
  277. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-TextItalic-Latin3.woff2 +0 -0
  278. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-TextItalic-Pi.woff2 +0 -0
  279. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Thin-Cyrillic.woff2 +0 -0
  280. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Thin-Greek.woff2 +0 -0
  281. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Thin-Latin1.woff2 +0 -0
  282. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Thin-Latin2.woff2 +0 -0
  283. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Thin-Latin3.woff2 +0 -0
  284. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Thin-Pi.woff2 +0 -0
  285. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ThinItalic-Cyrillic.woff2 +0 -0
  286. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ThinItalic-Greek.woff2 +0 -0
  287. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ThinItalic-Latin1.woff2 +0 -0
  288. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ThinItalic-Latin2.woff2 +0 -0
  289. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ThinItalic-Latin3.woff2 +0 -0
  290. package/dist/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ThinItalic-Pi.woff2 +0 -0
  291. package/dist/fonts/IBMPlexSans/split/woff2/license.txt +92 -0
  292. package/dist/img/all-svg-icons.svg +1 -0
  293. package/dist/img/favicons/favicon-erst.png +0 -0
  294. package/dist/img/favicons/favicon2-erst.png +0 -0
  295. package/dist/img/logo-borgerdk.svg +1 -0
  296. package/dist/img/logo-header-placeholder.png +0 -0
  297. package/dist/img/logo-placeholder.png +0 -0
  298. package/dist/img/logo_virk.svg +52 -0
  299. package/dist/img/svg-icons/accessibility-new.svg +1 -0
  300. package/dist/img/svg-icons/account-circle.svg +1 -0
  301. package/dist/img/svg-icons/add-a-photo.svg +1 -0
  302. package/dist/img/svg-icons/add.svg +1 -0
  303. package/dist/img/svg-icons/agriculture.svg +1 -0
  304. package/dist/img/svg-icons/apps.svg +1 -0
  305. package/dist/img/svg-icons/arrow-back.svg +1 -0
  306. package/dist/img/svg-icons/arrow-downward.svg +1 -0
  307. package/dist/img/svg-icons/arrow-drop-down.svg +1 -0
  308. package/dist/img/svg-icons/arrow-drop-up.svg +1 -0
  309. package/dist/img/svg-icons/arrow-forward.svg +1 -0
  310. package/dist/img/svg-icons/arrow-left.svg +1 -0
  311. package/dist/img/svg-icons/arrow-right.svg +1 -0
  312. package/dist/img/svg-icons/arrow-upward.svg +1 -0
  313. package/dist/img/svg-icons/assessment.svg +1 -0
  314. package/dist/img/svg-icons/assignment.svg +1 -0
  315. package/dist/img/svg-icons/attach-file.svg +1 -0
  316. package/dist/img/svg-icons/bookmark-border.svg +1 -0
  317. package/dist/img/svg-icons/bookmarks.svg +1 -0
  318. package/dist/img/svg-icons/cached.svg +1 -0
  319. package/dist/img/svg-icons/calculator.svg +1 -0
  320. package/dist/img/svg-icons/card-account-details.svg +1 -0
  321. package/dist/img/svg-icons/card-text.svg +1 -0
  322. package/dist/img/svg-icons/chat.svg +1 -0
  323. package/dist/img/svg-icons/check-circle-white.svg +1 -0
  324. package/dist/img/svg-icons/check-circle.svg +1 -0
  325. package/dist/img/svg-icons/chevron-double-left.svg +1 -0
  326. package/dist/img/svg-icons/chevron-double-right.svg +1 -0
  327. package/dist/img/svg-icons/chevron-left.svg +1 -0
  328. package/dist/img/svg-icons/chevron-right.svg +1 -0
  329. package/dist/img/svg-icons/close.svg +1 -0
  330. package/dist/img/svg-icons/construction.svg +1 -0
  331. package/dist/img/svg-icons/contact-support.svg +1 -0
  332. package/dist/img/svg-icons/content-copy.svg +1 -0
  333. package/dist/img/svg-icons/coronavirus.svg +1 -0
  334. package/dist/img/svg-icons/create-new-folder.svg +1 -0
  335. package/dist/img/svg-icons/credit-card.svg +1 -0
  336. package/dist/img/svg-icons/database.svg +1 -0
  337. package/dist/img/svg-icons/delete.svg +1 -0
  338. package/dist/img/svg-icons/desktop-windows.svg +1 -0
  339. package/dist/img/svg-icons/domain.svg +1 -0
  340. package/dist/img/svg-icons/done.svg +1 -0
  341. package/dist/img/svg-icons/download-done.svg +1 -0
  342. package/dist/img/svg-icons/drive-eta.svg +1 -0
  343. package/dist/img/svg-icons/email.svg +1 -0
  344. package/dist/img/svg-icons/engineering.svg +1 -0
  345. package/dist/img/svg-icons/expand-less.svg +1 -0
  346. package/dist/img/svg-icons/expand-more-white.svg +1 -0
  347. package/dist/img/svg-icons/expand-more.svg +1 -0
  348. package/dist/img/svg-icons/face.svg +1 -0
  349. package/dist/img/svg-icons/feedback.svg +1 -0
  350. package/dist/img/svg-icons/file-download.svg +1 -0
  351. package/dist/img/svg-icons/file-excel.svg +1 -0
  352. package/dist/img/svg-icons/file-image.svg +1 -0
  353. package/dist/img/svg-icons/file-pdf.svg +1 -0
  354. package/dist/img/svg-icons/file-upload.svg +1 -0
  355. package/dist/img/svg-icons/file-word.svg +1 -0
  356. package/dist/img/svg-icons/first-page.svg +1 -0
  357. package/dist/img/svg-icons/flag.svg +1 -0
  358. package/dist/img/svg-icons/folder-open.svg +1 -0
  359. package/dist/img/svg-icons/folder.svg +1 -0
  360. package/dist/img/svg-icons/format-align-center.svg +1 -0
  361. package/dist/img/svg-icons/format-align-justify.svg +1 -0
  362. package/dist/img/svg-icons/format-align-left.svg +1 -0
  363. package/dist/img/svg-icons/format-align-right.svg +1 -0
  364. package/dist/img/svg-icons/format-bold.svg +1 -0
  365. package/dist/img/svg-icons/format-clear.svg +1 -0
  366. package/dist/img/svg-icons/format-color-fill.svg +1 -0
  367. package/dist/img/svg-icons/format-color-text.svg +1 -0
  368. package/dist/img/svg-icons/format-indent-decrease.svg +1 -0
  369. package/dist/img/svg-icons/format-indent-increase.svg +1 -0
  370. package/dist/img/svg-icons/format-italic.svg +1 -0
  371. package/dist/img/svg-icons/format-list-bulleted.svg +1 -0
  372. package/dist/img/svg-icons/format-list-checks.svg +1 -0
  373. package/dist/img/svg-icons/format-list-numbered.svg +1 -0
  374. package/dist/img/svg-icons/format-size.svg +1 -0
  375. package/dist/img/svg-icons/format-underlined.svg +1 -0
  376. package/dist/img/svg-icons/forum.svg +1 -0
  377. package/dist/img/svg-icons/forward.svg +1 -0
  378. package/dist/img/svg-icons/fullscreen-exit.svg +1 -0
  379. package/dist/img/svg-icons/fullscreen.svg +1 -0
  380. package/dist/img/svg-icons/grade-outline.svg +1 -0
  381. package/dist/img/svg-icons/grade.svg +1 -0
  382. package/dist/img/svg-icons/groups.svg +1 -0
  383. package/dist/img/svg-icons/headphones.svg +1 -0
  384. package/dist/img/svg-icons/help.svg +1 -0
  385. package/dist/img/svg-icons/highlight-off-white.svg +1 -0
  386. package/dist/img/svg-icons/highlight-off.svg +1 -0
  387. package/dist/img/svg-icons/home.svg +1 -0
  388. package/dist/img/svg-icons/hourglass-empty.svg +1 -0
  389. package/dist/img/svg-icons/how-to-reg.svg +1 -0
  390. package/dist/img/svg-icons/info-white.svg +56 -0
  391. package/dist/img/svg-icons/info.svg +1 -0
  392. package/dist/img/svg-icons/insert-drive-file.svg +1 -0
  393. package/dist/img/svg-icons/insert-invitation.svg +1 -0
  394. package/dist/img/svg-icons/language.svg +1 -0
  395. package/dist/img/svg-icons/laptop.svg +1 -0
  396. package/dist/img/svg-icons/last-page.svg +1 -0
  397. package/dist/img/svg-icons/link.svg +1 -0
  398. package/dist/img/svg-icons/list-alt.svg +1 -0
  399. package/dist/img/svg-icons/local-shipping.svg +1 -0
  400. package/dist/img/svg-icons/location-on.svg +1 -0
  401. package/dist/img/svg-icons/lock-open.svg +1 -0
  402. package/dist/img/svg-icons/lock.svg +1 -0
  403. package/dist/img/svg-icons/map.svg +1 -0
  404. package/dist/img/svg-icons/menu.svg +1 -0
  405. package/dist/img/svg-icons/mode.svg +1 -0
  406. package/dist/img/svg-icons/more-horiz.svg +1 -0
  407. package/dist/img/svg-icons/more-vert.svg +1 -0
  408. package/dist/img/svg-icons/mouse.svg +1 -0
  409. package/dist/img/svg-icons/note-add.svg +1 -0
  410. package/dist/img/svg-icons/notifications.svg +1 -0
  411. package/dist/img/svg-icons/open-in-new.svg +1 -0
  412. package/dist/img/svg-icons/open-with.svg +1 -0
  413. package/dist/img/svg-icons/outlined-flag.svg +1 -0
  414. package/dist/img/svg-icons/palette.svg +1 -0
  415. package/dist/img/svg-icons/payments.svg +1 -0
  416. package/dist/img/svg-icons/people-alt.svg +1 -0
  417. package/dist/img/svg-icons/person-add-alt-1.svg +1 -0
  418. package/dist/img/svg-icons/person-remove.svg +1 -0
  419. package/dist/img/svg-icons/person.svg +1 -0
  420. package/dist/img/svg-icons/phone-iphone.svg +1 -0
  421. package/dist/img/svg-icons/photo-camera.svg +1 -0
  422. package/dist/img/svg-icons/playlist-add-check.svg +1 -0
  423. package/dist/img/svg-icons/playlist-add.svg +1 -0
  424. package/dist/img/svg-icons/print.svg +1 -0
  425. package/dist/img/svg-icons/query-builder.svg +1 -0
  426. package/dist/img/svg-icons/refresh.svg +1 -0
  427. package/dist/img/svg-icons/remove.svg +1 -0
  428. package/dist/img/svg-icons/reply.svg +1 -0
  429. package/dist/img/svg-icons/report-problem.svg +1 -0
  430. package/dist/img/svg-icons/save.svg +1 -0
  431. package/dist/img/svg-icons/school.svg +1 -0
  432. package/dist/img/svg-icons/science.svg +1 -0
  433. package/dist/img/svg-icons/search.svg +1 -0
  434. package/dist/img/svg-icons/send.svg +1 -0
  435. package/dist/img/svg-icons/settings.svg +1 -0
  436. package/dist/img/svg-icons/share.svg +1 -0
  437. package/dist/img/svg-icons/shopping-cart.svg +1 -0
  438. package/dist/img/svg-icons/sort-ascending.svg +2 -0
  439. package/dist/img/svg-icons/sort-by-alpha.svg +1 -0
  440. package/dist/img/svg-icons/sort-default.svg +1 -0
  441. package/dist/img/svg-icons/sort-descending.svg +1 -0
  442. package/dist/img/svg-icons/sort-table-ascending.svg +1 -0
  443. package/dist/img/svg-icons/sort-table-descending.svg +1 -0
  444. package/dist/img/svg-icons/sort-table-none.svg +1 -0
  445. package/dist/img/svg-icons/sort.svg +1 -0
  446. package/dist/img/svg-icons/subdirectory-arrow-left.svg +1 -0
  447. package/dist/img/svg-icons/subdirectory-arrow-right.svg +1 -0
  448. package/dist/img/svg-icons/support-agent.svg +1 -0
  449. package/dist/img/svg-icons/text-format.svg +1 -0
  450. package/dist/img/svg-icons/trash-can.svg +1 -0
  451. package/dist/img/svg-icons/tune.svg +1 -0
  452. package/dist/img/svg-icons/vertical-split.svg +1 -0
  453. package/dist/img/svg-icons/videocam.svg +1 -0
  454. package/dist/img/svg-icons/view-headline.svg +1 -0
  455. package/dist/img/svg-icons/visibility-off.svg +1 -0
  456. package/dist/img/svg-icons/visibility.svg +1 -0
  457. package/dist/img/svg-icons/zoom-in.svg +1 -0
  458. package/dist/img/svg-icons/zoom-out.svg +1 -0
  459. package/dist/js/dkfds.js +7050 -0
  460. package/dist/js/dkfds.min.js +2 -0
  461. package/dist/js/dkfds.min.js.map +1 -0
  462. package/dist/scss/_dkfds-base.scss +76 -0
  463. package/dist/scss/components/_accordions.scss +162 -0
  464. package/dist/scss/components/_alerts.scss +113 -0
  465. package/dist/scss/components/_breadcrumbs.scss +62 -0
  466. package/dist/scss/components/_cards.scss +235 -0
  467. package/dist/scss/components/_cookie-message.scss +41 -0
  468. package/dist/scss/components/_date-picker.scss +391 -0
  469. package/dist/scss/components/_details.scss +61 -0
  470. package/dist/scss/components/_footer.scss +83 -0
  471. package/dist/scss/components/_header.scss +339 -0
  472. package/dist/scss/components/_language-switcher.scss +63 -0
  473. package/dist/scss/components/_modal.scss +155 -0
  474. package/dist/scss/components/_navigation.scss +544 -0
  475. package/dist/scss/components/_overflow-menu.scss +234 -0
  476. package/dist/scss/components/_page-navigation.scss +12 -0
  477. package/dist/scss/components/_pagination.scss +136 -0
  478. package/dist/scss/components/_search.scss +33 -0
  479. package/dist/scss/components/_sidenav.scss +205 -0
  480. package/dist/scss/components/_skipnav.scss +31 -0
  481. package/dist/scss/components/_tabnav.scss +122 -0
  482. package/dist/scss/components/_toast.scss +105 -0
  483. package/dist/scss/components/_tooltip.scss +72 -0
  484. package/dist/scss/core/_base.scss +28 -0
  485. package/dist/scss/core/_fonts.scss +139 -0
  486. package/dist/scss/core/_functions.scss +593 -0
  487. package/dist/scss/core/_grid.scss +118 -0
  488. package/dist/scss/core/_print.scss +187 -0
  489. package/dist/scss/core/_properties.scss +145 -0
  490. package/dist/scss/core/_system-tokens.scss +403 -0
  491. package/dist/scss/core/_typography.scss +500 -0
  492. package/dist/scss/core/_variables.scss +18 -0
  493. package/dist/scss/core/colors/_blue.scss +8 -0
  494. package/dist/scss/core/colors/_data-blue.scss +13 -0
  495. package/dist/scss/core/colors/_data-green-blue.scss +13 -0
  496. package/dist/scss/core/colors/_data-green.scss +13 -0
  497. package/dist/scss/core/colors/_data-orange.scss +13 -0
  498. package/dist/scss/core/colors/_data-pink-violet.scss +13 -0
  499. package/dist/scss/core/colors/_data-violet.scss +13 -0
  500. package/dist/scss/core/colors/_data-yellow-red.scss +13 -0
  501. package/dist/scss/core/colors/_gray.scss +11 -0
  502. package/dist/scss/core/colors/_green.scss +6 -0
  503. package/dist/scss/core/colors/_orange.scss +7 -0
  504. package/dist/scss/core/colors/_purple.scss +6 -0
  505. package/dist/scss/core/colors/_red.scss +6 -0
  506. package/dist/scss/core/mixins/_add-background-svg.scss +7 -0
  507. package/dist/scss/core/mixins/_breakpoints.scss +119 -0
  508. package/dist/scss/core/mixins/_grid-mixins.scss +42 -0
  509. package/dist/scss/core/mixins/_mixins.scss +126 -0
  510. package/dist/scss/core/utilities/_background.scss +15 -0
  511. package/dist/scss/core/utilities/_display.scss +26 -0
  512. package/dist/scss/core/utilities/_flex.scss +43 -0
  513. package/dist/scss/core/utilities/_position.scss +35 -0
  514. package/dist/scss/core/utilities/_spacing.scss +50 -0
  515. package/dist/scss/core/utilities/_text-color.scss +5 -0
  516. package/dist/scss/core/utilities/_textalign.scss +13 -0
  517. package/dist/scss/core/utilities/_width.scss +26 -0
  518. package/dist/scss/dkfds-borgerdk.scss +4 -0
  519. package/dist/scss/dkfds-virkdk.scss +4 -0
  520. package/dist/scss/dkfds.scss +4 -0
  521. package/dist/scss/elements/_badge.scss +36 -0
  522. package/dist/scss/elements/_buttons.scss +280 -0
  523. package/dist/scss/elements/_collapse.scss +17 -0
  524. package/dist/scss/elements/_embed.scss +27 -0
  525. package/dist/scss/elements/_figure.scss +7 -0
  526. package/dist/scss/elements/_forms.scss +93 -0
  527. package/dist/scss/elements/_hr.scss +5 -0
  528. package/dist/scss/elements/_icons.scss +204 -0
  529. package/dist/scss/elements/_inputs.scss +589 -0
  530. package/dist/scss/elements/_list.scss +83 -0
  531. package/dist/scss/elements/_page.scss +34 -0
  532. package/dist/scss/elements/_section.scss +3 -0
  533. package/dist/scss/elements/_spinner.scss +76 -0
  534. package/dist/scss/elements/_table.scss +283 -0
  535. package/dist/scss/elements/_tags.scss +64 -0
  536. package/dist/scss/elements/_toggle.scss +113 -0
  537. package/dist/scss/lib/_normalize.scss +349 -0
  538. package/dist/scss/settings/_settings-color.scss +46 -0
  539. package/dist/scss/settings/_settings-components.scss +415 -0
  540. package/dist/scss/settings/_settings-general.scss +43 -0
  541. package/dist/scss/settings/_settings-typography.scss +212 -0
  542. package/dist/scss/themes/_borgerdk.scss +23 -0
  543. package/dist/scss/themes/_virkdk.scss +21 -0
  544. package/package.json +58 -0
  545. package/src/components/accordion/accordion.njk +43 -0
  546. package/src/components/accordion/accordion.yaml +62 -0
  547. package/src/components/alerts/alerts.njk +19 -0
  548. package/src/components/alerts/alerts.yaml +41 -0
  549. package/src/components/badge/badges.njk +3 -0
  550. package/src/components/badge/badges.yaml +9 -0
  551. package/src/components/breadcrumbs/breadcrumbs.njk +15 -0
  552. package/src/components/breadcrumbs/breadcrumbs.yaml +45 -0
  553. package/src/components/buttons/buttons.njk +11 -0
  554. package/src/components/buttons/buttons.yaml +25 -0
  555. package/src/components/cards/cards.njk +56 -0
  556. package/src/components/cards/cards.yaml +39 -0
  557. package/src/components/cookie-message/cookie-message.njk +20 -0
  558. package/src/components/cookie-message/cookie-message.yaml +17 -0
  559. package/src/components/details/details.njk +8 -0
  560. package/src/components/details/details.yaml +9 -0
  561. package/src/components/footers/footer.njk +40 -0
  562. package/src/components/footers/footer.yaml +66 -0
  563. package/src/components/form/controls/checkbox.njk +4 -0
  564. package/src/components/form/controls/checkbox.yaml +41 -0
  565. package/src/components/form/controls/date-input.njk +30 -0
  566. package/src/components/form/controls/date-input.yaml +81 -0
  567. package/src/components/form/controls/date-picker.njk +13 -0
  568. package/src/components/form/controls/date-picker.yaml +62 -0
  569. package/src/components/form/controls/errormessage.njk +5 -0
  570. package/src/components/form/controls/errormessage.yaml +9 -0
  571. package/src/components/form/controls/helptext.njk +7 -0
  572. package/src/components/form/controls/helptext.yaml +9 -0
  573. package/src/components/form/controls/label.njk +8 -0
  574. package/src/components/form/controls/label.yaml +28 -0
  575. package/src/components/form/controls/radiobutton.njk +7 -0
  576. package/src/components/form/controls/radiobutton.yaml +54 -0
  577. package/src/components/form/controls/select.njk +19 -0
  578. package/src/components/form/controls/select.yaml +73 -0
  579. package/src/components/form/controls/text-area.njk +16 -0
  580. package/src/components/form/controls/text-area.yaml +74 -0
  581. package/src/components/form/controls/text-input.njk +29 -0
  582. package/src/components/form/controls/text-input.yaml +89 -0
  583. package/src/components/header/header.njk +46 -0
  584. package/src/components/header/header.yaml +101 -0
  585. package/src/components/icons/base-svg.njk +163 -0
  586. package/src/components/icons/icons--svg.njk +1 -0
  587. package/src/components/icons/icons--svg.yaml +25 -0
  588. package/src/components/icons/icons.njk +3 -0
  589. package/src/components/icons/icons.yaml +13 -0
  590. package/src/components/labels/labels.njk +3 -0
  591. package/src/components/labels/labels.yaml +9 -0
  592. package/src/components/language-switcher/language-switcher.njk +11 -0
  593. package/src/components/language-switcher/language-switcher.yaml +30 -0
  594. package/src/components/modal/modal.njk +21 -0
  595. package/src/components/modal/modal.yaml +25 -0
  596. package/src/components/overflow-menu/overflow-menu-sort.njk +15 -0
  597. package/src/components/overflow-menu/overflow-menu-sort.yaml +37 -0
  598. package/src/components/overflow-menu/overflow-menu.njk +13 -0
  599. package/src/components/overflow-menu/overflow-menu.yaml +33 -0
  600. package/src/components/pagination/pagination.njk +78 -0
  601. package/src/components/pagination/pagination.yaml +25 -0
  602. package/src/components/side-navigation/sidenav.njk +11 -0
  603. package/src/components/side-navigation/sidenav.yaml +41 -0
  604. package/src/components/side-navigation/stepguide.njk +23 -0
  605. package/src/components/side-navigation/stepguide.yaml +37 -0
  606. package/src/components/spinner/spinner.njk +4 -0
  607. package/src/components/spinner/spinner.yaml +5 -0
  608. package/src/components/table/table.njk +56 -0
  609. package/src/components/table/table.yaml +42 -0
  610. package/src/components/tabnav/tabnav.njk +19 -0
  611. package/src/components/tabnav/tabnav.yaml +33 -0
  612. package/src/components/tags/tags.njk +4 -0
  613. package/src/components/tags/tags.yaml +18 -0
  614. package/src/components/toast/toast.njk +10 -0
  615. package/src/components/toast/toast.yaml +17 -0
  616. package/src/components/toggle/toggle.njk +4 -0
  617. package/src/components/toggle/toggle.yaml +38 -0
  618. package/src/components/type/links.njk +3 -0
  619. package/src/components/type/lists.njk +25 -0
  620. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-Bold.eot +0 -0
  621. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-BoldItalic.eot +0 -0
  622. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-ExtraLight.eot +0 -0
  623. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-ExtraLightItalic.eot +0 -0
  624. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-Italic.eot +0 -0
  625. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-Light.eot +0 -0
  626. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-LightItalic.eot +0 -0
  627. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-Medium.eot +0 -0
  628. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-MediumItalic.eot +0 -0
  629. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-Regular.eot +0 -0
  630. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-SemiBold.eot +0 -0
  631. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-SemiBoldItalic.eot +0 -0
  632. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-Text.eot +0 -0
  633. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-TextItalic.eot +0 -0
  634. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-Thin.eot +0 -0
  635. package/src/fonts/IBMPlexSans/complete/eot/IBMPlexSans-ThinItalic.eot +0 -0
  636. package/src/fonts/IBMPlexSans/complete/eot/license.txt +92 -0
  637. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-Bold.otf +0 -0
  638. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-BoldItalic.otf +0 -0
  639. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-ExtraLight.otf +0 -0
  640. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-ExtraLightItalic.otf +0 -0
  641. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-Italic.otf +0 -0
  642. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-Light.otf +0 -0
  643. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-LightItalic.otf +0 -0
  644. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-Medium.otf +0 -0
  645. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-MediumItalic.otf +0 -0
  646. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-Regular.otf +0 -0
  647. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-SemiBold.otf +0 -0
  648. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-SemiBoldItalic.otf +0 -0
  649. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-Text.otf +0 -0
  650. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-TextItalic.otf +0 -0
  651. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-Thin.otf +0 -0
  652. package/src/fonts/IBMPlexSans/complete/otf/IBMPlexSans-ThinItalic.otf +0 -0
  653. package/src/fonts/IBMPlexSans/complete/otf/license.txt +92 -0
  654. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-Bold.ttf +0 -0
  655. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-BoldItalic.ttf +0 -0
  656. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-ExtraLight.ttf +0 -0
  657. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-ExtraLightItalic.ttf +0 -0
  658. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-Italic.ttf +0 -0
  659. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-Light.ttf +0 -0
  660. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-LightItalic.ttf +0 -0
  661. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-Medium.ttf +0 -0
  662. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-MediumItalic.ttf +0 -0
  663. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-Regular.ttf +0 -0
  664. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-SemiBold.ttf +0 -0
  665. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-SemiBoldItalic.ttf +0 -0
  666. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-Text.ttf +0 -0
  667. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-TextItalic.ttf +0 -0
  668. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-Thin.ttf +0 -0
  669. package/src/fonts/IBMPlexSans/complete/ttf/IBMPlexSans-ThinItalic.ttf +0 -0
  670. package/src/fonts/IBMPlexSans/complete/ttf/license.txt +92 -0
  671. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-Bold.woff +0 -0
  672. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-BoldItalic.woff +0 -0
  673. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-ExtraLight.woff +0 -0
  674. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-ExtraLightItalic.woff +0 -0
  675. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-Italic.woff +0 -0
  676. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-Light.woff +0 -0
  677. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-LightItalic.woff +0 -0
  678. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-Medium.woff +0 -0
  679. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-MediumItalic.woff +0 -0
  680. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-Regular.woff +0 -0
  681. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-SemiBold.woff +0 -0
  682. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-SemiBoldItalic.woff +0 -0
  683. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-Text.woff +0 -0
  684. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-TextItalic.woff +0 -0
  685. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-Thin.woff +0 -0
  686. package/src/fonts/IBMPlexSans/complete/woff/IBMPlexSans-ThinItalic.woff +0 -0
  687. package/src/fonts/IBMPlexSans/complete/woff/license.txt +92 -0
  688. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-Bold.woff2 +0 -0
  689. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-BoldItalic.woff2 +0 -0
  690. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-ExtraLight.woff2 +0 -0
  691. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-ExtraLightItalic.woff2 +0 -0
  692. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-Italic.woff2 +0 -0
  693. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-Light.woff2 +0 -0
  694. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-LightItalic.woff2 +0 -0
  695. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-Medium.woff2 +0 -0
  696. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-MediumItalic.woff2 +0 -0
  697. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-Regular.woff2 +0 -0
  698. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-SemiBold.woff2 +0 -0
  699. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-SemiBoldItalic.woff2 +0 -0
  700. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-Text.woff2 +0 -0
  701. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-TextItalic.woff2 +0 -0
  702. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-Thin.woff2 +0 -0
  703. package/src/fonts/IBMPlexSans/complete/woff2/IBMPlexSans-ThinItalic.woff2 +0 -0
  704. package/src/fonts/IBMPlexSans/complete/woff2/license.txt +92 -0
  705. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Bold-Cyrillic.woff +0 -0
  706. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Bold-Greek.woff +0 -0
  707. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Bold-Latin1.woff +0 -0
  708. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Bold-Latin2.woff +0 -0
  709. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Bold-Latin3.woff +0 -0
  710. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Bold-Pi.woff +0 -0
  711. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-BoldItalic-Cyrillic.woff +0 -0
  712. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-BoldItalic-Greek.woff +0 -0
  713. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-BoldItalic-Latin1.woff +0 -0
  714. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-BoldItalic-Latin2.woff +0 -0
  715. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-BoldItalic-Latin3.woff +0 -0
  716. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-BoldItalic-Pi.woff +0 -0
  717. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLight-Cyrillic.woff +0 -0
  718. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLight-Greek.woff +0 -0
  719. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLight-Latin1.woff +0 -0
  720. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLight-Latin2.woff +0 -0
  721. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLight-Latin3.woff +0 -0
  722. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLight-Pi.woff +0 -0
  723. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLightItalic-Cyrillic.woff +0 -0
  724. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLightItalic-Greek.woff +0 -0
  725. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLightItalic-Latin1.woff +0 -0
  726. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLightItalic-Latin2.woff +0 -0
  727. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLightItalic-Latin3.woff +0 -0
  728. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ExtraLightItalic-Pi.woff +0 -0
  729. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Italic-Cyrillic.woff +0 -0
  730. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Italic-Greek.woff +0 -0
  731. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Italic-Latin1.woff +0 -0
  732. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Italic-Latin2.woff +0 -0
  733. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Italic-Latin3.woff +0 -0
  734. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Italic-Pi.woff +0 -0
  735. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Light-Cyrillic.woff +0 -0
  736. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Light-Greek.woff +0 -0
  737. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Light-Latin1.woff +0 -0
  738. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Light-Latin2.woff +0 -0
  739. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Light-Latin3.woff +0 -0
  740. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Light-Pi.woff +0 -0
  741. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-LightItalic-Cyrillic.woff +0 -0
  742. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-LightItalic-Greek.woff +0 -0
  743. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-LightItalic-Latin1.woff +0 -0
  744. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-LightItalic-Latin2.woff +0 -0
  745. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-LightItalic-Latin3.woff +0 -0
  746. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-LightItalic-Pi.woff +0 -0
  747. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Medium-Cyrillic.woff +0 -0
  748. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Medium-Greek.woff +0 -0
  749. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Medium-Latin1.woff +0 -0
  750. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Medium-Latin2.woff +0 -0
  751. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Medium-Latin3.woff +0 -0
  752. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Medium-Pi.woff +0 -0
  753. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-MediumItalic-Cyrillic.woff +0 -0
  754. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-MediumItalic-Greek.woff +0 -0
  755. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-MediumItalic-Latin1.woff +0 -0
  756. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-MediumItalic-Latin2.woff +0 -0
  757. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-MediumItalic-Latin3.woff +0 -0
  758. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-MediumItalic-Pi.woff +0 -0
  759. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Regular-Cyrillic.woff +0 -0
  760. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Regular-Greek.woff +0 -0
  761. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Regular-Latin1.woff +0 -0
  762. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Regular-Latin2.woff +0 -0
  763. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Regular-Latin3.woff +0 -0
  764. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Regular-Pi.woff +0 -0
  765. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBold-Cyrillic.woff +0 -0
  766. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBold-Greek.woff +0 -0
  767. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBold-Latin1.woff +0 -0
  768. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBold-Latin2.woff +0 -0
  769. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBold-Latin3.woff +0 -0
  770. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBold-Pi.woff +0 -0
  771. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBoldItalic-Cyrillic.woff +0 -0
  772. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBoldItalic-Greek.woff +0 -0
  773. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBoldItalic-Latin1.woff +0 -0
  774. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBoldItalic-Latin2.woff +0 -0
  775. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBoldItalic-Latin3.woff +0 -0
  776. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-SemiBoldItalic-Pi.woff +0 -0
  777. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Text-Cyrillic.woff +0 -0
  778. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Text-Greek.woff +0 -0
  779. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Text-Latin1.woff +0 -0
  780. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Text-Latin2.woff +0 -0
  781. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Text-Latin3.woff +0 -0
  782. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Text-Pi.woff +0 -0
  783. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-TextItalic-Cyrillic.woff +0 -0
  784. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-TextItalic-Greek.woff +0 -0
  785. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-TextItalic-Latin1.woff +0 -0
  786. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-TextItalic-Latin2.woff +0 -0
  787. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-TextItalic-Latin3.woff +0 -0
  788. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-TextItalic-Pi.woff +0 -0
  789. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Thin-Cyrillic.woff +0 -0
  790. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Thin-Greek.woff +0 -0
  791. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Thin-Latin1.woff +0 -0
  792. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Thin-Latin2.woff +0 -0
  793. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Thin-Latin3.woff +0 -0
  794. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-Thin-Pi.woff +0 -0
  795. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ThinItalic-Cyrillic.woff +0 -0
  796. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ThinItalic-Greek.woff +0 -0
  797. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ThinItalic-Latin1.woff +0 -0
  798. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ThinItalic-Latin2.woff +0 -0
  799. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ThinItalic-Latin3.woff +0 -0
  800. package/src/fonts/IBMPlexSans/split/woff/IBMPlexSans-ThinItalic-Pi.woff +0 -0
  801. package/src/fonts/IBMPlexSans/split/woff/license.txt +92 -0
  802. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Bold-Cyrillic.woff2 +0 -0
  803. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Bold-Greek.woff2 +0 -0
  804. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Bold-Latin1.woff2 +0 -0
  805. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Bold-Latin2.woff2 +0 -0
  806. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Bold-Latin3.woff2 +0 -0
  807. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Bold-Pi.woff2 +0 -0
  808. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-BoldItalic-Cyrillic.woff2 +0 -0
  809. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-BoldItalic-Greek.woff2 +0 -0
  810. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-BoldItalic-Latin1.woff2 +0 -0
  811. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-BoldItalic-Latin2.woff2 +0 -0
  812. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-BoldItalic-Latin3.woff2 +0 -0
  813. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-BoldItalic-Pi.woff2 +0 -0
  814. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLight-Cyrillic.woff2 +0 -0
  815. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLight-Greek.woff2 +0 -0
  816. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLight-Latin1.woff2 +0 -0
  817. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLight-Latin2.woff2 +0 -0
  818. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLight-Latin3.woff2 +0 -0
  819. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLight-Pi.woff2 +0 -0
  820. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLightItalic-Cyrillic.woff2 +0 -0
  821. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLightItalic-Greek.woff2 +0 -0
  822. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLightItalic-Latin1.woff2 +0 -0
  823. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLightItalic-Latin2.woff2 +0 -0
  824. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLightItalic-Latin3.woff2 +0 -0
  825. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ExtraLightItalic-Pi.woff2 +0 -0
  826. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Italic-Cyrillic.woff2 +0 -0
  827. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Italic-Greek.woff2 +0 -0
  828. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Italic-Latin1.woff2 +0 -0
  829. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Italic-Latin2.woff2 +0 -0
  830. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Italic-Latin3.woff2 +0 -0
  831. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Italic-Pi.woff2 +0 -0
  832. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Light-Cyrillic.woff2 +0 -0
  833. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Light-Greek.woff2 +0 -0
  834. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Light-Latin1.woff2 +0 -0
  835. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Light-Latin2.woff2 +0 -0
  836. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Light-Latin3.woff2 +0 -0
  837. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Light-Pi.woff2 +0 -0
  838. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-LightItalic-Cyrillic.woff2 +0 -0
  839. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-LightItalic-Greek.woff2 +0 -0
  840. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-LightItalic-Latin1.woff2 +0 -0
  841. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-LightItalic-Latin2.woff2 +0 -0
  842. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-LightItalic-Latin3.woff2 +0 -0
  843. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-LightItalic-Pi.woff2 +0 -0
  844. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Medium-Cyrillic.woff2 +0 -0
  845. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Medium-Greek.woff2 +0 -0
  846. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Medium-Latin1.woff2 +0 -0
  847. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Medium-Latin2.woff2 +0 -0
  848. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Medium-Latin3.woff2 +0 -0
  849. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Medium-Pi.woff2 +0 -0
  850. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-MediumItalic-Cyrillic.woff2 +0 -0
  851. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-MediumItalic-Greek.woff2 +0 -0
  852. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-MediumItalic-Latin1.woff2 +0 -0
  853. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-MediumItalic-Latin2.woff2 +0 -0
  854. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-MediumItalic-Latin3.woff2 +0 -0
  855. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-MediumItalic-Pi.woff2 +0 -0
  856. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Regular-Cyrillic.woff2 +0 -0
  857. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Regular-Greek.woff2 +0 -0
  858. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Regular-Latin1.woff2 +0 -0
  859. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Regular-Latin2.woff2 +0 -0
  860. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Regular-Latin3.woff2 +0 -0
  861. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Regular-Pi.woff2 +0 -0
  862. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBold-Cyrillic.woff2 +0 -0
  863. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBold-Greek.woff2 +0 -0
  864. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBold-Latin1.woff2 +0 -0
  865. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBold-Latin2.woff2 +0 -0
  866. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBold-Latin3.woff2 +0 -0
  867. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBold-Pi.woff2 +0 -0
  868. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBoldItalic-Cyrillic.woff2 +0 -0
  869. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBoldItalic-Greek.woff2 +0 -0
  870. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBoldItalic-Latin1.woff2 +0 -0
  871. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBoldItalic-Latin2.woff2 +0 -0
  872. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBoldItalic-Latin3.woff2 +0 -0
  873. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-SemiBoldItalic-Pi.woff2 +0 -0
  874. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Text-Cyrillic.woff2 +0 -0
  875. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Text-Greek.woff2 +0 -0
  876. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Text-Latin1.woff2 +0 -0
  877. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Text-Latin2.woff2 +0 -0
  878. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Text-Latin3.woff2 +0 -0
  879. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Text-Pi.woff2 +0 -0
  880. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-TextItalic-Cyrillic.woff2 +0 -0
  881. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-TextItalic-Greek.woff2 +0 -0
  882. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-TextItalic-Latin1.woff2 +0 -0
  883. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-TextItalic-Latin2.woff2 +0 -0
  884. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-TextItalic-Latin3.woff2 +0 -0
  885. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-TextItalic-Pi.woff2 +0 -0
  886. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Thin-Cyrillic.woff2 +0 -0
  887. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Thin-Greek.woff2 +0 -0
  888. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Thin-Latin1.woff2 +0 -0
  889. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Thin-Latin2.woff2 +0 -0
  890. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Thin-Latin3.woff2 +0 -0
  891. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-Thin-Pi.woff2 +0 -0
  892. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ThinItalic-Cyrillic.woff2 +0 -0
  893. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ThinItalic-Greek.woff2 +0 -0
  894. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ThinItalic-Latin1.woff2 +0 -0
  895. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ThinItalic-Latin2.woff2 +0 -0
  896. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ThinItalic-Latin3.woff2 +0 -0
  897. package/src/fonts/IBMPlexSans/split/woff2/IBMPlexSans-ThinItalic-Pi.woff2 +0 -0
  898. package/src/fonts/IBMPlexSans/split/woff2/license.txt +92 -0
  899. package/src/img/all-svg-icons.svg +1 -0
  900. package/src/img/favicons/favicon-erst.png +0 -0
  901. package/src/img/favicons/favicon2-erst.png +0 -0
  902. package/src/img/logo-borgerdk.svg +1 -0
  903. package/src/img/logo-header-placeholder.png +0 -0
  904. package/src/img/logo-placeholder.png +0 -0
  905. package/src/img/logo_virk.svg +52 -0
  906. package/src/img/svg-icons/accessibility-new.svg +1 -0
  907. package/src/img/svg-icons/account-circle.svg +1 -0
  908. package/src/img/svg-icons/add-a-photo.svg +1 -0
  909. package/src/img/svg-icons/add.svg +1 -0
  910. package/src/img/svg-icons/agriculture.svg +1 -0
  911. package/src/img/svg-icons/apps.svg +1 -0
  912. package/src/img/svg-icons/arrow-back.svg +1 -0
  913. package/src/img/svg-icons/arrow-downward.svg +1 -0
  914. package/src/img/svg-icons/arrow-drop-down.svg +1 -0
  915. package/src/img/svg-icons/arrow-drop-up.svg +1 -0
  916. package/src/img/svg-icons/arrow-forward.svg +1 -0
  917. package/src/img/svg-icons/arrow-left.svg +1 -0
  918. package/src/img/svg-icons/arrow-right.svg +1 -0
  919. package/src/img/svg-icons/arrow-upward.svg +1 -0
  920. package/src/img/svg-icons/assessment.svg +1 -0
  921. package/src/img/svg-icons/assignment.svg +1 -0
  922. package/src/img/svg-icons/attach-file.svg +1 -0
  923. package/src/img/svg-icons/bookmark-border.svg +1 -0
  924. package/src/img/svg-icons/bookmarks.svg +1 -0
  925. package/src/img/svg-icons/cached.svg +1 -0
  926. package/src/img/svg-icons/calculator.svg +1 -0
  927. package/src/img/svg-icons/card-account-details.svg +1 -0
  928. package/src/img/svg-icons/card-text.svg +1 -0
  929. package/src/img/svg-icons/chat.svg +1 -0
  930. package/src/img/svg-icons/check-circle-white.svg +1 -0
  931. package/src/img/svg-icons/check-circle.svg +1 -0
  932. package/src/img/svg-icons/chevron-double-left.svg +1 -0
  933. package/src/img/svg-icons/chevron-double-right.svg +1 -0
  934. package/src/img/svg-icons/chevron-left.svg +1 -0
  935. package/src/img/svg-icons/chevron-right.svg +1 -0
  936. package/src/img/svg-icons/close.svg +1 -0
  937. package/src/img/svg-icons/construction.svg +1 -0
  938. package/src/img/svg-icons/contact-support.svg +1 -0
  939. package/src/img/svg-icons/content-copy.svg +1 -0
  940. package/src/img/svg-icons/coronavirus.svg +1 -0
  941. package/src/img/svg-icons/create-new-folder.svg +1 -0
  942. package/src/img/svg-icons/credit-card.svg +1 -0
  943. package/src/img/svg-icons/database.svg +1 -0
  944. package/src/img/svg-icons/delete.svg +1 -0
  945. package/src/img/svg-icons/desktop-windows.svg +1 -0
  946. package/src/img/svg-icons/domain.svg +1 -0
  947. package/src/img/svg-icons/done.svg +1 -0
  948. package/src/img/svg-icons/download-done.svg +1 -0
  949. package/src/img/svg-icons/drive-eta.svg +1 -0
  950. package/src/img/svg-icons/email.svg +1 -0
  951. package/src/img/svg-icons/engineering.svg +1 -0
  952. package/src/img/svg-icons/expand-less.svg +1 -0
  953. package/src/img/svg-icons/expand-more-white.svg +1 -0
  954. package/src/img/svg-icons/expand-more.svg +1 -0
  955. package/src/img/svg-icons/face.svg +1 -0
  956. package/src/img/svg-icons/feedback.svg +1 -0
  957. package/src/img/svg-icons/file-download.svg +1 -0
  958. package/src/img/svg-icons/file-excel.svg +1 -0
  959. package/src/img/svg-icons/file-image.svg +1 -0
  960. package/src/img/svg-icons/file-pdf.svg +1 -0
  961. package/src/img/svg-icons/file-upload.svg +1 -0
  962. package/src/img/svg-icons/file-word.svg +1 -0
  963. package/src/img/svg-icons/first-page.svg +1 -0
  964. package/src/img/svg-icons/flag.svg +1 -0
  965. package/src/img/svg-icons/folder-open.svg +1 -0
  966. package/src/img/svg-icons/folder.svg +1 -0
  967. package/src/img/svg-icons/format-align-center.svg +1 -0
  968. package/src/img/svg-icons/format-align-justify.svg +1 -0
  969. package/src/img/svg-icons/format-align-left.svg +1 -0
  970. package/src/img/svg-icons/format-align-right.svg +1 -0
  971. package/src/img/svg-icons/format-bold.svg +1 -0
  972. package/src/img/svg-icons/format-clear.svg +1 -0
  973. package/src/img/svg-icons/format-color-fill.svg +1 -0
  974. package/src/img/svg-icons/format-color-text.svg +1 -0
  975. package/src/img/svg-icons/format-indent-decrease.svg +1 -0
  976. package/src/img/svg-icons/format-indent-increase.svg +1 -0
  977. package/src/img/svg-icons/format-italic.svg +1 -0
  978. package/src/img/svg-icons/format-list-bulleted.svg +1 -0
  979. package/src/img/svg-icons/format-list-checks.svg +1 -0
  980. package/src/img/svg-icons/format-list-numbered.svg +1 -0
  981. package/src/img/svg-icons/format-size.svg +1 -0
  982. package/src/img/svg-icons/format-underlined.svg +1 -0
  983. package/src/img/svg-icons/forum.svg +1 -0
  984. package/src/img/svg-icons/forward.svg +1 -0
  985. package/src/img/svg-icons/fullscreen-exit.svg +1 -0
  986. package/src/img/svg-icons/fullscreen.svg +1 -0
  987. package/src/img/svg-icons/grade-outline.svg +1 -0
  988. package/src/img/svg-icons/grade.svg +1 -0
  989. package/src/img/svg-icons/groups.svg +1 -0
  990. package/src/img/svg-icons/headphones.svg +1 -0
  991. package/src/img/svg-icons/help.svg +1 -0
  992. package/src/img/svg-icons/highlight-off-white.svg +1 -0
  993. package/src/img/svg-icons/highlight-off.svg +1 -0
  994. package/src/img/svg-icons/home.svg +1 -0
  995. package/src/img/svg-icons/hourglass-empty.svg +1 -0
  996. package/src/img/svg-icons/how-to-reg.svg +1 -0
  997. package/src/img/svg-icons/info-white.svg +56 -0
  998. package/src/img/svg-icons/info.svg +1 -0
  999. package/src/img/svg-icons/insert-drive-file.svg +1 -0
  1000. package/src/img/svg-icons/insert-invitation.svg +1 -0
  1001. package/src/img/svg-icons/language.svg +1 -0
  1002. package/src/img/svg-icons/laptop.svg +1 -0
  1003. package/src/img/svg-icons/last-page.svg +1 -0
  1004. package/src/img/svg-icons/link.svg +1 -0
  1005. package/src/img/svg-icons/list-alt.svg +1 -0
  1006. package/src/img/svg-icons/local-shipping.svg +1 -0
  1007. package/src/img/svg-icons/location-on.svg +1 -0
  1008. package/src/img/svg-icons/lock-open.svg +1 -0
  1009. package/src/img/svg-icons/lock.svg +1 -0
  1010. package/src/img/svg-icons/map.svg +1 -0
  1011. package/src/img/svg-icons/menu.svg +1 -0
  1012. package/src/img/svg-icons/mode.svg +1 -0
  1013. package/src/img/svg-icons/more-horiz.svg +1 -0
  1014. package/src/img/svg-icons/more-vert.svg +1 -0
  1015. package/src/img/svg-icons/mouse.svg +1 -0
  1016. package/src/img/svg-icons/note-add.svg +1 -0
  1017. package/src/img/svg-icons/notifications.svg +1 -0
  1018. package/src/img/svg-icons/open-in-new.svg +1 -0
  1019. package/src/img/svg-icons/open-with.svg +1 -0
  1020. package/src/img/svg-icons/outlined-flag.svg +1 -0
  1021. package/src/img/svg-icons/palette.svg +1 -0
  1022. package/src/img/svg-icons/payments.svg +1 -0
  1023. package/src/img/svg-icons/people-alt.svg +1 -0
  1024. package/src/img/svg-icons/person-add-alt-1.svg +1 -0
  1025. package/src/img/svg-icons/person-remove.svg +1 -0
  1026. package/src/img/svg-icons/person.svg +1 -0
  1027. package/src/img/svg-icons/phone-iphone.svg +1 -0
  1028. package/src/img/svg-icons/photo-camera.svg +1 -0
  1029. package/src/img/svg-icons/playlist-add-check.svg +1 -0
  1030. package/src/img/svg-icons/playlist-add.svg +1 -0
  1031. package/src/img/svg-icons/print.svg +1 -0
  1032. package/src/img/svg-icons/query-builder.svg +1 -0
  1033. package/src/img/svg-icons/refresh.svg +1 -0
  1034. package/src/img/svg-icons/remove.svg +1 -0
  1035. package/src/img/svg-icons/reply.svg +1 -0
  1036. package/src/img/svg-icons/report-problem.svg +1 -0
  1037. package/src/img/svg-icons/save.svg +1 -0
  1038. package/src/img/svg-icons/school.svg +1 -0
  1039. package/src/img/svg-icons/science.svg +1 -0
  1040. package/src/img/svg-icons/search.svg +1 -0
  1041. package/src/img/svg-icons/send.svg +1 -0
  1042. package/src/img/svg-icons/settings.svg +1 -0
  1043. package/src/img/svg-icons/share.svg +1 -0
  1044. package/src/img/svg-icons/shopping-cart.svg +1 -0
  1045. package/src/img/svg-icons/sort-ascending.svg +2 -0
  1046. package/src/img/svg-icons/sort-by-alpha.svg +1 -0
  1047. package/src/img/svg-icons/sort-default.svg +1 -0
  1048. package/src/img/svg-icons/sort-descending.svg +1 -0
  1049. package/src/img/svg-icons/sort-table-ascending.svg +1 -0
  1050. package/src/img/svg-icons/sort-table-descending.svg +1 -0
  1051. package/src/img/svg-icons/sort-table-none.svg +1 -0
  1052. package/src/img/svg-icons/sort.svg +1 -0
  1053. package/src/img/svg-icons/subdirectory-arrow-left.svg +1 -0
  1054. package/src/img/svg-icons/subdirectory-arrow-right.svg +1 -0
  1055. package/src/img/svg-icons/support-agent.svg +1 -0
  1056. package/src/img/svg-icons/text-format.svg +1 -0
  1057. package/src/img/svg-icons/trash-can.svg +1 -0
  1058. package/src/img/svg-icons/tune.svg +1 -0
  1059. package/src/img/svg-icons/vertical-split.svg +1 -0
  1060. package/src/img/svg-icons/videocam.svg +1 -0
  1061. package/src/img/svg-icons/view-headline.svg +1 -0
  1062. package/src/img/svg-icons/visibility-off.svg +1 -0
  1063. package/src/img/svg-icons/visibility.svg +1 -0
  1064. package/src/img/svg-icons/zoom-in.svg +1 -0
  1065. package/src/img/svg-icons/zoom-out.svg +1 -0
  1066. package/src/js/components/accordion.js +164 -0
  1067. package/src/js/components/alert.js +26 -0
  1068. package/src/js/components/checkbox-toggle-content.js +71 -0
  1069. package/src/js/components/date-picker.js +2163 -0
  1070. package/src/js/components/dropdown-sort.js +62 -0
  1071. package/src/js/components/dropdown.js +311 -0
  1072. package/src/js/components/error-summary.js +150 -0
  1073. package/src/js/components/modal.js +160 -0
  1074. package/src/js/components/navigation.js +198 -0
  1075. package/src/js/components/radio-toggle-content.js +82 -0
  1076. package/src/js/components/regex-input-mask.js +68 -0
  1077. package/src/js/components/selectable-table.js +144 -0
  1078. package/src/js/components/table.js +43 -0
  1079. package/src/js/components/tabnav.js +300 -0
  1080. package/src/js/components/toast.js +43 -0
  1081. package/src/js/components/tooltip.js +249 -0
  1082. package/src/js/config.js +3 -0
  1083. package/src/js/dkfds.js +186 -0
  1084. package/src/js/events.js +15 -0
  1085. package/src/js/polyfills/Function/prototype/bind.js +159 -0
  1086. package/src/js/polyfills/Object/defineProperty.js +86 -0
  1087. package/src/js/polyfills/custom-event.js +23 -0
  1088. package/src/js/polyfills/element-hidden.js +18 -0
  1089. package/src/js/polyfills/index.js +14 -0
  1090. package/src/js/polyfills/number-is-nan.js +6 -0
  1091. package/src/js/utils/active-element.js +1 -0
  1092. package/src/js/utils/behavior.js +36 -0
  1093. package/src/js/utils/breakpoints.js +10 -0
  1094. package/src/js/utils/closest.js +20 -0
  1095. package/src/js/utils/dispatch.js +30 -0
  1096. package/src/js/utils/generate-unique-id.js +14 -0
  1097. package/src/js/utils/is-in-viewport.js +14 -0
  1098. package/src/js/utils/is-ios-device.js +11 -0
  1099. package/src/js/utils/select.js +29 -0
  1100. package/src/js/utils/toggle.js +22 -0
  1101. package/src/stylesheets/_dkfds-base.scss +76 -0
  1102. package/src/stylesheets/components/_accordions.scss +162 -0
  1103. package/src/stylesheets/components/_alerts.scss +113 -0
  1104. package/src/stylesheets/components/_breadcrumbs.scss +62 -0
  1105. package/src/stylesheets/components/_cards.scss +235 -0
  1106. package/src/stylesheets/components/_cookie-message.scss +41 -0
  1107. package/src/stylesheets/components/_date-picker.scss +391 -0
  1108. package/src/stylesheets/components/_details.scss +61 -0
  1109. package/src/stylesheets/components/_footer.scss +83 -0
  1110. package/src/stylesheets/components/_header.scss +339 -0
  1111. package/src/stylesheets/components/_language-switcher.scss +63 -0
  1112. package/src/stylesheets/components/_modal.scss +155 -0
  1113. package/src/stylesheets/components/_navigation.scss +544 -0
  1114. package/src/stylesheets/components/_overflow-menu.scss +234 -0
  1115. package/src/stylesheets/components/_page-navigation.scss +12 -0
  1116. package/src/stylesheets/components/_pagination.scss +136 -0
  1117. package/src/stylesheets/components/_search.scss +33 -0
  1118. package/src/stylesheets/components/_sidenav.scss +205 -0
  1119. package/src/stylesheets/components/_skipnav.scss +31 -0
  1120. package/src/stylesheets/components/_tabnav.scss +122 -0
  1121. package/src/stylesheets/components/_toast.scss +105 -0
  1122. package/src/stylesheets/components/_tooltip.scss +72 -0
  1123. package/src/stylesheets/core/_base.scss +28 -0
  1124. package/src/stylesheets/core/_fonts.scss +139 -0
  1125. package/src/stylesheets/core/_functions.scss +593 -0
  1126. package/src/stylesheets/core/_grid.scss +118 -0
  1127. package/src/stylesheets/core/_print.scss +187 -0
  1128. package/src/stylesheets/core/_properties.scss +145 -0
  1129. package/src/stylesheets/core/_system-tokens.scss +403 -0
  1130. package/src/stylesheets/core/_typography.scss +500 -0
  1131. package/src/stylesheets/core/_variables.scss +18 -0
  1132. package/src/stylesheets/core/colors/_blue.scss +8 -0
  1133. package/src/stylesheets/core/colors/_data-blue.scss +13 -0
  1134. package/src/stylesheets/core/colors/_data-green-blue.scss +13 -0
  1135. package/src/stylesheets/core/colors/_data-green.scss +13 -0
  1136. package/src/stylesheets/core/colors/_data-orange.scss +13 -0
  1137. package/src/stylesheets/core/colors/_data-pink-violet.scss +13 -0
  1138. package/src/stylesheets/core/colors/_data-violet.scss +13 -0
  1139. package/src/stylesheets/core/colors/_data-yellow-red.scss +13 -0
  1140. package/src/stylesheets/core/colors/_gray.scss +11 -0
  1141. package/src/stylesheets/core/colors/_green.scss +6 -0
  1142. package/src/stylesheets/core/colors/_orange.scss +7 -0
  1143. package/src/stylesheets/core/colors/_purple.scss +6 -0
  1144. package/src/stylesheets/core/colors/_red.scss +6 -0
  1145. package/src/stylesheets/core/mixins/_add-background-svg.scss +7 -0
  1146. package/src/stylesheets/core/mixins/_breakpoints.scss +119 -0
  1147. package/src/stylesheets/core/mixins/_grid-mixins.scss +42 -0
  1148. package/src/stylesheets/core/mixins/_mixins.scss +126 -0
  1149. package/src/stylesheets/core/utilities/_background.scss +15 -0
  1150. package/src/stylesheets/core/utilities/_display.scss +26 -0
  1151. package/src/stylesheets/core/utilities/_flex.scss +43 -0
  1152. package/src/stylesheets/core/utilities/_position.scss +35 -0
  1153. package/src/stylesheets/core/utilities/_spacing.scss +50 -0
  1154. package/src/stylesheets/core/utilities/_text-color.scss +5 -0
  1155. package/src/stylesheets/core/utilities/_textalign.scss +13 -0
  1156. package/src/stylesheets/core/utilities/_width.scss +26 -0
  1157. package/src/stylesheets/dkfds-borgerdk.scss +4 -0
  1158. package/src/stylesheets/dkfds-virkdk.scss +4 -0
  1159. package/src/stylesheets/dkfds.scss +4 -0
  1160. package/src/stylesheets/elements/_badge.scss +36 -0
  1161. package/src/stylesheets/elements/_buttons.scss +280 -0
  1162. package/src/stylesheets/elements/_collapse.scss +17 -0
  1163. package/src/stylesheets/elements/_embed.scss +27 -0
  1164. package/src/stylesheets/elements/_figure.scss +7 -0
  1165. package/src/stylesheets/elements/_forms.scss +93 -0
  1166. package/src/stylesheets/elements/_hr.scss +5 -0
  1167. package/src/stylesheets/elements/_icons.scss +204 -0
  1168. package/src/stylesheets/elements/_inputs.scss +589 -0
  1169. package/src/stylesheets/elements/_list.scss +83 -0
  1170. package/src/stylesheets/elements/_page.scss +34 -0
  1171. package/src/stylesheets/elements/_section.scss +3 -0
  1172. package/src/stylesheets/elements/_spinner.scss +76 -0
  1173. package/src/stylesheets/elements/_table.scss +283 -0
  1174. package/src/stylesheets/elements/_tags.scss +64 -0
  1175. package/src/stylesheets/elements/_toggle.scss +113 -0
  1176. package/src/stylesheets/lib/_normalize.scss +349 -0
  1177. package/src/stylesheets/settings/_settings-color.scss +46 -0
  1178. package/src/stylesheets/settings/_settings-components.scss +415 -0
  1179. package/src/stylesheets/settings/_settings-general.scss +43 -0
  1180. package/src/stylesheets/settings/_settings-typography.scss +212 -0
  1181. package/src/stylesheets/themes/_borgerdk.scss +23 -0
  1182. package/src/stylesheets/themes/_virkdk.scss +21 -0
  1183. package/src/vendor/highlight.pack.js +2 -0
@@ -0,0 +1,2163 @@
1
+ import {keymap} from 'receptor';
2
+ const behavior = require("../utils/behavior");
3
+ const select = require("../utils/select");
4
+ const { prefix: PREFIX } = require("../config");
5
+ const { CLICK } = require("../events");
6
+ const activeElement = require("../utils/active-element");
7
+ const isIosDevice = require("../utils/is-ios-device");
8
+
9
+ const DATE_PICKER_CLASS = `date-picker`;
10
+ const DATE_PICKER_WRAPPER_CLASS = `${DATE_PICKER_CLASS}__wrapper`;
11
+ const DATE_PICKER_INITIALIZED_CLASS = `${DATE_PICKER_CLASS}--initialized`;
12
+ const DATE_PICKER_ACTIVE_CLASS = `${DATE_PICKER_CLASS}--active`;
13
+ const DATE_PICKER_INTERNAL_INPUT_CLASS = `${DATE_PICKER_CLASS}__internal-input`;
14
+ const DATE_PICKER_EXTERNAL_INPUT_CLASS = `${DATE_PICKER_CLASS}__external-input`;
15
+ const DATE_PICKER_BUTTON_CLASS = `${DATE_PICKER_CLASS}__button`;
16
+ const DATE_PICKER_CALENDAR_CLASS = `${DATE_PICKER_CLASS}__calendar`;
17
+ const DATE_PICKER_STATUS_CLASS = `${DATE_PICKER_CLASS}__status`;
18
+ const CALENDAR_DATE_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__date`;
19
+
20
+ const CALENDAR_DATE_FOCUSED_CLASS = `${CALENDAR_DATE_CLASS}--focused`;
21
+ const CALENDAR_DATE_SELECTED_CLASS = `${CALENDAR_DATE_CLASS}--selected`;
22
+ const CALENDAR_DATE_PREVIOUS_MONTH_CLASS = `${CALENDAR_DATE_CLASS}--previous-month`;
23
+ const CALENDAR_DATE_CURRENT_MONTH_CLASS = `${CALENDAR_DATE_CLASS}--current-month`;
24
+ const CALENDAR_DATE_NEXT_MONTH_CLASS = `${CALENDAR_DATE_CLASS}--next-month`;
25
+ const CALENDAR_DATE_RANGE_DATE_CLASS = `${CALENDAR_DATE_CLASS}--range-date`;
26
+ const CALENDAR_DATE_TODAY_CLASS = `${CALENDAR_DATE_CLASS}--today`;
27
+ const CALENDAR_DATE_RANGE_DATE_START_CLASS = `${CALENDAR_DATE_CLASS}--range-date-start`;
28
+ const CALENDAR_DATE_RANGE_DATE_END_CLASS = `${CALENDAR_DATE_CLASS}--range-date-end`;
29
+ const CALENDAR_DATE_WITHIN_RANGE_CLASS = `${CALENDAR_DATE_CLASS}--within-range`;
30
+ const CALENDAR_PREVIOUS_YEAR_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__previous-year`;
31
+ const CALENDAR_PREVIOUS_MONTH_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__previous-month`;
32
+ const CALENDAR_NEXT_YEAR_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__next-year`;
33
+ const CALENDAR_NEXT_MONTH_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__next-month`;
34
+ const CALENDAR_MONTH_SELECTION_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__month-selection`;
35
+ const CALENDAR_YEAR_SELECTION_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__year-selection`;
36
+ const CALENDAR_MONTH_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__month`;
37
+ const CALENDAR_MONTH_FOCUSED_CLASS = `${CALENDAR_MONTH_CLASS}--focused`;
38
+ const CALENDAR_MONTH_SELECTED_CLASS = `${CALENDAR_MONTH_CLASS}--selected`;
39
+ const CALENDAR_YEAR_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__year`;
40
+ const CALENDAR_YEAR_FOCUSED_CLASS = `${CALENDAR_YEAR_CLASS}--focused`;
41
+ const CALENDAR_YEAR_SELECTED_CLASS = `${CALENDAR_YEAR_CLASS}--selected`;
42
+ const CALENDAR_PREVIOUS_YEAR_CHUNK_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__previous-year-chunk`;
43
+ const CALENDAR_NEXT_YEAR_CHUNK_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__next-year-chunk`;
44
+ const CALENDAR_DATE_PICKER_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__date-picker`;
45
+ const CALENDAR_MONTH_PICKER_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__month-picker`;
46
+ const CALENDAR_YEAR_PICKER_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__year-picker`;
47
+ const CALENDAR_TABLE_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__table`;
48
+ const CALENDAR_ROW_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__row`;
49
+ const CALENDAR_CELL_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__cell`;
50
+ const CALENDAR_CELL_CENTER_ITEMS_CLASS = `${CALENDAR_CELL_CLASS}--center-items`;
51
+ const CALENDAR_MONTH_LABEL_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__month-label`;
52
+ const CALENDAR_DAY_OF_WEEK_CLASS = `${DATE_PICKER_CALENDAR_CLASS}__day-of-week`;
53
+
54
+ const DATE_PICKER = `.${DATE_PICKER_CLASS}`;
55
+ const DATE_PICKER_BUTTON = `.${DATE_PICKER_BUTTON_CLASS}`;
56
+ const DATE_PICKER_INTERNAL_INPUT = `.${DATE_PICKER_INTERNAL_INPUT_CLASS}`;
57
+ const DATE_PICKER_EXTERNAL_INPUT = `.${DATE_PICKER_EXTERNAL_INPUT_CLASS}`;
58
+ const DATE_PICKER_CALENDAR = `.${DATE_PICKER_CALENDAR_CLASS}`;
59
+ const DATE_PICKER_STATUS = `.${DATE_PICKER_STATUS_CLASS}`;
60
+ const CALENDAR_DATE = `.${CALENDAR_DATE_CLASS}`;
61
+ const CALENDAR_DATE_FOCUSED = `.${CALENDAR_DATE_FOCUSED_CLASS}`;
62
+ const CALENDAR_DATE_CURRENT_MONTH = `.${CALENDAR_DATE_CURRENT_MONTH_CLASS}`;
63
+ const CALENDAR_PREVIOUS_YEAR = `.${CALENDAR_PREVIOUS_YEAR_CLASS}`;
64
+ const CALENDAR_PREVIOUS_MONTH = `.${CALENDAR_PREVIOUS_MONTH_CLASS}`;
65
+ const CALENDAR_NEXT_YEAR = `.${CALENDAR_NEXT_YEAR_CLASS}`;
66
+ const CALENDAR_NEXT_MONTH = `.${CALENDAR_NEXT_MONTH_CLASS}`;
67
+ const CALENDAR_YEAR_SELECTION = `.${CALENDAR_YEAR_SELECTION_CLASS}`;
68
+ const CALENDAR_MONTH_SELECTION = `.${CALENDAR_MONTH_SELECTION_CLASS}`;
69
+ const CALENDAR_MONTH = `.${CALENDAR_MONTH_CLASS}`;
70
+ const CALENDAR_YEAR = `.${CALENDAR_YEAR_CLASS}`;
71
+ const CALENDAR_PREVIOUS_YEAR_CHUNK = `.${CALENDAR_PREVIOUS_YEAR_CHUNK_CLASS}`;
72
+ const CALENDAR_NEXT_YEAR_CHUNK = `.${CALENDAR_NEXT_YEAR_CHUNK_CLASS}`;
73
+ const CALENDAR_DATE_PICKER = `.${CALENDAR_DATE_PICKER_CLASS}`;
74
+ const CALENDAR_MONTH_PICKER = `.${CALENDAR_MONTH_PICKER_CLASS}`;
75
+ const CALENDAR_YEAR_PICKER = `.${CALENDAR_YEAR_PICKER_CLASS}`;
76
+ const CALENDAR_MONTH_FOCUSED = `.${CALENDAR_MONTH_FOCUSED_CLASS}`;
77
+ const CALENDAR_YEAR_FOCUSED = `.${CALENDAR_YEAR_FOCUSED_CLASS}`;
78
+
79
+ const VALIDATION_MESSAGE = "Indtast venligst en gyldig dato";
80
+
81
+ const MONTH_LABELS = [
82
+ "Januar",
83
+ "Februar",
84
+ "Marts",
85
+ "April",
86
+ "Maj",
87
+ "Juni",
88
+ "Juli",
89
+ "August",
90
+ "September",
91
+ "Oktober",
92
+ "November",
93
+ "December",
94
+ ];
95
+
96
+ const DAY_OF_WEEK_LABELS = [
97
+ "Mandag",
98
+ "Tirsdag",
99
+ "Onsdag",
100
+ "Torsdag",
101
+ "Fredag",
102
+ "Lørdag",
103
+ "Søndag",
104
+ ];
105
+
106
+ const ENTER_KEYCODE = 13;
107
+
108
+ const YEAR_CHUNK = 12;
109
+
110
+ const DEFAULT_MIN_DATE = "0000-01-01";
111
+ const DEFAULT_EXTERNAL_DATE_FORMAT = "DD/MM/YYYY";
112
+ const INTERNAL_DATE_FORMAT = "YYYY-MM-DD";
113
+
114
+ const NOT_DISABLED_SELECTOR = ":not([disabled])";
115
+
116
+ const processFocusableSelectors = (...selectors) =>
117
+ selectors.map((query) => query + NOT_DISABLED_SELECTOR).join(", ");
118
+
119
+ const DATE_PICKER_FOCUSABLE = processFocusableSelectors(
120
+ CALENDAR_PREVIOUS_YEAR,
121
+ CALENDAR_PREVIOUS_MONTH,
122
+ CALENDAR_YEAR_SELECTION,
123
+ CALENDAR_MONTH_SELECTION,
124
+ CALENDAR_NEXT_YEAR,
125
+ CALENDAR_NEXT_MONTH,
126
+ CALENDAR_DATE_FOCUSED
127
+ );
128
+
129
+ const MONTH_PICKER_FOCUSABLE = processFocusableSelectors(
130
+ CALENDAR_MONTH_FOCUSED
131
+ );
132
+
133
+ const YEAR_PICKER_FOCUSABLE = processFocusableSelectors(
134
+ CALENDAR_PREVIOUS_YEAR_CHUNK,
135
+ CALENDAR_NEXT_YEAR_CHUNK,
136
+ CALENDAR_YEAR_FOCUSED
137
+ );
138
+
139
+ // #region Date Manipulation Functions
140
+
141
+ /**
142
+ * Keep date within month. Month would only be over by 1 to 3 days
143
+ *
144
+ * @param {Date} dateToCheck the date object to check
145
+ * @param {number} month the correct month
146
+ * @returns {Date} the date, corrected if needed
147
+ */
148
+ const keepDateWithinMonth = (dateToCheck, month) => {
149
+ if (month !== dateToCheck.getMonth()) {
150
+ dateToCheck.setDate(0);
151
+ }
152
+
153
+ return dateToCheck;
154
+ };
155
+
156
+ /**
157
+ * Set date from month day year
158
+ *
159
+ * @param {number} year the year to set
160
+ * @param {number} month the month to set (zero-indexed)
161
+ * @param {number} date the date to set
162
+ * @returns {Date} the set date
163
+ */
164
+ const setDate = (year, month, date) => {
165
+ const newDate = new Date(0);
166
+ newDate.setFullYear(year, month, date);
167
+ return newDate;
168
+ };
169
+
170
+ /**
171
+ * todays date
172
+ *
173
+ * @returns {Date} todays date
174
+ */
175
+ const today = () => {
176
+ const newDate = new Date();
177
+ const day = newDate.getDate();
178
+ const month = newDate.getMonth();
179
+ const year = newDate.getFullYear();
180
+ return setDate(year, month, day);
181
+ };
182
+
183
+ /**
184
+ * Set date to first day of the month
185
+ *
186
+ * @param {number} date the date to adjust
187
+ * @returns {Date} the adjusted date
188
+ */
189
+ const startOfMonth = (date) => {
190
+ const newDate = new Date(0);
191
+ newDate.setFullYear(date.getFullYear(), date.getMonth(), 1);
192
+ return newDate;
193
+ };
194
+
195
+ /**
196
+ * Set date to last day of the month
197
+ *
198
+ * @param {number} date the date to adjust
199
+ * @returns {Date} the adjusted date
200
+ */
201
+ const lastDayOfMonth = (date) => {
202
+ const newDate = new Date(0);
203
+ newDate.setFullYear(date.getFullYear(), date.getMonth() + 1, 0);
204
+ return newDate;
205
+ };
206
+
207
+ /**
208
+ * Add days to date
209
+ *
210
+ * @param {Date} _date the date to adjust
211
+ * @param {number} numDays the difference in days
212
+ * @returns {Date} the adjusted date
213
+ */
214
+ const addDays = (_date, numDays) => {
215
+ const newDate = new Date(_date.getTime());
216
+ newDate.setDate(newDate.getDate() + numDays);
217
+ return newDate;
218
+ };
219
+
220
+ /**
221
+ * Subtract days from date
222
+ *
223
+ * @param {Date} _date the date to adjust
224
+ * @param {number} numDays the difference in days
225
+ * @returns {Date} the adjusted date
226
+ */
227
+ const subDays = (_date, numDays) => addDays(_date, -numDays);
228
+
229
+ /**
230
+ * Add weeks to date
231
+ *
232
+ * @param {Date} _date the date to adjust
233
+ * @param {number} numWeeks the difference in weeks
234
+ * @returns {Date} the adjusted date
235
+ */
236
+ const addWeeks = (_date, numWeeks) => addDays(_date, numWeeks * 7);
237
+
238
+ /**
239
+ * Subtract weeks from date
240
+ *
241
+ * @param {Date} _date the date to adjust
242
+ * @param {number} numWeeks the difference in weeks
243
+ * @returns {Date} the adjusted date
244
+ */
245
+ const subWeeks = (_date, numWeeks) => addWeeks(_date, -numWeeks);
246
+
247
+ /**
248
+ * Set date to the start of the week (Monday)
249
+ *
250
+ * @param {Date} _date the date to adjust
251
+ * @returns {Date} the adjusted date
252
+ */
253
+ const startOfWeek = (_date) => {
254
+ let dayOfWeek = _date.getDay()-1;
255
+ if(dayOfWeek === -1){
256
+ dayOfWeek = 6;
257
+ }
258
+ return subDays(_date, dayOfWeek);
259
+ };
260
+
261
+ /**
262
+ * Set date to the end of the week (Sunday)
263
+ *
264
+ * @param {Date} _date the date to adjust
265
+ * @param {number} numWeeks the difference in weeks
266
+ * @returns {Date} the adjusted date
267
+ */
268
+ const endOfWeek = (_date) => {
269
+ const dayOfWeek = _date.getDay();
270
+ return addDays(_date, 7 - dayOfWeek);
271
+ };
272
+
273
+ /**
274
+ * Add months to date and keep date within month
275
+ *
276
+ * @param {Date} _date the date to adjust
277
+ * @param {number} numMonths the difference in months
278
+ * @returns {Date} the adjusted date
279
+ */
280
+ const addMonths = (_date, numMonths) => {
281
+ const newDate = new Date(_date.getTime());
282
+
283
+ const dateMonth = (newDate.getMonth() + 12 + numMonths) % 12;
284
+ newDate.setMonth(newDate.getMonth() + numMonths);
285
+ keepDateWithinMonth(newDate, dateMonth);
286
+
287
+ return newDate;
288
+ };
289
+
290
+ /**
291
+ * Subtract months from date
292
+ *
293
+ * @param {Date} _date the date to adjust
294
+ * @param {number} numMonths the difference in months
295
+ * @returns {Date} the adjusted date
296
+ */
297
+ const subMonths = (_date, numMonths) => addMonths(_date, -numMonths);
298
+
299
+ /**
300
+ * Add years to date and keep date within month
301
+ *
302
+ * @param {Date} _date the date to adjust
303
+ * @param {number} numYears the difference in years
304
+ * @returns {Date} the adjusted date
305
+ */
306
+ const addYears = (_date, numYears) => addMonths(_date, numYears * 12);
307
+
308
+ /**
309
+ * Subtract years from date
310
+ *
311
+ * @param {Date} _date the date to adjust
312
+ * @param {number} numYears the difference in years
313
+ * @returns {Date} the adjusted date
314
+ */
315
+ const subYears = (_date, numYears) => addYears(_date, -numYears);
316
+
317
+ /**
318
+ * Set months of date
319
+ *
320
+ * @param {Date} _date the date to adjust
321
+ * @param {number} month zero-indexed month to set
322
+ * @returns {Date} the adjusted date
323
+ */
324
+ const setMonth = (_date, month) => {
325
+ const newDate = new Date(_date.getTime());
326
+
327
+ newDate.setMonth(month);
328
+ keepDateWithinMonth(newDate, month);
329
+
330
+ return newDate;
331
+ };
332
+
333
+ /**
334
+ * Set year of date
335
+ *
336
+ * @param {Date} _date the date to adjust
337
+ * @param {number} year the year to set
338
+ * @returns {Date} the adjusted date
339
+ */
340
+ const setYear = (_date, year) => {
341
+ const newDate = new Date(_date.getTime());
342
+
343
+ const month = newDate.getMonth();
344
+ newDate.setFullYear(year);
345
+ keepDateWithinMonth(newDate, month);
346
+
347
+ return newDate;
348
+ };
349
+
350
+ /**
351
+ * Return the earliest date
352
+ *
353
+ * @param {Date} dateA date to compare
354
+ * @param {Date} dateB date to compare
355
+ * @returns {Date} the earliest date
356
+ */
357
+ const min = (dateA, dateB) => {
358
+ let newDate = dateA;
359
+
360
+ if (dateB < dateA) {
361
+ newDate = dateB;
362
+ }
363
+
364
+ return new Date(newDate.getTime());
365
+ };
366
+
367
+ /**
368
+ * Return the latest date
369
+ *
370
+ * @param {Date} dateA date to compare
371
+ * @param {Date} dateB date to compare
372
+ * @returns {Date} the latest date
373
+ */
374
+ const max = (dateA, dateB) => {
375
+ let newDate = dateA;
376
+
377
+ if (dateB > dateA) {
378
+ newDate = dateB;
379
+ }
380
+
381
+ return new Date(newDate.getTime());
382
+ };
383
+
384
+ /**
385
+ * Check if dates are the in the same year
386
+ *
387
+ * @param {Date} dateA date to compare
388
+ * @param {Date} dateB date to compare
389
+ * @returns {boolean} are dates in the same year
390
+ */
391
+ const isSameYear = (dateA, dateB) => {
392
+ return dateA && dateB && dateA.getFullYear() === dateB.getFullYear();
393
+ };
394
+
395
+ /**
396
+ * Check if dates are the in the same month
397
+ *
398
+ * @param {Date} dateA date to compare
399
+ * @param {Date} dateB date to compare
400
+ * @returns {boolean} are dates in the same month
401
+ */
402
+ const isSameMonth = (dateA, dateB) => {
403
+ return isSameYear(dateA, dateB) && dateA.getMonth() === dateB.getMonth();
404
+ };
405
+
406
+ /**
407
+ * Check if dates are the same date
408
+ *
409
+ * @param {Date} dateA the date to compare
410
+ * @param {Date} dateA the date to compare
411
+ * @returns {boolean} are dates the same date
412
+ */
413
+ const isSameDay = (dateA, dateB) => {
414
+ return isSameMonth(dateA, dateB) && dateA.getDate() === dateB.getDate();
415
+ };
416
+
417
+ /**
418
+ * return a new date within minimum and maximum date
419
+ *
420
+ * @param {Date} date date to check
421
+ * @param {Date} minDate minimum date to allow
422
+ * @param {Date} maxDate maximum date to allow
423
+ * @returns {Date} the date between min and max
424
+ */
425
+ const keepDateBetweenMinAndMax = (date, minDate, maxDate) => {
426
+ let newDate = date;
427
+
428
+ if (date < minDate) {
429
+ newDate = minDate;
430
+ } else if (maxDate && date > maxDate) {
431
+ newDate = maxDate;
432
+ }
433
+
434
+ return new Date(newDate.getTime());
435
+ };
436
+
437
+ /**
438
+ * Check if dates is valid.
439
+ *
440
+ * @param {Date} date date to check
441
+ * @param {Date} minDate minimum date to allow
442
+ * @param {Date} maxDate maximum date to allow
443
+ * @return {boolean} is there a day within the month within min and max dates
444
+ */
445
+ const isDateWithinMinAndMax = (date, minDate, maxDate) =>
446
+ date >= minDate && (!maxDate || date <= maxDate);
447
+
448
+ /**
449
+ * Check if dates month is invalid.
450
+ *
451
+ * @param {Date} date date to check
452
+ * @param {Date} minDate minimum date to allow
453
+ * @param {Date} maxDate maximum date to allow
454
+ * @return {boolean} is the month outside min or max dates
455
+ */
456
+ const isDatesMonthOutsideMinOrMax = (date, minDate, maxDate) => {
457
+ return (
458
+ lastDayOfMonth(date) < minDate || (maxDate && startOfMonth(date) > maxDate)
459
+ );
460
+ };
461
+
462
+ /**
463
+ * Check if dates year is invalid.
464
+ *
465
+ * @param {Date} date date to check
466
+ * @param {Date} minDate minimum date to allow
467
+ * @param {Date} maxDate maximum date to allow
468
+ * @return {boolean} is the month outside min or max dates
469
+ */
470
+ const isDatesYearOutsideMinOrMax = (date, minDate, maxDate) => {
471
+ return (
472
+ lastDayOfMonth(setMonth(date, 11)) < minDate ||
473
+ (maxDate && startOfMonth(setMonth(date, 0)) > maxDate)
474
+ );
475
+ };
476
+
477
+ /**
478
+ * Parse a date with format D-M-YY
479
+ *
480
+ * @param {string} dateString the date string to parse
481
+ * @param {string} dateFormat the format of the date string
482
+ * @param {boolean} adjustDate should the date be adjusted
483
+ * @returns {Date} the parsed date
484
+ */
485
+ const parseDateString = (
486
+ dateString,
487
+ dateFormat = INTERNAL_DATE_FORMAT,
488
+ adjustDate = false
489
+ ) => {
490
+ let date;
491
+ let month;
492
+ let day;
493
+ let year;
494
+ let parsed;
495
+
496
+ if (dateString) {
497
+ let monthStr, dayStr, yearStr;
498
+ if (dateFormat === DEFAULT_EXTERNAL_DATE_FORMAT) {
499
+ [dayStr, monthStr, yearStr] = dateString.split("/");
500
+ } else {
501
+ [yearStr, monthStr, dayStr] = dateString.split("-");
502
+ }
503
+
504
+ if (yearStr) {
505
+ parsed = parseInt(yearStr, 10);
506
+ if (!Number.isNaN(parsed)) {
507
+ year = parsed;
508
+ if (adjustDate) {
509
+ year = Math.max(0, year);
510
+ if (yearStr.length < 3) {
511
+ const currentYear = today().getFullYear();
512
+ const currentYearStub =
513
+ currentYear - (currentYear % 10 ** yearStr.length);
514
+ year = currentYearStub + parsed;
515
+ }
516
+ }
517
+ }
518
+ }
519
+
520
+ if (monthStr) {
521
+ parsed = parseInt(monthStr, 10);
522
+ if (!Number.isNaN(parsed)) {
523
+ month = parsed;
524
+ if (adjustDate) {
525
+ month = Math.max(1, month);
526
+ month = Math.min(12, month);
527
+ }
528
+ }
529
+ }
530
+
531
+ if (month && dayStr && year != null) {
532
+ parsed = parseInt(dayStr, 10);
533
+ if (!Number.isNaN(parsed)) {
534
+ day = parsed;
535
+ if (adjustDate) {
536
+ const lastDayOfTheMonth = setDate(year, month, 0).getDate();
537
+ day = Math.max(1, day);
538
+ day = Math.min(lastDayOfTheMonth, day);
539
+ }
540
+ }
541
+ }
542
+
543
+ if (month && day && year != null) {
544
+ date = setDate(year, month - 1, day);
545
+ }
546
+ }
547
+
548
+ return date;
549
+ };
550
+
551
+ /**
552
+ * Format a date to format MM-DD-YYYY
553
+ *
554
+ * @param {Date} date the date to format
555
+ * @param {string} dateFormat the format of the date string
556
+ * @returns {string} the formatted date string
557
+ */
558
+ const formatDate = (date, dateFormat = INTERNAL_DATE_FORMAT) => {
559
+ const padZeros = (value, length) => {
560
+ return `0000${value}`.slice(-length);
561
+ };
562
+
563
+ const month = date.getMonth() + 1;
564
+ const day = date.getDate();
565
+ const year = date.getFullYear();
566
+
567
+ if (dateFormat === DEFAULT_EXTERNAL_DATE_FORMAT) {
568
+ return [padZeros(day, 2), padZeros(month, 2), padZeros(year, 4)].join("/");
569
+ }
570
+
571
+ return [padZeros(year, 4), padZeros(month, 2), padZeros(day, 2)].join("-");
572
+ };
573
+
574
+ // #endregion Date Manipulation Functions
575
+
576
+ /**
577
+ * Create a grid string from an array of html strings
578
+ *
579
+ * @param {string[]} htmlArray the array of html items
580
+ * @param {number} rowSize the length of a row
581
+ * @returns {string} the grid string
582
+ */
583
+ const listToGridHtml = (htmlArray, rowSize) => {
584
+ const grid = [];
585
+ let row = [];
586
+
587
+ let i = 0;
588
+ while (i < htmlArray.length) {
589
+ row = [];
590
+ while (i < htmlArray.length && row.length < rowSize) {
591
+ row.push(`<td>${htmlArray[i]}</td>`);
592
+ i += 1;
593
+ }
594
+ grid.push(`<tr>${row.join("")}</tr>`);
595
+ }
596
+
597
+ return grid.join("");
598
+ };
599
+
600
+ /**
601
+ * set the value of the element and dispatch a change event
602
+ *
603
+ * @param {HTMLInputElement} el The element to update
604
+ * @param {string} value The new value of the element
605
+ */
606
+ const changeElementValue = (el, value = "") => {
607
+ const elementToChange = el;
608
+ elementToChange.value = value;
609
+
610
+
611
+ var event = new Event('change');
612
+ elementToChange.dispatchEvent(event);
613
+ };
614
+
615
+ /**
616
+ * The properties and elements within the date picker.
617
+ * @typedef {Object} DatePickerContext
618
+ * @property {HTMLDivElement} calendarEl
619
+ * @property {HTMLElement} datePickerEl
620
+ * @property {HTMLInputElement} internalInputEl
621
+ * @property {HTMLInputElement} externalInputEl
622
+ * @property {HTMLDivElement} statusEl
623
+ * @property {HTMLDivElement} firstYearChunkEl
624
+ * @property {Date} calendarDate
625
+ * @property {Date} minDate
626
+ * @property {Date} maxDate
627
+ * @property {Date} selectedDate
628
+ * @property {Date} rangeDate
629
+ * @property {Date} defaultDate
630
+ */
631
+
632
+ /**
633
+ * Get an object of the properties and elements belonging directly to the given
634
+ * date picker component.
635
+ *
636
+ * @param {HTMLElement} el the element within the date picker
637
+ * @returns {DatePickerContext} elements
638
+ */
639
+ const getDatePickerContext = (el) => {
640
+ const datePickerEl = el.closest(DATE_PICKER);
641
+
642
+ if (!datePickerEl) {
643
+ throw new Error(`Element is missing outer ${DATE_PICKER}`);
644
+ }
645
+
646
+ const internalInputEl = datePickerEl.querySelector(
647
+ DATE_PICKER_INTERNAL_INPUT
648
+ );
649
+ const externalInputEl = datePickerEl.querySelector(
650
+ DATE_PICKER_EXTERNAL_INPUT
651
+ );
652
+ const calendarEl = datePickerEl.querySelector(DATE_PICKER_CALENDAR);
653
+ const toggleBtnEl = datePickerEl.querySelector(DATE_PICKER_BUTTON);
654
+ const statusEl = datePickerEl.querySelector(DATE_PICKER_STATUS);
655
+ const firstYearChunkEl = datePickerEl.querySelector(CALENDAR_YEAR);
656
+
657
+ const inputDate = parseDateString(
658
+ externalInputEl.value,
659
+ DEFAULT_EXTERNAL_DATE_FORMAT,
660
+ true
661
+ );
662
+ const selectedDate = parseDateString(internalInputEl.value);
663
+
664
+ const calendarDate = parseDateString(calendarEl.dataset.value);
665
+ const minDate = parseDateString(datePickerEl.dataset.minDate);
666
+ const maxDate = parseDateString(datePickerEl.dataset.maxDate);
667
+ const rangeDate = parseDateString(datePickerEl.dataset.rangeDate);
668
+ const defaultDate = parseDateString(datePickerEl.dataset.defaultDate);
669
+
670
+ if (minDate && maxDate && minDate > maxDate) {
671
+ throw new Error("Minimum date cannot be after maximum date");
672
+ }
673
+
674
+ return {
675
+ calendarDate,
676
+ minDate,
677
+ toggleBtnEl,
678
+ selectedDate,
679
+ maxDate,
680
+ firstYearChunkEl,
681
+ datePickerEl,
682
+ inputDate,
683
+ internalInputEl,
684
+ externalInputEl,
685
+ calendarEl,
686
+ rangeDate,
687
+ defaultDate,
688
+ statusEl,
689
+ };
690
+ };
691
+
692
+ /**
693
+ * Disable the date picker component
694
+ *
695
+ * @param {HTMLElement} el An element within the date picker component
696
+ */
697
+ const disable = (el) => {
698
+ const { externalInputEl, toggleBtnEl } = getDatePickerContext(el);
699
+
700
+ toggleBtnEl.disabled = true;
701
+ externalInputEl.disabled = true;
702
+ };
703
+
704
+ /**
705
+ * Enable the date picker component
706
+ *
707
+ * @param {HTMLElement} el An element within the date picker component
708
+ */
709
+ const enable = (el) => {
710
+ const { externalInputEl, toggleBtnEl } = getDatePickerContext(el);
711
+
712
+ toggleBtnEl.disabled = false;
713
+ externalInputEl.disabled = false;
714
+ };
715
+
716
+ // #region Validation
717
+
718
+ /**
719
+ * Validate the value in the input as a valid date of format D/M/YYYY
720
+ *
721
+ * @param {HTMLElement} el An element within the date picker component
722
+ */
723
+ const isDateInputInvalid = (el) => {
724
+ const { externalInputEl, minDate, maxDate } = getDatePickerContext(el);
725
+
726
+ const dateString = externalInputEl.value;
727
+ let isInvalid = false;
728
+
729
+ if (dateString) {
730
+ isInvalid = true;
731
+
732
+ const dateStringParts = dateString.split("/");
733
+ const [day, month, year] = dateStringParts.map((str) => {
734
+ let value;
735
+ const parsed = parseInt(str, 10);
736
+ if (!Number.isNaN(parsed)) value = parsed;
737
+ return value;
738
+ });
739
+
740
+ if (month && day && year != null) {
741
+ const checkDate = setDate(year, month - 1, day);
742
+
743
+ if (
744
+ checkDate.getMonth() === month - 1 &&
745
+ checkDate.getDate() === day &&
746
+ checkDate.getFullYear() === year &&
747
+ dateStringParts[2].length === 4 &&
748
+ isDateWithinMinAndMax(checkDate, minDate, maxDate)
749
+ ) {
750
+ isInvalid = false;
751
+ }
752
+ }
753
+ }
754
+
755
+ return isInvalid;
756
+ };
757
+
758
+ /**
759
+ * Validate the value in the input as a valid date of format M/D/YYYY
760
+ *
761
+ * @param {HTMLElement} el An element within the date picker component
762
+ */
763
+ const validateDateInput = (el) => {
764
+ const { externalInputEl } = getDatePickerContext(el);
765
+ const isInvalid = isDateInputInvalid(externalInputEl);
766
+
767
+ if (isInvalid && !externalInputEl.validationMessage) {
768
+ externalInputEl.setCustomValidity(VALIDATION_MESSAGE);
769
+ }
770
+
771
+ if (!isInvalid && externalInputEl.validationMessage === VALIDATION_MESSAGE) {
772
+ externalInputEl.setCustomValidity("");
773
+ }
774
+ };
775
+
776
+ // #endregion Validation
777
+
778
+ /**
779
+ * Enable the date picker component
780
+ *
781
+ * @param {HTMLElement} el An element within the date picker component
782
+ */
783
+ const reconcileInputValues = (el) => {
784
+ const { internalInputEl, inputDate } = getDatePickerContext(el);
785
+ let newValue = "";
786
+
787
+ if (inputDate && !isDateInputInvalid(el)) {
788
+ newValue = formatDate(inputDate);
789
+ }
790
+
791
+ if (internalInputEl.value !== newValue) {
792
+ changeElementValue(internalInputEl, newValue);
793
+ }
794
+ };
795
+
796
+ /**
797
+ * Select the value of the date picker inputs.
798
+ *
799
+ * @param {HTMLButtonElement} el An element within the date picker component
800
+ * @param {string} dateString The date string to update in YYYY-MM-DD format
801
+ */
802
+ const setCalendarValue = (el, dateString) => {
803
+ const parsedDate = parseDateString(dateString);
804
+
805
+ if (parsedDate) {
806
+ const formattedDate = formatDate(parsedDate, DEFAULT_EXTERNAL_DATE_FORMAT);
807
+
808
+ const {
809
+ datePickerEl,
810
+ internalInputEl,
811
+ externalInputEl,
812
+ } = getDatePickerContext(el);
813
+
814
+ changeElementValue(internalInputEl, dateString);
815
+ changeElementValue(externalInputEl, formattedDate);
816
+
817
+ validateDateInput(datePickerEl);
818
+ }
819
+ };
820
+
821
+ /**
822
+ * Enhance an input with the date picker elements
823
+ *
824
+ * @param {HTMLElement} el The initial wrapping element of the date picker component
825
+ */
826
+ const enhanceDatePicker = (el) => {
827
+ const datePickerEl = el.closest(DATE_PICKER);
828
+ const defaultValue = datePickerEl.dataset.defaultValue;
829
+
830
+ const internalInputEl = datePickerEl.querySelector(`input`);
831
+
832
+ if (!internalInputEl) {
833
+ throw new Error(`${DATE_PICKER} is missing inner input`);
834
+ }
835
+
836
+
837
+ const minDate = parseDateString(
838
+ datePickerEl.dataset.minDate || internalInputEl.getAttribute("min")
839
+ );
840
+ datePickerEl.dataset.minDate = minDate
841
+ ? formatDate(minDate)
842
+ : DEFAULT_MIN_DATE;
843
+
844
+ const maxDate = parseDateString(
845
+ datePickerEl.dataset.maxDate || internalInputEl.getAttribute("max")
846
+ );
847
+ if (maxDate) {
848
+ datePickerEl.dataset.maxDate = formatDate(maxDate);
849
+ }
850
+
851
+ const calendarWrapper = document.createElement("div");
852
+ calendarWrapper.classList.add(DATE_PICKER_WRAPPER_CLASS);
853
+ calendarWrapper.tabIndex = "-1";
854
+
855
+ const externalInputEl = internalInputEl.cloneNode();
856
+ externalInputEl.classList.add(DATE_PICKER_EXTERNAL_INPUT_CLASS);
857
+ externalInputEl.type = "text";
858
+ externalInputEl.name = "";
859
+
860
+ calendarWrapper.appendChild(externalInputEl);
861
+ calendarWrapper.insertAdjacentHTML(
862
+ "beforeend",
863
+ [
864
+ `<button type="button" class="${DATE_PICKER_BUTTON_CLASS}" aria-haspopup="true" aria-label="Åbn kalender">&nbsp;</button>`,
865
+ `<div class="${DATE_PICKER_CALENDAR_CLASS}" role="dialog" aria-modal="true" hidden></div>`,
866
+ `<div class="sr-only ${DATE_PICKER_STATUS_CLASS}" role="status" aria-live="polite"></div>`,
867
+ ].join("")
868
+ );
869
+
870
+ internalInputEl.setAttribute("aria-hidden", "true");
871
+ internalInputEl.setAttribute("tabindex", "-1");
872
+ internalInputEl.classList.add(
873
+ "sr-only",
874
+ DATE_PICKER_INTERNAL_INPUT_CLASS
875
+ );
876
+ internalInputEl.removeAttribute('id');
877
+ internalInputEl.required = false;
878
+
879
+ datePickerEl.appendChild(calendarWrapper);
880
+ datePickerEl.classList.add(DATE_PICKER_INITIALIZED_CLASS);
881
+
882
+ if (defaultValue) {
883
+ setCalendarValue(datePickerEl, defaultValue);
884
+ }
885
+
886
+ if (internalInputEl.disabled) {
887
+ disable(datePickerEl);
888
+ internalInputEl.disabled = false;
889
+ }
890
+
891
+ if (externalInputEl.value) {
892
+ validateDateInput(externalInputEl);
893
+ }
894
+ };
895
+
896
+ // #region Calendar - Date Selection View
897
+
898
+ /**
899
+ * render the calendar.
900
+ *
901
+ * @param {HTMLElement} el An element within the date picker component
902
+ * @param {Date} _dateToDisplay a date to render on the calendar
903
+ * @returns {HTMLElement} a reference to the new calendar element
904
+ */
905
+ const renderCalendar = (el, _dateToDisplay) => {
906
+ const {
907
+ datePickerEl,
908
+ calendarEl,
909
+ statusEl,
910
+ selectedDate,
911
+ maxDate,
912
+ minDate,
913
+ rangeDate,
914
+ } = getDatePickerContext(el);
915
+ const todaysDate = today();
916
+ let dateToDisplay = _dateToDisplay || todaysDate;
917
+
918
+ const calendarWasHidden = calendarEl.hidden;
919
+
920
+ const focusedDate = addDays(dateToDisplay, 0);
921
+ const focusedMonth = dateToDisplay.getMonth();
922
+ const focusedYear = dateToDisplay.getFullYear();
923
+
924
+ const prevMonth = subMonths(dateToDisplay, 1);
925
+ const nextMonth = addMonths(dateToDisplay, 1);
926
+
927
+ const currentFormattedDate = formatDate(dateToDisplay);
928
+
929
+ const firstOfMonth = startOfMonth(dateToDisplay);
930
+ const prevButtonsDisabled = isSameMonth(dateToDisplay, minDate);
931
+ const nextButtonsDisabled = isSameMonth(dateToDisplay, maxDate);
932
+
933
+ const rangeConclusionDate = selectedDate || dateToDisplay;
934
+ const rangeStartDate = rangeDate && min(rangeConclusionDate, rangeDate);
935
+ const rangeEndDate = rangeDate && max(rangeConclusionDate, rangeDate);
936
+
937
+ const withinRangeStartDate = rangeDate && addDays(rangeStartDate, 1);
938
+ const withinRangeEndDate = rangeDate && subDays(rangeEndDate, 1);
939
+
940
+ const monthLabel = MONTH_LABELS[focusedMonth];
941
+
942
+ const generateDateHtml = (dateToRender) => {
943
+ const classes = [CALENDAR_DATE_CLASS];
944
+ const day = dateToRender.getDate();
945
+ const month = dateToRender.getMonth();
946
+ const year = dateToRender.getFullYear();
947
+ const dayOfWeek = dateToRender.getDay();
948
+
949
+ const formattedDate = formatDate(dateToRender);
950
+
951
+ let tabindex = "-1";
952
+
953
+ const isDisabled = !isDateWithinMinAndMax(dateToRender, minDate, maxDate);
954
+ const isSelected = isSameDay(dateToRender, selectedDate);
955
+
956
+ if (isSameMonth(dateToRender, prevMonth)) {
957
+ classes.push(CALENDAR_DATE_PREVIOUS_MONTH_CLASS);
958
+ }
959
+
960
+ if (isSameMonth(dateToRender, focusedDate)) {
961
+ classes.push(CALENDAR_DATE_CURRENT_MONTH_CLASS);
962
+ }
963
+
964
+ if (isSameMonth(dateToRender, nextMonth)) {
965
+ classes.push(CALENDAR_DATE_NEXT_MONTH_CLASS);
966
+ }
967
+
968
+ if (isSelected) {
969
+ classes.push(CALENDAR_DATE_SELECTED_CLASS);
970
+ }
971
+
972
+ if (isSameDay(dateToRender, todaysDate)) {
973
+ classes.push(CALENDAR_DATE_TODAY_CLASS);
974
+ }
975
+
976
+ if (rangeDate) {
977
+ if (isSameDay(dateToRender, rangeDate)) {
978
+ classes.push(CALENDAR_DATE_RANGE_DATE_CLASS);
979
+ }
980
+
981
+ if (isSameDay(dateToRender, rangeStartDate)) {
982
+ classes.push(CALENDAR_DATE_RANGE_DATE_START_CLASS);
983
+ }
984
+
985
+ if (isSameDay(dateToRender, rangeEndDate)) {
986
+ classes.push(CALENDAR_DATE_RANGE_DATE_END_CLASS);
987
+ }
988
+
989
+ if (
990
+ isDateWithinMinAndMax(
991
+ dateToRender,
992
+ withinRangeStartDate,
993
+ withinRangeEndDate
994
+ )
995
+ ) {
996
+ classes.push(CALENDAR_DATE_WITHIN_RANGE_CLASS);
997
+ }
998
+ }
999
+
1000
+ if (isSameDay(dateToRender, focusedDate)) {
1001
+ tabindex = "0";
1002
+ classes.push(CALENDAR_DATE_FOCUSED_CLASS);
1003
+ }
1004
+
1005
+ const monthStr = MONTH_LABELS[month];
1006
+ const dayStr = DAY_OF_WEEK_LABELS[dayOfWeek];
1007
+
1008
+ return `<button
1009
+ type="button"
1010
+ tabindex="${tabindex}"
1011
+ class="${classes.join(" ")}"
1012
+ data-day="${day}"
1013
+ data-month="${month + 1}"
1014
+ data-year="${year}"
1015
+ data-value="${formattedDate}"
1016
+ aria-label="${dayStr} den ${day} ${monthStr} ${year} "
1017
+ aria-selected="${isSelected ? "true" : "false"}"
1018
+ ${isDisabled ? `disabled="disabled"` : ""}
1019
+ >${day}</button>`;
1020
+ };
1021
+ // set date to first rendered day
1022
+ dateToDisplay = startOfWeek(firstOfMonth);
1023
+
1024
+ const days = [];
1025
+
1026
+ while (
1027
+ days.length < 28 ||
1028
+ dateToDisplay.getMonth() === focusedMonth ||
1029
+ days.length % 7 !== 0
1030
+ ) {
1031
+ days.push(generateDateHtml(dateToDisplay));
1032
+ dateToDisplay = addDays(dateToDisplay, 1);
1033
+ }
1034
+ const datesHtml = listToGridHtml(days, 7);
1035
+
1036
+ const newCalendar = calendarEl.cloneNode();
1037
+ newCalendar.dataset.value = currentFormattedDate;
1038
+ newCalendar.style.top = `${datePickerEl.offsetHeight}px`;
1039
+ newCalendar.hidden = false;
1040
+ let content = `<div tabindex="-1" class="${CALENDAR_DATE_PICKER_CLASS}">
1041
+ <div class="${CALENDAR_ROW_CLASS}">
1042
+ <div class="${CALENDAR_CELL_CLASS} ${CALENDAR_CELL_CENTER_ITEMS_CLASS}">
1043
+ <button
1044
+ type="button"
1045
+ class="${CALENDAR_PREVIOUS_YEAR_CLASS}"
1046
+ aria-label="Navigér ét år tilbage"
1047
+ ${prevButtonsDisabled ? `disabled="disabled"` : ""}
1048
+ >&nbsp;</button>
1049
+ </div>
1050
+ <div class="${CALENDAR_CELL_CLASS} ${CALENDAR_CELL_CENTER_ITEMS_CLASS}">
1051
+ <button
1052
+ type="button"
1053
+ class="${CALENDAR_PREVIOUS_MONTH_CLASS}"
1054
+ aria-label="Navigér én måned tilbage"
1055
+ ${prevButtonsDisabled ? `disabled="disabled"` : ""}
1056
+ >&nbsp;</button>
1057
+ </div>
1058
+ <div class="${CALENDAR_CELL_CLASS} ${CALENDAR_MONTH_LABEL_CLASS}">
1059
+ <button
1060
+ type="button"
1061
+ class="${CALENDAR_MONTH_SELECTION_CLASS}" aria-label="${monthLabel}. Vælg måned."
1062
+ >${monthLabel}</button>
1063
+ <button
1064
+ type="button"
1065
+ class="${CALENDAR_YEAR_SELECTION_CLASS}" aria-label="${focusedYear}. Vælg år."
1066
+ >${focusedYear}</button>
1067
+ </div>
1068
+ <div class="${CALENDAR_CELL_CLASS} ${CALENDAR_CELL_CENTER_ITEMS_CLASS}">
1069
+ <button
1070
+ type="button"
1071
+ class="${CALENDAR_NEXT_MONTH_CLASS}"
1072
+ aria-label="Navigér én måned frem"
1073
+ ${nextButtonsDisabled ? `disabled="disabled"` : ""}
1074
+ >&nbsp;</button>
1075
+ </div>
1076
+ <div class="${CALENDAR_CELL_CLASS} ${CALENDAR_CELL_CENTER_ITEMS_CLASS}">
1077
+ <button
1078
+ type="button"
1079
+ class="${CALENDAR_NEXT_YEAR_CLASS}"
1080
+ aria-label="Navigér ét år frem"
1081
+ ${nextButtonsDisabled ? `disabled="disabled"` : ""}
1082
+ >&nbsp;</button>
1083
+ </div>
1084
+ </div>
1085
+ <table class="${CALENDAR_TABLE_CLASS}" role="presentation">
1086
+ <thead>
1087
+ <tr>`;
1088
+ for(let d in DAY_OF_WEEK_LABELS){
1089
+ content += `<th class="${CALENDAR_DAY_OF_WEEK_CLASS}" scope="col" aria-label="${DAY_OF_WEEK_LABELS[d]}">${DAY_OF_WEEK_LABELS[d].charAt(0)}</th>`;
1090
+ }
1091
+ content += `</tr>
1092
+ </thead>
1093
+ <tbody>
1094
+ ${datesHtml}
1095
+ </tbody>
1096
+ </table>
1097
+ </div>`;
1098
+ newCalendar.innerHTML = content;
1099
+ calendarEl.parentNode.replaceChild(newCalendar, calendarEl);
1100
+
1101
+ datePickerEl.classList.add(DATE_PICKER_ACTIVE_CLASS);
1102
+
1103
+ const statuses = [];
1104
+
1105
+ if (isSameDay(selectedDate, focusedDate)) {
1106
+ statuses.push("Selected date");
1107
+ }
1108
+
1109
+ if (calendarWasHidden) {
1110
+ statuses.push(
1111
+ "Du kan navigere mellem dage ved at bruge højre og venstre piltaster, ",
1112
+ "uger ved at bruge op og ned piltaster, ",
1113
+ "måneder ved ta bruge page up og page down tasterne ",
1114
+ "og år ved at at taste shift og page up eller ned.",
1115
+ "Home og end tasten navigerer til start eller slutning af en uge."
1116
+ );
1117
+ statusEl.textContent = "";
1118
+ } else {
1119
+ statuses.push(`${monthLabel} ${focusedYear}`);
1120
+ }
1121
+ statusEl.textContent = statuses.join(". ");
1122
+
1123
+ return newCalendar;
1124
+ };
1125
+
1126
+ /**
1127
+ * Navigate back one year and display the calendar.
1128
+ *
1129
+ * @param {HTMLButtonElement} _buttonEl An element within the date picker component
1130
+ */
1131
+ const displayPreviousYear = (_buttonEl) => {
1132
+ if (_buttonEl.disabled) return;
1133
+ const { calendarEl, calendarDate, minDate, maxDate } = getDatePickerContext(
1134
+ _buttonEl
1135
+ );
1136
+ let date = subYears(calendarDate, 1);
1137
+ date = keepDateBetweenMinAndMax(date, minDate, maxDate);
1138
+ const newCalendar = renderCalendar(calendarEl, date);
1139
+
1140
+ let nextToFocus = newCalendar.querySelector(CALENDAR_PREVIOUS_YEAR);
1141
+ if (nextToFocus.disabled) {
1142
+ nextToFocus = newCalendar.querySelector(CALENDAR_DATE_PICKER);
1143
+ }
1144
+ nextToFocus.focus();
1145
+ };
1146
+
1147
+ /**
1148
+ * Navigate back one month and display the calendar.
1149
+ *
1150
+ * @param {HTMLButtonElement} _buttonEl An element within the date picker component
1151
+ */
1152
+ const displayPreviousMonth = (_buttonEl) => {
1153
+ if (_buttonEl.disabled) return;
1154
+ const { calendarEl, calendarDate, minDate, maxDate } = getDatePickerContext(
1155
+ _buttonEl
1156
+ );
1157
+ let date = subMonths(calendarDate, 1);
1158
+ date = keepDateBetweenMinAndMax(date, minDate, maxDate);
1159
+ const newCalendar = renderCalendar(calendarEl, date);
1160
+
1161
+ let nextToFocus = newCalendar.querySelector(CALENDAR_PREVIOUS_MONTH);
1162
+ if (nextToFocus.disabled) {
1163
+ nextToFocus = newCalendar.querySelector(CALENDAR_DATE_PICKER);
1164
+ }
1165
+ nextToFocus.focus();
1166
+ };
1167
+
1168
+ /**
1169
+ * Navigate forward one month and display the calendar.
1170
+ *
1171
+ * @param {HTMLButtonElement} _buttonEl An element within the date picker component
1172
+ */
1173
+ const displayNextMonth = (_buttonEl) => {
1174
+ if (_buttonEl.disabled) return;
1175
+ const { calendarEl, calendarDate, minDate, maxDate } = getDatePickerContext(
1176
+ _buttonEl
1177
+ );
1178
+ let date = addMonths(calendarDate, 1);
1179
+ date = keepDateBetweenMinAndMax(date, minDate, maxDate);
1180
+ const newCalendar = renderCalendar(calendarEl, date);
1181
+
1182
+ let nextToFocus = newCalendar.querySelector(CALENDAR_NEXT_MONTH);
1183
+ if (nextToFocus.disabled) {
1184
+ nextToFocus = newCalendar.querySelector(CALENDAR_DATE_PICKER);
1185
+ }
1186
+ nextToFocus.focus();
1187
+ };
1188
+
1189
+ /**
1190
+ * Navigate forward one year and display the calendar.
1191
+ *
1192
+ * @param {HTMLButtonElement} _buttonEl An element within the date picker component
1193
+ */
1194
+ const displayNextYear = (_buttonEl) => {
1195
+ if (_buttonEl.disabled) return;
1196
+ const { calendarEl, calendarDate, minDate, maxDate } = getDatePickerContext(
1197
+ _buttonEl
1198
+ );
1199
+ let date = addYears(calendarDate, 1);
1200
+ date = keepDateBetweenMinAndMax(date, minDate, maxDate);
1201
+ const newCalendar = renderCalendar(calendarEl, date);
1202
+
1203
+ let nextToFocus = newCalendar.querySelector(CALENDAR_NEXT_YEAR);
1204
+ if (nextToFocus.disabled) {
1205
+ nextToFocus = newCalendar.querySelector(CALENDAR_DATE_PICKER);
1206
+ }
1207
+ nextToFocus.focus();
1208
+ };
1209
+
1210
+ /**
1211
+ * Hide the calendar of a date picker component.
1212
+ *
1213
+ * @param {HTMLElement} el An element within the date picker component
1214
+ */
1215
+ const hideCalendar = (el) => {
1216
+ const { datePickerEl, calendarEl, statusEl } = getDatePickerContext(el);
1217
+
1218
+ datePickerEl.classList.remove(DATE_PICKER_ACTIVE_CLASS);
1219
+ calendarEl.hidden = true;
1220
+ statusEl.textContent = "";
1221
+ };
1222
+
1223
+ /**
1224
+ * Select a date within the date picker component.
1225
+ *
1226
+ * @param {HTMLButtonElement} calendarDateEl A date element within the date picker component
1227
+ */
1228
+ const selectDate = (calendarDateEl) => {
1229
+ if (calendarDateEl.disabled) return;
1230
+
1231
+ const { datePickerEl, externalInputEl } = getDatePickerContext(
1232
+ calendarDateEl
1233
+ );
1234
+ setCalendarValue(calendarDateEl, calendarDateEl.dataset.value);
1235
+ hideCalendar(datePickerEl);
1236
+
1237
+ externalInputEl.focus();
1238
+ };
1239
+
1240
+ /**
1241
+ * Toggle the calendar.
1242
+ *
1243
+ * @param {HTMLButtonElement} el An element within the date picker component
1244
+ */
1245
+ const toggleCalendar = (el) => {
1246
+ if (el.disabled) return;
1247
+ const {
1248
+ calendarEl,
1249
+ inputDate,
1250
+ minDate,
1251
+ maxDate,
1252
+ defaultDate,
1253
+ } = getDatePickerContext(el);
1254
+
1255
+ if (calendarEl.hidden) {
1256
+ const dateToDisplay = keepDateBetweenMinAndMax(
1257
+ inputDate || defaultDate || today(),
1258
+ minDate,
1259
+ maxDate
1260
+ );
1261
+ const newCalendar = renderCalendar(calendarEl, dateToDisplay);
1262
+ newCalendar.querySelector(CALENDAR_DATE_FOCUSED).focus();
1263
+ } else {
1264
+ hideCalendar(el);
1265
+ }
1266
+ };
1267
+
1268
+ /**
1269
+ * Update the calendar when visible.
1270
+ *
1271
+ * @param {HTMLElement} el an element within the date picker
1272
+ */
1273
+ const updateCalendarIfVisible = (el) => {
1274
+ const { calendarEl, inputDate, minDate, maxDate } = getDatePickerContext(el);
1275
+ const calendarShown = !calendarEl.hidden;
1276
+
1277
+ if (calendarShown && inputDate) {
1278
+ const dateToDisplay = keepDateBetweenMinAndMax(inputDate, minDate, maxDate);
1279
+ renderCalendar(calendarEl, dateToDisplay);
1280
+ }
1281
+ };
1282
+
1283
+ // #endregion Calendar - Date Selection View
1284
+
1285
+ // #region Calendar - Month Selection View
1286
+ /**
1287
+ * Display the month selection screen in the date picker.
1288
+ *
1289
+ * @param {HTMLButtonElement} el An element within the date picker component
1290
+ * @returns {HTMLElement} a reference to the new calendar element
1291
+ */
1292
+ const displayMonthSelection = (el, monthToDisplay) => {
1293
+ const {
1294
+ calendarEl,
1295
+ statusEl,
1296
+ calendarDate,
1297
+ minDate,
1298
+ maxDate,
1299
+ } = getDatePickerContext(el);
1300
+
1301
+ const selectedMonth = calendarDate.getMonth();
1302
+ const focusedMonth = monthToDisplay == null ? selectedMonth : monthToDisplay;
1303
+
1304
+ const months = MONTH_LABELS.map((month, index) => {
1305
+ const monthToCheck = setMonth(calendarDate, index);
1306
+
1307
+ const isDisabled = isDatesMonthOutsideMinOrMax(
1308
+ monthToCheck,
1309
+ minDate,
1310
+ maxDate
1311
+ );
1312
+
1313
+ let tabindex = "-1";
1314
+
1315
+ const classes = [CALENDAR_MONTH_CLASS];
1316
+ const isSelected = index === selectedMonth;
1317
+
1318
+ if (index === focusedMonth) {
1319
+ tabindex = "0";
1320
+ classes.push(CALENDAR_MONTH_FOCUSED_CLASS);
1321
+ }
1322
+
1323
+ if (isSelected) {
1324
+ classes.push(CALENDAR_MONTH_SELECTED_CLASS);
1325
+ }
1326
+
1327
+ return `<button
1328
+ type="button"
1329
+ tabindex="${tabindex}"
1330
+ class="${classes.join(" ")}"
1331
+ data-value="${index}"
1332
+ data-label="${month}"
1333
+ aria-selected="${isSelected ? "true" : "false"}"
1334
+ ${isDisabled ? `disabled="disabled"` : ""}
1335
+ >${month}</button>`;
1336
+ });
1337
+
1338
+ const monthsHtml = `<div tabindex="-1" class="${CALENDAR_MONTH_PICKER_CLASS}">
1339
+ <table class="${CALENDAR_TABLE_CLASS}" role="presentation">
1340
+ <tbody>
1341
+ ${listToGridHtml(months, 3)}
1342
+ </tbody>
1343
+ </table>
1344
+ </div>`;
1345
+
1346
+ const newCalendar = calendarEl.cloneNode();
1347
+ newCalendar.innerHTML = monthsHtml;
1348
+ calendarEl.parentNode.replaceChild(newCalendar, calendarEl);
1349
+
1350
+ statusEl.textContent = "Select a month.";
1351
+
1352
+ return newCalendar;
1353
+ };
1354
+
1355
+ /**
1356
+ * Select a month in the date picker component.
1357
+ *
1358
+ * @param {HTMLButtonElement} monthEl An month element within the date picker component
1359
+ */
1360
+ const selectMonth = (monthEl) => {
1361
+ if (monthEl.disabled) return;
1362
+ const { calendarEl, calendarDate, minDate, maxDate } = getDatePickerContext(
1363
+ monthEl
1364
+ );
1365
+ const selectedMonth = parseInt(monthEl.dataset.value, 10);
1366
+ let date = setMonth(calendarDate, selectedMonth);
1367
+ date = keepDateBetweenMinAndMax(date, minDate, maxDate);
1368
+ const newCalendar = renderCalendar(calendarEl, date);
1369
+ newCalendar.querySelector(CALENDAR_DATE_FOCUSED).focus();
1370
+ };
1371
+
1372
+ // #endregion Calendar - Month Selection View
1373
+
1374
+ // #region Calendar - Year Selection View
1375
+
1376
+ /**
1377
+ * Display the year selection screen in the date picker.
1378
+ *
1379
+ * @param {HTMLButtonElement} el An element within the date picker component
1380
+ * @param {number} yearToDisplay year to display in year selection
1381
+ * @returns {HTMLElement} a reference to the new calendar element
1382
+ */
1383
+ const displayYearSelection = (el, yearToDisplay) => {
1384
+ const {
1385
+ calendarEl,
1386
+ statusEl,
1387
+ calendarDate,
1388
+ minDate,
1389
+ maxDate,
1390
+ } = getDatePickerContext(el);
1391
+
1392
+ const selectedYear = calendarDate.getFullYear();
1393
+ const focusedYear = yearToDisplay == null ? selectedYear : yearToDisplay;
1394
+
1395
+ let yearToChunk = focusedYear;
1396
+ yearToChunk -= yearToChunk % YEAR_CHUNK;
1397
+ yearToChunk = Math.max(0, yearToChunk);
1398
+
1399
+ const prevYearChunkDisabled = isDatesYearOutsideMinOrMax(
1400
+ setYear(calendarDate, yearToChunk - 1),
1401
+ minDate,
1402
+ maxDate
1403
+ );
1404
+
1405
+ const nextYearChunkDisabled = isDatesYearOutsideMinOrMax(
1406
+ setYear(calendarDate, yearToChunk + YEAR_CHUNK),
1407
+ minDate,
1408
+ maxDate
1409
+ );
1410
+
1411
+ const years = [];
1412
+ let yearIndex = yearToChunk;
1413
+ while (years.length < YEAR_CHUNK) {
1414
+ const isDisabled = isDatesYearOutsideMinOrMax(
1415
+ setYear(calendarDate, yearIndex),
1416
+ minDate,
1417
+ maxDate
1418
+ );
1419
+
1420
+ let tabindex = "-1";
1421
+
1422
+ const classes = [CALENDAR_YEAR_CLASS];
1423
+ const isSelected = yearIndex === selectedYear;
1424
+
1425
+ if (yearIndex === focusedYear) {
1426
+ tabindex = "0";
1427
+ classes.push(CALENDAR_YEAR_FOCUSED_CLASS);
1428
+ }
1429
+
1430
+ if (isSelected) {
1431
+ classes.push(CALENDAR_YEAR_SELECTED_CLASS);
1432
+ }
1433
+
1434
+ years.push(
1435
+ `<button
1436
+ type="button"
1437
+ tabindex="${tabindex}"
1438
+ class="${classes.join(" ")}"
1439
+ data-value="${yearIndex}"
1440
+ aria-selected="${isSelected ? "true" : "false"}"
1441
+ ${isDisabled ? `disabled="disabled"` : ""}
1442
+ >${yearIndex}</button>`
1443
+ );
1444
+ yearIndex += 1;
1445
+ }
1446
+
1447
+ const yearsHtml = listToGridHtml(years, 3);
1448
+
1449
+ const newCalendar = calendarEl.cloneNode();
1450
+ newCalendar.innerHTML = `<div tabindex="-1" class="${CALENDAR_YEAR_PICKER_CLASS}">
1451
+ <table class="${CALENDAR_TABLE_CLASS}" role="presentation">
1452
+ <tbody>
1453
+ <tr>
1454
+ <td>
1455
+ <button
1456
+ type="button"
1457
+ class="${CALENDAR_PREVIOUS_YEAR_CHUNK_CLASS}"
1458
+ aria-label="Navigér ${YEAR_CHUNK} år tilbage"
1459
+ ${prevYearChunkDisabled ? `disabled="disabled"` : ""}
1460
+ >&nbsp;</button>
1461
+ </td>
1462
+ <td colspan="3">
1463
+ <table class="${CALENDAR_TABLE_CLASS}" role="presentation">
1464
+ <tbody>
1465
+ ${yearsHtml}
1466
+ </tbody>
1467
+ </table>
1468
+ </td>
1469
+ <td>
1470
+ <button
1471
+ type="button"
1472
+ class="${CALENDAR_NEXT_YEAR_CHUNK_CLASS}"
1473
+ aria-label="Navigér ${YEAR_CHUNK} år frem"
1474
+ ${nextYearChunkDisabled ? `disabled="disabled"` : ""}
1475
+ >&nbsp;</button>
1476
+ </td>
1477
+ </tr>
1478
+ </tbody>
1479
+ </table>
1480
+ </div>`;
1481
+ calendarEl.parentNode.replaceChild(newCalendar, calendarEl);
1482
+
1483
+ statusEl.textContent = `Showing years ${yearToChunk} to ${
1484
+ yearToChunk + YEAR_CHUNK - 1
1485
+ }. Select a year.`;
1486
+
1487
+ return newCalendar;
1488
+ };
1489
+
1490
+ /**
1491
+ * Navigate back by years and display the year selection screen.
1492
+ *
1493
+ * @param {HTMLButtonElement} el An element within the date picker component
1494
+ */
1495
+ const displayPreviousYearChunk = (el) => {
1496
+ if (el.disabled) return;
1497
+
1498
+ const { calendarEl, calendarDate, minDate, maxDate } = getDatePickerContext(
1499
+ el
1500
+ );
1501
+ const yearEl = calendarEl.querySelector(CALENDAR_YEAR_FOCUSED);
1502
+ const selectedYear = parseInt(yearEl.textContent, 10);
1503
+
1504
+ let adjustedYear = selectedYear - YEAR_CHUNK;
1505
+ adjustedYear = Math.max(0, adjustedYear);
1506
+
1507
+ const date = setYear(calendarDate, adjustedYear);
1508
+ const cappedDate = keepDateBetweenMinAndMax(date, minDate, maxDate);
1509
+ const newCalendar = displayYearSelection(
1510
+ calendarEl,
1511
+ cappedDate.getFullYear()
1512
+ );
1513
+
1514
+ let nextToFocus = newCalendar.querySelector(CALENDAR_PREVIOUS_YEAR_CHUNK);
1515
+ if (nextToFocus.disabled) {
1516
+ nextToFocus = newCalendar.querySelector(CALENDAR_YEAR_PICKER);
1517
+ }
1518
+ nextToFocus.focus();
1519
+ };
1520
+
1521
+ /**
1522
+ * Navigate forward by years and display the year selection screen.
1523
+ *
1524
+ * @param {HTMLButtonElement} el An element within the date picker component
1525
+ */
1526
+ const displayNextYearChunk = (el) => {
1527
+ if (el.disabled) return;
1528
+
1529
+ const { calendarEl, calendarDate, minDate, maxDate } = getDatePickerContext(
1530
+ el
1531
+ );
1532
+ const yearEl = calendarEl.querySelector(CALENDAR_YEAR_FOCUSED);
1533
+ const selectedYear = parseInt(yearEl.textContent, 10);
1534
+
1535
+ let adjustedYear = selectedYear + YEAR_CHUNK;
1536
+ adjustedYear = Math.max(0, adjustedYear);
1537
+
1538
+ const date = setYear(calendarDate, adjustedYear);
1539
+ const cappedDate = keepDateBetweenMinAndMax(date, minDate, maxDate);
1540
+ const newCalendar = displayYearSelection(
1541
+ calendarEl,
1542
+ cappedDate.getFullYear()
1543
+ );
1544
+
1545
+ let nextToFocus = newCalendar.querySelector(CALENDAR_NEXT_YEAR_CHUNK);
1546
+ if (nextToFocus.disabled) {
1547
+ nextToFocus = newCalendar.querySelector(CALENDAR_YEAR_PICKER);
1548
+ }
1549
+ nextToFocus.focus();
1550
+ };
1551
+
1552
+ /**
1553
+ * Select a year in the date picker component.
1554
+ *
1555
+ * @param {HTMLButtonElement} yearEl A year element within the date picker component
1556
+ */
1557
+ const selectYear = (yearEl) => {
1558
+ if (yearEl.disabled) return;
1559
+ const { calendarEl, calendarDate, minDate, maxDate } = getDatePickerContext(
1560
+ yearEl
1561
+ );
1562
+ const selectedYear = parseInt(yearEl.innerHTML, 10);
1563
+ let date = setYear(calendarDate, selectedYear);
1564
+ date = keepDateBetweenMinAndMax(date, minDate, maxDate);
1565
+ const newCalendar = renderCalendar(calendarEl, date);
1566
+ newCalendar.querySelector(CALENDAR_DATE_FOCUSED).focus();
1567
+ };
1568
+
1569
+ // #endregion Calendar - Year Selection View
1570
+
1571
+ // #region Calendar Event Handling
1572
+
1573
+ /**
1574
+ * Hide the calendar.
1575
+ *
1576
+ * @param {KeyboardEvent} event the keydown event
1577
+ */
1578
+ const handleEscapeFromCalendar = (event) => {
1579
+ const { datePickerEl, externalInputEl } = getDatePickerContext(event.target);
1580
+
1581
+ hideCalendar(datePickerEl);
1582
+ externalInputEl.focus();
1583
+
1584
+ event.preventDefault();
1585
+ };
1586
+
1587
+ // #endregion Calendar Event Handling
1588
+
1589
+ // #region Calendar Date Event Handling
1590
+
1591
+ /**
1592
+ * Adjust the date and display the calendar if needed.
1593
+ *
1594
+ * @param {function} adjustDateFn function that returns the adjusted date
1595
+ */
1596
+ const adjustCalendar = (adjustDateFn) => {
1597
+ return (event) => {
1598
+ const { calendarEl, calendarDate, minDate, maxDate } = getDatePickerContext(
1599
+ event.target
1600
+ );
1601
+
1602
+ const date = adjustDateFn(calendarDate);
1603
+
1604
+ const cappedDate = keepDateBetweenMinAndMax(date, minDate, maxDate);
1605
+ if (!isSameDay(calendarDate, cappedDate)) {
1606
+ const newCalendar = renderCalendar(calendarEl, cappedDate);
1607
+ newCalendar.querySelector(CALENDAR_DATE_FOCUSED).focus();
1608
+ }
1609
+ event.preventDefault();
1610
+ };
1611
+ };
1612
+
1613
+ /**
1614
+ * Navigate back one week and display the calendar.
1615
+ *
1616
+ * @param {KeyboardEvent} event the keydown event
1617
+ */
1618
+ const handleUpFromDate = adjustCalendar((date) => subWeeks(date, 1));
1619
+
1620
+ /**
1621
+ * Navigate forward one week and display the calendar.
1622
+ *
1623
+ * @param {KeyboardEvent} event the keydown event
1624
+ */
1625
+ const handleDownFromDate = adjustCalendar((date) => addWeeks(date, 1));
1626
+
1627
+ /**
1628
+ * Navigate back one day and display the calendar.
1629
+ *
1630
+ * @param {KeyboardEvent} event the keydown event
1631
+ */
1632
+ const handleLeftFromDate = adjustCalendar((date) => subDays(date, 1));
1633
+
1634
+ /**
1635
+ * Navigate forward one day and display the calendar.
1636
+ *
1637
+ * @param {KeyboardEvent} event the keydown event
1638
+ */
1639
+ const handleRightFromDate = adjustCalendar((date) => addDays(date, 1));
1640
+
1641
+ /**
1642
+ * Navigate to the start of the week and display the calendar.
1643
+ *
1644
+ * @param {KeyboardEvent} event the keydown event
1645
+ */
1646
+ const handleHomeFromDate = adjustCalendar((date) => startOfWeek(date));
1647
+
1648
+ /**
1649
+ * Navigate to the end of the week and display the calendar.
1650
+ *
1651
+ * @param {KeyboardEvent} event the keydown event
1652
+ */
1653
+ const handleEndFromDate = adjustCalendar((date) => endOfWeek(date));
1654
+
1655
+ /**
1656
+ * Navigate forward one month and display the calendar.
1657
+ *
1658
+ * @param {KeyboardEvent} event the keydown event
1659
+ */
1660
+ const handlePageDownFromDate = adjustCalendar((date) => addMonths(date, 1));
1661
+
1662
+ /**
1663
+ * Navigate back one month and display the calendar.
1664
+ *
1665
+ * @param {KeyboardEvent} event the keydown event
1666
+ */
1667
+ const handlePageUpFromDate = adjustCalendar((date) => subMonths(date, 1));
1668
+
1669
+ /**
1670
+ * Navigate forward one year and display the calendar.
1671
+ *
1672
+ * @param {KeyboardEvent} event the keydown event
1673
+ */
1674
+ const handleShiftPageDownFromDate = adjustCalendar((date) => addYears(date, 1));
1675
+
1676
+ /**
1677
+ * Navigate back one year and display the calendar.
1678
+ *
1679
+ * @param {KeyboardEvent} event the keydown event
1680
+ */
1681
+ const handleShiftPageUpFromDate = adjustCalendar((date) => subYears(date, 1));
1682
+
1683
+ /**
1684
+ * display the calendar for the mousemove date.
1685
+ *
1686
+ * @param {MouseEvent} event The mousemove event
1687
+ * @param {HTMLButtonElement} dateEl A date element within the date picker component
1688
+ */
1689
+ const handleMousemoveFromDate = (dateEl) => {
1690
+ if (dateEl.disabled) return;
1691
+
1692
+ const calendarEl = dateEl.closest(DATE_PICKER_CALENDAR);
1693
+
1694
+ const currentCalendarDate = calendarEl.dataset.value;
1695
+ const hoverDate = dateEl.dataset.value;
1696
+
1697
+ if (hoverDate === currentCalendarDate) return;
1698
+
1699
+ const dateToDisplay = parseDateString(hoverDate);
1700
+ const newCalendar = renderCalendar(calendarEl, dateToDisplay);
1701
+ newCalendar.querySelector(CALENDAR_DATE_FOCUSED).focus();
1702
+ };
1703
+
1704
+ // #endregion Calendar Date Event Handling
1705
+
1706
+ // #region Calendar Month Event Handling
1707
+
1708
+ /**
1709
+ * Adjust the month and display the month selection screen if needed.
1710
+ *
1711
+ * @param {function} adjustMonthFn function that returns the adjusted month
1712
+ */
1713
+ const adjustMonthSelectionScreen = (adjustMonthFn) => {
1714
+ return (event) => {
1715
+ const monthEl = event.target;
1716
+ const selectedMonth = parseInt(monthEl.dataset.value, 10);
1717
+ const { calendarEl, calendarDate, minDate, maxDate } = getDatePickerContext(
1718
+ monthEl
1719
+ );
1720
+ const currentDate = setMonth(calendarDate, selectedMonth);
1721
+
1722
+ let adjustedMonth = adjustMonthFn(selectedMonth);
1723
+ adjustedMonth = Math.max(0, Math.min(11, adjustedMonth));
1724
+
1725
+ const date = setMonth(calendarDate, adjustedMonth);
1726
+ const cappedDate = keepDateBetweenMinAndMax(date, minDate, maxDate);
1727
+ if (!isSameMonth(currentDate, cappedDate)) {
1728
+ const newCalendar = displayMonthSelection(
1729
+ calendarEl,
1730
+ cappedDate.getMonth()
1731
+ );
1732
+ newCalendar.querySelector(CALENDAR_MONTH_FOCUSED).focus();
1733
+ }
1734
+ event.preventDefault();
1735
+ };
1736
+ };
1737
+
1738
+ /**
1739
+ * Navigate back three months and display the month selection screen.
1740
+ *
1741
+ * @param {KeyboardEvent} event the keydown event
1742
+ */
1743
+ const handleUpFromMonth = adjustMonthSelectionScreen((month) => month - 3);
1744
+
1745
+ /**
1746
+ * Navigate forward three months and display the month selection screen.
1747
+ *
1748
+ * @param {KeyboardEvent} event the keydown event
1749
+ */
1750
+ const handleDownFromMonth = adjustMonthSelectionScreen((month) => month + 3);
1751
+
1752
+ /**
1753
+ * Navigate back one month and display the month selection screen.
1754
+ *
1755
+ * @param {KeyboardEvent} event the keydown event
1756
+ */
1757
+ const handleLeftFromMonth = adjustMonthSelectionScreen((month) => month - 1);
1758
+
1759
+ /**
1760
+ * Navigate forward one month and display the month selection screen.
1761
+ *
1762
+ * @param {KeyboardEvent} event the keydown event
1763
+ */
1764
+ const handleRightFromMonth = adjustMonthSelectionScreen((month) => month + 1);
1765
+
1766
+ /**
1767
+ * Navigate to the start of the row of months and display the month selection screen.
1768
+ *
1769
+ * @param {KeyboardEvent} event the keydown event
1770
+ */
1771
+ const handleHomeFromMonth = adjustMonthSelectionScreen(
1772
+ (month) => month - (month % 3)
1773
+ );
1774
+
1775
+ /**
1776
+ * Navigate to the end of the row of months and display the month selection screen.
1777
+ *
1778
+ * @param {KeyboardEvent} event the keydown event
1779
+ */
1780
+ const handleEndFromMonth = adjustMonthSelectionScreen(
1781
+ (month) => month + 2 - (month % 3)
1782
+ );
1783
+
1784
+ /**
1785
+ * Navigate to the last month (December) and display the month selection screen.
1786
+ *
1787
+ * @param {KeyboardEvent} event the keydown event
1788
+ */
1789
+ const handlePageDownFromMonth = adjustMonthSelectionScreen(() => 11);
1790
+
1791
+ /**
1792
+ * Navigate to the first month (January) and display the month selection screen.
1793
+ *
1794
+ * @param {KeyboardEvent} event the keydown event
1795
+ */
1796
+ const handlePageUpFromMonth = adjustMonthSelectionScreen(() => 0);
1797
+
1798
+ /**
1799
+ * update the focus on a month when the mouse moves.
1800
+ *
1801
+ * @param {MouseEvent} event The mousemove event
1802
+ * @param {HTMLButtonElement} monthEl A month element within the date picker component
1803
+ */
1804
+ const handleMousemoveFromMonth = (monthEl) => {
1805
+ if (monthEl.disabled) return;
1806
+ if (monthEl.classList.contains(CALENDAR_MONTH_FOCUSED_CLASS)) return;
1807
+
1808
+ const focusMonth = parseInt(monthEl.dataset.value, 10);
1809
+
1810
+ const newCalendar = displayMonthSelection(monthEl, focusMonth);
1811
+ newCalendar.querySelector(CALENDAR_MONTH_FOCUSED).focus();
1812
+ };
1813
+
1814
+ // #endregion Calendar Month Event Handling
1815
+
1816
+ // #region Calendar Year Event Handling
1817
+
1818
+ /**
1819
+ * Adjust the year and display the year selection screen if needed.
1820
+ *
1821
+ * @param {function} adjustYearFn function that returns the adjusted year
1822
+ */
1823
+ const adjustYearSelectionScreen = (adjustYearFn) => {
1824
+ return (event) => {
1825
+ const yearEl = event.target;
1826
+ const selectedYear = parseInt(yearEl.dataset.value, 10);
1827
+ const { calendarEl, calendarDate, minDate, maxDate } = getDatePickerContext(
1828
+ yearEl
1829
+ );
1830
+ const currentDate = setYear(calendarDate, selectedYear);
1831
+
1832
+ let adjustedYear = adjustYearFn(selectedYear);
1833
+ adjustedYear = Math.max(0, adjustedYear);
1834
+
1835
+ const date = setYear(calendarDate, adjustedYear);
1836
+ const cappedDate = keepDateBetweenMinAndMax(date, minDate, maxDate);
1837
+ if (!isSameYear(currentDate, cappedDate)) {
1838
+ const newCalendar = displayYearSelection(
1839
+ calendarEl,
1840
+ cappedDate.getFullYear()
1841
+ );
1842
+ newCalendar.querySelector(CALENDAR_YEAR_FOCUSED).focus();
1843
+ }
1844
+ event.preventDefault();
1845
+ };
1846
+ };
1847
+
1848
+ /**
1849
+ * Navigate back three years and display the year selection screen.
1850
+ *
1851
+ * @param {KeyboardEvent} event the keydown event
1852
+ */
1853
+ const handleUpFromYear = adjustYearSelectionScreen((year) => year - 3);
1854
+
1855
+ /**
1856
+ * Navigate forward three years and display the year selection screen.
1857
+ *
1858
+ * @param {KeyboardEvent} event the keydown event
1859
+ */
1860
+ const handleDownFromYear = adjustYearSelectionScreen((year) => year + 3);
1861
+
1862
+ /**
1863
+ * Navigate back one year and display the year selection screen.
1864
+ *
1865
+ * @param {KeyboardEvent} event the keydown event
1866
+ */
1867
+ const handleLeftFromYear = adjustYearSelectionScreen((year) => year - 1);
1868
+
1869
+ /**
1870
+ * Navigate forward one year and display the year selection screen.
1871
+ *
1872
+ * @param {KeyboardEvent} event the keydown event
1873
+ */
1874
+ const handleRightFromYear = adjustYearSelectionScreen((year) => year + 1);
1875
+
1876
+ /**
1877
+ * Navigate to the start of the row of years and display the year selection screen.
1878
+ *
1879
+ * @param {KeyboardEvent} event the keydown event
1880
+ */
1881
+ const handleHomeFromYear = adjustYearSelectionScreen(
1882
+ (year) => year - (year % 3)
1883
+ );
1884
+
1885
+ /**
1886
+ * Navigate to the end of the row of years and display the year selection screen.
1887
+ *
1888
+ * @param {KeyboardEvent} event the keydown event
1889
+ */
1890
+ const handleEndFromYear = adjustYearSelectionScreen(
1891
+ (year) => year + 2 - (year % 3)
1892
+ );
1893
+
1894
+ /**
1895
+ * Navigate to back 12 years and display the year selection screen.
1896
+ *
1897
+ * @param {KeyboardEvent} event the keydown event
1898
+ */
1899
+ const handlePageUpFromYear = adjustYearSelectionScreen(
1900
+ (year) => year - YEAR_CHUNK
1901
+ );
1902
+
1903
+ /**
1904
+ * Navigate forward 12 years and display the year selection screen.
1905
+ *
1906
+ * @param {KeyboardEvent} event the keydown event
1907
+ */
1908
+ const handlePageDownFromYear = adjustYearSelectionScreen(
1909
+ (year) => year + YEAR_CHUNK
1910
+ );
1911
+
1912
+ /**
1913
+ * update the focus on a year when the mouse moves.
1914
+ *
1915
+ * @param {MouseEvent} event The mousemove event
1916
+ * @param {HTMLButtonElement} dateEl A year element within the date picker component
1917
+ */
1918
+ const handleMousemoveFromYear = (yearEl) => {
1919
+ if (yearEl.disabled) return;
1920
+ if (yearEl.classList.contains(CALENDAR_YEAR_FOCUSED_CLASS)) return;
1921
+
1922
+ const focusYear = parseInt(yearEl.dataset.value, 10);
1923
+
1924
+ const newCalendar = displayYearSelection(yearEl, focusYear);
1925
+ newCalendar.querySelector(CALENDAR_YEAR_FOCUSED).focus();
1926
+ };
1927
+
1928
+ // #endregion Calendar Year Event Handling
1929
+
1930
+ // #region Focus Handling Event Handling
1931
+
1932
+ const tabHandler = (focusable) => {
1933
+ const getFocusableContext = (el) => {
1934
+ const { calendarEl } = getDatePickerContext(el);
1935
+ const focusableElements = select(focusable, calendarEl);
1936
+
1937
+ const firstTabIndex = 0;
1938
+ const lastTabIndex = focusableElements.length - 1;
1939
+ const firstTabStop = focusableElements[firstTabIndex];
1940
+ const lastTabStop = focusableElements[lastTabIndex];
1941
+ const focusIndex = focusableElements.indexOf(activeElement());
1942
+
1943
+ const isLastTab = focusIndex === lastTabIndex;
1944
+ const isFirstTab = focusIndex === firstTabIndex;
1945
+ const isNotFound = focusIndex === -1;
1946
+
1947
+ return {
1948
+ focusableElements,
1949
+ isNotFound,
1950
+ firstTabStop,
1951
+ isFirstTab,
1952
+ lastTabStop,
1953
+ isLastTab,
1954
+ };
1955
+ };
1956
+
1957
+ return {
1958
+ tabAhead(event) {
1959
+ const { firstTabStop, isLastTab, isNotFound } = getFocusableContext(
1960
+ event.target
1961
+ );
1962
+
1963
+ if (isLastTab || isNotFound) {
1964
+ event.preventDefault();
1965
+ firstTabStop.focus();
1966
+ }
1967
+ },
1968
+ tabBack(event) {
1969
+ const { lastTabStop, isFirstTab, isNotFound } = getFocusableContext(
1970
+ event.target
1971
+ );
1972
+
1973
+ if (isFirstTab || isNotFound) {
1974
+ event.preventDefault();
1975
+ lastTabStop.focus();
1976
+ }
1977
+ },
1978
+ };
1979
+ };
1980
+
1981
+ const datePickerTabEventHandler = tabHandler(DATE_PICKER_FOCUSABLE);
1982
+ const monthPickerTabEventHandler = tabHandler(MONTH_PICKER_FOCUSABLE);
1983
+ const yearPickerTabEventHandler = tabHandler(YEAR_PICKER_FOCUSABLE);
1984
+
1985
+ // #endregion Focus Handling Event Handling
1986
+
1987
+ // #region Date Picker Event Delegation Registration / Component
1988
+
1989
+ const datePickerEvents = {
1990
+ [CLICK]: {
1991
+ [DATE_PICKER_BUTTON]() {
1992
+ toggleCalendar(this);
1993
+ },
1994
+ [CALENDAR_DATE]() {
1995
+ selectDate(this);
1996
+ },
1997
+ [CALENDAR_MONTH]() {
1998
+ selectMonth(this);
1999
+ },
2000
+ [CALENDAR_YEAR]() {
2001
+ selectYear(this);
2002
+ },
2003
+ [CALENDAR_PREVIOUS_MONTH]() {
2004
+ displayPreviousMonth(this);
2005
+ },
2006
+ [CALENDAR_NEXT_MONTH]() {
2007
+ displayNextMonth(this);
2008
+ },
2009
+ [CALENDAR_PREVIOUS_YEAR]() {
2010
+ displayPreviousYear(this);
2011
+ },
2012
+ [CALENDAR_NEXT_YEAR]() {
2013
+ displayNextYear(this);
2014
+ },
2015
+ [CALENDAR_PREVIOUS_YEAR_CHUNK]() {
2016
+ displayPreviousYearChunk(this);
2017
+ },
2018
+ [CALENDAR_NEXT_YEAR_CHUNK]() {
2019
+ displayNextYearChunk(this);
2020
+ },
2021
+ [CALENDAR_MONTH_SELECTION]() {
2022
+ const newCalendar = displayMonthSelection(this);
2023
+ newCalendar.querySelector(CALENDAR_MONTH_FOCUSED).focus();
2024
+ },
2025
+ [CALENDAR_YEAR_SELECTION]() {
2026
+ const newCalendar = displayYearSelection(this);
2027
+ newCalendar.querySelector(CALENDAR_YEAR_FOCUSED).focus();
2028
+ },
2029
+ },
2030
+ keyup: {
2031
+ [DATE_PICKER_CALENDAR](event) {
2032
+ const keydown = this.dataset.keydownKeyCode;
2033
+ if (`${event.keyCode}` !== keydown) {
2034
+ event.preventDefault();
2035
+ }
2036
+ },
2037
+ },
2038
+ keydown: {
2039
+ [DATE_PICKER_EXTERNAL_INPUT](event) {
2040
+ if (event.keyCode === ENTER_KEYCODE) {
2041
+ validateDateInput(this);
2042
+ }
2043
+ },
2044
+ [CALENDAR_DATE]: keymap({
2045
+ Up: handleUpFromDate,
2046
+ ArrowUp: handleUpFromDate,
2047
+ Down: handleDownFromDate,
2048
+ ArrowDown: handleDownFromDate,
2049
+ Left: handleLeftFromDate,
2050
+ ArrowLeft: handleLeftFromDate,
2051
+ Right: handleRightFromDate,
2052
+ ArrowRight: handleRightFromDate,
2053
+ Home: handleHomeFromDate,
2054
+ End: handleEndFromDate,
2055
+ PageDown: handlePageDownFromDate,
2056
+ PageUp: handlePageUpFromDate,
2057
+ "Shift+PageDown": handleShiftPageDownFromDate,
2058
+ "Shift+PageUp": handleShiftPageUpFromDate,
2059
+ }),
2060
+ [CALENDAR_DATE_PICKER]: keymap({
2061
+ Tab: datePickerTabEventHandler.tabAhead,
2062
+ "Shift+Tab": datePickerTabEventHandler.tabBack,
2063
+ }),
2064
+ [CALENDAR_MONTH]: keymap({
2065
+ Up: handleUpFromMonth,
2066
+ ArrowUp: handleUpFromMonth,
2067
+ Down: handleDownFromMonth,
2068
+ ArrowDown: handleDownFromMonth,
2069
+ Left: handleLeftFromMonth,
2070
+ ArrowLeft: handleLeftFromMonth,
2071
+ Right: handleRightFromMonth,
2072
+ ArrowRight: handleRightFromMonth,
2073
+ Home: handleHomeFromMonth,
2074
+ End: handleEndFromMonth,
2075
+ PageDown: handlePageDownFromMonth,
2076
+ PageUp: handlePageUpFromMonth,
2077
+ }),
2078
+ [CALENDAR_MONTH_PICKER]: keymap({
2079
+ Tab: monthPickerTabEventHandler.tabAhead,
2080
+ "Shift+Tab": monthPickerTabEventHandler.tabBack,
2081
+ }),
2082
+ [CALENDAR_YEAR]: keymap({
2083
+ Up: handleUpFromYear,
2084
+ ArrowUp: handleUpFromYear,
2085
+ Down: handleDownFromYear,
2086
+ ArrowDown: handleDownFromYear,
2087
+ Left: handleLeftFromYear,
2088
+ ArrowLeft: handleLeftFromYear,
2089
+ Right: handleRightFromYear,
2090
+ ArrowRight: handleRightFromYear,
2091
+ Home: handleHomeFromYear,
2092
+ End: handleEndFromYear,
2093
+ PageDown: handlePageDownFromYear,
2094
+ PageUp: handlePageUpFromYear,
2095
+ }),
2096
+ [CALENDAR_YEAR_PICKER]: keymap({
2097
+ Tab: yearPickerTabEventHandler.tabAhead,
2098
+ "Shift+Tab": yearPickerTabEventHandler.tabBack,
2099
+ }),
2100
+ [DATE_PICKER_CALENDAR](event) {
2101
+ this.dataset.keydownKeyCode = event.keyCode;
2102
+ },
2103
+ [DATE_PICKER](event) {
2104
+ const keyMap = keymap({
2105
+ Escape: handleEscapeFromCalendar,
2106
+ });
2107
+
2108
+ keyMap(event);
2109
+ },
2110
+ },
2111
+ focusout: {
2112
+ [DATE_PICKER_EXTERNAL_INPUT]() {
2113
+ validateDateInput(this);
2114
+ },
2115
+ [DATE_PICKER](event) {
2116
+ if (!this.contains(event.relatedTarget)) {
2117
+ hideCalendar(this);
2118
+ }
2119
+ },
2120
+ },
2121
+ input: {
2122
+ [DATE_PICKER_EXTERNAL_INPUT]() {
2123
+ reconcileInputValues(this);
2124
+ updateCalendarIfVisible(this);
2125
+ },
2126
+ },
2127
+ };
2128
+
2129
+ if (!isIosDevice()) {
2130
+ datePickerEvents.mousemove = {
2131
+ [CALENDAR_DATE_CURRENT_MONTH]() {
2132
+ handleMousemoveFromDate(this);
2133
+ },
2134
+ [CALENDAR_MONTH]() {
2135
+ handleMousemoveFromMonth(this);
2136
+ },
2137
+ [CALENDAR_YEAR]() {
2138
+ handleMousemoveFromYear(this);
2139
+ },
2140
+ };
2141
+ }
2142
+
2143
+ const datePicker = behavior(datePickerEvents, {
2144
+ init(root) {
2145
+ select(DATE_PICKER, root).forEach((datePickerEl) => {
2146
+ if(!datePickerEl.classList.contains(DATE_PICKER_INITIALIZED_CLASS)){
2147
+ enhanceDatePicker(datePickerEl);
2148
+ }
2149
+ });
2150
+ },
2151
+ getDatePickerContext,
2152
+ disable,
2153
+ enable,
2154
+ isDateInputInvalid,
2155
+ setCalendarValue,
2156
+ validateDateInput,
2157
+ renderCalendar,
2158
+ updateCalendarIfVisible,
2159
+ });
2160
+
2161
+ // #endregion Date Picker Event Delegation Registration / Component
2162
+
2163
+ module.exports = datePicker;