@fremtind/jokul 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/build/build-stats.html +1 -1
  2. package/build/cjs/components/card/Card.js +1 -1
  3. package/build/cjs/components/card/Card.js.map +1 -1
  4. package/build/cjs/components/card/CardImage.js +1 -1
  5. package/build/cjs/components/card/CardImage.js.map +1 -1
  6. package/build/cjs/components/card/index.js +1 -1
  7. package/build/cjs/components/icon/Icon.js.map +1 -1
  8. package/build/cjs/components/index.js +1 -1
  9. package/build/cjs/components/link/Link.js.map +1 -1
  10. package/build/cjs/components/link/NavLink.js.map +1 -1
  11. package/build/cjs/components/link-list/LinkList.js.map +1 -1
  12. package/build/cjs/core/index.js +1 -1
  13. package/build/cjs/core/tokens.js +1 -1
  14. package/build/cjs/core/tokens.js.map +1 -1
  15. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeight.js +1 -1
  16. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeight.js.map +1 -1
  17. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeightBetween.js +1 -1
  18. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeightBetween.js.map +1 -1
  19. package/build/cjs/hooks/useAnimatedHeight/useAutoAnimateHeight.js +1 -1
  20. package/build/cjs/hooks/useAnimatedHeight/useAutoAnimateHeight.js.map +1 -1
  21. package/build/cjs/hooks/useScreen/useScreen.js +1 -1
  22. package/build/cjs/hooks/useScreen/useScreen.js.map +1 -1
  23. package/build/cjs/index.js +1 -1
  24. package/build/cjs/utilities/constants/index.js +2 -0
  25. package/build/cjs/utilities/constants/unicode.js +2 -0
  26. package/build/cjs/utilities/constants/unicode.js.map +1 -0
  27. package/build/cjs/utilities/formatters/avstand/formatAvstand.js +2 -0
  28. package/build/cjs/utilities/formatters/avstand/formatAvstand.js.map +1 -0
  29. package/build/cjs/utilities/formatters/bytes/formatBytes.js +2 -0
  30. package/build/cjs/utilities/formatters/bytes/formatBytes.js.map +1 -0
  31. package/build/cjs/utilities/formatters/date/formatDate.js +2 -0
  32. package/build/cjs/utilities/formatters/date/formatDate.js.map +1 -0
  33. package/build/cjs/utilities/formatters/fodselsnummer/formatFodselsnummer.js +2 -0
  34. package/build/cjs/utilities/formatters/fodselsnummer/formatFodselsnummer.js.map +1 -0
  35. package/build/cjs/utilities/formatters/index.js +2 -0
  36. package/build/cjs/utilities/formatters/kontonummer/formatKontonummer.js +2 -0
  37. package/build/cjs/utilities/formatters/kontonummer/formatKontonummer.js.map +1 -0
  38. package/build/cjs/utilities/formatters/kortnummer/formatKortnummer.js +2 -0
  39. package/build/cjs/utilities/formatters/kortnummer/formatKortnummer.js.map +1 -0
  40. package/build/cjs/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.js +2 -0
  41. package/build/cjs/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.js.map +1 -0
  42. package/build/cjs/utilities/formatters/telefonnummer/formatTelefonnummer.js +2 -0
  43. package/build/cjs/utilities/formatters/telefonnummer/formatTelefonnummer.js.map +1 -0
  44. package/build/cjs/utilities/formatters/util/formatNumber.js +2 -0
  45. package/build/cjs/utilities/formatters/util/formatNumber.js.map +1 -0
  46. package/build/cjs/utilities/formatters/util/parseNumber.js +2 -0
  47. package/build/cjs/utilities/formatters/util/parseNumber.js.map +1 -0
  48. package/build/cjs/utilities/formatters/util/registerWithMask.js +2 -0
  49. package/build/cjs/utilities/formatters/util/registerWithMask.js.map +1 -0
  50. package/build/cjs/utilities/formatters/valuta/formatValuta.js +2 -0
  51. package/build/cjs/utilities/formatters/valuta/formatValuta.js.map +1 -0
  52. package/build/cjs/utilities/index.js +2 -0
  53. package/build/cjs/utilities/index.js.map +1 -0
  54. package/build/cjs/utilities/polymorphism/SlotComponent.js +2 -0
  55. package/build/cjs/utilities/polymorphism/SlotComponent.js.map +1 -0
  56. package/build/cjs/utilities/polymorphism/index.js +2 -0
  57. package/build/cjs/utilities/polymorphism/index.js.map +1 -0
  58. package/build/cjs/utilities/polymorphism/mergeProps.js.map +1 -0
  59. package/build/cjs/utilities/polymorphism/mergeRefs.js.map +1 -0
  60. package/build/cjs/utilities/tabListener.js.map +1 -0
  61. package/build/cjs/{core/utils/getValuePair.js → utilities/valuePair.js} +1 -1
  62. package/build/cjs/utilities/valuePair.js.map +1 -0
  63. package/build/components/card/Card.d.ts +1 -1
  64. package/build/components/card/CardImage.d.ts +1 -1
  65. package/build/components/icon/Icon.d.ts +1 -1
  66. package/build/components/index.d.ts +0 -1
  67. package/build/components/link/Link.d.ts +1 -1
  68. package/build/components/link/NavLink.d.ts +1 -1
  69. package/build/components/link-list/LinkList.d.ts +1 -1
  70. package/build/core/index.d.ts +1 -6
  71. package/build/core/tokens.d.ts +22 -1
  72. package/build/core/types.d.ts +4 -5
  73. package/build/es/components/card/Card.js +1 -1
  74. package/build/es/components/card/Card.js.map +1 -1
  75. package/build/es/components/card/CardImage.js +1 -1
  76. package/build/es/components/card/CardImage.js.map +1 -1
  77. package/build/es/components/card/index.js +1 -1
  78. package/build/es/components/icon/Icon.js.map +1 -1
  79. package/build/es/components/index.js +1 -1
  80. package/build/es/components/link/Link.js.map +1 -1
  81. package/build/es/components/link/NavLink.js.map +1 -1
  82. package/build/es/components/link-list/LinkList.js.map +1 -1
  83. package/build/es/core/index.js +1 -1
  84. package/build/es/core/tokens.js +1 -1
  85. package/build/es/core/tokens.js.map +1 -1
  86. package/build/es/hooks/useAnimatedHeight/useAnimatedHeight.js +1 -1
  87. package/build/es/hooks/useAnimatedHeight/useAnimatedHeight.js.map +1 -1
  88. package/build/es/hooks/useAnimatedHeight/useAnimatedHeightBetween.js +1 -1
  89. package/build/es/hooks/useAnimatedHeight/useAnimatedHeightBetween.js.map +1 -1
  90. package/build/es/hooks/useAnimatedHeight/useAutoAnimateHeight.js +1 -1
  91. package/build/es/hooks/useAnimatedHeight/useAutoAnimateHeight.js.map +1 -1
  92. package/build/es/hooks/useScreen/useScreen.js +1 -1
  93. package/build/es/hooks/useScreen/useScreen.js.map +1 -1
  94. package/build/es/index.js +1 -1
  95. package/build/es/utilities/constants/index.js +2 -0
  96. package/build/es/utilities/constants/index.js.map +1 -0
  97. package/build/es/utilities/constants/unicode.js +2 -0
  98. package/build/es/utilities/constants/unicode.js.map +1 -0
  99. package/build/es/utilities/formatters/avstand/formatAvstand.js +2 -0
  100. package/build/es/utilities/formatters/avstand/formatAvstand.js.map +1 -0
  101. package/build/es/utilities/formatters/bytes/formatBytes.js +2 -0
  102. package/build/es/utilities/formatters/bytes/formatBytes.js.map +1 -0
  103. package/build/es/utilities/formatters/date/formatDate.js +2 -0
  104. package/build/es/utilities/formatters/date/formatDate.js.map +1 -0
  105. package/build/es/utilities/formatters/fodselsnummer/formatFodselsnummer.js +2 -0
  106. package/build/es/utilities/formatters/fodselsnummer/formatFodselsnummer.js.map +1 -0
  107. package/build/es/utilities/formatters/index.js +2 -0
  108. package/build/es/utilities/formatters/index.js.map +1 -0
  109. package/build/es/utilities/formatters/kontonummer/formatKontonummer.js +2 -0
  110. package/build/es/utilities/formatters/kontonummer/formatKontonummer.js.map +1 -0
  111. package/build/es/utilities/formatters/kortnummer/formatKortnummer.js +2 -0
  112. package/build/es/utilities/formatters/kortnummer/formatKortnummer.js.map +1 -0
  113. package/build/es/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.js +2 -0
  114. package/build/es/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.js.map +1 -0
  115. package/build/es/utilities/formatters/telefonnummer/formatTelefonnummer.js +2 -0
  116. package/build/es/utilities/formatters/telefonnummer/formatTelefonnummer.js.map +1 -0
  117. package/build/es/utilities/formatters/util/formatNumber.js +2 -0
  118. package/build/es/utilities/formatters/util/formatNumber.js.map +1 -0
  119. package/build/es/utilities/formatters/util/parseNumber.js +2 -0
  120. package/build/es/utilities/formatters/util/parseNumber.js.map +1 -0
  121. package/build/es/utilities/formatters/util/registerWithMask.js +2 -0
  122. package/build/es/utilities/formatters/util/registerWithMask.js.map +1 -0
  123. package/build/es/utilities/formatters/valuta/formatValuta.js +2 -0
  124. package/build/es/utilities/formatters/valuta/formatValuta.js.map +1 -0
  125. package/build/es/utilities/index.js +2 -0
  126. package/build/es/utilities/index.js.map +1 -0
  127. package/build/es/utilities/polymorphism/SlotComponent.js +2 -0
  128. package/build/es/utilities/polymorphism/SlotComponent.js.map +1 -0
  129. package/build/es/utilities/polymorphism/index.js +2 -0
  130. package/build/es/utilities/polymorphism/index.js.map +1 -0
  131. package/build/es/utilities/polymorphism/mergeProps.js.map +1 -0
  132. package/build/es/utilities/polymorphism/mergeRefs.js.map +1 -0
  133. package/build/es/utilities/tabListener.js.map +1 -0
  134. package/build/es/{core/utils/getValuePair.js → utilities/valuePair.js} +1 -1
  135. package/build/es/utilities/valuePair.js.map +1 -0
  136. package/build/index-DfvUcA5T.js +2 -0
  137. package/build/index-DfvUcA5T.js.map +1 -0
  138. package/build/index-hKyqa1PH.cjs +2 -0
  139. package/build/index-hKyqa1PH.cjs.map +1 -0
  140. package/build/index.d.ts +1 -0
  141. package/build/utilities/constants/index.d.ts +2 -0
  142. package/build/utilities/constants/unicode.d.ts +13 -0
  143. package/build/utilities/formatters/avstand/formatAvstand.d.ts +23 -0
  144. package/build/utilities/formatters/bytes/formatBytes.d.ts +8 -0
  145. package/build/utilities/formatters/date/formatDate.d.ts +15 -0
  146. package/build/utilities/formatters/fodselsnummer/formatFodselsnummer.d.ts +15 -0
  147. package/build/utilities/formatters/index.d.ts +14 -0
  148. package/build/utilities/formatters/kontonummer/formatKontonummer.d.ts +16 -0
  149. package/build/utilities/formatters/kortnummer/formatKortnummer.d.ts +15 -0
  150. package/build/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.d.ts +15 -0
  151. package/build/utilities/formatters/telefonnummer/formatTelefonnummer.d.ts +18 -0
  152. package/build/utilities/formatters/util/formatNumber.d.ts +14 -0
  153. package/build/utilities/formatters/util/parseNumber.d.ts +6 -0
  154. package/build/utilities/formatters/util/registerWithMask.d.ts +42 -0
  155. package/build/utilities/formatters/valuta/formatValuta.d.ts +18 -0
  156. package/build/utilities/index.d.ts +5 -0
  157. package/build/utilities/polymorphism/index.d.ts +5 -0
  158. package/build/utilities/valuePair.d.ts +6 -0
  159. package/package.json +12 -7
  160. package/src/components/card/styles/_index.scss +1 -0
  161. package/src/components/card/styles/_info-card.scss +40 -0
  162. package/src/components/card/styles/_nav-card.scss +113 -0
  163. package/src/components/card/styles/_task-card.scss +55 -0
  164. package/src/components/card/styles/card.css +332 -0
  165. package/src/components/card/styles/card.min.css +1 -0
  166. package/src/components/card/styles/card.scss +99 -0
  167. package/src/components/icon/styles/icon.css +1 -1
  168. package/src/components/icon-button/styles/_index.scss +1 -0
  169. package/src/components/icon-button/styles/icon-button.css +98 -0
  170. package/src/components/icon-button/styles/icon-button.min.css +1 -0
  171. package/src/components/icon-button/styles/icon-button.scss +59 -0
  172. package/src/components/image/styles/_index.scss +1 -0
  173. package/src/components/image/styles/image.css +30 -0
  174. package/src/components/image/styles/image.min.css +1 -0
  175. package/src/components/image/styles/image.scss +35 -0
  176. package/src/components/link/styles/link.css +1 -1
  177. package/src/components/link-list/styles/link-list.css +1 -1
  178. package/src/components/loader/styles/loader.css +7 -7
  179. package/src/components/loader/styles/loader.min.css +1 -1
  180. package/src/components/loader/styles/skeleton-loader.css +6 -6
  181. package/src/components/loader/styles/skeleton-loader.min.css +1 -1
  182. package/src/components/tag/styles/_index.scss +1 -0
  183. package/src/components/tag/styles/tag.css +71 -0
  184. package/src/components/tag/styles/tag.min.css +1 -0
  185. package/src/components/tag/styles/tag.scss +73 -0
  186. package/src/core/jkl/_legacy-tokens.scss +1 -1
  187. package/src/core/jkl/_tokens.scss +14 -1
  188. package/src/core/styles/_color-tokens.scss +1 -1
  189. package/src/core/styles/_legacy-tokens.scss +1 -1
  190. package/src/core/styles/_tokens.scss +1 -1
  191. package/src/core/styles/core.css +4 -4
  192. package/src/core/styles/vind.css +1 -1
  193. package/src/core/tokens.less +14 -1
  194. package/build/CardImage-DJa-zPsv.js +0 -2
  195. package/build/CardImage-DJa-zPsv.js.map +0 -1
  196. package/build/CardImage-DsKh2g4S.cjs +0 -2
  197. package/build/CardImage-DsKh2g4S.cjs.map +0 -1
  198. package/build/cjs/components/SlotComponent.js +0 -2
  199. package/build/cjs/components/SlotComponent.js.map +0 -1
  200. package/build/cjs/core/utils/breakpoints.js +0 -2
  201. package/build/cjs/core/utils/breakpoints.js.map +0 -1
  202. package/build/cjs/core/utils/density.js +0 -2
  203. package/build/cjs/core/utils/density.js.map +0 -1
  204. package/build/cjs/core/utils/getValuePair.js.map +0 -1
  205. package/build/cjs/core/utils/index.js +0 -2
  206. package/build/cjs/core/utils/mergeProps.js.map +0 -1
  207. package/build/cjs/core/utils/mergeRefs.js.map +0 -1
  208. package/build/cjs/core/utils/motion.js +0 -2
  209. package/build/cjs/core/utils/motion.js.map +0 -1
  210. package/build/cjs/core/utils/tabListener.js.map +0 -1
  211. package/build/core/utils/breakpoints.d.ts +0 -6
  212. package/build/core/utils/density.d.ts +0 -1
  213. package/build/core/utils/getValuePair.d.ts +0 -2
  214. package/build/core/utils/index.d.ts +0 -8
  215. package/build/core/utils/motion.d.ts +0 -16
  216. package/build/es/components/SlotComponent.js +0 -2
  217. package/build/es/components/SlotComponent.js.map +0 -1
  218. package/build/es/core/utils/breakpoints.js +0 -2
  219. package/build/es/core/utils/breakpoints.js.map +0 -1
  220. package/build/es/core/utils/density.js +0 -2
  221. package/build/es/core/utils/density.js.map +0 -1
  222. package/build/es/core/utils/getValuePair.js.map +0 -1
  223. package/build/es/core/utils/index.js +0 -2
  224. package/build/es/core/utils/mergeProps.js.map +0 -1
  225. package/build/es/core/utils/mergeRefs.js.map +0 -1
  226. package/build/es/core/utils/motion.js +0 -2
  227. package/build/es/core/utils/motion.js.map +0 -1
  228. package/build/es/core/utils/tabListener.js.map +0 -1
  229. /package/build/cjs/{core/utils → utilities/constants}/index.js.map +0 -0
  230. /package/build/{es/core/utils → cjs/utilities/formatters}/index.js.map +0 -0
  231. /package/build/cjs/{core → utilities/polymorphism}/as-child.js +0 -0
  232. /package/build/cjs/{core → utilities/polymorphism}/as-child.js.map +0 -0
  233. /package/build/cjs/{core/utils → utilities/polymorphism}/mergeProps.js +0 -0
  234. /package/build/cjs/{core/utils → utilities/polymorphism}/mergeRefs.js +0 -0
  235. /package/build/cjs/{core → utilities/polymorphism}/polymorphism.js +0 -0
  236. /package/build/cjs/{core → utilities/polymorphism}/polymorphism.js.map +0 -0
  237. /package/build/cjs/{core/utils → utilities}/tabListener.js +0 -0
  238. /package/build/es/{core → utilities/polymorphism}/as-child.js +0 -0
  239. /package/build/es/{core → utilities/polymorphism}/as-child.js.map +0 -0
  240. /package/build/es/{core/utils → utilities/polymorphism}/mergeProps.js +0 -0
  241. /package/build/es/{core/utils → utilities/polymorphism}/mergeRefs.js +0 -0
  242. /package/build/es/{core → utilities/polymorphism}/polymorphism.js +0 -0
  243. /package/build/es/{core → utilities/polymorphism}/polymorphism.js.map +0 -0
  244. /package/build/es/{core/utils → utilities}/tabListener.js +0 -0
  245. /package/build/{components → utilities/polymorphism}/SlotComponent.d.ts +0 -0
  246. /package/build/{core → utilities/polymorphism}/as-child.d.ts +0 -0
  247. /package/build/{core/utils → utilities/polymorphism}/mergeProps.d.ts +0 -0
  248. /package/build/{core/utils → utilities/polymorphism}/mergeRefs.d.ts +0 -0
  249. /package/build/{core → utilities/polymorphism}/polymorphism.d.ts +0 -0
  250. /package/build/{core/utils → utilities}/tabListener.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registerWithMask.js","sources":["../../../../../src/utilities/formatters/util/registerWithMask.ts"],"sourcesContent":["import type { ChangeEvent, KeyboardEventHandler } from \"react\";\nimport type {\n FieldValues,\n Path,\n PathValue,\n RegisterOptions,\n UseFormRegisterReturn,\n UseFormReturn,\n} from \"react-hook-form\";\nimport { formatDateString } from \"../date/formatDate\";\nimport { formatFodselsnummer } from \"../fodselsnummer/formatFodselsnummer\";\nimport { formatKontonummer } from \"../kontonummer/formatKontonummer\";\nimport { formatKortnummer } from \"../kortnummer/formatKortnummer\";\nimport { formatOrganisasjonsnummer } from \"../organisasjonsnummer/formatOrganisasjonsnummer\";\nimport { formatTelefonnummer } from \"../telefonnummer/formatTelefonnummer\";\nimport { formatNumber } from \"./formatNumber\";\n\nconst formatters = {\n date: formatDateString,\n fodselsnummer: formatFodselsnummer,\n kortnummer: formatKortnummer,\n kontonummer: formatKontonummer,\n telefonnummer: formatTelefonnummer,\n number: formatNumber,\n organisasjonsnummer: formatOrganisasjonsnummer,\n};\nexport type Formatter = keyof typeof formatters;\n\nexport type RegisterWithMaskOptions<T extends FieldValues> = Omit<RegisterOptions<T>, \"setValueAs\">;\n\nconst registerWithMask =\n (formatter: Formatter) =>\n <T extends FieldValues>(form: UseFormReturn<T>, name: Path<T>, options?: RegisterWithMaskOptions<T>) => {\n let onKeyDownCaretPosition = 0;\n let onKeyDownKeyPressed = \"\";\n\n const setValueAs = (value: string) => value.replace(/\\s/g, \"\");\n const onChange = (event: ChangeEvent<HTMLInputElement>) => {\n options?.onChange?.(event);\n\n // save some values before event.target.value change\n let onChangeCaretPosition = 0;\n const inputLength = event.target.value.length;\n\n // type checking formalities\n if (event.target.selectionStart !== null) {\n onChangeCaretPosition = event.target.selectionStart;\n }\n\n form.setValue(name, formatters[formatter](event.target.value, { partial: true }) as PathValue<T, Path<T>>);\n\n let newPosition: number | null = null;\n\n if ([\"Delete\", \"Backspace\"].includes(onKeyDownKeyPressed)) {\n // handle removing content\n // calculate how much to move the caret, this also accounts for removing sections of text\n const delta = onKeyDownCaretPosition - onChangeCaretPosition;\n\n // calculate new caret position (- because we move backwards)\n newPosition = onKeyDownCaretPosition - delta;\n } else if (onChangeCaretPosition < event.target.value.length) {\n // handle adding content from inside the string\n // calculate how much to move the caret forwards\n const delta = event.target.value.length - inputLength;\n\n // calculate new caret position (+ because we move forwards)\n newPosition = onChangeCaretPosition + delta;\n }\n\n if (newPosition !== null) {\n event.target.setSelectionRange(newPosition, newPosition, undefined);\n }\n };\n\n const registerOptions: RegisterOptions<T, Path<T>> = {\n setValueAs,\n onChange,\n };\n if (options) {\n Object.assign(registerOptions, options);\n }\n const register = form.register(name, registerOptions);\n\n // save the caret position before the change occured\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if ((event.target as HTMLInputElement).selectionStart !== null) {\n onKeyDownCaretPosition = (event.target as HTMLInputElement).selectionStart as number;\n }\n onKeyDownKeyPressed = event.key;\n };\n\n // add onKeyDown event handler to the registered input\n const extra: Record<string, unknown> = {\n onKeyDown,\n };\n\n if (formatter === \"number\") {\n extra.align = \"right\"; // Se https://github.com/fremtind/jokul/pull/2898\n }\n\n return Object.assign(register, extra);\n };\n\n/** @deprecated Bruk `registerWithMasks` i stedet */\nexport const registerWithFodselsnummerMask = registerWithMask(\"fodselsnummer\");\n/** @deprecated Bruk `registerWithMasks` i stedet */\nexport const registerWithKortnummerMask = registerWithMask(\"kortnummer\");\n/** @deprecated Bruk `registerWithMasks` i stedet */\nexport const registerWithKontonummerMask = registerWithMask(\"kontonummer\");\n/** @deprecated Bruk `registerWithMasks` i stedet */\nexport const registerWithTelefonnummerMask = registerWithMask(\"telefonnummer\");\n\n/**\n * Hjelpefunksjon for React Hook Form som lar deg bruke formateringsfunksjonene i denne pakken som inputmasker.\n */\nexport const registerWithMasks = <T extends FieldValues>(form: UseFormReturn<T>) => ({\n registerWithFodselsnummerMask: (name: Path<T>, options?: RegisterWithMaskOptions<T>): UseFormRegisterReturn =>\n registerWithMask(\"fodselsnummer\")<T>(form, name, options),\n registerWithKortnummerMask: (name: Path<T>, options?: RegisterWithMaskOptions<T>): UseFormRegisterReturn =>\n registerWithMask(\"kortnummer\")<T>(form, name, options),\n registerWithKontonummerMask: (name: Path<T>, options?: RegisterWithMaskOptions<T>): UseFormRegisterReturn =>\n registerWithMask(\"kontonummer\")<T>(form, name, options),\n registerWithTelefonnummerMask: (name: Path<T>, options?: RegisterWithMaskOptions<T>): UseFormRegisterReturn =>\n registerWithMask(\"telefonnummer\")<T>(form, name, options),\n registerWithOrganisasjonsnummerMask: (name: Path<T>, options?: RegisterWithMaskOptions<T>): UseFormRegisterReturn =>\n registerWithMask(\"organisasjonsnummer\")<T>(form, name, options),\n registerWithDateMask: (name: Path<T>, options?: RegisterWithMaskOptions<T>): UseFormRegisterReturn =>\n registerWithMask(\"date\")<T>(form, name, options),\n registerWithNumber: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn & { align: \"right\" } =>\n registerWithMask(\"number\")<T>(form, name, options) as unknown as UseFormRegisterReturn & {\n align: \"right\";\n },\n});\n"],"names":["formatters","date","formatDateString","fodselsnummer","formatFodselsnummer","kortnummer","formatKortnummer","kontonummer","formatKontonummer","telefonnummer","formatTelefonnummer","number","formatNumber","organisasjonsnummer","formatOrganisasjonsnummer","registerWithMask","formatter","form","name","options","onKeyDownCaretPosition","onKeyDownKeyPressed","registerOptions","setValueAs","value","replace","onChange","event","_a","call","onChangeCaretPosition","inputLength","target","length","selectionStart","setValue","partial","newPosition","includes","setSelectionRange","Object","assign","register","extra","onKeyDown","key","align","registerWithFodselsnummerMask","registerWithKortnummerMask","registerWithKontonummerMask","registerWithTelefonnummerMask","registerWithMasks","registerWithOrganisasjonsnummerMask","registerWithDateMask","registerWithNumber"],"mappings":"mfAiBA,MAAMA,EAAa,CACfC,KAAMC,EACNC,cAAeC,EACfC,WAAYC,EACZC,YAAaC,EACbC,cAAeC,EACfC,OAAQC,EACRC,oBAAqBC,GAMnBC,EACDC,GACD,CAAwBC,EAAwBC,EAAeC,KACvDC,IAAAA,EAAyB,EACzBC,EAAsB,GAwC1B,MAAMC,EAA+C,CACjDC,WAvCgBC,GAAkBA,EAAMC,QAAQ,MAAO,IAwCvDC,SAvCcC,UACd,OAAAC,EAAA,MAAAT,OAAAA,EAAAA,EAASO,WAATE,EAAAC,KAAAV,EAAoBQ,GAGpB,IAAIG,EAAwB,EACtBC,MAAAA,EAAcJ,EAAMK,OAAOR,MAAMS,OAGH,OAAhCN,EAAMK,OAAOE,iBACbJ,EAAwBH,EAAMK,OAAOE,gBAGzCjB,EAAKkB,SAASjB,EAAMlB,EAAWgB,GAAWW,EAAMK,OAAOR,MAAO,CAAEY,SAAS,KAEzE,IAAIC,EAA6B,KAEjC,GAAI,CAAC,SAAU,aAAaC,SAASjB,GAAsB,CAMvDgB,EAAcjB,GAHAA,EAAyBU,EAIhC,MAAAA,GAAAA,EAAwBH,EAAMK,OAAOR,MAAMS,OAAQ,CAM1DI,EAAcP,GAHAH,EAAMK,OAAOR,MAAMS,OAASF,EAI9C,CAEoB,OAAhBM,GACAV,EAAMK,OAAOO,kBAAkBF,EAAaA,OAAa,EAAS,GAQtElB,GACOqB,OAAAC,OAAOnB,EAAiBH,GAEnC,MAAMuB,EAAWzB,EAAKyB,SAASxB,EAAMI,GAW/BqB,EAAiC,CACnCC,UATuDjB,IACG,OAArDA,EAAMK,OAA4BE,iBACnCd,EAA0BO,EAAMK,OAA4BE,gBAEhEb,EAAsBM,EAAMkB,GAAA,GAQ5B7B,MAAc,WAAdA,IACA2B,EAAMG,MAAQ,SAGXN,OAAOC,OAAOC,EAAUC,EAAK,EAI/BI,EAAgChC,EAAiB,iBAEjDiC,EAA6BjC,EAAiB,cAE9CkC,EAA8BlC,EAAiB,eAE/CmC,EAAgCnC,EAAiB,iBAKjDoC,EAA4ClC,IAA4B,CACjF8B,8BAA+B,CAAC7B,EAAeC,IAC3CJ,EAAiB,gBAAjBA,CAAqCE,EAAMC,EAAMC,GACrD6B,2BAA4B,CAAC9B,EAAeC,IACxCJ,EAAiB,aAAjBA,CAAkCE,EAAMC,EAAMC,GAClD8B,4BAA6B,CAAC/B,EAAeC,IACzCJ,EAAiB,cAAjBA,CAAmCE,EAAMC,EAAMC,GACnD+B,8BAA+B,CAAChC,EAAeC,IAC3CJ,EAAiB,gBAAjBA,CAAqCE,EAAMC,EAAMC,GACrDiC,oCAAqC,CAAClC,EAAeC,IACjDJ,EAAiB,sBAAjBA,CAA2CE,EAAMC,EAAMC,GAC3DkC,qBAAsB,CAACnC,EAAeC,IAClCJ,EAAiB,OAAjBA,CAA4BE,EAAMC,EAAMC,GAC5CmC,mBAAoB,CAChBpC,EACAC,IAEAJ,EAAiB,SAAjBA,CAA8BE,EAAMC,EAAMC"}
