Gå til innholdet

Toast

Elementet er beholderen, ikke meldingen. Du legger det inn én gang i appen og kaller show() når noe skal meldes.

Beholderen er en role="status"-region, ikke role="alert". En melding som dukker opp i hjørnet skal ikke avbryte det skjermleseren holder på med. Er beskjeden så viktig at den må avbryte, hører den hjemme i en Alert i selve siden.

// main.ts, kjøres én gang når appen starter
import { defineFsToast } from "@fristil/designsystem/toast"
import "@fristil/designsystem/tokens.css"
import "@fristil/designsystem/toast.css"
defineFsToast()

Beholderen legges inn én gang, og meldingene kommer fra koden. Det er forskjellen fra de andre komponentene: her kaller du en metode framfor å sette et attributt.

En toast har tre deler, og fs.toast() gir ett attributtsett til hver. Det er den samme varsler som står i React- og Astro-oppskriftene over:

const varsler = fs.toast({ label: "Meldinger" })
SettHvilken delHvem skriver den
varsler.hostBeholderen, altså <fs-toast>Du, én gang i appen
varsler.toastSelve meldingenKomponenten, når du kaller show()
varsler.closeLukkeknappen i meldingenKomponenten

Derfor sprer du host og ikke hele objektet. Beholderen er det eneste elementet du skriver:

<fs-toast {...varsler.host} />

Sprer du hele varsler, setter du tre attributter som heter host, toast og close, og ingen av dem er noe nettleseren kjenner. Beholderen står da uten role="status" til defineFsToast() har kjørt, for komponenten fyller inn rollen når den mangler. Fram til da leser ingen skjermleser opp det som kommer i den, og data-ignore-morph kommer aldri, siden det er det ene komponenten ikke setter selv.

De to andre settene er navn, ikke markup. Komponenten kjenner dem og bruker dem på det den lager selv. Du trenger dem bare når noen andre skriver meldingen: en Datastar-app der serveren patcher en melding rett inn i regionen, må skrive fs-toast og fs-toast__close selv, og da skal de hete det samme som komponentens egne.

Har du ikke noe byggesteg, skriver du det samme settet ut som vanlige attributter, slik oppskriftene «Ren HTML» og «Datastar» gjør:

<fs-toast id="meldinger" role="status" aria-live="polite"
aria-atomic="false"
aria-label="Meldinger" data-ignore-morph></fs-toast>

data-ignore-morph er den viktigste av dem, og den eneste komponenten ikke setter selv.

data-ignore-morph er ikke valgfri. Komponenten lager og fjerner sine egne meldinger inne i regionen, og uten attributtet river en oppdatering fra serveren dem bort, fordi serverens utgave av regionen er tom. Se Markup og oppførsel.

NavnHva det er
durationStandard levetid i millisekunder. 0 lar meldingene bli stående.
labelTekst som sier hva regionen er. Blir aria-label. Standard: «Varsler»
show(tekst, valg)Viser en melding og returnerer elementet
dismiss(melding)Fjerner én melding, og sender toast-dismiss. Hadde meldingen fokus, går fokus til meldingen ved siden av
clear()Fjerner alle, uten å sende noe

showToast(element, tekst, valg) fra @fristil/designsystem/toast gjør det samme som show(), men venter først på at elementet er registrert. Bruk den der kallet kan komme før defineFsToast(), som i en modul som lastes ved siden av registreringen.

Valgene til show():

ValgStandardEffekt
colorneutralsuccess, warning eller danger gir en farget kant
durationfra elementetMillisekunder før meldingen forsvinner
closeLabelLukk meldingTekst på lukkeknappen

En melding som forsvinner av seg selv er en tilgjengelighetsfelle: den som leser sakte, bruker forstørrelse eller skjermleser rekker ikke å lese den. Komponenten gjør to ting med det:

  • Lukkeknappen er alltid der.
  • Tiden stopper mens musa er over meldingen eller fokus er inne i den, og går først når begge er ute.

Skal beskjeden kunne leses igjen senere, hører den ikke hjemme her. En kvittering skal stå i siden.

KlasseHva det er
.fs-toastÉn melding. Fargen kommer fra data-color.
.fs-toast__closeLukkeknappen
VariabelStandard
--fs-toast-spacevar(--fs-spacing-4)
--fs-toast-widthmin(24rem, calc(100vw - var(--fs-spacing-8)))
--fs-toast-paddingvar(--fs-spacing-3) var(--fs-spacing-4)
--fs-toast-radiusvar(--fs-spacing-1)
--fs-toast-layer60

Beholderen slipper klikk gjennom når den er tom, så den ikke stenger for knapper under seg.

Se Tilpasning for hvordan variablene og laget virker.

  • Én ting om gangen. Fem meldinger oppå hverandre leses opp etter hverandre, og ingen av dem får oppmerksomhet.
  • Ikke legg viktige handlinger i en melding som forsvinner. Angre-knappen bør stå i siden.
  • Feil som stopper brukeren hører i en Alert eller en Error Summary, ikke i hjørnet.
  • Teksten skal si hva som skjedde, ikke bare «Ferdig».