Modal
Focus-trapping dialog for confirmations, forms, and brief content detours. Aligned with J&J DS v1.2 (Figma 13339:82204/82181). Backed by Radix Dialog — handles focus, ESC, scroll-lock, and overlay click-out by default.
Basic confirmation
Headline + body + primary/secondary actions. Close button (X) at the top-right, overlay click and ESC close the modal.
Show sourceHide source
<Modal>
<ModalTrigger asChild>
<Button>Open modal</Button>
</ModalTrigger>
<ModalContent>
<ModalHeader>
<ModalTitle>Modal headline goes here</ModalTitle>
</ModalHeader>
<ModalBody>
<ModalDescription>Lorem ipsum dolor sit amet…</ModalDescription>
</ModalBody>
<ModalFooter>
<ModalClose asChild><Button>Primary option</Button></ModalClose>
<ModalClose asChild><Button variant="secondary">Secondary option</Button></ModalClose>
</ModalFooter>
</ModalContent>
</Modal>With media (ModalMedia + AspectRatio)
Insert a full-bleed media region above the header. 16:9 is the canonical landscape ratio.
Show sourceHide source
<ModalContent>
<ModalMedia>
<AspectRatio ratio={16 / 9}>
<img src="…" alt="…" />
</AspectRatio>
</ModalMedia>
<ModalHeader><ModalTitle>…</ModalTitle></ModalHeader>
…
</ModalContent>Sizes
Small (max-w-md), medium (max-w-lg, default), large (max-w-2xl).
Show sourceHide source
<ModalContent size="sm">…</ModalContent>
<ModalContent size="md">…</ModalContent>
<ModalContent size="lg">…</ModalContent>Destructive confirmation
Use the danger Button variant for destructive primary actions. Keep the secondary action first in the DOM so keyboard users Tab to it before the destructive one.
Show sourceHide source
<ModalFooter>
<ModalClose asChild><Button variant="secondary">Cancel</Button></ModalClose>
<ModalClose asChild><Button variant="danger">Delete study</Button></ModalClose>
</ModalFooter>