@fremtind/jokul 5.0.0-next.1 → 5.0.0-next.11

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 (350) hide show
  1. package/README.md +41 -22
  2. package/bin/jokul.mjs +10 -0
  3. package/bin/run-jokul-cli.mjs +63 -0
  4. package/build/build-stats.html +1 -1
  5. package/build/cjs/components/card/Card.cjs +1 -1
  6. package/build/cjs/components/card/Card.cjs.map +1 -1
  7. package/build/cjs/components/card/index.d.cts +1 -1
  8. package/build/cjs/components/card/types.cjs +1 -1
  9. package/build/cjs/components/card/types.cjs.map +1 -1
  10. package/build/cjs/components/card/types.d.cts +3 -6
  11. package/build/cjs/components/checkbox/Checkbox.cjs +1 -1
  12. package/build/cjs/components/checkbox/Checkbox.cjs.map +1 -1
  13. package/build/cjs/components/cookie-consent/CookieConsent.cjs +1 -1
  14. package/build/cjs/components/cookie-consent/CookieConsent.cjs.map +1 -1
  15. package/build/cjs/components/cookie-consent/CookieConsent.d.cts +1 -1
  16. package/build/cjs/components/cookie-consent/types.d.cts +4 -0
  17. package/build/cjs/components/datepicker/DatePicker.cjs +1 -1
  18. package/build/cjs/components/datepicker/DatePicker.cjs.map +1 -1
  19. package/build/cjs/components/expander/ExpandablePanel.cjs +1 -1
  20. package/build/cjs/components/expander/ExpandablePanel.cjs.map +1 -1
  21. package/build/cjs/components/link/Link.cjs +1 -1
  22. package/build/cjs/components/link/Link.cjs.map +1 -1
  23. package/build/cjs/components/link/Link.d.cts +2 -2
  24. package/build/cjs/components/link/types.d.cts +1 -4
  25. package/build/cjs/components/modal/Modal.cjs +1 -1
  26. package/build/cjs/components/modal/Modal.cjs.map +1 -1
  27. package/build/cjs/components/modal/Modal.d.cts +2 -9
  28. package/build/cjs/components/modal/index.d.cts +1 -1
  29. package/build/cjs/components/modal/types.d.cts +18 -0
  30. package/build/cjs/components/popover/Popover.cjs +1 -1
  31. package/build/cjs/components/popover/Popover.cjs.map +1 -1
  32. package/build/cjs/components/radio-button/BaseRadioButton.cjs +1 -1
  33. package/build/cjs/components/radio-button/BaseRadioButton.cjs.map +1 -1
  34. package/build/cjs/components/text-area/BaseTextArea.cjs +1 -1
  35. package/build/cjs/components/text-area/BaseTextArea.cjs.map +1 -1
  36. package/build/cjs/components/text-area/counter.cjs +2 -0
  37. package/build/cjs/components/text-area/counter.cjs.map +1 -0
  38. package/build/cjs/components/text-area/counter.d.cts +2 -0
  39. package/build/cjs/components/text-area/types.d.cts +21 -1
  40. package/build/cjs/components/typography/Text.cjs +2 -0
  41. package/build/cjs/components/typography/Text.cjs.map +1 -0
  42. package/build/cjs/components/typography/Text.d.cts +5 -0
  43. package/build/cjs/components/typography/Title.cjs +2 -0
  44. package/build/cjs/components/typography/Title.cjs.map +1 -0
  45. package/build/cjs/components/typography/Title.d.cts +5 -0
  46. package/build/cjs/components/typography/index.cjs +2 -0
  47. package/build/cjs/components/typography/index.cjs.map +1 -0
  48. package/build/cjs/components/typography/index.d.cts +3 -0
  49. package/build/cjs/components/typography/types.cjs +2 -0
  50. package/build/cjs/components/typography/types.cjs.map +1 -0
  51. package/build/cjs/components/typography/types.d.cts +48 -0
  52. package/build/cjs/tokens.cjs +1 -1
  53. package/build/cjs/tokens.cjs.map +1 -1
  54. package/build/cjs/tokens.d.cts +90 -38
  55. package/build/es/components/card/Card.js +1 -1
  56. package/build/es/components/card/Card.js.map +1 -1
  57. package/build/es/components/card/index.d.ts +1 -1
  58. package/build/es/components/card/types.d.ts +3 -6
  59. package/build/es/components/card/types.js +1 -1
  60. package/build/es/components/card/types.js.map +1 -1
  61. package/build/es/components/checkbox/Checkbox.js +1 -1
  62. package/build/es/components/checkbox/Checkbox.js.map +1 -1
  63. package/build/es/components/cookie-consent/CookieConsent.d.ts +1 -1
  64. package/build/es/components/cookie-consent/CookieConsent.js +1 -1
  65. package/build/es/components/cookie-consent/CookieConsent.js.map +1 -1
  66. package/build/es/components/cookie-consent/types.d.ts +4 -0
  67. package/build/es/components/datepicker/DatePicker.js +1 -1
  68. package/build/es/components/datepicker/DatePicker.js.map +1 -1
  69. package/build/es/components/expander/ExpandablePanel.js +1 -1
  70. package/build/es/components/expander/ExpandablePanel.js.map +1 -1
  71. package/build/es/components/link/Link.d.ts +2 -2
  72. package/build/es/components/link/Link.js +1 -1
  73. package/build/es/components/link/Link.js.map +1 -1
  74. package/build/es/components/link/types.d.ts +1 -4
  75. package/build/es/components/modal/Modal.d.ts +2 -9
  76. package/build/es/components/modal/Modal.js +1 -1
  77. package/build/es/components/modal/Modal.js.map +1 -1
  78. package/build/es/components/modal/index.d.ts +1 -1
  79. package/build/es/components/modal/types.d.ts +18 -0
  80. package/build/es/components/popover/Popover.js +1 -1
  81. package/build/es/components/popover/Popover.js.map +1 -1
  82. package/build/es/components/radio-button/BaseRadioButton.js +1 -1
  83. package/build/es/components/radio-button/BaseRadioButton.js.map +1 -1
  84. package/build/es/components/text-area/BaseTextArea.js +1 -1
  85. package/build/es/components/text-area/BaseTextArea.js.map +1 -1
  86. package/build/es/components/text-area/counter.d.ts +2 -0
  87. package/build/es/components/text-area/counter.js +2 -0
  88. package/build/es/components/text-area/counter.js.map +1 -0
  89. package/build/es/components/text-area/types.d.ts +21 -1
  90. package/build/es/components/typography/Text.d.ts +5 -0
  91. package/build/es/components/typography/Text.js +2 -0
  92. package/build/es/components/typography/Text.js.map +1 -0
  93. package/build/es/components/typography/Title.d.ts +5 -0
  94. package/build/es/components/typography/Title.js +2 -0
  95. package/build/es/components/typography/Title.js.map +1 -0
  96. package/build/es/components/typography/index.d.ts +3 -0
  97. package/build/es/components/typography/index.js +2 -0
  98. package/build/es/components/typography/index.js.map +1 -0
  99. package/build/es/components/typography/types.d.ts +48 -0
  100. package/build/es/components/typography/types.js +2 -0
  101. package/build/es/components/typography/types.js.map +1 -0
  102. package/build/es/tokens.d.ts +90 -38
  103. package/build/es/tokens.js +1 -1
  104. package/build/es/tokens.js.map +1 -1
  105. package/codemods/CODEMODS.md +133 -0
  106. package/codemods/__tests__/import-paths.test.mjs +648 -0
  107. package/codemods/import-paths.mjs +198 -0
  108. package/codemods/transforms/color-tokens.mjs +77 -0
  109. package/codemods/transforms/font-family.mjs +23 -0
  110. package/codemods/transforms/import-specifiers.mjs +230 -0
  111. package/codemods/transforms/warnings.mjs +41 -0
  112. package/codemods/utils.mjs +35 -0
  113. package/package.json +7 -1
  114. package/src/fonts/InterVariable-Italic.woff2 +0 -0
  115. package/src/fonts/InterVariable.woff2 +0 -0
  116. package/src/fonts/brands/dnb/DNB-Bold.woff2 +0 -0
  117. package/src/fonts/brands/dnb/DNB-Medium.woff2 +0 -0
  118. package/src/fonts/brands/dnb/DNB-Regular.woff2 +0 -0
  119. package/src/fonts/brands/dnb/DNBMono-Regular.woff2 +0 -0
  120. package/src/fonts/brands/eika/OpenSans-Bold.woff2 +0 -0
  121. package/src/fonts/brands/eika/OpenSans-Light.woff2 +0 -0
  122. package/src/fonts/brands/eika/OpenSans-Regular.woff2 +0 -0
  123. package/src/fonts/brands/eika/OpenSans-SemiBold.woff2 +0 -0
  124. package/src/fonts/brands/fremtind/Fremtind-Material-Symbols.woff2 +0 -0
  125. package/src/fonts/brands/fremtind/InterVariable-Italic.woff2 +0 -0
  126. package/src/fonts/brands/fremtind/InterVariable.woff2 +0 -0
  127. package/src/fonts/brands/sparebank1/SpareBank1-Medium-Web.woff2 +0 -0
  128. package/src/fonts/brands/sparebank1/SpareBank1-Regular-Web.woff2 +0 -0
  129. package/src/fonts/brands/sparebank1/SpareBank1-Title-Medium-Web.woff2 +0 -0
  130. package/styles/base.css +819 -218
  131. package/styles/base.min.css +1 -1
  132. package/styles/components/autosuggest/autosuggest.css +4 -4
  133. package/styles/components/autosuggest/autosuggest.min.css +1 -1
  134. package/styles/components/autosuggest/autosuggest.scss +4 -4
  135. package/styles/components/beta/description-list/description-list.css +1 -1
  136. package/styles/components/beta/description-list/description-list.min.css +1 -1
  137. package/styles/components/beta/description-list/description-list.scss +1 -1
  138. package/styles/components/beta/nav-link/navlink.css +4 -4
  139. package/styles/components/beta/nav-link/navlink.min.css +1 -1
  140. package/styles/components/beta/nav-link/navlink.scss +6 -4
  141. package/styles/components/beta/select/select.css +9 -9
  142. package/styles/components/beta/select/select.min.css +1 -1
  143. package/styles/components/beta/select/select.scss +8 -7
  144. package/styles/components/breadcrumb/breadcrumb.css +1 -1
  145. package/styles/components/breadcrumb/breadcrumb.min.css +1 -1
  146. package/styles/components/button/button.css +8 -4
  147. package/styles/components/button/button.min.css +1 -1
  148. package/styles/components/button/button.scss +14 -14
  149. package/styles/components/card/card.css +6 -11
  150. package/styles/components/card/card.min.css +1 -1
  151. package/styles/components/card/card.scss +5 -12
  152. package/styles/components/checkbox/checkbox.css +43 -15
  153. package/styles/components/checkbox/checkbox.min.css +1 -1
  154. package/styles/components/checkbox/checkbox.scss +35 -24
  155. package/styles/components/checkbox-panel/checkbox-panel.css +65 -32
  156. package/styles/components/checkbox-panel/checkbox-panel.min.css +1 -1
  157. package/styles/components/checkbox-panel/checkbox-panel.scss +4 -0
  158. package/styles/components/checkbox-panel/development/styles.scss +1 -1
  159. package/styles/components/chip/chip.css +6 -6
  160. package/styles/components/chip/chip.min.css +1 -1
  161. package/styles/components/chip/chip.scss +6 -6
  162. package/styles/components/combobox/combobox.css +25 -23
  163. package/styles/components/combobox/combobox.min.css +1 -1
  164. package/styles/components/combobox/combobox.scss +15 -18
  165. package/styles/components/countdown/countdown.css +4 -4
  166. package/styles/components/countdown/countdown.min.css +1 -1
  167. package/styles/components/datepicker/_calendar-date-button.scss +11 -9
  168. package/styles/components/datepicker/_calendar-navigation-dropdown.scss +1 -1
  169. package/styles/components/datepicker/_calendar.scss +6 -7
  170. package/styles/components/datepicker/datepicker.css +20 -12
  171. package/styles/components/datepicker/datepicker.min.css +1 -1
  172. package/styles/components/description-list/description-list.css +1 -1
  173. package/styles/components/description-list/description-list.min.css +1 -1
  174. package/styles/components/description-list/description-list.scss +1 -1
  175. package/styles/components/expander/expandable.css +29 -27
  176. package/styles/components/expander/expandable.min.css +1 -1
  177. package/styles/components/expander/expandable.scss +29 -30
  178. package/styles/components/feedback/_index.scss +1 -1
  179. package/styles/components/feedback/feedback.css +6 -8
  180. package/styles/components/feedback/feedback.min.css +1 -1
  181. package/styles/components/feedback/feedback.scss +4 -9
  182. package/styles/components/file/file.css +5 -5
  183. package/styles/components/file/file.min.css +1 -1
  184. package/styles/components/file/file.scss +5 -5
  185. package/styles/components/file-input/file-input.css +29 -25
  186. package/styles/components/file-input/file-input.min.css +1 -1
  187. package/styles/components/file-input/file-input.scss +3 -3
  188. package/styles/components/help/help.css +2 -2
  189. package/styles/components/help/help.min.css +1 -1
  190. package/styles/components/help/help.scss +4 -4
  191. package/styles/components/icon/_base-styles.scss +12 -14
  192. package/styles/components/icon/icon.css +5 -5
  193. package/styles/components/icon/icon.min.css +1 -1
  194. package/styles/components/icon/icon.scss +73 -73
  195. package/styles/components/icon-button/icon-button.css +2 -2
  196. package/styles/components/icon-button/icon-button.min.css +1 -1
  197. package/styles/components/icon-button/icon-button.scss +1 -1
  198. package/styles/components/input-group/input-group.css +2 -2
  199. package/styles/components/input-group/input-group.min.css +1 -1
  200. package/styles/components/input-panel/input-panel.css +19 -17
  201. package/styles/components/input-panel/input-panel.min.css +1 -1
  202. package/styles/components/input-panel/input-panel.scss +21 -20
  203. package/styles/components/link/link.css +2 -2
  204. package/styles/components/link/link.min.css +1 -1
  205. package/styles/components/link-list/link-list.css +8 -4
  206. package/styles/components/link-list/link-list.min.css +1 -1
  207. package/styles/components/link-list/link-list.scss +7 -3
  208. package/styles/components/list/list.css +37 -21
  209. package/styles/components/list/list.min.css +1 -1
  210. package/styles/components/list/list.scss +27 -23
  211. package/styles/components/loader/loader.css +6 -6
  212. package/styles/components/loader/loader.min.css +1 -1
  213. package/styles/components/loader/skeleton-loader.css +4 -4
  214. package/styles/components/loader/skeleton-loader.min.css +1 -1
  215. package/styles/components/loader/skeleton-loader.scss +1 -1
  216. package/styles/components/menu/_menu-divider.scss +1 -1
  217. package/styles/components/menu/_menu-item.scss +2 -2
  218. package/styles/components/menu/menu.css +5 -5
  219. package/styles/components/menu/menu.min.css +1 -1
  220. package/styles/components/menu/menu.scss +2 -2
  221. package/styles/components/message/message.css +20 -10
  222. package/styles/components/message/message.min.css +1 -1
  223. package/styles/components/message/message.scss +19 -12
  224. package/styles/components/modal/_layout.scss +22 -0
  225. package/styles/components/modal/_modal-base.scss +32 -0
  226. package/styles/components/modal/_motion.scss +45 -0
  227. package/styles/components/modal/_overlay.scss +20 -0
  228. package/styles/components/modal/_parts.scss +33 -0
  229. package/styles/components/modal/_placement.scss +59 -0
  230. package/styles/components/modal/modal.css +118 -34
  231. package/styles/components/modal/modal.min.css +1 -1
  232. package/styles/components/modal/modal.scss +6 -95
  233. package/styles/components/nav-link/nav-link.css +1 -1
  234. package/styles/components/nav-link/nav-link.min.css +1 -1
  235. package/styles/components/pagination/development/styles.scss +1 -1
  236. package/styles/components/pagination/pagination.css +3 -3
  237. package/styles/components/pagination/pagination.min.css +1 -1
  238. package/styles/components/pagination/pagination.scss +2 -2
  239. package/styles/components/popover/popover.css +12 -1
  240. package/styles/components/popover/popover.min.css +1 -1
  241. package/styles/components/popover/popover.scss +15 -1
  242. package/styles/components/progress-bar/progress-bar.css +27 -3
  243. package/styles/components/progress-bar/progress-bar.min.css +1 -1
  244. package/styles/components/progress-bar/progress-bar.scss +5 -0
  245. package/styles/components/radio-button/radio-button.css +43 -8
  246. package/styles/components/radio-button/radio-button.min.css +1 -1
  247. package/styles/components/radio-button/radio-button.scss +35 -16
  248. package/styles/components/radio-panel/development/styles.scss +1 -1
  249. package/styles/components/radio-panel/radio-panel.css +22 -17
  250. package/styles/components/radio-panel/radio-panel.min.css +1 -1
  251. package/styles/components/radio-panel/radio-panel.scss +4 -0
  252. package/styles/components/search/search-with-submit-button.css +1 -1
  253. package/styles/components/search/search-with-submit-button.min.css +1 -1
  254. package/styles/components/search/search-with-submit-button.scss +1 -1
  255. package/styles/components/search/search.css +4 -4
  256. package/styles/components/search/search.min.css +1 -1
  257. package/styles/components/search/search.scss +3 -3
  258. package/styles/components/segmented-control/segmented-control.css +61 -26
  259. package/styles/components/segmented-control/segmented-control.min.css +1 -1
  260. package/styles/components/segmented-control/segmented-control.scss +7 -7
  261. package/styles/components/select/select.css +17 -18
  262. package/styles/components/select/select.min.css +1 -1
  263. package/styles/components/select/select.scss +24 -29
  264. package/styles/components/summary-table/development/summary-table-example.scss +1 -1
  265. package/styles/components/summary-table/summary-table.css +2 -2
  266. package/styles/components/summary-table/summary-table.min.css +1 -1
  267. package/styles/components/summary-table/summary-table.scss +2 -2
  268. package/styles/components/system-message/system-message.css +23 -13
  269. package/styles/components/system-message/system-message.min.css +1 -1
  270. package/styles/components/system-message/system-message.scss +119 -108
  271. package/styles/components/table/_table-head.scss +1 -1
  272. package/styles/components/table/_table-row.scss +5 -3
  273. package/styles/components/table/table.css +6 -4
  274. package/styles/components/table/table.min.css +1 -1
  275. package/styles/components/table-of-contents/table-of-contents.css +2 -2
  276. package/styles/components/table-of-contents/table-of-contents.min.css +1 -1
  277. package/styles/components/table-of-contents/table-of-contents.scss +3 -3
  278. package/styles/components/tabs/tabs.css +5 -5
  279. package/styles/components/tabs/tabs.min.css +1 -1
  280. package/styles/components/tabs/tabs.scss +5 -6
  281. package/styles/components/tag/tag.css +16 -6
  282. package/styles/components/tag/tag.min.css +1 -1
  283. package/styles/components/tag/tag.scss +18 -7
  284. package/styles/components/text-area/text-area.css +12 -12
  285. package/styles/components/text-area/text-area.min.css +1 -1
  286. package/styles/components/text-input/text-input.css +12 -12
  287. package/styles/components/text-input/text-input.min.css +1 -1
  288. package/styles/components/toast/toast.css +20 -13
  289. package/styles/components/toast/toast.min.css +1 -1
  290. package/styles/components/toast/toast.scss +19 -18
  291. package/styles/components/toggle-switch/_toggle-slider.scss +4 -4
  292. package/styles/components/toggle-switch/toggle-switch.css +15 -25
  293. package/styles/components/toggle-switch/toggle-switch.min.css +1 -3
  294. package/styles/components/toggle-switch/toggle-switch.scss +10 -22
  295. package/styles/components/tooltip/tooltip.css +5 -5
  296. package/styles/components/tooltip/tooltip.min.css +1 -1
  297. package/styles/components/tooltip/tooltip.scss +5 -5
  298. package/styles/components/typography/_index.scss +2 -0
  299. package/styles/components/typography/text.css +38 -0
  300. package/styles/components/typography/text.min.css +1 -0
  301. package/styles/components/typography/text.scss +54 -0
  302. package/styles/components/typography/title.css +55 -0
  303. package/styles/components/typography/title.min.css +1 -0
  304. package/styles/components/typography/title.scss +59 -0
  305. package/styles/components.css +729 -395
  306. package/styles/components.min.css +1 -3
  307. package/styles/components.scss +53 -52
  308. package/styles/global/_base-class.scss +2 -2
  309. package/styles/global/_top-layer.scss +1 -1
  310. package/styles/hooks/stories/styles.scss +3 -3
  311. package/styles/jkl/_ornaments.scss +1 -1
  312. package/styles/jkl/_tokens.scss +140 -66
  313. package/styles/jkl/_typography.scss +13 -21
  314. package/styles/shared/input/shared-input-styles.scss +11 -15
  315. package/styles/shared/track/track.scss +2 -2
  316. package/styles/tailwind.css +106 -62
  317. package/styles/theme/_color-scheme.scss +107 -60
  318. package/styles/theme/_dynamic-spacing.scss +24 -18
  319. package/styles/theme/_fonts.scss +19 -78
  320. package/styles/theme/_index.scss +4 -0
  321. package/styles/theme/_size.scss +20 -20
  322. package/styles/theme/_tokens.scss +14 -14
  323. package/styles/theme/brands/dnb/_color-scheme.scss +121 -0
  324. package/styles/theme/brands/dnb/_fonts.scss +46 -0
  325. package/styles/theme/brands/dnb/_index.scss +2 -0
  326. package/styles/theme/brands/eika/_color-scheme.scss +121 -0
  327. package/styles/theme/brands/eika/_fonts.scss +46 -0
  328. package/styles/theme/brands/eika/_index.scss +2 -0
  329. package/styles/theme/brands/fremtind/_color-scheme.scss +121 -0
  330. package/styles/theme/brands/fremtind/_fonts.scss +30 -0
  331. package/styles/theme/brands/fremtind/_index.scss +2 -0
  332. package/styles/theme/brands/sparebank1/_color-scheme.scss +121 -0
  333. package/styles/theme/brands/sparebank1/_fonts.scss +38 -0
  334. package/styles/theme/brands/sparebank1/_index.scss +2 -0
  335. package/styles/utility/_headings.scss +1 -1
  336. package/styles/utility/_paragraphs.scss +2 -2
  337. package/styles/utility/_screen-reader.scss +1 -1
  338. package/styles/utility/_spacing.scss +2 -2
  339. package/src/fonts/FremtindGrotesk-Bold-Web.woff +0 -0
  340. package/src/fonts/FremtindGrotesk-Bold-Web.woff2 +0 -0
  341. package/src/fonts/FremtindGrotesk-BoldItalic-Web.woff +0 -0
  342. package/src/fonts/FremtindGrotesk-BoldItalic-Web.woff2 +0 -0
  343. package/src/fonts/FremtindGrotesk-Display-Web.woff +0 -0
  344. package/src/fonts/FremtindGrotesk-Display-Web.woff2 +0 -0
  345. package/src/fonts/FremtindGrotesk-Italic-Web.woff +0 -0
  346. package/src/fonts/FremtindGrotesk-Italic-Web.woff2 +0 -0
  347. package/src/fonts/FremtindGrotesk-Regular-Web.woff +0 -0
  348. package/src/fonts/FremtindGrotesk-Regular-Web.woff2 +0 -0
  349. package/src/fonts/FremtindGroteskMono-Regular-Web.woff +0 -0
  350. package/src/fonts/FremtindGroteskMono-Regular-Web.woff2 +0 -0
