Signup funnelFree

Where do signups drop off?

npx shadcn@latest add https://beautifulcharts.dev/r/signup-funnel.json

Engine: ·

Code

"use client";

import { SignupFunnelBlock } from "@/components/beautiful-charts/blocks/instrument/signup-funnel";

// The stats and copy recompute from your rows. Leave data out to see the sample.
export function Dashboard() {
  return <SignupFunnelBlock />;
}

Props

  • data

    SankeyData

    Your rows. Missing values are null and stay gaps; with no rows every stat shows a dash. Leave it out to see the sample.

  • stats

    ChartStat[] | false

    Replace the computed stats with your own, or hide them with false.

  • footer

    ReactNode | false

    Replace the footer line, or hide it with false.

Every funnel chart prop works too, so you can restyle it without touching the source.

Accessibility, keyboard and motion

Pointer
Hover a step to show its count and its rate from the step before; click pins it.
Keyboard
Tab lands once on the plot. Left and Right move between points (the first press goes to the latest), Up and Down change series, Home and End jump to the ends, Enter or Space pins, Escape clears.
Screen readers
Every move is announced as a sentence, not coordinates. "Show data table" opens the numbers as a real table, and missing values stay empty, never zero.
Motion
Steps grow outward in order, then the rates fade in. With reduced motion everything appears settled at once, and nothing depends on the motion to be read.