1- import { Sheet } from "shadcn/ui" ;
2-
3- const SheetComponent = ( ) => {
4- return (
5- < Sheet >
6- < Sheet . Trigger > Open Sheet</ Sheet . Trigger >
7- < Sheet . Content >
8- < Sheet . Close > Close</ Sheet . Close >
9- < h1 > Sheet Content</ h1 >
10- </ Sheet . Content >
11- </ Sheet >
12- ) ;
13- } ;
14-
15- export default SheetComponent ;
1+ "use client"
2+
3+ import * as React from "react"
4+ import * as SheetPrimitive from "@radix-ui/react-dialog"
5+ import { cva , type VariantProps } from "class-variance-authority"
6+ import { X } from "lucide-react"
7+
8+ import { cn } from "@/lib/utils"
9+
10+ const Sheet = SheetPrimitive . Root
11+
12+ const SheetTrigger = SheetPrimitive . Trigger
13+
14+ const SheetClose = SheetPrimitive . Close
15+
16+ const SheetPortal = SheetPrimitive . Portal
17+
18+ const SheetOverlay = React . forwardRef <
19+ React . ElementRef < typeof SheetPrimitive . Overlay > ,
20+ React . ComponentPropsWithoutRef < typeof SheetPrimitive . Overlay >
21+ > ( ( { className, ...props } , ref ) => (
22+ < SheetPrimitive . Overlay
23+ className = { cn (
24+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0" ,
25+ className
26+ ) }
27+ { ...props }
28+ ref = { ref }
29+ />
30+ ) )
31+ SheetOverlay . displayName = SheetPrimitive . Overlay . displayName
32+
33+ const sheetVariants = cva (
34+ "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500" ,
35+ {
36+ variants : {
37+ side : {
38+ top : "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top" ,
39+ bottom :
40+ "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom" ,
41+ left : "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm" ,
42+ right :
43+ "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm" ,
44+ } ,
45+ } ,
46+ defaultVariants : {
47+ side : "right" ,
48+ } ,
49+ }
50+ )
51+
52+ interface SheetContentProps
53+ extends React . ComponentPropsWithoutRef < typeof SheetPrimitive . Content > ,
54+ VariantProps < typeof sheetVariants > { }
55+
56+ const SheetContent = React . forwardRef <
57+ React . ElementRef < typeof SheetPrimitive . Content > ,
58+ SheetContentProps
59+ > ( ( { side = "right" , className, children, ...props } , ref ) => (
60+ < SheetPortal >
61+ < SheetOverlay />
62+ < SheetPrimitive . Content
63+ ref = { ref }
64+ className = { cn ( sheetVariants ( { side } ) , className ) }
65+ { ...props }
66+ >
67+ { children }
68+ < SheetPrimitive . Close className = "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary" >
69+ < X className = "h-4 w-4" />
70+ < span className = "sr-only" > Close</ span >
71+ </ SheetPrimitive . Close >
72+ </ SheetPrimitive . Content >
73+ </ SheetPortal >
74+ ) )
75+ SheetContent . displayName = SheetPrimitive . Content . displayName
76+
77+ const SheetHeader = ( {
78+ className,
79+ ...props
80+ } : React . HTMLAttributes < HTMLDivElement > ) => (
81+ < div
82+ className = { cn (
83+ "flex flex-col space-y-2 text-center sm:text-left" ,
84+ className
85+ ) }
86+ { ...props }
87+ />
88+ )
89+ SheetHeader . displayName = "SheetHeader"
90+
91+ const SheetFooter = ( {
92+ className,
93+ ...props
94+ } : React . HTMLAttributes < HTMLDivElement > ) => (
95+ < div
96+ className = { cn (
97+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2" ,
98+ className
99+ ) }
100+ { ...props }
101+ />
102+ )
103+ SheetFooter . displayName = "SheetFooter"
104+
105+ const SheetTitle = React . forwardRef <
106+ React . ElementRef < typeof SheetPrimitive . Title > ,
107+ React . ComponentPropsWithoutRef < typeof SheetPrimitive . Title >
108+ > ( ( { className, ...props } , ref ) => (
109+ < SheetPrimitive . Title
110+ ref = { ref }
111+ className = { cn ( "text-lg font-semibold text-foreground" , className ) }
112+ { ...props }
113+ />
114+ ) )
115+ SheetTitle . displayName = SheetPrimitive . Title . displayName
116+
117+ const SheetDescription = React . forwardRef <
118+ React . ElementRef < typeof SheetPrimitive . Description > ,
119+ React . ComponentPropsWithoutRef < typeof SheetPrimitive . Description >
120+ > ( ( { className, ...props } , ref ) => (
121+ < SheetPrimitive . Description
122+ ref = { ref }
123+ className = { cn ( "text-sm text-muted-foreground" , className ) }
124+ { ...props }
125+ />
126+ ) )
127+ SheetDescription . displayName = SheetPrimitive . Description . displayName
128+
129+ export {
130+ Sheet ,
131+ SheetPortal ,
132+ SheetOverlay ,
133+ SheetTrigger ,
134+ SheetClose ,
135+ SheetContent ,
136+ SheetHeader ,
137+ SheetFooter ,
138+ SheetTitle ,
139+ SheetDescription ,
140+ }
0 commit comments