Komponenter
Dialog
Dialog lar deg lage modale og ikke-modale dialoger basert på HTML-elementet dialog.
React
const Preview = () => { return ( <Dialog.TriggerContext> <Dialog.Trigger>Open Dialog</Dialog.Trigger> <Dialog> <Heading style={{ marginBottom: 'var(--ds-size-2)' }}> Dialog header </Heading> <Paragraph style={{ marginBottom: 'var(--ds-size-2)' }}> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Blanditiis doloremque obcaecati assumenda odio ducimus sunt et. </Paragraph> <Paragraph data-size='sm'>Dialog footer</Paragraph> </Dialog> </Dialog.TriggerContext> ); }; render(<Preview />)
Bruk Dialog når
- brukeren skal fokusere på en spesifikk oppgave
- du skal sikre at brukeren får med seg viktig informasjon
Unngå Dialog når
- innholdet er omfattende eller komplekst
- det er flere steg i prosessen
- det kan være uheldig å avbryte brukerens arbeidsflyt, bruk heller
Alert,Popovereller "ikke-modal"Dialog
Eksempel
Med blokker
Dialog kan deles inn med visuelle skillelinjer, slik at innhold blir visuelt atskilt.
React
const WithBlocks = () => { return ( <Dialog.TriggerContext> <Dialog.Trigger>Open Dialog</Dialog.Trigger> <Dialog> <Dialog.Block> <Paragraph data-size='sm'>Dialog subtitle</Paragraph> <Heading>Dialog with dividers</Heading> </Dialog.Block> <Dialog.Block> <Paragraph> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sodales eros justo. </Paragraph> </Dialog.Block> <Dialog.Block> <Button variant='secondary' data-command='close'> Lukk </Button> </Dialog.Block> </Dialog> </Dialog.TriggerContext> ); }; render(<WithBlocks />)
Med skjema
Når vi har skjemaelementer i en Dialog er det nyttig at fokus blir flyttet direkte til det første feltet dersom det ikke ligger annet viktig innhold først.
React
const WithForm = () => { const dialogRef = useRef<HTMLDialogElement>(null); const [input, setInput] = useState(''); return ( <Dialog.TriggerContext> <Dialog.Trigger>Open Dialog</Dialog.Trigger> <Dialog ref={dialogRef} onClose={() => setInput('')} closedby='any'> <Heading style={{ marginBottom: 'var(--ds-size-2)' }}> Dialog med skjema </Heading> <Textfield label='Navn' value={input} onChange={(e) => setInput(e.target.value)} // @ts-expect-error We want the native "autofocus" and Reacts onMount smartness (see https://react.dev/reference/react-dom/components/input#input) autofocus='true' /> <div style={{ display: 'flex', gap: 'var(--ds-size-4)', marginTop: 'var(--ds-size-4)', }} > <Button onClick={() => { window.alert(`Du har sendt inn skjema med navn: ${input}`); dialogRef.current?.close(); }} > Send inn skjema </Button> <Button variant='secondary' data-color='danger' data-command='close'> Avbryt </Button> </div> </Dialog> </Dialog.TriggerContext> ); }; render(<WithForm />)
Retningslinjer
Bruk Dialog for å vise viktig innhold som krever brukerens oppmerksomhet eller handling. Vi unngår å kalle komponenten for "modal", siden den også kan brukes som "ikke-modal".
Dialog kan brukes som både modal og ikke-modal.
Modal Dialog
En modal Dialog er et midlertidig vindu som åpnes over resten av innholdet på nettsiden. Modal Dialog fanger brukerens oppmerksomhet og hindrer interaksjon med annet innhold, samtidig som konteksten til nettsiden beholdes.
Bruk av modal Dialog bør generelt begrenses, men kan være nyttig når brukeren må ta stilling til informasjon, bekrefte en handling eller fokusere på en spesifikk oppgave - uten å navigere bort fra siden.
"Ikke-modal" Dialog
En "ikke-modal" Dialog lar brukeren fortsatt bruke resten av siden mens dialogen er åpen. Den bør brukes med varsomhet, og passer best når du skal gi støtteinformasjon eller ekstra funksjonalitet som ikke krever full oppmerksomhet.
Lukking av Dialog
Sørg for at brukeren alltid har en synlig og enkel måte å lukke en Dialog på. Det vanligste er en lukkeknapp (X) øverst til høyre. Den skal være synlig selv om dialogen inneholder mye innhold og brukeren må scrolle.
Hvis det ikke er naturlig å plassere en lukkeknapp (X) øverst til høyre, må dialogen ha en tydelig lukkehandling inne i innholdet, for eksempel en Avbryt-knapp. Dette gir brukeren kontro
Tekst
- Ha en kort og konsis overskrift. Overskriften skal gjøre det tydelig for brukeren at konteksten er endret.
- Unngå mange avsnitt med tekst.
- Sørg for at formålet er tydelig og at all nødvendig informasjon er tilgjengelig i modalen.