# Scroll Expand · Pro

A pinned section whose media starts as a small centred frame and grows to fill the viewport as you scroll, with a caption that lands once it is full. The viewport is measured from the scroll container, so it also works inside a scroll box.

This is a Charcoal UI Pro component. Its source and examples are available with a Pro seat: https://charcoalui.com/pricing

## With a Pro seat

1. Add the registry to components.json:

```json
{
  "registries": {
    "@charcoal": {
      "url": "https://charcoalui.com/r/{name}.json",
      "headers": {
        "Authorization": "Bearer ${CHARCOAL_LICENSE_KEY}"
      }
    }
  }
}
```

2. Copy your licence key from https://charcoalui.com/dashboard and put it in .env.local as CHARCOAL_LICENSE_KEY, then:

```bash
npx shadcn@latest add @charcoal/scroll-expand
```

To read Pro source through this MCP server, reconnect it with the header "Authorization: Bearer <licence key>".

## API — Scroll Expand
| Prop | Type | Default | Notes |
| --- | --- | --- | --- |
| `src` | `string` | — |  |
| `alt` | `string` | `""` |  |
| `video` | `boolean` | `false` | Treat `src` as a muted looping video. |
| `scale` | `number` | `0.35` | Starting size as a fraction of the full frame. |
| `height` | `number` | `200` | Section height in viewport heights. |
| `title` | `string` | — | Caption that fades in as the frame lands. |
| `children` | `ReactNode` | — | Extra caption content under the title. |
| `container` | `RefObject<HTMLElement \| null>` | — | Scroll container; defaults to the page. |
| `className` | `string` | — |  |

See it live: https://charcoalui.com/docs/components/scroll-expand