Skip to main content
Clever Ops

SVG Mask Chapters

Chapters revealed through drawn SVG mask shapes for React, a circle, keyhole arch, and diagonal band draw and fill as scroll scrubs a pinned stage. Tailwind tokens, reversible, reduced-motion safe.

Preview & code

Loading SVG Mask Chapters preview

Installation

pnpm dlx shadcn@latest add @cleverui/svg-mask-chapters

Requires the @cleverui registry in your components.json, a one-off, two-line setup.

Usage

tsx
import { SvgMaskChapters } from '@/components/blocks/svg-mask-chapters'
Exampletsx
import { SvgMaskChapters } from '@/components/blocks/svg-mask-chapters'

export default function SvgMaskChaptersDemo() {
  return (
    <div>
      <SvgMaskChapters
        slate="Atlas 03 · Drawn masks"
        chapters={[
          {
            kicker: 'Chapter one · Aperture',
            title: 'Open on a perfect circle.',
            shape: 'circle',
            body: 'The first plate is already drawn when the page loads, a primary hairline traces the silhouette and the ink fills it. Scroll owns every millimetre of the reveal.',
          },
          {
            kicker: 'Chapter two · Threshold',
            title: 'Pass under the keyhole arch.',
            shape: 'arch',
            body: 'Each silhouette is plotted in the same 100-unit space, so the plates re-theme and rescale without redrawing a single path.',
          },
          {
            kicker: 'Chapter three · Traverse',
            title: 'Exit on the diagonal band.',
            shape: 'band',
            body: 'Scrub back up and the plates retract in reverse order, every handoff is a pure function of scroll position, never a one-way animation.',
          },
        ]}
      />
      {/* scroll runway so the final chapter can settle in context */}
      <div aria-hidden="true" className="h-[60vh]" />
    </div>
  )
}

API reference

SvgMaskChapters accepts the following props.

PropTypeDefaultDescription
slatestringmono slate line above the stage, e.g. "Atlas 03 · Drawn masks"
chapters*SvgMaskChapter[]2–5 chapters; scroll draws each mask, fills it, and hands over
chapterVhnumber90scroll length per chapter in vh (default 90)

…plus everything from React.HTMLAttributes<HTMLElement>: className, event handlers, aria attributes and the rest pass straight through.

Referenced types

Typestsx
export interface SvgMaskChapter {
  kicker?: string
  title: string
  body: string
  /** mask silhouette the chapter plate shows through (defaults cycle circle → arch → band) */
  shape?: SvgMaskShape
  /** big glyph set inside the masked plate (defaults to the chapter number) */
  glyph?: string
}

export type SvgMaskShape = 'circle' | 'arch' | 'band'

Frequently asked questions

How do I install the SVG Mask Chapters component?

Register the @cleverui registry in your components.json ("@cleverui": "https://cleverops.com.au/r/{name}.json"), then run `npx shadcn@latest add @cleverui/svg-mask-chapters`. The shadcn CLI copies the source into your project, you own the code from that point. You can also copy the source directly from this page.

What dependencies does SVG Mask Chapters require?

SVG Mask Chapters has no npm dependencies beyond React and Tailwind CSS itself, so there is nothing extra to install or keep updated.

Can I theme SVG Mask Chapters to match my brand?

Yes. The component is styled entirely with Tailwind utilities over standard design tokens (primary, background, muted, border), so it inherits your existing shadcn/ui theme automatically. Change your CSS variables and the component follows, no source edits needed for palette, radius, or fonts.

Want this built for you?

CleverUI is built by the Clever Ops web team. If you'd rather ship a hand-coded, fast, custom website than assemble one, we build them for Australian businesses every week.

Explore web development services