Set isDismissable={false} on Drawer.Backdrop to prevent closing by clicking outside or dragging. The user must interact with the drawer's action buttons.
import { useOverlayState } from "@heroui/react";const state = useOverlayState({ defaultOpen: false, onOpenChange: (isOpen) => console.log(isOpen),});state.isOpen; // Current statestate.open(); // Open drawerstate.close(); // Close drawerstate.toggle(); // Toggle statestate.setOpen(); // Set state directly
Control the drawer using React's useState hook for simple state management.
Status: closed
With useOverlayState()
Use the useOverlayState hook for a cleaner API with convenient methods like open(), close(), and toggle().
Status: closed
import {Button, Drawer} from "@heroui/react";export function Basic() { return ( <Drawer>
import {Button, Drawer} from "@heroui/react";export function Placements() { const placements = ["bottom", "top", "left", "right"] as const;
import {Button, Drawer} from "@heroui/react";export function BackdropVariants() { const variants = ["opaque", "blur", "transparent"] as const;
import {Button, Drawer} from "@heroui/react";export function NonDismissable() { return ( <Drawer>
"use client";import {Button, Drawer, useOverlayState} from "@heroui/react";import React from "react";
import {Button, Drawer, Input, Label, TextField} from "@heroui/react";export function WithForm() { return ( <Drawer>
import {Button, Drawer} from "@heroui/react";export function ScrollableContent() { return ( <Drawer>
import type {ComponentType, SVGProps} from "react";import {Bars, Bell, Envelope, Gear, House, Magnifier, Person} from "@gravity-ui/icons";import {Button, Drawer} from "@heroui/react";