{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "signature-footer",
  "title": "Signature Footer",
  "description": "A composed site footer that ends with an oversized, low-contrast wordmark.",
  "registryDependencies": [
    "utils",
    "https://ui.tinkererslabs.com/r/footer-columns.json",
    "https://ui.tinkererslabs.com/r/footer-row.json",
    "https://ui.tinkererslabs.com/r/footer-wordmark.json"
  ],
  "files": [
    {
      "path": "registry/default/signature-footer/signature-footer.tsx",
      "content": "import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n  FOOTER_LABEL,\n  FooterColumns,\n  type FooterColumn,\n  type FooterLink,\n  type FooterLinkRenderer,\n} from \"@/registry/default/footer-columns/footer-columns\"\nimport { FooterRow } from \"@/registry/default/footer-row/footer-row\"\nimport { FooterWordmark } from \"@/registry/default/footer-wordmark/footer-wordmark\"\n\nexport type { FooterColumn, FooterLink, FooterLinkRenderer }\n\nexport interface SignatureFooterProps extends Omit<\n  React.HTMLAttributes<HTMLElement>,\n  \"children\"\n> {\n  eyebrow?: React.ReactNode\n  /** A line to lead with, or a logo. Omit for a footer that is only links. */\n  heading?: React.ReactNode\n  description?: React.ReactNode\n  /** A row of icon links, under the description. */\n  social?: React.ReactNode\n  action?: React.ReactNode\n  /** Labelled link columns. Takes precedence over navigation. */\n  columns?: readonly FooterColumn[]\n  /** Columns at the widest size. Defaults to three. */\n  columnCount?: number\n  /** Your own markup, when the columns do not fit what you need. */\n  navigation?: React.ReactNode\n  /** A wrapping row of links set apart from the columns, with its own label. */\n  related?: FooterColumn\n  brand?: React.ReactNode\n  meta?: React.ReactNode\n  /** Sits in the middle of the closing row, for terms and the like. */\n  legal?: React.ReactNode\n  /** Closes the row on the right, for a status or a region. */\n  status?: React.ReactNode\n  /** Renders every link. Reach for it to use your framework's link. */\n  renderLink?: FooterLinkRenderer\n  wordmark: string\n}\n\n/*\n * A block, and only a block: the columns, the row, and the wordmark are their\n * own components and this arranges them. Reach for those directly when your\n * footer is a different shape, rather than waiting for a slot to appear here.\n *\n * Shades are mixed from the footer's own text colour rather than a theme\n * token, so it works on a light ground as readily as a dark one.\n */\nexport const SignatureFooter = React.forwardRef<\n  HTMLElement,\n  SignatureFooterProps\n>(function SignatureFooter(\n  {\n    eyebrow,\n    heading,\n    description,\n    social,\n    action,\n    columns,\n    columnCount,\n    navigation,\n    related,\n    brand,\n    meta,\n    legal,\n    status,\n    renderLink,\n    wordmark,\n    className,\n    ...props\n  },\n  forwardedRef\n) {\n  const hasClosingRow = brand || meta || legal || status\n\n  return (\n    <footer\n      {...props}\n      data-slot=\"signature-footer\"\n      ref={forwardedRef}\n      className={cn(\"bg-foreground text-background overflow-hidden\", className)}\n    >\n      <div\n        data-slot=\"signature-footer-inner\"\n        className=\"mx-auto max-w-[90rem] px-4 pt-12 md:px-8 md:pt-16 lg:px-12 lg:pt-20\"\n      >\n        <div className=\"grid gap-12 lg:grid-cols-[minmax(0,1fr)_minmax(0,2fr)] lg:gap-20\">\n          <div>\n            {eyebrow && (\n              <p\n                data-slot=\"signature-footer-eyebrow\"\n                className={cn(\n                  FOOTER_LABEL,\n                  \"text-[color-mix(in_oklab,currentColor_55%,transparent)]\"\n                )}\n              >\n                {eyebrow}\n              </p>\n            )}\n            {heading && (\n              <h2\n                data-slot=\"signature-footer-heading\"\n                className=\"mt-4 max-w-3xl text-[clamp(1.75rem,3.5vw,3rem)] leading-[1.02] font-semibold tracking-[-0.04em] text-balance\"\n              >\n                {heading}\n              </h2>\n            )}\n            {description && (\n              <p\n                data-slot=\"signature-footer-description\"\n                className=\"mt-5 max-w-[36ch] text-sm leading-relaxed text-pretty text-[color-mix(in_oklab,currentColor_65%,transparent)]\"\n              >\n                {description}\n              </p>\n            )}\n            {social && (\n              <div\n                data-slot=\"signature-footer-social\"\n                className=\"mt-6 flex flex-wrap items-center gap-2\"\n              >\n                {social}\n              </div>\n            )}\n            {action && (\n              <div data-slot=\"signature-footer-action\" className=\"mt-6\">\n                {action}\n              </div>\n            )}\n          </div>\n\n          {columns && columns.length > 0 ? (\n            <FooterColumns\n              columnCount={columnCount}\n              columns={columns}\n              renderLink={renderLink}\n            />\n          ) : navigation ? (\n            <div data-slot=\"signature-footer-navigation\" className=\"self-end\">\n              {navigation}\n            </div>\n          ) : null}\n        </div>\n\n        {related && (\n          <FooterRow\n            className=\"mt-14\"\n            data-slot=\"signature-footer-related\"\n            label={related.label}\n            links={related.links}\n            renderLink={renderLink}\n          />\n        )}\n\n        {hasClosingRow && (\n          <div\n            data-slot=\"signature-footer-meta\"\n            className=\"mt-12 flex flex-col gap-5 border-t border-[color-mix(in_oklab,currentColor_15%,transparent)] py-5 text-xs sm:flex-row sm:items-center sm:justify-between\"\n          >\n            {brand}\n            {meta}\n            {legal}\n            {status}\n          </div>\n        )}\n\n        <FooterWordmark className=\"pt-6\" data-slot=\"signature-footer-wordmark\">\n          {wordmark}\n        </FooterWordmark>\n      </div>\n    </footer>\n  )\n})\n",
      "type": "registry:block"
    }
  ],
  "categories": [
    "layout",
    "footer",
    "branding"
  ],
  "type": "registry:block"
}