left
Open the left-edge drawer. Escape, the backdrop, and Done all dismiss this example.
position="left" closeOnTapOutside
WelkUI!REACT EDITIONExplore live variants, compare states, and learn every prop. Pick a component to start.
A controlled native modal panel that slides in from an edge with comic motion. It contains focus, locks body scrolling, and restores focus after closing. onClose requests a parent state update; closing keeps the panel mounted briefly for its exit animation.
import { useState } from "react";
import { WelkButton, WelkDrawer } from "@welkui/react";
const [open, setOpen] = useState(false);
<WelkButton onClick={() => setOpen(true)}>Open drawer</WelkButton>
<WelkDrawer open={open} onClose={() => setOpen(false)}
title="Mission control" position="right" closeOnTapOutside>
Your settings go here.
</WelkDrawer>Import @welkui/react/styles.css once in your app. Stateful snippets belong inside a React component.
These are real components, not screenshots. Compare their appearance and try the controls. Key props below each preview show what changes; use the usage example above for imports and component setup.
Open the left-edge drawer. Escape, the backdrop, and Done all dismiss this example.
position="left" closeOnTapOutsideOpen the right-edge drawer. Escape, the backdrop, and Done all dismiss this example.
position="right" closeOnTapOutsideOpen the top-edge drawer. Escape, the backdrop, and Done all dismiss this example.
position="top" closeOnTapOutsideOpen the bottom-edge drawer. Escape, the backdrop, and Done all dismiss this example.
position="bottom" closeOnTapOutsideRequired props are marked in the default column. Other props are optional. ReactNode accepts text or JSX.
| Prop | Type | Default | Description |
|---|---|---|---|
open | boolean | Required | Controlled visibility. Set false when dismissal is requested. |
onClose | () => void | Required | Dismissal callback; the parent must update open. |
title | ReactNode | Required | Visible title and accessible dialog name. |
children | ReactNode | Unset | Panel content. |
closeOnTapOutside | boolean | false | Allows dismissal by pressing and releasing on the backdrop. |
className | string | Unset | Additional CSS class on the component root. |
position | "left" | "right" | "top" | "bottom" | "right" | Entry edge and panel placement. |
closeLabel | string | "Close drawer" | Accessible name for the close button. |
This component supports the props listed above, not arbitrary native HTML attributes.
Import @welkui/react/styles.css once in your app entry or Next.js root layout. The previews use the default theme; override --welk-* CSS tokens in your app to customize it.
For Next.js, put hooks and event handlers in a component beginning with "use client". Keep state local to the component using the control. The library preserves its client boundaries and uses your installed React version.
Use defaultValue or defaultChecked for uncontrolled fields, or a state value and its change callback for controlled fields. Do not switch between these modes during the lifetime of a field.
Modal and notification examples start closed: use their Try buttons to see them. Disabled examples are deliberately non-interactive. Validate forms, uploads, authentication, and server responses in your application; these components only provide UI.