{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "dependencies": [
    "react-aria-components",
    "lucide-react"
  ],
  "files": [
    {
      "content": "export * as Sheet from \"./namespace\";\nexport * from \"./sheet\";\nexport * from \"./styles\";\n",
      "path": "src/registry/ui/sheet/index.ts",
      "type": "registry:ui"
    },
    {
      "content": "\"use client\";\n\nimport type { VariantProps } from \"cva\";\nimport { XIcon } from \"lucide-react\";\nimport {\n  Button,\n  composeRenderProps,\n  Dialog,\n  DialogTrigger,\n  Heading,\n  Modal,\n  ModalOverlay,\n} from \"react-aria-components\";\nimport { SheetStyles } from \"./styles\";\n\nexport interface SheetRootProps\n  extends React.ComponentProps<typeof DialogTrigger> {}\n\nexport function SheetRoot(props: SheetRootProps) {\n  return <DialogTrigger data-slot=\"sheet-root\" {...props} />;\n}\n\nexport interface SheetOverlayProps\n  extends React.ComponentProps<typeof ModalOverlay> {\n  /**\n   * Whether to close the modal when the user interacts outside it.\n   * @default true\n   */\n  isDismissable?: boolean;\n}\n\nexport function SheetOverlay({\n  className,\n  isDismissable = true,\n  ...props\n}: SheetOverlayProps) {\n  return (\n    <ModalOverlay\n      className={composeRenderProps(className, (className) =>\n        SheetStyles.Overlay({ className })\n      )}\n      data-slot=\"sheet-overlay\"\n      isDismissable={isDismissable}\n      {...props}\n    />\n  );\n}\n\nexport interface SheetContentProps\n  extends React.ComponentProps<typeof Dialog> {}\n\nexport function SheetContent({ className, ...props }: SheetContentProps) {\n  return (\n    <Dialog\n      className={SheetStyles.Content({ className })}\n      data-slot=\"sheet-content\"\n      {...props}\n    />\n  );\n}\n\nexport interface SheetCloseProps\n  extends Omit<React.ComponentProps<typeof Button>, \"children\" | \"slot\"> {}\n\nexport function SheetClose({ className, ...props }: SheetCloseProps) {\n  return (\n    <Button\n      {...props}\n      className={composeRenderProps(className, (className) =>\n        SheetStyles.Close({ className })\n      )}\n      data-slot=\"sheet-close\"\n      slot=\"close\"\n    >\n      <XIcon />\n      <span className=\"sr-only\">Close</span>\n    </Button>\n  );\n}\n\nexport interface SheetModalProps\n  extends React.ComponentProps<typeof Modal>,\n    VariantProps<typeof SheetStyles.Modal> {}\n\nexport function SheetModal({\n  className,\n  side = \"right\",\n  ...props\n}: SheetModalProps) {\n  return (\n    <Modal\n      className={composeRenderProps(className, (className) =>\n        SheetStyles.Modal({ className, side })\n      )}\n      data-slot=\"sheet-content\"\n      {...props}\n    />\n  );\n}\n\nexport interface SheetHeaderProps extends React.ComponentProps<\"div\"> {}\n\nexport function SheetHeader({ className, ...props }: SheetHeaderProps) {\n  return (\n    <div\n      className={SheetStyles.Header({ className })}\n      data-slot=\"sheet-header\"\n      {...props}\n    />\n  );\n}\n\nexport interface SheetFooterProps extends React.ComponentProps<\"div\"> {}\n\nexport function SheetFooter({ className, ...props }: SheetFooterProps) {\n  return (\n    <div\n      className={SheetStyles.Footer({ className })}\n      data-slot=\"sheet-footer\"\n      {...props}\n    />\n  );\n}\n\nexport interface SheetTitleProps extends React.ComponentProps<typeof Heading> {}\n\nexport function SheetTitle({ className, ...props }: SheetTitleProps) {\n  return (\n    <Heading\n      className={SheetStyles.Title({ className })}\n      data-slot=\"sheet-title\"\n      slot=\"title\"\n      {...props}\n    />\n  );\n}\n\nexport interface SheetDescriptionProps extends React.ComponentProps<\"p\"> {}\n\nexport function SheetDescription({\n  className,\n  ...props\n}: SheetDescriptionProps) {\n  return (\n    <p\n      className={SheetStyles.Description({ className })}\n      data-slot=\"sheet-description\"\n      {...props}\n    />\n  );\n}\n",
      "path": "src/registry/ui/sheet/sheet.tsx",
      "type": "registry:ui"
    },
    {
      "content": "import { cva } from \"~/registry/lib/cva\";\n\nexport const SheetStyles = {\n  Close: cva({\n    base: [\n      \"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity\",\n      \"hover:opacity-100\",\n      \"focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n      \"disabled:pointer-events-none\",\n      \"[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n    ],\n  }),\n  Content: cva({\n    base: [\"flex h-full flex-col gap-4 outline-none\"],\n  }),\n  Description: cva({\n    base: [\"text-muted-foreground text-sm\"],\n  }),\n  Footer: cva({\n    base: [\"mt-auto flex flex-col gap-2 p-4\"],\n  }),\n  Header: cva({\n    base: [\"flex flex-col gap-1.5 p-4\"],\n  }),\n  Modal: cva({\n    base: [\n      \"fixed z-50 flex flex-col gap-4 bg-background shadow-lg transition\",\n      \"motion-ease-in-out entering:motion-duration-500 exiting:motion-duration-300\",\n    ],\n    variants: {\n      side: {\n        bottom: [\n          \"inset-x-0 bottom-0 h-auto border-t\",\n          \"entering:motion-translate-y-in-100\",\n          \"exiting:motion-translate-y-out-100\",\n        ],\n        left: [\n          \"inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n          \"entering:-motion-translate-x-in-100\",\n          \"exiting:-motion-translate-x-out-100\",\n        ],\n        right: [\n          \"inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n          \"entering:motion-translate-x-in-100\",\n          \"exiting:motion-translate-x-out-100\",\n        ],\n        top: [\n          \"inset-x-0 top-0 h-auto border-b\",\n          \"entering:-motion-translate-y-in-100\",\n          \"exiting:-motion-translate-y-out-100\",\n        ],\n      },\n    },\n  }),\n  Overlay: cva({\n    base: [\n      \"fixed inset-0 z-50\",\n      \"entering:motion-opacity-in entering:motion-duration-500 exiting:motion-duration-300 motion-ease-in-out exiting:motion-opacity-out\",\n    ],\n    defaultVariants: {\n      isBlurred: false,\n    },\n    variants: {\n      isBlurred: {\n        false: [\"bg-black/15 dark:bg-black/60\"],\n        true: [\"backdrop-blur\"],\n      },\n    },\n  }),\n  Title: cva({\n    base: [\"font-semibold text-foreground\"],\n  }),\n};\n",
      "path": "src/registry/ui/sheet/styles.ts",
      "type": "registry:ui"
    },
    {
      "content": "export {\n  SheetClose as Close,\n  SheetContent as Content,\n  SheetDescription as Description,\n  SheetFooter as Footer,\n  SheetHeader as Header,\n  SheetModal as Modal,\n  SheetOverlay as Overlay,\n  SheetRoot as Root,\n  SheetTitle as Title,\n} from \"./sheet\";\n",
      "path": "src/registry/ui/sheet/namespace.ts",
      "type": "registry:ui"
    }
  ],
  "name": "sheet",
  "registryDependencies": [
    "@kanpeki/cva",
    "@kanpeki/custom-plugin"
  ],
  "type": "registry:ui"
}