@fremtind/jokul 5.0.0-next.6 → 5.0.0-next.8

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 (142) hide show
  1. package/README.md +1 -1
  2. package/build/build-stats.html +1 -1
  3. package/build/cjs/components/card/Card.cjs +1 -1
  4. package/build/cjs/components/card/Card.cjs.map +1 -1
  5. package/build/cjs/components/card/index.d.cts +1 -1
  6. package/build/cjs/components/card/types.cjs +1 -1
  7. package/build/cjs/components/card/types.cjs.map +1 -1
  8. package/build/cjs/components/card/types.d.cts +3 -6
  9. package/build/cjs/tokens.cjs +1 -1
  10. package/build/cjs/tokens.cjs.map +1 -1
  11. package/build/cjs/tokens.d.cts +25 -32
  12. package/build/es/components/card/Card.js +1 -1
  13. package/build/es/components/card/Card.js.map +1 -1
  14. package/build/es/components/card/index.d.ts +1 -1
  15. package/build/es/components/card/types.d.ts +3 -6
  16. package/build/es/components/card/types.js +1 -1
  17. package/build/es/components/card/types.js.map +1 -1
  18. package/build/es/tokens.d.ts +25 -32
  19. package/build/es/tokens.js +1 -1
  20. package/build/es/tokens.js.map +1 -1
  21. package/codemods/__tests__/import-paths.test.mjs +189 -0
  22. package/codemods/import-paths.mjs +137 -3
  23. package/package.json +2 -1
  24. package/styles/base.css +550 -562
  25. package/styles/base.min.css +1 -1
  26. package/styles/components/autosuggest/autosuggest.css +2 -2
  27. package/styles/components/autosuggest/autosuggest.min.css +1 -1
  28. package/styles/components/autosuggest/autosuggest.scss +2 -2
  29. package/styles/components/beta/nav-link/navlink.css +1 -1
  30. package/styles/components/beta/nav-link/navlink.min.css +1 -1
  31. package/styles/components/beta/nav-link/navlink.scss +4 -2
  32. package/styles/components/button/button.css +2 -2
  33. package/styles/components/button/button.min.css +1 -1
  34. package/styles/components/button/button.scss +2 -2
  35. package/styles/components/card/card.css +3 -5
  36. package/styles/components/card/card.min.css +1 -1
  37. package/styles/components/card/card.scss +4 -7
  38. package/styles/components/checkbox/checkbox.css +1 -7
  39. package/styles/components/checkbox/checkbox.min.css +1 -1
  40. package/styles/components/checkbox/checkbox.scss +2 -8
  41. package/styles/components/checkbox-panel/checkbox-panel.css +2 -8
  42. package/styles/components/checkbox-panel/checkbox-panel.min.css +1 -1
  43. package/styles/components/chip/chip.css +4 -4
  44. package/styles/components/chip/chip.min.css +1 -1
  45. package/styles/components/chip/chip.scss +5 -5
  46. package/styles/components/combobox/combobox.css +7 -8
  47. package/styles/components/combobox/combobox.min.css +1 -1
  48. package/styles/components/combobox/combobox.scss +6 -12
  49. package/styles/components/countdown/countdown.css +2 -2
  50. package/styles/components/countdown/countdown.min.css +1 -1
  51. package/styles/components/datepicker/_calendar-date-button.scss +6 -4
  52. package/styles/components/datepicker/datepicker.css +3 -3
  53. package/styles/components/datepicker/datepicker.min.css +1 -1
  54. package/styles/components/expander/expandable.css +5 -2
  55. package/styles/components/expander/expandable.min.css +1 -1
  56. package/styles/components/expander/expandable.scss +6 -2
  57. package/styles/components/feedback/feedback.css +2 -2
  58. package/styles/components/feedback/feedback.min.css +1 -1
  59. package/styles/components/file-input/file-input.css +11 -11
  60. package/styles/components/file-input/file-input.min.css +1 -1
  61. package/styles/components/help/help.css +2 -2
  62. package/styles/components/help/help.min.css +1 -1
  63. package/styles/components/help/help.scss +4 -4
  64. package/styles/components/icon/icon.css +4 -4
  65. package/styles/components/icon/icon.min.css +1 -1
  66. package/styles/components/icon/icon.scss +73 -73
  67. package/styles/components/icon-button/icon-button.css +1 -1
  68. package/styles/components/icon-button/icon-button.min.css +1 -1
  69. package/styles/components/icon-button/icon-button.scss +1 -1
  70. package/styles/components/input-group/input-group.css +2 -2
  71. package/styles/components/input-group/input-group.min.css +1 -1
  72. package/styles/components/input-panel/input-panel.css +1 -1
  73. package/styles/components/input-panel/input-panel.min.css +1 -1
  74. package/styles/components/input-panel/input-panel.scss +2 -3
  75. package/styles/components/link-list/link-list.css +2 -2
  76. package/styles/components/link-list/link-list.min.css +1 -1
  77. package/styles/components/link-list/link-list.scss +2 -2
  78. package/styles/components/loader/loader.css +6 -6
  79. package/styles/components/loader/loader.min.css +1 -1
  80. package/styles/components/loader/skeleton-loader.css +3 -3
  81. package/styles/components/loader/skeleton-loader.min.css +1 -1
  82. package/styles/components/menu/_menu-item.scss +2 -2
  83. package/styles/components/menu/menu.css +2 -2
  84. package/styles/components/menu/menu.min.css +1 -1
  85. package/styles/components/message/message.css +3 -3
  86. package/styles/components/message/message.min.css +1 -1
  87. package/styles/components/message/message.scss +3 -6
  88. package/styles/components/pagination/pagination.css +2 -2
  89. package/styles/components/pagination/pagination.min.css +1 -1
  90. package/styles/components/pagination/pagination.scss +2 -2
  91. package/styles/components/progress-bar/progress-bar.css +1 -1
  92. package/styles/components/progress-bar/progress-bar.min.css +1 -1
  93. package/styles/components/radio-button/radio-button.css +1 -1
  94. package/styles/components/radio-button/radio-button.min.css +1 -1
  95. package/styles/components/radio-button/radio-button.scss +1 -1
  96. package/styles/components/radio-panel/radio-panel.css +1 -1
  97. package/styles/components/radio-panel/radio-panel.min.css +1 -1
  98. package/styles/components/segmented-control/segmented-control.css +13 -13
  99. package/styles/components/segmented-control/segmented-control.min.css +1 -1
  100. package/styles/components/segmented-control/segmented-control.scss +2 -2
  101. package/styles/components/select/select.css +2 -3
  102. package/styles/components/select/select.min.css +1 -1
  103. package/styles/components/select/select.scss +14 -19
  104. package/styles/components/system-message/system-message.css +5 -5
  105. package/styles/components/system-message/system-message.min.css +1 -1
  106. package/styles/components/system-message/system-message.scss +119 -118
  107. package/styles/components/table/_table-row.scss +3 -1
  108. package/styles/components/table/table.css +3 -1
  109. package/styles/components/table/table.min.css +1 -1
  110. package/styles/components/tabs/tabs.css +2 -2
  111. package/styles/components/tabs/tabs.min.css +1 -1
  112. package/styles/components/tabs/tabs.scss +3 -4
  113. package/styles/components/tag/tag.scss +2 -1
  114. package/styles/components/text-area/text-area.css +4 -4
  115. package/styles/components/text-area/text-area.min.css +1 -1
  116. package/styles/components/text-input/text-input.css +4 -4
  117. package/styles/components/text-input/text-input.min.css +1 -1
  118. package/styles/components/toast/toast.css +5 -5
  119. package/styles/components/toast/toast.min.css +1 -1
  120. package/styles/components/toast/toast.scss +4 -6
  121. package/styles/components/toggle-switch/toggle-switch.css +4 -9
  122. package/styles/components/toggle-switch/toggle-switch.min.css +1 -3
  123. package/styles/components/toggle-switch/toggle-switch.scss +4 -9
  124. package/styles/components/tooltip/tooltip.css +4 -4
  125. package/styles/components/tooltip/tooltip.min.css +1 -1
  126. package/styles/components/tooltip/tooltip.scss +4 -4
  127. package/styles/components.css +97 -107
  128. package/styles/components.min.css +1 -3
  129. package/styles/jkl/_tokens.scss +67 -73
  130. package/styles/shared/input/shared-input-styles.scss +5 -9
  131. package/styles/tailwind.css +110 -108
  132. package/styles/theme/_color-scheme.scss +110 -132
  133. package/styles/theme/brands/dnb/_color-scheme.scss +110 -108
  134. package/styles/theme/brands/eika/_color-scheme.scss +110 -108
  135. package/styles/theme/brands/fremtind/_color-scheme.scss +110 -108
  136. package/styles/theme/brands/sparebank1/_color-scheme.scss +110 -108
  137. package/build/cjs/tailwind/colors.cjs +0 -2
  138. package/build/cjs/tailwind/colors.cjs.map +0 -1
  139. package/build/cjs/tailwind/colors.d.cts +0 -39
  140. package/build/es/tailwind/colors.d.ts +0 -39
  141. package/build/es/tailwind/colors.js +0 -2
  142. package/build/es/tailwind/colors.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sources":["../../src/tokens.ts"],"sourcesContent":["/**\n * Do not edit directly, this file was auto-generated.\n */\n\nexport default {\n color: {\n neutral: {\n background: {\n page: \"var(--jkl-color-neutral-background-page)\",\n container: \"var(--jkl-color-neutral-background-container)\",\n action: \"var(--jkl-color-neutral-background-action)\",\n },\n text: {\n default: \"var(--jkl-color-neutral-text-default)\",\n subdued: \"var(--jkl-color-neutral-text-subdued)\",\n \"on-action\": \"var(--jkl-color-neutral-text-on-action)\",\n },\n border: {\n strong: \"var(--jkl-color-neutral-border-strong)\",\n default: \"var(--jkl-color-neutral-border-default)\",\n subdued: \"var(--jkl-color-neutral-border-subdued)\",\n },\n },\n accent: {\n background: {\n page: \"var(--jkl-color-accent-background-page)\",\n container: \"var(--jkl-color-accent-background-container)\",\n action: \"var(--jkl-color-accent-background-action)\",\n },\n text: {\n default: \"var(--jkl-color-accent-text-default)\",\n subdued: \"var(--jkl-color-accent-text-subdued)\",\n \"on-action\": \"var(--jkl-color-accent-text-on-action)\",\n },\n border: {\n strong: \"var(--jkl-color-accent-border-strong)\",\n default: \"var(--jkl-color-accent-border-default)\",\n subdued: \"var(--jkl-color-accent-border-subdued)\",\n },\n },\n warning: {\n background: {\n page: \"var(--jkl-color-warning-background-page)\",\n container: \"var(--jkl-color-warning-background-container)\",\n action: \"var(--jkl-color-warning-background-action)\",\n },\n text: {\n default: \"var(--jkl-color-warning-text-default)\",\n subdued: \"var(--jkl-color-warning-text-subdued)\",\n \"on-action\": \"var(--jkl-color-warning-text-on-action)\",\n },\n border: {\n strong: \"var(--jkl-color-warning-border-strong)\",\n default: \"var(--jkl-color-warning-border-default)\",\n subdued: \"var(--jkl-color-warning-border-subdued)\",\n },\n },\n success: {\n background: {\n page: \"var(--jkl-color-success-background-page)\",\n container: \"var(--jkl-color-success-background-container)\",\n action: \"var(--jkl-color-success-background-action)\",\n },\n text: {\n default: \"var(--jkl-color-success-text-default)\",\n subdued: \"var(--jkl-color-success-text-subdued)\",\n \"on-action\": \"var(--jkl-color-success-text-on-action)\",\n },\n border: {\n strong: \"var(--jkl-color-success-border-strong)\",\n default: \"var(--jkl-color-success-border-default)\",\n subdued: \"var(--jkl-color-success-border-subdued)\",\n },\n },\n info: {\n background: {\n page: \"var(--jkl-color-info-background-page)\",\n container: \"var(--jkl-color-info-background-container)\",\n action: \"var(--jkl-color-info-background-action)\",\n },\n text: {\n default: \"var(--jkl-color-info-text-default)\",\n subdued: \"var(--jkl-color-info-text-subdued)\",\n \"on-action\": \"var(--jkl-color-info-text-on-action)\",\n },\n border: {\n strong: \"var(--jkl-color-info-border-strong)\",\n default: \"var(--jkl-color-info-border-default)\",\n subdued: \"var(--jkl-color-info-border-subdued)\",\n },\n },\n error: {\n background: {\n page: \"var(--jkl-color-error-background-page)\",\n container: \"var(--jkl-color-error-background-container)\",\n action: \"var(--jkl-color-error-background-action)\",\n },\n text: {\n default: \"var(--jkl-color-error-text-default)\",\n subdued: \"var(--jkl-color-error-text-subdued)\",\n \"on-action\": \"var(--jkl-color-error-text-on-action)\",\n },\n border: {\n strong: \"var(--jkl-color-error-border-strong)\",\n default: \"var(--jkl-color-error-border-default)\",\n subdued: \"var(--jkl-color-error-border-subdued)\",\n },\n },\n },\n unit: {\n 0: \"var(--jkl-unit-0)\",\n 10: \"var(--jkl-unit-10)\",\n 15: \"var(--jkl-unit-15)\",\n 20: \"var(--jkl-unit-20)\",\n 25: \"var(--jkl-unit-25)\",\n 30: \"var(--jkl-unit-30)\",\n 35: \"var(--jkl-unit-35)\",\n 40: \"var(--jkl-unit-40)\",\n 50: \"var(--jkl-unit-50)\",\n 60: \"var(--jkl-unit-60)\",\n 70: \"var(--jkl-unit-70)\",\n 80: \"var(--jkl-unit-80)\",\n 90: \"var(--jkl-unit-90)\",\n 100: \"var(--jkl-unit-100)\",\n 130: \"var(--jkl-unit-130)\",\n 210: \"var(--jkl-unit-210)\",\n base: \"var(--jkl-unit-base)\",\n \"02\": \"var(--jkl-unit-02)\",\n \"05\": \"var(--jkl-unit-05)\",\n },\n spacing: {\n 0: \"var(--jkl-spacing-0)\",\n 2: \"var(--jkl-spacing-2)\",\n 4: \"var(--jkl-spacing-4)\",\n 8: \"var(--jkl-spacing-8)\",\n 12: \"var(--jkl-spacing-12)\",\n 16: \"var(--jkl-spacing-16)\",\n 24: \"var(--jkl-spacing-24)\",\n 32: \"var(--jkl-spacing-32)\",\n 40: \"var(--jkl-spacing-40)\",\n 64: \"var(--jkl-spacing-64)\",\n 104: \"var(--jkl-spacing-104)\",\n 168: \"var(--jkl-spacing-168)\",\n none: \"var(--jkl-spacing-none)\",\n \"2xs\": \"var(--jkl-spacing-2xs)\",\n xs: \"var(--jkl-spacing-xs)\",\n s: \"var(--jkl-spacing-s)\",\n m: \"var(--jkl-spacing-m)\",\n l: \"var(--jkl-spacing-l)\",\n xl: \"var(--jkl-spacing-xl)\",\n \"2xl\": \"var(--jkl-spacing-2xl)\",\n },\n border: {\n width: {\n 1: \"var(--jkl-border-width-1)\",\n 2: \"var(--jkl-border-width-2)\",\n 3: \"var(--jkl-border-width-3)\",\n },\n radius: {\n none: \"var(--jkl-border-radius-none)\",\n xs: \"var(--jkl-border-radius-xs)\",\n s: \"var(--jkl-border-radius-s)\",\n m: \"var(--jkl-border-radius-m)\",\n l: \"var(--jkl-border-radius-l)\",\n full: \"var(--jkl-border-radius-full)\",\n },\n },\n breakpoint: {\n small: \"var(--jkl-breakpoint-small)\",\n medium: \"var(--jkl-breakpoint-medium)\",\n large: \"var(--jkl-breakpoint-large)\",\n xl: \"var(--jkl-breakpoint-xl)\",\n },\n motion: {\n timing: {\n energetic: \"var(--jkl-motion-timing-energetic)\",\n snappy: \"var(--jkl-motion-timing-snappy)\",\n productive: \"var(--jkl-motion-timing-productive)\",\n polite: \"var(--jkl-motion-timing-polite)\",\n expressive: \"var(--jkl-motion-timing-expressive)\",\n lazy: \"var(--jkl-motion-timing-lazy)\",\n },\n easing: {\n standard: \"var(--jkl-motion-easing-standard)\",\n entrance: \"var(--jkl-motion-easing-entrance)\",\n exit: \"var(--jkl-motion-easing-exit)\",\n easeInBounceOut: \"var(--jkl-motion-easing-ease-in-bounce-out)\",\n focus: \"var(--jkl-motion-easing-focus)\",\n },\n },\n font: {\n size: {\n 1: \"var(--jkl-font-size-1)\",\n 2: \"var(--jkl-font-size-2)\",\n 3: \"var(--jkl-font-size-3)\",\n 4: \"var(--jkl-font-size-4)\",\n 5: \"var(--jkl-font-size-5)\",\n 6: \"var(--jkl-font-size-6)\",\n 7: \"var(--jkl-font-size-7)\",\n 8: \"var(--jkl-font-size-8)\",\n 9: \"var(--jkl-font-size-9)\",\n 10: \"var(--jkl-font-size-10)\",\n },\n weight: {\n normal: \"var(--jkl-font-weight-normal)\",\n bold: \"var(--jkl-font-weight-bold)\",\n },\n family: {\n regular: \"var(--jkl-font-family-regular)\",\n display: \"var(--jkl-font-family-display)\",\n mono: \"var(--jkl-font-family-mono)\",\n },\n },\n lineHeight: {\n flush: \"var(--jkl-line-height-flush)\",\n tight: \"var(--jkl-line-height-tight)\",\n relaxed: \"var(--jkl-line-height-relaxed)\",\n },\n textStyle: {\n title: \"var(--jkl-text-style-title)\",\n \"title-small\": \"var(--jkl-text-style-title-small)\",\n \"heading-1\": \"var(--jkl-text-style-heading-1)\",\n \"heading-2\": \"var(--jkl-text-style-heading-2)\",\n \"heading-3\": \"var(--jkl-text-style-heading-3)\",\n \"heading-4\": \"var(--jkl-text-style-heading-4)\",\n \"heading-5\": \"var(--jkl-text-style-heading-5)\",\n \"paragraph-large\": \"var(--jkl-text-style-paragraph-large)\",\n \"paragraph-medium\": \"var(--jkl-text-style-paragraph-medium)\",\n \"paragraph-small\": \"var(--jkl-text-style-paragraph-small)\",\n \"text-large\": \"var(--jkl-text-style-text-large)\",\n \"text-medium\": \"var(--jkl-text-style-text-medium)\",\n \"text-small\": \"var(--jkl-text-style-text-small)\",\n \"text-micro\": \"var(--jkl-text-style-text-micro)\",\n },\n};\n"],"names":["tokens","color","neutral","background","page","container","action","text","default","subdued","border","strong","accent","warning","success","info","error","unit","base","spacing","none","xs","s","m","l","xl","width","radius","full","breakpoint","small","medium","large","motion","timing","energetic","snappy","productive","polite","expressive","lazy","easing","standard","entrance","exit","easeInBounceOut","focus","font","size","weight","normal","bold","family","regular","display","mono","lineHeight","flush","tight","relaxed","textStyle","title"],"mappings":"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"}
1
+ {"version":3,"file":"tokens.js","sources":["../../src/tokens.ts"],"sourcesContent":["/**\n * Do not edit directly, this file was auto-generated.\n */\n\nexport default {\n color: {\n \"@\": {\n background: {\n page: \"var(--jkl-color-background-page)\",\n container: \"var(--jkl-color-background-container)\",\n \"container-accent\": \"var(--jkl-color-background-container-accent)\",\n contrast: \"var(--jkl-color-background-contrast)\",\n },\n text: {\n default: \"var(--jkl-color-text-default)\",\n subdued: \"var(--jkl-color-text-subdued)\",\n accent: \"var(--jkl-color-text-accent)\",\n \"on-contrast\": \"var(--jkl-color-text-on-contrast)\",\n },\n border: {\n default: \"var(--jkl-color-border-default)\",\n subdued: \"var(--jkl-color-border-subdued)\",\n strong: \"var(--jkl-color-border-strong)\",\n },\n },\n warning: {\n background: {\n page: \"var(--jkl-color-warning-background-page)\",\n container: \"var(--jkl-color-warning-background-container)\",\n \"container-accent\":\n \"var(--jkl-color-warning-background-container-accent)\",\n contrast: \"var(--jkl-color-warning-background-contrast)\",\n },\n text: {\n default: \"var(--jkl-color-warning-text-default)\",\n subdued: \"var(--jkl-color-warning-text-subdued)\",\n accent: \"var(--jkl-color-warning-text-accent)\",\n \"on-contrast\": \"var(--jkl-color-warning-text-on-contrast)\",\n },\n border: {\n default: \"var(--jkl-color-warning-border-default)\",\n subdued: \"var(--jkl-color-warning-border-subdued)\",\n strong: \"var(--jkl-color-warning-border-strong)\",\n },\n },\n success: {\n background: {\n page: \"var(--jkl-color-success-background-page)\",\n container: \"var(--jkl-color-success-background-container)\",\n \"container-accent\":\n \"var(--jkl-color-success-background-container-accent)\",\n contrast: \"var(--jkl-color-success-background-contrast)\",\n },\n text: {\n default: \"var(--jkl-color-success-text-default)\",\n subdued: \"var(--jkl-color-success-text-subdued)\",\n accent: \"var(--jkl-color-success-text-accent)\",\n \"on-contrast\": \"var(--jkl-color-success-text-on-contrast)\",\n },\n border: {\n default: \"var(--jkl-color-success-border-default)\",\n subdued: \"var(--jkl-color-success-border-subdued)\",\n strong: \"var(--jkl-color-success-border-strong)\",\n },\n },\n info: {\n background: {\n page: \"var(--jkl-color-info-background-page)\",\n container: \"var(--jkl-color-info-background-container)\",\n \"container-accent\": \"var(--jkl-color-info-background-container-accent)\",\n contrast: \"var(--jkl-color-info-background-contrast)\",\n },\n text: {\n default: \"var(--jkl-color-info-text-default)\",\n subdued: \"var(--jkl-color-info-text-subdued)\",\n accent: \"var(--jkl-color-info-text-accent)\",\n \"on-contrast\": \"var(--jkl-color-info-text-on-contrast)\",\n },\n border: {\n default: \"var(--jkl-color-info-border-default)\",\n subdued: \"var(--jkl-color-info-border-subdued)\",\n strong: \"var(--jkl-color-info-border-strong)\",\n },\n },\n error: {\n background: {\n page: \"var(--jkl-color-error-background-page)\",\n container: \"var(--jkl-color-error-background-container)\",\n \"container-accent\":\n \"var(--jkl-color-error-background-container-accent)\",\n contrast: \"var(--jkl-color-error-background-contrast)\",\n },\n text: {\n default: \"var(--jkl-color-error-text-default)\",\n subdued: \"var(--jkl-color-error-text-subdued)\",\n accent: \"var(--jkl-color-error-text-accent)\",\n \"on-contrast\": \"var(--jkl-color-error-text-on-contrast)\",\n },\n border: {\n default: \"var(--jkl-color-error-border-default)\",\n subdued: \"var(--jkl-color-error-border-subdued)\",\n strong: \"var(--jkl-color-error-border-strong)\",\n },\n },\n },\n unit: {\n 0: \"var(--jkl-unit0)\",\n 10: \"var(--jkl-unit10)\",\n 15: \"var(--jkl-unit15)\",\n 20: \"var(--jkl-unit20)\",\n 25: \"var(--jkl-unit25)\",\n 30: \"var(--jkl-unit30)\",\n 35: \"var(--jkl-unit35)\",\n 40: \"var(--jkl-unit40)\",\n 50: \"var(--jkl-unit50)\",\n 60: \"var(--jkl-unit60)\",\n 70: \"var(--jkl-unit70)\",\n 80: \"var(--jkl-unit80)\",\n 90: \"var(--jkl-unit90)\",\n 100: \"var(--jkl-unit100)\",\n 130: \"var(--jkl-unit130)\",\n 210: \"var(--jkl-unit210)\",\n base: \"var(--jkl-unit-base)\",\n \"02\": \"var(--jkl-unit02)\",\n \"05\": \"var(--jkl-unit05)\",\n },\n spacing: {\n 0: \"var(--jkl-spacing0)\",\n 2: \"var(--jkl-spacing2)\",\n 4: \"var(--jkl-spacing4)\",\n 8: \"var(--jkl-spacing8)\",\n 12: \"var(--jkl-spacing12)\",\n 16: \"var(--jkl-spacing16)\",\n 24: \"var(--jkl-spacing24)\",\n 32: \"var(--jkl-spacing32)\",\n 40: \"var(--jkl-spacing40)\",\n 64: \"var(--jkl-spacing64)\",\n 104: \"var(--jkl-spacing104)\",\n 168: \"var(--jkl-spacing168)\",\n none: \"var(--jkl-spacing-none)\",\n \"2xs\": \"var(--jkl-spacing2xs)\",\n xs: \"var(--jkl-spacing-xs)\",\n s: \"var(--jkl-spacing-s)\",\n m: \"var(--jkl-spacing-m)\",\n l: \"var(--jkl-spacing-l)\",\n xl: \"var(--jkl-spacing-xl)\",\n \"2xl\": \"var(--jkl-spacing2xl)\",\n },\n border: {\n width: {\n 1: \"var(--jkl-border-width1)\",\n 2: \"var(--jkl-border-width2)\",\n 3: \"var(--jkl-border-width3)\",\n },\n radius: {\n none: \"var(--jkl-border-radius-none)\",\n xs: \"var(--jkl-border-radius-xs)\",\n s: \"var(--jkl-border-radius-s)\",\n m: \"var(--jkl-border-radius-m)\",\n l: \"var(--jkl-border-radius-l)\",\n full: \"var(--jkl-border-radius-full)\",\n },\n },\n breakpoint: {\n small: \"var(--jkl-breakpoint-small)\",\n medium: \"var(--jkl-breakpoint-medium)\",\n large: \"var(--jkl-breakpoint-large)\",\n xl: \"var(--jkl-breakpoint-xl)\",\n },\n motion: {\n timing: {\n energetic: \"var(--jkl-motion-timing-energetic)\",\n snappy: \"var(--jkl-motion-timing-snappy)\",\n productive: \"var(--jkl-motion-timing-productive)\",\n polite: \"var(--jkl-motion-timing-polite)\",\n expressive: \"var(--jkl-motion-timing-expressive)\",\n lazy: \"var(--jkl-motion-timing-lazy)\",\n },\n easing: {\n standard: \"var(--jkl-motion-easing-standard)\",\n entrance: \"var(--jkl-motion-easing-entrance)\",\n exit: \"var(--jkl-motion-easing-exit)\",\n easeInBounceOut: \"var(--jkl-motion-easing-ease-in-bounce-out)\",\n focus: \"var(--jkl-motion-easing-focus)\",\n },\n },\n font: {\n size: {\n 1: \"var(--jkl-font-size1)\",\n 2: \"var(--jkl-font-size2)\",\n 3: \"var(--jkl-font-size3)\",\n 4: \"var(--jkl-font-size4)\",\n 5: \"var(--jkl-font-size5)\",\n 6: \"var(--jkl-font-size6)\",\n 7: \"var(--jkl-font-size7)\",\n 8: \"var(--jkl-font-size8)\",\n 9: \"var(--jkl-font-size9)\",\n 10: \"var(--jkl-font-size10)\",\n },\n weight: {\n normal: \"var(--jkl-font-weight-normal)\",\n bold: \"var(--jkl-font-weight-bold)\",\n },\n family: {\n regular: \"var(--jkl-font-family-regular)\",\n display: \"var(--jkl-font-family-display)\",\n mono: \"var(--jkl-font-family-mono)\",\n },\n },\n lineHeight: {\n flush: \"var(--jkl-line-height-flush)\",\n tight: \"var(--jkl-line-height-tight)\",\n relaxed: \"var(--jkl-line-height-relaxed)\",\n },\n textStyle: {\n title: \"var(--jkl-text-style-title)\",\n \"title-small\": \"var(--jkl-text-style-title-small)\",\n \"heading-1\": \"var(--jkl-text-style-heading1)\",\n \"heading-2\": \"var(--jkl-text-style-heading2)\",\n \"heading-3\": \"var(--jkl-text-style-heading3)\",\n \"heading-4\": \"var(--jkl-text-style-heading4)\",\n \"heading-5\": \"var(--jkl-text-style-heading5)\",\n \"paragraph-large\": \"var(--jkl-text-style-paragraph-large)\",\n \"paragraph-medium\": \"var(--jkl-text-style-paragraph-medium)\",\n \"paragraph-small\": \"var(--jkl-text-style-paragraph-small)\",\n \"text-large\": \"var(--jkl-text-style-text-large)\",\n \"text-medium\": \"var(--jkl-text-style-text-medium)\",\n \"text-small\": \"var(--jkl-text-style-text-small)\",\n \"text-micro\": \"var(--jkl-text-style-text-micro)\",\n },\n};\n"],"names":["tokens","color","background","page","container","contrast","text","default","subdued","accent","border","strong","warning","success","info","error","unit","base","spacing","none","xs","s","m","l","xl","width","radius","full","breakpoint","small","medium","large","motion","timing","energetic","snappy","productive","polite","expressive","lazy","easing","standard","entrance","exit","easeInBounceOut","focus","font","size","weight","normal","bold","family","regular","display","mono","lineHeight","flush","tight","relaxed","textStyle","title"],"mappings":"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"}
@@ -82,3 +82,192 @@ import "@fremtind/jokul/styles/components/nav-link";
82
82
  assert.equal(result.changed, false);
83
83
  assert.equal(result.warnings.length, 1);
84
84
  });
