@fremtind/jokul 5.0.0-next.8 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/build/build-stats.html +1 -1
  2. package/build/cjs/components/autosuggest/BaseAutosuggest.cjs +1 -1
  3. package/build/cjs/components/autosuggest/BaseAutosuggest.cjs.map +1 -1
  4. package/build/cjs/components/expander/Accordion.cjs +2 -0
  5. package/build/cjs/components/expander/Accordion.cjs.map +1 -0
  6. package/build/cjs/components/expander/Accordion.d.cts +2 -0
  7. package/build/cjs/components/expander/ExpandablePanel.cjs +1 -1
  8. package/build/cjs/components/expander/ExpandablePanel.cjs.map +1 -1
  9. package/build/cjs/components/expander/ExpandablePanelContent.cjs +1 -1
  10. package/build/cjs/components/expander/ExpandablePanelContent.cjs.map +1 -1
  11. package/build/cjs/components/expander/Expander.cjs +1 -1
  12. package/build/cjs/components/expander/Expander.cjs.map +1 -1
  13. package/build/cjs/components/expander/index.d.cts +1 -1
  14. package/build/cjs/components/expander/types.d.cts +5 -2
  15. package/build/cjs/components/icon/Icon.cjs +1 -1
  16. package/build/cjs/components/icon/Icon.cjs.map +1 -1
  17. package/build/cjs/components/icon/Icon.d.cts +2 -2
  18. package/build/cjs/components/icon/icons/GreenCheckIcon.cjs +1 -1
  19. package/build/cjs/components/icon/icons/GreenCheckIcon.cjs.map +1 -1
  20. package/build/cjs/components/icon/icons/GreenCheckIcon.d.cts +2 -3
  21. package/build/cjs/components/icon/icons/RedCrossIcon.cjs +1 -1
  22. package/build/cjs/components/icon/icons/RedCrossIcon.cjs.map +1 -1
  23. package/build/cjs/components/icon/icons/RedCrossIcon.d.cts +2 -3
  24. package/build/cjs/components/link-list/LinkList.cjs +1 -1
  25. package/build/cjs/components/link-list/LinkList.cjs.map +1 -1
  26. package/build/cjs/components/link-list/LinkList.d.cts +1 -1
  27. package/build/cjs/components/link-list/types.d.cts +1 -0
  28. package/build/cjs/components/number-input/NumberInput.cjs +2 -0
  29. package/build/cjs/components/number-input/NumberInput.cjs.map +1 -0
  30. package/build/cjs/components/number-input/NumberInput.d.cts +7 -0
  31. package/build/cjs/components/number-input/index.cjs +2 -0
  32. package/build/cjs/components/number-input/index.cjs.map +1 -0
  33. package/build/cjs/components/number-input/index.d.cts +2 -0
  34. package/build/cjs/components/number-input/types.cjs +2 -0
  35. package/build/cjs/components/number-input/types.cjs.map +1 -0
  36. package/build/cjs/components/number-input/types.d.cts +20 -0
  37. package/build/cjs/components/popover/Popover.cjs +1 -1
  38. package/build/cjs/components/popover/Popover.cjs.map +1 -1
  39. package/build/cjs/components/popover/types.d.cts +8 -1
  40. package/build/cjs/components/select/Select.cjs +1 -1
  41. package/build/cjs/components/select/Select.cjs.map +1 -1
  42. package/build/cjs/components/system-message/types.d.cts +7 -2
  43. package/build/cjs/hooks/useListNavigation/useListNavigation.cjs +1 -1
  44. package/build/cjs/hooks/useListNavigation/useListNavigation.cjs.map +1 -1
  45. package/build/cjs/hooks/useListNavigation/useListNavigation.d.cts +11 -2
  46. package/build/cjs/tokens.cjs +1 -1
  47. package/build/cjs/tokens.cjs.map +1 -1
  48. package/build/cjs/utilities/index.cjs +1 -1
  49. package/build/cjs/utilities/types.cjs +1 -1
  50. package/build/cjs/utilities/types.cjs.map +1 -1
  51. package/build/cjs/utilities/types.d.cts +2 -0
  52. package/build/es/components/autosuggest/BaseAutosuggest.js +1 -1
  53. package/build/es/components/autosuggest/BaseAutosuggest.js.map +1 -1
  54. package/build/es/components/datepicker/DatePicker.js +1 -1
  55. package/build/es/components/datepicker/internal/Calendar.js +1 -1
  56. package/build/es/components/datepicker/internal/useCalendar.js +1 -1
  57. package/build/es/components/datepicker/internal/utils.js +1 -1
  58. package/build/es/components/expander/Accordion.d.ts +2 -0
  59. package/build/es/components/expander/Accordion.js +2 -0
  60. package/build/es/components/expander/Accordion.js.map +1 -0
  61. package/build/es/components/expander/ExpandablePanel.js +1 -1
  62. package/build/es/components/expander/ExpandablePanel.js.map +1 -1
  63. package/build/es/components/expander/ExpandablePanelContent.js +1 -1
  64. package/build/es/components/expander/ExpandablePanelContent.js.map +1 -1
  65. package/build/es/components/expander/Expander.js +1 -1
  66. package/build/es/components/expander/Expander.js.map +1 -1
  67. package/build/es/components/expander/index.d.ts +1 -1
  68. package/build/es/components/expander/types.d.ts +5 -2
  69. package/build/es/components/icon/Icon.d.ts +2 -2
  70. package/build/es/components/icon/Icon.js +1 -1
  71. package/build/es/components/icon/Icon.js.map +1 -1
  72. package/build/es/components/icon/icons/GreenCheckIcon.d.ts +2 -3
  73. package/build/es/components/icon/icons/GreenCheckIcon.js +1 -1
  74. package/build/es/components/icon/icons/GreenCheckIcon.js.map +1 -1
  75. package/build/es/components/icon/icons/RedCrossIcon.d.ts +2 -3
  76. package/build/es/components/icon/icons/RedCrossIcon.js +1 -1
  77. package/build/es/components/icon/icons/RedCrossIcon.js.map +1 -1
  78. package/build/es/components/link-list/LinkList.d.ts +1 -1
  79. package/build/es/components/link-list/LinkList.js +1 -1
  80. package/build/es/components/link-list/LinkList.js.map +1 -1
  81. package/build/es/components/link-list/types.d.ts +1 -0
  82. package/build/es/components/menu/Menu.js +1 -1
  83. package/build/es/components/number-input/NumberInput.d.ts +7 -0
  84. package/build/es/components/number-input/NumberInput.js +2 -0
  85. package/build/es/components/number-input/NumberInput.js.map +1 -0
  86. package/build/es/components/number-input/index.d.ts +2 -0
  87. package/build/es/components/number-input/index.js +2 -0
  88. package/build/es/components/number-input/index.js.map +1 -0
  89. package/build/es/components/number-input/types.d.ts +20 -0
  90. package/build/es/components/number-input/types.js +2 -0
  91. package/build/es/components/number-input/types.js.map +1 -0
  92. package/build/es/components/popover/Popover.js +1 -1
  93. package/build/es/components/popover/Popover.js.map +1 -1
  94. package/build/es/components/popover/types.d.ts +8 -1
  95. package/build/es/components/select/Select.js +1 -1
  96. package/build/es/components/select/Select.js.map +1 -1
  97. package/build/es/components/system-message/types.d.ts +7 -2
  98. package/build/es/components/toast/toastContext.js +1 -1
  99. package/build/es/components/tooltip/Tooltip.js +1 -1
  100. package/build/es/hooks/stories/content.js +1 -1
  101. package/build/es/hooks/useListNavigation/useListNavigation.d.ts +11 -2
  102. package/build/es/hooks/useListNavigation/useListNavigation.js +1 -1
  103. package/build/es/hooks/useListNavigation/useListNavigation.js.map +1 -1
  104. package/build/es/tokens.js +1 -1
  105. package/build/es/tokens.js.map +1 -1
  106. package/build/es/utilities/constants/index.js +1 -1
  107. package/build/es/utilities/constants/unicode.js +1 -1
  108. package/build/es/utilities/formatters/bytes/formatBytes.js +1 -1
  109. package/build/es/utilities/formatters/fodselsnummer/formatFodselsnummer.js +1 -1
  110. package/build/es/utilities/formatters/kontonummer/formatKontonummer.js +1 -1
  111. package/build/es/utilities/formatters/kortnummer/formatKortnummer.js +1 -1
  112. package/build/es/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.js +1 -1
  113. package/build/es/utilities/formatters/telefonnummer/formatTelefonnummer.js +1 -1
  114. package/build/es/utilities/formatters/valuta/formatValuta.js +1 -1
  115. package/build/es/utilities/index.js +1 -1
  116. package/build/es/utilities/types.d.ts +2 -0
  117. package/build/es/utilities/types.js +1 -1
  118. package/build/es/utilities/types.js.map +1 -1
  119. package/build/{index-CWRMnfcx.js → index-C1iqmqvT.js} +2 -2
  120. package/build/{index-CWRMnfcx.js.map → index-C1iqmqvT.js.map} +1 -1
  121. package/build/{utils-CcE6HjQp.js → utils-CtwpNW4I.js} +2 -2
  122. package/build/{utils-CcE6HjQp.js.map → utils-CtwpNW4I.js.map} +1 -1
  123. package/codemods/CODEMODS.md +133 -0
  124. package/codemods/__tests__/import-paths.test.mjs +568 -94
  125. package/codemods/import-paths.mjs +34 -339
  126. package/codemods/transforms/color-tokens.mjs +102 -0
  127. package/codemods/transforms/expandable-panel.mjs +41 -0
  128. package/codemods/transforms/font-family.mjs +23 -0
  129. package/codemods/transforms/import-specifiers.mjs +226 -0
  130. package/codemods/transforms/warnings.mjs +41 -0
  131. package/codemods/utils.mjs +35 -0
  132. package/package.json +8 -4
  133. package/styles/base.css +180 -805
  134. package/styles/base.min.css +1 -1
  135. package/styles/components/autosuggest/autosuggest.css +4 -3
  136. package/styles/components/autosuggest/autosuggest.min.css +1 -1
  137. package/styles/components/autosuggest/autosuggest.scss +4 -3
  138. package/styles/components/button/button.css +9 -3
  139. package/styles/components/button/button.min.css +1 -1
  140. package/styles/components/button/button.scss +10 -3
  141. package/styles/components/checkbox/checkbox.css +1 -1
  142. package/styles/components/checkbox/checkbox.min.css +1 -1
  143. package/styles/components/checkbox/checkbox.scss +1 -1
  144. package/styles/components/checkbox-panel/checkbox-panel.css +1 -1
  145. package/styles/components/checkbox-panel/checkbox-panel.min.css +1 -1
  146. package/styles/components/combobox/combobox.css +4 -4
  147. package/styles/components/combobox/combobox.min.css +1 -1
  148. package/styles/components/combobox/combobox.scss +4 -4
  149. package/styles/components/countdown/countdown.css +2 -2
  150. package/styles/components/countdown/countdown.min.css +1 -1
  151. package/styles/components/expander/_index.scss +1 -0
  152. package/styles/components/expander/accordion.css +21 -0
  153. package/styles/components/expander/accordion.min.css +1 -0
  154. package/styles/components/expander/accordion.scss +24 -0
  155. package/styles/components/expander/expandable.css +32 -37
  156. package/styles/components/expander/expandable.min.css +1 -1
  157. package/styles/components/expander/expandable.scss +27 -36
  158. package/styles/components/feedback/feedback.css +2 -2
  159. package/styles/components/feedback/feedback.min.css +1 -1
  160. package/styles/components/feedback/feedback.scss +0 -1
  161. package/styles/components/file/file.css +1 -1
  162. package/styles/components/file/file.min.css +1 -1
  163. package/styles/components/file/file.scss +1 -1
  164. package/styles/components/file-input/file-input.css +19 -13
  165. package/styles/components/file-input/file-input.min.css +1 -1
  166. package/styles/components/icon/icon.scss +1 -1
  167. package/styles/components/input-group/input-group.css +2 -2
  168. package/styles/components/input-group/input-group.min.css +1 -1
  169. package/styles/components/link-list/link-list.css +7 -2
  170. package/styles/components/link-list/link-list.min.css +1 -1
  171. package/styles/components/link-list/link-list.scss +10 -3
  172. package/styles/components/list/list.css +33 -21
  173. package/styles/components/list/list.min.css +1 -1
  174. package/styles/components/list/list.scss +24 -24
  175. package/styles/components/loader/loader.css +6 -6
  176. package/styles/components/loader/loader.min.css +1 -1
  177. package/styles/components/loader/skeleton-loader.css +3 -3
  178. package/styles/components/loader/skeleton-loader.min.css +1 -1
  179. package/styles/components/menu/_menu-item.scss +1 -1
  180. package/styles/components/menu/menu.css +1 -1
  181. package/styles/components/menu/menu.min.css +1 -1
  182. package/styles/components/message/message.css +9 -9
  183. package/styles/components/message/message.min.css +1 -1
  184. package/styles/components/message/message.scss +7 -7
  185. package/styles/components/modal/_index.scss +7 -0
  186. package/styles/components/modal/_overlay.scss +4 -0
  187. package/styles/components/modal/modal.css +32 -116
  188. package/styles/components/modal/modal.min.css +1 -1
  189. package/styles/components/modal/modal.scss +96 -6
  190. package/styles/components/number-input/_index.scss +2 -0
  191. package/styles/components/number-input/number-input.css +214 -0
  192. package/styles/components/number-input/number-input.min.css +1 -0
  193. package/styles/components/number-input/number-input.scss +115 -0
  194. package/styles/components/progress-bar/progress-bar.css +1 -1
  195. package/styles/components/progress-bar/progress-bar.min.css +1 -1
  196. package/styles/components/radio-button/radio-button.css +1 -5
  197. package/styles/components/radio-button/radio-button.min.css +1 -1
  198. package/styles/components/radio-button/radio-button.scss +2 -7
  199. package/styles/components/segmented-control/segmented-control.css +3 -7
  200. package/styles/components/segmented-control/segmented-control.min.css +1 -1
  201. package/styles/components/select/select.css +65 -7
  202. package/styles/components/select/select.min.css +1 -1
  203. package/styles/components/select/select.scss +129 -18
  204. package/styles/components/system-message/system-message.css +9 -13
  205. package/styles/components/system-message/system-message.min.css +1 -1
  206. package/styles/components/system-message/system-message.scss +116 -123
  207. package/styles/components/tag/tag.css +4 -4
  208. package/styles/components/tag/tag.min.css +1 -1
  209. package/styles/components/tag/tag.scss +4 -4
  210. package/styles/components/toast/toast.css +4 -4
  211. package/styles/components/toast/toast.min.css +1 -1
  212. package/styles/components/typography/text.scss +2 -2
  213. package/styles/components/typography/title.scss +1 -1
  214. package/styles/components.css +524 -130
  215. package/styles/components.min.css +1 -1
  216. package/styles/components.scss +2 -1
  217. package/styles/jkl/_convert.scss +15 -6
  218. package/styles/jkl/_tokens.scss +4 -4
  219. package/styles/tailwind.css +97 -97
  220. package/styles/theme/_color-scheme.scss +95 -95
  221. package/styles/theme/_dynamic-spacing.scss +21 -15
  222. package/styles/theme/_fonts.scss +3 -12
  223. package/styles/theme/_index.scss +0 -4
  224. package/styles/theme/_size.scss +20 -20
  225. package/styles/theme/_tokens.scss +11 -11
  226. package/styles/core/utility/_paragraphs.scss +0 -39
  227. package/styles/theme/brands/dnb/_color-scheme.scss +0 -121
  228. package/styles/theme/brands/dnb/_fonts.scss +0 -46
  229. package/styles/theme/brands/dnb/_index.scss +0 -2
  230. package/styles/theme/brands/eika/_color-scheme.scss +0 -121
  231. package/styles/theme/brands/eika/_fonts.scss +0 -46
  232. package/styles/theme/brands/eika/_index.scss +0 -2
  233. package/styles/theme/brands/fremtind/_color-scheme.scss +0 -121
  234. package/styles/theme/brands/fremtind/_fonts.scss +0 -30
  235. package/styles/theme/brands/fremtind/_index.scss +0 -2
  236. package/styles/theme/brands/sparebank1/_color-scheme.scss +0 -121
  237. package/styles/theme/brands/sparebank1/_fonts.scss +0 -38
  238. package/styles/theme/brands/sparebank1/_index.scss +0 -2
