{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "project-list",
  "title": "Project List",
  "description": "Hairline project list with tags and optional view-all link.",
  "dependencies": [
    "lucide-react",
    "next"
  ],
  "files": [
    {
      "path": "registry/default/blocks/project-list.tsx",
      "content": "import Link from \"next/link\"\nimport { ArrowUpRight } from \"lucide-react\"\n\n/** Edit titles, descriptions, and links after install. */\nconst CONTENT = {\n  stamp: \"Projects\",\n  viewAllHref: \"/projects\",\n  viewAllLabel: \"view all →\",\n}\n\nconst PROJECTS = [\n  {\n    title: \"Personal site kit\",\n    description: \"Narrow chrome, command menu, and indie home sections.\",\n    href: \"https://www.atroui.com\",\n    tags: [\"Next.js\", \"Registry\"],\n  },\n  {\n    title: \"Studio tools\",\n    description: \"OG images, scope chat, and host-bound demos.\",\n    href: \"https://www.atroui.com/docs\",\n    tags: [\"Tools\", \"Docs\"],\n  },\n  {\n    title: \"Open source UI\",\n    description: \"Dark-first React components you own in your repo.\",\n    href: \"https://github.com/atroui/atroui\",\n    tags: [\"OSS\", \"React\"],\n  },\n]\n\nexport function ProjectList({\n  stamp = CONTENT.stamp,\n  viewAllHref = CONTENT.viewAllHref,\n  viewAllLabel = CONTENT.viewAllLabel,\n  projects = PROJECTS,\n  limit = 4,\n  className,\n}: {\n  stamp?: string\n  viewAllHref?: string\n  viewAllLabel?: string\n  projects?: Array<{\n    title: string\n    description: string\n    href: string\n    tags?: string[]\n  }>\n  limit?: number\n  className?: string\n} = {}) {\n  const shown = projects.slice(0, limit)\n  if (shown.length === 0) return null\n\n  return (\n    <section\n      id=\"projects\"\n      className={className ?? \"mx-auto max-w-[640px] scroll-mt-20\"}\n    >\n      <div className=\"mb-3 flex items-baseline justify-between\">\n        <h2 className=\"font-mono text-[10.5px] tracking-[0.12em] text-muted-foreground uppercase\">\n          {stamp}\n        </h2>\n        {projects.length > limit ? (\n          <Link\n            href={viewAllHref}\n            className=\"font-mono text-[11px] text-muted-foreground hover:text-foreground\"\n          >\n            {viewAllLabel}\n          </Link>\n        ) : null}\n      </div>\n      <ul className=\"divide-y divide-border-subtle border-y border-border-subtle\">\n        {shown.map((p) => {\n          const external = /^https?:\\/\\//.test(p.href)\n          const body = (\n            <>\n              <div className=\"min-w-0 flex-1\">\n                <div className=\"flex items-center gap-1 text-[14.5px] font-medium text-foreground\">\n                  <span>{p.title}</span>\n                  <ArrowUpRight\n                    className=\"h-[12px] w-[12px] shrink-0 text-muted-foreground/50 transition-transform duration-200 ease-[cubic-bezier(0.22,1,0.36,1)] group-hover:-translate-y-[2px] group-hover:translate-x-[2px] group-hover:text-muted-foreground\"\n                    aria-hidden\n                  />\n                </div>\n                <p className=\"mt-0.5 text-[13px] leading-[1.5] text-muted-foreground\">\n                  {p.description}\n                </p>\n              </div>\n              {p.tags && p.tags.length > 0 ? (\n                <div className=\"mt-[3px] hidden shrink-0 pt-[1px] text-right font-mono text-[10.5px] text-muted-foreground/70 sm:block\">\n                  {p.tags.join(\" · \")}\n                </div>\n              ) : null}\n            </>\n          )\n          const classNameRow =\n            \"group -mx-0 flex items-start justify-between gap-4 rounded py-[11px] pr-1 transition-[padding,background-color] duration-200 ease-[cubic-bezier(0.22,1,0.36,1)] hover:bg-muted/50 hover:pl-2\"\n\n          return (\n            <li key={p.href}>\n              {external ? (\n                <a\n                  href={p.href}\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                  className={classNameRow}\n                >\n                  {body}\n                </a>\n              ) : (\n                <Link href={p.href} className={classNameRow}>\n                  {body}\n                </Link>\n              )}\n            </li>\n          )\n        })}\n      </ul>\n    </section>\n  )\n}\n",
      "type": "registry:component",
      "target": "components/blocks/project-list.tsx"
    }
  ],
  "type": "registry:block"
}