@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,55 @@
1
+ import { type FieldState, type NonDefaultFieldState, type RequiredMarker } from "../shared.js";
2
+ export declare const FIELDSET_CLASS: "fs-fieldset";
3
+ export declare const LEGEND_CLASS: "fs-legend";
4
+ export type FieldsetOptions = {
5
+ /** Valideringstilstand for hele gruppen. Standard: `default`. */
6
+ state?: FieldState;
7
+ /** Slår av alle kontrollene i gruppen. */
8
+ disabled?: boolean;
9
+ };
10
+ export type FieldsetAttributes = {
11
+ class: typeof FIELDSET_CLASS;
12
+ "data-state"?: NonDefaultFieldState;
13
+ disabled?: true;
14
+ };
15
+ export type LegendOptions = {
16
+ /** Marker gruppen som påkrevd, med stjerne eller med ordet «(påkrevd)». */
17
+ required?: RequiredMarker;
18
+ /** Marker gruppen som valgfri. Velg én av `required` og `optional`. */
19
+ optional?: boolean;
20
+ /** Demper teksten når gruppen er slått av. */
21
+ disabled?: boolean;
22
+ };
23
+ export type LegendAttributes = {
24
+ class: typeof LEGEND_CLASS;
25
+ "data-required"?: RequiredMarker;
26
+ "data-optional"?: "";
27
+ "aria-disabled"?: "true";
28
+ };
29
+ /**
30
+ * Attributtene for en gruppe med kontroller som hører sammen.
31
+ *
32
+ * `<fieldset>` med `<legend>` er den ene måten å gi et sett radioknapper eller
33
+ * avkryssingsbokser en felles ledetekst som skjermlesere faktisk leser opp
34
+ * før hvert valg.
35
+ *
36
+ * ```ts
37
+ * <fieldset {...fieldset({ state: "invalid" })}>
38
+ * <legend {...legend({ required: "symbol" })}>Leveringsmåte</legend>
39
+ * </fieldset>
40
+ * ```
41
+ */
42
+ export declare const fieldset: (({ state, disabled }?: FieldsetOptions) => FieldsetAttributes) & {
43
+ states: readonly ["default", "invalid", "success"];
44
+ isState: (value: string) => value is "default" | "success" | "invalid";
45
+ };
46
+ /**
47
+ * Attributtene for ledeteksten på en gruppe.
48
+ *
49
+ * Samme markering som `label()`, men på et `<legend>`.
50
+ */
51
+ export declare const legend: (({ required, optional, disabled }?: LegendOptions) => LegendAttributes) & {
52
+ markers: readonly ["symbol", "text"];
53
+ isMarker: (value: string) => value is "symbol" | "text";
54
+ };
55
+ //# sourceMappingURL=fieldset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldset.d.ts","sourceRoot":"","sources":["../../../../src/components/css/fieldset/fieldset.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EAGf,KAAK,oBAAoB,EACzB,KAAK,cAAc,EAEpB,MAAM,cAAc,CAAA;AAErB,eAAO,MAAM,cAAc,EAAG,aAAsB,CAAA;AACpD,eAAO,MAAM,YAAY,EAAG,WAAoB,CAAA;AAEhD,MAAM,MAAM,eAAe,GAAG;IAC5B,iEAAiE;IACjE,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,OAAO,cAAc,CAAA;IAC5B,YAAY,CAAC,EAAE,oBAAoB,CAAA;IACnC,QAAQ,CAAC,EAAE,IAAI,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,OAAO,YAAY,CAAA;IAC1B,eAAe,CAAC,EAAE,cAAc,CAAA;IAChC,eAAe,CAAC,EAAE,EAAE,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,QAAQ,0BACe,eAAe,KAAQ,kBAAkB;;;CAU5E,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,uCACkB,aAAa,KAAQ,gBAAgB;;;CAWzE,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { attributes, createGuard, fieldStates, isFieldState, requiredMarkers, } from "../shared.js";
2
+ export const FIELDSET_CLASS = "fs-fieldset";
3
+ export const LEGEND_CLASS = "fs-legend";
4
+ /**
5
+ * Attributtene for en gruppe med kontroller som hører sammen.
6
+ *
7
+ * `<fieldset>` med `<legend>` er den ene måten å gi et sett radioknapper eller
8
+ * avkryssingsbokser en felles ledetekst som skjermlesere faktisk leser opp
9
+ * før hvert valg.
10
+ *
11
+ * ```ts
12
+ * <fieldset {...fieldset({ state: "invalid" })}>
13
+ * <legend {...legend({ required: "symbol" })}>Leveringsmåte</legend>
14
+ * </fieldset>
15
+ * ```
16
+ */
17
+ export const fieldset = Object.assign(({ state = "default", disabled } = {}) => attributes({
18
+ class: FIELDSET_CLASS,
19
+ "data-state": state === "default" ? undefined : state,
20
+ disabled: disabled ? true : undefined,
21
+ }), {
22
+ states: fieldStates,
23
+ isState: isFieldState,
24
+ });
25
+ /**
26
+ * Attributtene for ledeteksten på en gruppe.
27
+ *
28
+ * Samme markering som `label()`, men på et `<legend>`.
29
+ */
30
+ export const legend = Object.assign(({ required, optional, disabled } = {}) => attributes({
31
+ class: LEGEND_CLASS,
32
+ "data-required": required,
33
+ "data-optional": optional && !required ? "" : undefined,
34
+ "aria-disabled": disabled ? "true" : undefined,
35
+ }), {
36
+ markers: requiredMarkers,
37
+ isMarker: createGuard(requiredMarkers),
38
+ });
39
+ //# sourceMappingURL=fieldset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldset.js","sourceRoot":"","sources":["../../../../src/components/css/fieldset/fieldset.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EAEX,WAAW,EACX,YAAY,EAGZ,eAAe,GAChB,MAAM,cAAc,CAAA;AAErB,MAAM,CAAC,MAAM,cAAc,GAAG,aAAsB,CAAA;AACpD,MAAM,CAAC,MAAM,YAAY,GAAG,WAAoB,CAAA;AA+BhD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CACnC,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,QAAQ,KAAsB,EAAE,EAAsB,EAAE,CAC5E,UAAU,CAAC;IACT,KAAK,EAAE,cAAc;IACrB,YAAY,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;IACrD,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAE,IAAc,CAAC,CAAC,CAAC,SAAS;CACjD,CAAC,EACJ;IACE,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;CACtB,CACF,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CACjC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAoB,EAAE,EAAoB,EAAE,CACzE,UAAU,CAAC;IACT,KAAK,EAAE,YAAY;IACnB,eAAe,EAAE,QAAQ;IACzB,eAAe,EAAE,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAY,CAAC,CAAC,CAAC,SAAS;IAClE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAE,MAAgB,CAAC,CAAC,CAAC,SAAS;CAC1D,CAAC,EACJ;IACE,OAAO,EAAE,eAAe;IACxB,QAAQ,EAAE,WAAW,CAAC,eAAe,CAAC;CACvC,CACF,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { type FieldState, type NonDefaultFieldState } from "../shared.js";
2
+ export declare const FILE_UPLOAD_CLASS: "fs-file-upload";
3
+ /** Lista over filene som er valgt. */
4
+ export declare const FILE_UPLOAD_LIST_CLASS: "fs-file-upload-list";
5
+ export type FileUploadOptions = {
6
+ /** Valideringstilstand. Standard: `default`. */
7
+ state?: FieldState;
8
+ /** Tillat flere filer. */
9
+ multiple?: boolean;
10
+ /** Filtypene feltet tar imot, som `.pdf,image/*`. */
11
+ accept?: string;
12
+ };
13
+ export type FileUploadAttributes = {
14
+ class: typeof FILE_UPLOAD_CLASS;
15
+ type: "file";
16
+ multiple?: true;
17
+ accept?: string;
18
+ "data-state"?: NonDefaultFieldState;
19
+ "aria-invalid"?: "true";
20
+ };
21
+ /**
22
+ * Attributtene for et filopplastingsfelt.
23
+ *
24
+ * Feltet er et vanlig `<input type="file">`. Knappen inni er nettleserens
25
+ * egen, og teksten på den kommer fra operativsystemets språk. Den kan ikke
26
+ * oversettes, så ledeteksten over feltet må si hva som skal lastes opp.
27
+ *
28
+ * `accept` er en hjelp i filvelgeren, ikke en sperre. Brukeren kan velge
29
+ * «alle filer», så typen må sjekkes på serveren uansett.
30
+ *
31
+ * ```ts
32
+ * <input {...fileUpload({ multiple: true, accept: ".pdf" })} />
33
+ * ```
34
+ */
35
+ export declare const fileUpload: (({ state, multiple, accept, }?: FileUploadOptions) => FileUploadAttributes) & {
36
+ /** Klassen på lista over valgte filer. */
37
+ list: "fs-file-upload-list";
38
+ states: readonly ["default", "invalid", "success"];
39
+ isState: (value: string) => value is "default" | "success" | "invalid";
40
+ };
41
+ //# sourceMappingURL=file-upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload.d.ts","sourceRoot":"","sources":["../../../../src/components/css/file-upload/file-upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EAGf,KAAK,oBAAoB,EAC1B,MAAM,cAAc,CAAA;AAErB,eAAO,MAAM,iBAAiB,EAAG,gBAAyB,CAAA;AAC1D,sCAAsC;AACtC,eAAO,MAAM,sBAAsB,EAAG,qBAA8B,CAAA;AAEpE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,gDAAgD;IAChD,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,OAAO,iBAAiB,CAAA;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,IAAI,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,oBAAoB,CAAA;IACnC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,mCAKlB,iBAAiB,KAAQ,oBAAoB;IAU9C,0CAA0C;;;;CAK7C,CAAA"}
@@ -0,0 +1,32 @@
1
+ import { attributes, fieldStates, isFieldState, } from "../shared.js";
2
+ export const FILE_UPLOAD_CLASS = "fs-file-upload";
3
+ /** Lista over filene som er valgt. */
4
+ export const FILE_UPLOAD_LIST_CLASS = "fs-file-upload-list";
5
+ /**
6
+ * Attributtene for et filopplastingsfelt.
7
+ *
8
+ * Feltet er et vanlig `<input type="file">`. Knappen inni er nettleserens
9
+ * egen, og teksten på den kommer fra operativsystemets språk. Den kan ikke
10
+ * oversettes, så ledeteksten over feltet må si hva som skal lastes opp.
11
+ *
12
+ * `accept` er en hjelp i filvelgeren, ikke en sperre. Brukeren kan velge
13
+ * «alle filer», så typen må sjekkes på serveren uansett.
14
+ *
15
+ * ```ts
16
+ * <input {...fileUpload({ multiple: true, accept: ".pdf" })} />
17
+ * ```
18
+ */
19
+ export const fileUpload = Object.assign(({ state = "default", multiple, accept, } = {}) => attributes({
20
+ class: FILE_UPLOAD_CLASS,
21
+ type: "file",
22
+ multiple: multiple ? true : undefined,
23
+ accept,
24
+ "data-state": state === "default" ? undefined : state,
25
+ "aria-invalid": state === "invalid" ? "true" : undefined,
26
+ }), {
27
+ /** Klassen på lista over valgte filer. */
28
+ list: FILE_UPLOAD_LIST_CLASS,
29
+ states: fieldStates,
30
+ isState: isFieldState,
31
+ });
32
+ //# sourceMappingURL=file-upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload.js","sourceRoot":"","sources":["../../../../src/components/css/file-upload/file-upload.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAEV,WAAW,EACX,YAAY,GAEb,MAAM,cAAc,CAAA;AAErB,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAyB,CAAA;AAC1D,sCAAsC;AACtC,MAAM,CAAC,MAAM,sBAAsB,GAAG,qBAA8B,CAAA;AAoBpE;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CACrC,CAAC,EACC,KAAK,GAAG,SAAS,EACjB,QAAQ,EACR,MAAM,MACe,EAAE,EAAwB,EAAE,CACjD,UAAU,CAAC;IACT,KAAK,EAAE,iBAAiB;IACxB,IAAI,EAAE,MAAe;IACrB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAE,IAAc,CAAC,CAAC,CAAC,SAAS;IAChD,MAAM;IACN,YAAY,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;IACrD,cAAc,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAE,MAAgB,CAAC,CAAC,CAAC,SAAS;CACpE,CAAC,EACJ;IACE,0CAA0C;IAC1C,IAAI,EAAE,sBAAsB;IAC5B,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;CACtB,CACF,CAAA"}
@@ -0,0 +1,29 @@
1
+ export declare const HEADING_CLASS: "fs-heading";
2
+ export declare const headingSizes: readonly ["xs", "s", "m", "l", "xl", "mega"];
3
+ export type HeadingSize = (typeof headingSizes)[number];
4
+ export type NonDefaultHeadingSize = Exclude<HeadingSize, "l">;
5
+ export type HeadingOptions = {
6
+ /** Visuell størrelse. Standard: `l`. */
7
+ size?: HeadingSize;
8
+ };
9
+ export type HeadingAttributes = {
10
+ class: typeof HEADING_CLASS;
11
+ "data-size"?: NonDefaultHeadingSize;
12
+ };
13
+ /**
14
+ * Attributtene for en overskrift.
15
+ *
16
+ * Størrelsen og nivået er to forskjellige ting. Nivået er `<h1>` til `<h6>`
17
+ * og bestemmer strukturen skjermlesere navigerer etter; `size` bestemmer bare
18
+ * hvor stor teksten ser ut. En `<h2>` som skal se liten ut er riktig; en
19
+ * `<h4>` valgt fordi den var liten nok, hopper over et nivå i strukturen.
20
+ *
21
+ * ```ts
22
+ * <h2 {...heading({ size: "m" })}>Vedlegg</h2>
23
+ * ```
24
+ */
25
+ export declare const heading: (({ size }?: HeadingOptions) => HeadingAttributes) & {
26
+ sizes: readonly ["xs", "s", "m", "l", "xl", "mega"];
27
+ isSize: (value: string) => value is "l" | "xs" | "s" | "m" | "xl" | "mega";
28
+ };
29
+ //# sourceMappingURL=heading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heading.d.ts","sourceRoot":"","sources":["../../../../src/components/css/heading/heading.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,EAAG,YAAqB,CAAA;AAElD,eAAO,MAAM,YAAY,8CAA+C,CAAA;AAExE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AACvD,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;AAE7D,MAAM,MAAM,cAAc,GAAG;IAC3B,wCAAwC;IACxC,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,OAAO,aAAa,CAAA;IAC3B,WAAW,CAAC,EAAE,qBAAqB,CAAA;CACpC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,OAAO,eACD,cAAc,KAAQ,iBAAiB;;;CASzD,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { attributes, createGuard } from "../shared.js";
2
+ export const HEADING_CLASS = "fs-heading";
3
+ export const headingSizes = ["xs", "s", "m", "l", "xl", "mega"];
4
+ /**
5
+ * Attributtene for en overskrift.
6
+ *
7
+ * Størrelsen og nivået er to forskjellige ting. Nivået er `<h1>` til `<h6>`
8
+ * og bestemmer strukturen skjermlesere navigerer etter; `size` bestemmer bare
9
+ * hvor stor teksten ser ut. En `<h2>` som skal se liten ut er riktig; en
10
+ * `<h4>` valgt fordi den var liten nok, hopper over et nivå i strukturen.
11
+ *
12
+ * ```ts
13
+ * <h2 {...heading({ size: "m" })}>Vedlegg</h2>
14
+ * ```
15
+ */
16
+ export const heading = Object.assign(({ size = "l" } = {}) => attributes({
17
+ class: HEADING_CLASS,
18
+ "data-size": size === "l" ? undefined : size,
19
+ }), {
20
+ sizes: headingSizes,
21
+ isSize: createGuard(headingSizes),
22
+ });
23
+ //# sourceMappingURL=heading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heading.js","sourceRoot":"","sources":["../../../../src/components/css/heading/heading.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG,YAAqB,CAAA;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAU,CAAA;AAexE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAClC,CAAC,EAAE,IAAI,GAAG,GAAG,KAAqB,EAAE,EAAqB,EAAE,CACzD,UAAU,CAAC;IACT,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;CAC7C,CAAC,EACJ;IACE,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC;CAClC,CACF,CAAA"}
@@ -0,0 +1,24 @@
1
+ export declare const HELP_TEXT_CLASS: "fs-help-text";
2
+ export declare const helpTextVariants: readonly ["muted", "default", "success", "warning"];
3
+ export type HelpTextVariant = (typeof helpTextVariants)[number];
4
+ export type NonDefaultHelpTextVariant = Exclude<HelpTextVariant, "muted">;
5
+ export type HelpTextOptions = {
6
+ /** Hvor mye teksten skal rope. Standard: `muted`. */
7
+ variant?: HelpTextVariant;
8
+ };
9
+ export type HelpTextAttributes = {
10
+ class: typeof HELP_TEXT_CLASS;
11
+ "data-variant"?: NonDefaultHelpTextVariant;
12
+ };
13
+ /**
14
+ * Attributtene for hjelpetekst under et felt.
15
+ *
16
+ * ```ts
17
+ * <p {...helpText({ variant: "warning" })}>…</p>
18
+ * ```
19
+ */
20
+ export declare const helpText: (({ variant }?: HelpTextOptions) => HelpTextAttributes) & {
21
+ variants: readonly ["muted", "default", "success", "warning"];
22
+ isVariant: (value: string) => value is "default" | "warning" | "success" | "muted";
23
+ };
24
+ //# sourceMappingURL=help-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-text.d.ts","sourceRoot":"","sources":["../../../../src/components/css/help-text/help-text.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,EAAG,cAAuB,CAAA;AAEtD,eAAO,MAAM,gBAAgB,qDAKnB,CAAA;AAEV,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAC/D,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;AAEzE,MAAM,MAAM,eAAe,GAAG;IAC5B,qDAAqD;IACrD,OAAO,CAAC,EAAE,eAAe,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,OAAO,eAAe,CAAA;IAC7B,cAAc,CAAC,EAAE,yBAAyB,CAAA;CAC3C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,kBACK,eAAe,KAAQ,kBAAkB;;;CASlE,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { attributes, createGuard } from "../shared.js";
2
+ export const HELP_TEXT_CLASS = "fs-help-text";
3
+ export const helpTextVariants = [
4
+ "muted",
5
+ "default",
6
+ "success",
7
+ "warning",
8
+ ];
9
+ /**
10
+ * Attributtene for hjelpetekst under et felt.
11
+ *
12
+ * ```ts
13
+ * <p {...helpText({ variant: "warning" })}>…</p>
14
+ * ```
15
+ */
16
+ export const helpText = Object.assign(({ variant = "muted" } = {}) => attributes({
17
+ class: HELP_TEXT_CLASS,
18
+ "data-variant": variant === "muted" ? undefined : variant,
19
+ }), {
20
+ variants: helpTextVariants,
21
+ isVariant: createGuard(helpTextVariants),
22
+ });
23
+ //# sourceMappingURL=help-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-text.js","sourceRoot":"","sources":["../../../../src/components/css/help-text/help-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAEtD,MAAM,CAAC,MAAM,eAAe,GAAG,cAAuB,CAAA;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,OAAO;IACP,SAAS;IACT,SAAS;IACT,SAAS;CACD,CAAA;AAeV;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CACnC,CAAC,EAAE,OAAO,GAAG,OAAO,KAAsB,EAAE,EAAsB,EAAE,CAClE,UAAU,CAAC;IACT,KAAK,EAAE,eAAe;IACtB,cAAc,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;CAC1D,CAAC,EACJ;IACE,QAAQ,EAAE,gBAAgB;IAC1B,SAAS,EAAE,WAAW,CAAC,gBAAgB,CAAC;CACzC,CACF,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { type FieldState, type NonDefaultFieldState } from "../shared.js";
2
+ export declare const INPUT_CLASS: "fs-input";
3
+ export declare const inputTypes: readonly ["text", "password", "email", "number", "date", "datetime-local", "week", "month", "tel", "url", "search", "time"];
4
+ export type InputType = (typeof inputTypes)[number];
5
+ /** Typene som får et ikon i feltet, og som åpner nettleserens egen velger. */
6
+ declare const TYPER_MED_IKON: readonly ["date", "time", "datetime-local"];
7
+ type TypeMedIkon = (typeof TYPER_MED_IKON)[number];
8
+ export type InputOptions = {
9
+ /** HTML-typen. Settes som `type`, og styrer ikonet. Standard: `text`. */
10
+ type?: InputType;
11
+ /** Valideringstilstand. Standard: `default`. */
12
+ state?: FieldState;
13
+ };
14
+ export type InputAttributes = {
15
+ class: typeof INPUT_CLASS;
16
+ type: InputType;
17
+ "data-variant"?: TypeMedIkon;
18
+ "data-state"?: NonDefaultFieldState;
19
+ "aria-invalid"?: "true";
20
+ };
21
+ /**
22
+ * Attributtene for et tekstfelt.
23
+ *
24
+ * `type` setter både HTML-typen og ikonvarianten, så de to kan ikke komme i
25
+ * utakt. Skriver du dem for hånd, er det lett å få et datofelt som ser ut
26
+ * som et datofelt, men der ingenting skjer når brukeren trykker på ikonet.
27
+ *
28
+ * ```ts
29
+ * <input {...input({ type: "date", state: "invalid" })} />
30
+ * ```
31
+ */
32
+ export declare const input: (({ type, state }?: InputOptions) => InputAttributes) & {
33
+ types: readonly ["text", "password", "email", "number", "date", "datetime-local", "week", "month", "tel", "url", "search", "time"];
34
+ isType: (value: string) => value is "number" | "date" | "search" | "url" | "text" | "password" | "email" | "datetime-local" | "week" | "month" | "tel" | "time";
35
+ states: readonly ["default", "invalid", "success"];
36
+ isState: (value: string) => value is "default" | "success" | "invalid";
37
+ };
38
+ export {};
39
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../src/components/css/input/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EAGf,KAAK,oBAAoB,EAC1B,MAAM,cAAc,CAAA;AAErB,eAAO,MAAM,WAAW,EAAG,UAAmB,CAAA;AAE9C,eAAO,MAAM,UAAU,6HAab,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnD,8EAA8E;AAC9E,QAAA,MAAM,cAAc,6CAA8C,CAAA;AAClE,KAAK,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAElD,MAAM,MAAM,YAAY,GAAG;IACzB,yEAAyE;IACzE,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,gDAAgD;IAChD,KAAK,CAAC,EAAE,UAAU,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,OAAO,WAAW,CAAA;IACzB,IAAI,EAAE,SAAS,CAAA;IACf,cAAc,CAAC,EAAE,WAAW,CAAA;IAC5B,YAAY,CAAC,EAAE,oBAAoB,CAAA;IACnC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,sBACuB,YAAY,KAAQ,eAAe;;;;;CAgB3E,CAAA"}
@@ -0,0 +1,44 @@
1
+ import { attributes, createGuard, fieldStates, isFieldState, } from "../shared.js";
2
+ export const INPUT_CLASS = "fs-input";
3
+ export const inputTypes = [
4
+ "text",
5
+ "password",
6
+ "email",
7
+ "number",
8
+ "date",
9
+ "datetime-local",
10
+ "week",
11
+ "month",
12
+ "tel",
13
+ "url",
14
+ "search",
15
+ "time",
16
+ ];
17
+ /** Typene som får et ikon i feltet, og som åpner nettleserens egen velger. */
18
+ const TYPER_MED_IKON = ["date", "time", "datetime-local"];
19
+ /**
20
+ * Attributtene for et tekstfelt.
21
+ *
22
+ * `type` setter både HTML-typen og ikonvarianten, så de to kan ikke komme i
23
+ * utakt. Skriver du dem for hånd, er det lett å få et datofelt som ser ut
24
+ * som et datofelt, men der ingenting skjer når brukeren trykker på ikonet.
25
+ *
26
+ * ```ts
27
+ * <input {...input({ type: "date", state: "invalid" })} />
28
+ * ```
29
+ */
30
+ export const input = Object.assign(({ type = "text", state = "default" } = {}) => attributes({
31
+ class: INPUT_CLASS,
32
+ type,
33
+ "data-variant": TYPER_MED_IKON.includes(type)
34
+ ? type
35
+ : undefined,
36
+ "data-state": state === "default" ? undefined : state,
37
+ "aria-invalid": state === "invalid" ? "true" : undefined,
38
+ }), {
39
+ types: inputTypes,
40
+ isType: createGuard(inputTypes),
41
+ states: fieldStates,
42
+ isState: isFieldState,
43
+ });
44
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../../src/components/css/input/input.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EAEX,WAAW,EACX,YAAY,GAEb,MAAM,cAAc,CAAA;AAErB,MAAM,CAAC,MAAM,WAAW,GAAG,UAAmB,CAAA;AAE9C,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,MAAM;IACN,UAAU;IACV,OAAO;IACP,QAAQ;IACR,MAAM;IACN,gBAAgB;IAChB,MAAM;IACN,OAAO;IACP,KAAK;IACL,KAAK;IACL,QAAQ;IACR,MAAM;CACE,CAAA;AAIV,8EAA8E;AAC9E,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAU,CAAA;AAkBlE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAChC,CAAC,EAAE,IAAI,GAAG,MAAM,EAAE,KAAK,GAAG,SAAS,KAAmB,EAAE,EAAmB,EAAE,CAC3E,UAAU,CAAC;IACT,KAAK,EAAE,WAAW;IAClB,IAAI;IACJ,cAAc,EAAG,cAAoC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAClE,CAAC,CAAE,IAAoB;QACvB,CAAC,CAAC,SAAS;IACb,YAAY,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;IACrD,cAAc,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAE,MAAgB,CAAC,CAAC,CAAC,SAAS;CACpE,CAAC,EACJ;IACE,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC;IAC/B,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;CACtB,CACF,CAAA"}
@@ -0,0 +1,33 @@
1
+ import { type RequiredMarker, requiredMarkers } from "../shared.js";
2
+ export declare const LABEL_CLASS: "fs-label";
3
+ export type { RequiredMarker };
4
+ export { requiredMarkers };
5
+ export type LabelOptions = {
6
+ /** Marker feltet som påkrevd, med stjerne eller med ordet «(påkrevd)». */
7
+ required?: RequiredMarker;
8
+ /** Marker feltet som valgfritt. Velg én av `required` og `optional`. */
9
+ optional?: boolean;
10
+ /** Demper teksten når kontrollen er slått av. */
11
+ disabled?: boolean;
12
+ };
13
+ export type LabelAttributes = {
14
+ class: typeof LABEL_CLASS;
15
+ "data-required"?: RequiredMarker;
16
+ "data-optional"?: "";
17
+ "aria-disabled"?: "true";
18
+ };
19
+ /**
20
+ * Attributtene for en ledetekst.
21
+ *
22
+ * Markeringen er bare visuell, så sett `required` på selve feltet i tillegg,
23
+ * ellers får skjermleseren ikke vite at det må fylles ut.
24
+ *
25
+ * ```ts
26
+ * <label {...label({ required: "symbol" })} htmlFor="epost">E-postadresse</label>
27
+ * ```
28
+ */
29
+ export declare const label: (({ required, optional, disabled }?: LabelOptions) => LabelAttributes) & {
30
+ markers: readonly ["symbol", "text"];
31
+ isMarker: (value: string) => value is "symbol" | "text";
32
+ };
33
+ //# sourceMappingURL=label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../../../src/components/css/label/label.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,eAAe,EAChB,MAAM,cAAc,CAAA;AAErB,eAAO,MAAM,WAAW,EAAG,UAAmB,CAAA;AAE9C,YAAY,EAAE,cAAc,EAAE,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,CAAA;AAE1B,MAAM,MAAM,YAAY,GAAG;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,OAAO,WAAW,CAAA;IACzB,eAAe,CAAC,EAAE,cAAc,CAAA;IAChC,eAAe,CAAC,EAAE,EAAE,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,uCACmB,YAAY,KAAQ,eAAe;;;CAWvE,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { attributes, createGuard, requiredMarkers, } from "../shared.js";
2
+ export const LABEL_CLASS = "fs-label";
3
+ export { requiredMarkers };
4
+ /**
5
+ * Attributtene for en ledetekst.
6
+ *
7
+ * Markeringen er bare visuell, så sett `required` på selve feltet i tillegg,
8
+ * ellers får skjermleseren ikke vite at det må fylles ut.
9
+ *
10
+ * ```ts
11
+ * <label {...label({ required: "symbol" })} htmlFor="epost">E-postadresse</label>
12
+ * ```
13
+ */
14
+ export const label = Object.assign(({ required, optional, disabled } = {}) => attributes({
15
+ class: LABEL_CLASS,
16
+ "data-required": required,
17
+ "data-optional": optional && !required ? "" : undefined,
18
+ "aria-disabled": disabled ? "true" : undefined,
19
+ }), {
20
+ markers: requiredMarkers,
21
+ isMarker: createGuard(requiredMarkers),
22
+ });
23
+ //# sourceMappingURL=label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.js","sourceRoot":"","sources":["../../../../src/components/css/label/label.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EAEX,eAAe,GAChB,MAAM,cAAc,CAAA;AAErB,MAAM,CAAC,MAAM,WAAW,GAAG,UAAmB,CAAA;AAG9C,OAAO,EAAE,eAAe,EAAE,CAAA;AAkB1B;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAChC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAmB,EAAE,EAAmB,EAAE,CACvE,UAAU,CAAC;IACT,KAAK,EAAE,WAAW;IAClB,eAAe,EAAE,QAAQ;IACzB,eAAe,EAAE,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAY,CAAC,CAAC,CAAC,SAAS;IAClE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAE,MAAgB,CAAC,CAAC,CAAC,SAAS;CAC1D,CAAC,EACJ;IACE,OAAO,EAAE,eAAe;IACxB,QAAQ,EAAE,WAAW,CAAC,eAAe,CAAC;CACvC,CACF,CAAA"}
@@ -0,0 +1,21 @@
1
+ export declare const LINK_CLASS: "fs-link";
2
+ export type LinkOptions = {
3
+ /**
4
+ * Lenken er ikke klikkbar ennå. Gir `aria-disabled` framfor å fjerne
5
+ * `href`, slik at skjermlesere fortsatt finner den og kan si fra.
6
+ */
7
+ disabled?: boolean;
8
+ };
9
+ export type LinkAttributes = {
10
+ class: typeof LINK_CLASS;
11
+ "aria-disabled"?: "true";
12
+ };
13
+ /**
14
+ * Attributtene for en lenke.
15
+ *
16
+ * ```ts
17
+ * <a {...link()} href="/kvittering">Se kvittering</a>
18
+ * ```
19
+ */
20
+ export declare const link: ({ disabled }?: LinkOptions) => LinkAttributes;
21
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../../src/components/css/link/link.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,EAAG,SAAkB,CAAA;AAE5C,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,OAAO,UAAU,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,GAAI,eAAsB,WAAgB,KAAG,cAI1D,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { attributes } from "../shared.js";
2
+ export const LINK_CLASS = "fs-link";
3
+ /**
4
+ * Attributtene for en lenke.
5
+ *
6
+ * ```ts
7
+ * <a {...link()} href="/kvittering">Se kvittering</a>
8
+ * ```
9
+ */
10
+ export const link = ({ disabled = false } = {}) => attributes({
11
+ class: LINK_CLASS,
12
+ "aria-disabled": disabled ? "true" : undefined,
13
+ });
14
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../src/components/css/link/link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAG,SAAkB,CAAA;AAe5C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,KAAkB,EAAE,EAAkB,EAAE,CAC7E,UAAU,CAAC;IACT,KAAK,EAAE,UAAU;IACjB,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAE,MAAgB,CAAC,CAAC,CAAC,SAAS;CAC1D,CAAC,CAAA"}
@@ -0,0 +1,29 @@
1
+ export declare const LIST_CLASS: "fs-list";
2
+ export declare const listVariants: readonly ["default", "plain", "divided"];
3
+ export type ListVariant = (typeof listVariants)[number];
4
+ export type NonDefaultListVariant = Exclude<ListVariant, "default">;
5
+ export type ListOptions = {
6
+ /** Punkter, rene rader, eller rader med strek mellom. Standard: `default`. */
7
+ variant?: ListVariant;
8
+ };
9
+ export type ListAttributes = {
10
+ class: typeof LIST_CLASS;
11
+ "data-variant"?: NonDefaultListVariant;
12
+ };
13
+ /**
14
+ * Attributtene for en liste.
15
+ *
16
+ * Klassen hører på `<ul>` eller `<ol>`. `plain` og `divided` fjerner punktene
17
+ * visuelt, men listen blir værende en liste, så skjermleseren sier fortsatt
18
+ * hvor mange elementer den har. Det er grunnen til at varianten finnes: uten
19
+ * den ville folk brukt `<div>` for å bli kvitt punktene.
20
+ *
21
+ * ```ts
22
+ * <ul {...list({ variant: "divided" })}>…</ul>
23
+ * ```
24
+ */
25
+ export declare const list: (({ variant }?: ListOptions) => ListAttributes) & {
26
+ variants: readonly ["default", "plain", "divided"];
27
+ isVariant: (value: string) => value is "default" | "plain" | "divided";
28
+ };
29
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/components/css/list/list.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,EAAG,SAAkB,CAAA;AAE5C,eAAO,MAAM,YAAY,0CAA2C,CAAA;AAEpE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AACvD,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;AAEnE,MAAM,MAAM,WAAW,GAAG;IACxB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,WAAW,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,OAAO,UAAU,CAAA;IACxB,cAAc,CAAC,EAAE,qBAAqB,CAAA;CACvC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,IAAI,kBACW,WAAW,KAAQ,cAAc;;;CAS5D,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { attributes, createGuard } from "../shared.js";
2
+ export const LIST_CLASS = "fs-list";
3
+ export const listVariants = ["default", "plain", "divided"];
4
+ /**
5
+ * Attributtene for en liste.
6
+ *
7
+ * Klassen hører på `<ul>` eller `<ol>`. `plain` og `divided` fjerner punktene
8
+ * visuelt, men listen blir værende en liste, så skjermleseren sier fortsatt
9
+ * hvor mange elementer den har. Det er grunnen til at varianten finnes: uten
10
+ * den ville folk brukt `<div>` for å bli kvitt punktene.
11
+ *
12
+ * ```ts
13
+ * <ul {...list({ variant: "divided" })}>…</ul>
14
+ * ```
15
+ */
16
+ export const list = Object.assign(({ variant = "default" } = {}) => attributes({
17
+ class: LIST_CLASS,
18
+ "data-variant": variant === "default" ? undefined : variant,
19
+ }), {
20
+ variants: listVariants,
21
+ isVariant: createGuard(listVariants),
22
+ });
23
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/components/css/list/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAEtD,MAAM,CAAC,MAAM,UAAU,GAAG,SAAkB,CAAA;AAE5C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAU,CAAA;AAepE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAC/B,CAAC,EAAE,OAAO,GAAG,SAAS,KAAkB,EAAE,EAAkB,EAAE,CAC5D,UAAU,CAAC;IACT,KAAK,EAAE,UAAU;IACjB,cAAc,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;CAC5D,CAAC,EACJ;IACE,QAAQ,EAAE,YAAY;IACtB,SAAS,EAAE,WAAW,CAAC,YAAY,CAAC;CACrC,CACF,CAAA"}
@@ -0,0 +1,27 @@
1
+ export declare const PAGINATION_CLASS: "fs-pagination";
2
+ /** Hoppet i nummerrekken, som «1 2 … 9 10». */
3
+ export declare const PAGINATION_GAP_CLASS: "fs-pagination__gap";
4
+ export type PaginationAttributes = {
5
+ class: typeof PAGINATION_CLASS;
6
+ };
7
+ /**
8
+ * Attributtene for sidenavigering.
9
+ *
10
+ * Klassen hører på en `<ul>` inne i en `<nav aria-label="Sidenavigering">`.
11
+ * Hver side er en lenke med egen adresse, ikke en knapp: da kan brukeren
12
+ * åpne side tre i ny fane, og komme tilbake med tilbakeknappen.
13
+ *
14
+ * Gjeldende side markeres med `aria-current="page"`, som både gir fargen og
15
+ * er det skjermleseren leser opp.
16
+ *
17
+ * ```ts
18
+ * <nav aria-label="Sidenavigering">
19
+ * <ul {...pagination()}>…</ul>
20
+ * </nav>
21
+ * ```
22
+ */
23
+ export declare const pagination: (() => PaginationAttributes) & {
24
+ /** Klassen på hoppet i nummerrekken. */
25
+ gap: "fs-pagination__gap";
26
+ };
27
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../../src/components/css/pagination/pagination.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,EAAG,eAAwB,CAAA;AACxD,+CAA+C;AAC/C,eAAO,MAAM,oBAAoB,EAAG,oBAA6B,CAAA;AAEjE,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,OAAO,gBAAgB,CAAA;CAC/B,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,UAAU,SACjB,oBAAoB;IAEtB,wCAAwC;;CAG3C,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { attributes } from "../shared.js";
2
+ export const PAGINATION_CLASS = "fs-pagination";
3
+ /** Hoppet i nummerrekken, som «1 2 … 9 10». */
4
+ export const PAGINATION_GAP_CLASS = "fs-pagination__gap";
5
+ /**
6
+ * Attributtene for sidenavigering.
7
+ *
8
+ * Klassen hører på en `<ul>` inne i en `<nav aria-label="Sidenavigering">`.
9
+ * Hver side er en lenke med egen adresse, ikke en knapp: da kan brukeren
10
+ * åpne side tre i ny fane, og komme tilbake med tilbakeknappen.
11
+ *
12
+ * Gjeldende side markeres med `aria-current="page"`, som både gir fargen og
13
+ * er det skjermleseren leser opp.
14
+ *
15
+ * ```ts
16
+ * <nav aria-label="Sidenavigering">
17
+ * <ul {...pagination()}>…</ul>
18
+ * </nav>
19
+ * ```
20
+ */
21
+ export const pagination = Object.assign(() => attributes({ class: PAGINATION_CLASS }), {
22
+ /** Klassen på hoppet i nummerrekken. */
23
+ gap: PAGINATION_GAP_CLASS,
24
+ });
25
+ //# sourceMappingURL=pagination.js.map