import * as React from "react"; import { X } from "lucide-react"; export interface SheetProps { open?: boolean; onOpenChange?: (open: boolean) => void; children?: React.ReactNode; } export interface SheetTriggerProps { children?: React.ReactNode; asChild?: boolean; } export interface SheetContentProps { children?: React.ReactNode; className?: string; } export interface SheetHeaderProps { children?: React.ReactNode; className?: string; } export interface SheetTitleProps { children?: React.ReactNode; className?: string; } export interface SheetDescriptionProps { children?: React.ReactNode; className?: string; } const SheetContext = React.createContext<{ open?: boolean; onOpenChange?: (open: boolean) => void; }>({}); export function Sheet({ open, onOpenChange, children }: SheetProps): React.JSX.Element { const contextValue: { open?: boolean; onOpenChange?: (open: boolean) => void } = {}; if (open !== undefined) { contextValue.open = open; } if (onOpenChange !== undefined) { contextValue.onOpenChange = onOpenChange; } return {children}; } export function SheetTrigger({ children, asChild }: SheetTriggerProps): React.JSX.Element { const { onOpenChange } = React.useContext(SheetContext); if (asChild && React.isValidElement(children)) { return React.cloneElement(children, { onClick: () => onOpenChange?.(true), } as React.HTMLAttributes); } return ( ); } export function SheetContent({ children, className = "", }: SheetContentProps): React.JSX.Element | null { const { open, onOpenChange } = React.useContext(SheetContext); React.useEffect(() => { if (!open) { return; } const onKeyDown = (event: KeyboardEvent): void => { if (event.key === "Escape") { onOpenChange?.(false); } }; window.addEventListener("keydown", onKeyDown); return (): void => { window.removeEventListener("keydown", onKeyDown); }; }, [onOpenChange, open]); if (!open) { return null; } return (
{children}
); } export function SheetHeader({ children, className = "" }: SheetHeaderProps): React.JSX.Element { return
{children}
; } export function SheetTitle({ children, className = "" }: SheetTitleProps): React.JSX.Element { return

{children}

; } export function SheetDescription({ children, className = "", }: SheetDescriptionProps): React.JSX.Element { return

{children}

; }