@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,197 @@
1
+ import { adjustForContrast, buildNeutralScale, buildScale, contrastRatio, parseHex, } from "./color.js";
2
+ /** Kravet til tekst mot flate. */
3
+ const TEKST = 4.5;
4
+ /** Kravet til en grafisk avgrensning, som rammen rundt et felt. */
5
+ const RAMME = 3;
6
+ function forhold(a, b) {
7
+ return contrastRatio(parseHex(a), parseHex(b));
8
+ }
9
+ /**
10
+ * Setter en forgrunnsfarge som holder kravet mot alle flatene den havner på.
11
+ *
12
+ * En farge brukes sjelden bare ett sted. `interactive-main` er både
13
+ * lenkefargen på sideflaten, flaten under teksten på en primærknapp, og
14
+ * fargen på et interaktivt merke. Holder den mot den ene, kan den likevel
15
+ * ryke mot den neste, så alle flatene sendes inn samtidig og den vanskeligste
16
+ * avgjør.
17
+ */
18
+ function sikre(verdier, notater, problemer, tema, token, foreslatt, bakgrunner, krav = TEKST) {
19
+ let farge = foreslatt;
20
+ const start = Math.min(...bakgrunner.map((flate) => forhold(farge, flate)));
21
+ // Flere runder, fordi en justering mot den ene flaten kan gjøre fargen
22
+ // dårligere mot en annen. I praksis stopper det etter én eller to.
23
+ for (let runde = 0; runde < 4; runde += 1) {
24
+ const verste = bakgrunner.reduce((a, b) => forhold(farge, a) <= forhold(farge, b) ? a : b);
25
+ if (forhold(farge, verste) >= krav)
26
+ break;
27
+ farge = adjustForContrast(farge, verste, krav).hex;
28
+ }
29
+ verdier[token] = farge;
30
+ const slutt = Math.min(...bakgrunner.map((flate) => forhold(farge, flate)));
31
+ if (farge !== foreslatt) {
32
+ notater.push({ token, theme: tema, before: start, after: slutt });
33
+ }
34
+ if (slutt < krav) {
35
+ const verste = bakgrunner.reduce((a, b) => forhold(farge, a) <= forhold(farge, b) ? a : b);
36
+ problemer.push(`${token} i ${tema} tema kommer bare til ${slutt.toFixed(2)}:1 mot ${verste}, og kravet er ${krav}:1`);
37
+ }
38
+ }
39
+ export function buildTheme(input) {
40
+ const palett = {
41
+ interactive: buildScale(input.interactive),
42
+ danger: buildScale(input.danger),
43
+ success: buildScale(input.success),
44
+ warning: buildScale(input.warning),
45
+ visited: buildScale(input.visited ?? input.interactive),
46
+ neutral: buildNeutralScale(input.neutral ?? "#1a1a1a"),
47
+ };
48
+ const notater = [];
49
+ const problemer = [];
50
+ /**
51
+ * Bygger ett tema.
52
+ *
53
+ * Lyst og mørkt tema er samme oppskrift med motsatte trinn: flaten er lys
54
+ * og teksten mørk, eller omvendt. Derfor står de to i samme funksjon, med
55
+ * trinnene som parametre.
56
+ */
57
+ function tema(modus, trinn) {
58
+ const verdier = {};
59
+ const flate = palett.neutral[trinn.flate];
60
+ // Flatene først. De er utgangspunktet alt annet måles mot.
61
+ verdier["--semantic-page-background"] = flate;
62
+ verdier["--semantic-danger-background"] = palett.danger[trinn.statusFlate];
63
+ verdier["--semantic-warning-background"] = palett.warning[trinn.statusFlate];
64
+ verdier["--semantic-success-background"] = palett.success[trinn.statusFlate];
65
+ verdier["--semantic-neutral-background"] =
66
+ palett.neutral[trinn.noytralFlate];
67
+ verdier["--semantic-interactive-background"] =
68
+ palett.interactive[trinn.statusFlate];
69
+ verdier["--semantic-disabled-background"] =
70
+ palett.neutral[trinn.avslattFlate];
71
+ verdier["--semantic-disabled-foreground"] =
72
+ palett.neutral[trinn.avslattTekst];
73
+ verdier["--semantic-field-border-hover"] = palett.neutral[trinn.rammeHover];
74
+ verdier["--semantic-divider-30"] = palett.neutral[trinn.skille];
75
+ verdier["--semantic-divider-100"] = palett.neutral[trinn.tekst];
76
+ // Teksten oppå en fylt knapp er flaten fra det motsatte temaet.
77
+ const kontrastfarge = modus === "light" ? "#ffffff" : palett.neutral[100];
78
+ verdier["--semantic-interactive-contrast"] = kontrastfarge;
79
+ verdier["--semantic-danger-contrast"] = kontrastfarge;
80
+ const sett = (token, foreslatt, bakgrunner, krav) => sikre(verdier, notater, problemer, modus, token, foreslatt, bakgrunner, krav);
81
+ // Brødteksten står både på sideflaten og i felt med statusfarge.
82
+ sett("--semantic-page-foreground", palett.neutral[trinn.tekst], [
83
+ flate,
84
+ verdier["--semantic-danger-background"],
85
+ verdier["--semantic-warning-background"],
86
+ verdier["--semantic-success-background"],
87
+ ]);
88
+ sett("--semantic-muted-foreground", palett.neutral[trinn.dempet], [flate]);
89
+ /*
90
+ * Den interaktive fargen brukes tre steder: som lenke på sideflaten, som
91
+ * flate under teksten på en primærknapp, og som farge på et interaktivt
92
+ * merke. Alle tre må holde.
93
+ */
94
+ sett("--semantic-interactive-main", palett.interactive[trinn.interaktiv], [
95
+ flate,
96
+ verdier["--semantic-interactive-background"],
97
+ kontrastfarge,
98
+ ]);
99
+ /*
100
+ * Hover-flaten på knappen, med den samme teksten oppå. Den brukes også
101
+ * som tekst i avataren, oppå interactive-background, så den flaten må
102
+ * med her.
103
+ */
104
+ sett("--semantic-interactive-foreground", palett.interactive[trinn.interaktivHover], [flate, kontrastfarge, verdier["--semantic-interactive-background"]]);
105
+ sett("--semantic-interactive-visited", palett.visited[trinn.interaktivHover], [flate]);
106
+ // Statusfargene står både i sitt eget merke og som tekst på sideflaten.
107
+ for (const status of ["danger", "warning", "success"]) {
108
+ sett(`--semantic-${status}-foreground`, palett[status][trinn.statusTekst], [verdier[`--semantic-${status}-background`], flate]);
109
+ }
110
+ sett("--semantic-neutral-foreground", palett.neutral[trinn.noytralTekst], [
111
+ verdier["--semantic-neutral-background"],
112
+ ]);
113
+ // Den fylte sletteknappen, med lys tekst oppå.
114
+ sett("--semantic-danger-main", palett.danger[trinn.interaktiv], [
115
+ kontrastfarge,
116
+ ]);
117
+ // Rammen er en grafisk avgrensning, og har derfor et lavere krav.
118
+ sett("--semantic-field-border", palett.neutral[50], [flate], RAMME);
119
+ return verdier;
120
+ }
121
+ const light = tema("light", {
122
+ flate: 0,
123
+ tekst: 100,
124
+ statusFlate: 10,
125
+ statusTekst: 100,
126
+ noytralFlate: 10,
127
+ noytralTekst: 70,
128
+ interaktiv: 70,
129
+ interaktivHover: 100,
130
+ avslattFlate: 10,
131
+ avslattTekst: 50,
132
+ dempet: 50,
133
+ rammeHover: 70,
134
+ skille: 30,
135
+ });
136
+ const dark = tema("dark", {
137
+ flate: 100,
138
+ tekst: 5,
139
+ statusFlate: 100,
140
+ statusTekst: 30,
141
+ noytralFlate: 70,
142
+ noytralTekst: 10,
143
+ interaktiv: 30,
144
+ interaktivHover: 10,
145
+ avslattFlate: 70,
146
+ avslattTekst: 30,
147
+ dempet: 30,
148
+ rammeHover: 30,
149
+ skille: 70,
150
+ });
151
+ return {
152
+ light,
153
+ dark,
154
+ adjustments: notater,
155
+ problems: problemer,
156
+ css: tilCss(palett, light, dark),
157
+ };
158
+ }
159
+ function linjer(verdier, innrykk) {
160
+ return Object.entries(verdier)
161
+ .map(([navn, verdi]) => `${innrykk}${navn}: ${verdi};`)
162
+ .join("\n");
163
+ }
164
+ function tilCss(paletter, light, dark) {
165
+ const palett = {};
166
+ for (const [navn, skala] of Object.entries(paletter)) {
167
+ for (const [trinn, verdi] of Object.entries(skala)) {
168
+ palett[`--palette-${navn}-${trinn}`] = verdi;
169
+ }
170
+ }
171
+ return `/*
172
+ * Generert av @fristil/designsystem. Rediger merkefargene, ikke denne fila.
173
+ *
174
+ * Legges etter tokens.css, og overstyrer fargene der. Størrelser,
175
+ * skriftstørrelser og ikoner kommer fortsatt fra tokens.css.
176
+ */
177
+
178
+ @layer fristil {
179
+ :root {
180
+ ${linjer(palett, " ")}
181
+
182
+ ${linjer(light, " ")}
183
+ }
184
+
185
+ @media (prefers-color-scheme: dark) {
186
+ :root:not([data-theme="light"]) {
187
+ ${linjer(dark, " ")}
188
+ }
189
+ }
190
+
191
+ [data-theme="dark"] {
192
+ ${linjer(dark, " ")}
193
+ }
194
+ }
195
+ `;
196
+ }
197
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/tokens/theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ export declare const Breakpoints: {
2
+ readonly sm: "640px";
3
+ readonly md: "768px";
4
+ readonly lg: "1024px";
5
+ readonly xl: "1280px";
6
+ readonly "2xl": "1536px";
7
+ };
8
+ export declare const Containers: {
9
+ readonly xs: "100%";
10
+ readonly sm: "576px";
11
+ readonly md: "960px";
12
+ readonly lg: "1152px";
13
+ readonly xl: "1536px";
14
+ readonly aside: "384px";
15
+ readonly asideNarrow: "288px";
16
+ readonly wideContent: "768px";
17
+ };
18
+ export type Breakpoint = keyof typeof Breakpoints;
19
+ export type Container = keyof typeof Containers;
20
+ export declare const cssTokens: {
21
+ readonly "--font-size-reference": "16px";
22
+ readonly "--font-size-xxs": "0.625rem";
23
+ readonly "--font-size-xs": "0.75rem";
24
+ readonly "--font-size-s": "0.875rem";
25
+ readonly "--font-size-m": "1rem";
26
+ readonly "--font-size-l": "1.125rem";
27
+ readonly "--font-size-xl": "1.375rem";
28
+ readonly "--font-size-xxl": "1.875rem";
29
+ readonly "--font-size-mega": "2.625rem";
30
+ readonly "--size-px": "1px";
31
+ readonly "--size-0-5": "0.125rem";
32
+ readonly "--size-1": "0.25rem";
33
+ readonly "--size-2": "0.5rem";
34
+ readonly "--size-3": "0.75rem";
35
+ readonly "--size-4": "1rem";
36
+ readonly "--size-5": "1.25rem";
37
+ readonly "--size-6": "1.5rem";
38
+ readonly "--size-7": "1.75rem";
39
+ readonly "--size-8": "2rem";
40
+ readonly "--size-10": "2.5rem";
41
+ readonly "--size-12": "3rem";
42
+ readonly "--size-16": "4rem";
43
+ readonly "--semantic-size-default": "var(--size-4)";
44
+ readonly "--semantic-spacing-default": "var(--size-4)";
45
+ readonly "--palette-burgundy-5": "#faf0f3";
46
+ readonly "--palette-burgundy-10": "#f7e2e8";
47
+ readonly "--palette-burgundy-30": "#f3a7b0";
48
+ readonly "--palette-burgundy-50": "#f06674";
49
+ readonly "--palette-burgundy-70": "#b04c5c";
50
+ readonly "--palette-burgundy-100": "#6f2c3f";
51
+ readonly "--palette-forest-5": "#f4faf5";
52
+ readonly "--palette-forest-10": "#e3f5ea";
53
+ readonly "--palette-forest-30": "#b9e1c8";
54
+ readonly "--palette-forest-50": "#91d6ac";
55
+ readonly "--palette-forest-70": "#5d9b73";
56
+ readonly "--palette-forest-100": "#2b6940";
57
+ readonly "--palette-ochre-5": "#f9f4f0";
58
+ readonly "--palette-ochre-10": "#f9ede2";
59
+ readonly "--palette-ochre-30": "#f0d2b6";
60
+ readonly "--palette-ochre-50": "#e7b78a";
61
+ readonly "--palette-ochre-70": "#a9805b";
62
+ readonly "--palette-ochre-100": "#6b492c";
63
+ readonly "--palette-denim-5": "#eff3f9";
64
+ readonly "--palette-denim-10": "#e2eaf7";
65
+ readonly "--palette-denim-30": "#b5cbee";
66
+ readonly "--palette-denim-50": "#89abe5";
67
+ readonly "--palette-denim-70": "#5a77a8";
68
+ readonly "--palette-denim-100": "#2c436b";
69
+ readonly "--palette-azure-10": "#cde1f9";
70
+ readonly "--palette-azure-30": "#9ccff2";
71
+ readonly "--palette-azure-70": "#1362ae";
72
+ readonly "--palette-azure-100": "#093e61";
73
+ readonly "--palette-graphite-0": "#ffffff";
74
+ readonly "--palette-graphite-5": "#f4f4f4";
75
+ readonly "--palette-graphite-10": "#e5e5e5";
76
+ readonly "--palette-graphite-30": "#b2b2b2";
77
+ readonly "--palette-graphite-50": "#757575";
78
+ readonly "--palette-graphite-70": "#4d4d4d";
79
+ readonly "--palette-graphite-100": "#1a1a1a";
80
+ readonly "--palette-dark-alpha-50": "#1a1a1a80";
81
+ readonly "--semantic-page-background": "var(--palette-graphite-0)";
82
+ readonly "--semantic-page-foreground": "var(--palette-graphite-100)";
83
+ readonly "--semantic-danger-background": "var(--palette-burgundy-10)";
84
+ readonly "--semantic-danger-foreground": "#a82e39";
85
+ readonly "--semantic-warning-background": "var(--palette-ochre-10)";
86
+ readonly "--semantic-warning-foreground": "#896508";
87
+ readonly "--semantic-success-background": "var(--palette-forest-10)";
88
+ readonly "--semantic-success-foreground": "#316f2a";
89
+ /**
90
+ * Deaktiverte kontroller. WCAG 1.4.3 unntar inaktive komponenter fra
91
+ * kontrastkravet, men teksten bør fortsatt kunne leses, siden et avslått
92
+ * felt ofte viser innhold brukeren trenger. Bruk den bare på noe som faktisk er
93
+ * slått av; dempet tekst som skal leses bruker `muted-foreground`.
94
+ */
95
+ readonly "--semantic-disabled-background": "var(--palette-graphite-10)";
96
+ readonly "--semantic-disabled-foreground": "var(--palette-graphite-50)";
97
+ /**
98
+ * Dempet tekst som likevel skal leses: hjelpetekst, plassholdere,
99
+ * «(valgfri)»-markeringen, ukedagene i kalenderen. Holder 4,5:1 mot
100
+ * sideflaten i begge temaer.
101
+ */
102
+ readonly "--semantic-muted-foreground": "var(--palette-graphite-50)";
103
+ readonly "--semantic-neutral-background": "var(--palette-graphite-10)";
104
+ readonly "--semantic-neutral-foreground": "var(--palette-graphite-70)";
105
+ readonly "--semantic-interactive-background": "var(--palette-azure-10)";
106
+ readonly "--semantic-interactive-main": "var(--palette-azure-70)";
107
+ readonly "--semantic-interactive-foreground": "var(--palette-azure-100)";
108
+ /** Tekst oppå `interactive-main`. Snur med temaet. */
109
+ readonly "--semantic-interactive-contrast": "var(--palette-graphite-0)";
110
+ readonly "--semantic-interactive-visited": "var(--palette-denim-70)";
111
+ /**
112
+ * Rammen rundt input, textarea, select og kalenderpanelet.
113
+ *
114
+ * graphite-50, ikke graphite-30. WCAG 1.4.11 krever 3:1 for grafiske
115
+ * avgrensninger, og graphite-30 gir bare 2,12:1 mot hvit flate. Feltet var
116
+ * så vidt synlig for den som ser dårlig.
117
+ */
118
+ readonly "--semantic-field-border": "var(--palette-graphite-50)";
119
+ readonly "--semantic-field-border-hover": "var(--palette-graphite-70)";
120
+ /**
121
+ * Fylt flate på danger-knappen når den holdes over, med `danger-contrast`
122
+ * som tekst. Før mørknet bakgrunnen mens teksten ble stående, og hover
123
+ * havnet på 3,52:1, altså svakere enn hviletilstanden.
124
+ */
125
+ readonly "--semantic-danger-main": "#a82e39";
126
+ readonly "--semantic-danger-contrast": "var(--palette-graphite-0)";
127
+ readonly "--semantic-divider-30": "var(--palette-graphite-30)";
128
+ readonly "--semantic-divider-100": "var(--palette-graphite-100)";
129
+ /** Forstørrelsesglasset i søkefeltet. */
130
+ readonly "--semantic-icon-search": "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%234d4d4d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='16.5' y1='16.5' x2='21' y2='21'/%3E%3C/svg%3E\")";
131
+ /**
132
+ * Haken og streken i avkryssingsboksen.
133
+ *
134
+ * De tegnes oppå `interactive-main`, og må derfor følge
135
+ * `interactive-contrast`, ikke sideflaten.
136
+ */
137
+ readonly "--semantic-icon-check": "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E\")";
138
+ readonly "--semantic-icon-dash": "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='3' stroke-linecap='round'%3E%3Cline x1='6' y1='12' x2='18' y2='12'/%3E%3C/svg%3E\")";
139
+ /**
140
+ * Ikonene som tegnes inn i bakgrunnen til dato- og klokkeslettfeltet.
141
+ *
142
+ * De hører hjemme her og ikke i komponenten, fordi en data-URL ikke kan
143
+ * lese en CSS-variabel: streken er malt inn i selve bildet. Med ikonet som
144
+ * token snur det med temaet, som alt annet. Før var streken fast
145
+ * graphite-70, altså 2,03:1 mot den mørke flaten, og så vidt synlig.
146
+ */
147
+ readonly "--semantic-icon-calendar": "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%234d4d4d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'/%3E%3Cline x1='16' y1='2' x2='16' y2='6'/%3E%3Cline x1='8' y1='2' x2='8' y2='6'/%3E%3Cline x1='3' y1='10' x2='21' y2='10'/%3E%3C/svg%3E\")";
148
+ readonly "--semantic-icon-clock": "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%234d4d4d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpolyline points='12 7 12 12 15 15'/%3E%3C/svg%3E\")";
149
+ /**
150
+ * Flaten bak en dialog som er åpnet med `showModal()`.
151
+ *
152
+ * Den ligger mellom siden og dialogen, og må dempe sideinnholdet i begge
153
+ * temaer. I mørkt tema er en sort flate nesten usynlig mot bakgrunnen, så
154
+ * den er kraftigere der.
155
+ */
156
+ readonly "--semantic-overlay-backdrop": "var(--palette-dark-alpha-50)";
157
+ /**
158
+ * Skyggen under flater som ligger over siden, som kalenderpanelet.
159
+ *
160
+ * Hører til det semantiske laget fordi den må snu med temaet: en svak
161
+ * sort skygge er usynlig mot en nesten sort flate, og panelet mistet
162
+ * dybden si i mørkt tema.
163
+ */
164
+ readonly "--semantic-shadow-overlay": "0 16px 40px rgba(0, 0, 0, 0.12)";
165
+ };
166
+ export type CssToken = keyof typeof cssTokens;
167
+ /**
168
+ * Verdiene som overstyres i mørkt tema.
169
+ *
170
+ * Bare det semantiske laget snur. Paletten er råverdier og er den samme i
171
+ * begge temaer. Det er hva fargene *betyr* som endrer seg, ikke hvilke
172
+ * farger som finnes.
173
+ *
174
+ * Alle par er kontrollert mot WCAG AA. Se `tokens.browser.test.ts`.
175
+ */
176
+ export declare const darkTokens: {
177
+ readonly "--semantic-page-background": "var(--palette-graphite-100)";
178
+ readonly "--semantic-page-foreground": "var(--palette-graphite-5)";
179
+ readonly "--semantic-danger-background": "var(--palette-burgundy-100)";
180
+ readonly "--semantic-danger-foreground": "var(--palette-burgundy-30)";
181
+ readonly "--semantic-warning-background": "var(--palette-ochre-100)";
182
+ readonly "--semantic-warning-foreground": "var(--palette-ochre-30)";
183
+ readonly "--semantic-success-background": "var(--palette-forest-100)";
184
+ readonly "--semantic-success-foreground": "var(--palette-forest-30)";
185
+ readonly "--semantic-disabled-background": "var(--palette-graphite-70)";
186
+ readonly "--semantic-disabled-foreground": "var(--palette-graphite-30)";
187
+ readonly "--semantic-muted-foreground": "var(--palette-graphite-30)";
188
+ readonly "--semantic-neutral-background": "var(--palette-graphite-70)";
189
+ readonly "--semantic-neutral-foreground": "var(--palette-graphite-10)";
190
+ readonly "--semantic-interactive-background": "var(--palette-azure-100)";
191
+ readonly "--semantic-interactive-main": "var(--palette-azure-30)";
192
+ readonly "--semantic-interactive-foreground": "var(--palette-azure-10)";
193
+ readonly "--semantic-interactive-contrast": "var(--palette-graphite-100)";
194
+ readonly "--semantic-interactive-visited": "var(--palette-denim-30)";
195
+ readonly "--semantic-field-border": "var(--palette-graphite-50)";
196
+ readonly "--semantic-field-border-hover": "var(--palette-graphite-30)";
197
+ readonly "--semantic-danger-main": "var(--palette-burgundy-30)";
198
+ readonly "--semantic-danger-contrast": "var(--palette-graphite-100)";
199
+ readonly "--semantic-divider-30": "var(--palette-graphite-70)";
200
+ readonly "--semantic-divider-100": "var(--palette-graphite-30)";
201
+ readonly "--semantic-icon-search": "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23b2b2b2' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='16.5' y1='16.5' x2='21' y2='21'/%3E%3C/svg%3E\")";
202
+ readonly "--semantic-icon-check": "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231a1a1a' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E\")";
203
+ readonly "--semantic-icon-dash": "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231a1a1a' stroke-width='3' stroke-linecap='round'%3E%3Cline x1='6' y1='12' x2='18' y2='12'/%3E%3C/svg%3E\")";
204
+ readonly "--semantic-icon-calendar": "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23b2b2b2' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'/%3E%3Cline x1='16' y1='2' x2='16' y2='6'/%3E%3Cline x1='8' y1='2' x2='8' y2='6'/%3E%3Cline x1='3' y1='10' x2='21' y2='10'/%3E%3C/svg%3E\")";
205
+ readonly "--semantic-icon-clock": "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23b2b2b2' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpolyline points='12 7 12 12 15 15'/%3E%3C/svg%3E\")";
206
+ readonly "--semantic-overlay-backdrop": "rgba(0, 0, 0, 0.72)";
207
+ readonly "--semantic-shadow-overlay": "0 16px 40px rgba(0, 0, 0, 0.6)";
208
+ };
209
+ export type DarkToken = keyof typeof darkTokens;
210
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/tokens/tokens.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;CAMd,CAAA;AAEV,eAAO,MAAM,UAAU;;;;;;;;;CASb,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,WAAW,CAAA;AACjD,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,UAAU,CAAA;AAE/C,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6FpB;;;;;OAKG;;;IAIH;;;;OAIG;;;;;;;IAYH,sDAAsD;;;IAKtD;;;;;;OAMG;;;IAKH;;;;OAIG;;;;;IAQH,yCAAyC;;IAIzC;;;;;OAKG;;;IAMH;;;;;;;OAOG;;;IAMH;;;;;;OAMG;;IAGH;;;;;;OAMG;;CAEK,CAAA;AAEV,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,SAAS,CAAA;AAE7C;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgE+B,CAAA;AAEtD,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,UAAU,CAAA"}