{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "brand-ui",
  "homepage": "https://elabs-ai.com/r",
  "items": [
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "app-shell",
      "type": "registry:block",
      "title": "App shell",
      "description": "Sidebar + top nav + page layout scaffold for an internal app.",
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/app-shell/app-nav-rail.tsx",
          "type": "registry:component",
          "target": "components/app-shell/app-nav-rail.tsx"
        },
        {
          "path": "registry/blocks/app-shell/app-shell-page.tsx",
          "type": "registry:page",
          "target": "app/(app)/page.tsx"
        },
        {
          "path": "registry/blocks/app-shell/app-top-bar.tsx",
          "type": "registry:component",
          "target": "components/app-shell/app-top-bar.tsx"
        },
        {
          "path": "registry/blocks/app-shell/console-overview.tsx",
          "type": "registry:component",
          "target": "components/app-shell/console-overview.tsx"
        },
        {
          "path": "registry/blocks/app-shell/nav-items.ts",
          "type": "registry:component",
          "target": "components/app-shell/nav-items.ts"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "ai-chat-shell",
      "type": "registry:block",
      "title": "AI chat shell",
      "description": "Chat surface with transcript, composer, tool calls and a context rail.",
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/ai-chat-shell/ai-chat.tsx",
          "type": "registry:component",
          "target": "components/ai-chat-shell/ai-chat.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table",
      "type": "registry:block",
      "title": "Data table",
      "description": "Filterable, sortable, paginated TanStack data table with toolbar.",
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/data-table/data-table-block.tsx",
          "type": "registry:component",
          "target": "components/data-table/data-table-block.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-frame-data",
      "type": "registry:block",
      "title": "ChartFrame + data table",
      "description": "ChartFrame (expand / flip-to-table / download-CSV) wired to @elabs-ai/components-data: full TanStack DataTable on flip and downloadCsv on export.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-frame-data/chart-frame-data-block.tsx",
          "type": "registry:component",
          "target": "components/chart-frame-data/chart-frame-data-block.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "ai-chart",
      "type": "registry:block",
      "title": "AI chart in conversation",
      "description": "Renders a model's chart tool-output inside an AI conversation — AutoChart (@elabs-ai/components-charts) composed with Tool/ToolOutput from @elabs-ai/components-ai. The canonical copy-owned home for @elabs-ai/components-ai + @elabs-ai/components-charts cross-sibling composition.",
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-charts",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/ai-chart/ai-chart-block.tsx",
          "type": "registry:component",
          "target": "components/ai-chart/ai-chart-block.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "flow-canvas",
      "type": "registry:block",
      "title": "Flow canvas",
      "description": "Branded React Flow canvas with custom nodes, edges and controls.",
      "dependencies": [
        "@elabs-ai/components-flow",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "@xyflow/react"
      ],
      "files": [
        {
          "path": "registry/blocks/flow-canvas/flow-canvas.tsx",
          "type": "registry:component",
          "target": "components/flow-canvas/flow-canvas.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "flow-builder",
      "type": "registry:block",
      "title": "Flow builder",
      "description": "Workflow-builder canvas with a node palette, auto-layout, grouping, placeholder growth, insert-between, an inspector, and copy-own undo/redo + copy/paste.",
      "dependencies": [
        "@elabs-ai/components-flow",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "@xyflow/react",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/flow-builder/flow-builder.tsx",
          "type": "registry:component",
          "target": "components/flow-builder/flow-builder.tsx"
        },
        {
          "path": "registry/blocks/flow-builder/use-copy-paste.ts",
          "type": "registry:component",
          "target": "components/flow-builder/use-copy-paste.ts"
        },
        {
          "path": "registry/blocks/flow-builder/use-undo-redo.ts",
          "type": "registry:component",
          "target": "components/flow-builder/use-undo-redo.ts"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-model-viewer-01",
      "type": "registry:block",
      "title": "Data model viewer",
      "description": "An entity-relationship view of a database on the flow canvas: custom table nodes with a row per column (keys, nullability, personal data), foreign keys as custom edges with crow’s-foot end marks that meet each table at the right row, a table list by schema with search and visibility, an all-columns / keys-only / names-only switch, auto-layout, and an inspector with columns, followable relations, indexes and a readable CREATE TABLE. Renders a plain DataModel object.",
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-flow",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "@xyflow/react",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/data-model-viewer-01/data-model-viewer.tsx",
          "type": "registry:component",
          "target": "components/data-model-viewer-01/data-model-viewer.tsx"
        },
        {
          "path": "registry/blocks/data-model-viewer-01/data/order-to-cash.ts",
          "type": "registry:component",
          "target": "components/data-model-viewer-01/data/order-to-cash.ts"
        },
        {
          "path": "registry/blocks/data-model-viewer-01/data/sales-star.ts",
          "type": "registry:component",
          "target": "components/data-model-viewer-01/data/sales-star.ts"
        },
        {
          "path": "registry/blocks/data-model-viewer-01/model.ts",
          "type": "registry:component",
          "target": "components/data-model-viewer-01/model.ts"
        },
        {
          "path": "registry/blocks/data-model-viewer-01/relation-edge.tsx",
          "type": "registry:component",
          "target": "components/data-model-viewer-01/relation-edge.tsx"
        },
        {
          "path": "registry/blocks/data-model-viewer-01/table-node.tsx",
          "type": "registry:component",
          "target": "components/data-model-viewer-01/table-node.tsx"
        }
      ],
      "categories": ["data"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "agent-designer-01",
      "type": "registry:block",
      "title": "Agent designer",
      "description": "A canvas for designing business agents: triggers, agents, routers, guardrails, human approvals and actions as the flow, and under each agent its equipment — model, skills, MCP servers with per-tool switches and ask-first, knowledge and memory — on square ports with dashed links. A searchable palette (drag, or click to equip the selected agent), an inspector form per node kind, design checks that point at the node they are about, a simulated test run that pauses at approvals, undo/redo and auto-layout. Three sample designs: support resolution, invoice processing, lead qualification. Plain data in, no runtime.",
      "registryDependencies": ["flow-builder"],
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-flow",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "@xyflow/react",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/agent-designer-01/agent-designer.tsx",
          "type": "registry:component",
          "target": "components/agent-designer-01/agent-designer.tsx"
        },
        {
          "path": "registry/blocks/agent-designer-01/data/catalog.ts",
          "type": "registry:component",
          "target": "components/agent-designer-01/data/catalog.ts"
        },
        {
          "path": "registry/blocks/agent-designer-01/data/scenarios.ts",
          "type": "registry:component",
          "target": "components/agent-designer-01/data/scenarios.ts"
        },
        {
          "path": "registry/blocks/agent-designer-01/edges.tsx",
          "type": "registry:component",
          "target": "components/agent-designer-01/edges.tsx"
        },
        {
          "path": "registry/blocks/agent-designer-01/inspector.tsx",
          "type": "registry:component",
          "target": "components/agent-designer-01/inspector.tsx"
        },
        {
          "path": "registry/blocks/agent-designer-01/nodes.tsx",
          "type": "registry:component",
          "target": "components/agent-designer-01/nodes.tsx"
        },
        {
          "path": "registry/blocks/agent-designer-01/types.ts",
          "type": "registry:component",
          "target": "components/agent-designer-01/types.ts"
        },
        {
          "path": "registry/blocks/agent-designer-01/use-test-run.ts",
          "type": "registry:component",
          "target": "components/agent-designer-01/use-test-run.ts"
        },
        {
          "path": "registry/blocks/agent-designer-01/validate.ts",
          "type": "registry:component",
          "target": "components/agent-designer-01/validate.ts"
        }
      ],
      "categories": ["agent-ops"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-hero",
      "type": "registry:block",
      "title": "Marketing hero",
      "description": "Landing hero section with eyebrow, headline, CTAs and logo strip.",
      "dependencies": [
        "@elabs-ai/components-marketing",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-hero/marketing-hero.tsx",
          "type": "registry:component",
          "target": "components/marketing-hero/marketing-hero.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "code-workspace",
      "type": "registry:block",
      "title": "Code workspace",
      "description": "Multi-file Monaco code editor with brand-ui tabs and token theming (wire @elabs-ai/components-editor/monaco-environment once at the app entry).",
      "dependencies": [
        "@elabs-ai/components-editor",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "monaco-editor"
      ],
      "files": [
        {
          "path": "registry/blocks/code-workspace/code-workspace.tsx",
          "type": "registry:component",
          "target": "components/code-workspace/code-workspace.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sidebar-02",
      "type": "registry:block",
      "title": "App shell — dashboard inset",
      "description": "The classic left-sidebar dashboard: a collapsible-icon nav rail with a tenant switcher and nav groups beside a floating inset surface carrying a metric row, a revenue trend and an overnight activity feed. Skip link, one main landmark, active-route indicator and command trigger included.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "@visx/curve",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/sidebar-02/dashboard-shell.tsx",
          "type": "registry:component",
          "target": "components/sidebar-02/dashboard-shell.tsx"
        },
        {
          "path": "registry/blocks/sidebar-02/dashboard-sidebar.tsx",
          "type": "registry:component",
          "target": "components/sidebar-02/dashboard-sidebar.tsx"
        },
        {
          "path": "registry/blocks/sidebar-02/dashboard-top-bar.tsx",
          "type": "registry:component",
          "target": "components/sidebar-02/dashboard-top-bar.tsx"
        },
        {
          "path": "registry/blocks/sidebar-02/nav-items.ts",
          "type": "registry:component",
          "target": "components/sidebar-02/nav-items.ts"
        },
        {
          "path": "registry/blocks/sidebar-02/storefront-overview.tsx",
          "type": "registry:component",
          "target": "components/sidebar-02/storefront-overview.tsx"
        }
      ],
      "categories": ["sidebar", "app-shell"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sidebar-04",
      "type": "registry:block",
      "title": "App shell — mail",
      "description": "Three-zone mail shell: the collapsible icon rail, a searchable message list, and a reading pane sharing one floating inset surface. A variation on the dashboard shell, not a separate idea; below md the two content zones become a drill-down.",
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/sidebar-04/mail-list-column.tsx",
          "type": "registry:component",
          "target": "components/sidebar-04/mail-list-column.tsx"
        },
        {
          "path": "registry/blocks/sidebar-04/mail-nav-rail.tsx",
          "type": "registry:component",
          "target": "components/sidebar-04/mail-nav-rail.tsx"
        },
        {
          "path": "registry/blocks/sidebar-04/mail-reading-pane.tsx",
          "type": "registry:component",
          "target": "components/sidebar-04/mail-reading-pane.tsx"
        },
        {
          "path": "registry/blocks/sidebar-04/mail-shell.tsx",
          "type": "registry:component",
          "target": "components/sidebar-04/mail-shell.tsx"
        },
        {
          "path": "registry/blocks/sidebar-04/mail-top-bar.tsx",
          "type": "registry:component",
          "target": "components/sidebar-04/mail-top-bar.tsx"
        },
        {
          "path": "registry/blocks/sidebar-04/messages.ts",
          "type": "registry:component",
          "target": "components/sidebar-04/messages.ts"
        },
        {
          "path": "registry/blocks/sidebar-04/nav-items.ts",
          "type": "registry:component",
          "target": "components/sidebar-04/nav-items.ts"
        }
      ],
      "categories": ["sidebar", "app-shell"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sidebar-05",
      "type": "registry:block",
      "title": "App shell — dual rail",
      "description": "Two navigation levels plus a summoned third surface: a permanent 56px icon rail picks the area, a collapsible second panel lists that area's sections, and the floating inset carries the settings screen. A resizable right-hand SideDock holds the change history — a column above 1100px, an overlay below it. The icon rail is deliberately not a Sidebar, so it survives every breakpoint while the section panel becomes a sheet.",
      "dependencies": [
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/sidebar-05/change-history.tsx",
          "type": "registry:component",
          "target": "components/sidebar-05/change-history.tsx"
        },
        {
          "path": "registry/blocks/sidebar-05/nav-items.ts",
          "type": "registry:component",
          "target": "components/sidebar-05/nav-items.ts"
        },
        {
          "path": "registry/blocks/sidebar-05/settings-content.ts",
          "type": "registry:component",
          "target": "components/sidebar-05/settings-content.ts"
        },
        {
          "path": "registry/blocks/sidebar-05/settings-icon-rail.tsx",
          "type": "registry:component",
          "target": "components/sidebar-05/settings-icon-rail.tsx"
        },
        {
          "path": "registry/blocks/sidebar-05/settings-screen.tsx",
          "type": "registry:component",
          "target": "components/sidebar-05/settings-screen.tsx"
        },
        {
          "path": "registry/blocks/sidebar-05/settings-section-panel.tsx",
          "type": "registry:component",
          "target": "components/sidebar-05/settings-section-panel.tsx"
        },
        {
          "path": "registry/blocks/sidebar-05/settings-shell.tsx",
          "type": "registry:component",
          "target": "components/sidebar-05/settings-shell.tsx"
        },
        {
          "path": "registry/blocks/sidebar-05/settings-top-bar.tsx",
          "type": "registry:component",
          "target": "components/sidebar-05/settings-top-bar.tsx"
        }
      ],
      "categories": ["sidebar", "app-shell"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "stat-card-parts",
      "type": "registry:block",
      "title": "Stat Card — shared parts",
      "description": "The pieces every stat-card block shares: the edge-to-edge chart bleed wrapper, the chart-hover→value/label/trend bridge, and the tokenized trend badge. Installed once and reused by the stat-card blocks rather than copied into each.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/stat-card-parts/stat-card-chart.tsx",
          "type": "registry:component",
          "target": "components/stat-card-parts/stat-card-chart.tsx"
        },
        {
          "path": "registry/blocks/stat-card-parts/stat-card-hover-bridge.tsx",
          "type": "registry:component",
          "target": "components/stat-card-parts/stat-card-hover-bridge.tsx"
        },
        {
          "path": "registry/blocks/stat-card-parts/trend-badge.tsx",
          "type": "registry:component",
          "target": "components/stat-card-parts/trend-badge.tsx"
        }
      ],
      "categories": ["stat-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "stat-card-area-01",
      "type": "registry:block",
      "title": "Stat Card — Area",
      "description": "KPI stat card with a live area chart sparkline, hover-driven value/label updates, and a tokenized trend badge.",
      "registryDependencies": ["stat-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "@visx/curve"
      ],
      "files": [
        {
          "path": "registry/blocks/stat-card-area-01/data/revenue-series.ts",
          "type": "registry:component",
          "target": "components/stat-card-area-01/data/revenue-series.ts"
        },
        {
          "path": "registry/blocks/stat-card-area-01/stat-card-area.tsx",
          "type": "registry:component",
          "target": "components/stat-card-area-01/stat-card-area.tsx"
        }
      ],
      "categories": ["stat-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "stat-card-line-01",
      "type": "registry:block",
      "title": "Stat Card — Line",
      "description": "KPI stat card with an inline line chart, hover-driven value/label updates, and a tokenized trend badge.",
      "registryDependencies": ["stat-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "@visx/curve"
      ],
      "files": [
        {
          "path": "registry/blocks/stat-card-line-01/data/sessions-series.ts",
          "type": "registry:component",
          "target": "components/stat-card-line-01/data/sessions-series.ts"
        },
        {
          "path": "registry/blocks/stat-card-line-01/stat-card-line.tsx",
          "type": "registry:component",
          "target": "components/stat-card-line-01/stat-card-line.tsx"
        }
      ],
      "categories": ["stat-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "stat-card-choropleth-01",
      "type": "registry:block",
      "title": "Stat Card — Choropleth Map",
      "description": "KPI stat card with a choropleth world-map chart, hover-driven country value/label updates, and a tokenized trend badge.",
      "registryDependencies": ["stat-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "geojson",
        "topojson-client"
      ],
      "files": [
        {
          "path": "registry/blocks/stat-card-choropleth-01/data/visitors.ts",
          "type": "registry:component",
          "target": "components/stat-card-choropleth-01/data/visitors.ts"
        },
        {
          "path": "registry/blocks/stat-card-choropleth-01/lib/use-world-data.tsx",
          "type": "registry:component",
          "target": "components/stat-card-choropleth-01/lib/use-world-data.tsx"
        },
        {
          "path": "registry/blocks/stat-card-choropleth-01/stat-card-choropleth-hover-bridge.tsx",
          "type": "registry:component",
          "target": "components/stat-card-choropleth-01/stat-card-choropleth-hover-bridge.tsx"
        },
        {
          "path": "registry/blocks/stat-card-choropleth-01/stat-card-choropleth.tsx",
          "type": "registry:component",
          "target": "components/stat-card-choropleth-01/stat-card-choropleth.tsx"
        }
      ],
      "categories": ["stat-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "stat-cards-01",
      "type": "registry:block",
      "title": "Stat Cards — elevated KPI tiles",
      "description": "Elevated KPI tiles beyond a flat number: MetricCard + inline Sparkline (bar or line, coloured by a --chart-* token), a goal/progress tile, and a this-vs-last comparison tile.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/stat-cards-01/comparison-stat-card.tsx",
          "type": "registry:component",
          "target": "components/stat-cards-01/comparison-stat-card.tsx"
        },
        {
          "path": "registry/blocks/stat-cards-01/data/spark-series.ts",
          "type": "registry:component",
          "target": "components/stat-cards-01/data/spark-series.ts"
        },
        {
          "path": "registry/blocks/stat-cards-01/goal-stat-card.tsx",
          "type": "registry:component",
          "target": "components/stat-cards-01/goal-stat-card.tsx"
        },
        {
          "path": "registry/blocks/stat-cards-01/spark-stat-cards.tsx",
          "type": "registry:component",
          "target": "components/stat-cards-01/spark-stat-cards.tsx"
        },
        {
          "path": "registry/blocks/stat-cards-01/stat-cards.tsx",
          "type": "registry:component",
          "target": "components/stat-cards-01/stat-cards.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-card-kpi-01",
      "type": "registry:block",
      "title": "Chart Card — KPI header",
      "description": "An elevated chart-in-a-card: a header with a headline KPI + delta + a segmented period control (ToggleGroup), a token-coloured AreaChart, and a footer breakdown legend. The period control re-renders the chart.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "@visx/curve"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-card-kpi-01/data/revenue-period-series.ts",
          "type": "registry:component",
          "target": "components/chart-card-kpi-01/data/revenue-period-series.ts"
        },
        {
          "path": "registry/blocks/chart-card-kpi-01/revenue-chart-card.tsx",
          "type": "registry:component",
          "target": "components/chart-card-kpi-01/revenue-chart-card.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "stat-list-01",
      "type": "registry:block",
      "title": "Stat List — ranked list, leaderboard, activity feed",
      "description": "Compact summary widgets: a ranked list with share bars + delta (Sales by country), a leaderboard (Top performers), and a transaction/activity feed with signed amounts.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/stat-list-01/data/countries.ts",
          "type": "registry:component",
          "target": "components/stat-list-01/data/countries.ts"
        },
        {
          "path": "registry/blocks/stat-list-01/data/performers.ts",
          "type": "registry:component",
          "target": "components/stat-list-01/data/performers.ts"
        },
        {
          "path": "registry/blocks/stat-list-01/data/transactions.ts",
          "type": "registry:component",
          "target": "components/stat-list-01/data/transactions.ts"
        },
        {
          "path": "registry/blocks/stat-list-01/leaderboard-widget.tsx",
          "type": "registry:component",
          "target": "components/stat-list-01/leaderboard-widget.tsx"
        },
        {
          "path": "registry/blocks/stat-list-01/ranked-list-widget.tsx",
          "type": "registry:component",
          "target": "components/stat-list-01/ranked-list-widget.tsx"
        },
        {
          "path": "registry/blocks/stat-list-01/stat-list.tsx",
          "type": "registry:component",
          "target": "components/stat-list-01/stat-list.tsx"
        },
        {
          "path": "registry/blocks/stat-list-01/transaction-feed-widget.tsx",
          "type": "registry:component",
          "target": "components/stat-list-01/transaction-feed-widget.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "integration-grid-01",
      "type": "registry:block",
      "title": "Integration Grid",
      "description": "A responsive grid of integration cards (icon + name + description + connect/manage action + connection status) under a page header with an Add action — the canonical ‘connect your tools’ surface. Logos are consumer-supplied (Lucide placeholders here).",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/integration-grid-01/data/integrations.ts",
          "type": "registry:component",
          "target": "components/integration-grid-01/data/integrations.ts"
        },
        {
          "path": "registry/blocks/integration-grid-01/integration-card.tsx",
          "type": "registry:component",
          "target": "components/integration-grid-01/integration-card.tsx"
        },
        {
          "path": "registry/blocks/integration-grid-01/integration-grid.tsx",
          "type": "registry:component",
          "target": "components/integration-grid-01/integration-grid.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "form-wizard-01",
      "type": "registry:block",
      "title": "Form Wizard — checkout flow",
      "description": "A multi-step form with a horizontal numbered stepper (the Wizard primitive) — a checkout flow (Customer → Shipping → Payment → Review) with real fields, correct autocomplete/type hints, and a Descriptions review step.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/form-wizard-01/checkout-wizard.tsx",
          "type": "registry:component",
          "target": "components/form-wizard-01/checkout-wizard.tsx"
        },
        {
          "path": "registry/blocks/form-wizard-01/data/steps.ts",
          "type": "registry:component",
          "target": "components/form-wizard-01/data/steps.ts"
        },
        {
          "path": "registry/blocks/form-wizard-01/field.tsx",
          "type": "registry:component",
          "target": "components/form-wizard-01/field.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "terminal-session-idle",
      "type": "registry:block",
      "title": "Terminal session (idle)",
      "description": "A settled coding-agent console: launch banner, transcript, composer with mode/effort indicator, status bar. Nothing is running.",
      "dependencies": [
        "@elabs-ai/components-terminal",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/terminal-session-idle/terminal-session-idle.tsx",
          "type": "registry:component",
          "target": "components/terminal-session-idle/terminal-session-idle.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "terminal-session-mid-turn",
      "type": "registry:block",
      "title": "Terminal session (mid-turn)",
      "description": "A coding-agent console under way: tool calls, a diff hunk, a working line with a stop affordance, a pending permission prompt, status bar.",
      "dependencies": [
        "@elabs-ai/components-terminal",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/terminal-session-mid-turn/terminal-session-mid-turn.tsx",
          "type": "registry:component",
          "target": "components/terminal-session-mid-turn/terminal-session-mid-turn.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-editorial-hourglass",
      "type": "registry:block",
      "title": "Chart Editorial — Hourglass Stream",
      "description": "A funnel redrawn as counted barcode strips (UnitStack) with trickle threads (DrawPath) narrowing between stages, plus stage-to-stage conversion callouts. One-off editorial composition adapted from lieflat-charts' 'L13 Hourglass Stream', built entirely from @elabs-ai/components-charts' marks layer.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-editorial-hourglass/chart-editorial-hourglass.tsx",
          "type": "registry:component",
          "target": "components/chart-editorial-hourglass/chart-editorial-hourglass.tsx"
        },
        {
          "path": "registry/blocks/chart-editorial-hourglass/data/conversion-funnel.ts",
          "type": "registry:component",
          "target": "components/chart-editorial-hourglass/data/conversion-funnel.ts"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-editorial-patchwork",
      "type": "registry:block",
      "title": "Chart Editorial — Radial Patchwork",
      "description": "Events on a 24 h clock face, density shown by overlaid translucent sectors (fill-opacity 0.07–0.16 — the one sanctioned use of transparency in this system) with rim ticks and a category legend. One-off editorial composition adapted from lieflat-charts' 'L10 Radial Patchwork'.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-editorial-patchwork/chart-editorial-patchwork.tsx",
          "type": "registry:component",
          "target": "components/chart-editorial-patchwork/chart-editorial-patchwork.tsx"
        },
        {
          "path": "registry/blocks/chart-editorial-patchwork/data/daily-events.ts",
          "type": "registry:component",
          "target": "components/chart-editorial-patchwork/data/daily-events.ts"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-editorial-almanac",
      "type": "registry:block",
      "title": "Chart Editorial — Bubble Almanac",
      "description": "A category × category matrix drawn as hand-irregular blob bubbles on ruled ledger paper, with a margin note calling out the busiest cell (PeakRing + Marginalia). One-off editorial composition adapted from lieflat-charts' 'L9 Bubble Almanac'.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-editorial-almanac/chart-editorial-almanac.tsx",
          "type": "registry:component",
          "target": "components/chart-editorial-almanac/chart-editorial-almanac.tsx"
        },
        {
          "path": "registry/blocks/chart-editorial-almanac/data/activity-matrix.ts",
          "type": "registry:component",
          "target": "components/chart-editorial-almanac/data/activity-matrix.ts"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "process-explorer-page",
      "type": "registry:block",
      "title": "Process explorer page",
      "description": "A map-first process-mining workspace over an order-to-cash log: the six KPIs as one ribbon, every control in a toolbar so nothing floats over the map, and beside the map a panel of statistical insights — throughput distribution against the SLA, the slowest hand-overs, the weekly trend, box and violin plots by region and channel — plus variants as colour strips, the selected element and deviations. A dock holds the dotted chart, the performance spectrum, the workload heatmap and the case table; a replay animates every order as a token. One useProcessExplorer instance drives all of it, so no two panels can disagree.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-data",
        "@elabs-ai/components-flow",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-process",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "@xyflow/react",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/process-explorer-page/process-explorer-page.tsx",
          "type": "registry:component",
          "target": "components/process-explorer-page/process-explorer-page.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kpi-card-parts",
      "type": "registry:block",
      "title": "KPI Card — shared parts",
      "description": "The pieces every KPI card block shares: a named-baseline comparison row (delta + arrow + sign, pp vs % handled explicitly), an on-track/at-risk/off-track status (icon + text, never colour alone), an as-of freshness footnote, Intl.* value/delta formatters, and the shared fictional 'Acme Logistics' Q3 dataset every block reads from. Installed once and reused by the KPI card blocks rather than copied into each.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/kpi-card-parts/data/acme-quarter.ts",
          "type": "registry:component",
          "target": "components/kpi-card-parts/data/acme-quarter.ts"
        },
        {
          "path": "registry/blocks/kpi-card-parts/format.ts",
          "type": "registry:component",
          "target": "components/kpi-card-parts/format.ts"
        },
        {
          "path": "registry/blocks/kpi-card-parts/kpi-as-of.tsx",
          "type": "registry:component",
          "target": "components/kpi-card-parts/kpi-as-of.tsx"
        },
        {
          "path": "registry/blocks/kpi-card-parts/kpi-comparison-row.tsx",
          "type": "registry:component",
          "target": "components/kpi-card-parts/kpi-comparison-row.tsx"
        },
        {
          "path": "registry/blocks/kpi-card-parts/kpi-status.tsx",
          "type": "registry:component",
          "target": "components/kpi-card-parts/kpi-status.tsx"
        }
      ],
      "categories": ["kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kpi-target-bullet-01",
      "type": "registry:block",
      "title": "KPI Cards — On target?",
      "description": "\"Am I on target?\" — a grid of KPI cards, each a BulletChart (value against target, last year, and 2–3 qualitative bands) plus a named comparison row and an as-of footnote. A lower-is-better KPI states that its bands read best-to-worst in reverse.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/kpi-target-bullet-01/kpi-target-bullet.tsx",
          "type": "registry:component",
          "target": "components/kpi-target-bullet-01/kpi-target-bullet.tsx"
        }
      ],
      "categories": ["kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kpi-multi-baseline-01",
      "type": "registry:block",
      "title": "KPI Cards — Compared to what?",
      "description": "\"Compared to what?\" — one wide card per KPI stacking three named baselines (target, last year, budget), each with a shared-scale dot strip so the same number's distance to every reference reads at a glance.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/kpi-multi-baseline-01/kpi-multi-baseline.tsx",
          "type": "registry:component",
          "target": "components/kpi-multi-baseline-01/kpi-multi-baseline.tsx"
        }
      ],
      "categories": ["kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kpi-pace-01",
      "type": "registry:block",
      "title": "KPI Cards — On pace?",
      "description": "\"Will I make it by period end?\" — quarter-to-date Progress bars with a marker for the expected pace and a computed days-ahead/behind status, plus a Gauge card reading a rate KPI against its target and thresholds.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/kpi-pace-01/kpi-pace.tsx",
          "type": "registry:component",
          "target": "components/kpi-pace-01/kpi-pace.tsx"
        }
      ],
      "categories": ["kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kpi-trend-reference-01",
      "type": "registry:block",
      "title": "KPI Cards — Better or worse than normal?",
      "description": "\"Better or worse than normal?\" — a 13-week Sparkline trend read against a target pace, last year, and a normal operating band, with a text legend spelling out the line styles so the encoding never rides on colour alone.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/kpi-trend-reference-01/kpi-trend-reference.tsx",
          "type": "registry:component",
          "target": "components/kpi-trend-reference-01/kpi-trend-reference.tsx"
        }
      ],
      "categories": ["kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "infographic-scorecard-01",
      "type": "registry:block",
      "title": "Infographic Scorecard",
      "description": "The Power BI-style scorecard, done with an honest baseline on every number: one row per KPI — actual, target, a signed delta, a BulletChart progress-to-target, a 13-week trend, and a named status — in a horizontally scrollable Table.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/infographic-scorecard-01/infographic-scorecard.tsx",
          "type": "registry:component",
          "target": "components/infographic-scorecard-01/infographic-scorecard.tsx"
        }
      ],
      "categories": ["kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kpi-forecast-01",
      "type": "registry:block",
      "title": "KPI Cards — Where will I land?",
      "description": "\"Where will I land?\" — a linear run-rate projection to the end of the quarter: solid actual, dashed projection, a ±1σ confidence range that widens toward period end, a labelled target line and a today marker separating the two, with the projection method stated in words.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "@visx/curve"
      ],
      "files": [
        {
          "path": "registry/blocks/kpi-forecast-01/data/forecast.ts",
          "type": "registry:component",
          "target": "components/kpi-forecast-01/data/forecast.ts"
        },
        {
          "path": "registry/blocks/kpi-forecast-01/kpi-forecast.tsx",
          "type": "registry:component",
          "target": "components/kpi-forecast-01/kpi-forecast.tsx"
        }
      ],
      "categories": ["kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kpi-hero-satellites-01",
      "type": "registry:block",
      "title": "KPI Cards — What is the headline?",
      "description": "\"What is the headline?\" — one hero KPI (a big value, a named comparison vs target, a 13-week trend against last year) with three compact satellite KPIs beside it, each a value + signed delta vs target + a tiny trend, composed as one card with a single separation gesture.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/kpi-hero-satellites-01/kpi-hero-satellites.tsx",
          "type": "registry:component",
          "target": "components/kpi-hero-satellites-01/kpi-hero-satellites.tsx"
        }
      ],
      "categories": ["kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kpi-composition-01",
      "type": "registry:block",
      "title": "KPI Cards — What is it made of?",
      "description": "\"What is it made of?\" — a 100%-stacked segmented bar per card (revenue by channel, shipments by region) plus a legend list that is the accessible source of truth: label, share, absolute value, and the share's own change vs last year in pp. Bar and legend share one order and a rank number so colour is never the only link between a segment and its row; shares under 3% merge into \"Other\".",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/kpi-composition-01/data/composition.ts",
          "type": "registry:component",
          "target": "components/kpi-composition-01/data/composition.ts"
        },
        {
          "path": "registry/blocks/kpi-composition-01/kpi-composition.tsx",
          "type": "registry:component",
          "target": "components/kpi-composition-01/kpi-composition.tsx"
        }
      ],
      "categories": ["kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kpi-ratio-unit-01",
      "type": "registry:block",
      "title": "KPI Cards — How big is it?",
      "description": "\"How big is it in human terms?\" — a rate restated as a small, countable fraction (\"1 in 12 orders arrived late\") via UnitChart, with the exact rate spelled out beneath the rounded headline and a comparison vs last year. Highlighted units use an accent fill against a neutral rest rather than hue alone.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/kpi-ratio-unit-01/data/ratio-unit.ts",
          "type": "registry:component",
          "target": "components/kpi-ratio-unit-01/data/ratio-unit.ts"
        },
        {
          "path": "registry/blocks/kpi-ratio-unit-01/kpi-ratio-unit.tsx",
          "type": "registry:component",
          "target": "components/kpi-ratio-unit-01/kpi-ratio-unit.tsx"
        }
      ],
      "categories": ["kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kpi-movers-01",
      "type": "registry:block",
      "title": "KPI Cards — What changed most?",
      "description": "\"What changed most?\" — the top 3 risers and top 3 fallers in a ranked depot field (on-time delivery, revenue), each row stating its rank, how many places it moved, and a diverging mini bar from a shared, stated zero axis. Distinct from stat-list-01's single-snapshot share bars: this is about movement between two points in time.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/kpi-movers-01/data/depot-movers.ts",
          "type": "registry:component",
          "target": "components/kpi-movers-01/data/depot-movers.ts"
        },
        {
          "path": "registry/blocks/kpi-movers-01/kpi-movers.tsx",
          "type": "registry:component",
          "target": "components/kpi-movers-01/kpi-movers.tsx"
        }
      ],
      "categories": ["kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kpi-distribution-01",
      "type": "registry:block",
      "title": "KPI Cards — Is it consistent?",
      "description": "\"Is it consistent?\" — an average hides the tail: a median headline next to p90/p95 read against a named SLA threshold, a box plot of the record-level distribution with the threshold drawn as a reference line, and the share past it stated in text.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/kpi-distribution-01/data/distribution-samples.ts",
          "type": "registry:component",
          "target": "components/kpi-distribution-01/data/distribution-samples.ts"
        },
        {
          "path": "registry/blocks/kpi-distribution-01/kpi-distribution.tsx",
          "type": "registry:component",
          "target": "components/kpi-distribution-01/kpi-distribution.tsx"
        }
      ],
      "categories": ["kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kpi-streak-01",
      "type": "registry:block",
      "title": "KPI Cards — How reliable is it?",
      "description": "\"How reliable is it?\" — a ratio/streak headline over a 30-day strip of day cells, missed days marked by shape as well as colour, with the current and longest streaks and a comparison to the prior 30 days.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/kpi-streak-01/data/streak-days.ts",
          "type": "registry:component",
          "target": "components/kpi-streak-01/data/streak-days.ts"
        },
        {
          "path": "registry/blocks/kpi-streak-01/kpi-streak.tsx",
          "type": "registry:component",
          "target": "components/kpi-streak-01/kpi-streak.tsx"
        }
      ],
      "categories": ["kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "infographic-variance-bridge-01",
      "type": "registry:block",
      "title": "Infographic — What drove the change?",
      "description": "\"What drove the change?\" — a revenue bridge from last quarter's total to this quarter's, split into price, volume, mix, FX and other, built with WaterfallChart and a Leader callout on the one or two steps that actually explain the move. Steps sum exactly to the ending total; every step states its own sign in words, never colour alone.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/infographic-variance-bridge-01/data/revenue-bridge.ts",
          "type": "registry:component",
          "target": "components/infographic-variance-bridge-01/data/revenue-bridge.ts"
        },
        {
          "path": "registry/blocks/infographic-variance-bridge-01/infographic-variance-bridge.tsx",
          "type": "registry:component",
          "target": "components/infographic-variance-bridge-01/infographic-variance-bridge.tsx"
        }
      ],
      "categories": ["infographic"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "infographic-annotated-trend-01",
      "type": "registry:block",
      "title": "Infographic — What happened, and when?",
      "description": "\"What happened, and when?\" — a 20-week LineChart whose events are declarative annotations anchored to the exact data point they explain, inside a ChartFrame that carries the finding, the method note, a byline and the source row. Under 480 px the notes become numbered markers with a key.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/infographic-annotated-trend-01/data/annotated-trend.ts",
          "type": "registry:component",
          "target": "components/infographic-annotated-trend-01/data/annotated-trend.ts"
        },
        {
          "path": "registry/blocks/infographic-annotated-trend-01/infographic-annotated-trend.tsx",
          "type": "registry:component",
          "target": "components/infographic-annotated-trend-01/infographic-annotated-trend.tsx"
        }
      ],
      "categories": ["infographic"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kpi-status-threshold-01",
      "type": "registry:block",
      "title": "KPI Cards — Should I act?",
      "description": "\"Should I act?\" — a status (icon + text, never colour alone) read against a visible on-track/at-risk/off-track threshold scale with today's value marked, plus how long the current status has held.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/kpi-status-threshold-01/kpi-status-threshold.tsx",
          "type": "registry:component",
          "target": "components/kpi-status-threshold-01/kpi-status-threshold.tsx"
        }
      ],
      "categories": ["kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "infographic-cohort-retention-01",
      "type": "registry:block",
      "title": "Infographic — Do customers stay?",
      "description": "\"Do customers stay?\" — a triangular cohort retention heatmap: one row per monthly signup cohort, one column per month since signup, shaded by the share still active. A cohort younger than N months draws an empty cell, never a fabricated zero. One cohort is called out with a peak ring and a stated, computed gap against its named peers.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/infographic-cohort-retention-01/data/cohort-retention.ts",
          "type": "registry:component",
          "target": "components/infographic-cohort-retention-01/data/cohort-retention.ts"
        },
        {
          "path": "registry/blocks/infographic-cohort-retention-01/infographic-cohort-retention.tsx",
          "type": "registry:component",
          "target": "components/infographic-cohort-retention-01/infographic-cohort-retention.tsx"
        }
      ],
      "categories": ["infographic"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "infographic-part-to-whole-01",
      "type": "registry:block",
      "title": "Infographic — Where does the money go?",
      "description": "\"Where does the money go?\" — a two-level treemap of Q3 cost, category → sub-category, drawn in one neutral mono shade except for the single highlighted tile, outlined and named with a Leader + HaloText callout stating its share and the change from last quarter. Tile area is exactly proportional to cost.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/infographic-part-to-whole-01/data/cost-breakdown.ts",
          "type": "registry:component",
          "target": "components/infographic-part-to-whole-01/data/cost-breakdown.ts"
        },
        {
          "path": "registry/blocks/infographic-part-to-whole-01/infographic-part-to-whole.tsx",
          "type": "registry:component",
          "target": "components/infographic-part-to-whole-01/infographic-part-to-whole.tsx"
        }
      ],
      "categories": ["infographic"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "infographic-small-multiples-01",
      "type": "registry:block",
      "title": "Infographic — Which depot is the outlier?",
      "description": "\"Which depot is the outlier?\" — twelve depots in a ChartMultiples grid, one 13-week line per panel on one shared y-axis so height compares directly, each panel title showing its latest reading (or the hovered week’s, synced across every panel), with the outlier ringed (PeakRing), thicker and glyphed while every other depot stays on a muted neutral.",
      "registryDependencies": ["kpi-card-parts", "kpi-movers-01"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/infographic-small-multiples-01/data/region-on-time.ts",
          "type": "registry:component",
          "target": "components/infographic-small-multiples-01/data/region-on-time.ts"
        },
        {
          "path": "registry/blocks/infographic-small-multiples-01/infographic-small-multiples.tsx",
          "type": "registry:component",
          "target": "components/infographic-small-multiples-01/infographic-small-multiples.tsx"
        }
      ],
      "categories": ["infographic"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "infographic-before-after-01",
      "type": "registry:block",
      "title": "Infographic — Who improved, who slipped?",
      "description": "\"Who improved, who slipped?\" — a DumbbellChart slope chart of 6 depots, Q2 → Q3, with the biggest riser and biggest faller emphasised and every other depot on a shared muted line; direction is carried by the line's own slope, never colour alone.",
      "registryDependencies": ["kpi-card-parts", "kpi-movers-01"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/infographic-before-after-01/data/depot-before-after.ts",
          "type": "registry:component",
          "target": "components/infographic-before-after-01/data/depot-before-after.ts"
        },
        {
          "path": "registry/blocks/infographic-before-after-01/infographic-before-after.tsx",
          "type": "registry:component",
          "target": "components/infographic-before-after-01/infographic-before-after.tsx"
        }
      ],
      "categories": ["infographic"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "infographic-gap-to-benchmark-01",
      "type": "registry:block",
      "title": "Infographic — How far from the benchmark?",
      "description": "\"How far from the benchmark?\" — a sorted DumbbellChart, one row per depot, hollow benchmark marker vs filled actual marker, worst gap first, with the widest gaps emphasised; the gap's sign correctly flips for a lower-is-better metric.",
      "registryDependencies": ["infographic-small-multiples-01", "kpi-card-parts", "kpi-movers-01"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/infographic-gap-to-benchmark-01/data/depot-vs-benchmark.ts",
          "type": "registry:component",
          "target": "components/infographic-gap-to-benchmark-01/data/depot-vs-benchmark.ts"
        },
        {
          "path": "registry/blocks/infographic-gap-to-benchmark-01/infographic-gap-to-benchmark.tsx",
          "type": "registry:component",
          "target": "components/infographic-gap-to-benchmark-01/infographic-gap-to-benchmark.tsx"
        }
      ],
      "categories": ["infographic"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "agent-ops-parts",
      "type": "registry:block",
      "title": "Agent Ops — shared parts",
      "description": "The pieces every agent-ops block shares: a provenance line (source · freshness) for any figure, a word-sized confidence meter, an evidence chip (the kind of document a derivation read), a countable evidence-strength meter (\"|||| 4 of 5\"), an actor avatar that tells copilot / agent / person apart by glyph, Intl.* money/count/relative-time formatters, and the shared fictional \"Atlas\" AI-ops dataset (Acme Logistics) every block reads from. Installed once and reused by the agent-ops blocks rather than copied into each.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/agent-ops-parts/data/atlas-ops.ts",
          "type": "registry:component",
          "target": "components/agent-ops-parts/data/atlas-ops.ts"
        },
        {
          "path": "registry/blocks/agent-ops-parts/format.ts",
          "type": "registry:component",
          "target": "components/agent-ops-parts/format.ts"
        },
        {
          "path": "registry/blocks/agent-ops-parts/provenance.tsx",
          "type": "registry:component",
          "target": "components/agent-ops-parts/provenance.tsx"
        }
      ],
      "categories": ["agent-ops"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kpi-provenance-strip-01",
      "type": "registry:block",
      "title": "KPI Cards — Where does this number come from?",
      "description": "\"Where the business stands\" — four headline figures on ONE surface, each with an inline signed delta and the line that earns the number its place: source and freshness (\"ERP · 2 min ago\", \"Derived from 61 open orders · 06:02\"). Peers separated by hairlines, no value without provenance; the delta is secondary (arrow + sign, never colour alone).",
      "registryDependencies": ["agent-ops-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/kpi-provenance-strip-01/kpi-provenance-strip.tsx",
          "type": "registry:component",
          "target": "components/kpi-provenance-strip-01/kpi-provenance-strip.tsx"
        }
      ],
      "categories": ["agent-ops", "kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "insight-feed-01",
      "type": "registry:block",
      "title": "Insight Feed — What changed while you were away?",
      "description": "The AI-ops briefing pattern: a numbered feed of things the copilot did or noticed — a one-sentence fact, a paragraph of why, the evidence it read, its confidence and two actions — with a conflict item that carries no confidence (\"No verdict — a person decides\"). Beside it, a \"Needs a person\" rail of what stopped and a \"Derivation load\" split of applied / sent to you / pinned by people.",
      "registryDependencies": ["agent-ops-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/insight-feed-01/insight-feed.tsx",
          "type": "registry:component",
          "target": "components/insight-feed-01/insight-feed.tsx"
        }
      ],
      "categories": ["agent-ops"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "provenance-record-01",
      "type": "registry:block",
      "title": "Provenance Record — Where did each field come from?",
      "description": "A record whose every field says where its value came from: derived (confidence meter + evidence kind), pinned (who and when — a pin out-ranks any derivation), conflict (two permitted sources disagree; nothing chosen) or empty (\"No signal yet\" — never a guess). Each state has its own glyph + text, and the footer counts the four so the reader knows how much of the record is machine-derived.",
      "registryDependencies": ["agent-ops-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/provenance-record-01/provenance-record.tsx",
          "type": "registry:component",
          "target": "components/provenance-record-01/provenance-record.tsx"
        }
      ],
      "categories": ["agent-ops"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "score-explanation-01",
      "type": "registry:block",
      "title": "Score Explanation — Why is the score 91?",
      "description": "A scored decision decomposed into its signals: one row per signal, a signed bar whose length is the contribution in points and whose direction is the sign — ink for positive, the warning rung for negative, each with a signed number so the sign never rides on colour. One shared zero-based scale; the footer states how many weaker signals were considered but not shown.",
      "registryDependencies": ["agent-ops-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/score-explanation-01/score-explanation.tsx",
          "type": "registry:component",
          "target": "components/score-explanation-01/score-explanation.tsx"
        }
      ],
      "categories": ["agent-ops", "kpi-card"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "spend-against-limit-01",
      "type": "registry:block",
      "title": "Spend Against Limit — How close is each agent to its ceiling?",
      "description": "Every non-human spender on the card programme, sorted by share of ceiling: monospace agent id, autonomy band as a status badge (Auto / Review / Hold), a bar with the ceiling drawn as a vertical mark, the literal \"$612 of $500\", and Revoke. Over the ceiling paints the destructive rung and says so. Above it, three autonomy-band tiles total the envelopes per band.",
      "registryDependencies": ["agent-ops-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/spend-against-limit-01/spend-against-limit.tsx",
          "type": "registry:component",
          "target": "components/spend-against-limit-01/spend-against-limit.tsx"
        }
      ],
      "categories": ["agent-ops"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "escalation-boundary-01",
      "type": "registry:block",
      "title": "Escalation Boundary — Where does autonomy end?",
      "description": "The one dial an AI-ops product must put on screen: a stacked distribution bar of every decision by how well it was corroborated, with the evidence threshold drawn as a mark; the evidence ladder (countable tick meter, meaning, decisions, share, side); and three \"If you move it\" scenario cards that state the trade in the reader’s units (cleared share, queue delta, catches, reviews per catch) and MOVE the boundary when clicked.",
      "registryDependencies": ["agent-ops-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/escalation-boundary-01/escalation-boundary.tsx",
          "type": "registry:component",
          "target": "components/escalation-boundary-01/escalation-boundary.tsx"
        }
      ],
      "categories": ["agent-ops"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "decision-record-01",
      "type": "registry:block",
      "title": "Decision Record — Why did the AI do that?",
      "description": "Every AI action expanded into the reason it happened: what it did, what it looked at (named, openable evidence), what rule applied (the clause, monospace), how confident (or an honest \"not applicable\"), and how to reverse it. Below: the check list (confirmed / not confirmed) and what the copilot proposes — numbered, editable, nothing actioned until a person approves.",
      "registryDependencies": ["agent-ops-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/decision-record-01/decision-record.tsx",
          "type": "registry:component",
          "target": "components/decision-record-01/decision-record.tsx"
        }
      ],
      "categories": ["agent-ops"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "audit-log-01",
      "type": "registry:block",
      "title": "Audit Log — Who did what, and did it apply?",
      "description": "An append-only audit table whose actor column tells three authors apart by glyph — copilot, delegated agent, person — and whose result column is a status badge with an icon (Applied / Held / Stopped / Reverted), so a row still reads in greyscale. Monospace tabular timestamps; the action is one plain sentence with the number it wrote in it.",
      "registryDependencies": ["agent-ops-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/audit-log-01/audit-log.tsx",
          "type": "registry:component",
          "target": "components/audit-log-01/audit-log.tsx"
        }
      ],
      "categories": ["agent-ops"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "agent-trace-waterfall-01",
      "type": "registry:block",
      "title": "Agent Trace — Where did the run spend its time, and where did it fail?",
      "description": "An execution waterfall for one multi-agent run: a stat strip where every number carries its comparison (duration vs p95, retries, tokens in/out, cost vs workflow average, failed at), the charts package’s Gantt at sub-second granularity with one row per agent span nested under its caller, and a context-flow chain that shows the hop where a required field was dropped.",
      "registryDependencies": ["agent-ops-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/agent-trace-waterfall-01/agent-trace-waterfall.tsx",
          "type": "registry:component",
          "target": "components/agent-trace-waterfall-01/agent-trace-waterfall.tsx"
        }
      ],
      "categories": ["agent-ops"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "finding-cards-01",
      "type": "registry:block",
      "title": "Finding Cards — What did the copilot find?",
      "description": "Recoverable-spend findings as a row of cards: a status badge naming the kind, a one-line title, the recoverable figure as the only coloured number (kpi-sm), a two-sentence summary and a primary + secondary action, under a header that states the programme and the total the cards add up to. The primary action is what a person signs; the secondary always opens the evidence.",
      "registryDependencies": ["agent-ops-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/finding-cards-01/finding-cards.tsx",
          "type": "registry:component",
          "target": "components/finding-cards-01/finding-cards.tsx"
        }
      ],
      "categories": ["agent-ops"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "verdict-side-by-side-01",
      "type": "registry:block",
      "title": "Verdict — Keep this, cancel that?",
      "description": "A keep-vs-cancel verdict side by side: two cards on the success/destructive washes with annual cost, a segmented seat-utilisation Meter and the deciding facts; a one-line reading of the comparison; “If you cancel” as four consequence stats; “How the copilot knows” as a numbered evidence list; and the refusal — the copilot prepares everything, a person signs.",
      "registryDependencies": ["agent-ops-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/verdict-side-by-side-01/verdict-side-by-side.tsx",
          "type": "registry:component",
          "target": "components/verdict-side-by-side-01/verdict-side-by-side.tsx"
        }
      ],
      "categories": ["agent-ops"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "handoff-inspector-01",
      "type": "registry:block",
      "title": "Handoff Inspector — Where was the context dropped?",
      "description": "One edge of a multi-agent run: sender → a metric pill on the arrow (context size, latency, tokens, fields present of required) → receiver; a context-comparison table (sent vs expected, status badge per field) that shows the required field that was not sent; the payload size against the workflow baseline as a Meter with a marker; and the edge’s 24-hour health beside it.",
      "registryDependencies": ["agent-ops-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/handoff-inspector-01/handoff-inspector.tsx",
          "type": "registry:component",
          "target": "components/handoff-inspector-01/handoff-inspector.tsx"
        }
      ],
      "categories": ["agent-ops"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table-with-sparklines",
      "type": "registry:block",
      "title": "Table with sparklines",
      "description": "A DataTable whose trend column renders the charts Sparkline — a target line, a fitted width and a spoken label per row. `@elabs-ai/components-data` may not import `@elabs-ai/components-charts`, so this composition is copy-owned rather than a `data` feature. For a plain in-cell trend that shares one scale down the column, `meta.visual: { kind: \"sparkline\" }` is lighter and needs no charts install.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/table-with-sparklines/table-with-sparklines-block.tsx",
          "type": "registry:component",
          "target": "components/table-with-sparklines/table-with-sparklines-block.tsx"
        }
      ],
      "categories": ["data"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "editorial-table",
      "type": "registry:block",
      "title": "Editorial table",
      "description": "A published table rather than an app grid: a zero-based bar column on one shared range, a diverging heatmap column centred on zero with its own colour key, and a mini-columns column for the quarterly shape — all from `data`'s own cell layer, no charts install. `layout=\"auto\"` flips it to a card list below 450 px on the same table instance, so the sort bar keeps working. Every visual keeps its value in the accessible tree.",
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/editorial-table/editorial-table.tsx",
          "type": "registry:component",
          "target": "components/editorial-table/editorial-table.tsx"
        }
      ],
      "categories": ["data"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "command-center-revenue-01",
      "type": "registry:block",
      "title": "Command Center — Revenue desk",
      "description": "A revenue desk in one block: a MetricGrid of four headline numbers that each name their baseline and carry a 13-week Sparkline, a ComposedChart of weekly revenue with its trailing average against a labelled plan rule, a donut PieChart of the service-line mix, a BumpChart of which line is climbing, and the accounts that decide the quarter with a Meter each. Container-query layout, so it holds in a dashboard column and on a full page.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/command-center-revenue-01/command-center-revenue.tsx",
          "type": "registry:component",
          "target": "components/command-center-revenue-01/command-center-revenue.tsx"
        },
        {
          "path": "registry/blocks/command-center-revenue-01/data/revenue-command.ts",
          "type": "registry:component",
          "target": "components/command-center-revenue-01/data/revenue-command.ts"
        }
      ],
      "categories": ["command-center"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "analytics-dashboard-01",
      "type": "registry:block",
      "title": "Command Center — Analytics dashboard",
      "description": "Analytics, scrolling and selection together on one retail use case: four KPIs, a monthly revenue LineChart with its average line, linear trend and a six-month seasonal forecast band (analytics[]), a 60-store BarChart ranking that scrolls with scrollbar=\"auto\" and maxVisibleItems={16}, and a margin × revenue ScatterChart whose lasso (explicit confirm) drives the ranking and a selection-share KPI through createLocalSelectionDriver. Container-query layout, tokens only.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/analytics-dashboard-01/analytics-dashboard.tsx",
          "type": "registry:component",
          "target": "components/analytics-dashboard-01/analytics-dashboard.tsx"
        },
        {
          "path": "registry/blocks/analytics-dashboard-01/data/analytics-dashboard.ts",
          "type": "registry:component",
          "target": "components/analytics-dashboard-01/data/analytics-dashboard.ts"
        }
      ],
      "categories": ["command-center"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "incident-explorer-01",
      "type": "registry:block",
      "title": "Command Center — Incident explorer",
      "description": "Two selection fields on one screen: an AreaChart of incidents per day whose time-axis range picks days, a horizontal BarChart of incidents by service whose click or axis range picks services, and a DataTable of the pager log that lists the intersection — with four KPIs (count, median time to resolve, severe share, still open) computed from the same rows. Both charts share ONE createLocalSelectionDriver (fields `day` and `service`) and paint their own field's states; severity is a StatusBadge with a glyph, so colour is never the only channel.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/incident-explorer-01/data/incident-explorer.ts",
          "type": "registry:component",
          "target": "components/incident-explorer-01/data/incident-explorer.ts"
        },
        {
          "path": "registry/blocks/incident-explorer-01/incident-explorer.tsx",
          "type": "registry:component",
          "target": "components/incident-explorer-01/incident-explorer.tsx"
        }
      ],
      "categories": ["command-center"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "energy-desk-01",
      "type": "registry:block",
      "title": "Command Center — Energy desk",
      "description": "Two hourly series on one window: a LineChart of the spot price owns the navigator strip (scrollbar=\"miniChart\", controlled window + onWindowChange) and an AreaChart of site consumption follows it through xDomain, with a 24-hour rolling mean and a one-sigma band from analytics[]. Preset buttons (24 h / 7 days / 30 days / All) jump the window; a range on the consumption chart's time axis picks a period, and the KPIs price it hour by hour — consumption × spot price — so the effective $/MWh the site pays sits beside the simple average.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/energy-desk-01/data/energy-desk.ts",
          "type": "registry:component",
          "target": "components/energy-desk-01/data/energy-desk.ts"
        },
        {
          "path": "registry/blocks/energy-desk-01/energy-desk.tsx",
          "type": "registry:component",
          "target": "components/energy-desk-01/energy-desk.tsx"
        }
      ],
      "categories": ["command-center"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "command-center-live-ops-01",
      "type": "registry:block",
      "title": "Command Center — Live ops wall",
      "description": "An operations wall that moves: a LiveLineChart streaming one reading a second, three Gauge dials with their targets on the dial, a Timeline of what the on-call already knows, services sorted worst first with a Sparkline and a status badge each, and a HeatmapChart of when the load arrives. The headline is computed from the services; paused freezes the stream.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/command-center-live-ops-01/command-center-live-ops.tsx",
          "type": "registry:component",
          "target": "components/command-center-live-ops-01/command-center-live-ops.tsx"
        },
        {
          "path": "registry/blocks/command-center-live-ops-01/data/live-ops.ts",
          "type": "registry:component",
          "target": "components/command-center-live-ops-01/data/live-ops.ts"
        }
      ],
      "categories": ["command-center"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "geo-network-map-01",
      "type": "registry:block",
      "title": "Geo — Network map",
      "description": "A network on the map it runs on: MapCanvas in globe projection with one MapArc per lane, its width bound to volume through a paint expression, hubs as MapMarkers with tooltips, and a panel that ranks the lanes with a Meter and calls out the late ones. Selecting a lane on the map or in the list dims the rest and redraws that arc heavier.",
      "dependencies": [
        "@elabs-ai/components-maps",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/geo-network-map-01/data/network.ts",
          "type": "registry:component",
          "target": "components/geo-network-map-01/data/network.ts"
        },
        {
          "path": "registry/blocks/geo-network-map-01/geo-network-map.tsx",
          "type": "registry:component",
          "target": "components/geo-network-map-01/geo-network-map.tsx"
        }
      ],
      "categories": ["geo"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "plan-office-floor-01",
      "type": "registry:block",
      "title": "Plan — Office floor",
      "description": "Which rooms are free on a floor, on the building's own plan rather than a world map: MapCanvas plan declares the extent in centimetres, rooms are polygons whose state rides the fill tone and the outline dash, MapPlanOverlay gives every room a real button for the keyboard, and MapPlanTable repeats the floor as words. Optionally lays the surveyor's drawing underneath as a plan-unit background picture.",
      "dependencies": [
        "@elabs-ai/components-maps",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/plan-office-floor-01/data/office-floor.ts",
          "type": "registry:component",
          "target": "components/plan-office-floor-01/data/office-floor.ts"
        },
        {
          "path": "registry/blocks/plan-office-floor-01/office-floor-plan.tsx",
          "type": "registry:component",
          "target": "components/plan-office-floor-01/office-floor-plan.tsx"
        }
      ],
      "categories": ["plan"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "plan-factory-layout-01",
      "type": "registry:block",
      "title": "Plan — Factory layout",
      "description": "A plant floor in metres where each machine cell carries its state four times over: the tone wash, a hatch texture generated on a canvas, the outline dash and the word in the legend and table. State rides feature properties and hover/selection ride feature-state, so the channels never collide, and the four states stay four states in greyscale.",
      "dependencies": [
        "@elabs-ai/components-maps",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/plan-factory-layout-01/data/factory-floor.ts",
          "type": "registry:component",
          "target": "components/plan-factory-layout-01/data/factory-floor.ts"
        },
        {
          "path": "registry/blocks/plan-factory-layout-01/factory-layout.tsx",
          "type": "registry:component",
          "target": "components/plan-factory-layout-01/factory-layout.tsx"
        }
      ],
      "categories": ["plan"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "plan-seat-map-01",
      "type": "registry:block",
      "title": "Plan — Train seat map",
      "description": "A reservation seat map on a plan of the train: three coaches of 64 seats in centimetres, 192 regions. The overlay runs in group mode — one button per coach, Enter to go in, Escape to come back out — with an option to show the direction of travel and the walk between coaches.",
      "dependencies": [
        "@elabs-ai/components-maps",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/plan-seat-map-01/data/train-carriage.ts",
          "type": "registry:component",
          "target": "components/plan-seat-map-01/data/train-carriage.ts"
        },
        {
          "path": "registry/blocks/plan-seat-map-01/train-seat-map.tsx",
          "type": "registry:component",
          "target": "components/plan-seat-map-01/train-seat-map.tsx"
        }
      ],
      "categories": ["plan"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "infographic-journey-flow-01",
      "type": "registry:block",
      "title": "Infographic — Where do they drop off?",
      "description": "\"Where do they drop off?\" — a SankeyChart from the channel a request came in on, through what happened to its quote, to how it ended, with a FunnelChart beside it that counts each step. The headline names the channel that loses the largest share of its own requests.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/infographic-journey-flow-01/data/journey.ts",
          "type": "registry:component",
          "target": "components/infographic-journey-flow-01/data/journey.ts"
        },
        {
          "path": "registry/blocks/infographic-journey-flow-01/infographic-journey-flow.tsx",
          "type": "registry:component",
          "target": "components/infographic-journey-flow-01/infographic-journey-flow.tsx"
        }
      ],
      "categories": ["infographic"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "infographic-profile-compare-01",
      "type": "registry:block",
      "title": "Infographic — How do the options compare?",
      "description": "\"How do the options compare?\" — a RadarChart with one shape per option across five scored promises, beside a ParallelCoordinatesChart of the raw measures behind the scores. The headline names the strongest profile and the promise it is weakest on.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/infographic-profile-compare-01/data/profiles.ts",
          "type": "registry:component",
          "target": "components/infographic-profile-compare-01/data/profiles.ts"
        },
        {
          "path": "registry/blocks/infographic-profile-compare-01/infographic-profile-compare.tsx",
          "type": "registry:component",
          "target": "components/infographic-profile-compare-01/infographic-profile-compare.tsx"
        }
      ],
      "categories": ["infographic"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "infographic-dependency-web-01",
      "type": "registry:block",
      "title": "Infographic — What depends on what?",
      "description": "\"What depends on what?\" — a platform's call graph as a NetworkChart (node size is traffic, colour is tier) beside the same services as a TreeChart of ownership. The headline counts inbound links and names the service most others lean on.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/infographic-dependency-web-01/data/dependencies.ts",
          "type": "registry:component",
          "target": "components/infographic-dependency-web-01/data/dependencies.ts"
        },
        {
          "path": "registry/blocks/infographic-dependency-web-01/infographic-dependency-web.tsx",
          "type": "registry:component",
          "target": "components/infographic-dependency-web-01/infographic-dependency-web.tsx"
        }
      ],
      "categories": ["infographic"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "infographic-kpi-tree-01",
      "type": "registry:block",
      "title": "Infographic — What drives the number?",
      "description": "\"What drives the number?\" — operating profit as a TreeChart of the metrics it is built from, each node a card with its latest value, a 12-month sparkline and its month-over-month and year-over-year moves. Every parent is computed from its drivers, so the tree always adds up; the headline splits the year's change exactly across the measured drivers and names the one that moved it most. Branches open and close, the tree grows down or across, and selecting a card restates it in words.",
      "registryDependencies": ["kpi-card-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/infographic-kpi-tree-01/data/kpi-tree.ts",
          "type": "registry:component",
          "target": "components/infographic-kpi-tree-01/data/kpi-tree.ts"
        },
        {
          "path": "registry/blocks/infographic-kpi-tree-01/infographic-kpi-tree.tsx",
          "type": "registry:component",
          "target": "components/infographic-kpi-tree-01/infographic-kpi-tree.tsx"
        }
      ],
      "categories": ["infographic"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "command-center-launch-plan-01",
      "type": "registry:block",
      "title": "Command Center — Launch plan",
      "description": "A launch on one screen: the Gantt carries the plan with summary rows, dependencies, a baseline under the task that slipped, a milestone and markers for today and go-live; selecting a task spells out its dates, baseline, what it waits for and its progress in a Descriptions panel. The headline counts the days left and the tasks past baseline.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/command-center-launch-plan-01/command-center-launch-plan.tsx",
          "type": "registry:component",
          "target": "components/command-center-launch-plan-01/command-center-launch-plan.tsx"
        },
        {
          "path": "registry/blocks/command-center-launch-plan-01/data/launch-plan.ts",
          "type": "registry:component",
          "target": "components/command-center-launch-plan-01/data/launch-plan.ts"
        }
      ],
      "categories": ["command-center"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "command-center-market-tape-01",
      "type": "registry:block",
      "title": "Command Center — Market tape",
      "description": "A rate desk: a tape of lanes across the top with price, move and a 20-day Sparkline each, over a CandlestickChart of the index and a BarChart of daily volume. Every move carries an arrow and a sign as well as a colour; the chart title is computed from the first open and the last close.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/command-center-market-tape-01/command-center-market-tape.tsx",
          "type": "registry:component",
          "target": "components/command-center-market-tape-01/command-center-market-tape.tsx"
        },
        {
          "path": "registry/blocks/command-center-market-tape-01/data/market.ts",
          "type": "registry:component",
          "target": "components/command-center-market-tape-01/data/market.ts"
        }
      ],
      "categories": ["command-center"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "geo-fleet-tracker-01",
      "type": "registry:block",
      "title": "Geo — Fleet tracker",
      "description": "A fleet where it is: each vehicle's planned route as a dashed MapRoute, the part already driven solid, the vehicle's MapMarker at the join and the depot marked; the list shows stops done on a Meter and minutes against plan, and selecting a vehicle fades the others.",
      "dependencies": [
        "@elabs-ai/components-maps",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/geo-fleet-tracker-01/data/fleet.ts",
          "type": "registry:component",
          "target": "components/geo-fleet-tracker-01/data/fleet.ts"
        },
        {
          "path": "registry/blocks/geo-fleet-tracker-01/geo-fleet-tracker.tsx",
          "type": "registry:component",
          "target": "components/geo-fleet-tracker-01/geo-fleet-tracker.tsx"
        }
      ],
      "categories": ["geo"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "agent-run-review-01",
      "type": "registry:block",
      "title": "Agent run review",
      "description": "One agent run, reviewable end to end: a Plan with its decision contract, an AgentTimeline whose last step follows your answer, a Tool call with arguments and result one click away, a ToolResultCard hosting the chart the run produced, TokenUsage in the header and an ApprovalCard for the one side effect that waits for a human. Reports the decision through onDecision and never performs it.",
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-charts",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/agent-run-review-01/agent-run-review.tsx",
          "type": "registry:component",
          "target": "components/agent-run-review-01/agent-run-review.tsx"
        }
      ],
      "categories": ["agent-ops"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "workspace-shell",
      "type": "registry:block",
      "title": "Workspace shell",
      "description": "The frame every full-screen template sits in: the flagship app shell with its data turned into props — navigation groups with badges, the signed-in user, the trail, top-bar actions and a summoned dock — plus a docked assistant with a briefing, suggested questions and a conversation. frame=\"container\" renders the whole app inside a box.",
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/workspace-shell/workspace-assistant.tsx",
          "type": "registry:component",
          "target": "components/workspace-shell/workspace-assistant.tsx"
        },
        {
          "path": "registry/blocks/workspace-shell/workspace-shell.tsx",
          "type": "registry:component",
          "target": "components/workspace-shell/workspace-shell.tsx"
        }
      ],
      "categories": ["app-shell"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "revenue-ops-page",
      "type": "registry:block",
      "title": "Template — Revenue operations",
      "description": "An analytics workspace for revenue, finance and BI teams: the workspace shell with a summoned analyst, a page header whose period and region controls re-slice the charts and the pipeline, the revenue command center as the body, and a pipeline DataTable with a win-probability Meter, an activity Sparkline, a computed Stalled flag and row selection feeding a bulk action.",
      "registryDependencies": ["command-center-revenue-01", "workspace-shell"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/revenue-ops-page/data/deals.ts",
          "type": "registry:component",
          "target": "components/revenue-ops-page/data/deals.ts"
        },
        {
          "path": "registry/blocks/revenue-ops-page/revenue-ops-page.tsx",
          "type": "registry:component",
          "target": "components/revenue-ops-page/revenue-ops-page.tsx"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "control-tower-page",
      "type": "registry:block",
      "title": "Template — Logistics control tower",
      "description": "The screen an operations team keeps open all day: a headline computed from the exceptions, the network and fleet map blocks behind tabs, and an exceptions DataTable sorted by the closest promise whose row click summons the dock with the shipment's Descriptions, the recommended next step and its journey as a Timeline. The controlled-dock master-detail pattern for the workspace shell.",
      "registryDependencies": ["geo-fleet-tracker-01", "geo-network-map-01", "workspace-shell"],
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/control-tower-page/control-tower-page.tsx",
          "type": "registry:component",
          "target": "components/control-tower-page/control-tower-page.tsx"
        },
        {
          "path": "registry/blocks/control-tower-page/data/exceptions.ts",
          "type": "registry:component",
          "target": "components/control-tower-page/data/exceptions.ts"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "agent-ops-center-page",
      "type": "registry:block",
      "title": "Template — Agent operations center",
      "description": "The control room for a fleet of AI agents: the agent-ops block family as one product across four tabs — insight feed, spend against limit and the escalation boundary; the trace waterfall and handoff inspector; a run review and a decision record; the audit log — with every block callback wired and the review count reflected in the navigation, the tab and the header.",
      "registryDependencies": [
        "agent-run-review-01",
        "agent-trace-waterfall-01",
        "audit-log-01",
        "decision-record-01",
        "escalation-boundary-01",
        "handoff-inspector-01",
        "insight-feed-01",
        "spend-against-limit-01",
        "workspace-shell"
      ],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/agent-ops-center-page/agent-ops-center-page.tsx",
          "type": "registry:component",
          "target": "components/agent-ops-center-page/agent-ops-center-page.tsx"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "customer-360-page",
      "type": "registry:block",
      "title": "Template — Customer 360",
      "description": "One account before the call: a record header, four MetricCards (one with a commitment-marked Meter), usage against the contract as a LineChart with a labelled rule, a self-explaining health score, a RadarChart against peers, next actions completed in place, an activity Timeline and the people with the relationship gap stated in the title, plus a docked account brief.",
      "registryDependencies": ["score-explanation-01", "workspace-shell"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/customer-360-page/customer-360-page.tsx",
          "type": "registry:component",
          "target": "components/customer-360-page/customer-360-page.tsx"
        },
        {
          "path": "registry/blocks/customer-360-page/data/account.ts",
          "type": "registry:component",
          "target": "components/customer-360-page/data/account.ts"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "support-desk-page",
      "type": "registry:block",
      "title": "Template — Support desk",
      "description": "Queue, conversation, context: a three-pane surface in the workspace shell laid out by container queries, a queue sorted by the promise that breaks first with a Meter per row, a conversation from the ai package's Message parts, a copilot draft grounded in named past tickets that you send or discard, and a context pane with the promise, the customer and what solved it before. Sending a reply restarts the clock and re-sorts the queue.",
      "registryDependencies": ["workspace-shell"],
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/support-desk-page/data/tickets.ts",
          "type": "registry:component",
          "target": "components/support-desk-page/data/tickets.ts"
        },
        {
          "path": "registry/blocks/support-desk-page/support-desk-page.tsx",
          "type": "registry:component",
          "target": "components/support-desk-page/support-desk-page.tsx"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "incident-command-page",
      "type": "registry:block",
      "title": "Template — Incident command",
      "description": "One live incident run from one screen: severity, impact and commander in the header, a streaming LiveLineChart of the error rate, an AreaChart with the SLO as a labelled rule, the dependency-web block for blast radius, and a runbook whose steps print into a Terminal, tick off, move a Meter and write the incident log. Steps run in order; the last one settles the stream and unlocks Resolve.",
      "registryDependencies": ["infographic-dependency-web-01", "workspace-shell"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-terminal",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/incident-command-page/data/incident.ts",
          "type": "registry:component",
          "target": "components/incident-command-page/data/incident.ts"
        },
        {
          "path": "registry/blocks/incident-command-page/incident-command-page.tsx",
          "type": "registry:component",
          "target": "components/incident-command-page/incident-command-page.tsx"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "market-desk-page",
      "type": "registry:block",
      "title": "Template — Market desk",
      "description": "Watch the market, then act on it: the market-tape command center as the read side, a watchlist DataTable whose row click pre-fills the ticket, and a docked order ticket that is a real form — FieldRoot validation in the trader's terms, a NumberInput, a computed commitment checked against a limit, a review step before anything is placed, and a blotter that fills as orders go in.",
      "registryDependencies": ["command-center-market-tape-01", "workspace-shell"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/market-desk-page/market-desk-page.tsx",
          "type": "registry:component",
          "target": "components/market-desk-page/market-desk-page.tsx"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "energy-operations-page",
      "type": "registry:block",
      "title": "Template — Energy operations",
      "description": "A utility's site desk: the fleet's headline computed from eight industrial parks, the sites as a DataTable beside a MapCanvas whose markers say status in colour, shape and words, the energy-desk block re-reading the selected site's 120 days of meters, and a dock the selection summons — the contract, the open alarms with the runbook's response and an Acknowledge that steps the site down, and an analyst conversation whose first turn is a tool call over the meters. One selection state shared by table, map, desk and dock.",
      "registryDependencies": ["energy-desk-01", "workspace-shell"],
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-charts",
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-maps",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/energy-operations-page/data/sites.ts",
          "type": "registry:component",
          "target": "components/energy-operations-page/data/sites.ts"
        },
        {
          "path": "registry/blocks/energy-operations-page/energy-operations-page.tsx",
          "type": "registry:component",
          "target": "components/energy-operations-page/energy-operations-page.tsx"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "security-operations-page",
      "type": "registry:block",
      "title": "Template — Security operations",
      "description": "A security team's triage screen: the headline computed from the open queue (how many open, how many critical, the oldest), the alerts as a DataTable with a FilterBar over severity and source beside a MapCanvas that clusters the open alerts on the assets they fire from, and a dock the selection summons — the alert in Descriptions, its indicators, the alerts linked by the same user or host, and an analyst conversation whose first turn enriches the indicators and whose second waits for the approval to isolate the host. Contain and Close as benign move the row, the queue badge and the KPIs together, with an Undo in the toast. Below the queue the incident-explorer block reads the same sources over ninety days.",
      "registryDependencies": ["incident-explorer-01", "workspace-shell"],
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-charts",
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-maps",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/security-operations-page/data/alerts.ts",
          "type": "registry:component",
          "target": "components/security-operations-page/data/alerts.ts"
        },
        {
          "path": "registry/blocks/security-operations-page/security-operations-page.tsx",
          "type": "registry:component",
          "target": "components/security-operations-page/security-operations-page.tsx"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "developer-platform-page",
      "type": "registry:block",
      "title": "Template — Developer platform",
      "description": "A delivery team's control room: the headline computed from today's runs (how many failed, whether main is green, when production last changed), the four DORA figures as MetricCards computed from 28 days of deploy history, the pipeline as a CanvasShell graph whose nodes take the selected run's stage results beside the run log in a Terminal — selecting a stage narrows the log to it — today's runs as a DataTable under a FilterBar over status and service, the audit-log block as the platform's trail, and a dock the selection summons: the run in Descriptions, the failing check and the change under test as a DiffEditor. Re-run failed stage re-queues the run, steps the sidebar badge down and appends an audit entry, with an Undo in the toast.",
      "registryDependencies": ["agent-ops-parts", "audit-log-01", "workspace-shell"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-data",
        "@elabs-ai/components-editor",
        "@elabs-ai/components-flow",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-terminal",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/developer-platform-page/data/pipelines.ts",
          "type": "registry:component",
          "target": "components/developer-platform-page/data/pipelines.ts"
        },
        {
          "path": "registry/blocks/developer-platform-page/developer-platform-page.tsx",
          "type": "registry:component",
          "target": "components/developer-platform-page/developer-platform-page.tsx"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "auth-parts",
      "type": "registry:block",
      "title": "Auth parts",
      "description": "What every sign-in screen in this registry shares: the AuthCard frame with the brand mark, a PasswordInput with a show/hide toggle, a PasswordStrength meter that names the rules still unmet, the email validator and the useAuthSubmit lifecycle (pending, server message, done).",
      "dependencies": [
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/auth-parts/auth-card.tsx",
          "type": "registry:component",
          "target": "components/auth-parts/auth-card.tsx"
        },
        {
          "path": "registry/blocks/auth-parts/use-auth-submit.ts",
          "type": "registry:component",
          "target": "components/auth-parts/use-auth-submit.ts"
        }
      ],
      "categories": ["authentication"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "login-01",
      "type": "registry:block",
      "title": "Login",
      "description": "Sign in with email and password plus brand-neutral other ways in. Field errors after the first attempt, a revealable password, a pending button and the server's answer as an alert; hands the values to onSubmit and never calls a server itself.",
      "registryDependencies": ["auth-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/login-01/login-form.tsx",
          "type": "registry:component",
          "target": "components/login-01/login-form.tsx"
        }
      ],
      "categories": ["authentication"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "login-02",
      "type": "registry:block",
      "title": "Login, split",
      "description": "The sign-in form beside a brand panel painted with the primary pair. Container-query layout: the panel stands down when narrow.",
      "registryDependencies": ["auth-parts", "login-01"],
      "dependencies": ["@elabs-ai/components-icons", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/login-02/login-split.tsx",
          "type": "registry:component",
          "target": "components/login-02/login-split.tsx"
        }
      ],
      "categories": ["authentication"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "register-01",
      "type": "registry:block",
      "title": "Register",
      "description": "Create an account: name, work email, a password with a strength meter that names the unmet rules, and explicit consent. Errors appear after the first attempt.",
      "registryDependencies": ["auth-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/register-01/register-form.tsx",
          "type": "registry:component",
          "target": "components/register-01/register-form.tsx"
        }
      ],
      "categories": ["authentication"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "forgot-password-01",
      "type": "registry:block",
      "title": "Forgot password",
      "description": "Asks for the email and answers the same way whether or not the account exists; the confirmation names the address, the link's lifetime and the way back.",
      "registryDependencies": ["auth-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/forgot-password-01/forgot-password.tsx",
          "type": "registry:component",
          "target": "components/forgot-password-01/forgot-password.tsx"
        }
      ],
      "categories": ["authentication"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "reset-password-01",
      "type": "registry:block",
      "title": "Reset password",
      "description": "Choose a new password: whose account, strength explained, the two entries compared, and an end state that says other sessions were signed out.",
      "registryDependencies": ["auth-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/reset-password-01/reset-password.tsx",
          "type": "registry:component",
          "target": "components/reset-password-01/reset-password.tsx"
        }
      ],
      "categories": ["authentication"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "two-factor-01",
      "type": "registry:block",
      "title": "Two-factor verification",
      "description": "Six digits in one InputOTP that submits itself when full, a resend that counts down, and a recovery-code way out.",
      "registryDependencies": ["auth-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/two-factor-01/two-factor.tsx",
          "type": "registry:component",
          "target": "components/two-factor-01/two-factor.tsx"
        }
      ],
      "categories": ["authentication"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "verify-email-01",
      "type": "registry:block",
      "title": "Verify email",
      "description": "The waiting room after sign-up: which address, what to do, a counting-down resend and the way back for a mistyped address.",
      "registryDependencies": ["auth-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/verify-email-01/verify-email.tsx",
          "type": "registry:component",
          "target": "components/verify-email-01/verify-email.tsx"
        }
      ],
      "categories": ["authentication"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-navbar-01",
      "type": "registry:block",
      "title": "Marketing — Navbar",
      "description": "Site navigation: links inline when there is room and in a Sheet when there is not, aria-current on the active route, container-query layout.",
      "dependencies": [
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-navbar-01/marketing-navbar.tsx",
          "type": "registry:component",
          "target": "components/marketing-navbar-01/marketing-navbar.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-features-01",
      "type": "registry:block",
      "title": "Marketing — Features",
      "description": "A SectionHeader plus a FeatureGrid of six outcome-led reasons.",
      "dependencies": [
        "@elabs-ai/components-marketing",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-features-01/marketing-features.tsx",
          "type": "registry:component",
          "target": "components/marketing-features-01/marketing-features.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-stats-01",
      "type": "registry:block",
      "title": "Marketing — Stats and logos",
      "description": "A StatsBand of the numbers over a LogoStrip of who stands behind them.",
      "dependencies": [
        "@elabs-ai/components-marketing",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-stats-01/marketing-stats.tsx",
          "type": "registry:component",
          "target": "components/marketing-stats-01/marketing-stats.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-bento-01",
      "type": "registry:block",
      "title": "Marketing — Bento",
      "description": "A BentoGrid of product proof where each tile shows the thing: a live AreaChart, a Meter, a Sparkline, status badges.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-bento-01/marketing-bento.tsx",
          "type": "registry:component",
          "target": "components/marketing-bento-01/marketing-bento.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-pricing-01",
      "type": "registry:block",
      "title": "Marketing — Pricing",
      "description": "Three plans named for who they are for, a billing toggle that recomputes every price, locale-aware currency and a featured plan marked in words.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/marketing-pricing-01/marketing-pricing.tsx",
          "type": "registry:component",
          "target": "components/marketing-pricing-01/marketing-pricing.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-testimonials-01",
      "type": "registry:block",
      "title": "Marketing — Testimonials",
      "description": "A masonry wall of quotes with name, role and a read-only Rating.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/marketing-testimonials-01/marketing-testimonials.tsx",
          "type": "registry:component",
          "target": "components/marketing-testimonials-01/marketing-testimonials.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-faq-01",
      "type": "registry:block",
      "title": "Marketing — FAQ",
      "description": "An Accordion of pre-sale questions beside a person to ask.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/marketing-faq-01/marketing-faq.tsx",
          "type": "registry:component",
          "target": "components/marketing-faq-01/marketing-faq.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-cta-01",
      "type": "registry:block",
      "title": "Marketing — Call to action",
      "description": "The closing ask: one primary action, one quieter alternative and what trying it costs.",
      "dependencies": [
        "@elabs-ai/components-marketing",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-cta-01/marketing-cta.tsx",
          "type": "registry:component",
          "target": "components/marketing-cta-01/marketing-cta.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-parts",
      "type": "registry:block",
      "title": "Marketing parts",
      "description": "What the marketing blocks share: EmailCapture — the one labelled email field with its button, format check, pending state, the server's message as the field error and a success Alert naming the address — used by the newsletter, changelog, blog footer and careers blocks.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/marketing-parts/email-capture.tsx",
          "type": "registry:component",
          "target": "components/marketing-parts/email-capture.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-newsletter-01",
      "type": "registry:block",
      "title": "Marketing — Newsletter",
      "description": "One field, a promise about frequency, validation and a confirmation that names the address.",
      "registryDependencies": ["marketing-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/marketing-newsletter-01/marketing-newsletter.tsx",
          "type": "registry:component",
          "target": "components/marketing-newsletter-01/marketing-newsletter.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-contact-01",
      "type": "registry:block",
      "title": "Marketing — Contact",
      "description": "A short validated contact form with a topic Select, a personal confirmation and the other ways to reach the team.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/marketing-contact-01/marketing-contact.tsx",
          "type": "registry:component",
          "target": "components/marketing-contact-01/marketing-contact.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-team-01",
      "type": "registry:block",
      "title": "Marketing — Team",
      "description": "Names, roles and one line about each person; container-query columns.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/marketing-team-01/marketing-team.tsx",
          "type": "registry:component",
          "target": "components/marketing-team-01/marketing-team.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-footer-01",
      "type": "registry:block",
      "title": "Marketing — Footer",
      "description": "One-line positioning, three labelled nav columns and the legal row.",
      "dependencies": [
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-footer-01/marketing-footer.tsx",
          "type": "registry:component",
          "target": "components/marketing-footer-01/marketing-footer.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "settings-profile-01",
      "type": "registry:block",
      "title": "Settings — Profile",
      "description": "A profile form with dirty tracking (the save bar appears only when something changed), validation on save, a counted bio and a danger zone behind a ConfirmDialog that names what is lost.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/settings-profile-01/settings-profile.tsx",
          "type": "registry:component",
          "target": "components/settings-profile-01/settings-profile.tsx"
        }
      ],
      "categories": ["settings"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "settings-members-01",
      "type": "registry:block",
      "title": "Settings — Members",
      "description": "Members with in-place role changes, a protected owner, an invite dialog that checks address, duplicates and seats, pending invites in the same list and a confirming remove.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/settings-members-01/settings-members.tsx",
          "type": "registry:component",
          "target": "components/settings-members-01/settings-members.tsx"
        }
      ],
      "categories": ["settings"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "settings-notifications-01",
      "type": "registry:block",
      "title": "Settings — Notifications",
      "description": "An events-by-channels matrix as a real table of Switches with full accessible names, locked cells that say why, and a count of events that reach you nowhere.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/settings-notifications-01/settings-notifications.tsx",
          "type": "registry:component",
          "target": "components/settings-notifications-01/settings-notifications.tsx"
        }
      ],
      "categories": ["settings"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "settings-billing-01",
      "type": "registry:block",
      "title": "Settings — Billing",
      "description": "Plan and renewal, usage Meters with an included-amount marker and overage in words, the card by its last four digits, and an invoices Table.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/settings-billing-01/settings-billing.tsx",
          "type": "registry:component",
          "target": "components/settings-billing-01/settings-billing.tsx"
        }
      ],
      "categories": ["settings"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "empty-states-01",
      "type": "registry:block",
      "title": "Empty states",
      "description": "Six empty and error states on StatePanel with the library's illustrations — first run, no results, an empty list that is good news, error, offline, no access — each saying what happened, whether anything is lost and the way out.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/empty-states-01/empty-states.tsx",
          "type": "registry:component",
          "target": "components/empty-states-01/empty-states.tsx"
        }
      ],
      "categories": ["application"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "onboarding-checklist-01",
      "type": "registry:block",
      "title": "Onboarding checklist",
      "description": "A getting-started checklist that opens on the next step, says how long each takes, counts the minutes left on a Meter and ends with a closing state.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/onboarding-checklist-01/onboarding-checklist.tsx",
          "type": "registry:component",
          "target": "components/onboarding-checklist-01/onboarding-checklist.tsx"
        }
      ],
      "categories": ["application"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "todo-list-01",
      "type": "registry:block",
      "title": "Todo list",
      "description": "Add with Enter, tick to complete, filter, clear completed; the header counts open and overdue tasks and every control names the task it acts on.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/todo-list-01/todo-list.tsx",
          "type": "registry:component",
          "target": "components/todo-list-01/todo-list.tsx"
        }
      ],
      "categories": ["application"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kanban-board-01",
      "type": "registry:block",
      "title": "Kanban board",
      "description": "Drag cards between columns or use each card's Move menu (keyboard, screen reader and touch), with a live-region announcement, per-column points and WIP-limit warnings in words.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/kanban-board-01/data/issues.ts",
          "type": "registry:component",
          "target": "components/kanban-board-01/data/issues.ts"
        },
        {
          "path": "registry/blocks/kanban-board-01/kanban-board.tsx",
          "type": "registry:component",
          "target": "components/kanban-board-01/kanban-board.tsx"
        }
      ],
      "categories": ["application"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "project-cards-01",
      "type": "registry:block",
      "title": "Project cards",
      "description": "Projects as cards with progress against time on one Meter (marker = today), a derived health word, team avatars, due date and a counted state filter.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/project-cards-01/data/projects.ts",
          "type": "registry:component",
          "target": "components/project-cards-01/data/projects.ts"
        },
        {
          "path": "registry/blocks/project-cards-01/project-cards.tsx",
          "type": "registry:component",
          "target": "components/project-cards-01/project-cards.tsx"
        }
      ],
      "categories": ["application"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "commerce-parts",
      "type": "registry:block",
      "title": "Commerce parts",
      "description": "The commerce blocks' shared vocabulary: a sample catalogue, a token-painted stand-in for product photography and one money formatter.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/commerce-parts/catalog.tsx",
          "type": "registry:component",
          "target": "components/commerce-parts/catalog.tsx"
        }
      ],
      "categories": ["commerce"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "product-grid-01",
      "type": "registry:block",
      "title": "Product grid",
      "description": "A product listing with a category filter, sorting and cards that state markdowns and stock in words; sold-out products cannot be added.",
      "registryDependencies": ["commerce-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/product-grid-01/product-grid.tsx",
          "type": "registry:component",
          "target": "components/product-grid-01/product-grid.tsx"
        }
      ],
      "categories": ["commerce"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "product-detail-01",
      "type": "registry:block",
      "title": "Product detail",
      "description": "A product page with required options (the button names the missing one), a stock-capped quantity, delivery promises, a Rating and details in an Accordion.",
      "registryDependencies": ["commerce-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/product-detail-01/product-detail.tsx",
          "type": "registry:component",
          "target": "components/product-detail-01/product-detail.tsx"
        }
      ],
      "categories": ["commerce"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "shopping-cart-01",
      "type": "registry:block",
      "title": "Shopping cart",
      "description": "Stock-capped quantities, remove with undo, a discount code that answers either way, progress to free delivery on a Meter and totals that add up.",
      "registryDependencies": ["commerce-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/shopping-cart-01/shopping-cart.tsx",
          "type": "registry:component",
          "target": "components/shopping-cart-01/shopping-cart.tsx"
        }
      ],
      "categories": ["commerce"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkout-01",
      "type": "registry:block",
      "title": "Checkout",
      "description": "One-page checkout with autocomplete on every field, errors after the first attempt with focus moved to the first, a delivery RadioGroup that changes the total, and a slot for the payment provider's hosted card field.",
      "registryDependencies": ["commerce-parts", "shopping-cart-01"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/checkout-01/checkout.tsx",
          "type": "registry:component",
          "target": "components/checkout-01/checkout.tsx"
        }
      ],
      "categories": ["commerce"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "order-receipt-01",
      "type": "registry:block",
      "title": "Order receipt",
      "description": "The confirmation page: order number, arrival, address, lines and what happens next as a Timeline.",
      "registryDependencies": ["commerce-parts", "shopping-cart-01"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/order-receipt-01/order-receipt.tsx",
          "type": "registry:component",
          "target": "components/order-receipt-01/order-receipt.tsx"
        }
      ],
      "categories": ["commerce"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "project-hub-page",
      "type": "registry:block",
      "title": "Template — Project hub",
      "description": "Projects, the issue board, team load and members as one product: the workspace shell's navigation swaps views in place, the project-cards, kanban-board and settings-members blocks do the work, one dock explains the project or issue last opened, and every view reads the same issues so a move on the board changes the load, the overview and the navigation counts.",
      "registryDependencies": [
        "kanban-board-01",
        "project-cards-01",
        "settings-members-01",
        "workspace-shell"
      ],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/project-hub-page/project-hub-page.tsx",
          "type": "registry:component",
          "target": "components/project-hub-page/project-hub-page.tsx"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "agent-studio-page",
      "type": "registry:block",
      "title": "Template — Agent studio",
      "description": "Where a business designs, equips and watches its agents, as one product: the workspace shell’s navigation swaps between every design with how it ran this week, the agent-designer block flush in the shell, the skill library and the MCP servers with “used by” derived from the designs, and the runs — a run opens in the dock with its steps, a paused one shows who it is waiting for, and a failed one opens its full trace (agent-trace-waterfall).",
      "registryDependencies": ["agent-designer-01", "agent-trace-waterfall-01", "workspace-shell"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/agent-studio-page/agent-studio-page.tsx",
          "type": "registry:component",
          "target": "components/agent-studio-page/agent-studio-page.tsx"
        },
        {
          "path": "registry/blocks/agent-studio-page/data/studio.ts",
          "type": "registry:component",
          "target": "components/agent-studio-page/data/studio.ts"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-parts",
      "type": "registry:block",
      "title": "Chart story parts",
      "description": "Shared by every chart-story block: the byline and source each figure signs with, and a seeded random for its fictional data.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-parts/story-kit.ts",
          "type": "registry:component",
          "target": "components/chart-story-parts/story-kit.ts"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-bar-highlight-01",
      "type": "registry:block",
      "title": "Chart story: ranked bars, extremes highlighted",
      "description": "A whole published figure: ranked horizontal bars on a track to 100 %, the three lowest and three highest rows in colour and the rest as grey context, a colour key above the plot, values inside the bars, method note, byline, linked source and Get the data.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-bar-highlight-01/chart-story-bar-highlight.tsx",
          "type": "registry:component",
          "target": "components/chart-story-bar-highlight-01/chart-story-bar-highlight.tsx"
        },
        {
          "path": "registry/blocks/chart-story-bar-highlight-01/data/on-time-by-depot.ts",
          "type": "registry:component",
          "target": "components/chart-story-bar-highlight-01/data/on-time-by-depot.ts"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-bar-diverging-01",
      "type": "registry:block",
      "title": "Chart story: Diverging Bars",
      "description": "A whole published figure: signed horizontal bars from a shared zero line, gains and losses in two colours keyed inside the description, signed value labels, a row note beside the outlier, method note, byline, linked source and Get the data.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-bar-diverging-01/chart-story-bar-diverging.tsx",
          "type": "registry:component",
          "target": "components/chart-story-bar-diverging-01/chart-story-bar-diverging.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-bar-range-01",
      "type": "registry:block",
      "title": "Chart story: Range Bars",
      "description": "A whole published figure: a range plot drawn with bar overlays — fastest to slowest, the middle half and a median tick per row on one shared axis, with its key above the plot, method note, byline, linked source and Get the data.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-bar-range-01/chart-story-bar-range.tsx",
          "type": "registry:component",
          "target": "components/chart-story-bar-range-01/chart-story-bar-range.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-bar-stacked-mix-01",
      "type": "registry:block",
      "title": "Chart story: Stacked Among Plain Bars",
      "description": "A whole published figure: one ranked list where the comparison rows are plain grey bars and the rows the story is about are stacked by component, with totals, a colour key, method note, byline, linked source and Get the data.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-bar-stacked-mix-01/chart-story-bar-stacked-mix.tsx",
          "type": "registry:component",
          "target": "components/chart-story-bar-stacked-mix-01/chart-story-bar-stacked-mix.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-column-highlight-01",
      "type": "registry:block",
      "title": "Chart story: Highlighted Columns",
      "description": "A whole published figure: grey context columns, the columns after the event in the accent colour with value labels, an arrowed note naming the event, method note, byline, linked source and Get the data.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-column-highlight-01/chart-story-column-highlight.tsx",
          "type": "registry:component",
          "target": "components/chart-story-column-highlight-01/chart-story-column-highlight.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-column-diverging-01",
      "type": "registry:block",
      "title": "Chart story: Diverging Columns",
      "description": "A whole published figure: columns above and below zero in two colours whose key is written into the description, a note on the low point, signed axis, method note, byline, linked source and Get the data.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-column-diverging-01/chart-story-column-diverging.tsx",
          "type": "registry:component",
          "target": "components/chart-story-column-diverging-01/chart-story-column-diverging.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-line-highlight-01",
      "type": "registry:block",
      "title": "Chart story: Highlighted Lines",
      "description": "A whole published figure: three named, coloured lines in front of a field of thin grey ones, names at the line ends, a note in the series colour, hover that lifts one line, method note, byline, linked source and Get the data.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-line-highlight-01/chart-story-line-highlight.tsx",
          "type": "registry:component",
          "target": "components/chart-story-line-highlight-01/chart-story-line-highlight.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-line-projection-01",
      "type": "registry:block",
      "title": "Chart story: Lines With Projection",
      "description": "A whole published figure: two crossing lines named at their ends, a shaded and labelled plan range in which the lines turn dashed, an arrowed note at the crossing, the colour key written into the description, method note, byline, linked source and Get the data.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-line-projection-01/chart-story-line-projection.tsx",
          "type": "registry:component",
          "target": "components/chart-story-line-projection-01/chart-story-line-projection.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-line-events-01",
      "type": "registry:block",
      "title": "Chart story: Line With Events",
      "description": "A whole published figure: one long weekly line over shaded peak seasons, dashed and dotted event lines, a target line, an arrowed note on the record low, a notes line that explains the shading, byline, linked source and Get the data.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-line-events-01/chart-story-line-events.tsx",
          "type": "registry:component",
          "target": "components/chart-story-line-events-01/chart-story-line-events.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-area-threshold-01",
      "type": "registry:block",
      "title": "Chart story: Area Against a Threshold",
      "description": "A whole published figure: one line against a labelled threshold, the area between them filled in one colour below and another above, both sides named on the plot, a final-value note, method note, byline, linked source and Get the data.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-area-threshold-01/chart-story-area-threshold.tsx",
          "type": "registry:component",
          "target": "components/chart-story-area-threshold-01/chart-story-area-threshold.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-line-seasons-01",
      "type": "registry:block",
      "title": "Chart story: Seasons as Dots and Lines",
      "description": "A whole published figure: twenty seasons of daily readings as small dots coloured by decade, two average lines and the current year on top, the colour key carried by the title's own words, two notes on the cloud, method note, byline and linked source.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-line-seasons-01/chart-story-line-seasons.tsx",
          "type": "registry:component",
          "target": "components/chart-story-line-seasons-01/chart-story-line-seasons.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-area-multiples-01",
      "type": "registry:block",
      "title": "Chart story: Area multiples",
      "description": "Small-multiple area charts on one shared scale: a dotted network average behind every panel, the same shaded event, and the latest value in each panel title.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-area-multiples-01/chart-story-area-multiples.tsx",
          "type": "registry:component",
          "target": "components/chart-story-area-multiples-01/chart-story-area-multiples.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-column-panels-01",
      "type": "registry:block",
      "title": "Chart story: Column panels with ranges",
      "description": "Two column panels on one shared axis, with the promoter and detractor ranges of the scale shaded and named, and a computed share in each panel title.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-column-panels-01/chart-story-column-panels.tsx",
          "type": "registry:component",
          "target": "components/chart-story-column-panels-01/chart-story-column-panels.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-dual-axis-01",
      "type": "registry:block",
      "title": "Chart story: Dual axis columns and line",
      "description": "Columns on the left axis and a line on the right: axes coloured like their series, ticks aligned on shared gridlines, a shaded range, and a table tooltip.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-dual-axis-01/chart-story-dual-axis.tsx",
          "type": "registry:component",
          "target": "components/chart-story-dual-axis-01/chart-story-dual-axis.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-pareto-01",
      "type": "registry:block",
      "title": "Chart story: Pareto",
      "description": "A Pareto chart: sorted columns on the left axis and the labelled cumulative share on the right, with a computed headline.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-pareto-01/chart-story-pareto.tsx",
          "type": "registry:component",
          "target": "components/chart-story-pareto-01/chart-story-pareto.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-donut-01",
      "type": "registry:block",
      "title": "Chart story: Donut with total",
      "description": "A donut with the total in the hole, outside labels on leaders stating name and share, and small slices folded into Other.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-donut-01/chart-story-donut.tsx",
          "type": "registry:component",
          "target": "components/chart-story-donut-01/chart-story-donut.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-pie-pair-01",
      "type": "registry:block",
      "title": "Chart story: Donuts then and now",
      "description": "Two donuts under one shared colour key: the year in the hole, shares inside the slices, the same slice order in both.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-pie-pair-01/chart-story-pie-pair.tsx",
          "type": "registry:component",
          "target": "components/chart-story-pie-pair-01/chart-story-pie-pair.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "density-parts",
      "type": "registry:block",
      "title": "Density chart story parts",
      "description": "Shared by the density-scatter chart stories: a seeded gaussian for their fictional data and the three selection tiles (count, share, mean) that total whatever is selected.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/density-parts/random.ts",
          "type": "registry:component",
          "target": "components/density-parts/random.ts"
        },
        {
          "path": "registry/blocks/density-parts/selection-summary.tsx",
          "type": "registry:component",
          "target": "components/density-parts/selection-summary.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-density-envelope-01",
      "type": "registry:block",
      "title": "Chart story: Flight-test envelope",
      "description": "A flight-test envelope with every recorded position drawn: 200,000 fixes coloured by the zone of the operational design domain they fall in, solid where dense and single dots when you zoom in, with range and lasso selection totalled in three tiles.",
      "registryDependencies": ["chart-story-parts", "density-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-density-envelope-01/chart-story-density-envelope.tsx",
          "type": "registry:component",
          "target": "components/chart-story-density-envelope-01/chart-story-density-envelope.tsx"
        },
        {
          "path": "registry/blocks/chart-story-density-envelope-01/data.ts",
          "type": "registry:component",
          "target": "components/chart-story-density-envelope-01/data.ts"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-density-wafer-01",
      "type": "registry:block",
      "title": "Chart story: Wafer map",
      "description": "A wafer map of 150,000 probed dies coloured by test bin — a scratch and a hot spot become visible that the yield number hides — with lasso selection reporting the fail share and mean threshold voltage of the dies you circle.",
      "registryDependencies": ["chart-story-parts", "density-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-density-wafer-01/chart-story-density-wafer.tsx",
          "type": "registry:component",
          "target": "components/chart-story-density-wafer-01/chart-story-density-wafer.tsx"
        },
        {
          "path": "registry/blocks/chart-story-density-wafer-01/data.ts",
          "type": "registry:component",
          "target": "components/chart-story-density-wafer-01/data.ts"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-density-fills-01",
      "type": "registry:block",
      "title": "Chart story: Fill latency",
      "description": "Every order fill of a trading day, size against latency, with the SLA bands drawn on the latency axis; a range box over the block-trade tail or a drag along the axis reports the SLA share and mean slippage of that slice.",
      "registryDependencies": ["chart-story-parts", "density-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-density-fills-01/chart-story-density-fills.tsx",
          "type": "registry:component",
          "target": "components/chart-story-density-fills-01/chart-story-density-fills.tsx"
        },
        {
          "path": "registry/blocks/chart-story-density-fills-01/data.ts",
          "type": "registry:component",
          "target": "components/chart-story-density-fills-01/data.ts"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-bubble-01",
      "type": "registry:block",
      "title": "Chart story: Bubble chart",
      "description": "A bubble scatter on a log axis: size by head count, colour by region with a key, a dashed trend, selective point labels and a text annotation.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-bubble-01/chart-story-bubble.tsx",
          "type": "registry:component",
          "target": "components/chart-story-bubble-01/chart-story-bubble.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-calendar-01",
      "type": "registry:block",
      "title": "Chart story: Calendar heatmap",
      "description": "A calendar heatmap: weeks as columns, weekdays as rows, six sequential steps and a key that states each range.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-calendar-01/chart-story-calendar.tsx",
          "type": "registry:component",
          "target": "components/chart-story-calendar-01/chart-story-calendar.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-dot-plot-01",
      "type": "registry:block",
      "title": "Chart story: Dot plot with range",
      "description": "A dot plot: three dots per row joined by their range, a colour key, a top value axis and rows sorted by the headline value.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-dot-plot-01/chart-story-dot-plot.tsx",
          "type": "registry:component",
          "target": "components/chart-story-dot-plot-01/chart-story-dot-plot.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-range-plot-01",
      "type": "registry:block",
      "title": "Chart story: Range plot with deltas",
      "description": "A grouped range plot: hollow before, filled after, a signed delta per row, group headers and a top value axis.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-range-plot-01/chart-story-range-plot.tsx",
          "type": "registry:component",
          "target": "components/chart-story-range-plot-01/chart-story-range-plot.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-arrow-plot-01",
      "type": "registry:block",
      "title": "Chart story: Arrow plot with target band",
      "description": "An arrow plot: one arrow per row coloured by direction, percent deltas, a shaded target band and a computed headline.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-arrow-plot-01/chart-story-arrow-plot.tsx",
          "type": "registry:component",
          "target": "components/chart-story-arrow-plot-01/chart-story-arrow-plot.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-waterfall-bridge-01",
      "type": "registry:block",
      "title": "Chart story: Waterfall bridge",
      "description": "A revenue bridge: coloured increases and decreases between two totals, thin connectors, matched-colour labels and a callout on the step that matters.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-waterfall-bridge-01/chart-story-waterfall-bridge.tsx",
          "type": "registry:component",
          "target": "components/chart-story-waterfall-bridge-01/chart-story-waterfall-bridge.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-waterfall-running-01",
      "type": "registry:block",
      "title": "Chart story: Waterfall with subtotals",
      "description": "A horizontal waterfall: monthly steps, automatic quarterly subtotals, a closing total and a plot zoomed to the differences.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-waterfall-running-01/chart-story-waterfall-running.tsx",
          "type": "registry:component",
          "target": "components/chart-story-waterfall-running-01/chart-story-waterfall-running.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-table-scorecard-01",
      "type": "registry:block",
      "title": "Chart story: Table with bars and sparklines",
      "description": "A scorecard table: bar cells, a shaded heat column, category dots, sparklines with the last point emphasised and signed, coloured change.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-table-scorecard-01/chart-story-table-scorecard.tsx",
          "type": "registry:component",
          "target": "components/chart-story-table-scorecard-01/chart-story-table-scorecard.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart-story-heat-table-01",
      "type": "registry:block",
      "title": "Chart story: Heat table",
      "description": "A heat table: a depot by weekday matrix with printed values, five sequential steps, a key that states each range and the maximum ringed.",
      "registryDependencies": ["chart-story-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/chart-story-heat-table-01/chart-story-heat-table.tsx",
          "type": "registry:component",
          "target": "components/chart-story-heat-table-01/chart-story-heat-table.tsx"
        }
      ],
      "categories": ["chart-editorial"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "a2ui-parts",
      "type": "registry:block",
      "title": "A2UI showcase parts",
      "description": "Shared by every A2UI block: the merged ui + charts catalog, the validated example surfaces, a streamed-surface hook, the surface stage, the wire-JSON pane and the host action log.",
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-charts",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/a2ui-parts/action-log.tsx",
          "type": "registry:component",
          "target": "components/a2ui-parts/action-log.tsx"
        },
        {
          "path": "registry/blocks/a2ui-parts/catalog-browser.tsx",
          "type": "registry:component",
          "target": "components/a2ui-parts/catalog-browser.tsx"
        },
        {
          "path": "registry/blocks/a2ui-parts/catalog.ts",
          "type": "registry:component",
          "target": "components/a2ui-parts/catalog.ts"
        },
        {
          "path": "registry/blocks/a2ui-parts/json-pane.tsx",
          "type": "registry:component",
          "target": "components/a2ui-parts/json-pane.tsx"
        },
        {
          "path": "registry/blocks/a2ui-parts/scenarios.ts",
          "type": "registry:component",
          "target": "components/a2ui-parts/scenarios.ts"
        },
        {
          "path": "registry/blocks/a2ui-parts/surface-stage.tsx",
          "type": "registry:component",
          "target": "components/a2ui-parts/surface-stage.tsx"
        },
        {
          "path": "registry/blocks/a2ui-parts/surfaces.ts",
          "type": "registry:component",
          "target": "components/a2ui-parts/surfaces.ts"
        },
        {
          "path": "registry/blocks/a2ui-parts/use-streamed-surface.ts",
          "type": "registry:component",
          "target": "components/a2ui-parts/use-streamed-surface.ts"
        }
      ],
      "categories": ["generative-ui"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "a2ui-decision-01",
      "type": "registry:block",
      "title": "Agent asks for a decision",
      "description": "An agent-designed approval screen (facts, the policy exception, a note, three ways out) rendered from A2UI data. Buttons name host actions; the app answers each one with the agent's next surface, and logs what it received.",
      "registryDependencies": ["a2ui-parts"],
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/a2ui-decision-01/a2ui-decision.tsx",
          "type": "registry:component",
          "target": "components/a2ui-decision-01/a2ui-decision.tsx"
        }
      ],
      "categories": ["generative-ui"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "a2ui-insight-01",
      "type": "registry:block",
      "title": "Analytics answer with charts",
      "description": "An A2UI answer composed by the agent: a headline, KPI tiles with sparklines, two AutoChart figures titled with their findings, the method and follow-up actions. A click on the chart drills into the next surface.",
      "registryDependencies": ["a2ui-parts"],
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/a2ui-insight-01/a2ui-insight.tsx",
          "type": "registry:component",
          "target": "components/a2ui-insight-01/a2ui-insight.tsx"
        }
      ],
      "categories": ["generative-ui"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "a2ui-form-01",
      "type": "registry:block",
      "title": "Agent-built form",
      "description": "A form the agent pre-filled from an alert: inputs, selects, radios, a slider and switches from the catalog. Every change is a named action the host folds into one draft, shown live; submit hands the draft over and the agent answers with a timeline.",
      "registryDependencies": ["a2ui-parts"],
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/a2ui-form-01/a2ui-form.tsx",
          "type": "registry:component",
          "target": "components/a2ui-form-01/a2ui-form.tsx"
        }
      ],
      "categories": ["generative-ui"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "a2ui-streaming-01",
      "type": "registry:block",
      "title": "Streaming surface",
      "description": "The wire JSON beside the surface it becomes: A2uiSurface takes the streamed prefix, closes open brackets, prunes nodes that do not validate yet and paints the rest, with progress and replay.",
      "registryDependencies": ["a2ui-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/a2ui-streaming-01/a2ui-streaming.tsx",
          "type": "registry:component",
          "target": "components/a2ui-streaming-01/a2ui-streaming.tsx"
        }
      ],
      "categories": ["generative-ui"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "a2ui-guardrail-01",
      "type": "registry:block",
      "title": "Catalog guardrail",
      "description": "A surface that tries custom styles, an iframe, an inline handler and an unknown event, refused with every problem and its path, next to the repaired surface the agent sent after reading that list.",
      "registryDependencies": ["a2ui-parts"],
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/a2ui-guardrail-01/a2ui-guardrail.tsx",
          "type": "registry:component",
          "target": "components/a2ui-guardrail-01/a2ui-guardrail.tsx"
        }
      ],
      "categories": ["generative-ui"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "a2ui-assistant-page",
      "type": "registry:block",
      "title": "Template — Generative UI assistant",
      "description": "An assistant that answers with screens: five real conversations (a refund decision, an analytics answer with charts, an incident form, a release plan, a surface the catalog refuses) streamed in as A2UI data and rendered from the merged ui + charts catalog. Every click and change reaches the app as a named action that drives the next turn; the inspector shows the wire JSON, the action log and the catalog.",
      "registryDependencies": ["a2ui-parts", "workspace-shell"],
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/a2ui-assistant-page/a2ui-assistant-page.tsx",
          "type": "registry:component",
          "target": "components/a2ui-assistant-page/a2ui-assistant-page.tsx"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "document-parts",
      "type": "registry:block",
      "title": "Document block parts",
      "description": "Shared by every document block: a fictional supplier data room (a contract, a policy, a quality report, a defect log, a batch record, an inspection log, a chart and a source file) as FileSource values.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/document-parts/files.ts",
          "type": "registry:component",
          "target": "components/document-parts/files.ts"
        }
      ],
      "categories": ["documents"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "document-library-01",
      "type": "registry:block",
      "title": "Document library",
      "description": "A data room with the file open beside the list: folders, a filter and one FileViewer that renders markdown, CSV, JSON, code, logs and images through lazily loaded adapters, with the viewer's own toolbar, find-in-document, pager and zoom.",
      "registryDependencies": ["document-parts"],
      "dependencies": [
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "@elabs-ai/components-viewer",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/document-library-01/document-library.tsx",
          "type": "registry:component",
          "target": "components/document-library-01/document-library.tsx"
        }
      ],
      "categories": ["documents"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "answer-with-sources-01",
      "type": "registry:block",
      "title": "Answer with sources",
      "description": "An answer whose numbered citations open the source document at the quoted sentence: the viewer swaps files, locates the quote, scrolls to it and marks it — and says so when a cited passage is not in the file.",
      "registryDependencies": ["document-parts"],
      "dependencies": [
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "@elabs-ai/components-viewer",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/answer-with-sources-01/answer-with-sources.tsx",
          "type": "registry:component",
          "target": "components/answer-with-sources-01/answer-with-sources.tsx"
        }
      ],
      "categories": ["documents"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "document-review-01",
      "type": "registry:block",
      "title": "Document review",
      "description": "Findings beside the contract they point at: selecting one scrolls to the clause and marks it, verdict buttons record the decision and advance the queue, and progress and the open filter derive from the verdicts.",
      "registryDependencies": ["document-parts"],
      "dependencies": [
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "@elabs-ai/components-viewer",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/document-review-01/document-review.tsx",
          "type": "registry:component",
          "target": "components/document-review-01/document-review.tsx"
        }
      ],
      "categories": ["documents"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "media-parts",
      "type": "registry:block",
      "title": "Media block parts",
      "description": "Shared by every media block: sample media synthesized inline — a silent clip standing in for a film or a recording, a WebVTT captions track, poster frames, cover art and product screenshots drawn as SVG in system colours — so the blocks render offline.",
      "files": [
        {
          "path": "registry/blocks/media-parts/media-fixtures.ts",
          "type": "registry:component",
          "target": "components/media-parts/media-fixtures.ts"
        }
      ],
      "categories": ["media"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "customer-story-01",
      "type": "registry:block",
      "title": "Customer story",
      "description": "A case study as a reading page: headline and lead, the customer’s film in the ui Video player, results as metric tiles, the numbered narrative with pull quotes beside a sticky fact sheet, a screenshot gallery with a lightbox, related stories and a call to action.",
      "registryDependencies": ["media-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/customer-story-01/customer-story.tsx",
          "type": "registry:component",
          "target": "components/customer-story-01/customer-story.tsx"
        },
        {
          "path": "registry/blocks/customer-story-01/data/story.ts",
          "type": "registry:component",
          "target": "components/customer-story-01/data/story.ts"
        }
      ],
      "categories": ["media", "marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "podcast-player-01",
      "type": "registry:block",
      "title": "Podcast player",
      "description": "A show’s episodes beside one player composed from the ui MediaPlayer parts — cover art, the waveform as scrubber, a bar with speed — plus clickable chapters and a transcript that follows playback; choosing an episode from the list starts it.",
      "registryDependencies": ["media-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/podcast-player-01/data/episodes.ts",
          "type": "registry:component",
          "target": "components/podcast-player-01/data/episodes.ts"
        },
        {
          "path": "registry/blocks/podcast-player-01/podcast-player.tsx",
          "type": "registry:component",
          "target": "components/podcast-player-01/podcast-player.tsx"
        }
      ],
      "categories": ["media"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "media-gallery-01",
      "type": "registry:block",
      "title": "Media gallery",
      "description": "Photographs, films and recordings in one masonry of tiles marked by kind and length, filtered by kind; the lightbox opens each with the right viewer — the ui Image, the Video player or the Media player with cover art above the waveform — with previous/next and arrow keys.",
      "registryDependencies": ["media-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/media-gallery-01/data/items.ts",
          "type": "registry:component",
          "target": "components/media-gallery-01/data/items.ts"
        },
        {
          "path": "registry/blocks/media-gallery-01/media-gallery.tsx",
          "type": "registry:component",
          "target": "components/media-gallery-01/media-gallery.tsx"
        }
      ],
      "categories": ["media"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "video-gallery-01",
      "type": "registry:block",
      "title": "Video gallery",
      "description": "A filterable grid of video tiles — poster, play mark, duration, title and date — that opens the chosen video in a dialog with the ui Video player (captions, keyboard, docked controls) and previous/next to move through the set.",
      "registryDependencies": ["media-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/video-gallery-01/data/videos.ts",
          "type": "registry:component",
          "target": "components/video-gallery-01/data/videos.ts"
        },
        {
          "path": "registry/blocks/video-gallery-01/video-gallery.tsx",
          "type": "registry:component",
          "target": "components/video-gallery-01/video-gallery.tsx"
        }
      ],
      "categories": ["media"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "grid-parts",
      "type": "registry:block",
      "title": "DataGrid parts",
      "description": "Shared parts for the DataGrid blocks: a seeded fixture generator with a fixed today, a browser download for tableToXlsx / tableToCsv output, and saved views — a hook plus a menu that store, apply, save and copy versioned GridState JSON.",
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/grid-parts/grid-kit.ts",
          "type": "registry:component",
          "target": "components/grid-parts/grid-kit.ts"
        },
        {
          "path": "registry/blocks/grid-parts/saved-views.tsx",
          "type": "registry:component",
          "target": "components/grid-parts/saved-views.tsx"
        }
      ],
      "categories": ["data"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "grid-price-editor-01",
      "type": "registry:block",
      "title": "Price list editor",
      "description": "A pricing manager edits a price list like a spreadsheet: typed, pasted and filled-down edits, validation against a margin floor, live net price and margin, edited rows marked with an icon and tint, and Publish / Discard with Undo.",
      "registryDependencies": ["grid-parts"],
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/grid-price-editor-01/data/price-list.ts",
          "type": "registry:component",
          "target": "components/grid-price-editor-01/data/price-list.ts"
        },
        {
          "path": "registry/blocks/grid-price-editor-01/price-editor.tsx",
          "type": "registry:component",
          "target": "components/grid-price-editor-01/price-editor.tsx"
        }
      ],
      "categories": ["data"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "grid-sales-ledger-01",
      "type": "registry:block",
      "title": "Sales ledger with pivot and charts",
      "description": "720 order lines grouped by region with group sums and a totals row, a region × quarter pivot built with pivotData, and Chart selection: the grid hands a selected range to onChartRange and the block draws it with AutoChart.",
      "registryDependencies": ["grid-parts"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/grid-sales-ledger-01/data/sales.ts",
          "type": "registry:component",
          "target": "components/grid-sales-ledger-01/data/sales.ts"
        },
        {
          "path": "registry/blocks/grid-sales-ledger-01/sales-ledger.tsx",
          "type": "registry:component",
          "target": "components/grid-sales-ledger-01/sales-ledger.tsx"
        }
      ],
      "categories": ["data"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "grid-live-blotter-01",
      "type": "registry:block",
      "title": "Live positions blotter",
      "description": "An equity book that re-prices on a feed: flashChanges flashes only the cells that moved, an in-cell sparkline trend, pinned symbol, a totals row for market value and P&L, and a Pause control that starts paused under reduced motion.",
      "registryDependencies": ["grid-parts"],
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/grid-live-blotter-01/data/positions.ts",
          "type": "registry:component",
          "target": "components/grid-live-blotter-01/data/positions.ts"
        },
        {
          "path": "registry/blocks/grid-live-blotter-01/live-blotter.tsx",
          "type": "registry:component",
          "target": "components/grid-live-blotter-01/live-blotter.tsx"
        }
      ],
      "categories": ["data"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "grid-orders-detail-01",
      "type": "registry:block",
      "title": "Orders with line items",
      "description": "A fulfilment queue with master / detail: each order expands into its line items, delivery details and actions. Floating filters, value-list filters with counts, and a status badge with an icon as well as a colour.",
      "registryDependencies": ["grid-parts"],
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/grid-orders-detail-01/data/orders.ts",
          "type": "registry:component",
          "target": "components/grid-orders-detail-01/data/orders.ts"
        },
        {
          "path": "registry/blocks/grid-orders-detail-01/orders-detail.tsx",
          "type": "registry:component",
          "target": "components/grid-orders-detail-01/orders-detail.tsx"
        }
      ],
      "categories": ["data"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "grid-cost-tree-01",
      "type": "registry:block",
      "title": "Cost centre tree",
      "description": "Budget vs actual as tree data: teams nest under departments that carry the roll-up, only leaf forecasts are editable, and an edit re-rolls every ancestor so the variance bars and the totals row move together.",
      "registryDependencies": ["grid-parts"],
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/grid-cost-tree-01/cost-tree.tsx",
          "type": "registry:component",
          "target": "components/grid-cost-tree-01/cost-tree.tsx"
        },
        {
          "path": "registry/blocks/grid-cost-tree-01/data/cost-centers.ts",
          "type": "registry:component",
          "target": "components/grid-cost-tree-01/data/cost-centers.ts"
        }
      ],
      "categories": ["data"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "grid-event-log-01",
      "type": "registry:block",
      "title": "Request log explorer",
      "description": "A request log that loads 100 events at a time as you scroll, with set filters on level and service, a number filter on duration, Find, saved views stored as GridState JSON and an Excel export of exactly the view on screen.",
      "registryDependencies": ["grid-parts"],
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/grid-event-log-01/data/events.ts",
          "type": "registry:component",
          "target": "components/grid-event-log-01/data/events.ts"
        },
        {
          "path": "registry/blocks/grid-event-log-01/event-log.tsx",
          "type": "registry:component",
          "target": "components/grid-event-log-01/event-log.tsx"
        }
      ],
      "categories": ["data"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "finance-close-page",
      "type": "registry:block",
      "title": "Template — Month-end close",
      "description": "A month-end close workspace for controllers: a journal-entry DataGrid grouped by account with totals, in-place status and memo edits guarded by validation, saved views, Excel export and a Post approved bulk action with Undo, plus the cost-centre re-forecast tree and a summoned close assistant.",
      "registryDependencies": ["grid-cost-tree-01", "grid-parts", "workspace-shell"],
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/finance-close-page/data/journal.ts",
          "type": "registry:component",
          "target": "components/finance-close-page/data/journal.ts"
        },
        {
          "path": "registry/blocks/finance-close-page/finance-close-page.tsx",
          "type": "registry:component",
          "target": "components/finance-close-page/finance-close-page.tsx"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "commerce-backoffice-page",
      "type": "registry:block",
      "title": "Template — Commerce back office",
      "description": "Orders, stock and prices for a web shop behind one set of tabs in the workspace shell: the orders master / detail grid, a replenishment grid grouped by warehouse with an order-now flag and typed, pasted or filled-down order quantities, and the price list editor.",
      "registryDependencies": [
        "grid-orders-detail-01",
        "grid-parts",
        "grid-price-editor-01",
        "workspace-shell"
      ],
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/commerce-backoffice-page/commerce-backoffice-page.tsx",
          "type": "registry:component",
          "target": "components/commerce-backoffice-page/commerce-backoffice-page.tsx"
        },
        {
          "path": "registry/blocks/commerce-backoffice-page/data/stock.ts",
          "type": "registry:component",
          "target": "components/commerce-backoffice-page/data/stock.ts"
        }
      ],
      "categories": ["template"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-hero-02",
      "type": "registry:block",
      "title": "Marketing — Hero, product",
      "description": "A split hero: the claim, two calls to action and a row of trust facts beside the product itself — KPI tiles, a live area chart and a service status list inside a browser frame, built from real components rather than a screenshot.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-hero-02/marketing-hero-product.tsx",
          "type": "registry:component",
          "target": "components/marketing-hero-02/marketing-hero-product.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-hero-03",
      "type": "registry:block",
      "title": "Marketing — Hero, signup",
      "description": "A centred hero with the sign-up inline: an email field that validates on submit, a pending state on the button and a confirmation naming the address, then three benefits and the people already in — stacked avatars, a count and a rating.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/marketing-hero-03/marketing-hero-signup.tsx",
          "type": "registry:component",
          "target": "components/marketing-hero-03/marketing-hero-signup.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-logos-01",
      "type": "registry:block",
      "title": "Marketing — Logos",
      "description": "A logo cloud of text wordmarks in distinct typographic voices, muted until hovered — as a wrapping grid or a looping marquee that pauses on hover and focus and stands still under reduced motion, with an optional stat line.",
      "dependencies": [
        "@elabs-ai/components-marketing",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-logos-01/marketing-logos.tsx",
          "type": "registry:component",
          "target": "components/marketing-logos-01/marketing-logos.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-features-02",
      "type": "registry:block",
      "title": "Marketing — Feature showcase",
      "description": "Three zig-zag feature rows, copy on one side and the feature on the other: a runs table with status badges, a run timeline and a card of sparklines — the product, not a picture of it. Rows stack below the 2xl container width.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-features-02/marketing-feature-showcase.tsx",
          "type": "registry:component",
          "target": "components/marketing-features-02/marketing-feature-showcase.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-features-03",
      "type": "registry:block",
      "title": "Marketing — Feature tabs",
      "description": "A tabbed feature explorer: features down the left with a glyph and a one-liner, the chosen one rendered live on the right — a work board, an assistant conversation and metric tiles. Arrow keys move through the list; it stacks above the preview when narrow.",
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-charts",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-features-03/marketing-feature-tabs.tsx",
          "type": "registry:component",
          "target": "components/marketing-features-03/marketing-feature-tabs.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-stats-02",
      "type": "registry:block",
      "title": "Marketing — Stats, big numbers",
      "description": "Four very large numbers with unit, one line of meaning and a twelve-month sparkline each, tied together by a headline sentence. Trends that improved or worsened say so with a glyph and a word, never colour alone.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-stats-02/marketing-stats-big.tsx",
          "type": "registry:component",
          "target": "components/marketing-stats-02/marketing-stats-big.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-process-01",
      "type": "registry:block",
      "title": "Marketing — Process",
      "description": "How it works in four numbered steps along a rail that fades at both ends; each step has a glyph, a title, a sentence or two and a chip naming what the visitor sees on screen. A row when wide, a column when not.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/marketing-process-01/marketing-process.tsx",
          "type": "registry:component",
          "target": "components/marketing-process-01/marketing-process.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-banner-01",
      "type": "registry:block",
      "title": "Marketing — Banner",
      "description": "An announcement bar for a release, an offer or a maintenance window, each with its own glyph, colour and leading word, with a link, an optional deadline and a dismiss button; sits above the navigation or stays pinned with `sticky`.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/marketing-banner-01/marketing-banner.tsx",
          "type": "registry:component",
          "target": "components/marketing-banner-01/marketing-banner.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-pricing-02",
      "type": "registry:block",
      "title": "Marketing — Pricing compare",
      "description": "The full feature matrix: four plans with price and a button in a header row that stays in view while the feature groups (Core, Collaboration, Security, Support) scroll past, cells that say included, not included or the limit in words, and a billing toggle that recomputes every price. The popular plan is named as such and framed; below @3xl the rows stack into one card per plan.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/marketing-pricing-02/marketing-pricing-compare.tsx",
          "type": "registry:component",
          "target": "components/marketing-pricing-02/marketing-pricing-compare.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-compare-01",
      "type": "registry:block",
      "title": "Marketing — Compare",
      "description": "Us against the alternatives, honestly: a row per criterion with a yes, partly or no mark and a sentence of verdict per column, including the rows a spreadsheet wins, and a last row that says who each option is best for. A table when the container is wide, one card per criterion when it is not.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/marketing-compare-01/marketing-compare.tsx",
          "type": "registry:component",
          "target": "components/marketing-compare-01/marketing-compare.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-testimonials-02",
      "type": "registry:block",
      "title": "Marketing — Testimonial spotlight",
      "description": "One customer at a time at full size: the quote, who said it, the company wordmark, their rating and the number the quote is about. Previous, next, the dots and the arrow keys move between quotes; the strip of wordmarks jumps straight to a customer. Nothing advances on its own, and the quote is announced politely when it changes.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/marketing-testimonials-02/marketing-testimonial-spotlight.tsx",
          "type": "registry:component",
          "target": "components/marketing-testimonials-02/marketing-testimonial-spotlight.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-cta-02",
      "type": "registry:block",
      "title": "Marketing — CTA banner",
      "description": "The closing ask as a full-width band on the primary plate: a headline, one thing to do, one quieter alternative, and a proof card with a live number and its two-week trend on a sparkline. The band’s gradient comes from the primary tokens, so it re-tints with every theme.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-cta-02/marketing-cta-banner.tsx",
          "type": "registry:component",
          "target": "components/marketing-cta-02/marketing-cta-banner.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-trust-01",
      "type": "registry:block",
      "title": "Marketing — Trust",
      "description": "Compliance and security stated plainly: the standards as text badges with a shield rather than borrowed certifier logos, four facts about how data is handled with the uptime figure on a real Meter, and a TrustStrip of proofs each linking to the document behind it, with the trust centre one click away.",
      "dependencies": [
        "@elabs-ai/components-marketing",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-trust-01/marketing-trust.tsx",
          "type": "registry:component",
          "target": "components/marketing-trust-01/marketing-trust.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-integrations-01",
      "type": "registry:block",
      "title": "Marketing — Integrations",
      "description": "The integrations wall: a search box and category toggles with counts that filter a grid of sixteen tiles, each with a glyph, the product, one line on what it does and a Native or Via API badge. The match count is announced as it changes, and an empty result says what to try and where to ask for a connector.",
      "dependencies": [
        "@elabs-ai/components-data",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-integrations-01/marketing-integrations.tsx",
          "type": "registry:component",
          "target": "components/marketing-integrations-01/marketing-integrations.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-waitlist-01",
      "type": "registry:block",
      "title": "Marketing — Waitlist",
      "description": "A launch waitlist: the pitch, one email field that validates and shows a pending state, and on success the place in line with a referral link and a copy button (clipboard behind a try/catch, with a fallback message). The faces and count show who is already waiting; three dated milestones say what has shipped and what is coming.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/marketing-waitlist-01/marketing-waitlist.tsx",
          "type": "registry:component",
          "target": "components/marketing-waitlist-01/marketing-waitlist.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-book-demo-01",
      "type": "registry:block",
      "title": "Marketing — Book a demo",
      "description": "Book a demo: on the left what the half hour covers and who runs it, on the right a form that validates on submit — name, work email, company size, an optional use case and a slot chosen from a row of aria-pressed time chips. Taken slots stay visible but cannot be picked; booking ends in a confirmation that repeats the slot and the address.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/marketing-book-demo-01/marketing-book-demo.tsx",
          "type": "registry:component",
          "target": "components/marketing-book-demo-01/marketing-book-demo.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-cookie-banner-01",
      "type": "registry:block",
      "title": "Marketing — Cookie banner",
      "description": "Cookie consent that treats the visitor as an adult: two sentences on what the cookies do, then Accept all, Reject non-essential and Manage side by side, none hidden or greyed. Manage opens a dialog with one switch per category, Essential visibly locked on and a running count of what is on; the block reports the decision through onDecision and hides itself. Default and compact variants, fixed to the viewport or sticky in its container.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/marketing-cookie-banner-01/marketing-cookie-banner.tsx",
          "type": "registry:component",
          "target": "components/marketing-cookie-banner-01/marketing-cookie-banner.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marketing-code-example-01",
      "type": "registry:block",
      "title": "Marketing — Code example",
      "description": "A developer hero that shows the code before it explains it: the pitch and a package-manager install chip on one side, curl / TypeScript / Python tabs over a highlighted, copyable CodeBlock on the other, and three reasons a developer can verify underneath — typed SDKs, a written uptime promise, a sandbox that fails on purpose. Every string, snippet and fact is a prop, so the same layout sells any API.",
      "dependencies": [
        "@elabs-ai/components-ai",
        "@elabs-ai/components-icons",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing-code-example-01/marketing-code-example.tsx",
          "type": "registry:component",
          "target": "components/marketing-code-example-01/marketing-code-example.tsx"
        }
      ],
      "categories": ["marketing"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "blog-list-01",
      "type": "registry:block",
      "title": "Content — Blog list",
      "description": "A blog index: the newest post large at the top with its cover, topic chips that filter the grid, and cards with cover, tag, title, excerpt, author, date and reading time. “Load more” reveals the next page from the data; the count is announced.",
      "registryDependencies": ["media-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/blog-list-01/blog-list.tsx",
          "type": "registry:component",
          "target": "components/blog-list-01/blog-list.tsx"
        },
        {
          "path": "registry/blocks/blog-list-01/data.ts",
          "type": "registry:component",
          "target": "components/blog-list-01/data.ts"
        }
      ],
      "categories": ["content"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "blog-post-01",
      "type": "registry:block",
      "title": "Content — Blog post",
      "description": "An article page: tag, title, lead, the author with date and reading time and share buttons; a sticky table of contents that marks the current section; the body as real prose — headings, paragraphs, a pull quote, a list, a code block and a figure — then related posts and a newsletter foot that validates.",
      "registryDependencies": ["marketing-parts", "media-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/blog-post-01/blog-post.tsx",
          "type": "registry:component",
          "target": "components/blog-post-01/blog-post.tsx"
        }
      ],
      "categories": ["content"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "changelog-01",
      "type": "registry:block",
      "title": "Content — Changelog",
      "description": "Versioned release notes down a rail: date, version badge and title per release, changes with a New / Improved / Fixed badge that carries an icon as well as a colour, a “Breaking” callout with a migration link, docs links, an All / Major / Minor filter and a subscribe row with RSS.",
      "registryDependencies": ["marketing-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/changelog-01/changelog.tsx",
          "type": "registry:component",
          "target": "components/changelog-01/changelog.tsx"
        }
      ],
      "categories": ["content"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "careers-01",
      "type": "registry:block",
      "title": "Content — Careers",
      "description": "Open roles under three reasons to join: team and location selects plus a remote switch narrow the list, roles are grouped by team as rows with location, type, a “New” badge and an apply link, the count is announced, and an empty state takes an email when nothing matches.",
      "registryDependencies": ["marketing-parts"],
      "dependencies": [
        "@elabs-ai/components-marketing",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/careers-01/careers.tsx",
          "type": "registry:component",
          "target": "components/careers-01/careers.tsx"
        }
      ],
      "categories": ["content"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "case-studies-01",
      "type": "registry:block",
      "title": "Content — Case studies",
      "description": "A case-study grid: industry chips that filter, cards led by the headline result as a big number, the customer as a text wordmark, a one-line summary, industry and region meta and a “Read story” link; one featured story spans two columns with its pull quote.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/case-studies-01/case-studies.tsx",
          "type": "registry:component",
          "target": "components/case-studies-01/case-studies.tsx"
        }
      ],
      "categories": ["content"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "about-story-01",
      "type": "registry:block",
      "title": "Content — About story",
      "description": "“Our story”: the mission beside the founding prose, a milestone timeline that runs across the page at wide widths and down it at narrow ones with “today” marked, four values with an icon and prose, and the company by the numbers in a StatsBand.",
      "dependencies": [
        "@elabs-ai/components-marketing",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/about-story-01/about-story.tsx",
          "type": "registry:component",
          "target": "components/about-story-01/about-story.tsx"
        }
      ],
      "categories": ["content"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "help-center-01",
      "type": "registry:block",
      "title": "Content — Help centre",
      "description": "A help-centre landing: a big search with suggested queries as chips, six topic cards with an icon and article count, the most-read articles with view counts, and a “Still stuck?” row pointing at support, the status page and the community.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/help-center-01/help-center.tsx",
          "type": "registry:component",
          "target": "components/help-center-01/help-center.tsx"
        }
      ],
      "categories": ["content"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "resources-01",
      "type": "registry:block",
      "title": "Content — Resources",
      "description": "A resource library: a featured banner up top, type tabs (All, Guides, Webinars, Reports, Templates) that filter the grid, cards with a type badge that carries an icon, title, blurb, duration or page count and a Download / Watch action; the result count is announced.",
      "registryDependencies": ["media-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/resources-01/resources.tsx",
          "type": "registry:component",
          "target": "components/resources-01/resources.tsx"
        }
      ],
      "categories": ["content"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "user-profile-01",
      "type": "registry:block",
      "title": "Account and Settings — User profile",
      "description": "A public profile page: a token-painted cover, the avatar, the facts a colleague looks for first and Follow / Message that work. Four stat tiles in tabular figures, then three tabs — an overview with the bio, skill chips and a 26-week contribution heat strip (colour plus a count on every cell and a legend), recent activity as a Timeline, and projects as a card grid with a written status on each.",
      "dependencies": [
        "@elabs-ai/components-charts",
        "@elabs-ai/components-tokens",
        "@elabs-ai/components-ui",
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/user-profile-01/user-profile.tsx",
          "type": "registry:component",
          "target": "components/user-profile-01/user-profile.tsx"
        }
      ],
      "categories": ["account"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "invite-members-01",
      "type": "registry:block",
      "title": "Account and Settings — Invite members",
      "description": "Both ends of an invitation. InviteMembers turns typed or pasted addresses into chips (Enter, comma, space, Backspace removes), keeps an address that is not an email but flags it and never sends it, puts a role Select on every chip, copies a share link in one click and lists pending invites with resend and a revoke that asks first. AcceptInvite is the page behind the link: workspace, inviter, role, “Join as <email>”, “Not you? Switch account”, decline, and plain words when the link expired or you are already a member.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/invite-members-01/invite-members.tsx",
          "type": "registry:component",
          "target": "components/invite-members-01/invite-members.tsx"
        }
      ],
      "categories": ["account"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "order-history-01",
      "type": "registry:block",
      "title": "Commerce — Order history",
      "description": "A customer’s order history: status, period and search filters that work together, and every order as a row that opens in place — line items with token-painted thumbnails, the total in the shop’s currency, a placed → packed → shipped → delivered Timeline with the current step marked, and Track, Buy again and Invoice where they apply. Status is a badge with an icon and words, never colour alone; the empty result says which filter to loosen.",
      "registryDependencies": ["commerce-parts"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/order-history-01/order-history.tsx",
          "type": "registry:component",
          "target": "components/order-history-01/order-history.tsx"
        }
      ],
      "categories": ["commerce"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "product-reviews-01",
      "type": "registry:block",
      "title": "Commerce — Product reviews",
      "description": "Reviews with the distribution behind the average: five Meter rows with real counts, the share who gave four stars or more, and a sort Select and “verified only” Switch that filter the list. Each card carries the Rating, a verified badge with an icon, what the reviewer bought and a helpful button that toggles its count. “Write a review” opens a dialog with a star input, title and body that validate before the review lands at the top with a thank-you.",
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui", "lucide-react"],
      "files": [
        {
          "path": "registry/blocks/product-reviews-01/product-reviews.tsx",
          "type": "registry:component",
          "target": "components/product-reviews-01/product-reviews.tsx"
        }
      ],
      "categories": ["commerce"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "site-frame",
      "type": "registry:block",
      "title": "Site frame",
      "description": "The navbar, one main landmark and the footer every website page template shares, with a banner slot above and an after slot below for a cookie banner.",
      "registryDependencies": ["marketing-footer-01", "marketing-navbar-01"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/site-frame/site-frame.tsx",
          "type": "registry:component",
          "target": "components/site-frame/site-frame.tsx"
        }
      ],
      "categories": ["marketing", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "landing-page",
      "type": "registry:block",
      "title": "Page — Landing",
      "description": "The classic marketing landing page: a release banner, the hero with its logo strip, the feature grid, a showcase that alternates copy and product, the stats band, testimonials, the pricing table, an FAQ and the closing CTA — with a cookie banner that stays out of the way until it is answered.",
      "registryDependencies": [
        "marketing-banner-01",
        "marketing-cookie-banner-01",
        "marketing-cta-01",
        "marketing-faq-01",
        "marketing-features-01",
        "marketing-features-02",
        "marketing-hero",
        "marketing-pricing-01",
        "marketing-stats-01",
        "marketing-testimonials-01",
        "site-frame"
      ],
      "files": [
        {
          "path": "registry/blocks/landing-page/landing-page.tsx",
          "type": "registry:component",
          "target": "components/landing-page/landing-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "product-landing-page",
      "type": "registry:block",
      "title": "Page — Product Landing",
      "description": "A product-led variant of the landing page: the hero shows the product itself with live metrics and a sparkline, a marquee logo strip, feature tabs that switch the product screen, the bento grid, the big-number stats band, a testimonial spotlight and a CTA banner with social proof.",
      "registryDependencies": [
        "marketing-bento-01",
        "marketing-cta-02",
        "marketing-features-03",
        "marketing-hero-02",
        "marketing-logos-01",
        "marketing-stats-02",
        "marketing-testimonials-02",
        "site-frame"
      ],
      "files": [
        {
          "path": "registry/blocks/product-landing-page/product-landing-page.tsx",
          "type": "registry:component",
          "target": "components/product-landing-page/product-landing-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "developers-page",
      "type": "registry:block",
      "title": "Page — Developers",
      "description": "The developer landing page: a code-first hero with install commands and switchable snippets, the process in three steps, the integrations wall, the trust and security band and a CTA banner — the page a developer reads before opening the docs.",
      "registryDependencies": [
        "marketing-code-example-01",
        "marketing-cta-02",
        "marketing-integrations-01",
        "marketing-process-01",
        "marketing-trust-01",
        "site-frame"
      ],
      "files": [
        {
          "path": "registry/blocks/developers-page/developers-page.tsx",
          "type": "registry:component",
          "target": "components/developers-page/developers-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pricing-page",
      "type": "registry:block",
      "title": "Page — Pricing",
      "description": "The pricing page: the plan cards with a monthly/yearly toggle, the full feature-by-plan comparison table, testimonials for reassurance, the pricing FAQ and the closing CTA.",
      "registryDependencies": [
        "marketing-cta-01",
        "marketing-faq-01",
        "marketing-pricing-01",
        "marketing-pricing-02",
        "marketing-testimonials-01",
        "site-frame"
      ],
      "files": [
        {
          "path": "registry/blocks/pricing-page/pricing-page.tsx",
          "type": "registry:component",
          "target": "components/pricing-page/pricing-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "features-page",
      "type": "registry:block",
      "title": "Page — Features",
      "description": "The features page: an alternating showcase of copy and product, tabs that switch the product screen, the bento grid for the smaller capabilities, the process in steps and the closing CTA.",
      "registryDependencies": [
        "marketing-bento-01",
        "marketing-cta-01",
        "marketing-features-02",
        "marketing-features-03",
        "marketing-process-01",
        "site-frame"
      ],
      "files": [
        {
          "path": "registry/blocks/features-page/features-page.tsx",
          "type": "registry:component",
          "target": "components/features-page/features-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "integrations-page",
      "type": "registry:block",
      "title": "Page — Integrations",
      "description": "The integrations page: a filterable wall of integration tiles with a request-an-integration link, the trust and security band that answers the data question, and a CTA banner.",
      "registryDependencies": [
        "marketing-cta-02",
        "marketing-integrations-01",
        "marketing-trust-01",
        "site-frame"
      ],
      "files": [
        {
          "path": "registry/blocks/integrations-page/integrations-page.tsx",
          "type": "registry:component",
          "target": "components/integrations-page/integrations-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "compare-page",
      "type": "registry:block",
      "title": "Page — Compare",
      "description": "The comparison page: a side-by-side table against the alternatives with a best-for row, testimonials from people who switched, the FAQ and the closing CTA.",
      "registryDependencies": [
        "marketing-compare-01",
        "marketing-cta-01",
        "marketing-faq-01",
        "marketing-testimonials-01",
        "site-frame"
      ],
      "files": [
        {
          "path": "registry/blocks/compare-page/compare-page.tsx",
          "type": "registry:component",
          "target": "components/compare-page/compare-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "about-page",
      "type": "registry:block",
      "title": "Page — About",
      "description": "The about page: mission, story, milestones, values and numbers, the team grid, a careers teaser with open roles and the closing CTA.",
      "registryDependencies": [
        "about-story-01",
        "careers-01",
        "marketing-cta-01",
        "marketing-team-01",
        "site-frame"
      ],
      "files": [
        {
          "path": "registry/blocks/about-page/about-page.tsx",
          "type": "registry:component",
          "target": "components/about-page/about-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "careers-page",
      "type": "registry:block",
      "title": "Page — Careers",
      "description": "The careers page: the values that make the pitch, the open roles grouped by team with a leave-your-details fallback, the team grid, and testimonials from the people who work there.",
      "registryDependencies": [
        "careers-01",
        "marketing-team-01",
        "marketing-testimonials-01",
        "site-frame"
      ],
      "files": [
        {
          "path": "registry/blocks/careers-page/careers-page.tsx",
          "type": "registry:component",
          "target": "components/careers-page/careers-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "contact-page",
      "type": "registry:block",
      "title": "Page — Contact",
      "description": "The contact page: the contact form with a topic picker and the other ways to reach the company, the FAQ that answers the question before it is asked, and the newsletter for people who are not ready yet.",
      "registryDependencies": [
        "marketing-contact-01",
        "marketing-faq-01",
        "marketing-newsletter-01",
        "site-frame"
      ],
      "files": [
        {
          "path": "registry/blocks/contact-page/contact-page.tsx",
          "type": "registry:component",
          "target": "components/contact-page/contact-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "blog-page",
      "type": "registry:block",
      "title": "Page — Blog",
      "description": "The blog index: a filterable, paged list of posts with a featured post on top, and the newsletter signup below.",
      "registryDependencies": ["blog-list-01", "marketing-newsletter-01", "site-frame"],
      "files": [
        {
          "path": "registry/blocks/blog-page/blog-page.tsx",
          "type": "registry:component",
          "target": "components/blog-page/blog-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "blog-article-page",
      "type": "registry:block",
      "title": "Page — Blog Article",
      "description": "A single blog article: the post with its table of contents, author, share controls, related posts and an inline subscribe — the reading page of the blog.",
      "registryDependencies": ["blog-post-01", "site-frame"],
      "files": [
        {
          "path": "registry/blocks/blog-article-page/blog-article-page.tsx",
          "type": "registry:component",
          "target": "components/blog-article-page/blog-article-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "changelog-page",
      "type": "registry:block",
      "title": "Page — Changelog",
      "description": "The changelog: releases in reverse order, each with its typed changes, an RSS link and a subscribe form, followed by a CTA banner for readers who are not customers yet.",
      "registryDependencies": ["changelog-01", "marketing-cta-02", "site-frame"],
      "files": [
        {
          "path": "registry/blocks/changelog-page/changelog-page.tsx",
          "type": "registry:component",
          "target": "components/changelog-page/changelog-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "help-center-page",
      "type": "registry:block",
      "title": "Page — Help Center",
      "description": "The help center landing: search with suggestions, categories with article counts, popular articles, the status/community/contact links, and the contact form for what the articles do not answer.",
      "registryDependencies": ["help-center-01", "marketing-contact-01", "site-frame"],
      "files": [
        {
          "path": "registry/blocks/help-center-page/help-center-page.tsx",
          "type": "registry:component",
          "target": "components/help-center-page/help-center-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "case-studies-page",
      "type": "registry:block",
      "title": "Page — Case Studies",
      "description": "The customers page: the wall of case studies filterable by industry, the big-number outcomes, a logo strip and the closing CTA.",
      "registryDependencies": [
        "case-studies-01",
        "marketing-cta-01",
        "marketing-logos-01",
        "marketing-stats-02",
        "site-frame"
      ],
      "files": [
        {
          "path": "registry/blocks/case-studies-page/case-studies-page.tsx",
          "type": "registry:component",
          "target": "components/case-studies-page/case-studies-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "customer-story-page",
      "type": "registry:block",
      "title": "Page — Customer Story",
      "description": "A single customer story: the headline outcome, the customer's facts, the challenge/solution/results narrative with pull quotes, before-and-after numbers and the CTA to talk to sales.",
      "registryDependencies": ["customer-story-01", "site-frame"],
      "files": [
        {
          "path": "registry/blocks/customer-story-page/customer-story-page.tsx",
          "type": "registry:component",
          "target": "components/customer-story-page/customer-story-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "resources-page",
      "type": "registry:block",
      "title": "Page — Resources",
      "description": "The resources library: a featured guide, resources filterable by type (guide, webinar, template, report), and the newsletter to be told about the next one.",
      "registryDependencies": ["marketing-newsletter-01", "resources-01", "site-frame"],
      "files": [
        {
          "path": "registry/blocks/resources-page/resources-page.tsx",
          "type": "registry:component",
          "target": "components/resources-page/resources-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "book-demo-page",
      "type": "registry:block",
      "title": "Page — Talk to Sales",
      "description": "The talk-to-sales page: the booking form with the walkthrough agenda, hosts and time slots, the logo strip and a testimonial spotlight underneath for the person who is still deciding.",
      "registryDependencies": [
        "marketing-book-demo-01",
        "marketing-logos-01",
        "marketing-testimonials-02",
        "site-frame"
      ],
      "files": [
        {
          "path": "registry/blocks/book-demo-page/book-demo-page.tsx",
          "type": "registry:component",
          "target": "components/book-demo-page/book-demo-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "coming-soon-page",
      "type": "registry:block",
      "title": "Page — Coming Soon",
      "description": "The pre-launch page: an email-first hero with benefits and social proof, the waitlist with its milestones, and a preview of the features to come.",
      "registryDependencies": [
        "marketing-features-01",
        "marketing-hero-03",
        "marketing-waitlist-01",
        "site-frame"
      ],
      "files": [
        {
          "path": "registry/blocks/coming-soon-page/coming-soon-page.tsx",
          "type": "registry:component",
          "target": "components/coming-soon-page/coming-soon-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sign-in-page",
      "type": "registry:block",
      "title": "Page — Sign In",
      "description": "The sign-in page: the split login (form beside the brand aside) between the site's navbar and footer, with the sign-in link hidden from the navbar because you are already there.",
      "registryDependencies": ["login-02", "site-frame"],
      "files": [
        {
          "path": "registry/blocks/sign-in-page/sign-in-page.tsx",
          "type": "registry:component",
          "target": "components/sign-in-page/sign-in-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sign-up-page",
      "type": "registry:block",
      "title": "Page — Sign Up",
      "description": "The sign-up page: the registration card with password strength and terms, centred in the site frame, with a logo strip below as reassurance.",
      "registryDependencies": ["marketing-logos-01", "register-01", "site-frame"],
      "files": [
        {
          "path": "registry/blocks/sign-up-page/sign-up-page.tsx",
          "type": "registry:component",
          "target": "components/sign-up-page/sign-up-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "forgot-password-page",
      "type": "registry:block",
      "title": "Page — Forgot Password",
      "description": "The forgot-password page: the reset card (email in, confirmation out) centred in the site frame — the same route shape as sign-in and sign-up.",
      "registryDependencies": ["forgot-password-01", "site-frame"],
      "files": [
        {
          "path": "registry/blocks/forgot-password-page/forgot-password-page.tsx",
          "type": "registry:component",
          "target": "components/forgot-password-page/forgot-password-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "shop-page",
      "type": "registry:block",
      "title": "Page — Shop",
      "description": "The shop page: the product grid with sort and quick add in the site frame, followed by the trust band and the newsletter.",
      "registryDependencies": [
        "marketing-newsletter-01",
        "marketing-trust-01",
        "product-grid-01",
        "site-frame"
      ],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/shop-page/shop-page.tsx",
          "type": "registry:component",
          "target": "components/shop-page/shop-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "product-page",
      "type": "registry:block",
      "title": "Page — Product",
      "description": "The product page: gallery, options, price and add-to-cart in the site frame, then the reviews with their rating breakdown and a review form, and the newsletter.",
      "registryDependencies": [
        "marketing-newsletter-01",
        "product-detail-01",
        "product-reviews-01",
        "site-frame"
      ],
      "files": [
        {
          "path": "registry/blocks/product-page/product-page.tsx",
          "type": "registry:component",
          "target": "components/product-page/product-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkout-page",
      "type": "registry:block",
      "title": "Page — Checkout",
      "description": "The checkout page: contact, delivery, payment and the order summary in the site frame with the trust band below it — the last page before the order.",
      "registryDependencies": ["checkout-01", "marketing-trust-01", "site-frame"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/checkout-page/checkout-page.tsx",
          "type": "registry:component",
          "target": "components/checkout-page/checkout-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "account-page",
      "type": "registry:block",
      "title": "Page — Account",
      "description": "The account page: the public profile with its stats and contribution strip, and the order history with track, reorder and invoice actions — a signed-in route inside the site frame.",
      "registryDependencies": ["order-history-01", "site-frame", "user-profile-01"],
      "files": [
        {
          "path": "registry/blocks/account-page/account-page.tsx",
          "type": "registry:component",
          "target": "components/account-page/account-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "not-found-page",
      "type": "registry:block",
      "title": "Page — Not Found",
      "description": "The 404 page: an empty-state panel with the two ways out (home, search the help center) inside the site frame, and the resources library so the visit is not wasted.",
      "registryDependencies": ["resources-01", "site-frame"],
      "dependencies": ["@elabs-ai/components-tokens", "@elabs-ai/components-ui"],
      "files": [
        {
          "path": "registry/blocks/not-found-page/not-found-page.tsx",
          "type": "registry:component",
          "target": "components/not-found-page/not-found-page.tsx"
        }
      ],
      "categories": ["template", "pages"]
    }
  ]
}
