# Bubble Menu · Pro

A round trigger that bursts into a column, fan or row of bubble links on staggered springs and gathers them back on close. Arrow keys move between bubbles, Escape closes.

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/bubble-menu
```

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

## API — Bubble Menu
| Prop | Type | Default | Notes |
| --- | --- | --- | --- |
| `items` | `{ label: string; icon: ReactNode; href: string }[]` | — |  |
| `direction` | `"up" \| "radial" \| "right"` | `"radial"` |  |
| `stagger` | `number` | `0.045` | Seconds between each bubble's spring. |
| `distance` | `number` | `56` | From the trigger centre to the first bubble, in px. |
| `size` | `number` | — | Trigger diameter in px. |
| `open` | `boolean` | — |  |
| `onOpenChange` | `(open: boolean) => void` | — |  |
| `onNavigate` | `(item, event) => void` | — |  |
| `className` | `string` | — |  |

See it live: https://charcoalui.com/docs/components/bubble-menu