{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "heading",
  "title": "Heading",
  "description": "A page or section heading with an optional description and action slot.",
  "dependencies": [
    "cn@^0.4.0"
  ],
  "files": [
    {
      "path": "registry/familis/blocks/heading/heading.tsx",
      "content": "import { cn } from \"cn\"\nimport type { ComponentProps, ReactNode } from \"react\"\n\nexport type HeadingProps = Omit<ComponentProps<\"header\">, \"title\" | \"children\"> & {\n  title: string\n  description?: string\n  variant?: \"default\" | \"small\"\n  children?: ReactNode\n}\n\n/** Default titles a page (h1); small titles a section (h2). Parent layout owns spacing. */\nexport function Heading({\n  title,\n  description,\n  variant = \"default\",\n  children,\n  className,\n  ...props\n}: HeadingProps) {\n  const Title = variant === \"default\" ? \"h1\" : \"h2\"\n  return (\n    <header\n      {...props}\n      className={cn(\"flex flex-wrap items-start justify-between gap-4\", className)}\n    >\n      <div className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n        <Title\n          className={cn(\n            \"truncate\",\n            variant === \"small\" ? \"text-base font-medium\" : \"text-xl font-semibold tracking-tight\",\n          )}\n        >\n          {title}\n        </Title>\n        {description ? <p className=\"text-sm text-muted-foreground\">{description}</p> : null}\n      </div>\n      {children ? <div className=\"flex shrink-0 items-center gap-2\">{children}</div> : null}\n    </header>\n  )\n}\n",
      "type": "registry:component"
    }
  ],
  "meta": {
    "base": "base",
    "storybookId": "ui-blocks-heading--default"
  },
  "type": "registry:block"
}