@@ -0,0 +1,198 @@
1
+ import { readdir, readFile, stat, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+
4
+ import {
5
+ applyDirectReplacements,
6
+ applyBetaStyleReplacements,
7
+ removeRedundantWebfontsCssImport,
8
+ reorderConfiguredFontImport,
9
+ BASE_OR_COMPONENT_CSS_PATTERN,
10
+ } from "./transforms/import-specifiers.mjs";
11
+ import { applyCssTokenRenames, applyTailwindColorRenames } from "./transforms/color-tokens.mjs";
12
+ import { applyFontFamilyReplacements } from "./transforms/font-family.mjs";
13
+ import { collectManualMigrationWarnings } from "./transforms/warnings.mjs";
14
+
15
+ const TEXT_EXTENSIONS = new Set([
16
+ ".cjs",
17
+ ".css",
18
+ ".cts",
19
+ ".js",
20
+ ".jsx",
21
+ ".md",
22
+ ".mdx",
23
+ ".mjs",
24
+ ".mts",
25
+ ".sass",
26
+ ".scss",
27
+ ".ts",
28
+ ".tsx",
29
+ ]);
30
+
31
+ const IGNORED_DIRECTORIES = new Set([
32
+ ".changeset",
33
+ ".git",
34
+ ".github",
35
+ ".next",
36
+ ".turbo",
37
+ "build",
38
+ "coverage",
39
+ "dist",
40
+ "node_modules",
41
+ "storybook-static",
42
+ ]);
43
+
44
+ const IGNORED_FILE_PATTERNS = [
45
+ "/packages/jokul/CHANGELOG.md",
46
+ "/packages/jokul/MIGRATION.md",
47
+ "/packages/jokul/build-styles.mjs",
48
+ "/packages/jokul/bin/",
49
+ "/packages/jokul/codemods/",
50
+ ];
51
+
52
+ function shouldIgnoreFile(filePath) {
53
+ const normalizedPath = filePath.split(path.sep).join("/");
54
+ return IGNORED_FILE_PATTERNS.some((pattern) => normalizedPath.includes(pattern));
55
+ }
56
+
57
+ function shouldIgnoreDirectory(directoryPath) {
58
+ return IGNORED_DIRECTORIES.has(path.basename(directoryPath));
59
+ }
60
+
61
+ export function transformImportPaths(text, filePath = "") {
62
+ const webfontsRemoval = removeRedundantWebfontsCssImport(text);
63
+ const fontFamily = applyFontFamilyReplacements(webfontsRemoval.text);
64
+ const direct = applyDirectReplacements(fontFamily.text);
65
+ const beta = applyBetaStyleReplacements(direct.text);
66
+ const cssTokens = applyCssTokenRenames(beta.text);
67
+ const tailwindColors = applyTailwindColorRenames(cssTokens.text);
68
+ let next = tailwindColors.text;
69
+ let reordered = false;
70
+
71
+ if (/\.(sass|scss)$/i.test(filePath)) {
72
+ const reorderedResult = reorderConfiguredFontImport(next);
73
+ next = reorderedResult.text;
74
+ reordered = reorderedResult.reordered;
75
+ }
76
+
77
+ const warnings = [
78
+ ...beta.warnings,
79
+ ...collectManualMigrationWarnings(text),
80
+ ];
81
+
82
+ if (webfontsRemoval.count > 0 && !BASE_OR_COMPONENT_CSS_PATTERN.test(next)) {
83
+ warnings.push(
84
+ "Manuell vurdering: fjernet import av `styles/fonts/webfonts.css`. `@font-face`-definisjonene ligger nå i `@fremtind/jokul/styles/base.css`, så den må importeres for at fontene skal lastes.",
85
+ );
86
+ }
87
+
88
+ return {
89
+ text: next,
90
+ changed: next !== text,
91
+ replacements:
92
+ direct.replacements +
93
+ beta.replacements +
94
+ webfontsRemoval.count +
95
+ fontFamily.count +
96
+ cssTokens.count +
97
+ tailwindColors.count,
98
+ warnings,
99
+ reordered,
100
+ };
101
+ }
102
+
103
+ async function collectFiles(targetPath, collected) {
104
+ const stats = await stat(targetPath);
105
+
106
+ if (stats.isDirectory()) {
107
+ if (shouldIgnoreDirectory(targetPath)) {
108
+ return collected;
109
+ }
110
+
111
+ const entries = await readdir(targetPath, { withFileTypes: true });
112
+ const sortedEntries = [...entries].sort((a, b) => a.name.localeCompare(b.name));
113
+
114
+ for (const entry of sortedEntries) {
115
+ if (entry.isDirectory() && IGNORED_DIRECTORIES.has(entry.name)) {
116
+ continue;
117
+ }
118
+ await collectFiles(path.join(targetPath, entry.name), collected);
119
+ }
120
+
121
+ return collected;
122
+ }
123
+
124
+ if (TEXT_EXTENSIONS.has(path.extname(targetPath)) && !shouldIgnoreFile(targetPath)) {
125
+ collected.push(targetPath);
126
+ }
127
+
128
+ return collected;
129
+ }
130
+
131
+ function parseArguments(rawArgs) {
132
+ const options = { dryRun: false, verbose: false };
133
+ const targets = [];
134
+
135
+ for (const arg of rawArgs) {
136
+ if (arg === "--dry-run") { options.dryRun = true; continue; }
137
+ if (arg === "--verbose") { options.verbose = true; continue; }
138
+ if (arg === "--help" || arg === "-h") {
139
+ throw new Error(
140
+ "Bruk: jokul codemod [import-paths] [sti ...] [--dry-run] [--verbose]",
141
+ );
142
+ }
143
+ targets.push(arg);
144
+ }
145
+
146
+ return { options, targets: targets.length > 0 ? targets : ["."] };
147
+ }
148
+
149
+ export async function runImportPathsCodemod(rawArgs = []) {
150
+ const { options, targets } = parseArguments(rawArgs);
151
+ const files = [];
152
+
153
+ for (const target of targets) {
154
+ await collectFiles(path.resolve(target), files);
155
+ }
156
+
157
+ const uniqueFiles = [...new Set(files)].sort((a, b) => a.localeCompare(b));
158
+ let changedFiles = 0;
159
+ let changedSpecifiers = 0;
160
+ let reorderedFiles = 0;
161
+ const warnings = [];
162
+
163
+ for (const filePath of uniqueFiles) {
164
+ const source = await readFile(filePath, "utf-8");
165
+ const result = transformImportPaths(source, filePath);
166
+
167
+ for (const warning of result.warnings) {
168
+ warnings.push(`${filePath}: ${warning}`);
169
+ }
170
+
171
+ if (!result.changed) {
172
+ continue;
173
+ }
174
+
175
+ changedFiles += 1;
176
+ changedSpecifiers += result.replacements;
177
+ reorderedFiles += result.reordered ? 1 : 0;
178
+
179
+ if (!options.dryRun) {
180
+ await writeFile(filePath, result.text, "utf-8");
181
+ }
182
+
183
+ if (options.verbose || options.dryRun) {
184
+ console.log(`${options.dryRun ? "Ville endret" : "Endret"} ${filePath}`);
185
+ }
186
+ }
187
+
188
+ if (warnings.length > 0) {
189
+ console.warn("\nFiler som trenger manuell oppfølging:");
190
+ for (const warning of warnings) {
191
+ console.warn(`- ${warning}`);
192
+ }
193
+ }
194
+
195
+ console.log(
196
+ `\n${options.dryRun ? "Dry run ferdig" : "Codemod ferdig"}: ${changedFiles} filer, ${changedSpecifiers} erstatninger${reorderedFiles > 0 ? `, ${reorderedFiles} justerte font-importrekkefølger` : ""}.`,
197
+ );
198
+ }
@@ -0,0 +1,77 @@
1
+ import { replaceSpecifier, replaceTailwindClass } from "../utils.mjs";
2
+
3
+ // Sortert lengst-først: spesifikke tokens (f.eks. -alert-info) må ikke bli
4
+ // delvis matchet av kortere prefiks.
5
+ const CSS_TOKEN_RENAMES = [
6
+ ["--jkl-color-background-alert-warning", "--jkl-color-warning-background-container"],
7
+ ["--jkl-color-background-alert-success", "--jkl-color-success-background-container"],
8
+ ["--jkl-color-background-alert-error", "--jkl-color-error-background-container"],
9
+ ["--jkl-color-background-alert-info", "--jkl-color-info-background-container"],
10
+ ["--jkl-color-background-container-high", "--jkl-color-background-container"],
11
+ ["--jkl-color-background-container-low", "--jkl-color-background-container"],
12
+ ["--jkl-color-background-container-inverted", "--jkl-color-background-contrast"],
13
+ ["--jkl-color-background-action", "--jkl-color-background-contrast"],
14
+ ["--jkl-color-text-on-action", "--jkl-color-text-on-contrast"],
15
+ ["--jkl-color-text-inverted", "--jkl-color-text-on-contrast"],
16
+ ].sort(([a], [b]) => b.length - a.length);
17
+
18
+ // Tilsvarende omdøyping for Tailwind --color-{nøkkel}-variablar.
19
+ const TAILWIND_COLOR_RENAMES = [
20
+ ["background-alert-warning", "warning-background-container"],
21
+ ["background-alert-success", "success-background-container"],
22
+ ["background-alert-error", "error-background-container"],
23
+ ["background-alert-info", "info-background-container"],
24
+ ["background-container-high", "background-container"],
25
+ ["background-container-low", "background-container"],
26
+ ["background-container-inverted", "background-contrast"],
27
+ ["background-action", "background-contrast"],
28
+ ["text-on-action", "text-on-contrast"],
29
+ ["text-inverted", "text-on-contrast"],
30
+ ].sort(([a], [b]) => b.length - a.length);
31
+
32
+ const TAILWIND_COLOR_PREFIXES = [
33
+ "bg",
34
+ "text",
35
+ "border",
36
+ "ring",
37
+ "shadow",
38
+ "fill",
39
+ "stroke",
40
+ "accent",
41
+ "caret",
42
+ "outline",
43
+ "placeholder",
44
+ "divide",
45
+ "from",
46
+ "via",
47
+ "to",
48
+ "decoration",
49
+ ];
50
+
51
+ export function applyCssTokenRenames(text) {
52
+ let next = text;
53
+ let count = 0;
54
+
55
+ for (const [from, to] of CSS_TOKEN_RENAMES) {
56
+ const result = replaceSpecifier(next, from, to);
57
+ next = result.text;
58
+ count += result.count;
59
+ }
60
+
61
+ return { text: next, count };
62
+ }
63
+
64
+ export function applyTailwindColorRenames(text) {
65
+ let next = text;
66
+ let count = 0;
67
+
68
+ for (const [fromKey, toKey] of TAILWIND_COLOR_RENAMES) {
69
+ for (const prefix of TAILWIND_COLOR_PREFIXES) {
70
+ const result = replaceTailwindClass(next, `${prefix}-${fromKey}`, `${prefix}-${toKey}`);
71
+ next = result.text;
72
+ count += result.count;
73
+ }
74
+ }
75
+
76
+ return { text: next, count };
77
+ }
@@ -0,0 +1,23 @@
1
+ import { escapeRegExp } from "../utils.mjs";
2
+
3
+ // Fallback-navnet kommer først (lengst-først) slik at det ikke blir delvis
4
+ // overskrevet av det kortere primærnavnet.
5
+ const FONT_FAMILY_REPLACEMENTS = [
6
+ ["Fremtind Material Symbols Fallback", "Jokul Icons Fallback"],
7
+ ["Fremtind Material Symbols", "Jokul Icons"],
8
+ ];
9
+
10
+ export function applyFontFamilyReplacements(text) {
11
+ let next = text;
12
+ let count = 0;
13
+
14
+ for (const [from, to] of FONT_FAMILY_REPLACEMENTS) {
15
+ const pattern = new RegExp(escapeRegExp(from), "g");
16
+ next = next.replace(pattern, () => {
17
+ count += 1;
18
+ return to;
19
+ });
20
+ }
21
+
22
+ return { text: next, count };
23
+ }
@@ -0,0 +1,230 @@
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
+ [
9
+ "@fremtind/jokul/styles/core/core.css",
10
+ "@fremtind/jokul/styles/base.css",
11
+ ],
12
+ [
13
+ "@fremtind/jokul/styles/core/core.scss",
14
+ "@fremtind/jokul/styles/base.scss",
15
+ ],
16
+ ["@fremtind/jokul/styles/core/core", "@fremtind/jokul/styles/base"],
17
+ [
18
+ "@fremtind/jokul/styles/styles.min.css",
19
+ "@fremtind/jokul/styles/components.min.css",
20
+ ],
21
+ ["@fremtind/jokul/styles/styles.css", "@fremtind/jokul/styles/components.css"],
22
+ [
23
+ "@fremtind/jokul/styles/styles.scss",
24
+ "@fremtind/jokul/styles/components.scss",
25
+ ],
26
+ ["@fremtind/jokul/styles/styles", "@fremtind/jokul/styles/components"],
27
+ [
28
+ "@fremtind/jokul/styles/core/jkl/index",
29
+ "@fremtind/jokul/styles/jkl",
30
+ ],
31
+ ["@fremtind/jokul/styles/core/jkl", "@fremtind/jokul/styles/jkl"],
32
+ [
33
+ "@fremtind/jokul/styles/fonts/webfonts.scss",
34
+ "@fremtind/jokul/styles/theme/fonts",
35
+ ],
36
+ [
37
+ "@fremtind/jokul/styles/fonts/webfonts",
38
+ "@fremtind/jokul/styles/theme/fonts",
39
+ ],
40
+ ["@fremtind/jokul/styles/fonts", "@fremtind/jokul/styles/theme/fonts"],
41
+ ["../../../core/jkl/index", "../../../styles/jkl"],
42
+ ["../../../core/jkl", "../../../styles/jkl"],
43
+ ["../../core/jkl/index", "../../styles/jkl"],
44
+ ["../../core/jkl", "../../styles/jkl"],
45
+ ["../core/jkl/index", "../styles/jkl"],
46
+ ["../core/jkl", "../styles/jkl"],
47
+ ["@fremtind/jokul/tailwind/v4", "@fremtind/jokul/styles/tailwind"],
48
+ ["@fremtind/jokul/styles/core", "@fremtind/jokul/styles/base.scss"],
49
+ ["@fremtind/jokul/styles", "@fremtind/jokul/styles/components.scss"],
50
+ ["@fremtind/jokul/core", "@fremtind/jokul/utilities"],
51
+ ].sort(([a], [b]) => b.length - a.length);
52
+
53
+ const BETA_STYLE_MIGRATIONS = [
54
+ {
55
+ component: "DescriptionList",
56
+ betaIdentifiers: ["BETA_DescriptionList", "BETA_DescriptionListItem"],
57
+ replacements: [
58
+ [
59
+ "@fremtind/jokul/styles/components/description-list/_index.scss",
60
+ "@fremtind/jokul/styles/components/beta/description-list/_index.scss",
61
+ ],
62
+ [
63
+ "@fremtind/jokul/styles/components/description-list/description-list.scss",
64
+ "@fremtind/jokul/styles/components/beta/description-list/description-list.scss",
65
+ ],
66
+ [
67
+ "@fremtind/jokul/styles/components/description-list",
68
+ "@fremtind/jokul/styles/components/beta/description-list",
69
+ ],
70
+ ],
71
+ },
72
+ {
73
+ component: "NavLink",
74
+ betaIdentifiers: ["BETA_NavLink"],
75
+ replacements: [
76
+ [
77
+ "@fremtind/jokul/styles/components/nav-link/_index.scss",
78
+ "@fremtind/jokul/styles/components/beta/nav-link/_index.scss",
79
+ ],
80
+ [
81
+ "@fremtind/jokul/styles/components/nav-link/nav-link.scss",
82
+ "@fremtind/jokul/styles/components/beta/nav-link/navlink.scss",
83
+ ],
84
+ [
85
+ "@fremtind/jokul/styles/components/nav-link",
86
+ "@fremtind/jokul/styles/components/beta/nav-link",
87
+ ],
88
+ ],
89
+ },
90
+ {
91
+ component: "Select",
92
+ betaIdentifiers: ["BETA_Select"],
93
+ replacements: [
94
+ [
95
+ "@fremtind/jokul/styles/components/select/_index.scss",
96
+ "@fremtind/jokul/styles/components/beta/select/_index.scss",
97
+ ],
98
+ [
99
+ "@fremtind/jokul/styles/components/select/select.scss",
100
+ "@fremtind/jokul/styles/components/beta/select/select.scss",
101
+ ],
102
+ [
103
+ "@fremtind/jokul/styles/components/select",
104
+ "@fremtind/jokul/styles/components/beta/select",
105
+ ],
106
+ ],
107
+ },
108
+ ];
109
+
110
+ const WEBFONTS_CSS_SPECIFIER =
111
+ "@fremtind/jokul/styles/fonts/webfonts(?:\\.min)?\\.css";
112
+
113
+ export const BASE_OR_COMPONENT_CSS_PATTERN = new RegExp(
114
+ "@fremtind/jokul/styles/(?:base|components)(?:\\.min)?\\.css",
115
+ );
116
+
117
+ const WEBFONTS_CSS_REMOVAL_PATTERNS = [
118
+ // import "@fremtind/jokul/styles/fonts/webfonts.css"; (ESM)
119
+ new RegExp(
120
+ `^[ \\t]*import\\s+["']${WEBFONTS_CSS_SPECIFIER}["']\\s*;?[ \\t]*\\r?\\n?`,
121
+ "gm",
122
+ ),
123
+ // require("@fremtind/jokul/styles/fonts/webfonts.css"); (CJS)
124
+ new RegExp(
125
+ `^[ \\t]*require\\(\\s*["']${WEBFONTS_CSS_SPECIFIER}["']\\s*\\)\\s*;?[ \\t]*\\r?\\n?`,
126
+ "gm",
127
+ ),
128
+ // @import "@fremtind/jokul/styles/fonts/webfonts.css"; (CSS / SCSS)
129
+ new RegExp(
130
+ `^[ \\t]*@import\\s+["']${WEBFONTS_CSS_SPECIFIER}["']\\s*;?[ \\t]*\\r?\\n?`,
131
+ "gm",
132
+ ),
133
+ ];
134
+
135
+ export function applyDirectReplacements(text) {
136
+ let next = text;
137
+ let replacements = 0;
138
+
139
+ for (const [from, to] of DIRECT_REPLACEMENTS) {
140
+ const result = replaceSpecifier(next, from, to);
141
+ next = result.text;
142
+ replacements += result.count;
143
+ }
144
+
145
+ return { text: next, replacements };
146
+ }
147
+
148
+ export function applyBetaStyleReplacements(text) {
149
+ let next = text;
150
+ let replacements = 0;
151
+ const warnings = [];
152
+
153
+ for (const migration of BETA_STYLE_MIGRATIONS) {
154
+ const mentionsBeta = migration.betaIdentifiers.some((identifier) =>
155
+ next.includes(identifier),
156
+ );
157
+
158
+ const hasOldSpecifier = migration.replacements.some(([from]) =>
159
+ new RegExp(
160
+ `(?<![A-Za-z0-9_./-])${escapeRegExp(from)}(?![A-Za-z0-9_./-])`,
161
+ ).test(next),
162
+ );
163
+
164
+ if (!hasOldSpecifier) {
165
+ continue;
166
+ }
167
+
168
+ if (!mentionsBeta) {
169
+ warnings.push(
170
+ `Manuell vurdering: gammel stilimport for ${migration.component} kan peke på enten stabil eller beta-variant.`,
171
+ );
172
+ continue;
173
+ }
174
+
175
+ for (const [from, to] of migration.replacements) {
176
+ const result = replaceSpecifier(next, from, to);
177
+ next = result.text;
178
+ replacements += result.count;
179
+ }
180
+ }
181
+
182
+ return { text: next, replacements, warnings };
183
+ }
184
+
185
+ // I Jøkul 5 er @font-face-definisjonene flyttet inn i styles/base.css. Standalone
186
+ // CSS-importer av webfonts.css fjernes; SCSS-konsumenter håndteres av
187
+ // DIRECT_REPLACEMENTS siden de kan overstyre $webfonts-dir.
188
+ export function removeRedundantWebfontsCssImport(text) {
189
+ let next = text;
190
+ let count = 0;
191
+
192
+ for (const pattern of WEBFONTS_CSS_REMOVAL_PATTERNS) {
193
+ next = next.replace(pattern, () => {
194
+ count += 1;
195
+ return "";
196
+ });
197
+ }
198
+
199
+ return { text: next, count };
200
+ }
201
+
202
+ export function reorderConfiguredFontImport(text) {
203
+ const fontImportPattern =
204
+ /^@use\s+["']@fremtind\/jokul\/styles\/theme\/fonts["'][\s\S]*?;\s*/m;
205
+ const baseImportPattern =
206
+ /^@use\s+["']@fremtind\/jokul\/styles\/base(?:\.scss)?["'][^;]*;\s*/m;
207
+
208
+ const fontMatch = fontImportPattern.exec(text);
209
+ const baseMatch = baseImportPattern.exec(text);
210
+
211
+ if (!fontMatch || !baseMatch || fontMatch.index < baseMatch.index) {
212
+ return { text, reordered: false };
213
+ }
214
+
215
+ const withoutFontImport =
216
+ text.slice(0, fontMatch.index) +
217
+ text.slice(fontMatch.index + fontMatch[0].length);
218
+ const nextBaseMatch = baseImportPattern.exec(withoutFontImport);
219
+
220
+ if (!nextBaseMatch) {
221
+ return { text, reordered: false };
222
+ }
223
+
224
+ const nextText =
225
+ withoutFontImport.slice(0, nextBaseMatch.index) +
226
+ fontMatch[0] +
227
+ withoutFontImport.slice(nextBaseMatch.index);
228
+
229
+ return { text: nextText, reordered: true };
230
+ }
@@ -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,6 +1,6 @@
1
1
  {
2
2
  "name": "@fremtind/jokul",
3
- "version": "5.0.0-next.1",
3
+ "version": "5.0.0-next.11",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -14,13 +14,19 @@
14
14
  "*.scss"
15
15
  ],
16
16
  "files": [
17
+ "./bin",
17
18
  "./build",
19
+ "./codemods",
18
20
  "./styles",
19
21
  "./src/fonts",
20
22
  "./package.json"
21
23
  ],
24
+ "bin": {
25
+ "jokul": "./bin/jokul.mjs"
26
+ },
22
27
  "exports": {
23
28
  "./package.json": "./package.json",
29
+ "./styles/jkl": "./styles/jkl/_index.scss",
24
30
  "./styles/*": "./styles/*",
25
31
  "./tailwind": {
26
32
  "import": {
Binary file