Aller au contenu principal

Tiroir

Panneau coulissant depuis le bord de l'écran, souvent utilisé pour la consultation de détails, la saisie de formulaires et autres scénarios nécessitant un espace d'affichage plus important. Différence avec le Dialog : affichage bord à bord, coulissement directionnel, et la taille du panneau ne s'applique qu'à un seul côté (largeur ou hauteur).

Utilisation de base​

Les quatre directions et la taille personnalisée
import { useState } from 'react'
import { LhButton, LhDrawer } from '@lh-ui/react'

export default function Demo() {
const [open, setOpen] = useState(false)
return (
<>
<LhButton onClick={() => setOpen(true)}>Ouvrir le tiroir</LhButton>
<LhDrawer title="Titre du tiroir" open={open} onClose={() => setOpen(false)}>
Contenu du tiroir
</LhDrawer>
</>
)
}

Drawer Props​

PropDescriptionTypeOptionsValeur par défaut
childrenContenu principalReactNode——
openAffiché ou non (contrôlé)boolean—false
titleTitreReactNode——
directionDirection de coulissement'right' | 'left' | 'top' | 'bottom'—'right'
sizeTaille du panneau (un nombre devient px ; une chaîne peut être un pourcentage)string | number—'30%'
showCloseAfficher ou non le bouton de fermetureboolean—true
maskClosableFermer ou non au clic sur le masqueboolean—false
closeOnEscFermer ou non à l'appui sur Échapboolean—true
lockScrollVerrouiller ou non le défilement de body (verrouillage assorti du piégeage du focus)boolean—true
beforeCloseInterception avant fermeture : ne continue qu'à l'appel de done(done: () => void) => void——
zIndexz-index (en son absence, chaîne d'incrémentation globale)number——
headerContenu de l'en-tête (remplace la barre de titre par défaut)ReactNode——
footerContenu du pied (zone des boutons)ReactNode——
themeVarsVariables de thème au niveau du composantRecord<string, string>——
sxRaccourci de mise en page (appliqué au panneau)SxProps——

Événements de Drawer​

ÉvénementDescriptionSignature du rappelÉquivalent Vue
onCloseDemande de fermeture (masque / Échap / bouton de fermeture), déclenchée après interception par beforeClose() => voidupdate:modelValue / close
onOpenDéclenché à l'ouverture (après montage du DOM, avant l'animation d'entrée)() => voidopen
onOpenedFin de l'animation d'ouverture() => voidopened
onCloseStartDemande de fermeture acceptée, début de l'animation de sortie() => void—
onClosedFin de l'animation de fermeture, après démontage du DOM() => voidclosed

ref​

forwardRef<LhDrawerInstance>. LhDrawerInstance expose close() (passe par l'interception beforeClose) et isOpen.

Le masque n'est pas cliquable par défaut

maskClosable vaut false par défaut (la valeur par défaut de canDrawerClose dans core refuse le clic sur le masque) afin d'éviter les manipulations involontaires ; closeOnClickModal de plus vaut true par défaut : il faut le déclarer explicitement lors d'une migration.

Piégeage du focus

Le focus n'est piégé (shouldDrawerTrapFocus) que lorsque lockScroll est activé : un tiroir sert souvent de panneau léger, et sans verrouillage du défilement on conserve la séquence de Tab du formulaire en arrière-plan. Le focus est rendu à la fermeture.

Direction de la taille

Un size numérique est normalisé en px ; pour les directions gauche / droite il s'applique à la width du panneau, pour les directions haut / bas à sa height.

Styles​

import '@lh-ui/react/style/drawer'