Aller au contenu principal

Drawer

Drawer affiche un panneau lateral modal avec un voile, la gestion de la touche Echap et le focus sur son bouton de fermeture.

Éditeur en direct
function DrawerExample() {
  const [open, setOuvrir] = React.useState(false);

  return (
    <>
      <Button onClick={() => setOuvrir(true)}>Ouvrir drawer</Button>
      <Drawer isOpen={open} onClose={() => setOuvrir(false)} side="right">
        <h2 className="mt-2 text-xl font-bold">Your cart</h2>
        <p className="mt-2 text-muted-foreground">The drawer can contain any React content.</p>
      </Drawer>
    </>
  );
}
Résultat
Loading...
import { Button, Drawer } from "niom-parts";

<Button onClick={() => setOuvrir(true)}>Ouvrir drawer</Button>
<Drawer isOpen={open} onClose={() => setOuvrir(false)} side="right">
Drawer content
</Drawer>

Cas d'utilisation courants​

Les panneaux a gauche conviennent a la navigation ou aux filtres ; ceux a droite aux paniers et aux details contextuels.

Éditeur en direct
function DrawerUseCases() {
  const [side, setSide] = React.useState(null);

  return (
    <div className="flex flex-wrap gap-3">
      <Button variant="secondary" onClick={() => setSide("left")}>Ouvrir filters</Button>
      <Button onClick={() => setSide("right")}>Ouvrir cart</Button>
      <Drawer isOpen={side !== null} onClose={() => setSide(null)} side={side || "left"}>
        {side === "left" ? (
          <div className="grid gap-4">
            <h2 className="text-xl font-bold">Filters</h2>
            <CheckBoxGroup
              label="Availability"
              items={[{ label: "En stock", value: "stock" }, { label: "On sale", value: "sale" }]}
              value={["stock"]}
            />
          </div>
        ) : (
          <div className="grid gap-4">
            <h2 className="text-xl font-bold">Your cart</h2>
            <p className="text-muted-foreground">Two products are ready for checkout.</p>
            <Button>Checkout</Button>
          </div>
        )}
      </Drawer>
    </div>
  );
}
Résultat
Loading...

Proprietes​

ProprieteTypeValeur par defaut
isOpenbooleanrequis
onClose() => voidrequis
side"left" | "right""left"
childrenReactNode-
classNamestring-