{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "glass-dialog",
  "title": "Glass Dialog",
  "author": "Alex Chih (https://alexchih.com)",
  "description": "Modal dialog as a glass veil — blurred translucent panel over a soft scrim, built on Radix Dialog.",
  "dependencies": [
    "radix-ui",
    "lucide-react"
  ],
  "registryDependencies": [
    "https://washiveil.alexchih.com/r/theme.json"
  ],
  "files": [
    {
      "path": "registry/washiveil/ui/glass-dialog.tsx",
      "content": "'use client'\n\nimport * as React from 'react'\nimport { Dialog as DialogPrimitive } from 'radix-ui'\nimport { X } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst GlassDialog = DialogPrimitive.Root\n\nconst GlassDialogTrigger = DialogPrimitive.Trigger\n\nconst GlassDialogPortal = DialogPrimitive.Portal\n\nconst GlassDialogClose = DialogPrimitive.Close\n\nconst GlassDialogOverlay = React.forwardRef<\n  React.ComponentRef<typeof DialogPrimitive.Overlay>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Overlay\n    ref={ref}\n    className={cn(\n      'fixed inset-0 z-50 bg-deep/20 backdrop-blur-sm dark:bg-black/40 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  />\n))\nGlassDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst GlassDialogContent = React.forwardRef<\n  React.ComponentRef<typeof DialogPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n  <GlassDialogPortal>\n    <GlassDialogOverlay />\n    <DialogPrimitive.Content\n      ref={ref}\n      className={cn(\n        'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 rounded-3xl border border-glass-edge bg-glass-stronger p-6 backdrop-blur-2xl backdrop-saturate-150 shadow-[0_16px_48px_rgba(28,25,20,0.12)] duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n        className,\n      )}\n      {...props}\n    >\n      {children}\n      <DialogPrimitive.Close className=\"absolute right-4 top-4 grid size-6 place-items-center rounded-full text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none\">\n        <X className=\"size-4\" />\n        <span className=\"sr-only\">Close</span>\n      </DialogPrimitive.Close>\n    </DialogPrimitive.Content>\n  </GlassDialogPortal>\n))\nGlassDialogContent.displayName = DialogPrimitive.Content.displayName\n\nfunction GlassDialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n  return <div className={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)} {...props} />\n}\nGlassDialogHeader.displayName = 'GlassDialogHeader'\n\nfunction GlassDialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n  return <div className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)} {...props} />\n}\nGlassDialogFooter.displayName = 'GlassDialogFooter'\n\nconst GlassDialogTitle = React.forwardRef<\n  React.ComponentRef<typeof DialogPrimitive.Title>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Title\n    ref={ref}\n    className={cn('font-display text-lg font-medium leading-none tracking-tight', className)}\n    {...props}\n  />\n))\nGlassDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst GlassDialogDescription = React.forwardRef<\n  React.ComponentRef<typeof DialogPrimitive.Description>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Description ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n))\nGlassDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n  GlassDialog,\n  GlassDialogPortal,\n  GlassDialogOverlay,\n  GlassDialogTrigger,\n  GlassDialogClose,\n  GlassDialogContent,\n  GlassDialogHeader,\n  GlassDialogFooter,\n  GlassDialogTitle,\n  GlassDialogDescription,\n}\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}