{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "alert-dialog",
  "title": "Alert Dialog",
  "author": "@fma-ui/ui",
  "description": "A modal dialog that interrupts the user with important content and expects an explicit response (e.g. confirming a destructive action) — unlike Dialog, it can't be dismissed by clicking outside or pressing Escape.",
  "dependencies": [
    "cn@^0.4.0",
    "react-aria-components@^1.21.1"
  ],
  "registryDependencies": [
    "@fma-ui/button"
  ],
  "files": [
    {
      "path": "src/core/alert-dialog/alert-dialog.tsx",
      "content": "\"use client\";\n\nimport { cn } from \"cn\";\nimport type * as React from \"react\";\nimport {\n  Dialog as AlertDialogPrimitive,\n  DialogTrigger as AlertDialogTriggerPrimitive,\n  type DialogTriggerProps as AlertDialogTriggerPrimitiveProps,\n  Heading,\n  ModalOverlay as ModalOverlayPrimitive,\n  type ModalOverlayProps as ModalOverlayPrimitiveProps,\n  Modal as ModalPrimitive,\n} from \"react-aria-components\";\n\nimport { Button } from \"@/core/button/button\";\n\nfunction AlertDialogTrigger({ ...props }: AlertDialogTriggerPrimitiveProps) {\n  return <AlertDialogTriggerPrimitive data-slot=\"alert-dialog-trigger\" {...props} />;\n}\n\nfunction AlertDialogOverlay({\n  className,\n  children,\n  ...props\n}: Omit<ModalOverlayPrimitiveProps, \"className\" | \"children\"> & {\n  className?: string;\n  children: React.ReactNode;\n}) {\n  return (\n    <ModalOverlayPrimitive\n      data-slot=\"alert-dialog-overlay\"\n      className={cn(\n        \"fixed inset-0 isolate z-50 bg-black/10 duration-100 data-entering:animate-in data-entering:fade-in-0 data-exiting:animate-out data-exiting:fade-out-0 supports-backdrop-filter:backdrop-blur-xs\",\n        className,\n      )}\n      {...props}\n    >\n      {children}\n    </ModalOverlayPrimitive>\n  );\n}\n\nfunction AlertDialog({\n  className,\n  size = \"default\",\n  children,\n  ...props\n}: Omit<ModalOverlayPrimitiveProps, \"className\" | \"children\"> &\n  Pick<React.ComponentProps<typeof ModalPrimitive>, \"isDismissable\"> & {\n    className?: string;\n    size?: \"default\" | \"sm\";\n    children: React.ReactNode;\n  }) {\n  return (\n    <AlertDialogOverlay {...props}>\n      <ModalPrimitive\n        data-slot=\"alert-dialog-content\"\n        data-size={size}\n        className={cn(\n          \"group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-entering:animate-in data-entering:fade-in-0 data-entering:zoom-in-95 data-exiting:animate-out data-exiting:fade-out-0 data-exiting:zoom-out-95 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm\",\n          className,\n        )}\n      >\n        <AlertDialogPrimitive\n          data-slot=\"alert-dialog\"\n          role=\"alertdialog\"\n          className=\"[display:inherit] [gap:inherit] outline-none\"\n        >\n          {children}\n        </AlertDialogPrimitive>\n      </ModalPrimitive>\n    </AlertDialogOverlay>\n  );\n}\n\nfunction AlertDialogContent({\n  className,\n  size = \"default\",\n  children,\n  ...props\n}: React.ComponentProps<typeof AlertDialog>) {\n  return (\n    <AlertDialog className={className} size={size} {...props}>\n      {children}\n    </AlertDialog>\n  );\n}\n\nfunction AlertDialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"alert-dialog-header\"\n      className={cn(\n        \"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction AlertDialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"alert-dialog-footer\"\n      className={cn(\n        \"-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction AlertDialogMedia({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"alert-dialog-media\"\n      className={cn(\n        \"mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction AlertDialogTitle({\n  className,\n  ...props\n}: Omit<React.ComponentProps<typeof Heading>, \"slot\">) {\n  return (\n    <Heading\n      slot=\"title\"\n      data-slot=\"alert-dialog-title\"\n      className={cn(\n        \"font-heading text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction AlertDialogDescription({\n  className,\n  ...props\n}: Omit<React.ComponentProps<\"div\">, \"slot\">) {\n  return (\n    <div\n      data-slot=\"alert-dialog-description\"\n      className={cn(\n        \"text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction AlertDialogAction({ className, ...props }: React.ComponentProps<typeof Button>) {\n  return (\n    <Button slot=\"close\" data-slot=\"alert-dialog-action\" className={cn(className)} {...props} />\n  );\n}\n\nfunction AlertDialogCancel({\n  className,\n  variant = \"outline\",\n  size = \"default\",\n  ...props\n}: React.ComponentProps<typeof Button>) {\n  return (\n    <Button\n      slot=\"close\"\n      data-slot=\"alert-dialog-cancel\"\n      className={cn(className)}\n      variant={variant}\n      size={size}\n      {...props}\n    />\n  );\n}\n\nexport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogMedia,\n  AlertDialogOverlay,\n  AlertDialogTitle,\n  AlertDialogTrigger,\n};\n",
      "type": "registry:component",
      "target": "components/fma-ui/alert-dialog.tsx"
    }
  ],
  "meta": {
    "status": "stable",
    "source": "shadcn",
    "tags": [
      "overlay",
      "modal",
      "confirmation",
      "react-aria"
    ]
  },
  "categories": [
    "overlay"
  ],
  "type": "registry:ui"
}