| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- "use client"
- import * as React from "react"
- import { Drawer as DrawerPrimitive } from "vaul"
- import { cn } from "@/lib/utils"
- function Drawer({
- ...props
- }: React.ComponentProps<typeof DrawerPrimitive.Root>) {
- return <DrawerPrimitive.Root data-slot="drawer" {...props} />
- }
- function DrawerTrigger({
- ...props
- }: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {
- return <DrawerPrimitive.Trigger data-slot="drawer-trigger" {...props} />
- }
- function DrawerPortal({
- ...props
- }: React.ComponentProps<typeof DrawerPrimitive.Portal>) {
- return <DrawerPrimitive.Portal data-slot="drawer-portal" {...props} />
- }
- function DrawerClose({
- ...props
- }: React.ComponentProps<typeof DrawerPrimitive.Close>) {
- return <DrawerPrimitive.Close data-slot="drawer-close" {...props} />
- }
- function DrawerOverlay({
- className,
- ...props
- }: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {
- return (
- <DrawerPrimitive.Overlay
- data-slot="drawer-overlay"
- className={cn(
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
- className
- )}
- {...props}
- />
- )
- }
- function DrawerContent({
- className,
- children,
- ...props
- }: React.ComponentProps<typeof DrawerPrimitive.Content>) {
- return (
- <DrawerPortal data-slot="drawer-portal">
- <DrawerOverlay />
- <DrawerPrimitive.Content
- data-slot="drawer-content"
- className={cn(
- "group/drawer-content bg-background fixed z-50 flex h-auto flex-col",
- "data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b",
- "data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t",
- "data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm",
- "data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm",
- className
- )}
- {...props}
- >
- <div className="bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block" />
- {children}
- </DrawerPrimitive.Content>
- </DrawerPortal>
- )
- }
- function DrawerHeader({ className, ...props }: React.ComponentProps<"div">) {
- return (
- <div
- data-slot="drawer-header"
- className={cn(
- "flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left",
- className
- )}
- {...props}
- />
- )
- }
- function DrawerFooter({ className, ...props }: React.ComponentProps<"div">) {
- return (
- <div
- data-slot="drawer-footer"
- className={cn("mt-auto flex flex-col gap-2 p-4", className)}
- {...props}
- />
- )
- }
- function DrawerTitle({
- className,
- ...props
- }: React.ComponentProps<typeof DrawerPrimitive.Title>) {
- return (
- <DrawerPrimitive.Title
- data-slot="drawer-title"
- className={cn("text-foreground font-semibold", className)}
- {...props}
- />
- )
- }
- function DrawerDescription({
- className,
- ...props
- }: React.ComponentProps<typeof DrawerPrimitive.Description>) {
- return (
- <DrawerPrimitive.Description
- data-slot="drawer-description"
- className={cn("text-muted-foreground text-sm", className)}
- {...props}
- />
- )
- }
- export {
- Drawer,
- DrawerPortal,
- DrawerOverlay,
- DrawerTrigger,
- DrawerClose,
- DrawerContent,
- DrawerHeader,
- DrawerFooter,
- DrawerTitle,
- DrawerDescription,
- }
|