{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "resources-category-grid",
  "title": "Resources — Category Grid",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-react/blocks/resources-category-grid/ResourcesCategoryGrid.tsx",
      "content": "'use client'\n\nimport { ArrowUpRight, BookOpen, FileText, GraduationCap, Wrench } from 'lucide-react'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent } from '@/components/ui/card'\nimport { Separator } from '@/components/ui/separator'\n\nconst categories = [\n  {\n    icon: BookOpen,\n    label: 'Guides',\n    blurb: 'Step-by-step for the work you do once.',\n    entries: [\n      { title: 'A reconciliation checklist for your first close', kind: 'Guide', read: '6 min' },\n      { title: 'Connecting Snowflake with a read-only role', kind: 'Guide', read: '4 min' },\n      { title: 'Mapping SCIM groups to row-level scope', kind: 'Guide', read: '8 min' },\n    ],\n  },\n  {\n    icon: FileText,\n    label: 'Engineering',\n    blurb: 'How it is built and why it is built that way.',\n    entries: [\n      { title: 'Why we version definitions, not dashboards', kind: 'Essay', read: '9 min' },\n      { title: 'Query planning against three warehouses', kind: 'Deep dive', read: '14 min' },\n      { title: 'What our audit log actually records', kind: 'Reference', read: '5 min' },\n    ],\n  },\n  {\n    icon: GraduationCap,\n    label: 'Benchmarks',\n    blurb: 'Numbers from real rollouts, not projections.',\n    entries: [\n      { title: 'Close speed across 240 finance teams', kind: 'Benchmark', read: '11 min' },\n      { title: 'Where self-serve analytics actually fails', kind: 'Research', read: '7 min' },\n      { title: 'Warehouse cost before and after budgets', kind: 'Benchmark', read: '9 min' },\n    ],\n  },\n  {\n    icon: Wrench,\n    label: 'Operations',\n    blurb: 'Running it after the rollout finishes.',\n    entries: [\n      { title: 'Handling a restatement mid-quarter', kind: 'Runbook', read: '6 min' },\n      { title: 'Alert routing that people do not mute', kind: 'Runbook', read: '5 min' },\n      { title: 'Quarterly access review in 20 minutes', kind: 'Runbook', read: '4 min' },\n    ],\n  },\n]\n\nexport function ResourcesCategoryGrid() {\n  return (\n    <section data-slot=\"resources-category-grid\" className=\"bg-background\">\n      <div className=\"mx-auto max-w-6xl px-6 py-20 lg:py-28\">\n        <div className=\"flex flex-wrap items-end justify-between gap-6\">\n          <div className=\"max-w-2xl\">\n            <Badge variant=\"secondary\">Library</Badge>\n            <h2 className=\"mt-4 text-3xl font-semibold tracking-tight sm:text-4xl\">Everything we have written down</h2>\n          </div>\n          <Button variant=\"outline\">Browse the archive</Button>\n        </div>\n\n        <div className=\"mt-10 grid gap-4 sm:grid-cols-2\">\n          {categories.map((category) => (\n            <Card key={category.label}>\n              <CardContent className=\"p-6\">\n                <div className=\"flex items-center gap-3\">\n                  <span\n                    className=\"border-border text-muted-foreground flex size-9 shrink-0 items-center justify-center rounded-lg border\"\n                    aria-hidden=\"true\"\n                  >\n                    <category.icon className=\"size-4\" />\n                  </span>\n                  <div className=\"min-w-0\">\n                    <p className=\"text-sm font-semibold\">{category.label}</p>\n                    <p className=\"text-muted-foreground truncate text-xs\">{category.blurb}</p>\n                  </div>\n                </div>\n\n                <Separator className=\"my-4\" />\n\n                <ul className=\"space-y-1\">\n                  {category.entries.map((entry) => (\n                    <li key={entry.title}>\n                      <a\n                        href=\"#\"\n                        className=\"hover:bg-muted focus-visible:ring-ring group flex items-start gap-3 rounded-md p-2 transition-colors focus-visible:ring-2 focus-visible:outline-none\"\n                      >\n                        <span className=\"min-w-0 flex-1\">\n                          <span className=\"block text-sm leading-snug\">{entry.title}</span>\n                          <span className=\"text-muted-foreground mt-0.5 block font-mono text-xs\">\n                            {entry.kind} · {entry.read}\n                          </span>\n                        </span>\n                        <ArrowUpRight\n                          className=\"text-muted-foreground mt-0.5 size-3.5 shrink-0 transition-transform group-hover:translate-x-0.5 group-hover:-translate-y-0.5\"\n                          aria-hidden=\"true\"\n                        />\n                      </a>\n                    </li>\n                  ))}\n                </ul>\n              </CardContent>\n            </Card>\n          ))}\n        </div>\n      </div>\n    </section>\n  )\n}\n",
      "type": "registry:block",
      "target": "~/components/blocks/ResourcesCategoryGrid.tsx"
    }
  ],
  "dependencies": [
    "lucide-react"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/react/badge.json",
    "https://uipkge.dev/r/react/button.json",
    "https://uipkge.dev/r/react/card.json",
    "https://uipkge.dev/r/react/separator.json"
  ],
  "description": "Resource library grouped into categories, each card listing its three most recent entries with kind and read time, over a link to the full archive.",
  "categories": [
    "marketing"
  ]
}