Skip to content
Back to skills

Funnel Chart

ASecurity

Funnel visualization for conversion/pipeline data. Segments taper from wide to narrow based on value. Supports default and layered variants with configurable interpolation, gradients, axis labels, and tooltips.

  • 4 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 27, 2026
data-aireact

Works with

  • cli

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add reaviz/skills --skill funnel-chart --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Funnel Chart?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Funnel Chart
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/reaviz-funnel-chart/badge)](https://www.skillsdirectory.com/skills/reaviz-funnel-chart)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# FunnelChart

Funnel visualization for conversion/pipeline data. Segments taper from wide to narrow based on value. Supports default and layered variants with configurable interpolation, gradients, axis labels, and tooltips.

## Import

```tsx
import {
  FunnelChart,
  FunnelSeries,
  FunnelArc,
  FunnelAxis,
  FunnelAxisLabel,
  FunnelAxisLine
} from 'reaviz';
```

## FunnelChart Props

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `data` | `ChartShallowDataShape[]` | `[]` | Chart data |
| `width` | `number` | auto | Width in pixels |
| `height` | `number` | auto | Height in pixels |
| `margins` | `Margins` | `0` | Chart margins |
| `series` | `ReactElement<FunnelSeriesProps>` | `<FunnelSeries />` | Series component |
| `className` | `string` | — | SVG CSS class |
| `containerClassName` | `string` | — | Container div CSS class |

## FunnelSeries Props

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `arc` | `ReactElement<FunnelArcProps>` | `<FunnelArc />` | Arc/segment element |
| `axis` | `ReactElement<FunnelAxisProps>` | `<FunnelAxis />` | Axis component |
| `onSegmentClick` | `(event: ClickEvent) => void` | — | Segment click handler |

## FunnelArc Props

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `variant` | `'default' \| 'layered'` | `'default'` | Funnel style |
| `interpolation` | `'linear' \| 'smooth' \| 'step'` | `'smooth'` | Curve interpolation |
| `colorScheme` | `ColorSchemeType` | `schemes.cybertron[0]` | Color scheme (single color by default) |
| `opacity` | `number` | `1` | Arc opacity |
| `gradient` | `ReactElement<GradientProps> \| null` | horizontal gradient | Gradient fill (`null` to disable) |
| `glow` | `Glow` | — | Glow effect |
| `tooltip` | `ReactElement<TooltipAreaProps>` | `null` | Tooltip component |

## FunnelAxis Props

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `line` | `ReactElement<FunnelAxisLineProps> \| null` | `<FunnelAxisLine />` | Axis separator lines |
| `label` | `ReactElement<FunnelAxisLabelProps> \| null` | `<FunnelAxisLabel />` | Axis labels |

## FunnelAxisLabel Props

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `position` | `'top' \| 'middle' \| 'bottom'` | `'middle'` | Label placement |
| `showValue` | `boolean` | `true` | Show data value alongside label |
| `labelVisibility` | `'auto' \| 'always'` | `'auto'` | Auto-hide when space is tight |
| `fill` | `string` | `'#fff'` | Text color |
| `fontSize` | `number` | `13` | Font size |
| `fontFamily` | `string` | `'sans-serif'` | Font family |
| `padding` | `number` | `10` | Label padding |
| `className` | `string` | — | CSS class |

## FunnelAxisLine Props

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `strokeColor` | `string` | `'#333'` | Line color |
| `strokeWidth` | `number` | `2` | Line thickness |

## Basic Usage

```tsx
const data = [
  { key: 'Visited Site', data: 1000 },
  { key: 'Added to Cart', data: 900 },
  { key: 'Initiated Checkout', data: 600 },
  { key: 'Purchased', data: 400 },
];

<FunnelChart
  height={300}
  width={500}
  data={data}
/>
```

## Layered Variant

```tsx
<FunnelChart
  height={400}
  width={800}
  data={data}
  series={
    <FunnelSeries
      arc={
        <FunnelArc
          variant="layered"
          colorScheme={['#013027', '#047662', '#06B899']}
          gradient={null}
        />
      }
    />
  }
/>
```

## With Tooltips and Click

```tsx
import { TooltipArea } from 'reaviz';

<FunnelChart
  data={data}
  series={
    <FunnelSeries
      arc={<FunnelArc tooltip={<TooltipArea />} />}
      onSegmentClick={(e) => console.log(e.value)}
    />
  }
/>
```

## Step Interpolation

```tsx
<FunnelChart
  data={data}
  series={
    <FunnelSeries
      arc={<FunnelArc interpolation="step" />}
    />
  }
/>
```

## Label Positioning

```tsx
// Labels at bottom
<FunnelChart
  data={data}
  series={
    <FunnelSeries
      axis={<FunnelAxis label={<FunnelAxisLabel position="bottom" />} />}
    />
  }
/>

// Hide values, show only labels
<FunnelChart
  data={data}
  series={
    <FunnelSeries
      axis={<FunnelAxis label={<FunnelAxisLabel showValue={false} />} />}
    />
  }
/>

// No axis at all
<FunnelChart
  data={data}
  series={
    <FunnelSeries
      axis={<FunnelAxis label={null} line={null} />}
    />
  }
/>
```

## No Gradient

```tsx
<FunnelChart
  data={data}
  series={
    <FunnelSeries
      arc={<FunnelArc gradient={null} colorScheme="cybertron" />}
    />
  }
/>
```

## Notes

- Default gradient is horizontal, fading from full opacity to 50% opacity
- `variant="layered"` renders segments as overlapping layers instead of connected shapes
- `labelVisibility="auto"` hides labels that don't fit within their segment
- Data should be ordered from largest to smallest for a standard funnel shape

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.