{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "dialog",
  "type": "registry:ui",
  "title": "Dialog",
  "description": "A modal layer: a scrim behind a surface; focus stays inside, Escape and a click outside close it.",
  "dependencies": [
    "@base-ui/react@^1.8.0"
  ],
  "registryDependencies": [
    "https://metalui.dev/r/tokens.json"
  ],
  "files": [
    {
      "path": "packages/metalui/src/components/dialog/dialog.tsx",
      "type": "registry:ui",
      "target": "components/metalui/dialog/dialog.tsx",
      "content": "'use client';\n\nimport * as React from 'react';\nimport { Dialog as BaseDialog } from '@base-ui/react/dialog';\nimport { Surface, type SurfaceMaterial, type SurfaceRadius } from '../surface/surface';\n\n/* DIALOG: a modal layer on Base UI Dialog. A scrim behind a surface near the top of the viewport;\n * it rises a step on the surface spring and closes on release. Focus stays inside; Escape and a\n * click outside close it. Slots: Dialog.Root, Dialog.Popup. */\n\n/* Styled with the theme's utilities (the dialog recipe): the scrim fades and the popup rises a step on\n * the surface spring, and leaves on release. */\nconst SCRIM = 'mu-dialog-scrim fixed inset-0 z-dialog-scrim-z bg-dialog-scrim-color transition-opacity ease-surface duration-surface data-starting-style:opacity-0 data-ending-style:opacity-0';\nconst POPUP = 'mu-dialog fixed z-dialog-scrim-z dialog-top left-1/2 -translate-x-1/2 outline-none transition-dialog data-starting-style:dialog-enter data-ending-style:dialog-enter data-ending-style:duration-release data-ending-style:ease-release';\n\nexport interface DialogRootProps {\n  open: boolean;\n  onOpenChange: (open: boolean) => void;\n  children: React.ReactNode;\n}\n\nfunction Root({ open, onOpenChange, children }: DialogRootProps) {\n  return (\n    <BaseDialog.Root open={open} onOpenChange={(o) => onOpenChange(o)}>\n      <BaseDialog.Portal>\n        <BaseDialog.Backdrop className={SCRIM} />\n        {children}\n      </BaseDialog.Portal>\n    </BaseDialog.Root>\n  );\n}\n\nexport interface DialogPopupProps extends React.HTMLAttributes<HTMLDivElement> {\n  material?: SurfaceMaterial;\n  radius?: SurfaceRadius;\n  'aria-label'?: string;\n}\n\nfunction Popup({ material = 'plate', radius = 'card', className, children, ...props }: DialogPopupProps) {\n  return (\n    <BaseDialog.Popup className={className ? `${POPUP} ${className}` : POPUP} aria-label={props['aria-label']} render={<Surface material={material} radius={radius} />}>\n      {children}\n    </BaseDialog.Popup>\n  );\n}\n\nexport const Dialog = Object.assign(Root, { Root, Popup });\n"
    }
  ],
  "docs": "Agent guide: https://metalui.dev/r/dialog.md. SwiftUI: MetalDialog in the MetalUI Swift package."
}
