{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "page-header",
  "title": "Page Header",
  "description": "Module page header: heading-font title, optional description, right-aligned action slot, bottom separator.",
  "dependencies": [
    "cn"
  ],
  "files": [
    {
      "path": "registry/sav/components/page-header.tsx",
      "content": "// @sav-registry: page-header\nimport type { ReactNode } from \"react\"\nimport { cn } from \"cn\"\n\n// Shared page header for every module's main page. Gives every page an\n// identical title/description/action layout: the Figtree heading font,\n// consistent spacing and a bottom separator, with an optional right-aligned\n// action slot for the page's buttons.\nexport function PageHeader({\n  title,\n  description,\n  actions,\n  className,\n}: {\n  title: ReactNode\n  /** String (wrapped in a muted paragraph) or any node rendered as-is. */\n  description?: ReactNode\n  /** Right-aligned action slot — the page's buttons live here. */\n  actions?: ReactNode\n  className?: string\n}) {\n  return (\n    <div\n      className={cn(\n        \"flex flex-col gap-3 border-b border-border pb-4 sm:flex-row sm:items-start sm:justify-between sm:gap-4\",\n        className\n      )}\n    >\n      <div className=\"flex min-w-0 flex-col gap-1.5\">\n        <h1 className=\"font-heading text-2xl font-semibold tracking-tight text-foreground\">\n          {title}\n        </h1>\n        {description == null ? null : typeof description === \"string\" ? (\n          <p className=\"text-sm text-muted-foreground\">{description}</p>\n        ) : (\n          description\n        )}\n      </div>\n      {actions == null ? null : (\n        <div className=\"flex flex-wrap items-center gap-2 sm:shrink-0\">\n          {actions}\n        </div>\n      )}\n    </div>\n  )\n}\n",
      "type": "registry:component",
      "target": "@components/page-header.tsx"
    }
  ],
  "categories": [
    "patterns"
  ],
  "type": "registry:component"
}