@@ -0,0 +1,226 @@
1
+ import { escapeRegExp, replaceSpecifier } from "../utils.mjs";
2
+
3
+ const DIRECT_REPLACEMENTS = [
4
+ [
5
+ "@fremtind/jokul/styles/core/core.min.css",
6
+ "@fremtind/jokul/styles/base.min.css",
7
+ ],
8
+ ["@fremtind/jokul/styles/core/core.css", "@fremtind/jokul/styles/base.css"],
9
+ [
10
+ "@fremtind/jokul/styles/core/core.scss",
11
+ "@fremtind/jokul/styles/base.scss",
12
+ ],
13
+ ["@fremtind/jokul/styles/core/core", "@fremtind/jokul/styles/base"],
14
+ [
15
+ "@fremtind/jokul/styles/styles.min.css",
16
+ "@fremtind/jokul/styles/components.min.css",
17
+ ],
18
+ [
19
+ "@fremtind/jokul/styles/styles.css",
20
+ "@fremtind/jokul/styles/components.css",
21
+ ],
22
+ [
23
+ "@fremtind/jokul/styles/styles.scss",
24
+ "@fremtind/jokul/styles/components.scss",
25
+ ],
26
+ ["@fremtind/jokul/styles/styles", "@fremtind/jokul/styles/components"],
27
+ ["@fremtind/jokul/styles/core/jkl/index", "@fremtind/jokul/styles/jkl"],
28
+ ["@fremtind/jokul/styles/core/jkl", "@fremtind/jokul/styles/jkl"],
29
+ [
30
+ "@fremtind/jokul/styles/fonts/webfonts.scss",
31
+ "@fremtind/jokul/styles/theme/fonts",
32
+ ],
33
+ [
34
+ "@fremtind/jokul/styles/fonts/webfonts",
35
+ "@fremtind/jokul/styles/theme/fonts",
36
+ ],
37
+ ["@fremtind/jokul/styles/fonts", "@fremtind/jokul/styles/theme/fonts"],
38
+ ["../../../core/jkl/index", "../../../styles/jkl"],
39
+ ["../../../core/jkl", "../../../styles/jkl"],
40
+ ["../../core/jkl/index", "../../styles/jkl"],
41
+ ["../../core/jkl", "../../styles/jkl"],
42
+ ["../core/jkl/index", "../styles/jkl"],
43
+ ["../core/jkl", "../styles/jkl"],
44
+ ["@fremtind/jokul/tailwind/v4", "@fremtind/jokul/styles/tailwind"],
45
+ ["@fremtind/jokul/styles/core", "@fremtind/jokul/styles/base.scss"],
46
+ ["@fremtind/jokul/styles", "@fremtind/jokul/styles/components.scss"],
47
+ ["@fremtind/jokul/core", "@fremtind/jokul/utilities"],
48
+ ].sort(([a], [b]) => b.length - a.length);
49
+
50
+ const BETA_STYLE_MIGRATIONS = [
51
+ {
52
+ component: "DescriptionList",
53
+ betaIdentifiers: ["BETA_DescriptionList", "BETA_DescriptionListItem"],
54
+ replacements: [
55
+ [
56
+ "@fremtind/jokul/styles/components/description-list/_index.scss",
57
+ "@fremtind/jokul/styles/components/beta/description-list/_index.scss",
58
+ ],
59
+ [
60
+ "@fremtind/jokul/styles/components/description-list/description-list.scss",
61
+ "@fremtind/jokul/styles/components/beta/description-list/description-list.scss",
62
+ ],
63
+ [
64
+ "@fremtind/jokul/styles/components/description-list",
65
+ "@fremtind/jokul/styles/components/beta/description-list",
66
+ ],
67
+ ],
68
+ },
69
+ {
70
+ component: "NavLink",
71
+ betaIdentifiers: ["BETA_NavLink"],
72
+ replacements: [
73
+ [
74
+ "@fremtind/jokul/styles/components/nav-link/_index.scss",
75
+ "@fremtind/jokul/styles/components/beta/nav-link/_index.scss",
76
+ ],
77
+ [
78
+ "@fremtind/jokul/styles/components/nav-link/nav-link.scss",
79
+ "@fremtind/jokul/styles/components/beta/nav-link/navlink.scss",
80
+ ],
81
+ [
82
+ "@fremtind/jokul/styles/components/nav-link",
83
+ "@fremtind/jokul/styles/components/beta/nav-link",
84
+ ],
85
+ ],
86
+ },
87
+ {
88
+ component: "Select",
89
+ betaIdentifiers: ["BETA_Select"],
90
+ replacements: [
91
+ [
92
+ "@fremtind/jokul/styles/components/select/_index.scss",
93
+ "@fremtind/jokul/styles/components/beta/select/_index.scss",
94
+ ],
95
+ [
96
+ "@fremtind/jokul/styles/components/select/select.scss",
97
+ "@fremtind/jokul/styles/components/beta/select/select.scss",
98
+ ],
99
+ [
100
+ "@fremtind/jokul/styles/components/select",
101
+ "@fremtind/jokul/styles/components/beta/select",
102
+ ],
103
+ ],
104
+ },
105
+ ];
106
+
107
+ const WEBFONTS_CSS_SPECIFIER =
108
+ "@fremtind/jokul/styles/fonts/webfonts(?:\\.min)?\\.css";
109
+
110
+ export const BASE_OR_COMPONENT_CSS_PATTERN =
111
+ /@fremtind\/jokul\/styles\/(?:base|components)(?:\.min)?\.css/;
112
+
113
+ const WEBFONTS_CSS_REMOVAL_PATTERNS = [
114
+ // import "@fremtind/jokul/styles/fonts/webfonts.css"; (ESM)
115
+ new RegExp(
116
+ `^[ \\t]*import\\s+["']${WEBFONTS_CSS_SPECIFIER}["']\\s*;?[ \\t]*\\r?\\n?`,
117
+ "gm",
118
+ ),
119
+ // require("@fremtind/jokul/styles/fonts/webfonts.css"); (CJS)
120
+ new RegExp(
121
+ `^[ \\t]*require\\(\\s*["']${WEBFONTS_CSS_SPECIFIER}["']\\s*\\)\\s*;?[ \\t]*\\r?\\n?`,
122
+ "gm",
123
+ ),
124
+ // @import "@fremtind/jokul/styles/fonts/webfonts.css"; (CSS / SCSS)
125
+ new RegExp(
126
+ `^[ \\t]*@import\\s+["']${WEBFONTS_CSS_SPECIFIER}["']\\s*;?[ \\t]*\\r?\\n?`,
127
+ "gm",
128
+ ),
129
+ ];
130
+
131
+ export function applyDirectReplacements(text) {
132
+ let next = text;
133
+ let replacements = 0;
134
+
135
+ for (const [from, to] of DIRECT_REPLACEMENTS) {
136
+ const result = replaceSpecifier(next, from, to);
137
+ next = result.text;
138
+ replacements += result.count;
139
+ }
140
+
141
+ return { text: next, replacements };
142
+ }
143
+
144
+ export function applyBetaStyleReplacements(text) {
145
+ let next = text;
146
+ let replacements = 0;
147
+ const warnings = [];
148
+
149
+ for (const migration of BETA_STYLE_MIGRATIONS) {
150
+ const mentionsBeta = migration.betaIdentifiers.some((identifier) =>
151
+ next.includes(identifier),
152
+ );
153
+
154
+ const hasOldSpecifier = migration.replacements.some(([from]) =>
155
+ new RegExp(
156
+ `(?<![A-Za-z0-9_./-])${escapeRegExp(from)}(?![A-Za-z0-9_./-])`,
157
+ ).test(next),
158
+ );
159
+
160
+ if (!hasOldSpecifier) {
161
+ continue;
162
+ }
163
+
164
+ if (!mentionsBeta) {
165
+ warnings.push(
166
+ `Manuell vurdering: gammel stilimport for ${migration.component} kan peke på enten stabil eller beta-variant.`,
167
+ );
168
+ continue;
169
+ }
170
+
171
+ for (const [from, to] of migration.replacements) {
172
+ const result = replaceSpecifier(next, from, to);
173
+ next = result.text;
174
+ replacements += result.count;
175
+ }
176
+ }
177
+
178
+ return { text: next, replacements, warnings };
179
+ }
180
+
181
+ // I Jøkul 5 er @font-face-definisjonene flyttet inn i styles/base.css. Standalone
182
+ // CSS-importer av webfonts.css fjernes; SCSS-konsumenter håndteres av
183
+ // DIRECT_REPLACEMENTS siden de kan overstyre $webfonts-dir.
184
+ export function removeRedundantWebfontsCssImport(text) {
185
+ let next = text;
186
+ let count = 0;
187
+
188
+ for (const pattern of WEBFONTS_CSS_REMOVAL_PATTERNS) {
189
+ next = next.replace(pattern, () => {
190
+ count += 1;
191
+ return "";
192
+ });
193
+ }
194
+
195
+ return { text: next, count };
196
+ }
197
+
198
+ export function reorderConfiguredFontImport(text) {
199
+ const fontImportPattern =
200
+ /^@use\s+["']@fremtind\/jokul\/styles\/theme\/fonts["'][\s\S]*?;\s*/m;
201
+ const baseImportPattern =
202
+ /^@use\s+["']@fremtind\/jokul\/styles\/base(?:\.scss)?["'][^;]*;\s*/m;
203
+
204
+ const fontMatch = fontImportPattern.exec(text);
205
+ const baseMatch = baseImportPattern.exec(text);
206
+
207
+ if (!fontMatch || !baseMatch || fontMatch.index < baseMatch.index) {
208
+ return { text, reordered: false };
209
+ }
210
+
211
+ const withoutFontImport =
212
+ text.slice(0, fontMatch.index) +
213
+ text.slice(fontMatch.index + fontMatch[0].length);
214
+ const nextBaseMatch = baseImportPattern.exec(withoutFontImport);
215
+
216
+ if (!nextBaseMatch) {
217
+ return { text, reordered: false };
218
+ }
219
+
220
+ const nextText =
221
+ withoutFontImport.slice(0, nextBaseMatch.index) +
222
+ fontMatch[0] +
223
+ withoutFontImport.slice(nextBaseMatch.index);
224
+
225
+ return { text: nextText, reordered: true };
226
+ }
@@ -0,0 +1,41 @@
1
+ const MANUAL_MIGRATION_WARNINGS = [
2
+ {
3
+ pattern: /--jkl-color-text-on-alert-/,
4
+ message:
5
+ "Tokens --jkl-color-text-on-alert-* er fjernet. Bruk --jkl-color-<rolle>-text-default i stedet, f.eks. --jkl-color-info-text-default.",
6
+ },
7
+ {
8
+ pattern: /--jkl-color-(?:background|text)-interactive\b/,
9
+ message:
10
+ "Tokens --jkl-color-background-interactive og --jkl-color-text-interactive er fjernet og skal ikke brukes lenger.",
11
+ },
12
+ {
13
+ pattern: /\bvariant=["'](?:outlined|high|low)["']/,
14
+ message:
15
+ 'Card variant-prop er fjernet i Jøkul 5. Bruk `outlined`-prop (boolean) for ramme: `<Card outlined>`. Fjern `variant="high"` og `variant="low"` — de er erstattet av standard flat flate.',
16
+ },
17
+ {
18
+ pattern:
19
+ /(?<![A-Za-z0-9-])(?:bg|text|border|ring|shadow|fill|stroke|accent|caret|outline|placeholder|divide|from|via|to|decoration)-(?:background-interactive|text-interactive)(?![A-Za-z0-9-])/,
20
+ message:
21
+ "Fjernede Tailwind-klasser basert på background-interactive og text-interactive (f.eks. bg-background-interactive, text-text-interactive). Disse er fjernet fra Jøkul 5-temaet og skal ikke brukes lenger.",
22
+ },
23
+ {
24
+ pattern:
25
+ /(?<![A-Za-z0-9-])(?:border|ring|outline|divide|decoration)-border-(?:action|input(?:-focus)?|separator(?:-strong|-hover)?)(?![A-Za-z0-9-])/,
26
+ message:
27
+ "Fjernede Tailwind-kantklasser (border-border-action, border-border-input, border-border-separator m.fl.). Bruk border-border-default, border-border-subdued eller border-border-strong i stedet.",
28
+ },
29
+ ];
30
+
31
+ export function collectManualMigrationWarnings(text) {
32
+ const warnings = [];
33
+
34
+ for (const { pattern, message } of MANUAL_MIGRATION_WARNINGS) {
35
+ if (pattern.test(text)) {
36
+ warnings.push(`Manuell vurdering: ${message}`);
37
+ }
38
+ }
39
+
40
+ return warnings;
41
+ }
@@ -0,0 +1,35 @@
1
+ export function escapeRegExp(value) {
2
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3
+ }
4
+
5
+ export function replaceSpecifier(text, from, to) {
6
+ const pattern = new RegExp(
7
+ `(?<![A-Za-z0-9_./-])${escapeRegExp(from)}(?![A-Za-z0-9_./-])`,
8
+ "g",
9
+ );
10
+
11
+ let count = 0;
12
+ const next = text.replace(pattern, () => {
13
+ count += 1;
14
+ return to;
15
+ });
16
+
17
+ return { text: next, count };
18
+ }
19
+
20
+ // Som replaceSpecifier, men uten "/" i grensemengden slik at Tailwind-modifikatorer
21
+ // som opacity (/50) og vilkårsverdier ([&_svg]:) fortsatt matches.
22
+ export function replaceTailwindClass(text, fromClass, toClass) {
23
+ const pattern = new RegExp(
24
+ `(?<![A-Za-z0-9-])${escapeRegExp(fromClass)}(?![A-Za-z0-9-])`,
25
+ "g",
26
+ );
27
+
28
+ let count = 0;
29
+ const next = text.replace(pattern, () => {
30
+ count += 1;
31
+ return toClass;
32
+ });
33
+
34
+ return { text: next, count };
35
+ }
package/package.json CHANGED
@@ -1,7 +1,10 @@
1
1
  {
2
2
  "name": "@fremtind/jokul",
3
- "version": "5.0.0-next.8",
3
+ "version": "5.0.0",
4
4
  "type": "module",
5
+ "engines": {
6
+ "node": "^20.19.0 || >=22.12.0"
7
+ },
5
8
  "publishConfig": {
6
9
  "access": "public"
7
10
  },
@@ -83,8 +86,8 @@
83
86
  "devDependencies": {
84
87
  "@babel/cli": "^7.28.6",
85
88
  "@babel/preset-react": "^7.27.1",
86
- "@figma/code-connect": "^1.3.8",
87
- "@rollup/plugin-terser": "^0.4.4",
89
+ "@figma/code-connect": "^1.4.4",
90
+ "@rollup/plugin-terser": "^1.0.0",
88
91
  "@types/react": "18.3.1",
89
92
  "@vitejs/plugin-react": "^4.7.0",
90
93
  "@vitejs/plugin-react-swc": "^3.11.0",
@@ -109,7 +112,7 @@
109
112
  "style-dictionary": "^5.0.1",
110
113
  "tailwindcss": "^3.4.17",
111
114
  "tsx": "^4.20.6",
112
- "vite": "^7.1.2",
115
+ "vite": "^7.3.2",
113
116
  "vite-plugin-dts": "^4.5.4",
114
117
  "vitest": "^3.2.4",
115
118
  "vitest-axe": "^0.1.0"
@@ -140,6 +143,7 @@
140
143
  "compile:scripts": "vite build --config vite.build.config.mjs",
141
144
  "test": "vitest --config vite.test.config.mjs",
142
145
  "figma:test": "figma connect publish --dry-run",
146
+ "figma:test:ci": "figma connect publish --dry-run --exit-on-unreadable-files --skip-update-check",
143
147
  "figma:publish": "figma connect publish"
144
148
  }
145
149
  }