{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "sheet",
  "title": "Sheet",
  "description": "Slide-over panel using Radix Dialog with side variants.",
  "dependencies": [
    "@radix-ui/react-dialog",
    "class-variance-authority",
    "lucide-react"
  ],
  "registryDependencies": ["@glasswave/button"],
  "files": [
    {
      "path": "registry/glasswave/ui/sheet.tsx",
      "content": "\"use client\";\n\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Button } from \"@/components/ui/button\";\n\nexport const Sheet = SheetPrimitive.Root;\nexport const SheetTrigger = SheetPrimitive.Trigger;\nexport const SheetClose = SheetPrimitive.Close;\nexport const SheetPortal = SheetPrimitive.Portal;\n\nexport const SheetOverlay = forwardRef<\n  HTMLDivElement,\n  React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n  <SheetPrimitive.Overlay\n    className={cn(\n      \"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n      className,\n    )}\n    {...props}\n    ref={ref}\n  />\n));\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\n\nconst sheetContentVariants = cva(\n  cn(\n    \"bg-white dark:bg-zinc-900 text-zinc-900 dark:text-zinc-50\",\n    \"fixed z-50 flex flex-col gap-4 p-6 shadow-lg transition ease-in-out\",\n    \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n  ),\n  {\n    variants: {\n      side: {\n        top: \"inset-x-0 top-0 rounded-b-[32px] border-b border-zinc-200 dark:border-white/10 data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n        bottom:\n          \"inset-x-0 bottom-0 rounded-t-[32px] border-t border-zinc-200 dark:border-white/10 data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n        left: \"inset-y-0 left-0 h-full w-3/4 max-w-sm rounded-r-[32px] border-r border-zinc-200 dark:border-white/10 data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-md\",\n        right:\n          \"inset-y-0 right-0 h-full w-3/4 max-w-sm rounded-l-[32px] border-l border-zinc-200 dark:border-white/10 data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-md\",\n      },\n    },\n    defaultVariants: {\n      side: \"right\",\n    },\n  },\n);\n\nexport interface SheetContentProps\n  extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n    VariantProps<typeof sheetContentVariants> {}\n\nexport const SheetContent = forwardRef<HTMLDivElement, SheetContentProps>(\n  ({ side = \"right\", className, children, ...props }, ref) => (\n    <SheetPortal>\n      <SheetOverlay />\n      <SheetPrimitive.Content\n        ref={ref}\n        className={cn(sheetContentVariants({ side }), className)}\n        {...props}\n      >\n        {children}\n        <Button\n          asChild\n          variant=\"glass\"\n          size=\"icon\"\n          className=\"absolute right-4 top-4\"\n        >\n          <SheetPrimitive.Close>\n            <X className=\"size-4\" />\n            <span className=\"sr-only\">Close</span>\n          </SheetPrimitive.Close>\n        </Button>\n      </SheetPrimitive.Content>\n    </SheetPortal>\n  ),\n);\nSheetContent.displayName = SheetPrimitive.Content.displayName;\n\nexport const SheetHeader = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\"flex flex-col gap-1.5 text-center sm:text-left\", className)}\n    {...props}\n  />\n);\nSheetHeader.displayName = \"SheetHeader\";\n\nexport const SheetFooter = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\n      \"mt-auto flex flex-col gap-2 sm:flex-row sm:justify-end\",\n      className,\n    )}\n    {...props}\n  />\n);\nSheetFooter.displayName = \"SheetFooter\";\n\nexport const SheetTitle = forwardRef<\n  HTMLHeadingElement,\n  React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n  <SheetPrimitive.Title\n    ref={ref}\n    className={cn(\"text-lg font-semibold text-current\", className)}\n    {...props}\n  />\n));\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\n\nexport const SheetDescription = forwardRef<\n  HTMLParagraphElement,\n  React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n  <SheetPrimitive.Description\n    ref={ref}\n    className={cn(\"text-sm text-current/70\", className)}\n    {...props}\n  />\n));\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}
