Glin UI
Block / Organismbeta

CTA Band

Closing call to action: centered, split with email capture, or boxed with a token glow.

Edit on GitHub

Ready?

Ship a page you are proud of

Start with the blocks, change the tokens.

Installation

Install from
pnpm dlx @glinui/cli@latest add cta-band

Prefer the package?

Usage

The glow uses the `--glow-a` and `--glow-b` tokens (no rainbow). Pass `background` to place a gradient mesh or aurora behind the content.

Variants

Centered, split with email capture, plain shell.

Centered

Heading, text and two actions.

Split with a form

Copy on one side, email capture on the other.

Plain shell with glow

<CtaBand layout="split" title="Join" emailCapture={{ onSubmit }} />

States

Glow can be forced on any layout with `glow`.

Centered

Heading, text and two actions.

Split with a form

Copy on one side, email capture on the other.

Plain shell with glow

<CtaBand glow title="Glow" />

In a layout

Closing section before the footer.

Trusted by builders

Placeholder quote: the setup took an afternoon and the team stopped asking where the buttons came from.

APAlex PlaceholderEngineer, Acme

Placeholder quote: accessible by default, which saved us a long audit.

SESam ExampleDesigner, Nimbus

Placeholder quote: the tokens made dark mode a one line change.

JSJo SampleFounder, Orbit

FAQ

Start today

<CtaBand title="Start today" />

Accessibility

  • Section labelled by its heading.
  • Email input has a screen reader label and autocomplete.
  • Glow and background are aria-hidden and hidden in forced colors.

Reduced Motion

The band is static, there is no animation.

API Reference

PropTypeRequiredDefaultDescription
layoutCtaBandLayoutNocenteredLayout of the band.
variantBlockVariantNoambient (glinr)Shell look. `plain` under the minimal style, `glass` is opt-in and needs a backdrop.
title / description / eyebrowReactNode--Copy. The title labels the section.
primary / secondaryCtaAction--Link buttons: label plus anchor attributes (href, rel, target).
emailCaptureCtaEmailCaptureNo-Built-in email form with onSubmit(email).
glowbooleanNotrue for boxed-gradientToken glow layer.
background / footnoteReactNode--Decorative slot and fine print.
backgroundReact.ReactNodeNo-Decorative background slot such as a gradient mesh. Rendered aria-hidden behind the content.
descriptionReact.ReactNodeNo-Auto-generated from TypeScript source.
eyebrowReact.ReactNodeNo-Auto-generated from TypeScript source.
footnoteReact.ReactNodeNo-Free slot under the actions, for a custom form or fine print.
primaryCtaActionNo-Auto-generated from TypeScript source.
secondaryCtaActionNo-Auto-generated from TypeScript source.
titleReact.ReactNodeYes-Auto-generated from TypeScript source.

Source

Import directly from the package or browse the source on GitHub. Click any file to view it.

Import

import { CTABand } from "@glinui/ui"

Dependencies

@glinui/ui

Generated API Snapshot

Beta

Auto-extracted from TypeScript source in packages/ui/src/components/cta-band.tsx. This section is in beta and may lag behind hand-curated docs. Regenerate with pnpm --filter @glinui/docs api:generate.

Generated: 2026-10-08T01:41:21.546Z · Full index: /docs/api-metadata

Primary Props Type

CtaBandProps

CtaBandProps

PropTypeRequiredDefaultDescription
backgroundReact.ReactNodeNo-Decorative background slot such as a gradient mesh. Rendered aria-hidden behind the content.
descriptionReact.ReactNodeNo--
emailCaptureCtaEmailCaptureNo-Built-in email capture form (the split layout shows it in place of the actions).
eyebrowReact.ReactNodeNo--
footnoteReact.ReactNodeNo-Free slot under the actions, for a custom form or fine print.
glowbooleanNo-Soft token glow behind the content. On by default for `boxed-gradient`.
layoutCtaBandLayoutNo"centered"-
primaryCtaActionNo--
secondaryCtaActionNo--
titleReact.ReactNodeYes--
variantBlockVariantNo-Shell look. Omit to follow the ambient style.