{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "soft-club",
  "homepage": "https://cobanov.github.io/soft-club-ui",
  "items": [
    {
      "name": "base",
      "type": "registry:ui",
      "title": "Soft Club Base",
      "description": "Design tokens, the shared Soft Club stylesheet (all four themes), and the cx class helper. Every Soft Club component depends on this item.",
      "dependencies": [
        "clsx@^2.1.1"
      ],
      "files": [
        {
          "path": "registry/soft-club/styles/soft-club-tokens.css",
          "type": "registry:file",
          "target": "styles/soft-club-tokens.css"
        },
        {
          "path": "registry/soft-club/styles/soft-club.css",
          "type": "registry:file",
          "target": "styles/soft-club.css"
        },
        {
          "path": "registry/soft-club/lib/cx.ts",
          "type": "registry:lib",
          "target": "lib/soft-club/cx.ts"
        }
      ],
      "docs": "Import the stylesheet once, e.g. in your global CSS: @import \"./styles/soft-club.css\"; (it pulls in soft-club-tokens.css).\nPick a theme by setting data-sc-theme on <html>: green (default), blue, orange, or night-city."
    },
    {
      "name": "theme-color",
      "type": "registry:lib",
      "title": "ThemeColor",
      "description": "Reads a Soft Club `--sc-theme-rgb-*` token off an element's computed style and returns it as an `[r, g, b]` triple. Lets canvas surfaces follow the active theme, which CSS variables alone cannot do inside a 2D context.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/lib/theme-color.ts",
          "type": "registry:lib",
          "target": "lib/soft-club/theme-color.ts"
        }
      ]
    },
    {
      "name": "use-ascii-field",
      "type": "registry:hook",
      "title": "UseAsciiField",
      "description": "Soft Club UseAsciiField hook.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/hooks/use-ascii-field.ts",
          "type": "registry:hook",
          "target": "hooks/soft-club/use-ascii-field.ts"
        }
      ]
    },
    {
      "name": "use-canvas-animation",
      "type": "registry:hook",
      "title": "UseCanvasAnimation",
      "description": "Re-runs the driver when this value changes. Use it to force a fresh static frame once an async data source (e.g. an image) has loaded, so the reduced-motion single-frame path does not get stuck on a placeholder.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/hooks/use-canvas-animation.ts",
          "type": "registry:hook",
          "target": "hooks/soft-club/use-canvas-animation.ts"
        }
      ]
    },
    {
      "name": "use-image-grid",
      "type": "registry:hook",
      "title": "UseImageGrid",
      "description": "Image sampling for the Soft Club canvas image effects (ASCII, mosaic, dither, halftone): loads a source image and reads it back as a cached, cover-fit RGBA grid, with a drifting procedural subject as the fallback when no image is set.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/hooks/use-image-grid.ts",
          "type": "registry:hook",
          "target": "hooks/soft-club/use-image-grid.ts"
        }
      ]
    },
    {
      "name": "use-token-stream",
      "type": "registry:hook",
      "title": "UseTokenStream",
      "description": "Soft Club UseTokenStream hook.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/hooks/use-token-stream.ts",
          "type": "registry:hook",
          "target": "hooks/soft-club/use-token-stream.ts"
        }
      ]
    },
    {
      "name": "use-typewriter",
      "type": "registry:hook",
      "title": "UseTypewriter",
      "description": "Soft Club UseTypewriter hook.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/hooks/use-typewriter.ts",
          "type": "registry:hook",
          "target": "hooks/soft-club/use-typewriter.ts"
        }
      ]
    },
    {
      "name": "accordion",
      "type": "registry:ui",
      "title": "Accordion",
      "description": "Disclosure list for compact support content and specs.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/accordion.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/accordion.tsx"
        }
      ]
    },
    {
      "name": "accretion-cluster",
      "type": "registry:ui",
      "title": "AccretionCluster",
      "description": "Diffusion-limited aggregation. The strata bands in the crust record arrival order.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/instrument.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/accretion-cluster.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/accretion-cluster.tsx"
        }
      ]
    },
    {
      "name": "alert-dialog",
      "type": "registry:ui",
      "title": "AlertDialog",
      "description": "Confirmation modal that requires an explicit choice before closing.",
      "dependencies": [
        "@radix-ui/react-dialog@^1.1.6"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/button.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/alert-dialog.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/alert-dialog.tsx"
        }
      ]
    },
    {
      "name": "alert",
      "type": "registry:ui",
      "title": "Alert",
      "description": "Inline status message with variants and an optional leading icon.",
      "dependencies": [
        "class-variance-authority@^0.7.1"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/alert.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/alert.tsx"
        }
      ]
    },
    {
      "name": "announcement-bar",
      "type": "registry:ui",
      "title": "AnnouncementBar",
      "description": "Dismissible top strip with an animated gradient sweep, tag, message, and action.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/announcement-bar.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/announcement-bar.tsx"
        }
      ]
    },
    {
      "name": "ascii-backdrop",
      "type": "registry:ui",
      "title": "AsciiBackdrop",
      "description": "Deterministic PRNG so a given seed always renders the same field.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/ascii-backdrop.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/ascii-backdrop.tsx"
        }
      ]
    },
    {
      "name": "ascii-donut",
      "type": "registry:ui",
      "title": "AsciiDonut",
      "description": "Soft Club AsciiDonut component.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/ascii-donut.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/ascii-donut.tsx"
        }
      ]
    },
    {
      "name": "ascii-fire",
      "type": "registry:ui",
      "title": "AsciiFire",
      "description": "Soft Club AsciiFire component.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/ascii-fire.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/ascii-fire.tsx"
        }
      ]
    },
    {
      "name": "ascii-flow",
      "type": "registry:ui",
      "title": "AsciiFlow",
      "description": "Soft Club AsciiFlow component.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/ascii-flow.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/ascii-flow.tsx"
        }
      ]
    },
    {
      "name": "ascii-hero",
      "type": "registry:ui",
      "title": "AsciiHero",
      "description": "Reactive ASCII canvas adapted into the green glass surface.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/use-ascii-field.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/ascii-hero.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/ascii-hero.tsx"
        }
      ]
    },
    {
      "name": "ascii-image",
      "type": "registry:ui",
      "title": "AsciiImage",
      "description": "Renders an image or procedural subject as a live, theme-tinted field of ASCII glyphs.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/use-image-grid.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/ascii-image.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/ascii-image.tsx"
        }
      ]
    },
    {
      "name": "ascii-life",
      "type": "registry:ui",
      "title": "AsciiLife",
      "description": "Soft Club AsciiLife component.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/ascii-life.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/ascii-life.tsx"
        }
      ]
    },
    {
      "name": "ascii-plasma",
      "type": "registry:ui",
      "title": "AsciiPlasma",
      "description": "Soft Club AsciiPlasma component.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/ascii-plasma.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/ascii-plasma.tsx"
        }
      ]
    },
    {
      "name": "ascii-snapshot",
      "type": "registry:ui",
      "title": "AsciiSnapshot",
      "description": "Framed share card: an animated ASCII portrait over a headline, copy, range toggle, and share actions.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/ascii-snapshot.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/ascii-snapshot.tsx"
        }
      ]
    },
    {
      "name": "ascii-stars",
      "type": "registry:ui",
      "title": "AsciiStars",
      "description": "Soft Club AsciiStars component.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/ascii-stars.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/ascii-stars.tsx"
        }
      ]
    },
    {
      "name": "ascii-tunnel",
      "type": "registry:ui",
      "title": "AsciiTunnel",
      "description": "Soft Club AsciiTunnel component.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/ascii-tunnel.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/ascii-tunnel.tsx"
        }
      ]
    },
    {
      "name": "aspect-ratio",
      "type": "registry:ui",
      "title": "AspectRatio",
      "description": "Locks content to a fixed width-to-height ratio.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/aspect-ratio.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/aspect-ratio.tsx"
        }
      ]
    },
    {
      "name": "aurora-field",
      "type": "registry:ui",
      "title": "AuroraField",
      "description": "Soft ambient field used inside grid and hero surfaces.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/aurora-field.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/aurora-field.tsx"
        }
      ]
    },
    {
      "name": "avatar",
      "type": "registry:ui",
      "title": "Avatar",
      "description": "Image avatar with monogram fallback, tones, and stacked groups.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/avatar.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/avatar.tsx"
        }
      ]
    },
    {
      "name": "badge",
      "type": "registry:ui",
      "title": "Badge",
      "description": "Icy transport glass and cyan scan lines.",
      "dependencies": [
        "class-variance-authority@^0.7.1"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/badge.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/badge.tsx"
        }
      ]
    },
    {
      "name": "before-after",
      "type": "registry:ui",
      "title": "BeforeAfter",
      "description": "Split surface for comparing copy, states, or design passes.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/before-after.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/before-after.tsx"
        }
      ]
    },
    {
      "name": "breadcrumb",
      "type": "registry:ui",
      "title": "Breadcrumb",
      "description": "Hierarchy trail with links, current page, and chevron separators.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/breadcrumb.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/breadcrumb.tsx"
        }
      ]
    },
    {
      "name": "button-group",
      "type": "registry:ui",
      "title": "ButtonGroup",
      "description": "Joins related buttons into one seamless segmented control.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/button-group.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/button-group.tsx"
        }
      ]
    },
    {
      "name": "button",
      "type": "registry:ui",
      "title": "Button",
      "description": "Primary command surface with secondary, outline, ghost, and danger variants.",
      "dependencies": [
        "@radix-ui/react-slot@^1.1.2",
        "class-variance-authority@^0.7.1"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/loader.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/button.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/button.tsx"
        }
      ]
    },
    {
      "name": "calendar",
      "type": "registry:ui",
      "title": "Calendar",
      "description": "Month-grid calendar with keyboard navigation and single-date selection.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/calendar.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/calendar.tsx"
        }
      ]
    },
    {
      "name": "card",
      "type": "registry:ui",
      "title": "Card",
      "description": "Base content container with header, body, and footer slots.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/card.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/card.tsx"
        }
      ]
    },
    {
      "name": "carousel",
      "type": "registry:ui",
      "title": "Carousel",
      "description": "Slide container with overlay arrows and dot navigation.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/carousel.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/carousel.tsx"
        }
      ]
    },
    {
      "name": "chat-bubble",
      "type": "registry:ui",
      "title": "ChatBubble",
      "description": "Message bubble with an agent name and a thinking pill that streams a reply.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/spinner.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/chat-bubble.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/chat-bubble.tsx"
        }
      ]
    },
    {
      "name": "chat-dock",
      "type": "registry:ui",
      "title": "ChatDock",
      "description": "Conversation surface with bubbles and prompt controls.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/chat-dock.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/chat-dock.tsx"
        }
      ]
    },
    {
      "name": "checkbox",
      "type": "registry:ui",
      "title": "Checkbox",
      "description": "Native checkbox with a single clickable label target.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/checkbox.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/checkbox.tsx"
        }
      ]
    },
    {
      "name": "chladni-plate",
      "type": "registry:ui",
      "title": "ChladniPlate",
      "description": "Sand settling on the nodal lines of a standing wave. The pointer retunes the chord.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/instrument.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/chladni-plate.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/chladni-plate.tsx"
        }
      ]
    },
    {
      "name": "clifford-smoke",
      "type": "registry:ui",
      "title": "CliffordSmoke",
      "description": "A Clifford attractor accumulated as smoke. Drag to bend the constants.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/instrument.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/clifford-smoke.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/clifford-smoke.tsx"
        }
      ]
    },
    {
      "name": "collapsible",
      "type": "registry:ui",
      "title": "Collapsible",
      "description": "Single disclosure that animates open height with a grid transition.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/collapsible.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/collapsible.tsx"
        }
      ]
    },
    {
      "name": "combobox",
      "type": "registry:ui",
      "title": "Combobox",
      "description": "Searchable single-select with arrow-key navigation, on the Popover surface.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/button.json",
        "https://cobanov.github.io/soft-club-ui/r/popover.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/combobox.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/combobox.tsx"
        }
      ]
    },
    {
      "name": "command",
      "type": "registry:ui",
      "title": "Command",
      "description": "Command palette with live substring filtering and grouped items.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/dialog.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/command.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/command.tsx"
        }
      ]
    },
    {
      "name": "community-badge",
      "type": "registry:ui",
      "title": "CommunityBadge",
      "description": "Social-proof tile with surface, outline, ghost, and solid variants across tones.",
      "dependencies": [
        "class-variance-authority@^0.7.1"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/community-badge.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/community-badge.tsx"
        }
      ]
    },
    {
      "name": "context-menu",
      "type": "registry:ui",
      "title": "ContextMenu",
      "description": "Right-click menu anchored to its trigger region.",
      "dependencies": [
        "@radix-ui/react-context-menu@^2.2.6",
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/context-menu.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/context-menu.tsx"
        }
      ]
    },
    {
      "name": "curl-field",
      "type": "registry:ui",
      "title": "CurlField",
      "description": "Divergence-free wind from a drifting stream function. Drag to file a storm report.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/instrument.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/curl-field.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/curl-field.tsx"
        }
      ]
    },
    {
      "name": "date-input",
      "type": "registry:ui",
      "title": "DateInput",
      "description": "Styled native date field with the browser's date picker.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/date-input.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/date-input.tsx"
        }
      ]
    },
    {
      "name": "date-picker",
      "type": "registry:ui",
      "title": "DatePicker",
      "description": "Button-triggered calendar in a popover that shows the chosen date.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/button.json",
        "https://cobanov.github.io/soft-club-ui/r/calendar.json",
        "https://cobanov.github.io/soft-club-ui/r/popover.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/date-picker.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/date-picker.tsx"
        }
      ]
    },
    {
      "name": "dialog",
      "type": "registry:ui",
      "title": "Dialog",
      "description": "Modal surface for confirmations and focused tasks.",
      "dependencies": [
        "@radix-ui/react-dialog@^1.1.6",
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/button.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/dialog.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/dialog.tsx"
        }
      ]
    },
    {
      "name": "dither-image",
      "type": "registry:ui",
      "title": "DitherImage",
      "description": "Prints an image as a scrolling diagonal line-screen, ordered-dithered over a saturated theme field.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/use-image-grid.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/dither-image.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/dither-image.tsx"
        }
      ]
    },
    {
      "name": "drawer",
      "type": "registry:ui",
      "title": "Drawer",
      "description": "Bottom-anchored drawer with a grab handle for mobile-style flows.",
      "dependencies": [
        "@radix-ui/react-dialog@^1.1.6"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/drawer.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/drawer.tsx"
        }
      ]
    },
    {
      "name": "dropdown-menu",
      "type": "registry:ui",
      "title": "DropdownMenu",
      "description": "Menu primitive for command lists and compact actions.",
      "dependencies": [
        "@radix-ui/react-dropdown-menu@^2.1.6"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/dropdown-menu.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/dropdown-menu.tsx"
        }
      ]
    },
    {
      "name": "duotone-card",
      "type": "registry:ui",
      "title": "DuotoneCard",
      "description": "Image-backed plan card: a duotone picture under a readable content scrim.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/duotone-image.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/duotone-card.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/duotone-card.tsx"
        }
      ]
    },
    {
      "name": "duotone-image",
      "type": "registry:ui",
      "title": "DuotoneImage",
      "description": "Recolors any image into a single-hue duotone via CSS blends.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/duotone-image.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/duotone-image.tsx"
        }
      ]
    },
    {
      "name": "epicycle-orrery",
      "type": "registry:ui",
      "title": "EpicycleOrrery",
      "description": "Deferent and epicycles tracing a heaven that never existed. The pointer retunes the court.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/instrument.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/epicycle-orrery.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/epicycle-orrery.tsx"
        }
      ]
    },
    {
      "name": "geodesic-choir",
      "type": "registry:ui",
      "title": "GeodesicChoir",
      "description": "Kuramoto voices on a triangulated sphere. Drag to spin; it sings in focus.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/instrument.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/geodesic-choir.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/geodesic-choir.tsx"
        }
      ]
    },
    {
      "name": "glass-card",
      "type": "registry:ui",
      "title": "GlassCard",
      "description": "Compact glass card with icon, title, body, and link slots.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/glass-card.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/glass-card.tsx"
        }
      ]
    },
    {
      "name": "glass-panel",
      "type": "registry:ui",
      "title": "GlassPanel",
      "description": "Composed glass container for dense display surfaces.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/glass-panel.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/glass-panel.tsx"
        }
      ]
    },
    {
      "name": "glitch-text",
      "type": "registry:ui",
      "title": "GlitchText",
      "description": "Phosphor glitch type with dual color channels jittering on a loop.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/glitch-text.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/glitch-text.tsx"
        }
      ]
    },
    {
      "name": "gradient-banner",
      "type": "registry:ui",
      "title": "GradientBanner",
      "description": "Animated film-graded gradient banner with eyebrow, title, copy, and action slots.",
      "dependencies": [
        "class-variance-authority@^0.7.1"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/gradient-banner.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/gradient-banner.tsx"
        }
      ]
    },
    {
      "name": "gradient-text",
      "type": "registry:ui",
      "title": "GradientText",
      "description": "Token-backed gradient text for rare emphasis moments.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/gradient-text.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/gradient-text.tsx"
        }
      ]
    },
    {
      "name": "halftone-image",
      "type": "registry:ui",
      "title": "HalftoneImage",
      "description": "Reduces an image or procedural subject to theme-tinted halftone dots sized by luminance.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/use-image-grid.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/halftone-image.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/halftone-image.tsx"
        }
      ]
    },
    {
      "name": "hover-card",
      "type": "registry:ui",
      "title": "HoverCard",
      "description": "Hover- and focus-revealed card for inline context, no positioning dependency.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/hover-card.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/hover-card.tsx"
        }
      ]
    },
    {
      "name": "input-otp",
      "type": "registry:ui",
      "title": "InputOTP",
      "description": "Segmented one-time-code field with auto-advance and paste support.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/input-otp.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/input-otp.tsx"
        }
      ]
    },
    {
      "name": "input",
      "type": "registry:ui",
      "title": "Input",
      "description": "Single-line text field with glass surface and visible focus state.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/input.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/input.tsx"
        }
      ]
    },
    {
      "name": "instrument",
      "type": "registry:ui",
      "title": "Instrument",
      "description": "Control-room card frame with Focus, Regen, and PNG export wired to the simulation inside.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/button.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/instrument.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/instrument.tsx"
        }
      ]
    },
    {
      "name": "kbd",
      "type": "registry:ui",
      "title": "Kbd",
      "description": "Keyboard key cap for shortcut hints and command surfaces.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/kbd.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/kbd.tsx"
        }
      ]
    },
    {
      "name": "label",
      "type": "registry:ui",
      "title": "Label",
      "description": "Form label with optional required marker, paired with any control.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/label.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/label.tsx"
        }
      ]
    },
    {
      "name": "loader",
      "type": "registry:ui",
      "title": "Loader",
      "description": "Frame-based terminal loaders ported from rattles. Switch presets anywhere a spinner lives.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/loader.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/loader.tsx"
        }
      ]
    },
    {
      "name": "logo-marquee",
      "type": "registry:ui",
      "title": "LogoMarquee",
      "description": "Scrolling logo proof strip with hover pause.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/logo-marquee.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/logo-marquee.tsx"
        }
      ]
    },
    {
      "name": "logo-row",
      "type": "registry:ui",
      "title": "LogoRow",
      "description": "Static, centered logo strip for backers, press, or alumni.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/logo-row.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/logo-row.tsx"
        }
      ]
    },
    {
      "name": "lsystem-garden",
      "type": "registry:ui",
      "title": "LsystemGarden",
      "description": "A stochastic L-system herbarium with growth replay. Click a specimen to reroll its sentence.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/instrument.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/lsystem-garden.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/lsystem-garden.tsx"
        }
      ]
    },
    {
      "name": "matrix-rain",
      "type": "registry:ui",
      "title": "MatrixRain",
      "description": "Falling glyph rain rendered on canvas, tinted to the active theme.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/matrix-rain.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/matrix-rain.tsx"
        }
      ]
    },
    {
      "name": "menubar",
      "type": "registry:ui",
      "title": "Menubar",
      "description": "Persistent application menu bar with keyboard navigation.",
      "dependencies": [
        "@radix-ui/react-menubar@^1.1.6",
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/menubar.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/menubar.tsx"
        }
      ]
    },
    {
      "name": "mock-console",
      "type": "registry:ui",
      "title": "MockConsole",
      "description": "Compact terminal panel for prompt and command demos.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/mock-console.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/mock-console.tsx"
        }
      ]
    },
    {
      "name": "mock-ide",
      "type": "registry:ui",
      "title": "MockIDE",
      "description": "Animated code mock with Soft Club syntax colors and editor chrome.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/mock-ide.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/mock-ide.tsx"
        }
      ]
    },
    {
      "name": "morphogen-field",
      "type": "registry:ui",
      "title": "MorphogenField",
      "description": "Gray-Scott reaction-diffusion with drifting constants. The pointer is a morphogen stylus.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/instrument.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/morphogen-field.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/morphogen-field.tsx"
        }
      ]
    },
    {
      "name": "mosaic-image",
      "type": "registry:ui",
      "title": "MosaicImage",
      "description": "Pixelates an image into posterized rounded tiles with grout the theme ground shows through.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/use-image-grid.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/mosaic-image.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/mosaic-image.tsx"
        }
      ]
    },
    {
      "name": "native-select",
      "type": "registry:ui",
      "title": "NativeSelect",
      "description": "Styled native select with token chrome and custom chevron.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/native-select.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/native-select.tsx"
        }
      ]
    },
    {
      "name": "navigation-menu",
      "type": "registry:ui",
      "title": "NavigationMenu",
      "description": "Top-level navigation with a sliding content viewport.",
      "dependencies": [
        "@radix-ui/react-navigation-menu@^1.2.5",
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/navigation-menu.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/navigation-menu.tsx"
        }
      ]
    },
    {
      "name": "node-grid",
      "type": "registry:ui",
      "title": "NodeGrid",
      "description": "Grid surface that plots an x,y list of nodes (percent coords) with optional labels and tones.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/node-grid.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/node-grid.tsx"
        }
      ]
    },
    {
      "name": "number-input",
      "type": "registry:ui",
      "title": "NumberInput",
      "description": "Numeric field with clamped increment and decrement controls.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/number-input.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/number-input.tsx"
        }
      ]
    },
    {
      "name": "orbit-loader",
      "type": "registry:ui",
      "title": "OrbitLoader",
      "description": "Live three-ring orbital loader with themed satellites.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/orbit-loader.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/orbit-loader.tsx"
        }
      ]
    },
    {
      "name": "pagination",
      "type": "registry:ui",
      "title": "Pagination",
      "description": "Page navigation with prev/next, active page, and ellipsis.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/pagination.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/pagination.tsx"
        }
      ]
    },
    {
      "name": "particle-field",
      "type": "registry:ui",
      "title": "ParticleField",
      "description": "Cursor-reactive constellation of particles linked by signal lines.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/particle-field.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/particle-field.tsx"
        }
      ]
    },
    {
      "name": "phyllotaxis-sequencer",
      "type": "registry:ui",
      "title": "PhyllotaxisSequencer",
      "description": "A Vogel spiral asked to write music. The radar arm is the playhead; click a seed to mute it.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/instrument.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/phyllotaxis-sequencer.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/phyllotaxis-sequencer.tsx"
        }
      ]
    },
    {
      "name": "physarum-trails",
      "type": "registry:ui",
      "title": "PhysarumTrails",
      "description": "Slime-mold agents excavating routes between attractant nodes. Hover to bait the swarm.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/instrument.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/physarum-trails.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/physarum-trails.tsx"
        }
      ]
    },
    {
      "name": "popover",
      "type": "registry:ui",
      "title": "Popover",
      "description": "Small floating info panel for local context.",
      "dependencies": [
        "@radix-ui/react-popover@^1.1.6"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/popover.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/popover.tsx"
        }
      ]
    },
    {
      "name": "pricing-card",
      "type": "registry:ui",
      "title": "PricingCard",
      "description": "Composable pricing surface with feature list and action.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/pricing-card.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/pricing-card.tsx"
        }
      ]
    },
    {
      "name": "progress",
      "type": "registry:ui",
      "title": "Progress",
      "description": "Determinate progress bar with green, blue, and warning tones.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/progress.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/progress.tsx"
        }
      ]
    },
    {
      "name": "prompt-box",
      "type": "registry:ui",
      "title": "PromptBox",
      "description": "Compact prompt input with attach, voice, and send controls.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/prompt-box.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/prompt-box.tsx"
        }
      ]
    },
    {
      "name": "prompt-hero",
      "type": "registry:ui",
      "title": "PromptHero",
      "description": "Larger prompt entry for pages where the prompt is the main action.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/button.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/prompt-hero.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/prompt-hero.tsx"
        }
      ]
    },
    {
      "name": "radar-sweep",
      "type": "registry:ui",
      "title": "RadarSweep",
      "description": "Rotating radar sweep over concentric rings with fading blips.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/radar-sweep.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/radar-sweep.tsx"
        }
      ]
    },
    {
      "name": "radio-group",
      "type": "registry:ui",
      "title": "RadioGroup",
      "description": "Accessible radio group with controlled value and labelled items.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/radio-group.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/radio-group.tsx"
        }
      ]
    },
    {
      "name": "rating",
      "type": "registry:ui",
      "title": "Rating",
      "description": "Interactive star rating with hover preview and keyboard support.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/rating.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/rating.tsx"
        }
      ]
    },
    {
      "name": "rotator",
      "type": "registry:ui",
      "title": "Rotator",
      "description": "Typewriter word rotation for compact interface copy.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/use-typewriter.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/rotator.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/rotator.tsx"
        }
      ]
    },
    {
      "name": "sandpile-basilica",
      "type": "registry:ui",
      "title": "SandpileBasilica",
      "description": "The Abelian sandpile: whoever holds four, gives four away. Click to pour a handful.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/instrument.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/sandpile-basilica.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/sandpile-basilica.tsx"
        }
      ]
    },
    {
      "name": "scroll-area",
      "type": "registry:ui",
      "title": "ScrollArea",
      "description": "Scoped scroll container with themed thin scrollbars.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/scroll-area.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/scroll-area.tsx"
        }
      ]
    },
    {
      "name": "separator",
      "type": "registry:ui",
      "title": "Separator",
      "description": "Thin divider for compact panels and form group breaks.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/separator.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/separator.tsx"
        }
      ]
    },
    {
      "name": "sheet",
      "type": "registry:ui",
      "title": "Sheet",
      "description": "Edge-anchored panel that slides in from any side of the viewport.",
      "dependencies": [
        "@radix-ui/react-dialog@^1.1.6",
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/button.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/sheet.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/sheet.tsx"
        }
      ]
    },
    {
      "name": "signal-marquee",
      "type": "registry:ui",
      "title": "SignalMarquee",
      "description": "Thin motion strip for looped signal text.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/signal-marquee.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/signal-marquee.tsx"
        }
      ]
    },
    {
      "name": "skeleton",
      "type": "registry:ui",
      "title": "Skeleton",
      "description": "Reduced-motion aware loading placeholder.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/skeleton.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/skeleton.tsx"
        }
      ]
    },
    {
      "name": "slider",
      "type": "registry:ui",
      "title": "Slider",
      "description": "Native range slider with token track and themed thumb tones.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/slider.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/slider.tsx"
        }
      ]
    },
    {
      "name": "soft-footer",
      "type": "registry:ui",
      "title": "SoftFooter",
      "description": "Rich footer with a brand block, link columns, a base row, and an animated gradient rule.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/soft-footer.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/soft-footer.tsx"
        }
      ]
    },
    {
      "name": "soft-header",
      "type": "registry:ui",
      "title": "SoftHeader",
      "description": "Frosted site header with subway-Helvetica brand, nav, actions, and a drifting gradient rule.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/soft-header.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/soft-header.tsx"
        }
      ]
    },
    {
      "name": "spinner",
      "type": "registry:ui",
      "title": "Spinner",
      "description": "Compact ring spinner for inline and button loading states.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/spinner.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/spinner.tsx"
        }
      ]
    },
    {
      "name": "stat-counter",
      "type": "registry:ui",
      "title": "StatCounter",
      "description": "Animated numeric counter for small status summaries.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/stat-counter.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/stat-counter.tsx"
        }
      ]
    },
    {
      "name": "status-dot",
      "type": "registry:ui",
      "title": "StatusDot",
      "description": "Tiny live-state dot with optional pulse behavior.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/status-dot.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/status-dot.tsx"
        }
      ]
    },
    {
      "name": "status-indicator",
      "type": "registry:ui",
      "title": "StatusIndicator",
      "description": "Inline status indicator for dense rows and system labels.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/status-indicator.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/status-indicator.tsx"
        }
      ]
    },
    {
      "name": "stepper",
      "type": "registry:ui",
      "title": "Stepper",
      "description": "Numbered progress indicator for multi-step flows.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/stepper.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/stepper.tsx"
        }
      ]
    },
    {
      "name": "sticky-banner",
      "type": "registry:ui",
      "title": "StickyBanner",
      "description": "Dense inline banner for update or release notices.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/sticky-banner.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/sticky-banner.tsx"
        }
      ]
    },
    {
      "name": "switch",
      "type": "registry:ui",
      "title": "Switch",
      "description": "Native switch control for binary settings.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/switch.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/switch.tsx"
        }
      ]
    },
    {
      "name": "table",
      "type": "registry:ui",
      "title": "Table",
      "description": "Composable data table with header, body, footer, and hover rows.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/table.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/table.tsx"
        }
      ]
    },
    {
      "name": "tabs",
      "type": "registry:ui",
      "title": "Tabs",
      "description": "Radix-backed tabs for switching compact views.",
      "dependencies": [
        "@radix-ui/react-tabs@^1.1.3"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/tabs.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/tabs.tsx"
        }
      ]
    },
    {
      "name": "textarea",
      "type": "registry:ui",
      "title": "Textarea",
      "description": "Multi-line note field for prompts, logs, and system copy.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/textarea.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/textarea.tsx"
        }
      ]
    },
    {
      "name": "timeline",
      "type": "registry:ui",
      "title": "Timeline",
      "description": "Vertical event log with status-aware nodes.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/timeline.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/timeline.tsx"
        }
      ]
    },
    {
      "name": "toast",
      "type": "registry:ui",
      "title": "Toast",
      "description": "Transient feedback for syncs, saves, and route changes.",
      "dependencies": [
        "@radix-ui/react-toast@^1.2.6",
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/button.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/toast.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/toast.tsx"
        }
      ]
    },
    {
      "name": "toggle-group",
      "type": "registry:ui",
      "title": "ToggleGroup",
      "description": "Single or multiple toggle set with shared selection state.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/toggle.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/toggle-group.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/toggle-group.tsx"
        }
      ]
    },
    {
      "name": "toggle",
      "type": "registry:ui",
      "title": "Toggle",
      "description": "Two-state pressable toggle with default and outline variants.",
      "dependencies": [
        "class-variance-authority@^0.7.1"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/toggle.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/toggle.tsx"
        }
      ]
    },
    {
      "name": "token-stream",
      "type": "registry:ui",
      "title": "TokenStream",
      "description": "Token-by-token reveal with custom tokenizer and loop timing.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/use-token-stream.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/token-stream.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/token-stream.tsx"
        }
      ]
    },
    {
      "name": "tool-call",
      "type": "registry:ui",
      "title": "ToolCall",
      "description": "Agent tool-call indicator: a loading pill naming the called tool and its state.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/spinner.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/tool-call.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/tool-call.tsx"
        }
      ]
    },
    {
      "name": "tooltip",
      "type": "registry:ui",
      "title": "Tooltip",
      "description": "Hover and focus hint for compact controls.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/tooltip.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/tooltip.tsx"
        }
      ]
    },
    {
      "name": "tree",
      "type": "registry:ui",
      "title": "Tree",
      "description": "Collapsible tree for nested data with click-to-select leaves.",
      "dependencies": [
        "lucide-react@^1.17.0"
      ],
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/tree.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/tree.tsx"
        }
      ]
    },
    {
      "name": "voronoi-territories",
      "type": "registry:ui",
      "title": "VoronoiTerritories",
      "description": "A Voronoi census with Lloyd relaxation and Kuramoto shading. Click a territory to rupture its file.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json",
        "https://cobanov.github.io/soft-club-ui/r/instrument.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/voronoi-territories.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/voronoi-territories.tsx"
        }
      ]
    },
    {
      "name": "waveform",
      "type": "registry:ui",
      "title": "Waveform",
      "description": "Always-moving audio-style bar field with gradient bars.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json",
        "https://cobanov.github.io/soft-club-ui/r/theme-color.json",
        "https://cobanov.github.io/soft-club-ui/r/use-canvas-animation.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/waveform.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/waveform.tsx"
        }
      ]
    },
    {
      "name": "word-roll",
      "type": "registry:ui",
      "title": "WordRoll",
      "description": "Small rolling word mark for labels and headers.",
      "registryDependencies": [
        "https://cobanov.github.io/soft-club-ui/r/base.json"
      ],
      "files": [
        {
          "path": "registry/soft-club/components/word-roll.tsx",
          "type": "registry:ui",
          "target": "components/soft-club/word-roll.tsx"
        }
      ]
    }
  ]
}
