{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "asanshay-components",
  "homepage": "https://ds.asanshay.com",
  "items": [
    {
      "name": "command-prompt",
      "type": "registry:component",
      "title": "Command Prompt",
      "description": "A keyboard-first command prompt with history and autocomplete.",
      "dependencies": [],
      "files": [
        {
          "path": "registry/new-york/blocks/command-prompt/command-prompt.tsx",
          "type": "registry:component",
          "target": "components/ui/command-prompt.tsx"
        }
      ]
    },
    {
      "name": "pointer",
      "type": "registry:component",
      "title": "Pointer",
      "description": "A controllable on-screen pointer that moves to coordinates and shows thoughts.",
      "dependencies": ["lucide-react"],
      "files": [
        {
          "path": "registry/new-york/blocks/pointer/pointer.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "chat",
      "type": "registry:component",
      "title": "Chat",
      "description": "A complete chat component that composes chat-message and chat-input and wires to /api/chat.",
      "dependencies": [
        "ai",
        "@ai-sdk/react",
        "@ai-sdk/openai",
        "@radix-ui/react-select",
        "class-variance-authority",
        "lucide-react"
      ],
      "registryDependencies": ["accordion"],
      "files": [
        {
          "path": "registry/new-york/routes/chat/route.ts",
          "type": "registry:component",
          "target": "app/api/chat/route.ts"
        },
        {
          "path": "registry/new-york/blocks/chat/chat.tsx",
          "type": "registry:component",
          "target": "components/chat/chat.tsx"
        },
        {
          "path": "registry/new-york/blocks/chat-message/chat-message.tsx",
          "type": "registry:component",
          "target": "components/chat/chat-message.tsx"
        },
        {
          "path": "registry/new-york/blocks/chat-input/chat-input.tsx",
          "type": "registry:component",
          "target": "components/chat/chat-input.tsx"
        },
        {
          "path": "registry/new-york/blocks/chat-tool/chat-tool.tsx",
          "type": "registry:component",
          "target": "components/chat/chat-tool.tsx"
        },
        {
          "path": "registry/new-york/blocks/chat-reasoning/chat-reasoning.tsx",
          "type": "registry:component",
          "target": "components/chat/chat-reasoning.tsx"
        },
        {
          "path": "registry/new-york/blocks/markdown/markdown.tsx",
          "type": "registry:component",
          "target": "components/ui/markdown.tsx"
        },
        {
          "path": "registry/new-york/blocks/code-block/code-block.tsx",
          "type": "registry:component",
          "target": "components/ui/code-block.tsx"
        },
        {
          "path": "registry/new-york/blocks/button/button.tsx",
          "type": "registry:component",
          "target": "components/ui/button.tsx"
        },
        {
          "path": "registry/new-york/blocks/select/select.tsx",
          "type": "registry:component",
          "target": "components/ui/select.tsx"
        },
        {
          "path": "registry/new-york/blocks/textarea/textarea.tsx",
          "type": "registry:component",
          "target": "components/ui/textarea.tsx"
        }
      ]
    },
    {
      "name": "window",
      "type": "registry:component",
      "title": "Window",
      "description": "A draggable, resizable window inside a container.",
      "dependencies": [],
      "files": [
        {
          "path": "registry/new-york/blocks/window/window.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "jsx-preview",
      "type": "registry:component",
      "title": "JSX Preview",
      "description": "A preview of a JSX component rendered from a string. Useful for LLM-generated UIs.",
      "dependencies": ["react-jsx-parser", "lucide-react"],
      "files": [
        {
          "path": "registry/new-york/blocks/jsx-preview/jsx-preview.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "select",
      "type": "registry:component",
      "title": "Select",
      "description": "A lightly skinned select component.",
      "dependencies": ["@radix-ui/react-select", "lucide-react"],
      "files": [
        {
          "path": "registry/new-york/blocks/select/select.tsx",
          "type": "registry:component",
          "target": "components/ui/select.tsx"
        }
      ]
    },
    {
      "name": "input",
      "type": "registry:component",
      "title": "Input",
      "description": "A simple input component with a tactile feel.",
      "dependencies": [],
      "files": [
        {
          "path": "registry/new-york/blocks/input/input.tsx",
          "type": "registry:component",
          "target": "components/ui/input.tsx"
        }
      ]
    },
    {
      "name": "textarea",
      "type": "registry:component",
      "title": "Textarea",
      "description": "An input that can increase in height to accommodate more text.",
      "dependencies": [],
      "files": [
        {
          "path": "registry/new-york/blocks/textarea/textarea.tsx",
          "type": "registry:component",
          "target": "components/ui/textarea.tsx"
        }
      ]
    },
    {
      "name": "chat-input",
      "type": "registry:component",
      "title": "Chat Input",
      "description": "A chat input component for a nice chatbot experience. Ready for useChat().",
      "dependencies": [
        "@radix-ui/react-slot",
        "@radix-ui/react-select",
        "class-variance-authority",
        "lucide-react",
        "ai"
      ],
      "files": [
        {
          "path": "registry/new-york/blocks/chat-input/chat-input.tsx",
          "type": "registry:component"
        },
        {
          "path": "registry/new-york/blocks/button/button.tsx",
          "type": "registry:component",
          "target": "components/ui/button.tsx"
        },
        {
          "path": "registry/new-york/blocks/select/select.tsx",
          "type": "registry:component",
          "target": "components/ui/select.tsx"
        },
        {
          "path": "registry/new-york/blocks/textarea/textarea.tsx",
          "type": "registry:component",
          "target": "components/ui/textarea.tsx"
        }
      ]
    },
    {
      "name": "chat-message",
      "type": "registry:component",
      "title": "Chat Message",
      "description": "A chat message component compatible with the Vercel AI SDK including markdown support, copying, etc.",
      "dependencies": [
        "@radix-ui/react-slot",
        "class-variance-authority",
        "lucide-react",
        "react-markdown",
        "remark-gfm",
        "react-syntax-highlighter",
        "ai"
      ],
      "registryDependencies": ["accordion"],
      "files": [
        {
          "path": "registry/new-york/blocks/chat-message/chat-message.tsx",
          "type": "registry:component"
        },
        {
          "path": "registry/new-york/blocks/button/button.tsx",
          "type": "registry:component",
          "target": "components/ui/button.tsx"
        },
        {
          "path": "registry/new-york/blocks/chat-reasoning/chat-reasoning.tsx",
          "type": "registry:component",
          "target": "components/chat/chat-reasoning.tsx"
        },
        {
          "path": "registry/new-york/blocks/markdown/markdown.tsx",
          "type": "registry:component",
          "target": "components/ui/markdown.tsx"
        },
        {
          "path": "registry/new-york/blocks/code-block/code-block.tsx",
          "type": "registry:component",
          "target": "components/ui/code-block.tsx"
        }
      ]
    },
    {
      "name": "chat-tool",
      "type": "registry:component",
      "title": "Chat Tool",
      "description": "A chat tool component that displays tool calls and their results.",
      "dependencies": ["ai", "@radix-ui/react-accordion", "lucide-react"],
      "registryDependencies": ["accordion"],
      "files": [
        {
          "path": "registry/new-york/blocks/chat-tool/chat-tool.tsx",
          "type": "registry:component",
          "target": "components/chat/chat-tool.tsx"
        }
      ]
    },
    {
      "name": "chat-reasoning",
      "type": "registry:component",
      "title": "Chat Reasoning",
      "description": "A chat reasoning component for a nice chatbot experience. Ready for useChat().",
      "dependencies": ["ai"],
      "registryDependencies": ["accordion"],
      "files": [
        {
          "path": "registry/new-york/blocks/chat-reasoning/chat-reasoning.tsx",
          "type": "registry:component",
          "target": "components/chat/chat-reasoning.tsx"
        }
      ]
    },
    {
      "name": "badge",
      "type": "registry:component",
      "title": "Badge",
      "description": "A clean set of badge components with an edible look.",
      "dependencies": ["@radix-ui/react-slot", "class-variance-authority"],
      "files": [
        {
          "path": "registry/new-york/blocks/badge/badge.tsx",
          "type": "registry:component",
          "target": "components/ui/badge.tsx"
        }
      ]
    },
    {
      "name": "button",
      "type": "registry:component",
      "title": "Button",
      "description": "A button component that *feels* good to use.",
      "dependencies": ["@radix-ui/react-slot", "class-variance-authority"],
      "files": [
        {
          "path": "registry/new-york/blocks/button/button.tsx",
          "type": "registry:component",
          "target": "components/ui/button.tsx"
        }
      ]
    },
    {
      "name": "long-press-button",
      "type": "registry:component",
      "title": "Long Press Button",
      "description": "A long-press action button with animated hold progress.",
      "dependencies": [],
      "files": [
        {
          "path": "registry/new-york/blocks/long-press-button/long-press-button.tsx",
          "type": "registry:component",
          "target": "components/ui/long-press-button.tsx"
        }
      ]
    },
    {
      "name": "reveal",
      "type": "registry:component",
      "title": "Reveal",
      "description": "A simple wrapper that reveals content when it scrolls into view.",
      "dependencies": ["motion"],
      "files": [
        {
          "path": "registry/new-york/blocks/reveal/reveal.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "card",
      "type": "registry:component",
      "title": "Card",
      "description": "A variety of clean cards, from minimal to flashy.",
      "dependencies": ["class-variance-authority"],
      "files": [
        {
          "path": "registry/new-york/blocks/card/card.tsx",
          "type": "registry:component",
          "target": "components/ui/card.tsx"
        }
      ]
    },
    {
      "name": "description-list",
      "type": "registry:component",
      "title": "Description List",
      "description": "Quickly display a json object in an aesthetically pleasing way.",
      "dependencies": [],
      "files": [
        {
          "path": "registry/new-york/blocks/description-list/description-list.tsx",
          "type": "registry:component",
          "target": "components/ui/description-list.tsx"
        }
      ]
    },
    {
      "name": "page-header",
      "type": "registry:component",
      "title": "Page Header",
      "description": "A clean page header so your pages look consistent.",
      "dependencies": [],
      "files": [
        {
          "path": "registry/new-york/blocks/page-header/page-header.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "motion-blur-text",
      "type": "registry:component",
      "title": "Motion Blur Text",
      "description": "A cool motion blur text effect.",
      "dependencies": [],
      "files": [
        {
          "path": "registry/new-york/blocks/motion-blur-text/motion-blur-text.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "code-block",
      "type": "registry:component",
      "title": "Code Block",
      "description": "A code block with syntax highlighting and quick copying.",
      "dependencies": [
        "@radix-ui/react-slot",
        "class-variance-authority",
        "lucide-react",
        "react-syntax-highlighter"
      ],
      "files": [
        {
          "path": "registry/new-york/blocks/code-block/code-block.tsx",
          "type": "registry:component",
          "target": "components/ui/code-block.tsx"
        },
        {
          "path": "registry/new-york/blocks/button/button.tsx",
          "type": "registry:component",
          "target": "components/ui/button.tsx"
        }
      ]
    },
    {
      "name": "markdown",
      "type": "registry:component",
      "title": "Markdown",
      "description": "A markdown component with a clean look and no-frills parsing.",
      "dependencies": [
        "@radix-ui/react-slot",
        "class-variance-authority",
        "lucide-react",
        "react-syntax-highlighter",
        "react-markdown",
        "remark-gfm"
      ],
      "files": [
        {
          "path": "registry/new-york/blocks/markdown/markdown.tsx",
          "type": "registry:component",
          "target": "components/ui/markdown.tsx"
        },
        {
          "path": "registry/new-york/blocks/button/button.tsx",
          "type": "registry:component",
          "target": "components/ui/button.tsx"
        },
        {
          "path": "registry/new-york/blocks/code-block/code-block.tsx",
          "type": "registry:component",
          "target": "components/ui/code-block.tsx"
        }
      ]
    },
    {
      "name": "invisible-input",
      "type": "registry:component",
      "title": "Invisible Input",
      "description": "An unstyled input that looks like text; fully styleable.",
      "dependencies": [],
      "files": [
        {
          "path": "registry/new-york/blocks/invisible-input/invisible-input.tsx",
          "type": "registry:component",
          "target": "components/ui/invisible-input.tsx"
        }
      ]
    },
    {
      "name": "loader",
      "type": "registry:component",
      "title": "Loader",
      "description": "Custom WebGL shader loaders with 3 shapes (sphere, swirl, ripple) × 3 styles (plain, blur, dither).",
      "dependencies": [],
      "files": [
        {
          "path": "registry/new-york/blocks/loader/loader.tsx",
          "type": "registry:component",
          "target": "components/ui/loader.tsx"
        },
        {
          "path": "registry/new-york/blocks/loader/shader-mount.tsx",
          "type": "registry:component",
          "target": "components/ui/shader-mount.tsx"
        },
        {
          "path": "registry/new-york/blocks/loader/shaders/index.ts",
          "type": "registry:component",
          "target": "components/ui/shaders/index.ts"
        },
        {
          "path": "registry/new-york/blocks/loader/shaders/vertex.ts",
          "type": "registry:component",
          "target": "components/ui/shaders/vertex.ts"
        },
        {
          "path": "registry/new-york/blocks/loader/shaders/utils.ts",
          "type": "registry:component",
          "target": "components/ui/shaders/utils.ts"
        },
        {
          "path": "registry/new-york/blocks/loader/shaders/plain.ts",
          "type": "registry:component",
          "target": "components/ui/shaders/plain.ts"
        },
        {
          "path": "registry/new-york/blocks/loader/shaders/blur.ts",
          "type": "registry:component",
          "target": "components/ui/shaders/blur.ts"
        },
        {
          "path": "registry/new-york/blocks/loader/shaders/dither.ts",
          "type": "registry:component",
          "target": "components/ui/shaders/dither.ts"
        }
      ]
    },
    {
      "name": "morphing-text",
      "type": "registry:component",
      "title": "Morphing Text",
      "description": "Text that smoothly animates character changes when the value updates.",
      "dependencies": ["motion"],
      "files": [
        {
          "path": "registry/new-york/blocks/morphing-text/morphing-text.tsx",
          "type": "registry:component",
          "target": "components/ui/morphing-text.tsx"
        }
      ]
    },
    {
      "name": "ascii-wave",
      "type": "registry:component",
      "title": "ASCII Wave",
      "description": "A flowing ASCII animation with wave-based coloring. Inspired by exa.ai.",
      "dependencies": [],
      "files": [
        {
          "path": "registry/new-york/blocks/ascii-wave/ascii-wave.tsx",
          "type": "registry:component",
          "target": "components/ui/ascii-wave.tsx"
        }
      ]
    },
    {
      "name": "color-picker",
      "type": "registry:component",
      "title": "Color Picker",
      "description": "A color picker with OKLCH, HSL, RGB, and HEX support, plus Tailwind CSS presets.",
      "dependencies": [],
      "registryDependencies": ["input"],
      "files": [
        {
          "path": "registry/new-york/blocks/color-picker/color-picker.tsx",
          "type": "registry:component",
          "target": "components/ui/color-picker.tsx"
        },
        {
          "path": "registry/new-york/blocks/input/input.tsx",
          "type": "registry:component",
          "target": "components/ui/input.tsx"
        }
      ]
    }
  ]
}