85
+
86
+ test("removes redundant webfonts.css imports when base or components css is also imported", () => {
87
+ const source = `import "@fremtind/jokul/styles/styles.css";
88
+ import "@fremtind/jokul/styles/core/core.css";
89
+ import "@fremtind/jokul/styles/fonts/webfonts.css";
90
+ `;
91
+
92
+ const result = transformImportPaths(source, "/tmp/main.tsx");
93
+
94
+ assert.equal(
95
+ result.text.includes("@fremtind/jokul/styles/fonts/webfonts.css"),
96
+ false,
97
+ );
98
+ assert.equal(
99
+ result.text.includes('import "@fremtind/jokul/styles/components.css";'),
100
+ true,
101
+ );
102
+ assert.equal(
103
+ result.text.includes('import "@fremtind/jokul/styles/base.css";'),
104
+ true,
105
+ );
106
+ assert.deepEqual(result.warnings, []);
107
+ });
108
+
109
+ test("removes minified webfonts.css imports as well", () => {
110
+ const source = `import "@fremtind/jokul/styles/core/core.min.css";
111
+ import "@fremtind/jokul/styles/fonts/webfonts.min.css";
112
+ `;
113
+
114
+ const result = transformImportPaths(source, "/tmp/main.ts");
115
+
116
+ assert.equal(
117
+ result.text.includes("webfonts"),
118
+ false,
119
+ );
120
+ assert.equal(
121
+ result.text.includes('import "@fremtind/jokul/styles/base.min.css";'),
122
+ true,
123
+ );
124
+ });
125
+
126
+ test("warns when webfonts.css is removed without a base or components import", () => {
127
+ const source = `import "@fremtind/jokul/styles/fonts/webfonts.css";
128
+ `;
129
+
130
+ const result = transformImportPaths(source, "/tmp/main.tsx");
131
+
132
+ assert.equal(result.text.includes("webfonts"), false);
133
+ assert.equal(result.warnings.length, 1);
134
+ assert.match(result.warnings[0], /styles\/base\.css/);
135
+ });
136
+
137
+ test("removes css @import of webfonts.css", () => {
138
+ const source = `@import "@fremtind/jokul/styles/components.css";
139
+ @import "@fremtind/jokul/styles/fonts/webfonts.css";
140
+ `;
141
+
142
+ const result = transformImportPaths(source, "/tmp/global.css");
143
+
144
+ assert.equal(result.text.includes("webfonts"), false);
145
+ assert.equal(
146
+ result.text.includes('@import "@fremtind/jokul/styles/components.css";'),
147
+ true,
148
+ );
149
+ assert.deepEqual(result.warnings, []);
150
+ });
151
+
152
+ test("warns about removed sass color variables", () => {
153
+ const source = `@use "@fremtind/jokul/styles/jkl";
154
+
155
+ .banner {
156
+ background: jkl.$color-granitt;
157
+ color: jkl.$color-snohvit;
158
+ }
159
+ `;
160
+
161
+ const result = transformImportPaths(source, "/tmp/banner.scss");
162
+
163
+ assert.equal(
164
+ result.warnings.some((warning) =>
165
+ /jkl\.\$color-\*/.test(warning),
166
+ ),
167
+ true,
168
+ );
169
+ // Bare én advarsel per mønster, selv om det er flere forekomster
170
+ assert.equal(
171
+ result.warnings.filter((warning) =>
172
+ /jkl\.\$color-\*/.test(warning),
173
+ ).length,
174
+ 1,
175
+ );
176
+ });
177
+
178
+ test("warns about removed light/dark mode mixins", () => {
179
+ const source = `@use "@fremtind/jokul/styles/jkl";
180
+
181
+ @include jkl.light-mode-variables {
182
+ --min-farge: jkl.$color-granitt;
183
+ }
184
+ @include jkl.dark-mode-variables {
185
+ --min-farge: jkl.$color-snohvit;
186
+ }
187
+ `;
188
+
189
+ const result = transformImportPaths(source, "/tmp/theme.scss");
190
+
191
+ assert.equal(
192
+ result.warnings.some((warning) =>
193
+ /light-mode-variables/.test(warning),
194
+ ),
195
+ true,
196
+ );
197
+ });
198
+
199
+ test("warns about deprecated text-style names", () => {
200
+ const source = `@use "@fremtind/jokul/styles/jkl";
201
+
202
+ .lead {
203
+ @include jkl.text-style("body");
204
+ }
205
+
206
+ .fineprint {
207
+ @include jkl.text-style("small");
208
+ }
209
+ `;
210
+
211
+ const result = transformImportPaths(source, "/tmp/typography.scss");
212
+
213
+ assert.equal(
214
+ result.warnings.some((warning) =>
215
+ /paragraph-large\/medium\/small/.test(warning),
216
+ ),
217
+ true,
218
+ );
219
+ assert.equal(
220
+ result.warnings.some((warning) => /<Text>-komponenten/.test(warning)),
221
+ true,
222
+ );
223
+ });
224
+
225
+ test("renames Fremtind Material Symbols font-family", () => {
226
+ const source = `.icon {
227
+ font-family: "Fremtind Material Symbols", "Fremtind Material Symbols Fallback", sans-serif;
228
+ }
229
+ `;
230
+
231
+ const result = transformImportPaths(source, "/tmp/icons.scss");
232
+
233
+ assert.equal(
234
+ result.text.includes("Fremtind Material Symbols"),
235
+ false,
236
+ );
237
+ assert.equal(
238
+ result.text.includes(
239
+ '"Jokul Icons", "Jokul Icons Fallback", sans-serif',
240
+ ),
241
+ true,
242
+ );
243
+ assert.equal(result.replacements, 2);
244
+ });
245
+
246
+ test("renames Fremtind Material Symbols inside CSS files too", () => {
247
+ const source = `.icon {
248
+ font-family: 'Fremtind Material Symbols';
249
+ }
250
+ `;
251
+
252
+ const result = transformImportPaths(source, "/tmp/icons.css");
253
+
254
+ assert.equal(
255
+ result.text.includes("Fremtind Material Symbols"),
256
+ false,
257
+ );
258
+ assert.equal(result.text.includes("'Jokul Icons'"), true);
259
+ });
260
+
261
+ test("does not warn about valid 5.0 patterns", () => {
262
+ const source = `@use "@fremtind/jokul/styles/jkl";
263
+
264
+ .title {
265
+ @include jkl.text-style("heading-1");
266
+ color: var(--jkl-color-text-default);
267
+ }
268
+ `;
269
+
270
+ const result = transformImportPaths(source, "/tmp/title.scss");
271
+
272
+ assert.deepEqual(result.warnings, []);
273
+ });
@@ -226,6 +226,120 @@ function applyBetaStyleReplacements(text) {
226
226
  return { text: next, replacements, warnings };
227
227
  }
