{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "approvals-ui",
  "homepage": "https://approvals-ui.vercel.app",
  "items": [
    {
      "name": "approvals-core",
      "type": "registry:lib",
      "title": "Approvals core",
      "description": "Headless core for approval policies: Zod schema (gates, quorums, conditions, SLAs), a policy lint with structural errors and best-practice warnings, a step-level diff, and deterministic edit ops for safe LLM or form-driven edits.",
      "dependencies": ["zod"],
      "files": [
        {
          "path": "lib/approvals-ui/policy.ts",
          "type": "registry:lib",
          "target": "lib/approvals-ui/policy.ts"
        },
        {
          "path": "lib/approvals-ui/validate.ts",
          "type": "registry:lib",
          "target": "lib/approvals-ui/validate.ts"
        },
        {
          "path": "lib/approvals-ui/diff.ts",
          "type": "registry:lib",
          "target": "lib/approvals-ui/diff.ts"
        },
        {
          "path": "lib/approvals-ui/edit-ops.ts",
          "type": "registry:lib",
          "target": "lib/approvals-ui/edit-ops.ts"
        },
        {
          "path": "lib/approvals-ui/example-policy.ts",
          "type": "registry:lib",
          "target": "lib/approvals-ui/example-policy.ts"
        }
      ]
    },
    {
      "name": "approval-node",
      "type": "registry:component",
      "title": "Approval node",
      "description": "The approval gate card for React Flow: approvers with unassigned seats, quorum badge, condition pill, SLA badge, plus diff, validation, and live-status rings.",
      "dependencies": ["@xyflow/react", "lucide-react"],
      "registryDependencies": ["badge", "https://approvals-ui.vercel.app/r/approvals-core.json"],
      "files": [
        {
          "path": "components/approvals-ui/approval-node.tsx",
          "type": "registry:component",
          "target": "components/approvals-ui/approval-node.tsx"
        }
      ]
    },
    {
      "name": "terminal-node",
      "type": "registry:component",
      "title": "Terminal node",
      "description": "Approved and rejected outcome pills for React Flow.",
      "dependencies": ["@xyflow/react", "lucide-react"],
      "registryDependencies": [
        "https://approvals-ui.vercel.app/r/approval-node.json",
        "https://approvals-ui.vercel.app/r/approvals-core.json"
      ],
      "files": [
        {
          "path": "components/approvals-ui/terminal-node.tsx",
          "type": "registry:component",
          "target": "components/approvals-ui/terminal-node.tsx"
        }
      ]
    },
    {
      "name": "workflow-canvas",
      "type": "registry:component",
      "title": "Workflow canvas",
      "description": "Renders an ApprovalPolicy as a laid-out React Flow graph: automatic layout on real node sizes (react-flow-auto-layout), aligned step edges, diff and status overlays, click-to-select and pan-to-focus.",
      "dependencies": ["@xyflow/react", "react-flow-auto-layout", "dagre"],
      "devDependencies": ["@types/dagre"],
      "registryDependencies": [
        "https://approvals-ui.vercel.app/r/approval-node.json",
        "https://approvals-ui.vercel.app/r/terminal-node.json",
        "https://approvals-ui.vercel.app/r/approvals-core.json"
      ],
      "files": [
        {
          "path": "components/approvals-ui/workflow-canvas.tsx",
          "type": "registry:component",
          "target": "components/approvals-ui/workflow-canvas.tsx"
        }
      ]
    },
    {
      "name": "validation-panel",
      "type": "registry:component",
      "title": "Validation panel",
      "description": "Lists policy issues with severities: structural errors that should block activation and best-practice warnings (segregation of duties, single approver on high value, unassigned seats). Click an issue to focus the step on the canvas.",
      "dependencies": ["lucide-react"],
      "registryDependencies": ["badge", "https://approvals-ui.vercel.app/r/approvals-core.json"],
      "files": [
        {
          "path": "components/approvals-ui/validation-panel.tsx",
          "type": "registry:component",
          "target": "components/approvals-ui/validation-panel.tsx"
        }
      ]
    },
    {
      "name": "nl-edit-panel",
      "type": "registry:component",
      "title": "Plain-language edit panel",
      "description": "Edit the policy in plain English behind a human gate: a proposer (your LLM, or the bundled deterministic demo parser) returns a proposed policy plus its diff, the user reviews and applies or discards. Nothing lands without the click.",
      "dependencies": ["lucide-react"],
      "registryDependencies": [
        "button",
        "input",
        "https://approvals-ui.vercel.app/r/approvals-core.json"
      ],
      "files": [
        {
          "path": "components/approvals-ui/nl-edit-panel.tsx",
          "type": "registry:component",
          "target": "components/approvals-ui/nl-edit-panel.tsx"
        },
        {
          "path": "lib/approvals-ui/demo-proposer.ts",
          "type": "registry:lib",
          "target": "lib/approvals-ui/demo-proposer.ts"
        }
      ]
    }
  ]
}
