Modal
BetaL3 — Overlay react-aria-components (ModalOverlay/Modal/Dialog) : focus trap, restauration de focus, dismiss Échap/clic-extérieur configurable. "use client". Statut beta — validation visuelle navigateur en attente (ADR-LYRA-V3-PRIMITIVES-001).
import { Modal } from "@lyra/tokens/components";Playground
Démo interactive — réglages du playground (props ajustables en direct) à venir.
const [open, setOpen] = useState(false);
<Modal isOpen={open} onOpenChange={setOpen} title="Confirmer">
<p>Voulez-vous vraiment continuer ?</p>
</Modal>Documentation
Aperçu unique — pas de variantes documentées.
isOpen, onOpenChange, title, children, isDismissable, closeLabelconst [open, setOpen] = useState(false);
<Modal isOpen={open} onOpenChange={setOpen} title="Confirmer">
<p>Voulez-vous vraiment continuer ?</p>
</Modal>- role='dialog' + titre lié via aria-labelledby (Heading slot='title').
- Focus trap : le focus reste dans la modale tant qu'elle est ouverte (FocusScope RAC).
- Restauration de focus : au dismiss, retour à l'élément déclencheur (RAC OverlayContainer).
- Modalité par aria-hidden sur le reste de l'arbre (ariaHideOutside RAC) — pas aria-modal (déviation RAC intentionnelle, bug Safari connu).
- isDismissable=false : ni clic-extérieur ni Échap — dismiss uniquement via le bouton explicite.
- Bouton de fermeture explicite toujours présent en plus du dismiss implicite.