Docs·Dia Footer

Dia Footer

A composable footer with a scroll-rising blurred spectrum, responsive navigation, and configurable color themes.

Installation

$pnpm dlx shadcn@latest add @spiderui/dia-footer

The install command also adds clsx and tailwind-merge. No animation library required.

Usage

Scroll-driven footer inspired by Dia Browser. Uses local scroll progress and one inline SVG. Themes: dia-browser, ocean, amber, emerald, violet, rose.

API Reference

PropTypeDefault
childrenFooter content rendered above the spectrum.
ReactNode—
themePreset color theme for text and SVG gradient stops.
DiaFooterTheme"dia-browser"
colorsOverride theme with custom text color and 8 gradient stops.
{ text?: string; gradient?: string[] }—
copyrightTextFooter copy. Defaults to current year and Spider UI.
string—
scrollContainerOptional scroll root for embedded previews. Omit for window scroll.
RefObject<HTMLElement | null>—
surfaceColorFooter surface behind content and spectrum.
string"#090909"
gradientHeightSpectrum height and scroll reveal distance.
string"60vh"
minRevealResting spectrum visibility before final scroll range.
number0.045
bars / blur / peak / valleyControls spectrum geometry and softness.
number—

Click on the icon in the top right of the example preview to view the source code for specific variants.

Keep in mind

This component is inspired by various open-source projects and patterns. Please verify licenses and implementation details before using in production.

Have any questions?
Contact on@ctrlcat0x
Scroll down to reveal
import { DiaFooter } from "@/components/ui/dia-footer"
const columns = [
  { title: "Product", links: ["Overview", "Features", "Pricing"] },
  { title: "Resources", links: ["Docs", "Guides", "Support"] },
  { title: "Company", links: ["About", "Careers", "Contact"] },
  { title: "Legal", links: ["Privacy", "Terms", "Security"] },
]

export default function Page() {
  return (
    <DiaFooter theme="dia-browser" gradientHeight="40vh">
      <div className="mx-auto max-w-6xl px-6 pt-12">
        <div className="grid gap-12 pb-12 lg:grid-cols-6">
          <div className="lg:col-span-2">
            <h2 className="font-mono text-white">Lumen Studio</h2>
            <p className="mt-4 text-zinc-400">Design tooling for teams.</p>
          </div>
          <nav className="grid grid-cols-2 gap-8 sm:grid-cols-4 lg:col-span-4">
            {columns.map((column) => (
              <div key={column.title}>
                <h3 className="text-white">{column.title}</h3>
                {column.links.map((link) => <a key={link} href="#">{link}</a>)}
              </div>
            ))}
          </nav>
        </div>
      </div>
    </DiaFooter>
  )
}