{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "sheet",
  "title": "Sheet",
  "author": "Poyraz Avsever",
  "description": "Poyraz Soft Glass sheet component with standardized floating and overlay behavior.",
  "dependencies": [
    "@radix-ui/react-dialog@^1.1.15",
    "class-variance-authority@^0.7.1",
    "lucide-react@^0.574.0"
  ],
  "registryDependencies": [
    "@poyraz/poyraz-utils",
    "@poyraz/poyraz-theme",
    "@poyraz/poyraz-recipes"
  ],
  "files": [
    {
      "path": "registry/poyraz/ui/phase6/molecules/sheet.tsx",
      "content": "\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\nimport {\n  overlaySurfaceVariants,\n  overlayVariants,\n  type OverlayProps,\n  type OverlaySurfaceProps,\n} from \"@/components/ui/recipes\";\n\n/* ================================================================== */\n/*  SHEET — Full-height side panel (left / right / top / bottom)       */\n/* ================================================================== */\n\nconst Sheet = DialogPrimitive.Root;\n\nconst SheetTrigger = DialogPrimitive.Trigger;\n\nconst SheetClose = DialogPrimitive.Close;\n\nconst SheetPortal = DialogPrimitive.Portal;\n\n/* ── Overlay ──────────────────────────────────────────────────────── */\n\nconst SheetOverlay = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Overlay>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay> & OverlayProps\n>(({ className, tone, ...props }, ref) => (\n  <DialogPrimitive.Overlay\n    ref={ref}\n    className={cn(overlayVariants({ tone }), className)}\n    {...props}\n  />\n));\nSheetOverlay.displayName = \"SheetOverlay\";\n\n/* ── Content ──────────────────────────────────────────────────────── */\n\nconst sheetContentVariants = cva(\n  [\n    \"fixed z-50 gap-4 p-6\",\n    \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n    \"motion-reduce:duration-100\",\n  ].join(\" \"),\n  {\n    variants: {\n      side: {\n        top: \"inset-x-0 top-0 border-t-0 data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n        bottom:\n          \"inset-x-0 bottom-0 border-b-0 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 sm:max-w-sm border-l-0 data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left\",\n        right:\n          \"inset-y-0 right-0 h-full w-3/4 sm:max-w-sm border-r-0 data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right\",\n      },\n    },\n    defaultVariants: {\n      side: \"right\",\n    },\n  },\n);\n\nexport interface SheetContentProps\n  extends\n    React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n    VariantProps<typeof sheetContentVariants>,\n    OverlaySurfaceProps {\n  overlayTone?: NonNullable<OverlayProps[\"tone\"]>;\n  overlayClassName?: string;\n  showClose?: boolean;\n}\n\nconst SheetContent = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Content>,\n  SheetContentProps\n>(\n  (\n    {\n      side = \"right\",\n      className,\n      children,\n      surface,\n      radius,\n      overlayTone,\n      overlayClassName,\n      showClose = true,\n      ...props\n    },\n    ref,\n  ) => (\n    <SheetPortal>\n      <SheetOverlay tone={overlayTone} className={overlayClassName} />\n      <DialogPrimitive.Content\n        ref={ref}\n        className={cn(\n          overlaySurfaceVariants({ surface, radius }),\n          sheetContentVariants({ side }),\n          className,\n        )}\n        {...props}\n      >\n        {children}\n        {showClose && (\n          <DialogPrimitive.Close className=\"absolute right-4 top-4 cursor-pointer rounded-md p-1 opacity-70 ring-offset-background transition-[color,background-color,opacity,transform] duration-[var(--poyraz-motion-duration-fast)] ease-[var(--poyraz-motion-ease-out)] hover:bg-accent hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\">\n            <X className=\"h-4 w-4\" />\n            <span className=\"sr-only\">Close</span>\n          </DialogPrimitive.Close>\n        )}\n      </DialogPrimitive.Content>\n    </SheetPortal>\n  ),\n);\nSheetContent.displayName = \"SheetContent\";\n\n/* ── Header ───────────────────────────────────────────────────────── */\n\nconst SheetHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n  <div className={cn(\"flex flex-col space-y-2 text-left\", className)} {...props} />\n);\nSheetHeader.displayName = \"SheetHeader\";\n\n/* ── Footer ───────────────────────────────────────────────────────── */\n\nconst SheetFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\n      \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 mt-auto pt-4 border-t border-border\",\n      className,\n    )}\n    {...props}\n  />\n);\nSheetFooter.displayName = \"SheetFooter\";\n\n/* ── Title ────────────────────────────────────────────────────────── */\n\nconst SheetTitle = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Title>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Title\n    ref={ref}\n    className={cn(\"text-lg font-semibold leading-none tracking-tight text-foreground\", className)}\n    {...props}\n  />\n));\nSheetTitle.displayName = \"SheetTitle\";\n\n/* ── Description ──────────────────────────────────────────────────── */\n\nconst SheetDescription = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Description>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Description\n    ref={ref}\n    className={cn(\"text-sm text-muted-foreground\", className)}\n    {...props}\n  />\n));\nSheetDescription.displayName = \"SheetDescription\";\n\n/* ================================================================== */\n/*  EXPORTS                                                            */\n/* ================================================================== */\n\nexport {\n  Sheet,\n  SheetPortal,\n  SheetOverlay,\n  SheetTrigger,\n  SheetClose,\n  SheetContent,\n  SheetHeader,\n  SheetFooter,\n  SheetTitle,\n  SheetDescription,\n  sheetContentVariants,\n};\n",
      "type": "registry:ui",
      "target": "@ui/molecules/sheet.tsx"
    }
  ],
  "meta": {
    "category": "phase-6-interactive",
    "phase": "beta"
  },
  "type": "registry:ui"
}