{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "dialog",
"title": "Dialog (Base UI)",
"description": "Animated modal dialog with spring-based scale and opacity transitions. Base UI flavor.",
"dependencies": [
"framer-motion",
"@base-ui/react"
],
"registryDependencies": [
"https://zeron-ui.vercel.app/r/surfaces.json",
"utils",
"https://zeron-ui.vercel.app/r/springs.json",
"https://zeron-ui.vercel.app/r/shape-context.json",
"https://zeron-ui.vercel.app/r/surface-context.json",
"https://zeron-ui.vercel.app/r/surface-classes.json",
"https://zeron-ui.vercel.app/r/icon-context.json",
"https://zeron-ui.vercel.app/r/button.json",
"https://zeron-ui.vercel.app/r/portal-container-context.json"
],
"files": [
{
"path": "src/components/ui/dialog.tsx",
"content": "\"use client\";\n\nimport {\n forwardRef,\n type ReactNode,\n type HTMLAttributes,\n} from \"react\";\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\";\nimport { motion } from \"framer-motion\";\nimport { cn } from \"@/lib/utils\";\nimport { useIcon } from \"@/lib/icon-context\";\nimport { spring } from \"@/lib/springs\";\nimport { useShape } from \"@/lib/shape-context\";\nimport {\n resolveSurface,\n SurfaceProvider,\n useSurface,\n} from \"@/lib/surface-context\";\nimport { surfaceClasses } from \"@/lib/surface-classes\";\nimport { Button } from \"@/components/ui/button\";\nimport { usePortalContainer } from \"@/lib/portal-container-context\";\n\ninterface DialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n modal?: boolean;\n children?: ReactNode;\n}\n\nfunction Dialog({\n children,\n open,\n defaultOpen,\n onOpenChange,\n modal,\n}: DialogProps) {\n // Base UI's Root handles controlled/uncontrolled state internally. We only\n // narrow the (open, eventDetails) callback to (open) for our public prop.\n return (\n onOpenChange?.(next)}\n modal={modal}\n >\n {children}\n \n );\n}\n\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogClose = DialogPrimitive.Close;\n\ninterface DialogContentProps extends HTMLAttributes {\n size?: \"sm\" | \"lg\";\n /** Portal target. When set, the overlay and panel render inside this element\n * (positioned `absolute`) instead of covering the viewport (`fixed`). Pair\n * with a `position: relative; overflow: hidden` container — and usually\n * `