"use client"; import * as React from "react"; import { XIcon } from "lucide-react"; import { Dialog as SheetPrimitive } from "radix-ui"; import { useComposedRef } from "../lib/compose-refs"; import { applyOutsideDismissPolicy } from "../lib/outside-dismiss"; import { cn } from "../lib/utils"; function Sheet({ ...props }: React.ComponentProps) { return ; } function SheetTrigger({ ...props }: React.ComponentProps) { return ; } function SheetClose({ ...props }: React.ComponentProps) { return ; } function SheetPortal({ ...props }: React.ComponentProps) { return ; } function SheetOverlay({ className, ...props }: React.ComponentProps) { return ( ); } function SheetContent({ className, children, side = "right", showCloseButton = true, dismissOnOutsideClick, onInteractOutside, onPointerDownOutside, ref, ...props }: React.ComponentProps & { side?: "top" | "right" | "bottom" | "left"; showCloseButton?: boolean; /** Whether a click outside the sheet closes it. Unset, the sheet decides * from its contents: it stays open while it holds a form field — a stray * click on the page behind a form must not discard what the user typed — * and closes when it has nothing to lose. Pass a boolean to override the * detection. Escape and the close button close either way. */ dismissOnOutsideClick?: boolean; }) { const contentRef = React.useRef | null>(null); const composedRef = useComposedRef(ref, contentRef); return ( { onPointerDownOutside?.(event); applyOutsideDismissPolicy(event, dismissOnOutsideClick, contentRef.current); }} onInteractOutside={(event) => { onInteractOutside?.(event); applyOutsideDismissPolicy(event, dismissOnOutsideClick, contentRef.current); }} className={cn( "fixed z-50 flex flex-col gap-4 bg-background shadow-lg transition ease-in-out data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:animate-in data-[state=open]:duration-500", side === "right" && "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", side === "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", side === "top" && "inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top", side === "bottom" && "inset-x-0 bottom-0 h-auto border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom", className, )} {...props} > {children} {showCloseButton && ( Close )} ); } function SheetHeader({ className, ...props }: React.ComponentProps<"div">) { return (
); } function SheetFooter({ className, ...props }: React.ComponentProps<"div">) { return (
); } function SheetTitle({ className, ...props }: React.ComponentProps) { return ( ); } function SheetDescription({ className, ...props }: React.ComponentProps) { return ( ); } export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, };