@fristil/designsystem 0.2.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 (314) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/LICENSE +21 -0
  3. package/README.md +101 -0
  4. package/dist/cli.d.ts +31 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +261 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/components/css/accordion/accordion.d.ts +37 -0
  9. package/dist/components/css/accordion/accordion.d.ts.map +1 -0
  10. package/dist/components/css/accordion/accordion.js +31 -0
  11. package/dist/components/css/accordion/accordion.js.map +1 -0
  12. package/dist/components/css/alert/alert.d.ts +35 -0
  13. package/dist/components/css/alert/alert.d.ts.map +1 -0
  14. package/dist/components/css/alert/alert.js +29 -0
  15. package/dist/components/css/alert/alert.js.map +1 -0
  16. package/dist/components/css/avatar/avatar.d.ts +40 -0
  17. package/dist/components/css/avatar/avatar.d.ts.map +1 -0
  18. package/dist/components/css/avatar/avatar.js +30 -0
  19. package/dist/components/css/avatar/avatar.js.map +1 -0
  20. package/dist/components/css/badge/badge.d.ts +24 -0
  21. package/dist/components/css/badge/badge.d.ts.map +1 -0
  22. package/dist/components/css/badge/badge.js +24 -0
  23. package/dist/components/css/badge/badge.js.map +1 -0
  24. package/dist/components/css/breadcrumbs/breadcrumbs.d.ts +25 -0
  25. package/dist/components/css/breadcrumbs/breadcrumbs.d.ts.map +1 -0
  26. package/dist/components/css/breadcrumbs/breadcrumbs.js +23 -0
  27. package/dist/components/css/breadcrumbs/breadcrumbs.js.map +1 -0
  28. package/dist/components/css/button/button.d.ts +26 -0
  29. package/dist/components/css/button/button.d.ts.map +1 -0
  30. package/dist/components/css/button/button.js +25 -0
  31. package/dist/components/css/button/button.js.map +1 -0
  32. package/dist/components/css/card/card.d.ts +36 -0
  33. package/dist/components/css/card/card.d.ts.map +1 -0
  34. package/dist/components/css/card/card.js +28 -0
  35. package/dist/components/css/card/card.js.map +1 -0
  36. package/dist/components/css/checkbox/checkbox.d.ts +32 -0
  37. package/dist/components/css/checkbox/checkbox.d.ts.map +1 -0
  38. package/dist/components/css/checkbox/checkbox.js +27 -0
  39. package/dist/components/css/checkbox/checkbox.js.map +1 -0
  40. package/dist/components/css/dialog/dialog.d.ts +30 -0
  41. package/dist/components/css/dialog/dialog.d.ts.map +1 -0
  42. package/dist/components/css/dialog/dialog.js +28 -0
  43. package/dist/components/css/dialog/dialog.js.map +1 -0
  44. package/dist/components/css/divider/divider.d.ts +28 -0
  45. package/dist/components/css/divider/divider.d.ts.map +1 -0
  46. package/dist/components/css/divider/divider.js +22 -0
  47. package/dist/components/css/divider/divider.js.map +1 -0
  48. package/dist/components/css/error-text/error-text.d.ts +24 -0
  49. package/dist/components/css/error-text/error-text.d.ts.map +1 -0
  50. package/dist/components/css/error-text/error-text.js +18 -0
  51. package/dist/components/css/error-text/error-text.js.map +1 -0
  52. package/dist/components/css/fieldset/fieldset.d.ts +55 -0
  53. package/dist/components/css/fieldset/fieldset.d.ts.map +1 -0
  54. package/dist/components/css/fieldset/fieldset.js +39 -0
  55. package/dist/components/css/fieldset/fieldset.js.map +1 -0
  56. package/dist/components/css/file-upload/file-upload.d.ts +41 -0
  57. package/dist/components/css/file-upload/file-upload.d.ts.map +1 -0
  58. package/dist/components/css/file-upload/file-upload.js +32 -0
  59. package/dist/components/css/file-upload/file-upload.js.map +1 -0
  60. package/dist/components/css/heading/heading.d.ts +29 -0
  61. package/dist/components/css/heading/heading.d.ts.map +1 -0
  62. package/dist/components/css/heading/heading.js +23 -0
  63. package/dist/components/css/heading/heading.js.map +1 -0
  64. package/dist/components/css/help-text/help-text.d.ts +24 -0
  65. package/dist/components/css/help-text/help-text.d.ts.map +1 -0
  66. package/dist/components/css/help-text/help-text.js +23 -0
  67. package/dist/components/css/help-text/help-text.js.map +1 -0
  68. package/dist/components/css/input/input.d.ts +39 -0
  69. package/dist/components/css/input/input.d.ts.map +1 -0
  70. package/dist/components/css/input/input.js +44 -0
  71. package/dist/components/css/input/input.js.map +1 -0
  72. package/dist/components/css/label/label.d.ts +33 -0
  73. package/dist/components/css/label/label.d.ts.map +1 -0
  74. package/dist/components/css/label/label.js +23 -0
  75. package/dist/components/css/label/label.js.map +1 -0
  76. package/dist/components/css/link/link.d.ts +21 -0
  77. package/dist/components/css/link/link.d.ts.map +1 -0
  78. package/dist/components/css/link/link.js +14 -0
  79. package/dist/components/css/link/link.js.map +1 -0
  80. package/dist/components/css/list/list.d.ts +29 -0
  81. package/dist/components/css/list/list.d.ts.map +1 -0
  82. package/dist/components/css/list/list.js +23 -0
  83. package/dist/components/css/list/list.js.map +1 -0
  84. package/dist/components/css/pagination/pagination.d.ts +27 -0
  85. package/dist/components/css/pagination/pagination.d.ts.map +1 -0
  86. package/dist/components/css/pagination/pagination.js +25 -0
  87. package/dist/components/css/pagination/pagination.js.map +1 -0
  88. package/dist/components/css/paragraph/paragraph.d.ts +36 -0
  89. package/dist/components/css/paragraph/paragraph.d.ts.map +1 -0
  90. package/dist/components/css/paragraph/paragraph.js +26 -0
  91. package/dist/components/css/paragraph/paragraph.js.map +1 -0
  92. package/dist/components/css/radio/radio.d.ts +32 -0
  93. package/dist/components/css/radio/radio.d.ts.map +1 -0
  94. package/dist/components/css/radio/radio.js +27 -0
  95. package/dist/components/css/radio/radio.js.map +1 -0
  96. package/dist/components/css/search/search.d.ts +33 -0
  97. package/dist/components/css/search/search.d.ts.map +1 -0
  98. package/dist/components/css/search/search.js +31 -0
  99. package/dist/components/css/search/search.js.map +1 -0
  100. package/dist/components/css/select/select.d.ts +23 -0
  101. package/dist/components/css/select/select.d.ts.map +1 -0
  102. package/dist/components/css/select/select.js +18 -0
  103. package/dist/components/css/select/select.js.map +1 -0
  104. package/dist/components/css/shared.d.ts +26 -0
  105. package/dist/components/css/shared.d.ts.map +1 -0
  106. package/dist/components/css/shared.js +34 -0
  107. package/dist/components/css/shared.js.map +1 -0
  108. package/dist/components/css/skeleton/skeleton.d.ts +29 -0
  109. package/dist/components/css/skeleton/skeleton.d.ts.map +1 -0
  110. package/dist/components/css/skeleton/skeleton.js +23 -0
  111. package/dist/components/css/skeleton/skeleton.js.map +1 -0
  112. package/dist/components/css/skip-link/skip-link.d.ts +18 -0
  113. package/dist/components/css/skip-link/skip-link.d.ts.map +1 -0
  114. package/dist/components/css/skip-link/skip-link.js +16 -0
  115. package/dist/components/css/skip-link/skip-link.js.map +1 -0
  116. package/dist/components/css/spinner/spinner.d.ts +33 -0
  117. package/dist/components/css/spinner/spinner.d.ts.map +1 -0
  118. package/dist/components/css/spinner/spinner.js +25 -0
  119. package/dist/components/css/spinner/spinner.js.map +1 -0
  120. package/dist/components/css/sr-only/sr-only.d.ts +17 -0
  121. package/dist/components/css/sr-only/sr-only.d.ts.map +1 -0
  122. package/dist/components/css/sr-only/sr-only.js +14 -0
  123. package/dist/components/css/sr-only/sr-only.js.map +1 -0
  124. package/dist/components/css/switch/switch.d.ts +33 -0
  125. package/dist/components/css/switch/switch.d.ts.map +1 -0
  126. package/dist/components/css/switch/switch.js +29 -0
  127. package/dist/components/css/switch/switch.js.map +1 -0
  128. package/dist/components/css/table/table.d.ts +36 -0
  129. package/dist/components/css/table/table.d.ts.map +1 -0
  130. package/dist/components/css/table/table.js +28 -0
  131. package/dist/components/css/table/table.js.map +1 -0
  132. package/dist/components/css/tag/tag.d.ts +35 -0
  133. package/dist/components/css/tag/tag.d.ts.map +1 -0
  134. package/dist/components/css/tag/tag.js +27 -0
  135. package/dist/components/css/tag/tag.js.map +1 -0
  136. package/dist/components/css/textarea/textarea.d.ts +23 -0
  137. package/dist/components/css/textarea/textarea.d.ts.map +1 -0
  138. package/dist/components/css/textarea/textarea.js +18 -0
  139. package/dist/components/css/textarea/textarea.js.map +1 -0
  140. package/dist/components/css/toggle-group/toggle-group.d.ts +31 -0
  141. package/dist/components/css/toggle-group/toggle-group.d.ts.map +1 -0
  142. package/dist/components/css/toggle-group/toggle-group.js +29 -0
  143. package/dist/components/css/toggle-group/toggle-group.js.map +1 -0
  144. package/dist/components/css/tooltip/tooltip.d.ts +30 -0
  145. package/dist/components/css/tooltip/tooltip.d.ts.map +1 -0
  146. package/dist/components/css/tooltip/tooltip.js +28 -0
  147. package/dist/components/css/tooltip/tooltip.js.map +1 -0
  148. package/dist/components/frittstaende/calendar/fs-calendar.d.ts +52 -0
  149. package/dist/components/frittstaende/calendar/fs-calendar.d.ts.map +1 -0
  150. package/dist/components/frittstaende/calendar/fs-calendar.js +462 -0
  151. package/dist/components/frittstaende/calendar/fs-calendar.js.map +1 -0
  152. package/dist/components/frittstaende/date-field/fs-date-field.d.ts +110 -0
  153. package/dist/components/frittstaende/date-field/fs-date-field.d.ts.map +1 -0
  154. package/dist/components/frittstaende/date-field/fs-date-field.js +264 -0
  155. package/dist/components/frittstaende/date-field/fs-date-field.js.map +1 -0
  156. package/dist/components/frittstaende/suggestion/fs-suggestion.d.ts +133 -0
  157. package/dist/components/frittstaende/suggestion/fs-suggestion.d.ts.map +1 -0
  158. package/dist/components/frittstaende/suggestion/fs-suggestion.js +280 -0
  159. package/dist/components/frittstaende/suggestion/fs-suggestion.js.map +1 -0
  160. package/dist/components/frittstaende/toast/fs-toast.d.ts +67 -0
  161. package/dist/components/frittstaende/toast/fs-toast.d.ts.map +1 -0
  162. package/dist/components/frittstaende/toast/fs-toast.js +108 -0
  163. package/dist/components/frittstaende/toast/fs-toast.js.map +1 -0
  164. package/dist/components/ramme/error-summary/fs-error-summary.d.ts +70 -0
  165. package/dist/components/ramme/error-summary/fs-error-summary.d.ts.map +1 -0
  166. package/dist/components/ramme/error-summary/fs-error-summary.js +155 -0
  167. package/dist/components/ramme/error-summary/fs-error-summary.js.map +1 -0
  168. package/dist/components/ramme/field/field-core.d.ts +70 -0
  169. package/dist/components/ramme/field/field-core.d.ts.map +1 -0
  170. package/dist/components/ramme/field/field-core.js +60 -0
  171. package/dist/components/ramme/field/field-core.js.map +1 -0
  172. package/dist/components/ramme/field/fs-field.d.ts +49 -0
  173. package/dist/components/ramme/field/fs-field.d.ts.map +1 -0
  174. package/dist/components/ramme/field/fs-field.js +118 -0
  175. package/dist/components/ramme/field/fs-field.js.map +1 -0
  176. package/dist/components/ramme/popover/fs-popover.d.ts +68 -0
  177. package/dist/components/ramme/popover/fs-popover.d.ts.map +1 -0
  178. package/dist/components/ramme/popover/fs-popover.js +167 -0
  179. package/dist/components/ramme/popover/fs-popover.js.map +1 -0
  180. package/dist/components/ramme/tabs/fs-tabs.d.ts +61 -0
  181. package/dist/components/ramme/tabs/fs-tabs.d.ts.map +1 -0
  182. package/dist/components/ramme/tabs/fs-tabs.js +156 -0
  183. package/dist/components/ramme/tabs/fs-tabs.js.map +1 -0
  184. package/dist/dom.d.ts +33 -0
  185. package/dist/dom.d.ts.map +1 -0
  186. package/dist/dom.js +77 -0
  187. package/dist/dom.js.map +1 -0
  188. package/dist/fs.d.ts +199 -0
  189. package/dist/fs.d.ts.map +1 -0
  190. package/dist/fs.js +128 -0
  191. package/dist/fs.js.map +1 -0
  192. package/dist/index.d.ts +84 -0
  193. package/dist/index.d.ts.map +1 -0
  194. package/dist/index.js +48 -0
  195. package/dist/index.js.map +1 -0
  196. package/dist/jsx/react.d.ts +127 -0
  197. package/dist/jsx/react.d.ts.map +1 -0
  198. package/dist/jsx/react.js +2 -0
  199. package/dist/jsx/react.js.map +1 -0
  200. package/dist/react.d.ts +207 -0
  201. package/dist/react.d.ts.map +1 -0
  202. package/dist/react.js +109 -0
  203. package/dist/react.js.map +1 -0
  204. package/dist/tailwind/preset.d.ts +120 -0
  205. package/dist/tailwind/preset.d.ts.map +1 -0
  206. package/dist/tailwind/preset.js +107 -0
  207. package/dist/tailwind/preset.js.map +1 -0
  208. package/dist/takeover.d.ts +79 -0
  209. package/dist/takeover.d.ts.map +1 -0
  210. package/dist/takeover.js +119 -0
  211. package/dist/takeover.js.map +1 -0
  212. package/dist/tokens/color.d.ts +85 -0
  213. package/dist/tokens/color.d.ts.map +1 -0
  214. package/dist/tokens/color.js +212 -0
  215. package/dist/tokens/color.js.map +1 -0
  216. package/dist/tokens/theme.d.ts +52 -0
  217. package/dist/tokens/theme.d.ts.map +1 -0
  218. package/dist/tokens/theme.js +197 -0
  219. package/dist/tokens/theme.js.map +1 -0
  220. package/dist/tokens/tokens.d.ts +210 -0
  221. package/dist/tokens/tokens.d.ts.map +1 -0
  222. package/dist/tokens/tokens.js +238 -0
  223. package/dist/tokens/tokens.js.map +1 -0
  224. package/package.json +334 -0
  225. package/src/components/css/accordion/accordion.css +74 -0
  226. package/src/components/css/accordion/accordion.ts +50 -0
  227. package/src/components/css/alert/alert.css +50 -0
  228. package/src/components/css/alert/alert.ts +48 -0
  229. package/src/components/css/avatar/avatar.css +64 -0
  230. package/src/components/css/avatar/avatar.ts +57 -0
  231. package/src/components/css/badge/badge.css +42 -0
  232. package/src/components/css/badge/badge.ts +43 -0
  233. package/src/components/css/breadcrumbs/breadcrumbs.css +50 -0
  234. package/src/components/css/breadcrumbs/breadcrumbs.ts +29 -0
  235. package/src/components/css/button/button.css +101 -0
  236. package/src/components/css/button/button.ts +44 -0
  237. package/src/components/css/card/card.css +48 -0
  238. package/src/components/css/card/card.ts +50 -0
  239. package/src/components/css/checkbox/checkbox.css +96 -0
  240. package/src/components/css/checkbox/checkbox.ts +50 -0
  241. package/src/components/css/dialog/dialog.css +50 -0
  242. package/src/components/css/dialog/dialog.ts +36 -0
  243. package/src/components/css/divider/divider.css +18 -0
  244. package/src/components/css/divider/divider.ts +41 -0
  245. package/src/components/css/error-text/error-text.css +21 -0
  246. package/src/components/css/error-text/error-text.ts +37 -0
  247. package/src/components/css/fieldset/fieldset.css +57 -0
  248. package/src/components/css/fieldset/fieldset.ts +87 -0
  249. package/src/components/css/file-upload/file-upload.css +92 -0
  250. package/src/components/css/file-upload/file-upload.ts +65 -0
  251. package/src/components/css/heading/heading.css +33 -0
  252. package/src/components/css/heading/heading.ts +42 -0
  253. package/src/components/css/help-text/help-text.css +24 -0
  254. package/src/components/css/help-text/help-text.ts +42 -0
  255. package/src/components/css/input/input.css +131 -0
  256. package/src/components/css/input/input.ts +76 -0
  257. package/src/components/css/label/label.css +34 -0
  258. package/src/components/css/label/label.ts +51 -0
  259. package/src/components/css/link/link.css +36 -0
  260. package/src/components/css/link/link.ts +29 -0
  261. package/src/components/css/list/list.css +40 -0
  262. package/src/components/css/list/list.ts +42 -0
  263. package/src/components/css/pagination/pagination.css +77 -0
  264. package/src/components/css/pagination/pagination.ts +33 -0
  265. package/src/components/css/paragraph/paragraph.css +31 -0
  266. package/src/components/css/paragraph/paragraph.ts +53 -0
  267. package/src/components/css/radio/radio.css +76 -0
  268. package/src/components/css/radio/radio.ts +50 -0
  269. package/src/components/css/search/search.css +49 -0
  270. package/src/components/css/search/search.ts +52 -0
  271. package/src/components/css/select/select.css +95 -0
  272. package/src/components/css/select/select.ts +40 -0
  273. package/src/components/css/shared.ts +40 -0
  274. package/src/components/css/skeleton/skeleton.css +49 -0
  275. package/src/components/css/skeleton/skeleton.ts +43 -0
  276. package/src/components/css/skip-link/skip-link.css +36 -0
  277. package/src/components/css/skip-link/skip-link.ts +22 -0
  278. package/src/components/css/spinner/spinner.css +48 -0
  279. package/src/components/css/spinner/spinner.ts +48 -0
  280. package/src/components/css/sr-only/sr-only.css +16 -0
  281. package/src/components/css/sr-only/sr-only.ts +18 -0
  282. package/src/components/css/switch/switch.css +101 -0
  283. package/src/components/css/switch/switch.ts +46 -0
  284. package/src/components/css/table/table.css +63 -0
  285. package/src/components/css/table/table.ts +50 -0
  286. package/src/components/css/tag/tag.css +58 -0
  287. package/src/components/css/tag/tag.ts +49 -0
  288. package/src/components/css/textarea/textarea.css +71 -0
  289. package/src/components/css/textarea/textarea.ts +40 -0
  290. package/src/components/css/toggle-group/toggle-group.css +82 -0
  291. package/src/components/css/toggle-group/toggle-group.ts +37 -0
  292. package/src/components/css/tooltip/tooltip.css +47 -0
  293. package/src/components/css/tooltip/tooltip.ts +36 -0
  294. package/src/components/frittstaende/calendar/fs-calendar.ts +525 -0
  295. package/src/components/frittstaende/date-field/date-field.css +54 -0
  296. package/src/components/frittstaende/date-field/fs-date-field.ts +309 -0
  297. package/src/components/frittstaende/suggestion/fs-suggestion.ts +333 -0
  298. package/src/components/frittstaende/suggestion/suggestion.css +63 -0
  299. package/src/components/frittstaende/toast/fs-toast.ts +146 -0
  300. package/src/components/frittstaende/toast/toast.css +71 -0
  301. package/src/components/ramme/error-summary/error-summary.css +45 -0
  302. package/src/components/ramme/error-summary/fs-error-summary.ts +197 -0
  303. package/src/components/ramme/field/field-core.ts +132 -0
  304. package/src/components/ramme/field/field.css +6 -0
  305. package/src/components/ramme/field/fs-field.ts +154 -0
  306. package/src/components/ramme/popover/fs-popover.ts +205 -0
  307. package/src/components/ramme/popover/popover.css +34 -0
  308. package/src/components/ramme/tabs/fs-tabs.ts +182 -0
  309. package/src/components/ramme/tabs/tabs.css +68 -0
  310. package/src/tailwind/tailwind.css +134 -0
  311. package/src/tokens/color.ts +267 -0
  312. package/src/tokens/theme.ts +350 -0
  313. package/src/tokens/tokens.css +214 -0
  314. package/src/tokens/tokens.ts +293 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"takeover.d.ts","sourceRoot":"","sources":["../src/takeover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,mDAAmD;AACnD,MAAM,MAAM,UAAU,GAAG;IACvB,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CACjC,MAAM,EACN,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAC7C,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,6DAA6D;IAC7D,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACzC,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB,qDAAqD;IACrD,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,iDAAiD;IACjD,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB;;;;;;OAMG;IACH,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,GACtB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBrB;AAED,uDAAuD;AACvD,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAU3E;AAID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;AAChC,qEAAqE;AACrE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GACpB,WAAW,CA+Bb;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,EAAE,EACnB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,YAAY,CAoCd"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Regnestykket bak `fristil overta <komponent>`.
3
+ *
4
+ * Kommandoen kopierer kildekoden til én komponent inn i prosjektet ditt.
5
+ * Tilpasning gjennom `@layer`, `--fs-*`-variabler og `::part()` dekker
6
+ * utseendet, men ikke «jeg vil at denne komponenten skal oppføre seg
7
+ * annerledes». Da er alternativet enten å leve med det eller å skrive
8
+ * komponenten på nytt fra bunnen. Denne kommandoen er veien imellom.
9
+ *
10
+ * Fila her gjør ingenting med filsystemet, bare med tekst, slik at
11
+ * omskrivingen kan måles i en test. `cli.ts` leser og skriver filene.
12
+ *
13
+ * Det som må skrives om er henvisningene ut av mappa. En komponent peker på
14
+ * naboene sine med relative stier, og de stiene finnes ikke lenger når mappa
15
+ * står i et annet prosjekt. `../shared.js` blir til
16
+ * `@fristil/designsystem/shared`, som fortsatt virker, og som gjør det synlig
17
+ * hva kopien fremdeles henter fra pakken.
18
+ */
19
+ /**
20
+ * Bygger oppslaget fra en fil i pakken til inngangspunktet som peker på den.
21
+ *
22
+ * `exports` peker på `dist` for JavaScript og på `src` for CSS. Begge føres
23
+ * tilbake til kilden, siden det er kilden som kopieres.
24
+ */
25
+ export function buildEntryPoints(name, exports) {
26
+ const entries = new Map();
27
+ for (const [subpath, target] of Object.entries(exports)) {
28
+ const file = typeof target === "string" ? target : target.import;
29
+ if (!file)
30
+ continue;
31
+ const source = file
32
+ .replace(/^\.\//, "")
33
+ .replace(/^dist\//, "src/")
34
+ .replace(/\.js$/, ".ts");
35
+ entries.set(source, `${name}${subpath.replace(/^\./, "")}`);
36
+ }
37
+ return entries;
38
+ }
39
+ /** Slår sammen en relativ sti med mappa den står i. */
40
+ export function resolvePath(fromDirectory, relative) {
41
+ const parts = fromDirectory.split("/").filter(Boolean);
42
+ for (const part of relative.split("/")) {
43
+ if (part === "." || part === "")
44
+ continue;
45
+ if (part === "..")
46
+ parts.pop();
47
+ else
48
+ parts.push(part);
49
+ }
50
+ return parts.join("/");
51
+ }
52
+ const IMPORT_PATTERN = /(from\s+|@import\s+)(["'])([^"']+)\2/g;
53
+ /**
54
+ * Skriver om henvisningene i én fil.
55
+ *
56
+ * Bare stier som peker ut av mappa røres. En nabo i samme mappe blir med i
57
+ * kopien, og skal fortsatt finnes der.
58
+ */
59
+ export function rewriteReferences(file, entryPoints,
60
+ /** Stiene til filene som blir med i kopien, som de står i pakken. */
61
+ ownFiles) {
62
+ const directory = file.path.slice(0, file.path.lastIndexOf("/"));
63
+ const rewrites = [];
64
+ const content = file.content.replace(IMPORT_PATTERN, (treff, innledning, hermetegn, specifier) => {
65
+ if (!specifier.startsWith("."))
66
+ return treff;
67
+ const target = resolvePath(directory, specifier);
68
+ // En fil som blir med i kopien skal stå urørt. Sammenligningen går på
69
+ // hele stien: filnavnet alene ville latt `../shared.js` stå så snart
70
+ // mappa selv hadde en `shared.ts`, og kopien hadde pekt ut av seg selv.
71
+ // Importen i koden peker dessuten på «.js», altså filen etter bygging,
72
+ // mens kilden heter «.ts».
73
+ const asSource = target.replace(/\.js$/, ".ts");
74
+ if (ownFiles.has(target) || ownFiles.has(asSource))
75
+ return treff;
76
+ const entry = entryPoints.get(target) ??
77
+ entryPoints.get(target.replace(/\.js$/, ".ts"));
78
+ if (!entry)
79
+ return treff;
80
+ rewrites.push({ from: specifier, to: entry });
81
+ return `${innledning}${hermetegn}${entry}${hermetegn}`;
82
+ });
83
+ return { name: file.path.split("/").pop() ?? file.path, content, rewrites };
84
+ }
85
+ /**
86
+ * Setter sammen hele planen for én komponent.
87
+ *
88
+ * `files` er alle filene i komponentmappa, uten testene: de hører til
89
+ * pakkens eget oppsett og sier ingenting i et annet prosjekt.
90
+ */
91
+ export function planTakeover(files, entryPoints) {
92
+ const ownFiles = new Set(files.map((fil) => fil.path));
93
+ const planned = files.map((fil) => rewriteReferences(fil, entryPoints, ownFiles));
94
+ const dependencies = new Set();
95
+ const keptImports = new Set();
96
+ for (const fil of planned) {
97
+ for (const treff of fil.content.matchAll(IMPORT_PATTERN)) {
98
+ const specifier = treff[3];
99
+ if (specifier.startsWith("."))
100
+ continue;
101
+ if (specifier.startsWith("@fristil/")) {
102
+ keptImports.add(specifier);
103
+ continue;
104
+ }
105
+ const deler = specifier.split("/");
106
+ dependencies.add(specifier.startsWith("@") ? deler.slice(0, 2).join("/") : deler[0]);
107
+ }
108
+ }
109
+ const replacedEntries = files
110
+ .map((fil) => entryPoints.get(fil.path))
111
+ .filter((entry) => entry !== undefined);
112
+ return {
113
+ files: planned,
114
+ dependencies: [...dependencies].sort(),
115
+ keptImports: [...keptImports].sort(),
116
+ replacedEntries: replacedEntries.sort(),
117
+ };
118
+ }
119
+ //# sourceMappingURL=takeover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"takeover.js","sourceRoot":"","sources":["../src/takeover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Fargeregning for temageneratoren.
3
+ *
4
+ * Skalaene lages i OKLCH og ikke i HSL. I HSL betyr lyshet noe annet for hver
5
+ * kulør: `hsl(60 100% 50%)` er knallgul og `hsl(240 100% 50%)` er nesten sort,
6
+ * med samme tall. En skala bygget på HSL blir derfor ujevn, og kontrasten
7
+ * varierer med kuløren brukeren valgte. I OKLCH er lysheten den samme
8
+ * opplevde lysheten uansett kulør, så trinnene kan settes én gang og gjelde
9
+ * for alle farger.
10
+ *
11
+ * Kontrasten regnes med WCAG 2.1 sin formel, altså den samme som testene
12
+ * bruker, slik at generatoren og kontrollen er enige.
13
+ */
14
+ export type Rgb = {
15
+ r: number;
16
+ g: number;
17
+ b: number;
18
+ };
19
+ export type Oklch = {
20
+ l: number;
21
+ c: number;
22
+ h: number;
23
+ };
24
+ /** Leser `#rrggbb` eller `#rgb`. */
25
+ export declare function parseHex(hex: string): Rgb;
26
+ export declare function toHex({ r, g, b }: Rgb): string;
27
+ export declare function rgbToOklch({ r, g, b }: Rgb): Oklch;
28
+ /**
29
+ * Gjør en OKLCH-farge om til rgb som finnes på en skjerm.
30
+ *
31
+ * Ikke alle kombinasjoner av lyshet og metning kan vises i sRGB. Havner
32
+ * fargen utenfor, dempes metningen til den er innenfor, framfor å klippe
33
+ * kanalene hver for seg. Det siste ville endret kuløren.
34
+ */
35
+ export declare function oklchToRgb(farge: Oklch): Rgb;
36
+ /** Kontrastforholdet mellom to farger, slik WCAG 2.1 regner det. */
37
+ export declare function contrastRatio(a: Rgb, b: Rgb): number;
38
+ /** Trinnene i en Fristil-skala, og lysheten hvert av dem sikter mot. */
39
+ export declare const SCALE_STEPS: {
40
+ readonly 5: 0.97;
41
+ readonly 10: 0.93;
42
+ readonly 30: 0.83;
43
+ readonly 50: 0.72;
44
+ readonly 70: 0.55;
45
+ readonly 100: 0.38;
46
+ };
47
+ /** Lysheten i den nøytrale skalaen, som går lenger i begge ender. */
48
+ export declare const NEUTRAL_STEPS: {
49
+ readonly 0: 1;
50
+ readonly 5: 0.97;
51
+ readonly 10: 0.92;
52
+ readonly 30: 0.76;
53
+ readonly 50: 0.56;
54
+ readonly 70: 0.42;
55
+ readonly 100: 0.22;
56
+ };
57
+ /**
58
+ * Bygger en skala fra én farge.
59
+ *
60
+ * Kuløren beholdes, mens lysheten settes av trinnet. Metningen tas fra fargen
61
+ * som ble oppgitt, og dempes i endene.
62
+ */
63
+ export declare function buildScale(hex: string): Record<number, string>;
64
+ /** Bygger den nøytrale skalaen, som også har et rent hvitt trinn. */
65
+ export declare function buildNeutralScale(hex: string): Record<number, string>;
66
+ export type AdjustResult = {
67
+ /** Fargen som holder kravet. */
68
+ hex: string;
69
+ /** Hvor mye lysheten måtte flyttes, i OKLCH-enheter. */
70
+ moved: number;
71
+ /** Kontrasten den endte på. */
72
+ ratio: number;
73
+ };
74
+ /**
75
+ * Flytter lysheten til fargen holder kravet mot bakgrunnen.
76
+ *
77
+ * Kuløren og metningen står stille, så fargen er den samme fargen, bare lys
78
+ * nok eller mørk nok. Retningen velges etter bakgrunnen: mot sort på en lys
79
+ * flate, mot hvit på en mørk.
80
+ *
81
+ * Kravet kan være umulig, for eksempel 4,5:1 mot en flate midt på skalaen.
82
+ * Da returneres det beste forsøket, og kalleren sier fra.
83
+ */
84
+ export declare function adjustForContrast(hex: string, backgroundHex: string, target: number): AdjustResult;
85
+ //# sourceMappingURL=color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/tokens/color.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,GAAG,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AACrD,MAAM,MAAM,KAAK,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvD,oCAAoC;AACpC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAmBzC;AAED,wBAAgB,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,MAAM,CAO9C;AAaD,wBAAgB,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,KAAK,CAsBlD;AA6BD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,CAc5C;AAMD,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAIpD;AAED,wEAAwE;AACxE,eAAO,MAAM,WAAW;;;;;;;CAOd,CAAA;AAkBV,qEAAqE;AACrE,eAAO,MAAM,aAAa;;;;;;;;CAQhB,CAAA;AAEV;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAY9D;AAED,qEAAqE;AACrE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAarE;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,GACb,YAAY,CA0Bd"}
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Fargeregning for temageneratoren.
3
+ *
4
+ * Skalaene lages i OKLCH og ikke i HSL. I HSL betyr lyshet noe annet for hver
5
+ * kulør: `hsl(60 100% 50%)` er knallgul og `hsl(240 100% 50%)` er nesten sort,
6
+ * med samme tall. En skala bygget på HSL blir derfor ujevn, og kontrasten
7
+ * varierer med kuløren brukeren valgte. I OKLCH er lysheten den samme
8
+ * opplevde lysheten uansett kulør, så trinnene kan settes én gang og gjelde
9
+ * for alle farger.
10
+ *
11
+ * Kontrasten regnes med WCAG 2.1 sin formel, altså den samme som testene
12
+ * bruker, slik at generatoren og kontrollen er enige.
13
+ */
14
+ /** Leser `#rrggbb` eller `#rgb`. */
15
+ export function parseHex(hex) {
16
+ const rent = hex.trim().replace(/^#/, "");
17
+ const full = rent.length === 3
18
+ ? rent
19
+ .split("")
20
+ .map((tegn) => tegn + tegn)
21
+ .join("")
22
+ : rent;
23
+ if (!/^[0-9a-fA-F]{6}$/.test(full)) {
24
+ throw new Error(`«${hex}» er ikke en gyldig heksadesimal farge`);
25
+ }
26
+ return {
27
+ r: Number.parseInt(full.slice(0, 2), 16),
28
+ g: Number.parseInt(full.slice(2, 4), 16),
29
+ b: Number.parseInt(full.slice(4, 6), 16),
30
+ };
31
+ }
32
+ export function toHex({ r, g, b }) {
33
+ const tall = (verdi) => Math.round(Math.min(255, Math.max(0, verdi)))
34
+ .toString(16)
35
+ .padStart(2, "0");
36
+ return `#${tall(r)}${tall(g)}${tall(b)}`;
37
+ }
38
+ function toLinear(kanal) {
39
+ const c = kanal / 255;
40
+ return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
41
+ }
42
+ function fromLinear(kanal) {
43
+ const c = kanal <= 0.0031308 ? kanal * 12.92 : 1.055 * kanal ** (1 / 2.4) - 0.055;
44
+ return c * 255;
45
+ }
46
+ export function rgbToOklch({ r, g, b }) {
47
+ const lr = toLinear(r);
48
+ const lg = toLinear(g);
49
+ const lb = toLinear(b);
50
+ const l = 0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb;
51
+ const m = 0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb;
52
+ const s = 0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb;
53
+ const l_ = Math.cbrt(l);
54
+ const m_ = Math.cbrt(m);
55
+ const s_ = Math.cbrt(s);
56
+ const lightness = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;
57
+ const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;
58
+ const bb = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;
59
+ return {
60
+ l: lightness,
61
+ c: Math.hypot(a, bb),
62
+ h: (Math.atan2(bb, a) * 180) / Math.PI,
63
+ };
64
+ }
65
+ function oklchToRgbRaw({ l, c, h }) {
66
+ const rad = (h * Math.PI) / 180;
67
+ const a = c * Math.cos(rad);
68
+ const b = c * Math.sin(rad);
69
+ const l_ = l + 0.3963377774 * a + 0.2158037573 * b;
70
+ const m_ = l - 0.1055613458 * a - 0.0638541728 * b;
71
+ const s_ = l - 0.0894841775 * a - 1.291485548 * b;
72
+ const lr = l_ ** 3;
73
+ const mr = m_ ** 3;
74
+ const sr = s_ ** 3;
75
+ return {
76
+ r: fromLinear(4.0767416621 * lr - 3.3077115913 * mr + 0.2309699292 * sr),
77
+ g: fromLinear(-1.2684380046 * lr + 2.6097574011 * mr - 0.3413193965 * sr),
78
+ b: fromLinear(-0.0041960863 * lr - 0.7034186147 * mr + 1.707614701 * sr),
79
+ };
80
+ }
81
+ function utenfor({ r, g, b }) {
82
+ const slingringsmonn = 0.5;
83
+ return [r, g, b].some((kanal) => kanal < -slingringsmonn || kanal > 255 + slingringsmonn);
84
+ }
85
+ /**
86
+ * Gjør en OKLCH-farge om til rgb som finnes på en skjerm.
87
+ *
88
+ * Ikke alle kombinasjoner av lyshet og metning kan vises i sRGB. Havner
89
+ * fargen utenfor, dempes metningen til den er innenfor, framfor å klippe
90
+ * kanalene hver for seg. Det siste ville endret kuløren.
91
+ */
92
+ export function oklchToRgb(farge) {
93
+ const forsok = oklchToRgbRaw(farge);
94
+ if (!utenfor(forsok))
95
+ return forsok;
96
+ let lav = 0;
97
+ let hoy = farge.c;
98
+ for (let i = 0; i < 24; i += 1) {
99
+ const midt = (lav + hoy) / 2;
100
+ if (utenfor(oklchToRgbRaw({ ...farge, c: midt })))
101
+ hoy = midt;
102
+ else
103
+ lav = midt;
104
+ }
105
+ return oklchToRgbRaw({ ...farge, c: lav });
106
+ }
107
+ function luminans({ r, g, b }) {
108
+ return 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);
109
+ }
110
+ /** Kontrastforholdet mellom to farger, slik WCAG 2.1 regner det. */
111
+ export function contrastRatio(a, b) {
112
+ const la = luminans(a);
113
+ const lb = luminans(b);
114
+ return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);
115
+ }
116
+ /** Trinnene i en Fristil-skala, og lysheten hvert av dem sikter mot. */
117
+ export const SCALE_STEPS = {
118
+ 5: 0.97,
119
+ 10: 0.93,
120
+ 30: 0.83,
121
+ 50: 0.72,
122
+ 70: 0.55,
123
+ 100: 0.38,
124
+ };
125
+ /**
126
+ * Hvor mye av kulørens metning hvert trinn beholder.
127
+ *
128
+ * Lyse trinn tåler lite metning før de ser skitne ut, og mørke trinn mister
129
+ * den likevel i sRGB. Forholdstallene er lest av Fristils egen palett, så en
130
+ * generert skala får samme rytme som den håndlagde.
131
+ */
132
+ const CHROMA_FACTOR = {
133
+ 5: 0.09,
134
+ 10: 0.24,
135
+ 30: 0.62,
136
+ 50: 1.06,
137
+ 70: 1,
138
+ 100: 0.79,
139
+ };
140
+ /** Lysheten i den nøytrale skalaen, som går lenger i begge ender. */
141
+ export const NEUTRAL_STEPS = {
142
+ 0: 1,
143
+ 5: 0.97,
144
+ 10: 0.92,
145
+ 30: 0.76,
146
+ 50: 0.56,
147
+ 70: 0.42,
148
+ 100: 0.22,
149
+ };
150
+ /**
151
+ * Bygger en skala fra én farge.
152
+ *
153
+ * Kuløren beholdes, mens lysheten settes av trinnet. Metningen tas fra fargen
154
+ * som ble oppgitt, og dempes i endene.
155
+ */
156
+ export function buildScale(hex) {
157
+ const { c, h } = rgbToOklch(parseHex(hex));
158
+ const referanse = Math.min(c, 0.16);
159
+ const skala = {};
160
+ for (const [trinn, lyshet] of Object.entries(SCALE_STEPS)) {
161
+ const nummer = Number(trinn);
162
+ skala[nummer] = toHex(oklchToRgb({ l: lyshet, c: referanse * CHROMA_FACTOR[nummer], h }));
163
+ }
164
+ return skala;
165
+ }
166
+ /** Bygger den nøytrale skalaen, som også har et rent hvitt trinn. */
167
+ export function buildNeutralScale(hex) {
168
+ const { c, h } = rgbToOklch(parseHex(hex));
169
+ // Nøytrale farger tåler bare en antydning til kulør før de ser malt ut.
170
+ const metning = Math.min(c, 0.02);
171
+ const skala = {};
172
+ for (const [trinn, lyshet] of Object.entries(NEUTRAL_STEPS)) {
173
+ skala[Number(trinn)] =
174
+ Number(trinn) === 0
175
+ ? "#ffffff"
176
+ : toHex(oklchToRgb({ l: lyshet, c: metning, h }));
177
+ }
178
+ return skala;
179
+ }
180
+ /**
181
+ * Flytter lysheten til fargen holder kravet mot bakgrunnen.
182
+ *
183
+ * Kuløren og metningen står stille, så fargen er den samme fargen, bare lys
184
+ * nok eller mørk nok. Retningen velges etter bakgrunnen: mot sort på en lys
185
+ * flate, mot hvit på en mørk.
186
+ *
187
+ * Kravet kan være umulig, for eksempel 4,5:1 mot en flate midt på skalaen.
188
+ * Da returneres det beste forsøket, og kalleren sier fra.
189
+ */
190
+ export function adjustForContrast(hex, backgroundHex, target) {
191
+ const bakgrunn = parseHex(backgroundHex);
192
+ const start = rgbToOklch(parseHex(hex));
193
+ const mork = luminans(bakgrunn) > 0.18 ? -1 : 1;
194
+ let beste = {
195
+ hex: toHex(oklchToRgb(start)),
196
+ moved: 0,
197
+ ratio: contrastRatio(oklchToRgb(start), bakgrunn),
198
+ };
199
+ for (let steg = 0; steg <= 100; steg += 1) {
200
+ const lyshet = Math.min(1, Math.max(0, start.l + mork * steg * 0.01));
201
+ const farge = oklchToRgb({ ...start, l: lyshet });
202
+ const forhold = contrastRatio(farge, bakgrunn);
203
+ if (forhold > beste.ratio) {
204
+ beste = { hex: toHex(farge), moved: steg * 0.01, ratio: forhold };
205
+ }
206
+ if (forhold >= target) {
207
+ return { hex: toHex(farge), moved: steg * 0.01, ratio: forhold };
208
+ }
209
+ }
210
+ return beste;
211
+ }
212
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/tokens/color.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Bygger et helt fargetema fra noen få merkefarger.
3
+ *
4
+ * Fristil har én innebygd palett. En organisasjon med egne farger måtte
5
+ * ellers overstyre tokenene for hånd, og selv passe på at hvert par holder
6
+ * kontrastkravet, i begge temaer. Det er mange par, og det er lett å gå glipp
7
+ * av ett.
8
+ *
9
+ * Her oppgir du merkefargene, og generatoren bygger skalaene, setter de
10
+ * semantiske verdiene, og flytter lysheten på dem som ikke holder kravet.
11
+ * Hver justering rapporteres, så du ser hva som ble endret og hvorfor.
12
+ *
13
+ * ```ts
14
+ * const tema = buildTheme({ interactive: "#7c3aed", danger: "#b3261e" })
15
+ * console.log(tema.css)
16
+ * ```
17
+ */
18
+ export type ThemeInput = {
19
+ /** Lenker, knapper og fokusmarkering. */
20
+ interactive: string;
21
+ /** Feil, sletting og avslag. */
22
+ danger: string;
23
+ /** Fullført og godkjent. */
24
+ success: string;
25
+ /** Noe som krever oppmerksomhet. */
26
+ warning: string;
27
+ /** Flater, tekst og skillelinjer. Nesten uten kulør. */
28
+ neutral?: string;
29
+ /** Besøkte lenker. Utledes fra `interactive` hvis den utelates. */
30
+ visited?: string;
31
+ };
32
+ export type ThemeAdjustment = {
33
+ /** Tokenet som ble flyttet. */
34
+ token: string;
35
+ /** Temaet det gjelder. */
36
+ theme: "light" | "dark";
37
+ /** Kontrasten før og etter. */
38
+ before: number;
39
+ after: number;
40
+ };
41
+ export type Theme = {
42
+ light: Record<string, string>;
43
+ dark: Record<string, string>;
44
+ /** Verdiene generatoren flyttet for å holde kontrastkravet. */
45
+ adjustments: ThemeAdjustment[];
46
+ /** Par som ikke kunne reddes. Tom når temaet holder. */
47
+ problems: string[];
48
+ /** Ferdig CSS, klar til å legges etter `tokens.css`. */
49
+ css: string;
50
+ };
51
+ export declare function buildTheme(input: ThemeInput): Theme;
52
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/tokens/theme.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,UAAU,GAAG;IACvB,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAA;IACnB,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,0BAA0B;IAC1B,KAAK,EAAE,OAAO,GAAG,MAAM,CAAA;IACvB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,+DAA+D;IAC/D,WAAW,EAAE,eAAe,EAAE,CAAA;IAC9B,wDAAwD;IACxD,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AA+DD,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,CAqLnD"}