{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "opendraft",
  "homepage": "https://github.com/nuelmdesign/UI-System",
  "items": [
    {
      "name": "theme",
      "type": "registry:theme",
      "title": "Theme",
      "description": "opendraft color, radius, elevation and motion tokens (light + dark).",
      "cssVars": {
        "theme": {
          "font-sans": "var(--font-body)",
          "font-display": "var(--font-heading)",
          "font-mono": "var(--font-code)",
          "text-xs": "calc(0.75rem * var(--text-scale))",
          "text-sm": "calc(0.875rem * var(--text-scale))",
          "text-base": "calc(1rem * var(--text-scale))",
          "text-lg": "calc(1.125rem * var(--text-scale))",
          "text-xl": "calc(1.25rem * var(--text-scale))",
          "text-2xl": "calc(1.5rem * var(--text-scale))",
          "text-3xl": "calc(1.875rem * var(--text-scale))",
          "text-4xl": "calc(2.25rem * var(--text-scale))",
          "text-5xl": "calc(3rem * var(--text-scale))",
          "text-6xl": "calc(3.75rem * var(--text-scale))",
          "text-7xl": "calc(4.5rem * var(--text-scale))",
          "text-8xl": "calc(6rem * var(--text-scale))",
          "text-9xl": "calc(8rem * var(--text-scale))",
          "color-blue-50": "var(--blue-50)",
          "color-blue-100": "var(--blue-100)",
          "color-blue-200": "var(--blue-200)",
          "color-blue-300": "var(--blue-300)",
          "color-blue-400": "var(--blue-400)",
          "color-blue-500": "var(--blue-500)",
          "color-blue-600": "var(--blue-600)",
          "color-blue-700": "var(--blue-700)",
          "color-blue-800": "var(--blue-800)",
          "color-blue-900": "var(--blue-900)",
          "color-blue-950": "var(--blue-950)",
          "color-background": "var(--background)",
          "color-foreground": "var(--foreground)",
          "color-card": "var(--card)",
          "color-card-foreground": "var(--card-foreground)",
          "color-popover": "var(--popover)",
          "color-popover-foreground": "var(--popover-foreground)",
          "color-surface": "var(--surface)",
          "color-primary": "var(--primary)",
          "color-primary-foreground": "var(--primary-foreground)",
          "color-secondary": "var(--secondary)",
          "color-secondary-foreground": "var(--secondary-foreground)",
          "color-brand": "var(--brand)",
          "color-brand-foreground": "var(--brand-foreground)",
          "color-ink": "var(--ink)",
          "color-ink-foreground": "var(--ink-foreground)",
          "color-muted": "var(--muted)",
          "color-muted-foreground": "var(--muted-foreground)",
          "color-accent": "var(--accent)",
          "color-accent-foreground": "var(--accent-foreground)",
          "color-destructive": "var(--destructive)",
          "color-destructive-foreground": "var(--destructive-foreground)",
          "color-success": "var(--success)",
          "color-warning": "var(--warning)",
          "color-border": "var(--border)",
          "color-input": "var(--input)",
          "color-ring": "var(--ring)",
          "radius-xs": "calc(var(--control-radius) * 0.25)",
          "radius-sm": "calc(var(--control-radius) * 0.5)",
          "radius-md": "var(--control-radius)",
          "radius-control": "var(--control-radius)",
          "radius-lg": "var(--surface-radius)",
          "radius-surface": "var(--surface-radius)",
          "radius-xl": "calc(var(--surface-radius) + 1px)",
          "radius-2xl": "calc(var(--surface-radius) + 3px)",
          "radius-3xl": "calc(var(--surface-radius) + 5px)",
          "shadow-xs": "var(--shadow-xs)",
          "shadow-sm": "var(--shadow-sm)",
          "shadow-md": "var(--shadow-md)",
          "shadow-lg": "var(--shadow-lg)",
          "shadow-xl": "var(--shadow-xl)",
          "ease-out": "cubic-bezier(0.22, 1, 0.36, 1)",
          "ease-in-out": "cubic-bezier(0.65, 0, 0.35, 1)",
          "ease-in": "cubic-bezier(0.55, 0, 1, 0.45)",
          "ease-spring": "cubic-bezier(0.34, 1.56, 0.64, 1)",
          "animate-pop-in": "pop-in 160ms var(--ease-out)",
          "animate-pop-out": "pop-out 120ms var(--ease-in) forwards",
          "animate-shimmer": "shimmer 2.2s linear infinite",
          "animate-marquee": "marquee var(--marquee-duration, 30s) linear infinite",
          "animate-fade-in": "fade-in 300ms var(--ease-out) both",
          "animate-fade-up": "fade-up 320ms var(--ease-out) both",
          "animate-pixel-on": "pixel-on 650ms var(--ease-in-out) infinite",
          "animate-eq": "eq 900ms var(--ease-in-out) infinite",
          "animate-blink": "blink 1.1s var(--ease-in-out) infinite"
        },
        "light": {
          "blue-50": "#f0f3ff",
          "blue-100": "#e2e8ff",
          "blue-200": "#c8d2ff",
          "blue-300": "#a3b3ff",
          "blue-400": "#7b8cfa",
          "blue-500": "#5468f4",
          "blue-600": "#3d4fe6",
          "blue-700": "#3140c2",
          "blue-800": "#29359a",
          "blue-900": "#232d74",
          "blue-950": "#151a45",
          "font-heading": "var(--font-newsreader, ui-serif, Georgia, serif)",
          "font-body": "var(--font-geist, ui-sans-serif, system-ui, sans-serif)",
          "font-code": "var(--font-geist-mono, ui-monospace, monospace)",
          "heading-weight": "300",
          "heading-tracking": "-0.02em",
          "control-radius": "2px",
          "surface-radius": "3px",
          "text-scale": "1",
          "radius": "var(--control-radius)",
          "background": "#fafafa",
          "foreground": "#0e0e10",
          "card": "#ffffff",
          "card-foreground": "var(--foreground)",
          "popover": "#ffffff",
          "popover-foreground": "var(--foreground)",
          "surface": "#f4f4f5",
          "primary": "var(--blue-600)",
          "primary-foreground": "#ffffff",
          "secondary": "#f1f1f3",
          "secondary-foreground": "var(--foreground)",
          "brand": "var(--blue-600)",
          "brand-foreground": "#ffffff",
          "ink": "#0e0e10",
          "ink-foreground": "#ffffff",
          "muted": "#f2f2f3",
          "muted-foreground": "#6b6b72",
          "accent": "#efeff1",
          "accent-foreground": "var(--foreground)",
          "destructive": "oklch(0.577 0.215 27)",
          "destructive-foreground": "#ffffff",
          "success": "oklch(0.6 0.14 155)",
          "warning": "oklch(0.75 0.15 70)",
          "border": "#e4e4e7",
          "input": "#d9d9de",
          "ring": "color-mix(in oklch, var(--blue-500) 45%, transparent)",
          "shadow-xs": "0 1px 0 rgb(14 14 16 / 0.02)",
          "shadow-sm": "0 1px 2px rgb(14 14 16 / 0.04)",
          "shadow-md": "0 4px 16px rgb(14 14 16 / 0.06)",
          "shadow-lg": "0 8px 24px rgb(14 14 16 / 0.08)",
          "shadow-xl": "0 24px 56px rgb(14 14 16 / 0.14)",
          "highlight": "0 0 #0000"
        },
        "dark": {
          "background": "#0a0a0b",
          "foreground": "#f2f2f3",
          "card": "#111113",
          "card-foreground": "var(--foreground)",
          "popover": "#151517",
          "popover-foreground": "var(--foreground)",
          "surface": "#0f0f11",
          "primary": "var(--blue-500)",
          "primary-foreground": "#ffffff",
          "secondary": "#1b1b1e",
          "secondary-foreground": "var(--foreground)",
          "brand": "var(--blue-400)",
          "brand-foreground": "#ffffff",
          "ink": "#f2f2f3",
          "ink-foreground": "#0e0e10",
          "muted": "#1a1a1d",
          "muted-foreground": "#8e8e96",
          "accent": "rgb(255 255 255 / 0.06)",
          "accent-foreground": "var(--foreground)",
          "destructive": "oklch(0.65 0.2 25)",
          "destructive-foreground": "#ffffff",
          "success": "oklch(0.72 0.15 155)",
          "warning": "oklch(0.8 0.15 75)",
          "border": "rgb(255 255 255 / 0.09)",
          "input": "rgb(255 255 255 / 0.13)",
          "ring": "color-mix(in oklch, var(--blue-400) 50%, transparent)",
          "shadow-xs": "0 1px 0 rgb(0 0 0 / 0.3)",
          "shadow-sm": "0 1px 2px rgb(0 0 0 / 0.4)",
          "shadow-md": "0 4px 16px rgb(0 0 0 / 0.45)",
          "shadow-lg": "0 8px 24px rgb(0 0 0 / 0.5)",
          "shadow-xl": "0 24px 56px rgb(0 0 0 / 0.6)",
          "highlight": "0 0 #0000"
        }
      },
      "css": {
        "@layer base": {
          "*": {
            "border-color": "var(--border)",
            "outline-color": "color-mix(in oklab, var(--ring) 50%, transparent)"
          },
          "html": {
            "color-scheme": "light"
          },
          "html.dark": {
            "color-scheme": "dark"
          },
          "body": {
            "background-color": "var(--background)",
            "color": "var(--foreground)",
            "font-family": "var(--font-body)",
            "-webkit-font-smoothing": "antialiased",
            "-moz-osx-font-smoothing": "grayscale"
          },
          "h1, h2, h3, h4": {
            "letter-spacing": "-0.025em",
            "text-wrap": "balance"
          },
          "::selection": {
            "background": "color-mix(in oklch, var(--brand) 28%, transparent)"
          }
        },
        "@keyframes pop-in": {
          "from": {
            "opacity": "0",
            "transform": "scale(0.96) translateY(var(--pop-y, -2px))",
            "filter": "blur(2px)"
          }
        },
        "@keyframes pop-out": {
          "to": {
            "opacity": "0",
            "transform": "scale(0.97)"
          }
        },
        "@keyframes shimmer": {
          "from": {
            "background-position": "200% 0"
          },
          "to": {
            "background-position": "-200% 0"
          }
        },
        "@keyframes fade-in": {
          "from": {
            "opacity": "0"
          }
        },
        "@keyframes fade-up": {
          "from": {
            "opacity": "0",
            "transform": "translateY(6px)"
          }
        },
        "@keyframes pixel-on": {
          "0%,\n    100%": {
            "opacity": "0.15"
          },
          "40%": {
            "opacity": "1"
          }
        },
        "@keyframes eq": {
          "0%,\n    100%": {
            "transform": "scaleY(0.35)"
          },
          "50%": {
            "transform": "scaleY(1)"
          }
        },
        "@keyframes blink": {
          "50%": {
            "opacity": "0.3"
          }
        },
        "@keyframes marquee": {
          "to": {
            "transform": "translateX(calc(-50% - var(--marquee-gap, 1rem) / 2))"
          }
        },
        "@utility bg-dots": {
          "background-image": "radial-gradient( var(--dot-color, color-mix(in oklch, var(--foreground) 14%, transparent)) 1px, transparent 1px )",
          "background-size": "var(--dot-gap, 14px) var(--dot-gap, 14px)"
        },
        "@utility heading": {
          "font-family": "var(--font-heading)",
          "font-weight": "var(--heading-weight)",
          "letter-spacing": "var(--heading-tracking)"
        },
        "@utility eyebrow": {
          "font-family": "var(--font-mono)",
          "font-size": "calc(11px * var(--text-scale))",
          "line-height": "1",
          "letter-spacing": "0.08em",
          "text-transform": "uppercase"
        },
        "@utility scrollbar-hide": {
          "&::-webkit-scrollbar": {
            "display": "none"
          },
          "scrollbar-width": "none"
        }
      }
    },
    {
      "name": "utils",
      "type": "registry:lib",
      "title": "Utils",
      "dependencies": [
        "clsx",
        "tailwind-merge"
      ],
      "files": [
        {
          "path": "lib/utils.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "motion",
      "type": "registry:lib",
      "title": "Motion tokens",
      "description": "Springs, easings, durations and variants shared by every animated component.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "lib/motion.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "use-dismiss",
      "type": "registry:hook",
      "title": "use-dismiss",
      "registryDependencies": [],
      "files": [
        {
          "path": "lib/hooks/use-dismiss.ts",
          "type": "registry:hook",
          "target": "lib/hooks/use-dismiss.ts"
        }
      ]
    },
    {
      "name": "use-tap-gesture",
      "type": "registry:hook",
      "title": "use-tap-gesture",
      "registryDependencies": [],
      "files": [
        {
          "path": "lib/hooks/use-tap-gesture.ts",
          "type": "registry:hook",
          "target": "lib/hooks/use-tap-gesture.ts"
        }
      ]
    },
    {
      "name": "use-hover-gesture",
      "type": "registry:hook",
      "title": "use-hover-gesture",
      "registryDependencies": [
        "@opendraft/touch"
      ],
      "files": [
        {
          "path": "lib/hooks/use-hover-gesture.ts",
          "type": "registry:hook",
          "target": "lib/hooks/use-hover-gesture.ts"
        }
      ]
    },
    {
      "name": "use-favicon",
      "type": "registry:hook",
      "title": "use-favicon",
      "registryDependencies": [
        "@opendraft/favicon"
      ],
      "files": [
        {
          "path": "lib/hooks/use-favicon.ts",
          "type": "registry:hook",
          "target": "lib/hooks/use-favicon.ts"
        }
      ]
    },
    {
      "name": "use-hover-capable",
      "type": "registry:hook",
      "title": "use-hover-capable",
      "registryDependencies": [],
      "files": [
        {
          "path": "lib/hooks/use-hover-capable.ts",
          "type": "registry:hook",
          "target": "lib/hooks/use-hover-capable.ts"
        }
      ]
    },
    {
      "name": "use-touch-capable",
      "type": "registry:hook",
      "title": "use-touch-capable",
      "registryDependencies": [],
      "files": [
        {
          "path": "lib/hooks/use-touch-capable.ts",
          "type": "registry:hook",
          "target": "lib/hooks/use-touch-capable.ts"
        }
      ]
    },
    {
      "name": "use-on-open",
      "type": "registry:hook",
      "title": "use-on-open",
      "registryDependencies": [],
      "files": [
        {
          "path": "lib/hooks/use-on-open.ts",
          "type": "registry:hook",
          "target": "lib/hooks/use-on-open.ts"
        }
      ]
    },
    {
      "name": "use-row-cursor",
      "type": "registry:hook",
      "title": "use-row-cursor",
      "registryDependencies": [],
      "files": [
        {
          "path": "lib/hooks/use-row-cursor.ts",
          "type": "registry:hook",
          "target": "lib/hooks/use-row-cursor.ts"
        }
      ]
    },
    {
      "name": "touch",
      "type": "registry:lib",
      "title": "touch",
      "files": [
        {
          "path": "lib/touch.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "favicon",
      "type": "registry:lib",
      "title": "favicon",
      "files": [
        {
          "path": "lib/favicon.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "text-shimmer",
      "type": "registry:lib",
      "title": "text-shimmer",
      "files": [
        {
          "path": "lib/text-shimmer.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "command-search",
      "type": "registry:lib",
      "title": "command-search",
      "files": [
        {
          "path": "lib/command-search.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "presence-gate",
      "type": "registry:lib",
      "title": "presence-gate",
      "files": [
        {
          "path": "lib/presence-gate.tsx",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "button",
      "type": "registry:ui",
      "title": "Button",
      "dependencies": [
        "radix-ui",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/button.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "badge",
      "type": "registry:ui",
      "title": "Badge",
      "dependencies": [
        "radix-ui",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/badge.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "input",
      "type": "registry:ui",
      "title": "Input",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/input.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "textarea",
      "type": "registry:ui",
      "title": "Textarea",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/textarea.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "label",
      "type": "registry:ui",
      "title": "Label",
      "dependencies": [
        "radix-ui"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/label.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "card",
      "type": "registry:ui",
      "title": "Card",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/card.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "separator",
      "type": "registry:ui",
      "title": "Separator",
      "dependencies": [
        "radix-ui"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/separator.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "kbd",
      "type": "registry:ui",
      "title": "Kbd",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/kbd.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "skeleton",
      "type": "registry:ui",
      "title": "Skeleton",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/skeleton.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "avatar",
      "type": "registry:ui",
      "title": "Avatar",
      "dependencies": [
        "radix-ui"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/avatar.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "switch",
      "type": "registry:ui",
      "title": "Switch",
      "dependencies": [
        "radix-ui",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/ui/switch.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "checkbox",
      "type": "registry:ui",
      "title": "Checkbox",
      "dependencies": [
        "radix-ui",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/ui/checkbox.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "tabs",
      "type": "registry:ui",
      "title": "Tabs",
      "dependencies": [
        "radix-ui",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/ui/tabs.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "accordion",
      "type": "registry:ui",
      "title": "Accordion",
      "dependencies": [
        "radix-ui",
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/ui/accordion.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "dialog",
      "type": "registry:ui",
      "title": "Dialog",
      "dependencies": [
        "radix-ui",
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/ui/dialog.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "dropdown-menu",
      "type": "registry:ui",
      "title": "Dropdown Menu",
      "dependencies": [
        "radix-ui",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/dropdown-menu.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "select",
      "type": "registry:ui",
      "title": "Select",
      "dependencies": [
        "radix-ui",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/select.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "popover",
      "type": "registry:ui",
      "title": "Popover",
      "dependencies": [
        "radix-ui"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/popover.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "radio-group",
      "type": "registry:ui",
      "title": "Radio Group",
      "dependencies": [
        "radix-ui",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/ui/radio-group.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "tooltip",
      "type": "registry:ui",
      "title": "Tooltip",
      "dependencies": [
        "radix-ui"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/tooltip.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "sonner",
      "type": "registry:ui",
      "title": "Sonner",
      "dependencies": [
        "sonner"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/sonner.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "animated-number",
      "type": "registry:component",
      "title": "Animated Number",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/motion/animated-number.tsx",
          "type": "registry:component",
          "target": "components/motion/animated-number.tsx"
        }
      ]
    },
    {
      "name": "blur-text",
      "type": "registry:component",
      "title": "Blur Text",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/motion/blur-text.tsx",
          "type": "registry:component",
          "target": "components/motion/blur-text.tsx"
        }
      ]
    },
    {
      "name": "shimmer-text",
      "type": "registry:component",
      "title": "Shimmer Text",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/motion/shimmer-text.tsx",
          "type": "registry:component",
          "target": "components/motion/shimmer-text.tsx"
        }
      ]
    },
    {
      "name": "glide-menu",
      "type": "registry:component",
      "title": "Glide Menu",
      "description": "List whose hover highlight glides between rows.",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/motion/glide-menu.tsx",
          "type": "registry:component",
          "target": "components/motion/glide-menu.tsx"
        }
      ]
    },
    {
      "name": "spotlight-card",
      "type": "registry:component",
      "title": "Spotlight Card",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/motion/spotlight-card.tsx",
          "type": "registry:component",
          "target": "components/motion/spotlight-card.tsx"
        }
      ]
    },
    {
      "name": "marquee",
      "type": "registry:component",
      "title": "Marquee",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/motion/marquee.tsx",
          "type": "registry:component",
          "target": "components/motion/marquee.tsx"
        }
      ]
    },
    {
      "name": "code-reveal",
      "type": "registry:component",
      "title": "Code Reveal",
      "description": "Code backdrop hidden until the pointer moves over it; a wandering spot on touch.",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/motion/code-reveal.tsx",
          "type": "registry:component",
          "target": "components/motion/code-reveal.tsx"
        }
      ]
    },
    {
      "name": "reveal",
      "type": "registry:component",
      "title": "Reveal",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/motion/reveal.tsx",
          "type": "registry:component",
          "target": "components/motion/reveal.tsx"
        }
      ]
    },
    {
      "name": "magnetic",
      "type": "registry:component",
      "title": "Magnetic",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/motion/magnetic.tsx",
          "type": "registry:component",
          "target": "components/motion/magnetic.tsx"
        }
      ]
    },
    {
      "name": "preview-rail",
      "type": "registry:component",
      "title": "Preview Rail",
      "description": "Tick rail with hover previews for jumping between sections.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/use-dismiss",
        "@opendraft/use-hover-gesture",
        "@opendraft/use-tap-gesture"
      ],
      "files": [
        {
          "path": "components/motion/preview-rail.tsx",
          "type": "registry:component",
          "target": "components/motion/preview-rail.tsx"
        }
      ]
    },
    {
      "name": "loader",
      "type": "registry:component",
      "title": "Loader",
      "description": "Fifteen loading animations: spinner, dots, matrix, ASCII, metaballs and more.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/motion/loader.tsx",
          "type": "registry:component",
          "target": "components/motion/loader.tsx"
        }
      ]
    },
    {
      "name": "text-scramble",
      "type": "registry:component",
      "title": "Text Scramble",
      "description": "Character scramble that resolves to its text.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/motion/text-scramble.tsx",
          "type": "registry:component",
          "target": "components/motion/text-scramble.tsx"
        }
      ]
    },
    {
      "name": "action-swap",
      "type": "registry:component",
      "title": "Action Swap",
      "description": "Animated label and icon swaps (roll, blur, cascade) for buttons and counters.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/motion/action-swap.tsx",
          "type": "registry:component",
          "target": "components/motion/action-swap.tsx"
        },
        {
          "path": "components/motion/action-swap-roll.tsx",
          "type": "registry:component",
          "target": "components/motion/action-swap-roll.tsx"
        }
      ]
    },
    {
      "name": "pixel-field",
      "type": "registry:component",
      "title": "Pixel Field",
      "description": "Canvas pixel textures in the blue scale: mosaic, dot matrix and equalizer.",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/theme"
      ],
      "files": [
        {
          "path": "components/motion/pixel-field.tsx",
          "type": "registry:component",
          "target": "components/motion/pixel-field.tsx"
        }
      ]
    },
    {
      "name": "animated-sidebar",
      "type": "registry:component",
      "title": "Animated Sidebar",
      "description": "Full sidebar system: docked, icon rail or off-canvas, mobile sheet, menus and sub-menus.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/motion/animated-sidebar.tsx",
          "type": "registry:component",
          "target": "components/motion/animated-sidebar.tsx"
        },
        {
          "path": "components/motion/shared-layout-bg.tsx",
          "type": "registry:component",
          "target": "components/motion/shared-layout-bg.tsx"
        }
      ]
    },
    {
      "name": "drawer",
      "type": "registry:component",
      "title": "Drawer",
      "description": "Side sheet with backdrop, focus handling and Esc / outside-click close.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/presence-gate"
      ],
      "files": [
        {
          "path": "components/motion/drawer.tsx",
          "type": "registry:component",
          "target": "components/motion/drawer.tsx"
        }
      ]
    },
    {
      "name": "command-palette",
      "type": "registry:component",
      "title": "Command Palette",
      "description": "⌘K command palette with fuzzy search, groups, hints and keyboard navigation.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/presence-gate",
        "@opendraft/command-search",
        "@opendraft/use-on-open",
        "@opendraft/use-row-cursor",
        "@opendraft/use-touch-capable"
      ],
      "files": [
        {
          "path": "components/motion/command-palette.tsx",
          "type": "registry:component",
          "target": "components/motion/command-palette.tsx"
        }
      ]
    },
    {
      "name": "date-range-picker",
      "type": "registry:component",
      "title": "Date Range Picker",
      "description": "Range calendar in a popover or inline, with month/year choosers and min/max.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/popover",
        "@opendraft/use-hover-capable"
      ],
      "files": [
        {
          "path": "components/motion/date-range-picker.tsx",
          "type": "registry:component",
          "target": "components/motion/date-range-picker.tsx"
        },
        {
          "path": "components/motion/date-range-picker/context.ts",
          "type": "registry:component",
          "target": "components/motion/date-range-picker/context.ts"
        },
        {
          "path": "components/motion/date-range-picker/date-utils.ts",
          "type": "registry:component",
          "target": "components/motion/date-range-picker/date-utils.ts"
        },
        {
          "path": "components/motion/date-range-picker/types.ts",
          "type": "registry:component",
          "target": "components/motion/date-range-picker/types.ts"
        },
        {
          "path": "components/motion/date-range-picker/use-date-range-picker.ts",
          "type": "registry:component",
          "target": "components/motion/date-range-picker/use-date-range-picker.ts"
        }
      ]
    },
    {
      "name": "table",
      "type": "registry:component",
      "title": "Table",
      "description": "Virtualized data table: sort, resize, reorder columns, select rows, edit cells.",
      "dependencies": [
        "motion",
        "lucide-react",
        "@tanstack/react-virtual"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/checkbox",
        "@opendraft/touch"
      ],
      "files": [
        {
          "path": "components/motion/table/index.tsx",
          "type": "registry:component",
          "target": "components/motion/table/index.tsx"
        },
        {
          "path": "components/motion/table/editable-cell.tsx",
          "type": "registry:component",
          "target": "components/motion/table/editable-cell.tsx"
        },
        {
          "path": "components/motion/table/row-handle.tsx",
          "type": "registry:component",
          "target": "components/motion/table/row-handle.tsx"
        },
        {
          "path": "components/motion/table/skeleton-rows.tsx",
          "type": "registry:component",
          "target": "components/motion/table/skeleton-rows.tsx"
        },
        {
          "path": "components/motion/table/table-header.tsx",
          "type": "registry:component",
          "target": "components/motion/table/table-header.tsx"
        },
        {
          "path": "components/motion/table/table-menu.tsx",
          "type": "registry:component",
          "target": "components/motion/table/table-menu.tsx"
        },
        {
          "path": "components/motion/table/types.ts",
          "type": "registry:component",
          "target": "components/motion/table/types.ts"
        },
        {
          "path": "components/motion/table/use-column-reorder.ts",
          "type": "registry:component",
          "target": "components/motion/table/use-column-reorder.ts"
        },
        {
          "path": "components/motion/table/use-column-resize.ts",
          "type": "registry:component",
          "target": "components/motion/table/use-column-resize.ts"
        },
        {
          "path": "components/motion/table/use-column-sort.ts",
          "type": "registry:component",
          "target": "components/motion/table/use-column-sort.ts"
        },
        {
          "path": "components/motion/table/use-row-selection.ts",
          "type": "registry:component",
          "target": "components/motion/table/use-row-selection.ts"
        },
        {
          "path": "components/motion/table/utils.ts",
          "type": "registry:component",
          "target": "components/motion/table/utils.ts"
        }
      ]
    },
    {
      "name": "copy-button",
      "type": "registry:component",
      "title": "Copy Button",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/button"
      ],
      "files": [
        {
          "path": "components/motion/copy-button.tsx",
          "type": "registry:component",
          "target": "components/motion/copy-button.tsx"
        }
      ]
    },
    {
      "name": "voice-orb",
      "type": "registry:component",
      "title": "Voice Orb",
      "description": "Breathing WebGL liquid orb that reacts to a voice level or an AnalyserNode.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/agents/voice-orb.tsx",
          "type": "registry:component",
          "target": "components/agents/voice-orb.tsx"
        },
        {
          "path": "components/agents/voice-orb/renderer.ts",
          "type": "registry:component",
          "target": "components/agents/voice-orb/renderer.ts"
        }
      ]
    },
    {
      "name": "agent-disclosure",
      "type": "registry:component",
      "title": "Agent Disclosure",
      "description": "Shared clip-path reveal for collapsible agent content.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/agents/agent-disclosure.tsx",
          "type": "registry:component",
          "target": "components/agents/agent-disclosure.tsx"
        }
      ]
    },
    {
      "name": "citations",
      "type": "registry:component",
      "title": "Citations",
      "description": "Inline citation markers, favicon stacks and a collapsible source list.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/agent-disclosure",
        "@opendraft/use-favicon"
      ],
      "files": [
        {
          "path": "components/agents/citations.tsx",
          "type": "registry:component",
          "target": "components/agents/citations.tsx"
        }
      ]
    },
    {
      "name": "message-bubble",
      "type": "registry:component",
      "title": "Message Bubble",
      "description": "Chat bubble surfaces with variants, pop-in entrance and a collapsible body.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/agents/message-bubble.tsx",
          "type": "registry:component",
          "target": "components/agents/message-bubble.tsx"
        },
        {
          "path": "components/agents/message-context.tsx",
          "type": "registry:component",
          "target": "components/agents/message-context.tsx"
        }
      ]
    },
    {
      "name": "message-scroller",
      "type": "registry:component",
      "title": "Message Scroller",
      "description": "Transcript viewport that follows streamed output and offers a turn-by-turn rail.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/preview-rail"
      ],
      "files": [
        {
          "path": "components/agents/message-scroller.tsx",
          "type": "registry:component",
          "target": "components/agents/message-scroller.tsx"
        }
      ]
    },
    {
      "name": "message",
      "type": "registry:component",
      "title": "Message",
      "description": "Message rows with avatar, header, footer, markers and a typing indicator.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/message-bubble",
        "@opendraft/message-scroller"
      ],
      "files": [
        {
          "path": "components/agents/message.tsx",
          "type": "registry:component",
          "target": "components/agents/message.tsx"
        }
      ]
    },
    {
      "name": "prompt-input",
      "type": "registry:component",
      "title": "Prompt Input",
      "description": "Auto-growing prompt box with model picker, action menu and send/stop.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/button",
        "@opendraft/popover",
        "@opendraft/select"
      ],
      "files": [
        {
          "path": "components/agents/prompt-input.tsx",
          "type": "registry:component",
          "target": "components/agents/prompt-input.tsx"
        }
      ]
    },
    {
      "name": "agent-code",
      "type": "registry:component",
      "title": "Agent Code",
      "description": "Shared Shiki tokenizer and code renderer used by agent components.",
      "dependencies": [
        "shiki"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/agents/agent-code.tsx",
          "type": "registry:component",
          "target": "components/agents/agent-code.tsx"
        }
      ]
    },
    {
      "name": "todo-list",
      "type": "registry:component",
      "title": "Todo List",
      "description": "Live task plan with per-item progress and a rolling completed count.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/agent-disclosure",
        "@opendraft/action-swap"
      ],
      "files": [
        {
          "path": "components/agents/todo-list.tsx",
          "type": "registry:component",
          "target": "components/agents/todo-list.tsx"
        }
      ]
    },
    {
      "name": "tool-result",
      "type": "registry:component",
      "title": "Tool Result",
      "description": "Tool call card for terminal, request and file output with status, copy and retry.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/agent-disclosure",
        "@opendraft/action-swap",
        "@opendraft/agent-code"
      ],
      "files": [
        {
          "path": "components/agents/tool-result.tsx",
          "type": "registry:component",
          "target": "components/agents/tool-result.tsx"
        }
      ]
    },
    {
      "name": "code-block",
      "type": "registry:component",
      "title": "Code Block",
      "description": "Streaming code block with Shiki highlighting, line highlights and copy.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/agent-code"
      ],
      "files": [
        {
          "path": "components/agents/code-block.tsx",
          "type": "registry:component",
          "target": "components/agents/code-block.tsx"
        }
      ]
    },
    {
      "name": "file-diff",
      "type": "registry:component",
      "title": "File Diff",
      "description": "Streaming unified diff with added/removed counts.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/agent-disclosure",
        "@opendraft/agent-code"
      ],
      "files": [
        {
          "path": "components/agents/file-diff.tsx",
          "type": "registry:component",
          "target": "components/agents/file-diff.tsx"
        }
      ]
    },
    {
      "name": "agent-activity",
      "type": "registry:component",
      "title": "Agent Activity",
      "description": "Collapsible run log of steps, searches and tool calls.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/agent-disclosure",
        "@opendraft/loading-states"
      ],
      "files": [
        {
          "path": "components/agents/agent-activity/index.tsx",
          "type": "registry:component",
          "target": "components/agents/agent-activity/index.tsx"
        },
        {
          "path": "components/agents/agent-activity/activity-row.tsx",
          "type": "registry:component",
          "target": "components/agents/agent-activity/activity-row.tsx"
        },
        {
          "path": "components/agents/agent-activity/types.ts",
          "type": "registry:component",
          "target": "components/agents/agent-activity/types.ts"
        }
      ]
    },
    {
      "name": "loading-states",
      "type": "registry:component",
      "title": "Loading States",
      "description": "Thinking shimmer, elapsed-time progress and rotating reasoning text.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/shimmer-text",
        "@opendraft/text-scramble",
        "@opendraft/loader",
        "@opendraft/text-shimmer"
      ],
      "files": [
        {
          "path": "components/agents/loading-states/index.ts",
          "type": "registry:component",
          "target": "components/agents/loading-states/index.ts"
        },
        {
          "path": "components/agents/loading-states/agent-progress.tsx",
          "type": "registry:component",
          "target": "components/agents/loading-states/agent-progress.tsx"
        },
        {
          "path": "components/agents/loading-states/reasoning-text.tsx",
          "type": "registry:component",
          "target": "components/agents/loading-states/reasoning-text.tsx"
        },
        {
          "path": "components/agents/loading-states/thinking-shimmer.tsx",
          "type": "registry:component",
          "target": "components/agents/loading-states/thinking-shimmer.tsx"
        }
      ]
    },
    {
      "name": "approval-card",
      "type": "registry:component",
      "title": "Approval Card",
      "description": "Human-in-the-loop card: stepped questions or approve / request changes / reject.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/agent-disclosure",
        "@opendraft/action-swap",
        "@opendraft/button",
        "@opendraft/checkbox",
        "@opendraft/radio-group",
        "@opendraft/input"
      ],
      "files": [
        {
          "path": "components/agents/approval-card/index.tsx",
          "type": "registry:component",
          "target": "components/agents/approval-card/index.tsx"
        },
        {
          "path": "components/agents/approval-card/types.ts",
          "type": "registry:component",
          "target": "components/agents/approval-card/types.ts"
        }
      ]
    },
    {
      "name": "tool-approval",
      "type": "registry:component",
      "title": "Tool Approval",
      "description": "Permission prompt for a tool call with parameters, allow once / always and deny.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/agent-disclosure",
        "@opendraft/agent-code"
      ],
      "files": [
        {
          "path": "components/agents/tool-approval.tsx",
          "type": "registry:component",
          "target": "components/agents/tool-approval.tsx"
        }
      ]
    },
    {
      "name": "image-generation",
      "type": "registry:component",
      "title": "Image Generation",
      "description": "Image generation frame with queued, generating, refining and complete states.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/use-hover-capable"
      ],
      "files": [
        {
          "path": "components/agents/image-generation.tsx",
          "type": "registry:component",
          "target": "components/agents/image-generation.tsx"
        }
      ]
    },
    {
      "name": "ai-sidebar",
      "type": "registry:component",
      "title": "Ai Sidebar",
      "description": "Resource tree for agent workspaces: select, expand, drag to move and rename.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/popover",
        "@opendraft/use-touch-capable"
      ],
      "files": [
        {
          "path": "components/agents/ai-sidebar.tsx",
          "type": "registry:component",
          "target": "components/agents/ai-sidebar.tsx"
        }
      ]
    },
    {
      "name": "chat-app",
      "type": "registry:component",
      "title": "Chat App",
      "description": "Chat application shell that folds its sidebar away when the shell gets narrow.",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/animated-sidebar"
      ],
      "files": [
        {
          "path": "components/agents/chat-app.tsx",
          "type": "registry:component",
          "target": "components/agents/chat-app.tsx"
        }
      ]
    },
    {
      "name": "streaming-response",
      "type": "registry:component",
      "title": "Streaming Response",
      "description": "Streamed answer with copy, retry, feedback and a sources footer.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/citations",
        "@opendraft/agent-disclosure"
      ],
      "files": [
        {
          "path": "components/agents/streaming-response.tsx",
          "type": "registry:component",
          "target": "components/agents/streaming-response.tsx"
        }
      ]
    },
    {
      "name": "question-card",
      "type": "registry:component",
      "title": "Question Card",
      "description": "One question at a time in a sliding stack with an odometer step counter and auto-advance on single choice.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/glide-menu",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/agents/question-card.tsx",
          "type": "registry:component",
          "target": "components/agents/question-card.tsx"
        }
      ]
    },
    {
      "name": "chat-panel",
      "type": "registry:component",
      "title": "Chat Panel",
      "description": "Chat panel with context tabs, a scripted reply sequence that starts on send, and a composer.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/agents/chat-panel.tsx",
          "type": "registry:component",
          "target": "components/agents/chat-panel.tsx"
        }
      ]
    },
    {
      "name": "recommendation-card",
      "type": "registry:component",
      "title": "Recommendation Card",
      "description": "Recommendation with a confidence meter, an alternatives drawer that swaps the pick, and a confirm action.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button"
      ],
      "files": [
        {
          "path": "components/agents/recommendation-card.tsx",
          "type": "registry:component",
          "target": "components/agents/recommendation-card.tsx"
        }
      ]
    },
    {
      "name": "context-cards",
      "type": "registry:component",
      "title": "Context Cards",
      "description": "Retrieved context chunks that stagger in, then reveal their source file chips.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/agents/context-cards.tsx",
          "type": "registry:component",
          "target": "components/agents/context-cards.tsx"
        }
      ]
    },
    {
      "name": "search-list",
      "type": "registry:component",
      "title": "Search List",
      "description": "Command-style search with live filtering, a clear action, a gliding hover highlight and an empty state.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/glide-menu"
      ],
      "files": [
        {
          "path": "components/agents/search-list.tsx",
          "type": "registry:component",
          "target": "components/agents/search-list.tsx"
        }
      ]
    },
    {
      "name": "filter-table",
      "type": "registry:component",
      "title": "Filter Table",
      "description": "Task table filtered by status chips; rows collapse in place and status pills are tinted by meaning.",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/agents/filter-table.tsx",
          "type": "registry:component",
          "target": "components/agents/filter-table.tsx"
        }
      ]
    },
    {
      "name": "flowchart",
      "type": "registry:component",
      "title": "Flowchart",
      "description": "Workflow canvas with draggable Trigger and If/Else cards joined by a live bezier connector.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/glide-menu"
      ],
      "files": [
        {
          "path": "components/agents/flowchart.tsx",
          "type": "registry:component",
          "target": "components/agents/flowchart.tsx"
        }
      ]
    },
    {
      "name": "insight-cards",
      "type": "registry:component",
      "title": "Insight Cards",
      "description": "Insights carousel with comparison, anomaly and allocation mini-charts and a blurred page crossfade.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/agents/insight-cards.tsx",
          "type": "registry:component",
          "target": "components/agents/insight-cards.tsx"
        }
      ]
    },
    {
      "name": "prompt-bar",
      "type": "registry:component",
      "title": "Prompt Bar",
      "description": "A composer with @ sources, / commands, a model picker, dictation and attachments, plus a self-running demo.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/glide-menu",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/agents/prompt-bar.tsx",
          "type": "registry:component",
          "target": "components/agents/prompt-bar.tsx"
        }
      ]
    },
    {
      "name": "selection-actions",
      "type": "registry:component",
      "title": "Selection Actions",
      "description": "A contextual AI bar under selected text that animates its width between modes and streams in a rewrite.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/shimmer-text",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/agents/selection-actions.tsx",
          "type": "registry:component",
          "target": "components/agents/selection-actions.tsx"
        }
      ]
    },
    {
      "name": "pixel-loader",
      "type": "registry:component",
      "title": "Pixel Loader",
      "description": "A 3×3 pixel-grid loader with a shimmering status label and a live elapsed timer, in four motion variants.",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/shimmer-text"
      ],
      "files": [
        {
          "path": "components/agents/pixel-loader.tsx",
          "type": "registry:component",
          "target": "components/agents/pixel-loader.tsx"
        }
      ]
    },
    {
      "name": "thinking-trace",
      "type": "registry:component",
      "title": "Thinking Trace",
      "description": "An expandable agent trace that shimmers while working, then settles. Steps, reasoning, search and coding variants.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/shimmer-text"
      ],
      "files": [
        {
          "path": "components/agents/thinking-trace.tsx",
          "type": "registry:component",
          "target": "components/agents/thinking-trace.tsx"
        }
      ]
    },
    {
      "name": "streaming-answer",
      "type": "registry:component",
      "title": "Streaming Answer",
      "description": "An answer that streams in word by word with an inline citation, then shows actions, sources and follow-ups.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/agents/streaming-answer.tsx",
          "type": "registry:component",
          "target": "components/agents/streaming-answer.tsx"
        }
      ]
    },
    {
      "name": "task-rows",
      "type": "registry:component",
      "title": "Task Rows",
      "description": "Task rows with progress rings, status pills and expandable details, run through a failed, retry, done sequence.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/agents/task-rows.tsx",
          "type": "registry:component",
          "target": "components/agents/task-rows.tsx"
        }
      ]
    },
    {
      "name": "tool-chips",
      "type": "registry:component",
      "title": "Tool Chips",
      "description": "An agent run as compact tool-call rows with inline chips, then file-diff chips that preview their diff on hover.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/agents/tool-chips.tsx",
          "type": "registry:component",
          "target": "components/agents/tool-chips.tsx"
        }
      ]
    },
    {
      "name": "agent-screen",
      "type": "registry:component",
      "title": "Agent Screen",
      "description": "Live agent-screen card that expands to a full-screen viewer with Teach-a-task recording.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button"
      ],
      "files": [
        {
          "path": "components/agents/agent-screen.tsx",
          "type": "registry:component",
          "target": "components/agents/agent-screen.tsx"
        }
      ]
    },
    {
      "name": "code-panel",
      "type": "registry:component",
      "title": "Code Panel",
      "description": "Light editor panel with a line-numbered Code view and a unified Diff view with word-level highlights.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/agents/code-panel.tsx",
          "type": "registry:component",
          "target": "components/agents/code-panel.tsx"
        }
      ]
    },
    {
      "name": "fine-tune-card",
      "type": "registry:component",
      "title": "Fine Tune Card",
      "description": "Compact inspector with scrub-able number fields, a sliding segmented control and a Type menu.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/glide-menu",
        "@opendraft/shimmer-text"
      ],
      "files": [
        {
          "path": "components/agents/fine-tune-card.tsx",
          "type": "registry:component",
          "target": "components/agents/fine-tune-card.tsx"
        }
      ]
    },
    {
      "name": "sidebar-nav",
      "type": "registry:component",
      "title": "Sidebar Nav",
      "description": "Workspace switcher, primary nav and searchable chats that collapse to an aligned icon rail.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/glide-menu",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/agents/sidebar-nav.tsx",
          "type": "registry:component",
          "target": "components/agents/sidebar-nav.tsx"
        }
      ]
    },
    {
      "name": "records-table",
      "type": "registry:component",
      "title": "Records Table",
      "description": "AI spreadsheet grid with property popovers, row-by-row calculation, resizable sticky columns and sorting.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/glide-menu",
        "@opendraft/checkbox",
        "@opendraft/switch"
      ],
      "files": [
        {
          "path": "components/agents/records-table.tsx",
          "type": "registry:component",
          "target": "components/agents/records-table.tsx"
        }
      ]
    },
    {
      "name": "diff-table",
      "type": "registry:component",
      "title": "Diff Table",
      "description": "A proposed table edit that plays once; click each changed row to keep or drop it before applying.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button"
      ],
      "files": [
        {
          "path": "components/agents/diff-table.tsx",
          "type": "registry:component",
          "target": "components/agents/diff-table.tsx"
        }
      ]
    },
    {
      "name": "crm-pipeline",
      "type": "registry:block",
      "title": "Crm Pipeline",
      "description": "Sales pipeline with a stage board, sortable list view, search, drag or menu moves, and a deal detail panel with an activity timeline.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/badge",
        "@opendraft/avatar",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/select",
        "@opendraft/dialog",
        "@opendraft/dropdown-menu",
        "@opendraft/tabs",
        "@opendraft/animated-number"
      ],
      "files": [
        {
          "path": "components/blocks/crm-pipeline.tsx",
          "type": "registry:component",
          "target": "components/blocks/crm-pipeline.tsx"
        }
      ]
    },
    {
      "name": "filter-bar",
      "type": "registry:ui",
      "title": "Filter Bar",
      "description": "Search, select and multi-select filters from a config, with removable chips and clear-all.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/badge",
        "@opendraft/button",
        "@opendraft/checkbox",
        "@opendraft/input",
        "@opendraft/popover",
        "@opendraft/select"
      ],
      "files": [
        {
          "path": "components/ui/filter-bar.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "bulk-action-bar",
      "type": "registry:ui",
      "title": "Bulk Action Bar",
      "description": "Toolbar that appears when items are selected: count, generic actions and a clear button.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button"
      ],
      "files": [
        {
          "path": "components/ui/bulk-action-bar.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "checklist",
      "type": "registry:ui",
      "title": "Checklist",
      "description": "Tickable checklist with progress, optional per-item notes and a sign-off step, for any domain.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/checkbox",
        "@opendraft/progress",
        "@opendraft/textarea"
      ],
      "files": [
        {
          "path": "components/ui/checklist.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "description-list",
      "type": "registry:ui",
      "title": "Description List",
      "description": "Container-query label and value grid for record details, with spans, mono values and copy buttons.",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/copy-button"
      ],
      "files": [
        {
          "path": "components/ui/description-list.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "data-table",
      "type": "registry:block",
      "title": "Data Table",
      "description": "Generic data table: search, filters, view tabs, sorting, selection with bulk actions, paging and a card layout on narrow widths.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/checkbox",
        "@opendraft/empty-state",
        "@opendraft/input",
        "@opendraft/tabs",
        "@opendraft/filter-bar",
        "@opendraft/bulk-action-bar"
      ],
      "files": [
        {
          "path": "components/blocks/data-table.tsx",
          "type": "registry:component",
          "target": "components/blocks/data-table.tsx"
        }
      ]
    },
    {
      "name": "record-page",
      "type": "registry:block",
      "title": "Record Page",
      "description": "Generic record detail page: header, status, summary stats, details grid, activity timeline and related items.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/page-header",
        "@opendraft/stat",
        "@opendraft/status-indicator",
        "@opendraft/tabs",
        "@opendraft/timeline"
      ],
      "files": [
        {
          "path": "components/blocks/record-page.tsx",
          "type": "registry:component",
          "target": "components/blocks/record-page.tsx"
        }
      ]
    },
    {
      "name": "stage-board",
      "type": "registry:block",
      "title": "Stage Board",
      "description": "Generic kanban board: drag or keyboard moves, WIP limits, per-stage totals and a detail panel.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/badge",
        "@opendraft/dropdown-menu",
        "@opendraft/select"
      ],
      "files": [
        {
          "path": "components/blocks/stage-board.tsx",
          "type": "registry:component",
          "target": "components/blocks/stage-board.tsx"
        }
      ]
    },
    {
      "name": "gauge",
      "type": "registry:ui",
      "title": "Gauge",
      "description": "SVG gauge and risk-score ring with threshold bands and a text status, for posture, vitals, utilization and energy.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/badge",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/ui/gauge.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "eta-indicator",
      "type": "registry:ui",
      "title": "Eta Indicator",
      "description": "Estimated time with a range bar, confidence word and icon, and stale and past-window states.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/badge",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/ui/eta-indicator.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "secret-input",
      "type": "registry:ui",
      "title": "Secret Input",
      "description": "Masked input with reveal, copy and optional auto-hide, for API keys, tokens and sensitive fields.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/input",
        "@opendraft/button"
      ],
      "files": [
        {
          "path": "components/ui/secret-input.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "mfa-step",
      "type": "registry:ui",
      "title": "Mfa Step",
      "description": "Multi-factor step: code entry, method switcher, resend countdown, and verifying, error and locked states.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/otp-input",
        "@opendraft/button"
      ],
      "files": [
        {
          "path": "components/ui/mfa-step.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "permission-matrix",
      "type": "registry:ui",
      "title": "Permission Matrix",
      "description": "Roles by permissions grid with groups, select-all, indeterminate states, read-only roles and a change summary.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/checkbox",
        "@opendraft/button"
      ],
      "files": [
        {
          "path": "components/ui/permission-matrix.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "signature-pad",
      "type": "registry:ui",
      "title": "Signature Pad",
      "description": "Canvas signature capture with undo, clear and a typed-name alternative, for delivery, consent and sign-off.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/input"
      ],
      "files": [
        {
          "path": "components/ui/signature-pad.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "photo-capture",
      "type": "registry:ui",
      "title": "Photo Capture",
      "description": "Take or pick photos with thumbnails, remove, a max count and optional captions.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/input"
      ],
      "files": [
        {
          "path": "components/ui/photo-capture.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "step-nav",
      "type": "registry:ui",
      "title": "Step Nav",
      "description": "Non-linear lesson and step navigation with complete, current, available and locked states.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/progress"
      ],
      "files": [
        {
          "path": "components/ui/step-nav.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "time-series-chart",
      "type": "registry:ui",
      "title": "Time Series Chart",
      "description": "Multi-series time chart with time zones, brush zoom, thresholds, gaps, keyboard stepping and a data-table fallback.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button"
      ],
      "files": [
        {
          "path": "components/ui/time-series-chart.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "seat-map",
      "type": "registry:ui",
      "title": "Seat Map",
      "description": "Grid seat picker for aircraft, venues and transport with five seat states, a max selection and arrow-key navigation.",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/seat-map.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "product-card",
      "type": "registry:ui",
      "title": "Product Card",
      "description": "Product card and responsive grid with price, compare-at price, text badges, rating slot and an out-of-stock state.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/badge",
        "@opendraft/button",
        "@opendraft/empty-state"
      ],
      "files": [
        {
          "path": "components/ui/product-card.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "image-gallery",
      "type": "registry:ui",
      "title": "Image Gallery",
      "description": "Main image with thumbnails, keyboard and swipe navigation and a click-to-zoom lightbox.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/dialog"
      ],
      "files": [
        {
          "path": "components/ui/image-gallery.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "address-form",
      "type": "registry:ui",
      "title": "Address Form",
      "description": "Shipping or billing address form with per-country rules, validation and correct autocomplete tokens.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/field",
        "@opendraft/input",
        "@opendraft/select"
      ],
      "files": [
        {
          "path": "components/ui/address-form.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "video-player",
      "type": "registry:ui",
      "title": "Video Player",
      "description": "Accessible video player with seek, volume, speed, captions, chapters, keyboard shortcuts and an error state.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/dropdown-menu",
        "@opendraft/slider",
        "@opendraft/kbd",
        "@opendraft/scrub-bar"
      ],
      "files": [
        {
          "path": "components/ui/video-player.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "document-viewer",
      "type": "registry:ui",
      "title": "Document Viewer",
      "description": "Shell for paged documents: page nav, zoom, download, search and sidebar slots, plus thumbnails and outline.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button"
      ],
      "files": [
        {
          "path": "components/ui/document-viewer.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "date-time-picker",
      "type": "registry:ui",
      "title": "Date Time Picker",
      "description": "Pick a date and time in a named time zone, with DST gap and overlap handling and other-zone display.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/input",
        "@opendraft/popover",
        "@opendraft/select"
      ],
      "files": [
        {
          "path": "components/ui/date-time-picker.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "rating",
      "type": "registry:ui",
      "title": "Rating",
      "description": "Star rating display and input with half steps, plus a distribution breakdown.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/rating.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "gantt",
      "type": "registry:ui",
      "title": "Gantt",
      "description": "Task bars on a day, week or month axis with dependency arrows, groups, today marker and critical flags.",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/badge",
        "@opendraft/button"
      ],
      "files": [
        {
          "path": "components/ui/gantt.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "scheduler",
      "type": "registry:block",
      "title": "Scheduler",
      "description": "Resource scheduler for rosters, dispatch and appointments: day and week views, drag and keyboard moves, conflicts, agenda on narrow widths.",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/badge",
        "@opendraft/button"
      ],
      "files": [
        {
          "path": "components/blocks/scheduler.tsx",
          "type": "registry:component",
          "target": "components/blocks/scheduler.tsx"
        }
      ]
    },
    {
      "name": "map-view",
      "type": "registry:ui",
      "title": "Map View",
      "description": "Token-styled MapLibre GL map with focusable markers, routes and areas, and a synced keyboard list, for fleets, outages, assets and stores.",
      "dependencies": [
        "maplibre-gl",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/empty-state"
      ],
      "files": [
        {
          "path": "components/ui/map-view.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "rich-text-editor",
      "type": "registry:ui",
      "title": "Rich Text Editor",
      "description": "Accessible Tiptap editor with a roving toolbar, validated links, character limit and a read-only renderer, for notes, case files and messages.",
      "dependencies": [
        "@tiptap/react",
        "@tiptap/pm",
        "@tiptap/starter-kit",
        "@tiptap/extension-placeholder",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/input",
        "@opendraft/popover",
        "@opendraft/tooltip"
      ],
      "files": [
        {
          "path": "components/ui/rich-text-editor.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "analytics-dashboard",
      "type": "registry:block",
      "title": "Analytics Dashboard",
      "description": "Analytics screen with range tabs, KPI cards, a metric chart, a sortable top-pages table and a channel breakdown.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/insight-cards",
        "@opendraft/animated-number",
        "@opendraft/badge",
        "@opendraft/button",
        "@opendraft/tabs"
      ],
      "files": [
        {
          "path": "components/blocks/analytics-dashboard.tsx",
          "type": "registry:component",
          "target": "components/blocks/analytics-dashboard.tsx"
        }
      ]
    },
    {
      "name": "settings-page",
      "type": "registry:block",
      "title": "Settings Page",
      "description": "Settings with profile, notifications, team and billing sections, an unsaved-changes bar and a type-to-confirm danger zone.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/avatar",
        "@opendraft/badge",
        "@opendraft/button",
        "@opendraft/dialog",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/select",
        "@opendraft/switch",
        "@opendraft/textarea"
      ],
      "files": [
        {
          "path": "components/blocks/settings-page.tsx",
          "type": "registry:component",
          "target": "components/blocks/settings-page.tsx"
        }
      ]
    },
    {
      "name": "auth-screen",
      "type": "registry:block",
      "title": "Auth Screen",
      "description": "Split sign-in and sign-up screen with validation, social providers, loading and error states, and a brand panel.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/checkbox",
        "@opendraft/tabs",
        "@opendraft/pixel-field"
      ],
      "files": [
        {
          "path": "components/blocks/auth-screen.tsx",
          "type": "registry:component",
          "target": "components/blocks/auth-screen.tsx"
        }
      ]
    },
    {
      "name": "agent-workspace",
      "type": "registry:block",
      "title": "Agent Workspace",
      "description": "AI agent chat workspace: conversation rail, thread with thinking, tool calls and streamed answers, prompt bar and a live task panel.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/sidebar-nav",
        "@opendraft/prompt-bar",
        "@opendraft/thinking-trace",
        "@opendraft/tool-chips",
        "@opendraft/streaming-answer",
        "@opendraft/todo-list",
        "@opendraft/shimmer-text"
      ],
      "files": [
        {
          "path": "components/blocks/agent-workspace.tsx",
          "type": "registry:component",
          "target": "components/blocks/agent-workspace.tsx"
        }
      ]
    },
    {
      "name": "quantity-stepper",
      "type": "registry:ui",
      "title": "Quantity Stepper",
      "description": "Minus, value and plus control with min, max and step, controlled or uncontrolled, with optional press-and-hold repeat.",
      "dependencies": [
        "lucide-react",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button"
      ],
      "files": [
        {
          "path": "components/ui/quantity-stepper.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "progress",
      "type": "registry:ui",
      "title": "Progress",
      "description": "Horizontal progress bar with a label row and a tone that follows how full or empty it is, for quotas and stock.",
      "dependencies": [
        "motion",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/ui/progress.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "stat",
      "type": "registry:ui",
      "title": "Stat",
      "description": "KPI tile with a label, a large value, a change chip and an optional toggle-button mode, plus a grouped grid.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/badge"
      ],
      "files": [
        {
          "path": "components/ui/stat.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "empty-state",
      "type": "registry:ui",
      "title": "Empty State",
      "description": "Centered empty block with an optional icon, title, description and action slots, for tables, lists and cards.",
      "dependencies": [
        "class-variance-authority"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/empty-state.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "stepper",
      "type": "registry:ui",
      "title": "Stepper",
      "description": "Numbered step indicator for multi-step flows like checkout, horizontal or vertical, that never overflows on mobile.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/stepper.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "theme-toggle",
      "type": "registry:ui",
      "title": "Theme Toggle",
      "description": "Icon menu that switches between system, light and dark by toggling the dark class, and remembers the choice.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/dropdown-menu"
      ],
      "files": [
        {
          "path": "components/ui/theme-toggle.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "site-header",
      "type": "registry:ui",
      "title": "Site Header",
      "description": "Sticky top bar with a brand slot, nav links, an actions slot and a mobile menu.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button"
      ],
      "files": [
        {
          "path": "components/ui/site-header.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "qr-code",
      "type": "registry:ui",
      "title": "Qr Code",
      "description": "A real, scannable QR code drawn as an inline SVG, readable in light and dark themes.",
      "dependencies": [
        "uqr"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/qr-code.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "ticket-pass",
      "type": "registry:ui",
      "title": "Ticket Pass",
      "description": "Digital ticket card with a title band, details grid, tear line, QR stub and a status badge.",
      "dependencies": [
        "class-variance-authority"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/qr-code",
        "@opendraft/badge"
      ],
      "files": [
        {
          "path": "components/ui/ticket-pass.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "checkout",
      "type": "registry:block",
      "title": "Checkout",
      "description": "Three-step checkout (details, payment, confirmation) with validation, a sticky order summary with quantity steppers and discount codes, and ticket-pass confirmation. Card details stay in the form; only the last four digits reach your code.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/badge",
        "@opendraft/button",
        "@opendraft/checkbox",
        "@opendraft/empty-state",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/quantity-stepper",
        "@opendraft/radio-group",
        "@opendraft/stepper",
        "@opendraft/ticket-pass"
      ],
      "files": [
        {
          "path": "components/blocks/checkout.tsx",
          "type": "registry:component",
          "target": "components/blocks/checkout.tsx"
        }
      ]
    },
    {
      "name": "catalog",
      "type": "registry:block",
      "title": "Catalog",
      "description": "Browse and discovery screen: featured band, search, category chips, sort, price filter, availability switch, card grid, active filters, empty state and loading skeleton.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/badge",
        "@opendraft/input",
        "@opendraft/select",
        "@opendraft/switch",
        "@opendraft/progress",
        "@opendraft/skeleton",
        "@opendraft/empty-state"
      ],
      "files": [
        {
          "path": "components/blocks/catalog.tsx",
          "type": "registry:component",
          "target": "components/blocks/catalog.tsx"
        }
      ]
    },
    {
      "name": "detail-page",
      "type": "registry:block",
      "title": "Detail Page",
      "description": "Detail page with a sticky purchase panel: media, meta, key facts, tabs, tier selection with quantity, running total, checkout and waitlist.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/avatar",
        "@opendraft/badge",
        "@opendraft/button",
        "@opendraft/accordion",
        "@opendraft/progress",
        "@opendraft/quantity-stepper",
        "@opendraft/radio-group",
        "@opendraft/stat",
        "@opendraft/tabs"
      ],
      "files": [
        {
          "path": "components/blocks/detail-page.tsx",
          "type": "registry:component",
          "target": "components/blocks/detail-page.tsx"
        }
      ]
    },
    {
      "name": "order-confirmation",
      "type": "registry:block",
      "title": "Order Confirmation",
      "description": "Order confirmed screen with a completed stepper, order number, stat row, one ticket pass per ticket, an order summary and download, calendar, view-tickets and continue actions.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/empty-state",
        "@opendraft/stat",
        "@opendraft/stepper",
        "@opendraft/ticket-pass"
      ],
      "files": [
        {
          "path": "components/blocks/order-confirmation.tsx",
          "type": "registry:component",
          "target": "components/blocks/order-confirmation.tsx"
        }
      ]
    },
    {
      "name": "page-header",
      "type": "registry:ui",
      "title": "Page Header",
      "description": "Page title block with eyebrow, description, actions and breadcrumb slots, plus a container that gives every route the same width and gutters.",
      "dependencies": [
        "class-variance-authority"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/page-header.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "field",
      "type": "registry:ui",
      "title": "Field",
      "description": "Form field wrapper that pairs a label, control, hint and error message and wires ids and ARIA attributes, with a responsive group and fieldset.",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/label"
      ],
      "files": [
        {
          "path": "components/ui/field.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "date-picker",
      "type": "registry:ui",
      "title": "Date Picker",
      "description": "Single-date picker in a popover with an accessible month grid and an optional HH:MM time field (12h or 24h), using ISO string values.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/input",
        "@opendraft/popover"
      ],
      "files": [
        {
          "path": "components/ui/date-picker.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "repeater-field",
      "type": "registry:ui",
      "title": "Repeater Field",
      "description": "Add and remove rows editor for repeatable groups, with min/max, optional move up/down, live announcements and animated rows.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/ui/repeater-field.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "timeline",
      "type": "registry:ui",
      "title": "Timeline",
      "description": "Vertical event timeline with status markers that never rely on color alone, mono timestamps, a side time column on wide containers, expandable detail, collapsible long lists, and loading and empty states.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/skeleton"
      ],
      "files": [
        {
          "path": "components/ui/timeline.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "alert",
      "type": "registry:ui",
      "title": "Alert",
      "description": "Callout with a per-variant icon, optional dismiss, an actions slot and a full-bleed banner mode for system, weather and policy notices.",
      "dependencies": [
        "class-variance-authority",
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/alert.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "status-indicator",
      "type": "registry:ui",
      "title": "Status Indicator",
      "description": "Shape plus word status (operational, degraded, down, maintenance) and an uptime bar of segments with an accessible summary.",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/status-indicator.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "slider",
      "type": "registry:ui",
      "title": "Slider",
      "description": "Single or range slider on Radix with a label row, formatted value and marks.",
      "dependencies": [
        "radix-ui"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/slider.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "dropzone",
      "type": "registry:ui",
      "title": "Dropzone",
      "description": "Drag-and-drop or click-to-browse file area with size, type and count validation, camera capture and a file list with progress. No upload logic.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/progress"
      ],
      "files": [
        {
          "path": "components/ui/dropzone.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "otp-input",
      "type": "registry:ui",
      "title": "Otp Input",
      "description": "One-time-code entry on a single real input, with paste, a separator and complete, invalid and disabled states.",
      "dependencies": [],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/ui/otp-input.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "waveform",
      "type": "registry:component",
      "title": "Waveform",
      "description": "Static, clickable and scrubbable waveform bars drawn from normalized data, plus a scrolling variant and an accessible scrubber. Adapted from ElevenLabs UI (MIT).",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/agents/waveform.tsx",
          "type": "registry:component",
          "target": "components/agents/waveform.tsx"
        }
      ]
    },
    {
      "name": "live-waveform",
      "type": "registry:component",
      "title": "Live Waveform",
      "description": "Microphone-driven canvas waveform in static or scrolling mode with a processing animation; handles denied or missing microphones. Adapted from ElevenLabs UI (MIT).",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/agents/live-waveform.tsx",
          "type": "registry:component",
          "target": "components/agents/live-waveform.tsx"
        }
      ]
    },
    {
      "name": "bar-visualizer",
      "type": "registry:component",
      "title": "Bar Visualizer",
      "description": "Volume or frequency bars that light up by agent state (connecting, listening, thinking, speaking). Adapted from ElevenLabs UI (MIT).",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/motion"
      ],
      "files": [
        {
          "path": "components/agents/bar-visualizer.tsx",
          "type": "registry:component",
          "target": "components/agents/bar-visualizer.tsx"
        }
      ]
    },
    {
      "name": "audio-player",
      "type": "registry:component",
      "title": "Audio Player",
      "description": "Audio provider with play and pause, previous and next, seek, speed menu, volume, playlist and error state. Takes a source or a list of tracks. Adapted from ElevenLabs UI (MIT).",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/dropdown-menu",
        "@opendraft/slider"
      ],
      "files": [
        {
          "path": "components/agents/audio-player.tsx",
          "type": "registry:component",
          "target": "components/agents/audio-player.tsx"
        }
      ]
    },
    {
      "name": "scrub-bar",
      "type": "registry:component",
      "title": "Scrub Bar",
      "description": "Seekable progress bar with time labels on a native range input, so pointer, touch and keyboard all work. Adapted from ElevenLabs UI (MIT).",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils"
      ],
      "files": [
        {
          "path": "components/agents/scrub-bar.tsx",
          "type": "registry:component",
          "target": "components/agents/scrub-bar.tsx"
        }
      ]
    },
    {
      "name": "transcript-viewer",
      "type": "registry:component",
      "title": "Transcript Viewer",
      "description": "Time-aligned transcript that highlights the current word and seeks when a word is clicked, from plain word timings. Adapted from ElevenLabs UI (MIT).",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/scrub-bar"
      ],
      "files": [
        {
          "path": "components/agents/transcript-viewer.tsx",
          "type": "registry:component",
          "target": "components/agents/transcript-viewer.tsx"
        }
      ]
    },
    {
      "name": "mic-selector",
      "type": "registry:component",
      "title": "Mic Selector",
      "description": "Microphone picker in a dropdown with a mute toggle and a live level preview; handles permission denied and no devices. Adapted from ElevenLabs UI (MIT).",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/dropdown-menu",
        "@opendraft/live-waveform"
      ],
      "files": [
        {
          "path": "components/agents/mic-selector.tsx",
          "type": "registry:component",
          "target": "components/agents/mic-selector.tsx"
        }
      ]
    },
    {
      "name": "voice-button",
      "type": "registry:component",
      "title": "Voice Button",
      "description": "Toggle or push-to-talk record button with idle, recording, processing, success and error states, a shortcut hint and a compact live waveform. Adapted from ElevenLabs UI (MIT).",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@opendraft/utils",
        "@opendraft/button",
        "@opendraft/kbd",
        "@opendraft/live-waveform"
      ],
      "files": [
        {
          "path": "components/agents/voice-button.tsx",
          "type": "registry:component",
          "target": "components/agents/voice-button.tsx"
        }
      ]
    },
    {
      "name": "all",
      "type": "registry:item",
      "title": "Everything",
      "description": "The theme plus every opendraft component.",
      "registryDependencies": [
        "@opendraft/theme",
        "@opendraft/utils",
        "@opendraft/motion",
        "@opendraft/use-dismiss",
        "@opendraft/use-tap-gesture",
        "@opendraft/use-hover-gesture",
        "@opendraft/use-favicon",
        "@opendraft/use-hover-capable",
        "@opendraft/use-touch-capable",
        "@opendraft/use-on-open",
        "@opendraft/use-row-cursor",
        "@opendraft/touch",
        "@opendraft/favicon",
        "@opendraft/text-shimmer",
        "@opendraft/command-search",
        "@opendraft/presence-gate",
        "@opendraft/button",
        "@opendraft/badge",
        "@opendraft/input",
        "@opendraft/textarea",
        "@opendraft/label",
        "@opendraft/card",
        "@opendraft/separator",
        "@opendraft/kbd",
        "@opendraft/skeleton",
        "@opendraft/avatar",
        "@opendraft/switch",
        "@opendraft/checkbox",
        "@opendraft/tabs",
        "@opendraft/accordion",
        "@opendraft/dialog",
        "@opendraft/dropdown-menu",
        "@opendraft/select",
        "@opendraft/popover",
        "@opendraft/radio-group",
        "@opendraft/tooltip",
        "@opendraft/sonner",
        "@opendraft/animated-number",
        "@opendraft/blur-text",
        "@opendraft/shimmer-text",
        "@opendraft/glide-menu",
        "@opendraft/spotlight-card",
        "@opendraft/marquee",
        "@opendraft/code-reveal",
        "@opendraft/reveal",
        "@opendraft/magnetic",
        "@opendraft/preview-rail",
        "@opendraft/loader",
        "@opendraft/text-scramble",
        "@opendraft/action-swap",
        "@opendraft/pixel-field",
        "@opendraft/animated-sidebar",
        "@opendraft/drawer",
        "@opendraft/command-palette",
        "@opendraft/date-range-picker",
        "@opendraft/table",
        "@opendraft/copy-button",
        "@opendraft/voice-orb",
        "@opendraft/agent-disclosure",
        "@opendraft/citations",
        "@opendraft/message-bubble",
        "@opendraft/message-scroller",
        "@opendraft/message",
        "@opendraft/prompt-input",
        "@opendraft/agent-code",
        "@opendraft/todo-list",
        "@opendraft/tool-result",
        "@opendraft/code-block",
        "@opendraft/file-diff",
        "@opendraft/agent-activity",
        "@opendraft/loading-states",
        "@opendraft/approval-card",
        "@opendraft/tool-approval",
        "@opendraft/image-generation",
        "@opendraft/ai-sidebar",
        "@opendraft/chat-app",
        "@opendraft/streaming-response",
        "@opendraft/question-card",
        "@opendraft/chat-panel",
        "@opendraft/recommendation-card",
        "@opendraft/context-cards",
        "@opendraft/search-list",
        "@opendraft/filter-table",
        "@opendraft/flowchart",
        "@opendraft/insight-cards",
        "@opendraft/prompt-bar",
        "@opendraft/selection-actions",
        "@opendraft/pixel-loader",
        "@opendraft/thinking-trace",
        "@opendraft/streaming-answer",
        "@opendraft/task-rows",
        "@opendraft/tool-chips",
        "@opendraft/agent-screen",
        "@opendraft/code-panel",
        "@opendraft/fine-tune-card",
        "@opendraft/sidebar-nav",
        "@opendraft/records-table",
        "@opendraft/diff-table",
        "@opendraft/crm-pipeline",
        "@opendraft/filter-bar",
        "@opendraft/bulk-action-bar",
        "@opendraft/checklist",
        "@opendraft/description-list",
        "@opendraft/data-table",
        "@opendraft/record-page",
        "@opendraft/stage-board",
        "@opendraft/gauge",
        "@opendraft/eta-indicator",
        "@opendraft/secret-input",
        "@opendraft/mfa-step",
        "@opendraft/permission-matrix",
        "@opendraft/signature-pad",
        "@opendraft/photo-capture",
        "@opendraft/step-nav",
        "@opendraft/time-series-chart",
        "@opendraft/seat-map",
        "@opendraft/product-card",
        "@opendraft/image-gallery",
        "@opendraft/address-form",
        "@opendraft/video-player",
        "@opendraft/document-viewer",
        "@opendraft/date-time-picker",
        "@opendraft/rating",
        "@opendraft/gantt",
        "@opendraft/scheduler",
        "@opendraft/map-view",
        "@opendraft/rich-text-editor",
        "@opendraft/analytics-dashboard",
        "@opendraft/settings-page",
        "@opendraft/auth-screen",
        "@opendraft/agent-workspace",
        "@opendraft/quantity-stepper",
        "@opendraft/progress",
        "@opendraft/stat",
        "@opendraft/empty-state",
        "@opendraft/stepper",
        "@opendraft/theme-toggle",
        "@opendraft/site-header",
        "@opendraft/qr-code",
        "@opendraft/ticket-pass",
        "@opendraft/checkout",
        "@opendraft/catalog",
        "@opendraft/detail-page",
        "@opendraft/order-confirmation",
        "@opendraft/page-header",
        "@opendraft/field",
        "@opendraft/date-picker",
        "@opendraft/repeater-field",
        "@opendraft/timeline",
        "@opendraft/alert",
        "@opendraft/status-indicator",
        "@opendraft/slider",
        "@opendraft/dropzone",
        "@opendraft/otp-input",
        "@opendraft/waveform",
        "@opendraft/live-waveform",
        "@opendraft/bar-visualizer",
        "@opendraft/audio-player",
        "@opendraft/scrub-bar",
        "@opendraft/transcript-viewer",
        "@opendraft/mic-selector",
        "@opendraft/voice-button"
      ]
    },
    {
      "name": "kit-security",
      "type": "registry:item",
      "title": "Security and compliance kit",
      "description": "The theme and the opendraft components that suit security and compliance products. See the use-case playbook.",
      "registryDependencies": [
        "@opendraft/theme",
        "@opendraft/button",
        "@opendraft/card",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/select",
        "@opendraft/dialog",
        "@opendraft/badge",
        "@opendraft/tabs",
        "@opendraft/field",
        "@opendraft/page-header",
        "@opendraft/theme-toggle",
        "@opendraft/sonner",
        "@opendraft/data-table",
        "@opendraft/table",
        "@opendraft/filter-bar",
        "@opendraft/bulk-action-bar",
        "@opendraft/timeline",
        "@opendraft/code-block",
        "@opendraft/file-diff",
        "@opendraft/stepper",
        "@opendraft/copy-button",
        "@opendraft/approval-card",
        "@opendraft/tool-approval",
        "@opendraft/alert",
        "@opendraft/settings-page",
        "@opendraft/permission-matrix",
        "@opendraft/switch",
        "@opendraft/repeater-field",
        "@opendraft/date-range-picker",
        "@opendraft/date-time-picker",
        "@opendraft/description-list",
        "@opendraft/command-palette",
        "@opendraft/stat",
        "@opendraft/gauge",
        "@opendraft/progress",
        "@opendraft/time-series-chart",
        "@opendraft/analytics-dashboard",
        "@opendraft/auth-screen",
        "@opendraft/mfa-step",
        "@opendraft/secret-input",
        "@opendraft/agent-workspace",
        "@opendraft/citations",
        "@opendraft/map-view"
      ]
    },
    {
      "name": "kit-it-infrastructure",
      "type": "registry:item",
      "title": "IT, DevOps and infrastructure kit",
      "description": "The theme and the opendraft components that suit it, devops and infrastructure products. See the use-case playbook.",
      "registryDependencies": [
        "@opendraft/theme",
        "@opendraft/button",
        "@opendraft/card",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/select",
        "@opendraft/dialog",
        "@opendraft/badge",
        "@opendraft/tabs",
        "@opendraft/field",
        "@opendraft/page-header",
        "@opendraft/theme-toggle",
        "@opendraft/sonner",
        "@opendraft/status-indicator",
        "@opendraft/stat",
        "@opendraft/gauge",
        "@opendraft/progress",
        "@opendraft/alert",
        "@opendraft/site-header",
        "@opendraft/timeline",
        "@opendraft/data-table",
        "@opendraft/stepper",
        "@opendraft/checklist",
        "@opendraft/scheduler",
        "@opendraft/avatar",
        "@opendraft/table",
        "@opendraft/filter-bar",
        "@opendraft/code-block",
        "@opendraft/copy-button",
        "@opendraft/analytics-dashboard",
        "@opendraft/time-series-chart",
        "@opendraft/insight-cards",
        "@opendraft/date-range-picker",
        "@opendraft/file-diff",
        "@opendraft/approval-card",
        "@opendraft/repeater-field",
        "@opendraft/secret-input",
        "@opendraft/switch",
        "@opendraft/bulk-action-bar",
        "@opendraft/command-palette",
        "@opendraft/kbd",
        "@opendraft/settings-page",
        "@opendraft/auth-screen",
        "@opendraft/agent-workspace",
        "@opendraft/tool-approval",
        "@opendraft/citations"
      ]
    },
    {
      "name": "kit-aviation",
      "type": "registry:item",
      "title": "Aviation and travel operations kit",
      "description": "The theme and the opendraft components that suit aviation and travel operations products. See the use-case playbook.",
      "registryDependencies": [
        "@opendraft/theme",
        "@opendraft/button",
        "@opendraft/card",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/select",
        "@opendraft/dialog",
        "@opendraft/badge",
        "@opendraft/tabs",
        "@opendraft/field",
        "@opendraft/page-header",
        "@opendraft/theme-toggle",
        "@opendraft/sonner",
        "@opendraft/data-table",
        "@opendraft/filter-bar",
        "@opendraft/alert",
        "@opendraft/text-scramble",
        "@opendraft/record-page",
        "@opendraft/eta-indicator",
        "@opendraft/map-view",
        "@opendraft/timeline",
        "@opendraft/stepper",
        "@opendraft/copy-button",
        "@opendraft/date-picker",
        "@opendraft/date-range-picker",
        "@opendraft/date-time-picker",
        "@opendraft/quantity-stepper",
        "@opendraft/radio-group",
        "@opendraft/command-palette",
        "@opendraft/repeater-field",
        "@opendraft/address-form",
        "@opendraft/checkbox",
        "@opendraft/order-confirmation",
        "@opendraft/ticket-pass",
        "@opendraft/stat",
        "@opendraft/qr-code",
        "@opendraft/seat-map",
        "@opendraft/scheduler",
        "@opendraft/gantt",
        "@opendraft/avatar",
        "@opendraft/checklist",
        "@opendraft/textarea",
        "@opendraft/photo-capture",
        "@opendraft/signature-pad",
        "@opendraft/approval-card",
        "@opendraft/dropzone",
        "@opendraft/gauge",
        "@opendraft/time-series-chart",
        "@opendraft/analytics-dashboard",
        "@opendraft/status-indicator",
        "@opendraft/progress",
        "@opendraft/site-header"
      ]
    },
    {
      "name": "kit-logistics",
      "type": "registry:item",
      "title": "Logistics, supply chain and fleet kit",
      "description": "The theme and the opendraft components that suit logistics, supply chain and fleet products. See the use-case playbook.",
      "registryDependencies": [
        "@opendraft/theme",
        "@opendraft/button",
        "@opendraft/card",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/select",
        "@opendraft/dialog",
        "@opendraft/badge",
        "@opendraft/tabs",
        "@opendraft/field",
        "@opendraft/page-header",
        "@opendraft/theme-toggle",
        "@opendraft/sonner",
        "@opendraft/site-header",
        "@opendraft/eta-indicator",
        "@opendraft/map-view",
        "@opendraft/stepper",
        "@opendraft/timeline",
        "@opendraft/copy-button",
        "@opendraft/description-list",
        "@opendraft/alert",
        "@opendraft/data-table",
        "@opendraft/filter-bar",
        "@opendraft/bulk-action-bar",
        "@opendraft/date-range-picker",
        "@opendraft/scheduler",
        "@opendraft/stage-board",
        "@opendraft/avatar",
        "@opendraft/address-form",
        "@opendraft/date-time-picker",
        "@opendraft/repeater-field",
        "@opendraft/quantity-stepper",
        "@opendraft/switch",
        "@opendraft/order-confirmation",
        "@opendraft/stat",
        "@opendraft/status-indicator",
        "@opendraft/gauge",
        "@opendraft/progress",
        "@opendraft/analytics-dashboard",
        "@opendraft/table",
        "@opendraft/signature-pad",
        "@opendraft/photo-capture",
        "@opendraft/checkbox",
        "@opendraft/qr-code",
        "@opendraft/radio-group",
        "@opendraft/time-series-chart",
        "@opendraft/insight-cards"
      ]
    },
    {
      "name": "kit-healthcare",
      "type": "registry:item",
      "title": "Healthcare and patient care kit",
      "description": "The theme and the opendraft components that suit healthcare and patient care products. See the use-case playbook.",
      "registryDependencies": [
        "@opendraft/theme",
        "@opendraft/button",
        "@opendraft/card",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/select",
        "@opendraft/dialog",
        "@opendraft/badge",
        "@opendraft/tabs",
        "@opendraft/field",
        "@opendraft/page-header",
        "@opendraft/theme-toggle",
        "@opendraft/sonner",
        "@opendraft/record-page",
        "@opendraft/description-list",
        "@opendraft/avatar",
        "@opendraft/gauge",
        "@opendraft/alert",
        "@opendraft/copy-button",
        "@opendraft/data-table",
        "@opendraft/filter-bar",
        "@opendraft/stat",
        "@opendraft/time-series-chart",
        "@opendraft/date-range-picker",
        "@opendraft/status-indicator",
        "@opendraft/scheduler",
        "@opendraft/stepper",
        "@opendraft/date-time-picker",
        "@opendraft/radio-group",
        "@opendraft/order-confirmation",
        "@opendraft/ticket-pass",
        "@opendraft/table",
        "@opendraft/repeater-field",
        "@opendraft/approval-card",
        "@opendraft/video-player",
        "@opendraft/tooltip",
        "@opendraft/textarea",
        "@opendraft/checkbox",
        "@opendraft/photo-capture",
        "@opendraft/signature-pad",
        "@opendraft/dropzone",
        "@opendraft/question-card",
        "@opendraft/address-form",
        "@opendraft/timeline",
        "@opendraft/checklist",
        "@opendraft/progress",
        "@opendraft/accordion",
        "@opendraft/rich-text-editor",
        "@opendraft/chat-app",
        "@opendraft/message",
        "@opendraft/message-bubble",
        "@opendraft/message-scroller",
        "@opendraft/prompt-input",
        "@opendraft/animated-sidebar",
        "@opendraft/auth-screen",
        "@opendraft/mfa-step",
        "@opendraft/settings-page",
        "@opendraft/permission-matrix",
        "@opendraft/site-header",
        "@opendraft/empty-state"
      ]
    },
    {
      "name": "kit-fintech",
      "type": "registry:item",
      "title": "Fintech and banking kit",
      "description": "The theme and the opendraft components that suit fintech and banking products. See the use-case playbook.",
      "registryDependencies": [
        "@opendraft/theme",
        "@opendraft/button",
        "@opendraft/card",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/select",
        "@opendraft/dialog",
        "@opendraft/badge",
        "@opendraft/tabs",
        "@opendraft/field",
        "@opendraft/page-header",
        "@opendraft/theme-toggle",
        "@opendraft/sonner",
        "@opendraft/stat",
        "@opendraft/animated-number",
        "@opendraft/time-series-chart",
        "@opendraft/data-table",
        "@opendraft/filter-bar",
        "@opendraft/bulk-action-bar",
        "@opendraft/copy-button",
        "@opendraft/date-range-picker",
        "@opendraft/stepper",
        "@opendraft/mfa-step",
        "@opendraft/description-list",
        "@opendraft/timeline",
        "@opendraft/alert",
        "@opendraft/radio-group",
        "@opendraft/address-form",
        "@opendraft/gauge",
        "@opendraft/analytics-dashboard",
        "@opendraft/insight-cards",
        "@opendraft/slider",
        "@opendraft/quantity-stepper",
        "@opendraft/progress",
        "@opendraft/repeater-field",
        "@opendraft/photo-capture",
        "@opendraft/dropzone",
        "@opendraft/status-indicator",
        "@opendraft/switch",
        "@opendraft/secret-input",
        "@opendraft/settings-page",
        "@opendraft/permission-matrix"
      ]
    },
    {
      "name": "kit-ecommerce",
      "type": "registry:item",
      "title": "E-commerce and marketplaces kit",
      "description": "The theme and the opendraft components that suit e-commerce and marketplaces products. See the use-case playbook.",
      "registryDependencies": [
        "@opendraft/theme",
        "@opendraft/button",
        "@opendraft/card",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/select",
        "@opendraft/dialog",
        "@opendraft/badge",
        "@opendraft/tabs",
        "@opendraft/field",
        "@opendraft/page-header",
        "@opendraft/theme-toggle",
        "@opendraft/sonner",
        "@opendraft/product-card",
        "@opendraft/filter-bar",
        "@opendraft/empty-state",
        "@opendraft/skeleton",
        "@opendraft/catalog",
        "@opendraft/detail-page",
        "@opendraft/checkout",
        "@opendraft/order-confirmation",
        "@opendraft/ticket-pass",
        "@opendraft/image-gallery",
        "@opendraft/rating",
        "@opendraft/accordion",
        "@opendraft/radio-group",
        "@opendraft/quantity-stepper",
        "@opendraft/progress",
        "@opendraft/stat",
        "@opendraft/description-list",
        "@opendraft/avatar",
        "@opendraft/textarea",
        "@opendraft/rich-text-editor",
        "@opendraft/drawer",
        "@opendraft/alert",
        "@opendraft/separator",
        "@opendraft/stepper",
        "@opendraft/address-form",
        "@opendraft/checkbox",
        "@opendraft/timeline",
        "@opendraft/copy-button",
        "@opendraft/dropzone",
        "@opendraft/analytics-dashboard",
        "@opendraft/time-series-chart",
        "@opendraft/data-table",
        "@opendraft/bulk-action-bar",
        "@opendraft/repeater-field",
        "@opendraft/photo-capture",
        "@opendraft/switch",
        "@opendraft/date-range-picker",
        "@opendraft/site-header"
      ]
    },
    {
      "name": "kit-education",
      "type": "registry:item",
      "title": "Education and learning kit",
      "description": "The theme and the opendraft components that suit education and learning products. See the use-case playbook.",
      "registryDependencies": [
        "@opendraft/theme",
        "@opendraft/button",
        "@opendraft/card",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/select",
        "@opendraft/dialog",
        "@opendraft/badge",
        "@opendraft/tabs",
        "@opendraft/field",
        "@opendraft/page-header",
        "@opendraft/theme-toggle",
        "@opendraft/sonner",
        "@opendraft/catalog",
        "@opendraft/detail-page",
        "@opendraft/checkout",
        "@opendraft/stat",
        "@opendraft/progress",
        "@opendraft/empty-state",
        "@opendraft/step-nav",
        "@opendraft/accordion",
        "@opendraft/animated-sidebar",
        "@opendraft/video-player",
        "@opendraft/document-viewer",
        "@opendraft/transcript-viewer",
        "@opendraft/audio-player",
        "@opendraft/code-block",
        "@opendraft/skeleton",
        "@opendraft/alert",
        "@opendraft/radio-group",
        "@opendraft/checkbox",
        "@opendraft/textarea",
        "@opendraft/stepper",
        "@opendraft/question-card",
        "@opendraft/dropzone",
        "@opendraft/rich-text-editor",
        "@opendraft/photo-capture",
        "@opendraft/timeline",
        "@opendraft/table",
        "@opendraft/filter-bar",
        "@opendraft/bulk-action-bar",
        "@opendraft/slider",
        "@opendraft/drawer",
        "@opendraft/rating",
        "@opendraft/analytics-dashboard",
        "@opendraft/time-series-chart",
        "@opendraft/gauge",
        "@opendraft/data-table",
        "@opendraft/scheduler",
        "@opendraft/gantt",
        "@opendraft/date-time-picker",
        "@opendraft/chat-app",
        "@opendraft/message",
        "@opendraft/message-bubble",
        "@opendraft/message-scroller",
        "@opendraft/prompt-input",
        "@opendraft/streaming-response",
        "@opendraft/citations",
        "@opendraft/avatar",
        "@opendraft/site-header"
      ]
    },
    {
      "name": "kit-energy-utilities",
      "type": "registry:item",
      "title": "Energy, utilities and EV charging kit",
      "description": "The theme and the opendraft components that suit energy, utilities and ev charging products. See the use-case playbook.",
      "registryDependencies": [
        "@opendraft/theme",
        "@opendraft/button",
        "@opendraft/card",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/select",
        "@opendraft/dialog",
        "@opendraft/badge",
        "@opendraft/tabs",
        "@opendraft/field",
        "@opendraft/page-header",
        "@opendraft/theme-toggle",
        "@opendraft/sonner",
        "@opendraft/stat",
        "@opendraft/gauge",
        "@opendraft/status-indicator",
        "@opendraft/alert",
        "@opendraft/progress",
        "@opendraft/map-view",
        "@opendraft/time-series-chart",
        "@opendraft/date-range-picker",
        "@opendraft/date-time-picker",
        "@opendraft/analytics-dashboard",
        "@opendraft/data-table",
        "@opendraft/filter-bar",
        "@opendraft/bulk-action-bar",
        "@opendraft/copy-button",
        "@opendraft/table",
        "@opendraft/timeline",
        "@opendraft/stepper",
        "@opendraft/otp-input",
        "@opendraft/slider",
        "@opendraft/switch",
        "@opendraft/scheduler",
        "@opendraft/checklist",
        "@opendraft/signature-pad",
        "@opendraft/photo-capture",
        "@opendraft/record-page",
        "@opendraft/approval-card",
        "@opendraft/address-form",
        "@opendraft/radio-group",
        "@opendraft/document-viewer",
        "@opendraft/site-header"
      ]
    },
    {
      "name": "kit-government-civic",
      "type": "registry:item",
      "title": "Government and civic services kit",
      "description": "The theme and the opendraft components that suit government and civic services products. See the use-case playbook.",
      "registryDependencies": [
        "@opendraft/theme",
        "@opendraft/button",
        "@opendraft/card",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/select",
        "@opendraft/dialog",
        "@opendraft/badge",
        "@opendraft/tabs",
        "@opendraft/field",
        "@opendraft/page-header",
        "@opendraft/theme-toggle",
        "@opendraft/sonner",
        "@opendraft/stepper",
        "@opendraft/step-nav",
        "@opendraft/textarea",
        "@opendraft/radio-group",
        "@opendraft/checkbox",
        "@opendraft/date-picker",
        "@opendraft/address-form",
        "@opendraft/description-list",
        "@opendraft/repeater-field",
        "@opendraft/dropzone",
        "@opendraft/photo-capture",
        "@opendraft/alert",
        "@opendraft/record-page",
        "@opendraft/timeline",
        "@opendraft/copy-button",
        "@opendraft/auth-screen",
        "@opendraft/mfa-step",
        "@opendraft/secret-input",
        "@opendraft/data-table",
        "@opendraft/filter-bar",
        "@opendraft/bulk-action-bar",
        "@opendraft/stage-board",
        "@opendraft/approval-card",
        "@opendraft/checklist",
        "@opendraft/document-viewer",
        "@opendraft/rich-text-editor",
        "@opendraft/drawer",
        "@opendraft/date-time-picker",
        "@opendraft/scheduler",
        "@opendraft/ticket-pass",
        "@opendraft/stat",
        "@opendraft/site-header",
        "@opendraft/search-list",
        "@opendraft/map-view",
        "@opendraft/accordion",
        "@opendraft/empty-state",
        "@opendraft/analytics-dashboard",
        "@opendraft/time-series-chart",
        "@opendraft/gauge",
        "@opendraft/date-range-picker",
        "@opendraft/progress"
      ]
    },
    {
      "name": "kit-manufacturing",
      "type": "registry:item",
      "title": "Manufacturing and industrial operations kit",
      "description": "The theme and the opendraft components that suit manufacturing and industrial operations products. See the use-case playbook.",
      "registryDependencies": [
        "@opendraft/theme",
        "@opendraft/button",
        "@opendraft/card",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/select",
        "@opendraft/dialog",
        "@opendraft/badge",
        "@opendraft/tabs",
        "@opendraft/field",
        "@opendraft/page-header",
        "@opendraft/theme-toggle",
        "@opendraft/sonner",
        "@opendraft/stat",
        "@opendraft/gauge",
        "@opendraft/status-indicator",
        "@opendraft/alert",
        "@opendraft/progress",
        "@opendraft/animated-number",
        "@opendraft/eta-indicator",
        "@opendraft/step-nav",
        "@opendraft/checklist",
        "@opendraft/quantity-stepper",
        "@opendraft/approval-card",
        "@opendraft/radio-group",
        "@opendraft/textarea",
        "@opendraft/photo-capture",
        "@opendraft/signature-pad",
        "@opendraft/time-series-chart",
        "@opendraft/data-table",
        "@opendraft/filter-bar",
        "@opendraft/bulk-action-bar",
        "@opendraft/timeline",
        "@opendraft/analytics-dashboard",
        "@opendraft/date-range-picker",
        "@opendraft/scheduler",
        "@opendraft/gantt",
        "@opendraft/record-page",
        "@opendraft/date-time-picker",
        "@opendraft/description-list",
        "@opendraft/copy-button",
        "@opendraft/qr-code",
        "@opendraft/command-palette",
        "@opendraft/slider",
        "@opendraft/switch",
        "@opendraft/stage-board",
        "@opendraft/rich-text-editor",
        "@opendraft/empty-state"
      ]
    },
    {
      "name": "kit-hr-people",
      "type": "registry:item",
      "title": "HR and people operations kit",
      "description": "The theme and the opendraft components that suit hr and people operations products. See the use-case playbook.",
      "registryDependencies": [
        "@opendraft/theme",
        "@opendraft/button",
        "@opendraft/card",
        "@opendraft/input",
        "@opendraft/label",
        "@opendraft/select",
        "@opendraft/dialog",
        "@opendraft/badge",
        "@opendraft/tabs",
        "@opendraft/field",
        "@opendraft/page-header",
        "@opendraft/theme-toggle",
        "@opendraft/sonner",
        "@opendraft/data-table",
        "@opendraft/filter-bar",
        "@opendraft/avatar",
        "@opendraft/command-palette",
        "@opendraft/drawer",
        "@opendraft/record-page",
        "@opendraft/description-list",
        "@opendraft/secret-input",
        "@opendraft/permission-matrix",
        "@opendraft/copy-button",
        "@opendraft/timeline",
        "@opendraft/date-range-picker",
        "@opendraft/scheduler",
        "@opendraft/textarea",
        "@opendraft/approval-card",
        "@opendraft/progress",
        "@opendraft/stat",
        "@opendraft/stage-board",
        "@opendraft/rating",
        "@opendraft/rich-text-editor",
        "@opendraft/document-viewer",
        "@opendraft/stepper",
        "@opendraft/dropzone",
        "@opendraft/checkbox",
        "@opendraft/radio-group",
        "@opendraft/alert",
        "@opendraft/checklist",
        "@opendraft/accordion",
        "@opendraft/date-picker",
        "@opendraft/slider",
        "@opendraft/date-time-picker",
        "@opendraft/analytics-dashboard",
        "@opendraft/time-series-chart",
        "@opendraft/gauge"
      ]
    }
  ]
}
