{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "testimonials",
  "description": "Customer testimonials grid",
  "files": [
    {
      "path": "blocks/testimonials/page.tsx",
      "content": "\"use client\"\n\nimport { Testimonials } from \"@/components/testimonials\"\n\nexport default function TestimonialsPage() {\n  return (\n    <div className=\"bg-background flex min-h-screen w-full items-center justify-center\">\n      <div className=\"mx-auto w-full max-w-7xl p-6\">\n        <div className=\"space-y-8\">\n          <div className=\"space-y-4 text-center\">\n            <h1 className=\"text-4xl font-bold tracking-tight sm:text-5xl lg:text-6xl\">\n              What our customers are saying\n            </h1>\n            <p className=\"text-muted-foreground mx-auto max-w-2xl text-base sm:text-lg\">\n              Hear from developers and teams who are building the future with\n              our tools.\n            </p>\n          </div>\n\n          <Testimonials />\n        </div>\n      </div>\n    </div>\n  )\n}\n",
      "type": "registry:page",
      "target": "app/testimonials/page.tsx"
    },
    {
      "path": "blocks/testimonials/components/testimonials.tsx",
      "content": "\"use client\"\n\ntype Testimonial = {\n  id: string\n  quote: string\n  name: string\n  title: string\n  avatar: string\n  alt?: string\n  link?: string\n}\n\nconst testimonials: Testimonial[] = [\n  {\n    id: \"1\",\n    quote:\n      \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.\",\n    name: \"Diana Hu\",\n    title: \"General Partner, Y Combinator\",\n    avatar:\n      \"https://cdn.sanity.io/images/2hv88549/production/fcdcbb0e010754abe55eaa640457c425b295d166-84x84.png?auto=format\",\n    link: \"https://example.com\",\n  },\n  {\n    id: \"2\",\n    quote:\n      \"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem.\",\n    name: \"shadcn\",\n    title: \"Creator of shadcn/ui\",\n    avatar:\n      \"https://cdn.sanity.io/images/2hv88549/production/5b975491b9ace97040eca409dfa9819cbb80ab76-84x84.png?auto=format\",\n    link: \"https://example.com\",\n  },\n  {\n    id: \"3\",\n    quote:\n      \"Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit. Sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt neque porro quisquam est.\",\n    name: \"Andrej Karpathy\",\n    title: \"CEO, Eureka Labs\",\n    avatar:\n      \"https://cdn.sanity.io/images/2hv88549/production/4427316a06b0a5764ddf36b018ed04a7ead481f2-84x84.png?auto=format\",\n    link: \"https://example.com\",\n  },\n  {\n    id: \"4\",\n    quote:\n      \"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi. Sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum consectetur adipiscing elit.\",\n    name: \"Patrick Collison\",\n    title: \"Co‑Founder & CEO, Stripe\",\n    avatar:\n      \"https://cdn.sanity.io/images/2hv88549/production/a8dcd16f0d888eed3f8e33299c2451eb2ae4a493-93x93.png?auto=format\",\n    link: \"https://example.com\",\n  },\n  {\n    id: \"5\",\n    quote:\n      \"Lorem ipsum.\\n\\nDolor sit amet.\\nConsectetur adipiscing.\\n\\nElit sed do.\",\n    name: \"ThePrimeagen\",\n    title: \"@ThePrimeagen\",\n    avatar:\n      \"https://cdn.sanity.io/images/2hv88549/production/6e35a34559ef40d60cd05033ffcf062ac9f7caeb-84x84.png?auto=format\",\n    link: \"https://example.com\",\n  },\n  {\n    id: \"6\",\n    quote:\n      \"Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus ut aut reiciendis voluptatibus maiores alias consequatur.\",\n    name: \"Greg Brockman\",\n    title: \"President, OpenAI\",\n    avatar:\n      \"https://cdn.sanity.io/images/2hv88549/production/924c80c6c0c69a8fc6f3f9f4fd8a1a5e75bf74c7-400x400.jpg?auto=format\",\n    link: \"https://example.com\",\n  },\n]\n\nexport function Testimonials() {\n  return (\n    <div className=\"grid grid-cols-1 items-stretch gap-4 md:grid-cols-2 lg:grid-cols-3\">\n      {testimonials.map((t) => {\n        const content = (\n          <figure className=\"flex h-full w-full flex-col\">\n            <blockquote className=\"grow\">\n              <p className=\"text-foreground/90 text-base leading-relaxed whitespace-pre-wrap\">\n                {t.quote}\n              </p>\n            </blockquote>\n            <div className=\"mt-4 flex items-center gap-3\">\n              <div className=\"ring-border relative size-8 shrink-0 overflow-hidden rounded-sm ring-1 md:size-10\">\n                <img\n                  src={t.avatar || \"/placeholder.svg\"}\n                  alt={t.alt ?? t.name}\n                  className=\"h-full w-full object-cover\"\n                />\n              </div>\n              <figcaption className=\"text-sm\">\n                <div className=\"text-foreground font-medium\">{t.name}</div>\n                <div className=\"text-muted-foreground\">{t.title}</div>\n              </figcaption>\n            </div>\n          </figure>\n        )\n\n        if (t.link) {\n          return (\n            <a\n              key={t.id}\n              href={t.link}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              className=\"card border-border bg-card col-span-1 flex overflow-hidden rounded-sm border p-5 transition-opacity hover:opacity-70\"\n            >\n              {content}\n            </a>\n          )\n        }\n\n        return (\n          <div\n            key={t.id}\n            className=\"card border-border bg-card col-span-1 flex overflow-hidden rounded-sm border p-5\"\n          >\n            {content}\n          </div>\n        )\n      })}\n    </div>\n  )\n}\n",
      "type": "registry:component",
      "target": "components/testimonials.tsx"
    }
  ],
  "meta": {
    "iframeHeight": "800px",
    "container": "w-full bg-background min-h-svh flex items-center justify-center",
    "mobile": "component"
  },
  "categories": [
    "landing-page"
  ],
  "type": "registry:block"
}