@@ -0,0 +1,2 @@
1
+ import{n as i}from"../../../../index-DfvUcA5T.js";import{formatNumber as r}from"../util/formatNumber.js";import{parseNumber as t}from"../util/parseNumber.js";const m={locale:"no-NB",minimumFractionDigits:0,maximumFractionDigits:2,suffix:"kr"};function n(n,o){const s=t(n);if(isNaN(s))return n.toString();const u=Number.isInteger(s)?{}:{minimumFractionDigits:2,maximumFractionDigits:2},a=void 0!==(null==o?void 0:o.suffix)?o.suffix:m.suffix,{prefix:e,...f}={...m,...u,...o},l=null!=e&&e.length?`${e}${i}`:"",c=null!=a&&a.length?`${i}${a}`:"";return`${l}${r(s,f)}${c}`}export{n as formatValuta};
2
+ //# sourceMappingURL=formatValuta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatValuta.js","sources":["../../../../../src/utilities/formatters/valuta/formatValuta.ts"],"sourcesContent":["import { unicode } from \"../../constants\";\nimport { formatNumber, FormatNumberOptions } from \"../util/formatNumber\";\nimport { parseNumber } from \"../util/parseNumber\";\n\ninterface FormatValutaOptions extends FormatNumberOptions {\n prefix?: string;\n /**\n * For å fjerne suffix, send inn en tom streng\n * @default \"kr\"\n */\n suffix?: string;\n}\n\nconst defaultOptions: FormatValutaOptions = {\n locale: \"no-NB\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n suffix: \"kr\",\n};\n\n/**\n * Formaterer et gitt tall som valuta. Som standard vises suffikset \"kr\" og tallet formateres med norsk lokalisasjon\n *\n * @param input Tallet som skal formateres til valuta\n * @param options Valgene fra formatNumber, pluss valg for prefix og suffix\n * @returns Formatert beløp\n */\nexport function formatValuta(input: string | number, options?: FormatValutaOptions) {\n const number = parseNumber(input);\n if (isNaN(number)) {\n return input.toString();\n }\n\n // Dersom tallet ikke er et heltall, pass på å alltid vise to desimaler\n // Antall desimaler kan i alle tilfeller overstyres via options\n const fractionOptions: Intl.NumberFormatOptions = Number.isInteger(number)\n ? {}\n : { minimumFractionDigits: 2, maximumFractionDigits: 2 };\n\n const suffix = options?.suffix !== undefined ? options.suffix : defaultOptions.suffix;\n const { prefix, ...formatOptions } = { ...defaultOptions, ...fractionOptions, ...options };\n\n const prefixString = prefix?.length ? `${prefix}${unicode.nbsp}` : \"\";\n const suffixString = suffix?.length ? `${unicode.nbsp}${suffix}` : \"\";\n const formattedNumber = formatNumber(number, formatOptions);\n\n return `${prefixString}${formattedNumber}${suffixString}`;\n}\n"],"names":["defaultOptions","locale","minimumFractionDigits","maximumFractionDigits","suffix","formatValuta","input","options","number","parseNumber","isNaN","toString","fractionOptions","Number","isInteger","prefix","formatOptions","prefixString","length","unicode.nbsp","suffixString","formatNumber"],"mappings":"8JAaA,MAAMA,EAAsC,CACxCC,OAAQ,QACRC,sBAAuB,EACvBC,sBAAuB,EACvBC,OAAQ,MAUI,SAAAC,EAAaC,EAAwBC,GAC3CC,MAAAA,EAASC,EAAYH,GACvB,GAAAI,MAAMF,GACN,OAAOF,EAAMK,WAKX,MAAAC,EAA4CC,OAAOC,UAAUN,GAC7D,GACA,CAAEN,sBAAuB,EAAGC,sBAAuB,GAEnDC,OAA6B,KAApB,MAAAG,OAAA,EAAAA,EAASH,QAAuBG,EAAQH,OAASJ,EAAeI,QACvEW,OAAAA,KAAWC,GAAkB,IAAKhB,KAAmBY,KAAoBL,GAE3EU,EAAe,MAAAF,GAAAA,EAAQG,OAAS,GAAGH,IAASI,IAAiB,GAC7DC,EAAe,MAAAhB,GAAAA,EAAQc,OAAS,GAAGC,IAAef,IAAW,GAGnE,MAAO,GAAGa,IAFcI,EAAab,EAAQQ,KAEFI,GAC/C"}
@@ -0,0 +1,2 @@
1
+ import{u as r}from"../../index-DfvUcA5T.js";import{formatNumber as m}from"./formatters/util/formatNumber.js";import{parseNumber as s}from"./formatters/util/parseNumber.js";import{registerWithFodselsnummerMask as a,registerWithKontonummerMask as t,registerWithKortnummerMask as o,registerWithMasks as e,registerWithTelefonnummerMask as f}from"./formatters/util/registerWithMask.js";import{formatAvstand as n}from"./formatters/avstand/formatAvstand.js";import{formatBytes as i}from"./formatters/bytes/formatBytes.js";import{formatDate as u}from"./formatters/date/formatDate.js";import{FODSELSNUMMER_REGEX as E,formatFodselsnummer as p}from"./formatters/fodselsnummer/formatFodselsnummer.js";import{ORGANISASJONSNUMMER_REGEX as M,formatOrganisasjonsnummer as l}from"./formatters/organisasjonsnummer/formatOrganisasjonsnummer.js";import{KONTONUMMER_REGEX as R,formatKontonummer as N}from"./formatters/kontonummer/formatKontonummer.js";import{KORTNUMMER_REGEX as g,formatKortnummer as j}from"./formatters/kortnummer/formatKortnummer.js";import{TELEFONNUMMER_REGEX as O,formatTelefonnummer as h}from"./formatters/telefonnummer/formatTelefonnummer.js";import{formatValuta as K}from"./formatters/valuta/formatValuta.js";import{mergeProps as d}from"./polymorphism/mergeProps.js";import{mergeRefs as k}from"./polymorphism/mergeRefs.js";import{SlotComponent as S}from"./polymorphism/SlotComponent.js";import{initTabListener as T}from"./tabListener.js";import{getValuePair as G}from"./valuePair.js";export{E as FODSELSNUMMER_REGEX,R as KONTONUMMER_REGEX,g as KORTNUMMER_REGEX,M as ORGANISASJONSNUMMER_REGEX,S as SlotComponent,O as TELEFONNUMMER_REGEX,n as formatAvstand,i as formatBytes,u as formatDate,p as formatFodselsnummer,N as formatKontonummer,j as formatKortnummer,m as formatNumber,l as formatOrganisasjonsnummer,h as formatTelefonnummer,K as formatValuta,G as getValuePair,T as initTabListener,d as mergeProps,k as mergeRefs,s as parseNumber,a as registerWithFodselsnummerMask,t as registerWithKontonummerMask,o as registerWithKortnummerMask,e as registerWithMasks,f as registerWithTelefonnummerMask,r as unicode};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import e from"react";import{mergeProps as r}from"./mergeProps.js";import{mergeRefs as n}from"./mergeRefs.js";const o=e.forwardRef((function({children:o,...t},m){if(e.isValidElement(o))return e.cloneElement(o,{...r(t,o.props),ref:n(m,o.ref)});if(e.Children.count(o)>1)throw new Error("Du kan kun bruke ett enkelt React-element som children i en komponent med asChild");return null}));export{o as SlotComponent};
2
+ //# sourceMappingURL=SlotComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlotComponent.js","sources":["../../../../src/utilities/polymorphism/SlotComponent.tsx"],"sourcesContent":["import React from \"react\";\nimport { mergeProps } from \"./mergeProps\";\nimport { mergeRefs } from \"./mergeRefs\";\n\nexport type SlotComponentProps = React.HTMLAttributes<HTMLElement> & {\n children: React.ReactElement | false | null;\n};\n\nexport const SlotComponent = React.forwardRef<HTMLElement, SlotComponentProps>(function SlotComponent(\n { children, ...slotProps },\n forwardedRef,\n) {\n if (React.isValidElement(children)) {\n return React.cloneElement(children as React.ReactElement, {\n ...mergeProps(slotProps, children.props),\n ref: mergeRefs(forwardedRef, (children as any).ref),\n });\n }\n\n if (React.Children.count(children) > 1) {\n throw new Error(\"Du kan kun bruke ett enkelt React-element som children i en komponent med asChild\");\n }\n\n return null;\n});\n"],"names":["SlotComponent","React","forwardRef","children","slotProps","forwardedRef","isValidElement","cloneElement","mergeProps","props","ref","mergeRefs","Children","count","Error"],"mappings":"6GAQa,MAAAA,EAAgBC,EAAMC,YAA4C,UACzEC,SAAAA,KAAaC,GACfC,GAEIJ,GAAAA,EAAMK,eAAeH,GACdF,OAAAA,EAAMM,aAAaJ,EAAgC,IACnDK,EAAWJ,EAAWD,EAASM,OAClCC,IAAKC,EAAUN,EAAeF,EAAiBO,OAIvD,GAAIT,EAAMW,SAASC,MAAMV,GAAY,EAC3B,MAAA,IAAIW,MAAM,qFAGb,OAAA,IACX"}
@@ -0,0 +1,2 @@
1
+ import{mergeProps as e}from"./mergeProps.js";import{mergeRefs as o}from"./mergeRefs.js";import{SlotComponent as r}from"./SlotComponent.js";export{r as SlotComponent,e as mergeProps,o as mergeRefs};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeProps.js","sources":["../../../../src/utilities/polymorphism/mergeProps.ts"],"sourcesContent":["export function mergeProps(baseProps: Record<string, any>, addedProps: Record<string, any>) {\n const overrides = { ...addedProps };\n\n for (const prop in addedProps) {\n const basePropValue = baseProps[prop];\n const addedPropValue = addedProps[prop];\n\n if (/^on[A-Z]/.test(prop)) {\n // Propen er en event handler. Slå sammen hvis\n // den finnes på både base og added\n if (basePropValue && addedPropValue) {\n overrides[prop] = (...args: unknown[]) => {\n addedPropValue(...args);\n basePropValue(...args);\n };\n } else if (basePropValue) {\n overrides[prop] = basePropValue;\n }\n }\n\n if (prop === \"style\") {\n overrides[prop] = { ...basePropValue, ...addedPropValue };\n }\n\n if (prop === \"className\") {\n overrides[prop] = [basePropValue, addedPropValue].filter(Boolean).join(\" \");\n }\n }\n\n return { ...baseProps, ...overrides };\n}\n"],"names":["mergeProps","baseProps","addedProps","overrides","prop","basePropValue","addedPropValue","test","args","filter","Boolean","join"],"mappings":"AAAgB,SAAAA,EAAWC,EAAgCC,GACjDC,MAAAA,EAAY,IAAKD,GAEvB,IAAA,MAAWE,KAAQF,EAAY,CACrB,MAAAG,EAAgBJ,EAAUG,GAC1BE,EAAiBJ,EAAWE,GAE9B,WAAWG,KAAKH,KAGZC,GAAiBC,EACPH,EAAAC,GAAQ,IAAII,KAClBF,KAAkBE,GAClBH,KAAiBG,EAAI,EAElBH,IACPF,EAAUC,GAAQC,IAIb,UAATD,IACAD,EAAUC,GAAQ,IAAKC,KAAkBC,IAGhC,cAATF,IACUD,EAAAC,GAAQ,CAACC,EAAeC,GAAgBG,OAAOC,SAASC,KAAK,KAE/E,CAEA,MAAO,IAAKV,KAAcE,EAC9B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeRefs.js","sources":["../../../../src/utilities/polymorphism/mergeRefs.ts"],"sourcesContent":["import React from \"react\";\n\nexport type PossibleRef<T> = React.LegacyRef<T> | undefined;\n\nexport function mergeRefs<T>(...possibleRefs: PossibleRef<T>[]): React.RefCallback<T> {\n return (instance) =>\n possibleRefs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(instance);\n } else if (ref !== null && ref !== undefined) {\n (ref as React.MutableRefObject<T | null>).current = instance;\n }\n });\n}\n"],"names":["mergeRefs","possibleRefs","instance","forEach","ref","current"],"mappings":"AAIO,SAASA,KAAgBC,GAC5B,OAAQC,GACJD,EAAaE,SAASC,IACC,mBAARA,EACPA,EAAIF,GACW,MAARE,IACNA,EAAyCC,QAAUH,EAAAA,GAGpE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabListener.js","sources":["../../../src/utilities/tabListener.ts"],"sourcesContent":["let mousenavigation = false;\nlet touchnavigation = false;\nlet touchEventFired = false;\n\nconst listeners = {\n mousedown: handleMouseDown as EventListener,\n keydown: handleKeydown as EventListener,\n touchstart: handleTouchStart as EventListener,\n};\n\nfunction removeAllListeners() {\n (Object.keys(listeners) as Array<keyof typeof listeners>).forEach((listenerType) => {\n document.removeEventListener(listenerType, listeners[listenerType]);\n });\n}\n\nfunction addListener(listenerType: keyof typeof listeners) {\n document.addEventListener(listenerType, listeners[listenerType]);\n}\n\nfunction handleMouseDown() {\n if (!mousenavigation && !touchEventFired) {\n mousenavigation = true;\n touchnavigation = false;\n const htmlElement = document.querySelector(\"html\");\n htmlElement?.setAttribute(\"data-mousenavigation\", \"true\");\n htmlElement?.removeAttribute(\"data-touchnavigation\");\n\n // Reset listeners\n removeAllListeners();\n addListener(\"touchstart\");\n addListener(\"keydown\");\n }\n}\n\nfunction handleKeydown(event: KeyboardEvent) {\n if (event.key === \"Tab\") {\n const htmlElement = document.querySelector(\"html\");\n removeAllListeners();\n htmlElement?.removeAttribute(\"data-mousenavigation\");\n htmlElement?.removeAttribute(\"data-touchnavigation\");\n mousenavigation = false;\n touchnavigation = false;\n\n // Reset listeners\n addListener(\"touchstart\");\n addListener(\"mousedown\");\n }\n}\n\nfunction handleTouchStart() {\n if (!touchnavigation) {\n mousenavigation = false;\n touchnavigation = true;\n const htmlElement = document.querySelector(\"html\");\n htmlElement?.setAttribute(\"data-touchnavigation\", \"true\");\n htmlElement?.removeAttribute(\"data-mousenavigation\");\n\n // Reset listeners\n removeAllListeners();\n addListener(\"touchstart\");\n addListener(\"keydown\");\n addListener(\"mousedown\");\n }\n\n // Most touch devices fire both touch and mouse events on touch (in that order)\n // see https://w3c.github.io/touch-events/#mouse-events\n // Set a check variable to avoid resetting the data-attribute:\n touchEventFired = true;\n setTimeout(() => {\n touchEventFired = false;\n }, 150); // Yes, it can take this long between the events\n}\n\nexport function initTabListener(): void {\n if (typeof document !== \"undefined\") {\n addListener(\"touchstart\");\n addListener(\"mousedown\");\n }\n}\n"],"names":["mousenavigation","touchnavigation","touchEventFired","listeners","mousedown","htmlElement","document","querySelector","setAttribute","removeAttribute","removeAllListeners","addListener","keydown","event","key","touchstart","setTimeout","Object","keys","forEach","listenerType","removeEventListener","addEventListener","initTabListener"],"mappings":"AAAA,IAAIA,GAAkB,EAClBC,GAAkB,EAClBC,GAAkB,EAEtB,MAAMC,EAAY,CACdC,UAeJ,WACQ,IAACJ,IAAoBE,EAAiB,CACpBF,GAAA,EACAC,GAAA,EACZI,MAAAA,EAAcC,SAASC,cAAc,QAC9B,MAAAF,GAAAA,EAAAG,aAAa,uBAAwB,QAClD,MAAAH,GAAAA,EAAaI,gBAAgB,wBAGVC,IACnBC,EAAY,cACZA,EAAY,UAChB,CACJ,EA3BIC,QA6BJ,SAAuBC,GACfA,GAAc,QAAdA,EAAMC,IAAe,CACfT,MAAAA,EAAcC,SAASC,cAAc,QACxBG,IACnB,MAAAL,GAAAA,EAAaI,gBAAgB,wBAC7B,MAAAJ,GAAAA,EAAaI,gBAAgB,wBACXT,GAAA,EACAC,GAAA,EAGlBU,EAAY,cACZA,EAAY,YAChB,CACJ,EAzCII,WA2CJ,WACI,IAAKd,EAAiB,CACAD,GAAA,EACAC,GAAA,EACZI,MAAAA,EAAcC,SAASC,cAAc,QAC9B,MAAAF,GAAAA,EAAAG,aAAa,uBAAwB,QAClD,MAAAH,GAAAA,EAAaI,gBAAgB,wBAGVC,IACnBC,EAAY,cACZA,EAAY,WACZA,EAAY,YAChB,CAKkBT,GAAA,EAClBc,YAAW,KACWd,GAAA,CAAA,GACnB,IACP,GA9DA,SAASQ,IACJO,OAAOC,KAAKf,GAA6CgB,SAASC,IAC/Dd,SAASe,oBAAoBD,EAAcjB,EAAUiB,GAAa,GAE1E,CAEA,SAAST,EAAYS,GACjBd,SAASgB,iBAAiBF,EAAcjB,EAAUiB,GACtD,CAwDO,SAASG,WACDjB,SAAa,MACpBK,EAAY,cACZA,EAAY,aAEpB"}
@@ -1,2 +1,2 @@
1
1
  function e(e){return"string"==typeof e?{value:e,label:e}:e}export{e as getValuePair};
2
- //# sourceMappingURL=getValuePair.js.map
2
+ //# sourceMappingURL=valuePair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valuePair.js","sources":["../../../src/utilities/valuePair.ts"],"sourcesContent":["export type ValuePair = {\n value: string;\n label: string;\n description?: string;\n};\n\nexport function getValuePair(item: string | ValuePair): ValuePair {\n return typeof item === \"string\" ? { value: item, label: item } : item;\n}\n"],"names":["getValuePair","item","value","label"],"mappings":"AAMO,SAASA,EAAaC,GAClB,MAAgB,iBAATA,EAAoB,CAAEC,MAAOD,EAAME,MAAOF,GAASA,CACrE"}
@@ -0,0 +1,2 @@
1
+ const R=" ",s=" ",a="‑",_="‑",A="­",O="­",e="©",N="↗",S="←",W="↑",E="→",o="↓",t="​",H=Object.freeze(Object.defineProperty({__proto__:null,COPYRIGHT:"©",DOWNWARDS_ARROW:"↓",LEFTWARDS_ARROW:"←",NON_BREAKING_HYPHEN:"‑",NON_BREAKING_SPACE:" ",NORTH_EAST_ARROW:"↗",RIGHTWARDS_ARROW:"→",SOFT_HYPHEN:"­",UPWARDS_ARROW:"↑",ZERO_WIDTH_SPACE:"​",nbhy:"‑",nbsp:" ",shy:"­"},Symbol.toStringTag,{value:"Module"}));export{e as C,o as D,S as L,R as N,E as R,A as S,W as U,t as Z,a,_ as b,N as c,s as n,O as s,H as u};
2
+ //# sourceMappingURL=index-DfvUcA5T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DfvUcA5T.js","sources":["../src/utilities/constants/unicode.ts"],"sourcesContent":["export const NON_BREAKING_SPACE = \"\\u00A0\";\nexport const nbsp = NON_BREAKING_SPACE;\nexport const NON_BREAKING_HYPHEN = \"\\u2011\";\nexport const nbhy = NON_BREAKING_HYPHEN;\nexport const SOFT_HYPHEN = \"\\u00AD\";\nexport const shy = SOFT_HYPHEN;\nexport const COPYRIGHT = \"\\u00A9\";\nexport const NORTH_EAST_ARROW = \"\\u2197\";\nexport const LEFTWARDS_ARROW = \"\\u2190\";\nexport const UPWARDS_ARROW = \"\\u2191\";\nexport const RIGHTWARDS_ARROW = \"\\u2192\";\nexport const DOWNWARDS_ARROW = \"\\u2193\";\nexport const ZERO_WIDTH_SPACE = \"\\u200B\";\n"],"names":["NON_BREAKING_SPACE","nbsp","NON_BREAKING_HYPHEN","nbhy","SOFT_HYPHEN","shy","COPYRIGHT","NORTH_EAST_ARROW","LEFTWARDS_ARROW","UPWARDS_ARROW","RIGHTWARDS_ARROW","DOWNWARDS_ARROW","ZERO_WIDTH_SPACE"],"mappings":"AAAO,MAAMA,EAAqB,IACrBC,EADqB,IAErBC,EAAsB,IACtBC,EADsB,IAEtBC,EAAc,IACdC,EADc,IAEdC,EAAY,IACZC,EAAmB,IACnBC,EAAkB,IAClBC,EAAgB,IAChBC,EAAmB,IACnBC,EAAkB,IAClBC,EAAmB,oEANP,oBAKM,oBAHA,wBANI,uBAFD,qBAOF,qBAGA,gBANL,kBAKE,qBAGG,SAVG,SAFD,QAIP"}
@@ -0,0 +1,2 @@
1
+ "use strict";const R=Object.freeze(Object.defineProperty({__proto__:null,COPYRIGHT:"©",DOWNWARDS_ARROW:"↓",LEFTWARDS_ARROW:"←",NON_BREAKING_HYPHEN:"‑",NON_BREAKING_SPACE:" ",NORTH_EAST_ARROW:"↗",RIGHTWARDS_ARROW:"→",SOFT_HYPHEN:"­",UPWARDS_ARROW:"↑",ZERO_WIDTH_SPACE:"​",nbhy:"‑",nbsp:" ",shy:"­"},Symbol.toStringTag,{value:"Module"}));exports.COPYRIGHT="©",exports.DOWNWARDS_ARROW="↓",exports.LEFTWARDS_ARROW="←",exports.NON_BREAKING_HYPHEN="‑",exports.NON_BREAKING_SPACE=" ",exports.NORTH_EAST_ARROW="↗",exports.RIGHTWARDS_ARROW="→",exports.SOFT_HYPHEN="­",exports.UPWARDS_ARROW="↑",exports.ZERO_WIDTH_SPACE="​",exports.nbhy="‑",exports.nbsp=" ",exports.shy="­",exports.unicode=R;
2
+ //# sourceMappingURL=index-hKyqa1PH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-hKyqa1PH.cjs","sources":["../src/utilities/constants/unicode.ts"],"sourcesContent":["export const NON_BREAKING_SPACE = \"\\u00A0\";\nexport const nbsp = NON_BREAKING_SPACE;\nexport const NON_BREAKING_HYPHEN = \"\\u2011\";\nexport const nbhy = NON_BREAKING_HYPHEN;\nexport const SOFT_HYPHEN = \"\\u00AD\";\nexport const shy = SOFT_HYPHEN;\nexport const COPYRIGHT = \"\\u00A9\";\nexport const NORTH_EAST_ARROW = \"\\u2197\";\nexport const LEFTWARDS_ARROW = \"\\u2190\";\nexport const UPWARDS_ARROW = \"\\u2191\";\nexport const RIGHTWARDS_ARROW = \"\\u2192\";\nexport const DOWNWARDS_ARROW = \"\\u2193\";\nexport const ZERO_WIDTH_SPACE = \"\\u200B\";\n"],"names":[],"mappings":"aAAO,sEAMkB,oBAKM,oBAHA,wBANI,uBAFD,qBAOF,qBAGA,gBANL,kBAKE,qBAGG,SAVG,SAFD,QAIP,6DAEF,4BAKM,4BAHA,gCANI,+BAFD,6BAOF,6BAGA,wBANL,0BAKE,6BAGG,iBAVG,iBAFD,gBAIP"}
package/build/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './components';
2
2
  export * from './core';
3
3
  export * from './hooks';
4
+ export * from './utilities';
@@ -0,0 +1,2 @@
1
+ import * as unicode from "./unicode";
2
+ export { unicode };
@@ -0,0 +1,13 @@
1
+ export declare const NON_BREAKING_SPACE = "\u00A0";
2
+ export declare const nbsp = "\u00A0";
3
+ export declare const NON_BREAKING_HYPHEN = "\u2011";
4
+ export declare const nbhy = "\u2011";
5
+ export declare const SOFT_HYPHEN = "\u00AD";
6
+ export declare const shy = "\u00AD";
7
+ export declare const COPYRIGHT = "\u00A9";
8
+ export declare const NORTH_EAST_ARROW = "\u2197";
9
+ export declare const LEFTWARDS_ARROW = "\u2190";
10
+ export declare const UPWARDS_ARROW = "\u2191";
11
+ export declare const RIGHTWARDS_ARROW = "\u2192";
12
+ export declare const DOWNWARDS_ARROW = "\u2193";
13
+ export declare const ZERO_WIDTH_SPACE = "\u200B";
@@ -0,0 +1,23 @@
1
+ import { FormatNumberOptions } from '../util/formatNumber';
2
+ export type LengthUnit = "kilometer" | "meter" | "decimeter" | "centimeter" | "millimeter" | "micrometer" | "nanometer" | "picometer" | "mile" | "yard" | "foot" | "inch" | "point";
3
+ export interface FormatAvstandOptions extends FormatNumberOptions {
4
+ /**
5
+ * Lengdeenheten som skal vises for tallet, f.eks. "kilometer" eller "foot".
6
+ * Hvis du _ikke_ ønsker å vise noen enhet bør du heller bruke `formatNumber` direkte.
7
+ *
8
+ * @default "kilometer"
9
+ */
10
+ unit?: LengthUnit;
11
+ /**
12
+ * Valgfritt suffiks som vises etter lengdeenheten. Ønsker du for eksempel
13
+ * å vise "km/år" kan du setter "kilometer" som `unit` og "/år" som `suffix`.
14
+ */
15
+ suffix?: string;
16
+ }
17
+ /**
18
+ * Formaterer en avstand med norsk locale på tallverdien.
19
+ * @param input Verdien som skal formateres
20
+ * @param options Lengdeenheten som skal vises for tallet, f.eks. "kilometer" eller "foot". Default: "kilometer". Kan også angi en valgfri suffix, f.eks. "/år".
21
+ * @returns Den formaterte verdien.
22
+ */
23
+ export declare function formatAvstand(input: string | number, options?: FormatAvstandOptions): string;
@@ -0,0 +1,8 @@
1
+ import { FormatNumberOptions } from '../util/formatNumber';
2
+ /**
3
+ * Formater et antall bytes som en lesbar verdi med enten KB eller MB som enhet.
4
+ * @param bytes Antall bytes som skal vises i lesbar form
5
+ * @param options Innstillinger for formateringen. Se https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options for detaljer.
6
+ * @returns Den formaterte verdien
7
+ */
8
+ export declare function formatBytes(bytes: number, options?: FormatNumberOptions): string;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Formaterer en dato med "dd.mm.yyyy"-format.
3
+ * @param date Verdien som skal formateres
4
+ * @returns Verdien i "dd.mm.yyyy"-format
5
+ */
6
+ export declare function formatDate(date: Date): string;
7
+ export declare const DATE_REGEX: {
8
+ full: RegExp;
9
+ partial: RegExp;
10
+ };
11
+ type FormatDateStringOptions = {
12
+ partial?: boolean;
13
+ };
14
+ export declare function formatDateString(input: string, options?: FormatDateStringOptions): string;
15
+ export {};
@@ -0,0 +1,15 @@
1
+ export declare const FODSELSNUMMER_REGEX: {
2
+ full: RegExp;
3
+ partial: RegExp;
4
+ };
5
+ type FormatFodselsnummerOptions = {
6
+ partial?: boolean;
7
+ };
8
+ /**
9
+ * Formaterer et fødselsnummer. Delene av fødselsnummeret skilles med non-breaking space.
10
+ * @param input Verdien som skal formateres
11
+ * @param options Angi at verdien er et ufullstendig fødselsnummer og likevel skal formateres.
12
+ * @returns Den formaterte verdien
13
+ */
14
+ export declare function formatFodselsnummer(input: string, options?: FormatFodselsnummerOptions): string;
15
+ export {};
@@ -0,0 +1,14 @@
1
+ export type { FormatNumberOptions } from './util/formatNumber';
2
+ export { formatNumber } from './util/formatNumber';
3
+ export { parseNumber } from './util/parseNumber';
4
+ export type { Formatter, RegisterWithMaskOptions } from './util/registerWithMask';
5
+ export { registerWithMasks, registerWithFodselsnummerMask, registerWithKontonummerMask, registerWithKortnummerMask, registerWithTelefonnummerMask, } from './util/registerWithMask';
6
+ export { formatAvstand } from './avstand/formatAvstand';
7
+ export { formatBytes } from './bytes/formatBytes';
8
+ export { formatDate } from './date/formatDate';
9
+ export { FODSELSNUMMER_REGEX, formatFodselsnummer } from './fodselsnummer/formatFodselsnummer';
10
+ export { ORGANISASJONSNUMMER_REGEX, formatOrganisasjonsnummer } from './organisasjonsnummer/formatOrganisasjonsnummer';
11
+ export { KONTONUMMER_REGEX, formatKontonummer } from './kontonummer/formatKontonummer';
12
+ export { KORTNUMMER_REGEX, formatKortnummer } from './kortnummer/formatKortnummer';
13
+ export { TELEFONNUMMER_REGEX, formatTelefonnummer } from './telefonnummer/formatTelefonnummer';
14
+ export { formatValuta } from './valuta/formatValuta';
@@ -0,0 +1,16 @@
1
+ export declare const KONTONUMMER_REGEX: {
2
+ full: RegExp;
3
+ partial: RegExp;
4
+ };
5
+ type FormatKontonummerOptions = {
6
+ partial?: boolean;
7
+ separator?: string;
8
+ };
9
+ /**
10
+ * Formaterer et kontonummer, med eller uten punktum som skilletegn. Default er med non-breaking space.
11
+ * @param input Verdien som skal formateres
12
+ * @param options Angi at verdien er et ufullstendig kontonummer og likevel skal formateres.
13
+ * @returns Den formaterte verdien
14
+ */
15
+ export declare function formatKontonummer(input: string, options?: FormatKontonummerOptions): string;
16
+ export {};
@@ -0,0 +1,15 @@
1
+ export declare const KORTNUMMER_REGEX: {
2
+ full: RegExp;
3
+ partial: RegExp;
4
+ };
5
+ type FormatKortnummerOptions = {
6
+ partial?: boolean;
7
+ };
8
+ /**
9
+ * Formaterer et kortnummer. Delene av kortnummeret skilles med non-breaking space.
10
+ * @param input Verdien som skal formateres
11
+ * @param options Angi at verdien er et ufullstendig kortnummer og likevel skal formateres.
12
+ * @returns Den formaterte verdien
13
+ */
14
+ export declare function formatKortnummer(input: string, options?: FormatKortnummerOptions): string;
15
+ export {};
@@ -0,0 +1,15 @@
1
+ export declare const ORGANISASJONSNUMMER_REGEX: {
2
+ full: RegExp;
3
+ partial: RegExp;
4
+ };
5
+ type FormatOrganisasjonsnummerOptions = {
6
+ partial?: boolean;
7
+ };
8
+ /**
9
+ * Formaterer et organisasjonsnummer. Delene av organisasjonsnummeret skilles med non-breaking space.
10
+ * @param input Verdien som skal formateres
11
+ * @param options Angi at verdien er et ufullstendig organisasjonsnummer og likevel skal formateres.
12
+ * @returns Den formaterte verdien
13
+ */
14
+ export declare function formatOrganisasjonsnummer(input: string, options?: FormatOrganisasjonsnummerOptions): string;
15
+ export {};
@@ -0,0 +1,18 @@
1
+ export declare const TELEFONNUMMER_REGEX: {
2
+ mobil: RegExp;
3
+ fast: RegExp;
4
+ mobilPartial: RegExp;
5
+ fastPartial: RegExp;
6
+ };
7
+ type FormatTelefonnummerOptions = {
8
+ partial?: boolean;
9
+ countryCode?: string;
10
+ };
11
+ /**
12
+ * Formaterer et telefonnummer etter språkrådets anbefalinger. Delene av telefonnummeret skilles med non-breaking space.
13
+ * @param input Verdien som skal formateres
14
+ * @param options Inkluder en valgfri landkode, eller angi at verdien er et ufullstendig telefonnummer og likevel skal formateres.
15
+ * @returns Den formatererte verdien
16
+ */
17
+ export declare function formatTelefonnummer(input: string, options?: FormatTelefonnummerOptions): string;
18
+ export {};
@@ -0,0 +1,14 @@
1
+ export interface FormatNumberOptions extends Intl.NumberFormatOptions {
2
+ /**
3
+ * Hvilken lokalisasjon tallet skal formateres med
4
+ * @default "no-NB"
5
+ */
6
+ locale?: string;
7
+ }
8
+ /**
9
+ * Formaterer et tall med norsk locale.
10
+ * @param input Verdien som skal formateres
11
+ * @param options Innstillinger for formateringen. Se https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options for detaljer.
12
+ * @returns Den formatererte verdien
13
+ */
14
+ export declare function formatNumber(input: string | number, options?: FormatNumberOptions): string;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Parser en formatert string til et Number.
3
+ * @param input Kandidaten som skal parses til et tall
4
+ * @returns Verdien som et Number
5
+ */
6
+ export declare function parseNumber(input: string | number): number;
@@ -0,0 +1,42 @@
1
+ import { FieldValues, Path, RegisterOptions, UseFormRegisterReturn, UseFormReturn } from 'react-hook-form';
2
+ import { formatDateString } from '../date/formatDate';
3
+ import { formatFodselsnummer } from '../fodselsnummer/formatFodselsnummer';
4
+ import { formatKontonummer } from '../kontonummer/formatKontonummer';
5
+ import { formatKortnummer } from '../kortnummer/formatKortnummer';
6
+ import { formatOrganisasjonsnummer } from '../organisasjonsnummer/formatOrganisasjonsnummer';
7
+ import { formatTelefonnummer } from '../telefonnummer/formatTelefonnummer';
8
+ import { formatNumber } from './formatNumber';
9
+ declare const formatters: {
10
+ date: typeof formatDateString;
11
+ fodselsnummer: typeof formatFodselsnummer;
12
+ kortnummer: typeof formatKortnummer;
13
+ kontonummer: typeof formatKontonummer;
14
+ telefonnummer: typeof formatTelefonnummer;
15
+ number: typeof formatNumber;
16
+ organisasjonsnummer: typeof formatOrganisasjonsnummer;
17
+ };
18
+ export type Formatter = keyof typeof formatters;
19
+ export type RegisterWithMaskOptions<T extends FieldValues> = Omit<RegisterOptions<T>, "setValueAs">;
20
+ /** @deprecated Bruk `registerWithMasks` i stedet */
21
+ export declare const registerWithFodselsnummerMask: <T extends FieldValues>(form: UseFormReturn<T>, name: Path<T>, options?: RegisterWithMaskOptions<T> | undefined) => UseFormRegisterReturn<Path<T>> & Record<string, unknown>;
22
+ /** @deprecated Bruk `registerWithMasks` i stedet */
23
+ export declare const registerWithKortnummerMask: <T extends FieldValues>(form: UseFormReturn<T>, name: Path<T>, options?: RegisterWithMaskOptions<T> | undefined) => UseFormRegisterReturn<Path<T>> & Record<string, unknown>;
24
+ /** @deprecated Bruk `registerWithMasks` i stedet */
25
+ export declare const registerWithKontonummerMask: <T extends FieldValues>(form: UseFormReturn<T>, name: Path<T>, options?: RegisterWithMaskOptions<T> | undefined) => UseFormRegisterReturn<Path<T>> & Record<string, unknown>;
26
+ /** @deprecated Bruk `registerWithMasks` i stedet */
27
+ export declare const registerWithTelefonnummerMask: <T extends FieldValues>(form: UseFormReturn<T>, name: Path<T>, options?: RegisterWithMaskOptions<T> | undefined) => UseFormRegisterReturn<Path<T>> & Record<string, unknown>;
28
+ /**
29
+ * Hjelpefunksjon for React Hook Form som lar deg bruke formateringsfunksjonene i denne pakken som inputmasker.
30
+ */
31
+ export declare const registerWithMasks: <T extends FieldValues>(form: UseFormReturn<T>) => {
32
+ registerWithFodselsnummerMask: (name: Path<T>, options?: RegisterWithMaskOptions<T> | undefined) => UseFormRegisterReturn;
33
+ registerWithKortnummerMask: (name: Path<T>, options?: RegisterWithMaskOptions<T> | undefined) => UseFormRegisterReturn;
34
+ registerWithKontonummerMask: (name: Path<T>, options?: RegisterWithMaskOptions<T> | undefined) => UseFormRegisterReturn;
35
+ registerWithTelefonnummerMask: (name: Path<T>, options?: RegisterWithMaskOptions<T> | undefined) => UseFormRegisterReturn;
36
+ registerWithOrganisasjonsnummerMask: (name: Path<T>, options?: RegisterWithMaskOptions<T> | undefined) => UseFormRegisterReturn;
37
+ registerWithDateMask: (name: Path<T>, options?: RegisterWithMaskOptions<T> | undefined) => UseFormRegisterReturn;
38
+ registerWithNumber: (name: Path<T>, options?: RegisterWithMaskOptions<T> | undefined) => UseFormRegisterReturn & {
39
+ align: "right";
40
+ };
41
+ };
42
+ export {};
@@ -0,0 +1,18 @@
1
+ import { FormatNumberOptions } from '../util/formatNumber';
2
+ interface FormatValutaOptions extends FormatNumberOptions {
3
+ prefix?: string;
4
+ /**
5
+ * For å fjerne suffix, send inn en tom streng
6
+ * @default "kr"
7
+ */
8
+ suffix?: string;
9
+ }
10
+ /**
11
+ * Formaterer et gitt tall som valuta. Som standard vises suffikset "kr" og tallet formateres med norsk lokalisasjon
12
+ *
13
+ * @param input Tallet som skal formateres til valuta
14
+ * @param options Valgene fra formatNumber, pluss valg for prefix og suffix
15
+ * @returns Formatert beløp
16
+ */
17
+ export declare function formatValuta(input: string | number, options?: FormatValutaOptions): string;
18
+ export {};
@@ -0,0 +1,5 @@
1
+ export * from './constants';
2
+ export * from './formatters';
3
+ export * from './polymorphism';
4
+ export * from './tabListener';
5
+ export * from './valuePair';
@@ -0,0 +1,5 @@
1
+ export type { AsChildProps } from './as-child';
2
+ export { mergeProps } from './mergeProps';
3
+ export { mergeRefs, type PossibleRef } from './mergeRefs';
4
+ export type { PolymorphicProps, PolymorphicPropsWithRef, PolymorphicRef } from './polymorphism';
5
+ export { SlotComponent, type SlotComponentProps } from './SlotComponent';
@@ -0,0 +1,6 @@
1
+ export type ValuePair = {
2
+ value: string;
3
+ label: string;
4
+ description?: string;
5
+ };
6
+ export declare function getValuePair(item: string | ValuePair): ValuePair;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fremtind/jokul",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -18,10 +18,14 @@
18
18
  "./src/core/styles",
19
19
  "./src/core/jkl",
20
20
  "./src/core/tokens.less",
21
+ "./src/components/card/styles",
21
22
  "./src/components/icon/styles",
23
+ "./src/components/icon-button/styles",
24
+ "./src/components/image/styles",
22
25
  "./src/components/link/styles",
23
26
  "./src/components/link-list/styles",
24
- "./src/components/loader/styles"
27
+ "./src/components/loader/styles",
28
+ "./src/components/tag/styles"
25
29
  ],
26
30
  "exports": {
27
31
  ".": {
@@ -41,10 +45,10 @@
41
45
  "require": "./build/cjs/hooks/index.js",
42
46
  "import": "./build/es/hooks/index.js"
43
47
  },
44
- "./utils": {
45
- "types": "./build/core/utils/index.d.ts",
46
- "require": "./build/cjs/core/utils/index.js",
47
- "import": "./build/es/core/utils/index.js"
48
+ "./utilities": {
49
+ "types": "./build/utilities/index.d.ts",
50
+ "require": "./build/cjs/utilities/index.js",
51
+ "import": "./build/es/utilities/index.js"
48
52
  },
49
53
  "./components": {
50
54
  "types": "./build/components/index.d.ts",
@@ -86,6 +90,7 @@
86
90
  "cssnano-preset-lite": "^3.0.0",
87
91
  "glob": "^11.0.0",
88
92
  "postcss": "^8.4.24",
93
+ "react-hook-form": "^7.44.3",
89
94
  "rollup-plugin-node-externals": "^7.1.3",
90
95
  "rollup-plugin-visualizer": "^5.12.0",
91
96
  "sass-embedded": "^1.78.0",
@@ -100,5 +105,5 @@
100
105
  "bugs": {
101
106
  "url": "https://github.com/fremtind/jokul/issues"
102
107
  },
103
- "gitHead": "3998d7c74bbfb356c58370c1e4ca018434458f3b"
108
+ "gitHead": "72cfad01e665672714cd20ea654f7f818f90dc71"
104
109
  }
@@ -0,0 +1 @@
1
+ @forward "card";
@@ -0,0 +1,40 @@
1
+ @use "../../../core/jkl";
2
+
3
+ @include jkl.comfortable-density-variables {
4
+ --jkl-info-card-content-wrapper-gap: #{jkl.$spacing-m};
5
+ @include jkl.declare-font-variables("jkl-info-card-title", "heading-2");
6
+ @include jkl.declare-font-variables("jkl-info-card-content", "body");
7
+ }
8
+
9
+ @include jkl.compact-density-variables {
10
+ --jkl-info-card-content-wrapper-gap: #{jkl.$spacing-s};
11
+ --jkl-info-card-title-font-size: var(--jkl-heading-4-font-size);
12
+ --jkl-info-card-title-line-height: var(--jkl-heading-4-line-height);
13
+ --jkl-info-card-title-font-weight: #{jkl.$typography-weight-normal};
14
+ @include jkl.declare-font-variables("jkl-info-card-content", "small");
15
+ }
16
+
17
+ .jkl-info-card {
18
+ box-sizing: border-box;
19
+
20
+ &__image {
21
+ width: 100%;
22
+ aspect-ratio: 3/2;
23
+ }
24
+
25
+ &__title {
26
+ @include jkl.use-font-variables("jkl-info-card-title");
27
+ }
28
+
29
+ &__content-wrapper {
30
+ @include jkl.use-font-variables("jkl-info-card-content");
31
+ gap: var(--jkl-info-card-content-wrapper-gap);
32
+ display: flex;
33
+ flex-direction: column;
34
+ align-items: flex-start;
35
+ }
36
+
37
+ @include jkl.forced-colors-mode {
38
+ border: jkl.rem(2px) solid CanvasText;
39
+ }
40
+ }
@@ -0,0 +1,113 @@
1
+ @use "../../../core/jkl";
2
+
3
+ @include jkl.light-mode-variables {
4
+ --jkl-nav-card-background: #{jkl.$color-hvit};
5
+ --jkl-nav-card-shadow: #{jkl.$shadow-navigation};
6
+ --jkl-nav-card-shadow--hover: #{jkl.$shadow-navigation--hover};
7
+ --jkl-nav-card-info-border-color: #{jkl.$color-svaberg};
8
+ }
9
+
10
+ @include jkl.dark-mode-variables {
11
+ --jkl-nav-card-background: #{jkl.$color-skifer};
12
+ --jkl-nav-card-shadow: none;
13
+ --jkl-nav-card-shadow--hover: none;
14
+ --jkl-nav-card-info-border-color: #{jkl.$color-stein};
15
+ }
16
+
17
+ @include jkl.comfortable-density-variables {
18
+ --jkl-nav-card-content-wrapper-gap: #{jkl.$spacing-m};
19
+ --jkl-nav-card-info-padding: #{jkl.$spacing-l} 0 0 0;
20
+ @include jkl.declare-font-variables("jkl-nav-card-link", "heading-2");
21
+ @include jkl.declare-font-variables("jkl-nav-card-content", "body");
22
+ }
23
+
24
+ @include jkl.compact-density-variables {
25
+ --jkl-nav-card-info-padding: #{jkl.$spacing-s} 0 0 0;
26
+ @include jkl.declare-font-variables("jkl-nav-card-content", "small");
27
+ }
28
+
29
+ .jkl-nav-card {
30
+ display: block;
31
+ box-sizing: border-box;
32
+ transform: translate3d(0, 0, 0);
33
+ text-decoration: none;
34
+ color: var(--jkl-color);
35
+ outline: 0;
36
+
37
+ border-radius: jkl.rem(4px);
38
+ overflow: hidden;
39
+ box-shadow: var(--jkl-nav-card-shadow);
40
+ background-color: var(--jkl-nav-card-background);
41
+
42
+ @include jkl.motion;
43
+ transition-property: box-shadow, transform;
44
+
45
+ &__image {
46
+ width: 100%;
47
+ aspect-ratio: 3/2;
48
+ }
49
+
50
+ &__content {
51
+ display: flex;
52
+ flex-direction: column;
53
+ align-items: flex-start;
54
+ gap: var(--jkl-nav-card-content-wrapper-gap);
55
+ @include jkl.use-font-variables("jkl-nav-card-content");
56
+ }
57
+
58
+ &__link {
59
+ @include jkl.use-font-variables("jkl-nav-card-link");
60
+ box-sizing: border-box;
61
+ position: relative;
62
+
63
+ &::after {
64
+ $_right-arrow: "\2192"; // unicode right arrow
65
+ @include jkl.decorative($content: $_right-arrow);
66
+ display: inline;
67
+ margin-left: -0.2em;
68
+ padding-left: 0.35em;
69
+ padding-right: 0.35em;
70
+ }
71
+
72
+ &[target="_blank"],
73
+ &--external {
74
+ &::after {
75
+ $_north-east-arrow: "\2197"; // unicode north east arrow (up/right)
76
+ @include jkl.decorative($content: $_north-east-arrow);
77
+ }
78
+ }
79
+ }
80
+
81
+ &__description {
82
+ @include jkl.use-font-variables("jkl-nav-card-content");
83
+ }
84
+
85
+ &__info {
86
+ border-top: jkl.rem(1px) solid var(--jkl-nav-card-info-border-color);
87
+ padding: var(--jkl-nav-card-info-padding);
88
+ @include jkl.text-style("small");
89
+ width: 100%;
90
+ }
91
+
92
+ &__tag-wrapper {
93
+ display: flex;
94
+ gap: jkl.$spacing-12 jkl.$spacing-24;
95
+ flex-wrap: wrap;
96
+ }
97
+
98
+ &:hover {
99
+ box-shadow: var(--jkl-nav-card-shadow--hover);
100
+ transform: translate3d(0, jkl.rem(-4px), 0);
101
+ }
102
+
103
+ @include jkl.keyboard-navigation {
104
+ &:focus {
105
+ outline: jkl.rem(2px) solid var(--jkl-color);
106
+ }
107
+ }
108
+
109
+ @include jkl.forced-colors-mode {
110
+ outline: revert;
111
+ border: jkl.rem(2px) solid LinkText;
112
+ }
113
+ }