Modal
@/components/ui/Modal
Dialogflaten for alt du GJØR — skjema, valg, lagring, sletting. Fast bredde (480/640px) og sentrert fra 640px (sm); på mobil er modalen et bunnark i bunnen av skjermen.
Når brukes den
Enhver handling — skjema, valg, bekreftelse, sletting (regel/modal-gjore-accordion-lese: Modal/Popover for det man GJØR).
På mobil (under 640px) er modalen et bunnark — full bredde, avrundet kun øverst, i tommelens rekkevidde nederst på skjermen. Fra 640px er den et sentrert kort. Dette er automatisk, ikke noe kallstedet styrer.
Bruk `ModalBody` + `ModalActions` sammen for nytt innhold — de bringer egen padding/handlingsrad. Bland dem ALDRI med rå children i samme modal.
Sett `ariaLabel` når modalen ikke har en synlig `title` (f.eks. et eget visuelt hode med logo).
`size="wide"` (640px) for skjema med to kolonner e.l. — standard er 480px.
`sticky` på `ModalActions` når innholdet kan bli langt nok til å rulle, slik at handlingsraden alltid er synlig.
Escape og klikk-utenfor lukker alltid — dette er en bevisst, gjennomgående kontrakt, ikke noe hvert kallsted skal styre selv.
Ikke bruk Modal til å vise mer om en rad du allerede ser uten å gjøre noe — det er CollapsibleSection sin jobb.
Eksempler
Med tittel og undertekst
Standard bruk: headerrad med tittel (heading-20) og valgfri undertekst, ModalBody + ModalActions under.
<Modal open={open} onClose={close} title="Eksempelmodal" subtitle="…">
<ModalBody>…</ModalBody>
<ModalActions>
<Button variant="secondary" onClick={close}>Avbryt</Button>
<Button variant="primary" onClick={lagre}>Bekreft</Button>
</ModalActions>
</Modal>Uten tittel (gamle, rå children)
Når flaten har sitt eget visuelle hode (logo, sentrert overskrift). Uten ModalBody/ModalActions beholder Modal sin gamle innholds-padding, uendret fra før denne runden.
<Modal open={open} onClose={close} ariaLabel="Eksempel uten tittel">
…
</Modal>size="wide"
640px i stedet for standard 480px — for bredere skjema.
<Modal open={open} onClose={close} title="…" size="wide">…</Modal>ModalActions sticky
Handlingsraden blir stående nederst mens ModalBody-innholdet ruller — for lange skjema.
<ModalActions sticky>
<Button variant="secondary" onClick={close}>Avbryt</Button>
<Button variant="primary" onClick={lagre}>Lagre</Button>
</ModalActions>Props
Sveip tabellen for å se hele innholdet