Gå til innholdet

Kom i gang

Terminal window
npm install @fristil/designsystem

Pakken har ingen avhengigheter. Web-komponentene er vanlige HTMLElement-klasser, og ingenting registreres ved import alene, så en side som bare bruker CSS-komponentene tar ikke med noe JavaScript fra pakken. Tailwind-temaet er ren CSS, så pakken krever ingenting av Tailwind.

tokens.css definerer alle CSS-variablene. Alle andre stilark bygger på den, så den lastes først.

Ett stilark per komponent, med tokens.css først:

// main.js eller main.ts, øverst
import "@fristil/designsystem/tokens.css"
import "@fristil/designsystem/button.css"

Eller alt i én import, uten å velge:

import "@fristil/designsystem/fristil.css"

fristil.css har tokens.css og alle komponentstilarkene i seg, så den erstatter hele lista. Tailwind-temaet står utenfor, og hører ikke i en JavaScript-import i det hele tatt: tailwind.css er en @theme-blokk Tailwinds egen kompilator må lese, og settes opp som en @import i din egen CSS. Se Tailwind.

Lenker du uten byggesteg, bruk fristil.css. Én rundtur på 90 kB, 11 kB over nettet med gzip, og ingen @import nettleseren må laste fila for å oppdage. Lista med ett stilark per komponent er for den som har et byggesteg: der laster en side med bare knapper ikke CSS for en dialog. «Ren HTML»-fanen på hver komponentside oppgir lenkene til de enkelte stilarkene, siden lista samtidig sier hva komponenten krever, og fristil.css dekker hver av dem.

Med tokens.css og button.css importert:

Ingen registrering, ingen oppstartskode. CSS-komponentene er bare klasser.

Ramme- og frittstående komponenter er web components, og må registreres én gang når appen starter. defineFs() registrerer alle ni:

// main.ts, kjøres én gang, ved import og ikke i en effekt
import "@fristil/designsystem/tokens.css"
import "@fristil/designsystem/field.css"
import { defineFs } from "@fristil/designsystem/register"
defineFs()

Uten byggverktøy peker du på den bygde fila:

<script type="module">
import { defineFs } from "https://cdn.jsdelivr.net/npm/@fristil/designsystem@0.27.1/dist/register.js"
defineFs()
</script>

Kallet skal skje så tidlig som mulig, før noe rendres og aldri i en useEffect. Et element som står i siden før registreringen er et vanlig HTMLElement uten oppførsel, og et metodekall på det i det gapet feiler. Hjelperne showToast, reportFailure, reportSuccess, extendSession og resetSession venter i stedet på registreringen og utfører kallet når den kommer. Registreringen drar koden til alle ni med seg. Bruker du én av dem, kall dens egen funksjon i stedet, som defineFsField() fra @fristil/designsystem/field.

Flere kall er ufarlige, for funksjonene sjekker selv om elementet er registrert. De gjør heller ingenting på en server, der det ikke finnes noen customElements å registrere i, så de kan stå i en fil som kjøres begge steder.

<fs-field required-marker="symbol">
<label>Fullt navn</label>
<input class="fs-input" type="text" name="navn" required />
</fs-field>

Får du en tom side, har define-funksjonen nesten alltid ikke kjørt.

Stilark

Hver komponent har sitt eget stilark, oppkalt etter siden sin: @fristil/designsystem/button.css, /checkbox.css, /table.css og så videre. Importer dem du bruker.

ImportInnhold
@fristil/designsystem/fristil.cssAlt i én fil: tokens og hver komponent, uten @import. Ikke Tailwind-temaet
@fristil/designsystem/tokens.cssAlle CSS-variabler. Kreves av alt annet.
@fristil/designsystem/<komponent>.cssÉn komponent, med samme navn som siden dens
@fristil/designsystem/sr-only.css.fs-sr-only, tekst bare skjermlesere får
@fristil/designsystem/tailwind.cssFristils verdier som Tailwind-tema. Valgfri, se Tailwind.

Noen stilark samler det de trenger, så du slipper å importere delene hver for seg: field.css, error-summary.css, fieldset.css, search.css, session-timeout.css og suggestion.css.

Alle web-komponentene trenger et stilark. Ingen av dem bruker shadow DOM, så elementene er alminnelige elementer med systemets klasser, og klassene må lastes på siden.

JavaScript og TypeScript

Hele komponent-API-et ligger i ett navnerom:

import { fs } from "@fristil/designsystem"
fs.button({ variant: "secondary" })
fs.input({ type: "email", state: "invalid" })
fs.badge({ color: "success" })

Skriv fs. i editoren, så ser du hva som finnes. Bruker du React, importer fra @fristil/designsystem/react. Kallene er de samme, men returverdien bruker className og htmlFor. Se Typesikker bruk.

ImportInnhold
@fristil/designsystemfs med alle komponentene, alle typene, og web component-registreringene
@fristil/designsystem/reactSamme fs, men med className og htmlFor
@fristil/designsystem/react-jsxTyper for web components i JSX
@fristil/designsystem/domsetAttributes: bruker et attributtsett på et element uten JSX
@fristil/designsystem/registerdefineFs: registrerer alle web-komponentene i ett kall
@fristil/designsystem/diagnosticsdiagnoseMarkup: sjekker HTML mot elementene og klassene, som editoren gjør. Se Editoren
@fristil/designsystem/fielddefineFsField, klassen FsField
@fristil/designsystem/session-timeoutdefineFsSessionTimeout, klassen FsSessionTimeout, extendSession og resetSession
@fristil/designsystem/connection-statusdefineFsConnectionStatus, klassen FsConnectionStatus, reportFailure og reportSuccess
@fristil/designsystem/tabsdefineFsTabs, klassen FsTabs
@fristil/designsystem/error-summarydefineFsErrorSummary, klassen FsErrorSummary
@fristil/designsystem/popoverdefineFsPopover, klassen FsPopover
@fristil/designsystem/toastdefineFsToast, klassen FsToast, showToast
@fristil/designsystem/suggestiondefineFsSuggestion, klassen FsSuggestion
@fristil/designsystem/dialogdefineFsDialog, klassen FsDialog
@fristil/designsystem/field-corecomputeFieldAttributes: det fs.field og <fs-field> deler
@fristil/designsystem/host-elementHostElement og defineElement: grunnlaget web-komponentene arver fra
@fristil/designsystem/tokenscssTokens, CssToken, Breakpoints, Containers

Hver komponent finnes også som eget inngangspunkt (@fristil/designsystem/button, /badge, /link og så videre) med en funksjon som heter det samme som komponenten.

fs er valgfritt. class="fs-button" data-variant="secondary" for hånd gir samme resultat; funksjonene finnes for å fange skrivefeil.

Pakken følger semantisk versjonering. Det offentlige API-et er større enn funksjonene: klassenavnene, data-*-attributtene, part-navnene, tokennavnene, --fs-*-variablene og oppføringene i exports er alle noe du kan bygge på, og de endres ikke uten en ny hovedversjon.

Hva som er endret i hver versjon står i CHANGELOG.md, som også følger med i pakken.

  • Rammeverk: konkret oppsett for ren HTML, React, Astro og Datastar
  • Editoren: fullføring og feilmeldinger i VS Code og JetBrains, også uten TypeScript
  • Design tokens: hvilke variabler som finnes, og hva de heter
  • Tailwind: oppsett og Fristils verdier som utility-klasser
  • Button: den enkleste komponenten å begynne med
  • Mønstre: hele skjemaer, lister og sider satt sammen