@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.
- package/CHANGELOG.md +85 -0
- package/LICENSE +21 -0
- package/README.md +101 -0
- package/dist/cli.d.ts +31 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +261 -0
- package/dist/cli.js.map +1 -0
- package/dist/components/css/accordion/accordion.d.ts +37 -0
- package/dist/components/css/accordion/accordion.d.ts.map +1 -0
- package/dist/components/css/accordion/accordion.js +31 -0
- package/dist/components/css/accordion/accordion.js.map +1 -0
- package/dist/components/css/alert/alert.d.ts +35 -0
- package/dist/components/css/alert/alert.d.ts.map +1 -0
- package/dist/components/css/alert/alert.js +29 -0
- package/dist/components/css/alert/alert.js.map +1 -0
- package/dist/components/css/avatar/avatar.d.ts +40 -0
- package/dist/components/css/avatar/avatar.d.ts.map +1 -0
- package/dist/components/css/avatar/avatar.js +30 -0
- package/dist/components/css/avatar/avatar.js.map +1 -0
- package/dist/components/css/badge/badge.d.ts +24 -0
- package/dist/components/css/badge/badge.d.ts.map +1 -0
- package/dist/components/css/badge/badge.js +24 -0
- package/dist/components/css/badge/badge.js.map +1 -0
- package/dist/components/css/breadcrumbs/breadcrumbs.d.ts +25 -0
- package/dist/components/css/breadcrumbs/breadcrumbs.d.ts.map +1 -0
- package/dist/components/css/breadcrumbs/breadcrumbs.js +23 -0
- package/dist/components/css/breadcrumbs/breadcrumbs.js.map +1 -0
- package/dist/components/css/button/button.d.ts +26 -0
- package/dist/components/css/button/button.d.ts.map +1 -0
- package/dist/components/css/button/button.js +25 -0
- package/dist/components/css/button/button.js.map +1 -0
- package/dist/components/css/card/card.d.ts +36 -0
- package/dist/components/css/card/card.d.ts.map +1 -0
- package/dist/components/css/card/card.js +28 -0
- package/dist/components/css/card/card.js.map +1 -0
- package/dist/components/css/checkbox/checkbox.d.ts +32 -0
- package/dist/components/css/checkbox/checkbox.d.ts.map +1 -0
- package/dist/components/css/checkbox/checkbox.js +27 -0
- package/dist/components/css/checkbox/checkbox.js.map +1 -0
- package/dist/components/css/dialog/dialog.d.ts +30 -0
- package/dist/components/css/dialog/dialog.d.ts.map +1 -0
- package/dist/components/css/dialog/dialog.js +28 -0
- package/dist/components/css/dialog/dialog.js.map +1 -0
- package/dist/components/css/divider/divider.d.ts +28 -0
- package/dist/components/css/divider/divider.d.ts.map +1 -0
- package/dist/components/css/divider/divider.js +22 -0
- package/dist/components/css/divider/divider.js.map +1 -0
- package/dist/components/css/error-text/error-text.d.ts +24 -0
- package/dist/components/css/error-text/error-text.d.ts.map +1 -0
- package/dist/components/css/error-text/error-text.js +18 -0
- package/dist/components/css/error-text/error-text.js.map +1 -0
- package/dist/components/css/fieldset/fieldset.d.ts +55 -0
- package/dist/components/css/fieldset/fieldset.d.ts.map +1 -0
- package/dist/components/css/fieldset/fieldset.js +39 -0
- package/dist/components/css/fieldset/fieldset.js.map +1 -0
- package/dist/components/css/file-upload/file-upload.d.ts +41 -0
- package/dist/components/css/file-upload/file-upload.d.ts.map +1 -0
- package/dist/components/css/file-upload/file-upload.js +32 -0
- package/dist/components/css/file-upload/file-upload.js.map +1 -0
- package/dist/components/css/heading/heading.d.ts +29 -0
- package/dist/components/css/heading/heading.d.ts.map +1 -0
- package/dist/components/css/heading/heading.js +23 -0
- package/dist/components/css/heading/heading.js.map +1 -0
- package/dist/components/css/help-text/help-text.d.ts +24 -0
- package/dist/components/css/help-text/help-text.d.ts.map +1 -0
- package/dist/components/css/help-text/help-text.js +23 -0
- package/dist/components/css/help-text/help-text.js.map +1 -0
- package/dist/components/css/input/input.d.ts +39 -0
- package/dist/components/css/input/input.d.ts.map +1 -0
- package/dist/components/css/input/input.js +44 -0
- package/dist/components/css/input/input.js.map +1 -0
- package/dist/components/css/label/label.d.ts +33 -0
- package/dist/components/css/label/label.d.ts.map +1 -0
- package/dist/components/css/label/label.js +23 -0
- package/dist/components/css/label/label.js.map +1 -0
- package/dist/components/css/link/link.d.ts +21 -0
- package/dist/components/css/link/link.d.ts.map +1 -0
- package/dist/components/css/link/link.js +14 -0
- package/dist/components/css/link/link.js.map +1 -0
- package/dist/components/css/list/list.d.ts +29 -0
- package/dist/components/css/list/list.d.ts.map +1 -0
- package/dist/components/css/list/list.js +23 -0
- package/dist/components/css/list/list.js.map +1 -0
- package/dist/components/css/pagination/pagination.d.ts +27 -0
- package/dist/components/css/pagination/pagination.d.ts.map +1 -0
- package/dist/components/css/pagination/pagination.js +25 -0
- package/dist/components/css/pagination/pagination.js.map +1 -0
- package/dist/components/css/paragraph/paragraph.d.ts +36 -0
- package/dist/components/css/paragraph/paragraph.d.ts.map +1 -0
- package/dist/components/css/paragraph/paragraph.js +26 -0
- package/dist/components/css/paragraph/paragraph.js.map +1 -0
- package/dist/components/css/radio/radio.d.ts +32 -0
- package/dist/components/css/radio/radio.d.ts.map +1 -0
- package/dist/components/css/radio/radio.js +27 -0
- package/dist/components/css/radio/radio.js.map +1 -0
- package/dist/components/css/search/search.d.ts +33 -0
- package/dist/components/css/search/search.d.ts.map +1 -0
- package/dist/components/css/search/search.js +31 -0
- package/dist/components/css/search/search.js.map +1 -0
- package/dist/components/css/select/select.d.ts +23 -0
- package/dist/components/css/select/select.d.ts.map +1 -0
- package/dist/components/css/select/select.js +18 -0
- package/dist/components/css/select/select.js.map +1 -0
- package/dist/components/css/shared.d.ts +26 -0
- package/dist/components/css/shared.d.ts.map +1 -0
- package/dist/components/css/shared.js +34 -0
- package/dist/components/css/shared.js.map +1 -0
- package/dist/components/css/skeleton/skeleton.d.ts +29 -0
- package/dist/components/css/skeleton/skeleton.d.ts.map +1 -0
- package/dist/components/css/skeleton/skeleton.js +23 -0
- package/dist/components/css/skeleton/skeleton.js.map +1 -0
- package/dist/components/css/skip-link/skip-link.d.ts +18 -0
- package/dist/components/css/skip-link/skip-link.d.ts.map +1 -0
- package/dist/components/css/skip-link/skip-link.js +16 -0
- package/dist/components/css/skip-link/skip-link.js.map +1 -0
- package/dist/components/css/spinner/spinner.d.ts +33 -0
- package/dist/components/css/spinner/spinner.d.ts.map +1 -0
- package/dist/components/css/spinner/spinner.js +25 -0
- package/dist/components/css/spinner/spinner.js.map +1 -0
- package/dist/components/css/sr-only/sr-only.d.ts +17 -0
- package/dist/components/css/sr-only/sr-only.d.ts.map +1 -0
- package/dist/components/css/sr-only/sr-only.js +14 -0
- package/dist/components/css/sr-only/sr-only.js.map +1 -0
- package/dist/components/css/switch/switch.d.ts +33 -0
- package/dist/components/css/switch/switch.d.ts.map +1 -0
- package/dist/components/css/switch/switch.js +29 -0
- package/dist/components/css/switch/switch.js.map +1 -0
- package/dist/components/css/table/table.d.ts +36 -0
- package/dist/components/css/table/table.d.ts.map +1 -0
- package/dist/components/css/table/table.js +28 -0
- package/dist/components/css/table/table.js.map +1 -0
- package/dist/components/css/tag/tag.d.ts +35 -0
- package/dist/components/css/tag/tag.d.ts.map +1 -0
- package/dist/components/css/tag/tag.js +27 -0
- package/dist/components/css/tag/tag.js.map +1 -0
- package/dist/components/css/textarea/textarea.d.ts +23 -0
- package/dist/components/css/textarea/textarea.d.ts.map +1 -0
- package/dist/components/css/textarea/textarea.js +18 -0
- package/dist/components/css/textarea/textarea.js.map +1 -0
- package/dist/components/css/toggle-group/toggle-group.d.ts +31 -0
- package/dist/components/css/toggle-group/toggle-group.d.ts.map +1 -0
- package/dist/components/css/toggle-group/toggle-group.js +29 -0
- package/dist/components/css/toggle-group/toggle-group.js.map +1 -0
- package/dist/components/css/tooltip/tooltip.d.ts +30 -0
- package/dist/components/css/tooltip/tooltip.d.ts.map +1 -0
- package/dist/components/css/tooltip/tooltip.js +28 -0
- package/dist/components/css/tooltip/tooltip.js.map +1 -0
- package/dist/components/frittstaende/calendar/fs-calendar.d.ts +52 -0
- package/dist/components/frittstaende/calendar/fs-calendar.d.ts.map +1 -0
- package/dist/components/frittstaende/calendar/fs-calendar.js +462 -0
- package/dist/components/frittstaende/calendar/fs-calendar.js.map +1 -0
- package/dist/components/frittstaende/date-field/fs-date-field.d.ts +110 -0
- package/dist/components/frittstaende/date-field/fs-date-field.d.ts.map +1 -0
- package/dist/components/frittstaende/date-field/fs-date-field.js +264 -0
- package/dist/components/frittstaende/date-field/fs-date-field.js.map +1 -0
- package/dist/components/frittstaende/suggestion/fs-suggestion.d.ts +133 -0
- package/dist/components/frittstaende/suggestion/fs-suggestion.d.ts.map +1 -0
- package/dist/components/frittstaende/suggestion/fs-suggestion.js +280 -0
- package/dist/components/frittstaende/suggestion/fs-suggestion.js.map +1 -0
- package/dist/components/frittstaende/toast/fs-toast.d.ts +67 -0
- package/dist/components/frittstaende/toast/fs-toast.d.ts.map +1 -0
- package/dist/components/frittstaende/toast/fs-toast.js +108 -0
- package/dist/components/frittstaende/toast/fs-toast.js.map +1 -0
- package/dist/components/ramme/error-summary/fs-error-summary.d.ts +70 -0
- package/dist/components/ramme/error-summary/fs-error-summary.d.ts.map +1 -0
- package/dist/components/ramme/error-summary/fs-error-summary.js +155 -0
- package/dist/components/ramme/error-summary/fs-error-summary.js.map +1 -0
- package/dist/components/ramme/field/field-core.d.ts +70 -0
- package/dist/components/ramme/field/field-core.d.ts.map +1 -0
- package/dist/components/ramme/field/field-core.js +60 -0
- package/dist/components/ramme/field/field-core.js.map +1 -0
- package/dist/components/ramme/field/fs-field.d.ts +49 -0
- package/dist/components/ramme/field/fs-field.d.ts.map +1 -0
- package/dist/components/ramme/field/fs-field.js +118 -0
- package/dist/components/ramme/field/fs-field.js.map +1 -0
- package/dist/components/ramme/popover/fs-popover.d.ts +68 -0
- package/dist/components/ramme/popover/fs-popover.d.ts.map +1 -0
- package/dist/components/ramme/popover/fs-popover.js +167 -0
- package/dist/components/ramme/popover/fs-popover.js.map +1 -0
- package/dist/components/ramme/tabs/fs-tabs.d.ts +61 -0
- package/dist/components/ramme/tabs/fs-tabs.d.ts.map +1 -0
- package/dist/components/ramme/tabs/fs-tabs.js +156 -0
- package/dist/components/ramme/tabs/fs-tabs.js.map +1 -0
- package/dist/dom.d.ts +33 -0
- package/dist/dom.d.ts.map +1 -0
- package/dist/dom.js +77 -0
- package/dist/dom.js.map +1 -0
- package/dist/fs.d.ts +199 -0
- package/dist/fs.d.ts.map +1 -0
- package/dist/fs.js +128 -0
- package/dist/fs.js.map +1 -0
- package/dist/index.d.ts +84 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/jsx/react.d.ts +127 -0
- package/dist/jsx/react.d.ts.map +1 -0
- package/dist/jsx/react.js +2 -0
- package/dist/jsx/react.js.map +1 -0
- package/dist/react.d.ts +207 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +109 -0
- package/dist/react.js.map +1 -0
- package/dist/tailwind/preset.d.ts +120 -0
- package/dist/tailwind/preset.d.ts.map +1 -0
- package/dist/tailwind/preset.js +107 -0
- package/dist/tailwind/preset.js.map +1 -0
- package/dist/takeover.d.ts +79 -0
- package/dist/takeover.d.ts.map +1 -0
- package/dist/takeover.js +119 -0
- package/dist/takeover.js.map +1 -0
- package/dist/tokens/color.d.ts +85 -0
- package/dist/tokens/color.d.ts.map +1 -0
- package/dist/tokens/color.js +212 -0
- package/dist/tokens/color.js.map +1 -0
- package/dist/tokens/theme.d.ts +52 -0
- package/dist/tokens/theme.d.ts.map +1 -0
- package/dist/tokens/theme.js +197 -0
- package/dist/tokens/theme.js.map +1 -0
- package/dist/tokens/tokens.d.ts +210 -0
- package/dist/tokens/tokens.d.ts.map +1 -0
- package/dist/tokens/tokens.js +238 -0
- package/dist/tokens/tokens.js.map +1 -0
- package/package.json +334 -0
- package/src/components/css/accordion/accordion.css +74 -0
- package/src/components/css/accordion/accordion.ts +50 -0
- package/src/components/css/alert/alert.css +50 -0
- package/src/components/css/alert/alert.ts +48 -0
- package/src/components/css/avatar/avatar.css +64 -0
- package/src/components/css/avatar/avatar.ts +57 -0
- package/src/components/css/badge/badge.css +42 -0
- package/src/components/css/badge/badge.ts +43 -0
- package/src/components/css/breadcrumbs/breadcrumbs.css +50 -0
- package/src/components/css/breadcrumbs/breadcrumbs.ts +29 -0
- package/src/components/css/button/button.css +101 -0
- package/src/components/css/button/button.ts +44 -0
- package/src/components/css/card/card.css +48 -0
- package/src/components/css/card/card.ts +50 -0
- package/src/components/css/checkbox/checkbox.css +96 -0
- package/src/components/css/checkbox/checkbox.ts +50 -0
- package/src/components/css/dialog/dialog.css +50 -0
- package/src/components/css/dialog/dialog.ts +36 -0
- package/src/components/css/divider/divider.css +18 -0
- package/src/components/css/divider/divider.ts +41 -0
- package/src/components/css/error-text/error-text.css +21 -0
- package/src/components/css/error-text/error-text.ts +37 -0
- package/src/components/css/fieldset/fieldset.css +57 -0
- package/src/components/css/fieldset/fieldset.ts +87 -0
- package/src/components/css/file-upload/file-upload.css +92 -0
- package/src/components/css/file-upload/file-upload.ts +65 -0
- package/src/components/css/heading/heading.css +33 -0
- package/src/components/css/heading/heading.ts +42 -0
- package/src/components/css/help-text/help-text.css +24 -0
- package/src/components/css/help-text/help-text.ts +42 -0
- package/src/components/css/input/input.css +131 -0
- package/src/components/css/input/input.ts +76 -0
- package/src/components/css/label/label.css +34 -0
- package/src/components/css/label/label.ts +51 -0
- package/src/components/css/link/link.css +36 -0
- package/src/components/css/link/link.ts +29 -0
- package/src/components/css/list/list.css +40 -0
- package/src/components/css/list/list.ts +42 -0
- package/src/components/css/pagination/pagination.css +77 -0
- package/src/components/css/pagination/pagination.ts +33 -0
- package/src/components/css/paragraph/paragraph.css +31 -0
- package/src/components/css/paragraph/paragraph.ts +53 -0
- package/src/components/css/radio/radio.css +76 -0
- package/src/components/css/radio/radio.ts +50 -0
- package/src/components/css/search/search.css +49 -0
- package/src/components/css/search/search.ts +52 -0
- package/src/components/css/select/select.css +95 -0
- package/src/components/css/select/select.ts +40 -0
- package/src/components/css/shared.ts +40 -0
- package/src/components/css/skeleton/skeleton.css +49 -0
- package/src/components/css/skeleton/skeleton.ts +43 -0
- package/src/components/css/skip-link/skip-link.css +36 -0
- package/src/components/css/skip-link/skip-link.ts +22 -0
- package/src/components/css/spinner/spinner.css +48 -0
- package/src/components/css/spinner/spinner.ts +48 -0
- package/src/components/css/sr-only/sr-only.css +16 -0
- package/src/components/css/sr-only/sr-only.ts +18 -0
- package/src/components/css/switch/switch.css +101 -0
- package/src/components/css/switch/switch.ts +46 -0
- package/src/components/css/table/table.css +63 -0
- package/src/components/css/table/table.ts +50 -0
- package/src/components/css/tag/tag.css +58 -0
- package/src/components/css/tag/tag.ts +49 -0
- package/src/components/css/textarea/textarea.css +71 -0
- package/src/components/css/textarea/textarea.ts +40 -0
- package/src/components/css/toggle-group/toggle-group.css +82 -0
- package/src/components/css/toggle-group/toggle-group.ts +37 -0
- package/src/components/css/tooltip/tooltip.css +47 -0
- package/src/components/css/tooltip/tooltip.ts +36 -0
- package/src/components/frittstaende/calendar/fs-calendar.ts +525 -0
- package/src/components/frittstaende/date-field/date-field.css +54 -0
- package/src/components/frittstaende/date-field/fs-date-field.ts +309 -0
- package/src/components/frittstaende/suggestion/fs-suggestion.ts +333 -0
- package/src/components/frittstaende/suggestion/suggestion.css +63 -0
- package/src/components/frittstaende/toast/fs-toast.ts +146 -0
- package/src/components/frittstaende/toast/toast.css +71 -0
- package/src/components/ramme/error-summary/error-summary.css +45 -0
- package/src/components/ramme/error-summary/fs-error-summary.ts +197 -0
- package/src/components/ramme/field/field-core.ts +132 -0
- package/src/components/ramme/field/field.css +6 -0
- package/src/components/ramme/field/fs-field.ts +154 -0
- package/src/components/ramme/popover/fs-popover.ts +205 -0
- package/src/components/ramme/popover/popover.css +34 -0
- package/src/components/ramme/tabs/fs-tabs.ts +182 -0
- package/src/components/ramme/tabs/tabs.css +68 -0
- package/src/tailwind/tailwind.css +134 -0
- package/src/tokens/color.ts +267 -0
- package/src/tokens/theme.ts +350 -0
- package/src/tokens/tokens.css +214 -0
- package/src/tokens/tokens.ts +293 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Endringer i @fristil/designsystem
|
|
2
|
+
|
|
3
|
+
Versjonsnumrene følger [semantisk versjonering](https://semver.org/lang/no/).
|
|
4
|
+
Det offentlige API-et er større enn funksjonene pakken eksporterer, så disse
|
|
5
|
+
regnes som brytende endringer og krever et nytt hovedtall:
|
|
6
|
+
|
|
7
|
+
- et klassenavn, et `data-*`-attributt eller en lovlig verdi som forsvinner
|
|
8
|
+
eller endrer betydning,
|
|
9
|
+
- et `part`-navn i en komponent med shadow DOM,
|
|
10
|
+
- et tokennavn eller en `--fs-*`-variabel,
|
|
11
|
+
- en funksjon eller en type i `fs`,
|
|
12
|
+
- en oppføring i `exports` i `package.json`.
|
|
13
|
+
|
|
14
|
+
Nye komponenter, nye valgfrie attributter og rettelser som ikke endrer markup
|
|
15
|
+
kommer i et nytt undertall.
|
|
16
|
+
|
|
17
|
+
## Ikke utgitt
|
|
18
|
+
|
|
19
|
+
## 0.2.0 (2026-09-21)
|
|
20
|
+
|
|
21
|
+
### Lagt til
|
|
22
|
+
|
|
23
|
+
- `fristil overta <komponent>` kopierer kildekoden til én komponent inn i
|
|
24
|
+
prosjektet ditt, og skriver om henvisningene ut av mappa. Til bruk når
|
|
25
|
+
tilpasning gjennom CSS ikke strekker til. Kopien er din, og oppdateringer av
|
|
26
|
+
pakken rører den ikke.
|
|
27
|
+
|
|
28
|
+
- `fristil --hjelp` (og `--help`, `-h`, `help`) skriver ut hva kommandoen kan.
|
|
29
|
+
Uten argumenter gjorde den før et forsøk på å lage et tema, og klaget over
|
|
30
|
+
manglende farger uten å nevne at `overta` fantes.
|
|
31
|
+
|
|
32
|
+
- Pakken kan publiseres på npm. Den har lisens (MIT), en README som blir
|
|
33
|
+
forsiden på npm, og feltene `repository`, `homepage`, `bugs` og `keywords`.
|
|
34
|
+
`publishConfig` sier `public`, siden en pakke med navnerom ellers blir
|
|
35
|
+
privat, og `prepublishOnly` bygger, så en publisering fra et rent klon ikke
|
|
36
|
+
kan komme ut uten `dist`.
|
|
37
|
+
|
|
38
|
+
- `bun run sjekk:pakke` kjører [publint](https://publint.dev) mot pakken, som
|
|
39
|
+
en del av bygget. Den leser `exports` slik nettlesere, buntere og TypeScript
|
|
40
|
+
faktisk gjør det.
|
|
41
|
+
|
|
42
|
+
### Rettet
|
|
43
|
+
|
|
44
|
+
- `types` står først i hver oppføring i `exports`. Betingelsene leses i
|
|
45
|
+
rekkefølge, og `import` sto først, så TypeScript fant typene bare fordi
|
|
46
|
+
`.d.ts`-fila lå ved siden av `.js`-fila. Stiene er de samme som før.
|
|
47
|
+
|
|
48
|
+
- Kommandolinja svarer med en forklaring i stedet for et stakkspor fra Node
|
|
49
|
+
når kommandoen er ukjent, eller når temafila mangler eller ikke er JSON.
|
|
50
|
+
|
|
51
|
+
- Lista over valgte filer i `file-upload` brekker nå til flere linjer på smal
|
|
52
|
+
skjerm. Raden var bredere enn en telefon når filnavnet var langt, og knappen
|
|
53
|
+
«Fjern <filnavn>» ble klippet av.
|
|
54
|
+
- `<fs-error-summary>` oppdaterer overskriften når `heading` endrer seg. Den
|
|
55
|
+
ble bare skrevet første gang, så en oppsummering som talte ned fra to feil
|
|
56
|
+
til én ble stående på to.
|
|
57
|
+
|
|
58
|
+
## 0.1.0 (2026-09-21)
|
|
59
|
+
|
|
60
|
+
Første versjon.
|
|
61
|
+
|
|
62
|
+
### Lagt til
|
|
63
|
+
|
|
64
|
+
- **Tokens** for farge, størrelse, typografi, radius og skygge, med semantiske
|
|
65
|
+
navn (`--semantic-*`) over en råskala. Lyst og mørkt tema, og en egen fil for
|
|
66
|
+
Tailwind 4.
|
|
67
|
+
- **34 CSS-komponenter** som bare trenger en klasse og `data-*`-attributter:
|
|
68
|
+
accordion, alert, avatar, badge, breadcrumbs, button, card, checkbox, dialog,
|
|
69
|
+
divider, error-text, fieldset, file-upload, heading, help-text, input, label,
|
|
70
|
+
link, list, pagination, paragraph, radio, search, select, skeleton,
|
|
71
|
+
skip-link, spinner, sr-only, switch, table, tag, textarea, toggle-group og
|
|
72
|
+
tooltip.
|
|
73
|
+
- **Fire rammekomponenter** som kobler sammen markupen du selv skriver:
|
|
74
|
+
`<fs-field>`, `<fs-error-summary>`, `<fs-popover>` og `<fs-tabs>`.
|
|
75
|
+
- **Fire frittstående komponenter** som eier markupen og interaksjonen:
|
|
76
|
+
`<fs-calendar>`, `<fs-date-field>`, `<fs-suggestion>` og `<fs-toast>`.
|
|
77
|
+
- **`fs`-API-et**: én funksjon per komponent som tar et valgobjekt og gir
|
|
78
|
+
attributter tilbake, med lovlige verdier og vakt hengt på funksjonen. En egen
|
|
79
|
+
inngang for React (`@fristil/designsystem/react`) med `className` og
|
|
80
|
+
`htmlFor`, og JSX-deklarasjoner for de egendefinerte elementene.
|
|
81
|
+
- **`fristil`-kommandoen** som bygger et tema fra egne farger, sjekker
|
|
82
|
+
kontrasten mot WCAG og skriver ut CSS-en.
|
|
83
|
+
- **Tilpasning utenfra**: all CSS ligger i `@layer fristil`, form og størrelse
|
|
84
|
+
leses fra `--fs-*`-variabler med tokenverdien som reserve, og komponenten med
|
|
85
|
+
shadow DOM eksponerer delene sine med `::part()`.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 MarkusAugust
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# @fristil/designsystem
|
|
2
|
+
|
|
3
|
+
Rammeverksuavhengig designsystem for web: tokens, CSS-komponenter og web components. Alt er bygd på ting nettleseren allerede forstår, så de samme komponentene virker i ren HTML, React, Astro og [Datastar](https://data-star.dev).
|
|
4
|
+
|
|
5
|
+
> **Dette er en proof of concept.** Ikke et ferdig produkt, ikke aktivt vedlikeholdt, og det kan bli lagt på is. Bruk det til å prøve ut ideen, ikke til noe du må stole på.
|
|
6
|
+
|
|
7
|
+
Hele dokumentasjonen, med komponentsider, tokens, mønstre og eksempler for fire miljøer, ligger på **[fristil.netlify.app](https://fristil.netlify.app/)**.
|
|
8
|
+
|
|
9
|
+
## Installasjon
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install @fristil/designsystem
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Pakken har ingen påkrevde avhengigheter. `lit` er valgfri, og trengs bare til komponentene som er web components:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install lit
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## CSS-komponenter
|
|
22
|
+
|
|
23
|
+
En klasse og noen `data-*`-attributter, ingen JavaScript. `tokens.css` definerer variablene alt annet bygger på, så den lastes først. Importer bare stilarkene du bruker; det finnes ingen samlet CSS-fil.
|
|
24
|
+
|
|
25
|
+
```js
|
|
26
|
+
import "@fristil/designsystem/tokens.css"
|
|
27
|
+
import "@fristil/designsystem/button.css"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
```html
|
|
31
|
+
<button class="fs-button">Send søknad</button>
|
|
32
|
+
<button class="fs-button" data-variant="secondary">Lagre utkast</button>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Attributtene som funksjoner
|
|
36
|
+
|
|
37
|
+
`fs` gir de samme klassene og attributtene med fullføring og typesjekk i editoren. Hver komponent tar ett valgobjekt og gir attributtene ut:
|
|
38
|
+
|
|
39
|
+
```js
|
|
40
|
+
import { fs } from "@fristil/designsystem"
|
|
41
|
+
|
|
42
|
+
fs.button({ variant: "secondary" })
|
|
43
|
+
// { class: "fs-button", "data-variant": "secondary" }
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
I React importerer du fra `@fristil/designsystem/react`, som gir `className` og `htmlFor` i stedet for HTML-navnene:
|
|
47
|
+
|
|
48
|
+
```jsx
|
|
49
|
+
import { fs } from "@fristil/designsystem/react"
|
|
50
|
+
|
|
51
|
+
<button {...fs.button({ variant: "secondary" })}>Lagre utkast</button>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Web components
|
|
55
|
+
|
|
56
|
+
Ingenting registreres ved import alene. Du kaller `defineFs*` selv, så du bestemmer når elementet finnes og hva det skal hete:
|
|
57
|
+
|
|
58
|
+
```js
|
|
59
|
+
import { defineFsDateField } from "@fristil/designsystem/date-field"
|
|
60
|
+
import "@fristil/designsystem/tokens.css"
|
|
61
|
+
import "@fristil/designsystem/date-field.css"
|
|
62
|
+
|
|
63
|
+
defineFsDateField()
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```html
|
|
67
|
+
<fs-date-field label="Fødselsdato" value="2026-05-31"></fs-date-field>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Eget fargetema
|
|
71
|
+
|
|
72
|
+
Kommandolinja lager et fullt tema av merkefargene dine, med kontrastkravene regnet ut i OKLCH:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npx @fristil/designsystem tema --interaktiv=#7c3aed --fare=#b3261e \
|
|
76
|
+
--suksess=#2b6940 --advarsel=#8a5a00 --noytral=#1a1a1a --ut=tema.css
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Strekker ikke tilpasning gjennom CSS til, kopierer `overta` kildekoden til én komponent inn i prosjektet ditt, med henvisningene skrevet om:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npx @fristil/designsystem overta button --ut=src/ui
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
`npx @fristil/designsystem --hjelp` viser resten.
|
|
86
|
+
|
|
87
|
+
## Tilpasning
|
|
88
|
+
|
|
89
|
+
All CSS ligger i `@layer fristil`, så dine egne regler vinner uten `!important`. Form og størrelse leses fra `--fs-*`-variabler med tokenverdien som reserve:
|
|
90
|
+
|
|
91
|
+
```css
|
|
92
|
+
.fs-button {
|
|
93
|
+
--fs-button-padding: var(--size-3) var(--size-6);
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Tailwind er valgfritt. Temaet er en ren CSS-fil, `@fristil/designsystem/tailwind.css`, så pakken har ingen avhengighet til Tailwind og kan ikke komme i konflikt med versjonen din.
|
|
98
|
+
|
|
99
|
+
## Lisens
|
|
100
|
+
|
|
101
|
+
MIT
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Kommandolinja til Fristil, med to kommandoer.
|
|
4
|
+
*
|
|
5
|
+
* `fristil overta <komponent>` kopierer kildekoden til én komponent inn i
|
|
6
|
+
* prosjektet ditt, når tilpasning gjennom CSS ikke strekker til. Regnestykket
|
|
7
|
+
* ligger i `takeover.ts`.
|
|
8
|
+
*
|
|
9
|
+
* `fristil tema` lager et fargetema av merkefargene dine.
|
|
10
|
+
*
|
|
11
|
+
* ```bash
|
|
12
|
+
* npx @fristil/designsystem tema --interaktiv=#7c3aed --fare=#b3261e \
|
|
13
|
+
* --suksess=#2b6940 --advarsel=#8a5a00 --noytral=#1a1a1a --ut=tema.css
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Eller med en fil:
|
|
17
|
+
*
|
|
18
|
+
* ```bash
|
|
19
|
+
* npx @fristil/designsystem tema fristil.tema.json --ut=tema.css
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* Dette er den eneste fila i pakken som kjører utenfor nettleseren, og derfor
|
|
23
|
+
* den eneste som viser til Node-typene.
|
|
24
|
+
*
|
|
25
|
+
* Generatoren bygger skalaene, setter de semantiske verdiene og flytter
|
|
26
|
+
* lysheten på dem som ikke holder kontrastkravet. Hver justering skrives ut,
|
|
27
|
+
* så du ser hva som ble endret. Holder et par likevel ikke, avsluttes
|
|
28
|
+
* kjøringen med feil framfor å levere et tema som ser riktig ut.
|
|
29
|
+
*/
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
/**
|
|
4
|
+
* Kommandolinja til Fristil, med to kommandoer.
|
|
5
|
+
*
|
|
6
|
+
* `fristil overta <komponent>` kopierer kildekoden til én komponent inn i
|
|
7
|
+
* prosjektet ditt, når tilpasning gjennom CSS ikke strekker til. Regnestykket
|
|
8
|
+
* ligger i `takeover.ts`.
|
|
9
|
+
*
|
|
10
|
+
* `fristil tema` lager et fargetema av merkefargene dine.
|
|
11
|
+
*
|
|
12
|
+
* ```bash
|
|
13
|
+
* npx @fristil/designsystem tema --interaktiv=#7c3aed --fare=#b3261e \
|
|
14
|
+
* --suksess=#2b6940 --advarsel=#8a5a00 --noytral=#1a1a1a --ut=tema.css
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Eller med en fil:
|
|
18
|
+
*
|
|
19
|
+
* ```bash
|
|
20
|
+
* npx @fristil/designsystem tema fristil.tema.json --ut=tema.css
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* Dette er den eneste fila i pakken som kjører utenfor nettleseren, og derfor
|
|
24
|
+
* den eneste som viser til Node-typene.
|
|
25
|
+
*
|
|
26
|
+
* Generatoren bygger skalaene, setter de semantiske verdiene og flytter
|
|
27
|
+
* lysheten på dem som ikke holder kontrastkravet. Hver justering skrives ut,
|
|
28
|
+
* så du ser hva som ble endret. Holder et par likevel ikke, avsluttes
|
|
29
|
+
* kjøringen med feil framfor å levere et tema som ser riktig ut.
|
|
30
|
+
*/
|
|
31
|
+
import { mkdir, readdir, readFile, stat, writeFile } from "node:fs/promises";
|
|
32
|
+
import { join } from "node:path";
|
|
33
|
+
import { fileURLToPath } from "node:url";
|
|
34
|
+
import { buildEntryPoints, planTakeover, } from "./takeover.js";
|
|
35
|
+
import { buildTheme } from "./tokens/theme.js";
|
|
36
|
+
const NØKLER = {
|
|
37
|
+
interaktiv: "interactive",
|
|
38
|
+
fare: "danger",
|
|
39
|
+
suksess: "success",
|
|
40
|
+
advarsel: "warning",
|
|
41
|
+
noytral: "neutral",
|
|
42
|
+
besokt: "visited",
|
|
43
|
+
};
|
|
44
|
+
function lesArgumenter(argumenter) {
|
|
45
|
+
const flagg = {};
|
|
46
|
+
const filer = [];
|
|
47
|
+
for (const del of argumenter) {
|
|
48
|
+
const treff = /^--([a-zæøå]+)=(.+)$/.exec(del);
|
|
49
|
+
if (treff)
|
|
50
|
+
flagg[treff[1]] = treff[2];
|
|
51
|
+
else
|
|
52
|
+
filer.push(del);
|
|
53
|
+
}
|
|
54
|
+
return { flagg, filer };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Pakkas egen rot, enten CLI-en kjøres fra `dist` eller fra kilden.
|
|
58
|
+
*
|
|
59
|
+
* `fileURLToPath`, ikke `pathname`: på Windows gir `pathname` en sti som
|
|
60
|
+
* begynner med skråstrek foran stasjonsbokstaven, og mellomrom i stien står
|
|
61
|
+
* fortsatt som `%20`. Da finner ikke kommandoen sine egne filer.
|
|
62
|
+
*/
|
|
63
|
+
const PAKKEROT = fileURLToPath(new URL("../", import.meta.url));
|
|
64
|
+
/** Mappene komponentene ligger i, med kategorien som navn. */
|
|
65
|
+
const KATEGORIER = ["css", "ramme", "frittstaende"];
|
|
66
|
+
async function finnKomponenter() {
|
|
67
|
+
const komponenter = new Map();
|
|
68
|
+
for (const kategori of KATEGORIER) {
|
|
69
|
+
const mappe = `src/components/${kategori}`;
|
|
70
|
+
let innhold;
|
|
71
|
+
try {
|
|
72
|
+
innhold = await readdir(join(PAKKEROT, mappe));
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
for (const navn of innhold) {
|
|
78
|
+
const sti = `${mappe}/${navn}`;
|
|
79
|
+
if ((await stat(join(PAKKEROT, sti))).isDirectory()) {
|
|
80
|
+
komponenter.set(navn, sti);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return komponenter;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Kopierer kildekoden til én komponent inn i prosjektet.
|
|
88
|
+
*
|
|
89
|
+
* Kopien er din fra det øyeblikket den er skrevet. Kommandoen sier derfor
|
|
90
|
+
* fra om det, og skriver ikke over noe som allerede ligger der uten at du ber
|
|
91
|
+
* om det.
|
|
92
|
+
*/
|
|
93
|
+
async function overta(argumenter) {
|
|
94
|
+
const { flagg, filer } = lesArgumenter(argumenter);
|
|
95
|
+
const komponenter = await finnKomponenter();
|
|
96
|
+
const navn = filer[0];
|
|
97
|
+
if (!navn || !komponenter.has(navn)) {
|
|
98
|
+
console.error((navn ? `Fant ingen komponent som heter «${navn}».\n\n` : "") +
|
|
99
|
+
`Bruk: fristil overta <komponent> [--ut=<mappe>]\n` +
|
|
100
|
+
`Hele oversikten: fristil --hjelp\n\n` +
|
|
101
|
+
`Komponenter:\n ${[...komponenter.keys()].sort().join(", ")}\n`);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
const kilde = komponenter.get(navn);
|
|
105
|
+
const utmappe = join(flagg.ut ?? "src/fristil", navn);
|
|
106
|
+
const finnes = await stat(utmappe).then(() => true, () => false);
|
|
107
|
+
if (finnes && flagg.overskriv !== "ja") {
|
|
108
|
+
console.error(`${utmappe} finnes allerede.\n\n` +
|
|
109
|
+
"Har du endret kopien, blir endringene borte. Kjør med " +
|
|
110
|
+
"--overskriv=ja hvis den skal erstattes.\n");
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
const pakke = JSON.parse(await readFile(join(PAKKEROT, "package.json"), "utf8"));
|
|
114
|
+
const filnavn = (await readdir(join(PAKKEROT, kilde))).filter(
|
|
115
|
+
// Testene hører til pakkens eget oppsett, og sier ingenting her.
|
|
116
|
+
(fil) => !fil.includes(".test."));
|
|
117
|
+
const kildefiler = await Promise.all(filnavn.map(async (fil) => ({
|
|
118
|
+
path: `${kilde}/${fil}`,
|
|
119
|
+
content: await readFile(join(PAKKEROT, kilde, fil), "utf8"),
|
|
120
|
+
})));
|
|
121
|
+
const plan = planTakeover(kildefiler, buildEntryPoints(pakke.name, pakke.exports));
|
|
122
|
+
await mkdir(utmappe, { recursive: true });
|
|
123
|
+
for (const fil of plan.files) {
|
|
124
|
+
await writeFile(join(utmappe, fil.name), fil.content);
|
|
125
|
+
}
|
|
126
|
+
const linjer = [
|
|
127
|
+
`Kopierte ${navn} til ${utmappe}/`,
|
|
128
|
+
...plan.files.map((fil) => ` ${fil.name}`),
|
|
129
|
+
"",
|
|
130
|
+
`Komponenten er nå din. Oppdateringer av ${pakke.name} rører den ikke.`,
|
|
131
|
+
];
|
|
132
|
+
const omskrevet = plan.files.flatMap((fil) => fil.rewrites);
|
|
133
|
+
if (omskrevet.length > 0) {
|
|
134
|
+
linjer.push("", "Henvisninger ut av mappa peker nå på pakken:", ...omskrevet.map((endring) => ` ${endring.from} → ${endring.to}`));
|
|
135
|
+
}
|
|
136
|
+
if (plan.replacedEntries.length > 0) {
|
|
137
|
+
linjer.push("", "Bytt ut disse importene med kopien:", ...plan.replacedEntries.map((entry) => ` ${entry}`), "Klassenavnene er de samme. Blir importene stående ved siden av", "kopien, finnes komponenten to ganger, og hvilken som vinner avgjøres", "av rekkefølgen.");
|
|
138
|
+
}
|
|
139
|
+
if (plan.dependencies.length > 0) {
|
|
140
|
+
linjer.push("", `Kopien trenger ${plan.dependencies.join(", ")} i prosjektet ditt.`);
|
|
141
|
+
}
|
|
142
|
+
console.error(`${linjer.join("\n")}\n`);
|
|
143
|
+
}
|
|
144
|
+
/** Det kommandoen kan, skrevet ut på én skjerm. */
|
|
145
|
+
const HJELP = `fristil <kommando>
|
|
146
|
+
|
|
147
|
+
overta <komponent> Kopierer kildekoden til én komponent inn i prosjektet
|
|
148
|
+
--ut=<mappe> Hvor kopien skal ligge. Standard: src/fristil
|
|
149
|
+
--overskriv=ja Skriv over en kopi som finnes fra før
|
|
150
|
+
|
|
151
|
+
tema Lager et fargetema av merkefargene dine
|
|
152
|
+
--interaktiv=<farge> Lenker, knapper og fokus (påkrevd)
|
|
153
|
+
--fare=<farge> Feil og sletting (påkrevd)
|
|
154
|
+
--suksess=<farge> Bekreftelser (påkrevd)
|
|
155
|
+
--advarsel=<farge> Advarsler (påkrevd)
|
|
156
|
+
--noytral=<farge> Tekst og flater
|
|
157
|
+
--besokt=<farge> Besøkte lenker
|
|
158
|
+
--ut=<fil> Skriv til fil i stedet for til utdata
|
|
159
|
+
|
|
160
|
+
Fargene skrives heksadesimalt, for eksempel #7c3aed. Temaet kan også leses
|
|
161
|
+
fra en JSON-fil: fristil tema fristil.tema.json
|
|
162
|
+
|
|
163
|
+
Eksempler:
|
|
164
|
+
npx @fristil/designsystem overta button --ut=src/ui
|
|
165
|
+
npx @fristil/designsystem tema --interaktiv=#7c3aed --fare=#b3261e \
|
|
166
|
+
--suksess=#2b6940 --advarsel=#8a5a00 --ut=tema.css
|
|
167
|
+
`;
|
|
168
|
+
const HJELPEFLAGG = new Set(["--help", "-h", "help", "hjelp", "--hjelp"]);
|
|
169
|
+
const KOMMANDOER = new Set(["overta", "tema"]);
|
|
170
|
+
const argumenter = process.argv.slice(2);
|
|
171
|
+
// Uten argumenter, eller når noen ber om hjelp, skal kommandoen fortelle hva
|
|
172
|
+
// den kan. Før sto den rett inn i temakommandoen og klaget over manglende
|
|
173
|
+
// farger, uten å nevne at «overta» fantes.
|
|
174
|
+
if (argumenter.length === 0 || HJELPEFLAGG.has(argumenter[0])) {
|
|
175
|
+
console.log(HJELP);
|
|
176
|
+
process.exit(0);
|
|
177
|
+
}
|
|
178
|
+
// En ukjent kommando ble lest som et filnavn, og ga et stakkspor fra Node.
|
|
179
|
+
if (!KOMMANDOER.has(argumenter[0]) && !argumenter[0].startsWith("--")) {
|
|
180
|
+
console.error(`Ukjent kommando «${argumenter[0]}».\n\n${HJELP}`);
|
|
181
|
+
process.exit(1);
|
|
182
|
+
}
|
|
183
|
+
if (argumenter[0] === "overta") {
|
|
184
|
+
await overta(argumenter.slice(1));
|
|
185
|
+
process.exit(0);
|
|
186
|
+
}
|
|
187
|
+
// `tema` kan stå først, siden kommandoen kjøres som
|
|
188
|
+
// `npx @fristil/designsystem tema`.
|
|
189
|
+
const { flagg, filer } = lesArgumenter(argumenter[0] === "tema" ? argumenter.slice(1) : argumenter);
|
|
190
|
+
async function lesTemafil(sti) {
|
|
191
|
+
let innhold;
|
|
192
|
+
try {
|
|
193
|
+
innhold = await readFile(sti, "utf8");
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
console.error(`Fant ikke fila «${sti}».\n\n` +
|
|
197
|
+
"Oppgi en JSON-fil med fargene, eller sett dem som flagg. " +
|
|
198
|
+
"Se `fristil --hjelp`.\n");
|
|
199
|
+
process.exit(1);
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
return JSON.parse(innhold);
|
|
203
|
+
}
|
|
204
|
+
catch (grunn) {
|
|
205
|
+
console.error(`«${sti}» er ikke gyldig JSON: ${grunn instanceof Error ? grunn.message : String(grunn)}\n`);
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
const fraFil = filer[0] ? await lesTemafil(filer[0]) : {};
|
|
210
|
+
const input = {};
|
|
211
|
+
for (const [norsk, engelsk] of Object.entries(NØKLER)) {
|
|
212
|
+
const verdi = flagg[norsk] ?? fraFil[norsk] ?? fraFil[engelsk];
|
|
213
|
+
if (verdi)
|
|
214
|
+
input[engelsk] = verdi;
|
|
215
|
+
}
|
|
216
|
+
const påkrevd = [
|
|
217
|
+
"interactive",
|
|
218
|
+
"danger",
|
|
219
|
+
"success",
|
|
220
|
+
"warning",
|
|
221
|
+
];
|
|
222
|
+
const mangler = påkrevd.filter((navn) => !input[navn]);
|
|
223
|
+
if (mangler.length > 0) {
|
|
224
|
+
const norske = mangler.map((navn) => Object.entries(NØKLER).find(([, engelsk]) => engelsk === navn)?.[0] ??
|
|
225
|
+
navn);
|
|
226
|
+
console.error(`Mangler farger: ${norske.join(", ")}\n\n` +
|
|
227
|
+
"Eksempel:\n npx @fristil/designsystem tema --interaktiv=#7c3aed" +
|
|
228
|
+
" --fare=#b3261e --suksess=#2b6940 --advarsel=#8a5a00\n\n" +
|
|
229
|
+
"Hele oversikten: fristil --hjelp\n");
|
|
230
|
+
process.exit(1);
|
|
231
|
+
}
|
|
232
|
+
let tema;
|
|
233
|
+
try {
|
|
234
|
+
tema = buildTheme(input);
|
|
235
|
+
}
|
|
236
|
+
catch (grunn) {
|
|
237
|
+
// Som regel en farge som ikke er en farge. Et stakkspor sier ingenting om
|
|
238
|
+
// hva brukeren skrev feil.
|
|
239
|
+
console.error(`\n${grunn instanceof Error ? grunn.message : String(grunn)}\n\n` +
|
|
240
|
+
"Fargene skrives som heksadesimale verdier, for eksempel #7c3aed.\n");
|
|
241
|
+
process.exit(1);
|
|
242
|
+
}
|
|
243
|
+
for (const justering of tema.adjustments) {
|
|
244
|
+
console.error(` justert ${justering.token} i ${justering.theme} tema: ` +
|
|
245
|
+
`${justering.before.toFixed(2)}:1 ble ${justering.after.toFixed(2)}:1`);
|
|
246
|
+
}
|
|
247
|
+
if (tema.problems.length > 0) {
|
|
248
|
+
console.error(`\nTemaet holder ikke kontrastkravet:\n\n${tema.problems
|
|
249
|
+
.map((linje) => ` ${linje}`)
|
|
250
|
+
.join("\n")}\n\nVelg en mørkere eller lysere merkefarge.\n`);
|
|
251
|
+
process.exit(1);
|
|
252
|
+
}
|
|
253
|
+
const ut = flagg.ut;
|
|
254
|
+
if (ut) {
|
|
255
|
+
await writeFile(ut, tema.css);
|
|
256
|
+
console.error(`\nSkrev ${ut}. ${tema.adjustments.length} verdier ble justert for å holde kontrastkravet.`);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
console.log(tema.css);
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export declare const ACCORDION_CLASS: "fs-accordion";
|
|
2
|
+
/** Innholdet som vises når panelet er åpent. */
|
|
3
|
+
export declare const ACCORDION_CONTENT_CLASS: "fs-accordion__content";
|
|
4
|
+
export declare const accordionVariants: readonly ["default", "plain"];
|
|
5
|
+
export type AccordionVariant = (typeof accordionVariants)[number];
|
|
6
|
+
export type NonDefaultAccordionVariant = Exclude<AccordionVariant, "default">;
|
|
7
|
+
export type AccordionOptions = {
|
|
8
|
+
/** Egen ramme, eller bare en strek mellom panelene. Standard: `default`. */
|
|
9
|
+
variant?: AccordionVariant;
|
|
10
|
+
};
|
|
11
|
+
export type AccordionAttributes = {
|
|
12
|
+
class: typeof ACCORDION_CLASS;
|
|
13
|
+
"data-variant"?: NonDefaultAccordionVariant;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Attributtene for et panel som kan foldes ut.
|
|
17
|
+
*
|
|
18
|
+
* Klassen hører på et `<details>` med et `<summary>` først. Nettleseren tar
|
|
19
|
+
* seg av åpning, lukking, tastatur og at skjermlesere melder «utvidet» eller
|
|
20
|
+
* «sammenfoldet». Bygger du det samme av knapper og `aria-expanded`, må alt
|
|
21
|
+
* det skrives på nytt, og nettleserens søk i siden finner ikke lenger tekst
|
|
22
|
+
* inne i et lukket panel.
|
|
23
|
+
*
|
|
24
|
+
* ```ts
|
|
25
|
+
* <details {...accordion()}>
|
|
26
|
+
* <summary>Hvem kan søke?</summary>
|
|
27
|
+
* <div class={accordion.content}>…</div>
|
|
28
|
+
* </details>
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare const accordion: (({ variant }?: AccordionOptions) => AccordionAttributes) & {
|
|
32
|
+
/** Klassen på innholdet under overskriften. */
|
|
33
|
+
content: "fs-accordion__content";
|
|
34
|
+
variants: readonly ["default", "plain"];
|
|
35
|
+
isVariant: (value: string) => value is "default" | "plain";
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=accordion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../../src/components/css/accordion/accordion.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,EAAG,cAAuB,CAAA;AACtD,gDAAgD;AAChD,eAAO,MAAM,uBAAuB,EAAG,uBAAgC,CAAA;AAEvE,eAAO,MAAM,iBAAiB,+BAAgC,CAAA;AAE9D,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAA;AACjE,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAA;AAE7E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,OAAO,eAAe,CAAA;IAC7B,cAAc,CAAC,EAAE,0BAA0B,CAAA;CAC5C,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,SAAS,kBACM,gBAAgB,KAAQ,mBAAmB;IAMnE,+CAA+C;;;;CAKlD,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { attributes, createGuard } from "../shared.js";
|
|
2
|
+
export const ACCORDION_CLASS = "fs-accordion";
|
|
3
|
+
/** Innholdet som vises når panelet er åpent. */
|
|
4
|
+
export const ACCORDION_CONTENT_CLASS = "fs-accordion__content";
|
|
5
|
+
export const accordionVariants = ["default", "plain"];
|
|
6
|
+
/**
|
|
7
|
+
* Attributtene for et panel som kan foldes ut.
|
|
8
|
+
*
|
|
9
|
+
* Klassen hører på et `<details>` med et `<summary>` først. Nettleseren tar
|
|
10
|
+
* seg av åpning, lukking, tastatur og at skjermlesere melder «utvidet» eller
|
|
11
|
+
* «sammenfoldet». Bygger du det samme av knapper og `aria-expanded`, må alt
|
|
12
|
+
* det skrives på nytt, og nettleserens søk i siden finner ikke lenger tekst
|
|
13
|
+
* inne i et lukket panel.
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* <details {...accordion()}>
|
|
17
|
+
* <summary>Hvem kan søke?</summary>
|
|
18
|
+
* <div class={accordion.content}>…</div>
|
|
19
|
+
* </details>
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export const accordion = Object.assign(({ variant = "default" } = {}) => attributes({
|
|
23
|
+
class: ACCORDION_CLASS,
|
|
24
|
+
"data-variant": variant === "default" ? undefined : variant,
|
|
25
|
+
}), {
|
|
26
|
+
/** Klassen på innholdet under overskriften. */
|
|
27
|
+
content: ACCORDION_CONTENT_CLASS,
|
|
28
|
+
variants: accordionVariants,
|
|
29
|
+
isVariant: createGuard(accordionVariants),
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accordion.js","sourceRoot":"","sources":["../../../../src/components/css/accordion/accordion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAEtD,MAAM,CAAC,MAAM,eAAe,GAAG,cAAuB,CAAA;AACtD,gDAAgD;AAChD,MAAM,CAAC,MAAM,uBAAuB,GAAG,uBAAgC,CAAA;AAEvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,OAAO,CAAU,CAAA;AAe9D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CACpC,CAAC,EAAE,OAAO,GAAG,SAAS,KAAuB,EAAE,EAAuB,EAAE,CACtE,UAAU,CAAC;IACT,KAAK,EAAE,eAAe;IACtB,cAAc,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;CAC5D,CAAC,EACJ;IACE,+CAA+C;IAC/C,OAAO,EAAE,uBAAuB;IAChC,QAAQ,EAAE,iBAAiB;IAC3B,SAAS,EAAE,WAAW,CAAC,iBAAiB,CAAC;CAC1C,CACF,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export declare const ALERT_CLASS: "fs-alert";
|
|
2
|
+
/** Overskriften inne i meldingen. */
|
|
3
|
+
export declare const ALERT_TITLE_CLASS: "fs-alert__title";
|
|
4
|
+
export declare const alertColors: readonly ["info", "success", "warning", "danger"];
|
|
5
|
+
export type AlertColor = (typeof alertColors)[number];
|
|
6
|
+
export type NonNeutralAlertColor = AlertColor;
|
|
7
|
+
export type AlertOptions = {
|
|
8
|
+
/** Hva meldingen betyr. Utelatt gir den nøytrale. */
|
|
9
|
+
color?: AlertColor;
|
|
10
|
+
};
|
|
11
|
+
export type AlertAttributes = {
|
|
12
|
+
class: typeof ALERT_CLASS;
|
|
13
|
+
"data-color"?: AlertColor;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Attributtene for en melding som gjelder hele siden eller et helt skjema.
|
|
17
|
+
*
|
|
18
|
+
* Rollen settes ikke her, fordi den avhenger av når meldingen kommer.
|
|
19
|
+
* Står den i markupen fra start, skal den ikke ha noen rolle. Dukker den opp
|
|
20
|
+
* mens siden står stille, trenger den `role="status"`, eller `role="alert"`
|
|
21
|
+
* hvis brukeren må stoppe opp.
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* <div {...alert({ color: "warning" })}>
|
|
25
|
+
* <p {...alert.title}>Søknaden er ikke sendt</p>
|
|
26
|
+
* </div>
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare const alert: (({ color }?: AlertOptions) => AlertAttributes) & {
|
|
30
|
+
/** Klassen på overskriften inne i meldingen. */
|
|
31
|
+
title: "fs-alert__title";
|
|
32
|
+
colors: readonly ["info", "success", "warning", "danger"];
|
|
33
|
+
isColor: (value: string) => value is "warning" | "info" | "danger" | "success";
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=alert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../../../src/components/css/alert/alert.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,EAAG,UAAmB,CAAA;AAC9C,qCAAqC;AACrC,eAAO,MAAM,iBAAiB,EAAG,iBAA0B,CAAA;AAE3D,eAAO,MAAM,WAAW,mDAAoD,CAAA;AAE5E,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AACrD,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAA;AAE7C,MAAM,MAAM,YAAY,GAAG;IACzB,qDAAqD;IACrD,KAAK,CAAC,EAAE,UAAU,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,OAAO,WAAW,CAAA;IACzB,YAAY,CAAC,EAAE,UAAU,CAAA;CAC1B,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,KAAK,gBACJ,YAAY,KAAQ,eAAe;IAM7C,gDAAgD;;;;CAKnD,CAAA"}
|