{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "dialog",
  "title": "TIS Dialog",
  "author": "TIS Experience Engineering",
  "description": "Dialog React com portal e gestão de foco por Base UI, usando o contrato visual de Modal do DS TIS.",
  "dependencies": [
    "@base-ui/react@1.6.0",
    "clsx@2.1.1",
    "lucide-react@1.28.0",
    "tailwind-merge@3.6.0",
    "ds-tis@github:tis-experience/ds-tis#dd4c906943847cb7664a72a0c7637a378b39adcc"
  ],
  "files": [
    {
      "path": "registry/tis/dialog.tsx",
      "content": "import * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"./tis-utils\"\n\ntype DialogSize = \"sm\" | \"md\" | \"lg\"\n\nconst dialogSizeClasses: Record<DialogSize, string> = {\n  sm: \"ds-modal--sm\",\n  md: \"ds-modal--md\",\n  lg: \"ds-modal--lg\",\n}\n\nfunction Dialog(props: DialogPrimitive.Root.Props) {\n  return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger(props: DialogPrimitive.Trigger.Props) {\n  return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal(props: DialogPrimitive.Portal.Props) {\n  return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose(props: DialogPrimitive.Close.Props) {\n  return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n  className,\n  ...props\n}: DialogPrimitive.Backdrop.Props) {\n  return (\n    <DialogPrimitive.Backdrop\n      data-slot=\"dialog-overlay\"\n      className={cn(\"ds-tis-dialog__backdrop\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction DialogViewport({\n  className,\n  ...props\n}: DialogPrimitive.Viewport.Props) {\n  return (\n    <DialogPrimitive.Viewport\n      data-slot=\"dialog-viewport\"\n      className={cn(\"ds-tis-dialog__viewport\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction DialogContent({\n  className,\n  children,\n  size = \"md\",\n  showCloseButton = true,\n  closeLabel = \"Fechar modal\",\n  ...props\n}: DialogPrimitive.Popup.Props & {\n  size?: DialogSize\n  showCloseButton?: boolean\n  closeLabel?: string\n}) {\n  return (\n    <DialogPortal>\n      <DialogOverlay />\n      <DialogViewport>\n        <DialogPrimitive.Popup\n          data-slot=\"dialog-content\"\n          className={cn(\n            \"ds-modal ds-tis-dialog__popup\",\n            dialogSizeClasses[size],\n            className,\n          )}\n          {...props}\n          aria-modal=\"true\"\n        >\n          {children}\n          {showCloseButton && (\n            <DialogPrimitive.Close\n              aria-label={closeLabel}\n              data-slot=\"dialog-close\"\n              className=\"ds-modal__close ds-tis-dialog__close\"\n              style={{\n                right: \"var(--ds-space-sm)\",\n                top: \"var(--ds-space-sm)\",\n              }}\n            >\n              <XIcon aria-hidden=\"true\" className=\"ds-icon\" />\n            </DialogPrimitive.Close>\n          )}\n        </DialogPrimitive.Popup>\n      </DialogViewport>\n    </DialogPortal>\n  )\n}\n\nfunction DialogHeader({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<\"header\">) {\n  return (\n    <header\n      data-slot=\"dialog-header\"\n      className={cn(\"ds-modal__header\", className)}\n      {...props}\n    >\n      <div className=\"ds-modal__heading\">{children}</div>\n    </header>\n  )\n}\n\nfunction DialogBody({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"dialog-body\"\n      className={cn(\"ds-modal__body\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"footer\">) {\n  return (\n    <footer\n      data-slot=\"dialog-footer\"\n      className={cn(\"ds-modal__footer\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction DialogTitle({\n  className,\n  ...props\n}: DialogPrimitive.Title.Props) {\n  return (\n    <DialogPrimitive.Title\n      data-slot=\"dialog-title\"\n      className={cn(\"ds-modal__title\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction DialogDescription({\n  className,\n  ...props\n}: DialogPrimitive.Description.Props) {\n  return (\n    <DialogPrimitive.Description\n      data-slot=\"dialog-description\"\n      className={cn(\"ds-modal__description\", className)}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Dialog,\n  DialogBody,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogOverlay,\n  DialogPortal,\n  DialogTitle,\n  DialogTrigger,\n  DialogViewport,\n}\n",
      "type": "registry:ui",
      "target": "@ui/dialog.tsx"
    },
    {
      "path": "registry/tis/tis-utils.ts",
      "content": "import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}\n",
      "type": "registry:lib",
      "target": "@ui/tis-utils.ts"
    }
  ],
  "css": {
    "@import \"ds-tis/css\"": {},
    "@layer components": {
      ".ds-tis-dialog__backdrop": {
        "position": "fixed",
        "inset": "0",
        "background-color": "var(--ds-modal-overlay-bg-default)",
        "z-index": "var(--ds-modal-overlay-z-index-default)"
      },
      ".ds-tis-dialog__viewport": {
        "position": "fixed",
        "inset": "0",
        "display": "flex",
        "align-items": "center",
        "justify-content": "center",
        "padding": "var(--ds-modal-overlay-padding-default)",
        "z-index": "var(--ds-modal-overlay-z-index-default)"
      },
      ".ds-tis-dialog__popup": {
        "position": "relative",
        "box-sizing": "border-box"
      },
      ".ds-tis-dialog__close .ds-icon": {
        "flex-shrink": "0"
      }
    }
  },
  "meta": {
    "provider": "Base UI",
    "providerRole": "output-provider",
    "status": "beta"
  },
  "docs": "Mantenha @import \"ds-tis/css\" como o primeiro import do CSS global.",
  "type": "registry:ui"
}