mirror of
https://github.com/shadcn-ui/ui.git
synced 2026-07-08 06:28:37 +00:00
* refactor(base-drawer): rewrite base drawer wrapper for @base-ui/react/drawer Replace vaul with @base-ui/react/drawer as the primitive behind the base drawer wrapper. Keep the public API aligned with the radix drawer shape while rewriting DrawerContent to compose Backdrop, Viewport, Popup, and Content internally. Keep the registry dependency change in the same commit so the wrapper rewrite lands as one source-level migration step. * refactor(drawer): move shared drawer direction rules from stylesheets to primitives Shared drawer styles previously owned direction-specific layout in CSS. With base and radix now exposing different direction attributes, keeping that logic in shared tokens would duplicate primitive-specific branching in the stylesheets. Move direction-specific layout into the base/radix drawer wrappers and leave shared CSS responsible only for visual surface styling. Also move handle visibility and header alignment into TSX, and unify the shared drawer token names to cn-drawer-*. * fix(base-drawer): migrate examples, blocks, and app consumers to render and swipeDirection Update in-repo base drawer consumers to the new wrapper API. Replace asChild usage with render, switch direction to swipeDirection, and align examples, blocks, app consumers, and docs with the new base drawer usage pattern. * chore: update registries * fix(drawer): update base marker example usage * fix(drawer): clean up base style selectors * docs: add migration docs * wip * fix: nested * feat: drawer * fix * fix * fix * fix: pointer events * fix: clean up radix drawers * fix: position --------- Co-authored-by: shadcn <m@shadcn.com>
86 lines
2.3 KiB
TypeScript
86 lines
2.3 KiB
TypeScript
"use client"
|
|
|
|
import * as React from "react"
|
|
|
|
import { cn } from "@/lib/utils"
|
|
import { useMediaQuery } from "@/hooks/use-media-query"
|
|
import { Button } from "@/styles/base-rhea/ui/button"
|
|
import {
|
|
Dialog,
|
|
DialogContent,
|
|
DialogDescription,
|
|
DialogHeader,
|
|
DialogTitle,
|
|
DialogTrigger,
|
|
} from "@/styles/base-rhea/ui/dialog"
|
|
import {
|
|
Drawer,
|
|
DrawerClose,
|
|
DrawerContent,
|
|
DrawerDescription,
|
|
DrawerFooter,
|
|
DrawerHeader,
|
|
DrawerTitle,
|
|
DrawerTrigger,
|
|
} from "@/styles/base-rhea/ui/drawer"
|
|
import { Input } from "@/styles/base-rhea/ui/input"
|
|
import { Label } from "@/styles/base-rhea/ui/label"
|
|
|
|
export function DrawerDialogDemo() {
|
|
const [open, setOpen] = React.useState(false)
|
|
const isDesktop = useMediaQuery("(min-width: 768px)")
|
|
|
|
if (isDesktop) {
|
|
return (
|
|
<Dialog open={open} onOpenChange={setOpen}>
|
|
<DialogTrigger render={<Button variant="outline" />}>
|
|
Edit Profile
|
|
</DialogTrigger>
|
|
<DialogContent className="sm:max-w-[425px]">
|
|
<DialogHeader>
|
|
<DialogTitle>Edit profile</DialogTitle>
|
|
<DialogDescription>
|
|
Make changes to your profile here. Click save when you're
|
|
done.
|
|
</DialogDescription>
|
|
</DialogHeader>
|
|
<ProfileForm />
|
|
</DialogContent>
|
|
</Dialog>
|
|
)
|
|
}
|
|
|
|
return (
|
|
<Drawer open={open} onOpenChange={setOpen}>
|
|
<DrawerTrigger render={<Button variant="outline" />}>
|
|
Edit Profile
|
|
</DrawerTrigger>
|
|
<DrawerContent>
|
|
<DrawerHeader className="text-left">
|
|
<DrawerTitle>Edit profile</DrawerTitle>
|
|
<DrawerDescription>
|
|
Make changes to your profile here. Click save when you're done.
|
|
</DrawerDescription>
|
|
</DrawerHeader>
|
|
<ProfileForm className="p-4" />
|
|
</DrawerContent>
|
|
</Drawer>
|
|
)
|
|
}
|
|
|
|
function ProfileForm({ className }: React.ComponentProps<"form">) {
|
|
return (
|
|
<form className={cn("grid items-start gap-6", className)}>
|
|
<div className="grid gap-3">
|
|
<Label htmlFor="email">Email</Label>
|
|
<Input type="email" id="email" defaultValue="shadcn@example.com" />
|
|
</div>
|
|
<div className="grid gap-3">
|
|
<Label htmlFor="username">Username</Label>
|
|
<Input id="username" defaultValue="@shadcn" />
|
|
</div>
|
|
<Button type="submit">Save changes</Button>
|
|
</form>
|
|
)
|
|
}
|