Modal

Denne komponenten er under aktiv utvikling, og vi trenger din feedback!

Er du eventyrlysten, test den og kom med innspill til oss på Slack.

Om komponenten

Modaler er en type dialog fordi det er en samtale mellom brukeren og obos.no. Bruk en modal for å presentere viktig informasjon eller be om brukerens input som er nødvendig for å fullføre en hovedoppgave. Modaler avbryter en brukerflyt for korte og ikke-hyppige oppgaver, for eksempel redigerings- eller administrasjonsoppgaver. Når modalen er åpen, blokkeres brukeren fra innholdet på siden og kan ikke gå tilbake til sin forrige arbeidsflyt før modaloppgaven er fullført eller brukeren lukker modalen. Selv om de er effektive når de brukes riktig, bør modaler brukes sparsomt for å begrense forstyrrelse hos brukeren. Derfor, hvis en bruker må utføre en oppgave gjentatte ganger, bør du vurdere å gjøre det mulig å endre på siden uten bruk av en modal.

Egnet til:

  • For å varsle brukeren om relevant informasjon knyttet til hovedoppgaven. Modaler brukes ofte til å formidle en konsekvens av en brukers handling.
  • For å bekrefte en brukers avgjørelse. Beskriv tydelig handlingen som bekreftes og forklar eventuelle konsekvenser den kan forårsake. Både tittelen og knappen skal gjenspeile handlingen som vil skje. Hvertfall hvit handlingen er destruktiv eller irreversibel.

Uegnet til:

  • Om det er varsel på repetative oppgaver, så skal det løses på siden uten bruk av en modal.
  • Det skal ikke plasseres et helt skjema i en modal. Ett skjemaelement er greit.

Relaterte komponenter

Divider

Varianter

En modal skal alltid ha en tittel, denne defineres ved å sette slot="title" på øverste headingen i modalen.

<UNSAFE_DialogTrigger>
  <Button>Åpne</Button>
  <UNSAFE_Modal>
    <UNSAFE_Dialog>
      <Heading slot="title" level={2}>
        Hvitevarer
      </Heading>
      <p>
        Denne boligen har tilvalg om hvitevarer fra HTH. Mulighet for
        vaskemaskin, tørketrommel, oppvaskmaskin eller å avstå dette
        tilbudet.
      </p>
    </UNSAFE_Dialog>
  </UNSAFE_Modal>
</UNSAFE_DialogTrigger>

Modal kan rendres med en eller flere knapper som gjør at modalen lukker seg. For å få denne oppførseln må man sette slot="close" på knappen

<UNSAFE_DialogTrigger>
  <Button>Åpne</Button>
  <UNSAFE_Modal>
    <UNSAFE_Dialog>
      <Heading slot="title" level={2}>
        Hvitevarer
      </Heading>
      <p>
        Denne boligen har tilvalg om hvitevarer fra HTH. Mulighet for
        vaskemaskin, tørketrommel, oppvaskmaskin eller å avstå dette
        tilbudet.
      </p>
      <Footer>
        <Button onPress={() => console.log('SAVED!')} slot="close">
          Lagre
        </Button>
        <Button variant="tertiary" slot="close">
          Avbryt
        </Button>
      </Footer>
    </UNSAFE_Dialog>
  </UNSAFE_Modal>
</UNSAFE_DialogTrigger>

Props

DialogTrigger

PropDescriptionDefault
isOpen?Whether the overlay is open by default (controlled).-
defaultOpen?Whether the overlay is open by default (uncontrolled).-
onOpenChange?Handler that is called when the overlay's open state changes.-
PropDescriptionDefault
children?The children of the component. A function may be provided to alter the children based on component state.-
className?The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. A function may be provided to compute the class based on component state.-
style?The inline [style](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style) for the element. A function may be provided to compute the style based on component state.-
isOpen?Whether the overlay is open by default (controlled).-
defaultOpen?Whether the overlay is open by default (uncontrolled).-
onOpenChange?Handler that is called when the overlay's open state changes.-
slot?A slot name for the component. Slots allow the component to receive props from a parent component. An explicit `null` value indicates that the local props completely override all props received from a parent.-
shouldCloseOnInteractOutside?When user interacts with the argument element outside of the overlay ref, return true if onClose should be called. This gives you a chance to filter out interaction with elements that should not dismiss the overlay. By default, onClose will always be called on interaction outside the overlay ref.-
isEntering?Whether the modal is currently performing an entry animation.-
isExiting?Whether the modal is currently performing an exit animation.-
UNSTABLE_portalContainer?The container element in which the overlay portal will be placed. This may have unknown behavior depending on where it is portalled to.document.body
isKeyboardDismissDisabled?Whether pressing the escape key to close the modal should be disabled.false

Dialog

PropDescriptionDefault
children?Children of the dialog. A function may be provided to access a function to close the dialog.-
role?The accessibility role for the dialog.'dialog'
id?The element's unique identifier. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id).-
aria-label?Defines a string value that labels the current element.-
aria-labelledby?Identifies the element (or elements) that labels the current element.-
aria-describedby?Identifies the element (or elements) that describes the object.-
aria-details?Identifies the element (or elements) that provide a detailed, extended description for the object.-
className?The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element.-
style?The inline [style](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style) for the element.-
slot?A slot name for the component. Slots allow the component to receive props from a parent component. An explicit `null` value indicates that the local props completely override all props received from a parent.-