Modal

En modal (eller dialog) viser elementer i front, mens andre elementer skjules i backdrop.

Komponenten er klar til testing, men ikke ferdig

Komponenten har blitt utarbeidet nok til at det ikke kommer store endringer, men trenger å bli testet for å avdekke behov. Gi tilbakemelding om noe lugger eller mangler.

Breaking changes varsles i endringsloggen som patches, ikke som major oppdateringer, for å unngå versjonsinflasjon.

Send innspill

Eksempler

Enkel modal

Modalen trenger ikke state for å kunne åpnes eller lukkes. Det er viktig å inkludere tittel, så innholdet blir beskrevet for skjermlesere.

<Modal>
  <ModalTrigger asChild>
    <Button
      variant="primary"
    >
      Åpne
    </Button>
  </ModalTrigger>
  <ModalContent>
    <ModalHeader closeAriaLabel="Lukk">
      <ModalTitle>
        Her er tittel
      </ModalTitle>
    </ModalHeader>
    Her er noe innhold.
  </ModalContent>
</Modal>

Kontrollert modal

Du kan også lukke modalen via state, for eksempel ved en lukk- eller submit-knapp.

function ControlledModal() {
  const [open, setOpen] = React.useState(false);

  const handleSubmit = (event) => {
    event.preventDefault();
    setOpen(false);
  };
  
  const handleClose = (event) => {
    event.preventDefault();
    setOpen(false);
  };

  return (
    <Modal open={open} onOpenChange={setOpen}>
      <ModalTrigger asChild>
        <Button variant="primary">Åpne</button>
      </ModalTrigger>
      <ModalContent>
        <ModalHeader closeAriaLabel="Lukk">
          <ModalTitle>
            Her er tittel
          </ModalTitle>
        </ModalHeader>
        <form onSubmit={handleSubmit}>
          <Stack gap={16} flexDirection="row" justifyContent="flex-end">
            <Button 
              variant="ghost" 
              type="button" 
              onClick={handleClose}>
              Lukk
            </Button>
            <Button variant="primary" type="submit">Åpne</button>
          </Stack>
        </form>
      </ModalContent>
    </Modal>
  );
}

Retningslinjer

Du bruker modalen om du trenger å vise noe i kontekst av den eksisterende handlingen. Innad en modal skal det ikke åpnes enda en modal. Et alternativ til modal er å heller navigere brukeren til en ny side.

Plasser knappene til høyre i modalen, med hovedknapp mest til høyre.

Kode

<Modal />

import { Modal } from "@aneo-org/design-react/clientComponents";

Rot-komponenten for modal.

PropTypeBeskrivelse
open?booleanFor kontrollert tilstand. Brukes sammen med onOpenChange.
onOpenChange?(open: boolean) => voidEvent-handler for når open-staten endres.

<ModalTrigger />

import { ModalTrigger } from "@aneo-org/design-react/clientComponents";

Trigger for å åpne modalen.

PropTypeBeskrivelse
asChild?booleanEndre default element til hva enn child element er.

<ModalContent />

import { ModalContent } from "@aneo-org/design-react/clientComponents";

Innhold i modalen. Implementerer også lukkeknapp og tittel hvis du bruker title-propen.

<ModalHeader />

import { ModalHeader } from "@aneo-org/design-react/clientComponents";

Modal-header som inneholder lukke-knapp og som du må legge til tittel.

PropTypeBeskrivelse
closeAriaLabelstringAria label for lukke-ikonet.

<ModalTitle />

import { ModalTitle } from "@aneo-org/design-react/clientComponents";

Tilgjengelig tittel som automatisk setter aria-label for ModalContent. Implementerer Typography-komponenten med text-variant heading4.

PropTypeBeskrivelse
hideTitle?booleanVisuelt skjuler tittel, men tilgjengelig for screenreader.