{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "dependencies": [
    "react-aria-components",
    "lucide-react"
  ],
  "files": [
    {
      "content": "export * from \"./dialog\";\nexport * as Dialog from \"./namespace\";\nexport * from \"./styles\";\n",
      "path": "src/registry/ui/dialog/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 { DialogStyles } from \"./styles\";\n\nexport interface DialogRootProps\n  extends React.ComponentProps<typeof DialogTrigger> {}\n\nexport function DialogRoot(props: DialogRootProps) {\n  return <DialogTrigger data-slot=\"dialog-root\" {...props} />;\n}\n\nexport interface DialogModalProps\n  extends React.ComponentProps<typeof Modal>,\n    VariantProps<typeof DialogStyles.Modal> {\n  /**\n   * Whether to close the modal when the user interacts outside it.\n   * @default true\n   */\n  isDismissable?: boolean;\n}\n\nexport function DialogModal({\n  className,\n  isDismissable = true,\n  ...props\n}: DialogModalProps) {\n  return (\n    <Modal\n      className={composeRenderProps(className, (className) =>\n        DialogStyles.Modal({ className })\n      )}\n      data-slot=\"dialog-modal\"\n      isDismissable={isDismissable}\n      {...props}\n    />\n  );\n}\n\nexport interface DialogOverlayProps\n  extends React.ComponentProps<typeof ModalOverlay>,\n    VariantProps<typeof DialogStyles.Overlay> {\n  /**\n   * Whether to close the modal when the user interacts outside it.\n   * @default true\n   */\n  isDismissable?: boolean;\n}\n\nexport function DialogOverlay({\n  className,\n  isBlurred,\n  isDismissable = true,\n  ...props\n}: DialogOverlayProps) {\n  return (\n    <ModalOverlay\n      className={composeRenderProps(className, (className) =>\n        DialogStyles.Overlay({ className, isBlurred })\n      )}\n      data-slot=\"dialog-overlay\"\n      isDismissable={isDismissable}\n      {...props}\n    />\n  );\n}\n\nexport interface DialogContentProps\n  extends React.ComponentProps<typeof Dialog> {}\n\nexport function DialogContent({ className, ...props }: DialogContentProps) {\n  return (\n    <Dialog\n      className={DialogStyles.Content({ className })}\n      data-slot=\"dialog-content\"\n      {...props}\n    />\n  );\n}\n\nexport interface DialogCloseProps\n  extends Omit<React.ComponentProps<typeof Button>, \"children\" | \"slot\"> {}\n\nexport function DialogClose({ className, ...props }: DialogCloseProps) {\n  return (\n    <Button\n      {...props}\n      className={composeRenderProps(className, (className) =>\n        DialogStyles.Close({ className })\n      )}\n      data-slot=\"dialog-close\"\n      slot=\"close\"\n    >\n      <XIcon />\n      <span className=\"sr-only\">Close</span>\n    </Button>\n  );\n}\n\nexport interface DialogHeaderProps extends React.ComponentProps<\"div\"> {}\n\nexport function DialogHeader({ className, ...props }: DialogHeaderProps) {\n  return (\n    <div\n      className={DialogStyles.Header({ className })}\n      data-slot=\"dialog-header\"\n      {...props}\n    />\n  );\n}\n\nexport interface DialogFooterProps extends React.ComponentProps<\"div\"> {}\n\nexport function DialogFooter({ className, ...props }: DialogFooterProps) {\n  return (\n    <div\n      className={DialogStyles.Footer({ className })}\n      data-slot=\"dialog-footer\"\n      {...props}\n    />\n  );\n}\n\nexport interface DialogTitleProps\n  extends React.ComponentProps<typeof Heading> {}\n\nexport function DialogTitle({ className, ...props }: DialogTitleProps) {\n  return (\n    <Heading\n      className={DialogStyles.Title({ className })}\n      data-slot=\"dialog-title\"\n      slot=\"title\"\n      {...props}\n    />\n  );\n}\n\nexport interface DialogDescriptionProps extends React.ComponentProps<\"p\"> {}\n\nexport function DialogDescription({\n  className,\n  ...props\n}: DialogDescriptionProps) {\n  return (\n    <p\n      className={DialogStyles.Description({ className })}\n      data-slot=\"dialog-description\"\n      {...props}\n    />\n  );\n}\n",
      "path": "src/registry/ui/dialog/dialog.tsx",
      "type": "registry:ui"
    },
    {
      "content": "import { cva } from \"~/registry/lib/cva\";\n\nexport const DialogStyles = {\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: [\"grid gap-4 outline-none\"],\n  }),\n  Description: cva({\n    base: [\"text-muted-foreground text-sm\"],\n  }),\n  Footer: cva({\n    base: [\"flex flex-col-reverse\", \"sm:flex-row sm:justify-end sm:space-x-2\"],\n  }),\n  Header: cva({\n    base: [\"flex flex-col gap-2 text-center sm:text-left\"],\n  }),\n  Modal: cva({\n    base: [\n      \"fixed z-50 w-full bg-background p-4 shadow-lg outline-none\",\n      \"entering:motion-opacity-in motion-duration-200 exiting:motion-opacity-out motion-ease\",\n      \"sm:rounded-lg\",\n      \"top-1/2 left-1/2 max-w-lg -translate-x-1/2 -translate-y-1/2 border p-6\",\n      \"entering:motion-scale-in-95\",\n      \"exiting:motion-scale-out-95\",\n    ],\n  }),\n  Overlay: cva({\n    base: [\n      \"fixed inset-0 z-50\",\n      \"entering:motion-opacity-in motion-duration-200 motion-ease 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-lg leading-none\"],\n  }),\n};\n",
      "path": "src/registry/ui/dialog/styles.ts",
      "type": "registry:ui"
    },
    {
      "content": "export {\n  DialogClose as Close,\n  DialogContent as Content,\n  DialogDescription as Description,\n  DialogFooter as Footer,\n  DialogHeader as Header,\n  DialogModal as Modal,\n  DialogOverlay as Overlay,\n  DialogRoot as Root,\n  DialogTitle as Title,\n} from \"./dialog\";\n",
      "path": "src/registry/ui/dialog/namespace.ts",
      "type": "registry:ui"
    }
  ],
  "name": "dialog",
  "registryDependencies": [
    "@kanpeki/cva",
    "@kanpeki/custom-plugin"
  ],
  "type": "registry:ui"
}