Hopp til hovedinnhold

Hva leter du etter?

Prøv å søke etter…

Komponenter

Dialog

Det er to typer dialoger, en modal og en ikke-modal. En modal dialog tvinger brukerne til å ta stilling til noe før de kan fortsette å bruke siden. En Ikke-modal dialog lar brukerne fortsette å bruke siden, selv om dialogen er åpen.

closeButton
Description

Screen reader label of close button. Set false to hide the close button.

Type
string | false
Default
Lukk dialogvindu
closedby
Description

Light dismiss behavior, allowing to close on backdrop click by setting `closedby="any"`. @see [mdn closedBy](https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/closedBy)

Type
"none" | "closerequest" | "any"
Default
'closerequest'
placement
Description

When not center, displays dialog as a "drawer" from the specified side.

Type
"center" | "left" | "right" | "top" | "bottom"
Default
center
modal
Description

Toogle modal and non-modal dialog. @see [mdn modal dialog](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog#creating_a_modal_dialog)

Type
boolean
Default
true
open
Description

@note Unlike standard html, where the open attribute always opens a non-modal dialog, Dialog's open prop uses the `modal` prop to determine whether the Dialog is modal or non-modal

Type
boolean
onClose
Description

Callback that is called when the dialog is closed.

Type
((event: Event) => void)
asChild
Description

Change the default rendered element for the one passed as a child, merging their props and behavior. @deprecated Will be removed in the next major version. Should always be a `<dialog>` element

Type
boolean
Default
false
NameTypeDefaultDescription
closeButtonstring | falseLukk dialogvindu

Screen reader label of close button. Set false to hide the close button.

closedby"none" | "closerequest" | "any"'closerequest'

Light dismiss behavior, allowing to close on backdrop click by setting `closedby="any"`. @see [mdn closedBy](https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/closedBy)

placement"center" | "left" | "right" | "top" | "bottom"center

When not center, displays dialog as a "drawer" from the specified side.

modalbooleantrue

Toogle modal and non-modal dialog. @see [mdn modal dialog](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog#creating_a_modal_dialog)

openboolean-

@note Unlike standard html, where the open attribute always opens a non-modal dialog, Dialog's open prop uses the `modal` prop to determine whether the Dialog is modal or non-modal

onClose((event: Event) => void)-

Callback that is called when the dialog is closed.

asChildbooleanfalse

Change the default rendered element for the one passed as a child, merging their props and behavior. @deprecated Will be removed in the next major version. Should always be a `<dialog>` element

DialogBlock

asChild
Description

Change the default rendered element for the one passed as a child, merging their props and behavior.

Type
boolean
Default
false
NameTypeDefaultDescription
asChildbooleanfalse

Change the default rendered element for the one passed as a child, merging their props and behavior.

DialogTrigger

type
Description

Specify the type of button. Unset when `asChild` is true

Type
"submit" | "reset" | "button"
Default
'button'
command
Type
string
commandfor
Type
string
variant
Description

Specify which variant to use

Type
"primary" | "secondary" | "tertiary"
Default
'primary'
icon
Description

Toggle icon only styling, pass icon as children When combined with loading, the loading-icon will be shown instead of the icon.

Type
boolean
Default
false
loading
Description

Toggle loading state. Pass an element if you want to display a custom loader.

Type
ReactNode
Default
false
asChild
Description

Change the default rendered element for the one passed as a child, merging their props and behavior.

Type
boolean
Default
false
NameTypeDefaultDescription
type"submit" | "reset" | "button"'button'

Specify the type of button. Unset when `asChild` is true

commandstring-

-

commandforstring-

-

variant"primary" | "secondary" | "tertiary"'primary'

Specify which variant to use

iconbooleanfalse

Toggle icon only styling, pass icon as children When combined with loading, the loading-icon will be shown instead of the icon.

loadingReactNodefalse

Toggle loading state. Pass an element if you want to display a custom loader.

asChildbooleanfalse

Change the default rendered element for the one passed as a child, merging their props and behavior.

Bruk

For å legge til egen lukk knapp, kan du enten bruke command="close" commandfor="DIALOG-ID" ellr ref og Dialog.close() på en knapp du lager selv. Dersom knappen er tom vil den få et ikon. Dersom knappen er direkte barn av dialogen og første element, vil den flyte til topp høyre.

Attributtene command (developer.mozilla.org) og commandfor er en relativt ny del av web-standarden som lar knapper utføre handlinger på andre elementer deklarativt. Vi legger automatisk til invokers-polyfill (npmjs.com) for å støtte eldre nettlesere.

Eksempel

Med command og uten context

Dersom du ikke vil bruke Dialog.TriggerContext, kan du bruke command="show-modal" eller command="--show-non-modal" og commandfor="DIALOG-ID" for å åpne dialogen fra en ekstern trigger.

Med ref og uten context

Dersom du ikke vil bruke Dialog.TriggerContext, kan du bruke ref for å åpne dialogen fra en ekstern trigger. Du bruker da native metoder på <dialog>-elementet, som showModal() eller show(). Merk at knappen som åpner dialogen da bør ha aria-haspopup="dialog"-attributtet.

Med skjema og fokus

Dersom du vil at et felt i et skjema inni dialogen skal få fokus når dialogen åpnes, kan du bruke native autofocus-attributtet på input-elementet.

Når du bruker dette med React, må du skrive det med små bokstaver som autofocus, ikke autoFocus. Denne prop-en eksistere ikke i React sine typedefinisjoner, så vi har ignorert feilen med en @ts-expect-error-kommentar i eksempelet under.

Med blokker

Bruk flere Dialog.Block hvis du vil dele opp dialogen med skillelinjer til for eksempel topp- og bunn-område. Merk at innhold kan ikke plasseres direkte i Dialog dersom du bruker Dialog.Block; da burde alt innholdet være inni en av av dialogens Dialog.Block-seksjoner.

Lukk ved klikk utenfor

Vi bruker closedby="any" for å lukke dialogen når brukeren klikker utenfor. Vi legger til polyfill så closedby="any" også fungerer i eldre Safari.

HTML

Hovedklassenavnet er ds-dialog, som blir plassert på <dialog>-elementet. Blokker inne i dialogen får klassenavn som ds-dialog__block.

I HTML må du selv koble <dialog>-elementet til en trigger via command="show-modal" eller command="--show-non-modal" og commandfor="DIALOG-ID".

CSS variabler og data-attributter

Alle CSS variabler brukt av ds-dialog__block er satt på ds-dialog.

CSS-variabler
NavnVerdi
--dsc-dialog-backdrop-backgroundrgba(0,0,0,.5)
--dsc-dialog-backgroundvar(--ds-color-neutral-surface-default)
--dsc-dialog-icon-spacingvar(--ds-size-3)
--dsc-dialog-icon-urlurl("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' fill='none' viewBox='0 0 24 24'%3E%3Cpath fill='currentColor' d='M6.53 5.47a.75.75 0 0 0-1.06 1.06L10.94 12l-5.47 5.47a.75.75 0 1 0 1.06 1.06L12 13.06l5.47 5.47a.75.75 0 1 0 1.06-1.06L13.06 12l5.47-5.47a.75.75 0 0 0-1.06-1.06L12 10.94z'/%3E%3C/svg%3E")
--dsc-dialog-colorvar(--ds-color-neutral-text-default)
--dsc-dialog-divider-border-widthvar(--ds-border-width-default)
--dsc-dialog-divider-border-stylesolid
--dsc-dialog-divider-border-colorvar(--ds-color-neutral-border-subtle)
--dsc-dialog-border-widthvar(--ds-border-width-default)
--dsc-dialog-border-stylesolid
--dsc-dialog-border-colorvar(--ds-color-neutral-border-subtle)
--dsc-dialog-max-height80vh
--dsc-dialog-max-width40rem
--dsc-dialog-spacingvar(--ds-size-6)
--dsc-dialog-placement-inline-max-width40rem
--dsc-dialog-placement-block-max-width100%
--dsc-dialog-transition-duration300ms
Data-attributter
NavnVerdi
data-placementbottom, top, left, right
data-commandclose
Rediger denne siden på github.com (åpnes i ny fane)