228
228
 
229
+ /**
230
+ * Font-family-navnet "Fremtind Material Symbols" (og tilhørende fallback) ble
231
+ * omdøpt til "Jokul Icons" i Jøkul 5. Konsumenter som har skrevet font-family
232
+ * direkte i sin egen CSS/SCSS får ellers en stille brutt referanse.
233
+ *
234
+ * Fallback-navnet erstattes først (lengst først), slik at det ikke blir
235
+ * delvis overskrevet av kortere mønster.
236
+ */
237
+ const FONT_FAMILY_REPLACEMENTS = [
238
+ ["Fremtind Material Symbols Fallback", "Jokul Icons Fallback"],
239
+ ["Fremtind Material Symbols", "Jokul Icons"],
240
+ ];
241
+
242
+ function applyFontFamilyReplacements(text) {
243
+ let next = text;
244
+ let count = 0;
245
+
246
+ for (const [from, to] of FONT_FAMILY_REPLACEMENTS) {
247
+ const pattern = new RegExp(escapeRegExp(from), "g");
248
+ next = next.replace(pattern, () => {
249
+ count += 1;
250
+ return to;
251
+ });
252
+ }
253
+
254
+ return { text: next, count };
255
+ }
256
+
257
+ const WEBFONTS_CSS_SPECIFIER =
258
+ "@fremtind/jokul/styles/fonts/webfonts(?:\\.min)?\\.css";
259
+
260
+ const BASE_OR_COMPONENT_CSS_PATTERN = new RegExp(
261
+ "@fremtind/jokul/styles/(?:base|components)(?:\\.min)?\\.css",
262
+ );
263
+
264
+ const WEBFONTS_CSS_REMOVAL_PATTERNS = [
265
+ // import "@fremtind/jokul/styles/fonts/webfonts.css"; (ESM)
266
+ new RegExp(
267
+ `^[ \\t]*import\\s+["']${WEBFONTS_CSS_SPECIFIER}["']\\s*;?[ \\t]*\\r?\\n?`,
268
+ "gm",
269
+ ),
270
+ // require("@fremtind/jokul/styles/fonts/webfonts.css"); (CJS)
271
+ new RegExp(
272
+ `^[ \\t]*require\\(\\s*["']${WEBFONTS_CSS_SPECIFIER}["']\\s*\\)\\s*;?[ \\t]*\\r?\\n?`,
273
+ "gm",
274
+ ),
275
+ // @import "@fremtind/jokul/styles/fonts/webfonts.css"; (CSS / SCSS)
276
+ new RegExp(
277
+ `^[ \\t]*@import\\s+["']${WEBFONTS_CSS_SPECIFIER}["']\\s*;?[ \\t]*\\r?\\n?`,
278
+ "gm",
279
+ ),
280
+ ];
281
+
282
+ /**
283
+ * I Jøkul 5 er `@font-face`-definisjonene flyttet inn i `styles/base.css`, og den
284
+ * frittstående `styles/fonts/webfonts.css` finnes ikke lenger i pakken. For
285
+ * .css-konsumenter betyr det at gamle `webfonts.css`-imports må fjernes – ellers
286
+ * blir bygget brutt fordi filen er borte. SCSS-konsumenter håndteres av
287
+ * `DIRECT_REPLACEMENTS` siden de kan ha behov for å overstyre `$webfonts-dir`.
288
+ */
289
+ function removeRedundantWebfontsCssImport(text) {
290
+ let next = text;
291
+ let count = 0;
292
+
293
+ for (const pattern of WEBFONTS_CSS_REMOVAL_PATTERNS) {
294
+ next = next.replace(pattern, () => {
295
+ count += 1;
296
+ return "";
297
+ });
298
+ }
299
+
300
+ return { text: next, count };
301
+ }
302
+
303
+ /**
304
+ * Patterns som ikke kan auto-erstattes, men som krever manuell migrering ved
305
+ * oppgradering fra Jøkul 4 til 5. Hvert mønster gir én advarsel per fil det
306
+ * matcher i (uavhengig av antall forekomster), med peker til hva man skal
307
+ * gjøre i stedet.
308
+ */
309
+ const MANUAL_MIGRATION_WARNINGS = [
310
+ {
311
+ // jkl.$color-granitt, jkl.$color-varde, osv. Alle Sass-fargevariabler
312
+ // ble fjernet i Jøkul 5 til fordel for semantiske CSS-variabler.
313
+ pattern: /\bjkl\.\$color-[a-z][a-z0-9-]*/i,
314
+ message:
315
+ "Fjernede Sass-fargevariabler (jkl.$color-*). I Jøkul 5 er alle gamle fargenavn (granitt, varde, snohvit osv.) fjernet — bruk semantiske CSS-variabler, f.eks. var(--jkl-color-text-default). Se https://jokul-portal.intern.app.prodaws.fremtind.no/fundamenter/farger.",
316
+ },
317
+ {
318
+ // @include jkl.light-mode-variables { ... } / dark-mode-variables { ... }
319
+ pattern: /@include\s+jkl\.(?:light|dark)-mode-variables\b/,
320
+ message:
321
+ "Fjernede mixins for custom light/dark-farger (jkl.light-mode-variables / jkl.dark-mode-variables). I Jøkul 5 må du bruke semantiske CSS-variabler i stedet for å definere egne dark/light-varianter.",
322
+ },
323
+ {
324
+ // @include jkl.text-style("body") / text-style("small")
325
+ pattern: /\btext-style\(\s*["'](?:body|small)["']\s*\)/,
326
+ message:
327
+ 'Fjernede tekststiler ("body", "small") i text-style-mixin. Foretrekk å bruke <Text>-komponenten der det er mulig (`import { Text } from "@fremtind/jokul/components/typography"`). Hvis du må sette stiler direkte, bytt til "paragraph-large/medium/small" eller "text-large/medium/small/micro" — se https://jokul-portal.intern.app.prodaws.fremtind.no/fundamenter/typografi.',
328
+ },
329
+ ];
330
+
331
+ function collectManualMigrationWarnings(text) {
332
+ const warnings = [];
333
+
334
+ for (const { pattern, message } of MANUAL_MIGRATION_WARNINGS) {
335
+ if (pattern.test(text)) {
336
+ warnings.push(`Manuell vurdering: ${message}`);
337
+ }
338
+ }
339
+
340
+ return warnings;
341
+ }
342
+
229
343
  function reorderConfiguredFontImport(text) {
230
344
  const fontImportPattern =
231
345
  /^@use\s+["']@fremtind\/jokul\/styles\/theme\/fonts["'][\s\S]*?;\s*/m;
@@ -257,7 +371,9 @@ function reorderConfiguredFontImport(text) {
257
371
  }
258
372
 
259
373
  export function transformImportPaths(text, filePath = "") {
260
- const direct = applyDirectReplacements(text);
374
+ const webfontsRemoval = removeRedundantWebfontsCssImport(text);
375
+ const fontFamily = applyFontFamilyReplacements(webfontsRemoval.text);
376
+ const direct = applyDirectReplacements(fontFamily.text);
261
377
  const beta = applyBetaStyleReplacements(direct.text);
262
378
  let next = beta.text;
263
379
  let reordered = false;
@@ -268,11 +384,29 @@ export function transformImportPaths(text, filePath = "") {
268
384
  reordered = reorderedResult.reordered;
269
385
  }
270
386
 
387
+ const warnings = [
388
+ ...beta.warnings,
389
+ ...collectManualMigrationWarnings(text),
390
+ ];
391
+
392
+ if (
393
+ webfontsRemoval.count > 0 &&
394
+ !BASE_OR_COMPONENT_CSS_PATTERN.test(next)
395
+ ) {
396
+ warnings.push(
397
+ "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.",
398
+ );
399
+ }
400
+
271
401
  return {
272
402
  text: next,
273
403
  changed: next !== text,
274
- replacements: direct.replacements + beta.replacements,
275
- warnings: beta.warnings,
404
+ replacements:
405
+ direct.replacements +
406
+ beta.replacements +
407
+ webfontsRemoval.count +
408
+ fontFamily.count,
409
+ warnings,
276
410
  reordered,
277
411
  };
278
412
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fremtind/jokul",
3
- "version": "5.0.0-next.6",
3
+ "version": "5.0.0-next.8",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -26,6 +26,7 @@
26
26
  },
27
27
  "exports": {
28
28
  "./package.json": "./package.json",
29
+ "./styles/jkl": "./styles/jkl/_index.scss",
29
30
  "./styles/*": "./styles/*",
30
31
  "./tailwind": {
31
32
  "import": {