{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "trovecn",
  "homepage": "https://trovecn.dev",
  "items": [
    {
      "name": "font-weight",
      "type": "registry:lib",
      "title": "Font weight",
      "description": "Geist variable-font weight tokens for animated font-weight transitions.",
      "files": [
        {
          "path": "src/lib/font-weight.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "springs",
      "type": "registry:lib",
      "title": "Springs",
      "description": "Three-tier spring/tween motion tokens — fast, moderate, slow.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "src/lib/springs.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "utils",
      "type": "registry:lib",
      "title": "Utils",
      "description": "cn() class merger, extended with the custom text-* font-size scale from globals.css so tailwind-merge doesn't drop it.",
      "dependencies": [
        "clsx",
        "tailwind-merge"
      ],
      "files": [
        {
          "path": "src/lib/utils.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "use-merge-split",
      "type": "registry:hook",
      "title": "useMergeSplit",
      "description": "Groups a checked-item list's contiguous rows into runs and reports one spring-animated background block per run, so adjacent selections read as one continuous shape that merges and splits instead of separate highlighted rows.",
      "files": [
        {
          "path": "src/hooks/use-merge-split.ts",
          "type": "registry:hook"
        }
      ]
    },
    {
      "name": "use-proximity-hover",
      "type": "registry:hook",
      "title": "useProximityHover",
      "description": "Tracks cursor distance across a list of items to preview the nearest one before it's clicked.",
      "files": [
        {
          "path": "src/hooks/use-proximity-hover.ts",
          "type": "registry:hook"
        }
      ]
    },
    {
      "name": "accordion",
      "type": "registry:ui",
      "title": "Accordion",
      "description": "Collapsible accordion with spring-animated height and chevron, and proximity hover across every row.",
      "dependencies": [
        "motion",
        "@base-ui/react",
        "lucide-react"
      ],
      "registryDependencies": [
        "utils",
        "springs",
        "font-weight",
        "use-proximity-hover"
      ],
      "files": [
        {
          "path": "src/components/ui/accordion.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "agent-activity",
      "type": "registry:ui",
      "title": "Agent Activity",
      "description": "A collapsible agent-run timeline with streaming steps, sources, details, and inline visual artifacts.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "utils",
        "springs"
      ],
      "files": [
        {
          "path": "src/components/trovecn/ai-workbench/agent-activity.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "approval-request",
      "type": "registry:ui",
      "title": "Approval Request",
      "description": "A stable, explicit pause for a human decision inside an agent run — never a spinner standing in for consent.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "utils",
        "button",
        "springs"
      ],
      "files": [
        {
          "path": "src/components/trovecn/ai-workbench/approval-request.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "button",
      "type": "registry:ui",
      "title": "Button",
      "description": "Base UI button with variant and size styling via class-variance-authority.",
      "dependencies": [
        "@base-ui/react",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "src/components/ui/button.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "checkbox",
      "type": "registry:ui",
      "title": "Checkbox",
      "description": "Base UI checkbox with a hand-drawn checkmark that draws on and off.",
      "dependencies": [
        "@base-ui/react",
        "motion"
      ],
      "registryDependencies": [
        "utils",
        "springs"
      ],
      "files": [
        {
          "path": "src/components/ui/checkbox.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "checkbox-group",
      "type": "registry:ui",
      "title": "Checkbox Group",
      "description": "A multi-select list of Base UI checkboxes with proximity hover across every row and a merge/split background that reads contiguous checked rows as one continuous block.",
      "dependencies": [
        "@base-ui/react",
        "motion"
      ],
      "registryDependencies": [
        "utils",
        "springs",
        "use-proximity-hover",
        "use-merge-split"
      ],
      "files": [
        {
          "path": "src/components/ui/checkbox.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "combobox",
      "type": "registry:ui",
      "title": "Combobox",
      "description": "Base UI combobox — a text input filtered against a list as you type.",
      "dependencies": [
        "@base-ui/react",
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "utils",
        "springs",
        "use-proximity-hover"
      ],
      "files": [
        {
          "path": "src/components/ui/combobox.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "comparison-slider",
      "type": "registry:ui",
      "title": "Comparison Slider",
      "description": "Draggable clip-path divider that reveals one live layer over another.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [
        {
          "path": "src/components/trovecn/motion-demos/comparison-slider.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "context-menu",
      "type": "registry:ui",
      "title": "Context Menu",
      "description": "Right-click menu — Base UI's Menu popup anchored at the pointer.",
      "dependencies": [
        "@base-ui/react",
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "utils",
        "springs",
        "use-proximity-hover"
      ],
      "files": [
        {
          "path": "src/components/ui/context-menu.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "conversation",
      "type": "registry:ui",
      "title": "Conversation",
      "description": "A quiet conversation surface with authored hierarchy and contextual message actions.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "utils",
        "button",
        "springs"
      ],
      "files": [
        {
          "path": "src/components/trovecn/ai-workbench/conversation.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "dialog",
      "type": "registry:ui",
      "title": "Dialog",
      "description": "Centered modal with a spring-scaled popup and fading backdrop.",
      "dependencies": [
        "motion",
        "@base-ui/react",
        "lucide-react"
      ],
      "registryDependencies": [
        "utils",
        "springs",
        "button"
      ],
      "files": [
        {
          "path": "src/components/ui/dialog.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "drawer",
      "type": "registry:ui",
      "title": "Drawer",
      "description": "Edge-anchored panel with real drag-to-dismiss on top and bottom.",
      "dependencies": [
        "@base-ui/react",
        "motion"
      ],
      "registryDependencies": [
        "utils",
        "springs"
      ],
      "files": [
        {
          "path": "src/components/ui/drawer.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "menu",
      "type": "registry:ui",
      "title": "Menu",
      "description": "Base UI menu with submenus, checkbox/radio items, and a spring-driven popup.",
      "dependencies": [
        "@base-ui/react",
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "utils",
        "springs",
        "use-proximity-hover"
      ],
      "files": [
        {
          "path": "src/components/ui/menu.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "navigation-menu",
      "type": "registry:ui",
      "title": "Navigation Menu",
      "description": "Mega-menu nav with a shared viewport that resizes between preview panels.",
      "dependencies": [
        "@base-ui/react",
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "utils",
        "use-proximity-hover"
      ],
      "files": [
        {
          "path": "src/components/ui/navigation-menu.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "popover",
      "type": "registry:ui",
      "title": "Popover",
      "description": "Anchored floating panel that enters from its trigger with a small placement-aware offset.",
      "dependencies": [
        "motion",
        "@base-ui/react"
      ],
      "registryDependencies": [
        "utils",
        "springs"
      ],
      "files": [
        {
          "path": "src/components/ui/popover.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "prompt-composer",
      "type": "registry:ui",
      "title": "Prompt Composer",
      "description": "A focused multiline prompt surface with attachment and model menus plus an explicit send/stop lifecycle.",
      "dependencies": [
        "lucide-react",
        "@base-ui/react",
        "class-variance-authority",
        "motion"
      ],
      "registryDependencies": [
        "utils",
        "button",
        "menu",
        "springs"
      ],
      "files": [
        {
          "path": "src/components/trovecn/ai-workbench/prompt-composer.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "slider",
      "type": "registry:ui",
      "title": "Slider",
      "description": "Base UI slider with a spring-driven thumb — direct 1:1 tracking while dragging, a spring settle on release or track-press, and a thumb-anchored value label that fades away cleanly. Supports single-value and two-thumb range use out of the box.",
      "dependencies": [
        "@base-ui/react",
        "motion"
      ],
      "registryDependencies": [
        "utils",
        "springs"
      ],
      "files": [
        {
          "path": "src/components/ui/slider.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "switch",
      "type": "registry:ui",
      "title": "Switch",
      "description": "Base UI switch with a squishy, draggable, spring-driven thumb.",
      "dependencies": [
        "@base-ui/react",
        "motion"
      ],
      "registryDependencies": [
        "utils",
        "springs"
      ],
      "files": [
        {
          "path": "src/components/ui/switch.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "tabs",
      "type": "registry:ui",
      "title": "Tabs",
      "description": "Tab list with a spring-driven sliding indicator, proximity hover, and a directional panel handoff.",
      "dependencies": [
        "motion",
        "@base-ui/react"
      ],
      "registryDependencies": [
        "utils",
        "springs",
        "font-weight",
        "use-proximity-hover"
      ],
      "files": [
        {
          "path": "src/components/ui/tabs.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "tool-run",
      "type": "registry:ui",
      "title": "Tool Run",
      "description": "A single tool call's lifecycle — queued, running, paused on approval, and resolved — with arguments and results one click away.",
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "utils",
        "button",
        "approval-request",
        "springs"
      ],
      "files": [
        {
          "path": "src/components/trovecn/ai-workbench/tool-run.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "tooltip",
      "type": "registry:ui",
      "title": "Tooltip",
      "description": "Fast, fading label with minimal collision-aware travel from its trigger.",
      "dependencies": [
        "motion",
        "@base-ui/react"
      ],
      "registryDependencies": [
        "utils",
        "springs",
        "font-weight"
      ],
      "files": [
        {
          "path": "src/components/ui/tooltip.tsx",
          "type": "registry:ui"
        }
      ]
    }
  ]
}
