Logo Burst
Hair-line tentacles explode from the center, then keep a slow inhale. Follows light and dark.
A brand-hero burst. Thin filaments detonate out of the center, tip particles lock in, then the field breathes. Click the field — or bump replayKey — to explode again. Default theme="auto" follows the site. Press d to toggle.
Slow inhale after the burst
Click the field to explode again
Installation
pnpm dlx shadcn@latest add @23rd/logo-burstOr install straight from the public GitHub source registry:
pnpm dlx shadcn@latest add radiumcoders/23rd.dev/logo-burstUsage
Give the parent a size. The canvas is transparent over bg-background.
"use client"
import { LogoBurst } from "@/components/ui/logo-burst"
export function HeroBurst() {
return (
<div className="relative h-svh w-full bg-background">
<LogoBurst />
</div>
)
}Pass children only if you want a mark in the hole. coreSize is then measured from that mark unless you lock it.
<LogoBurst>
<img src="/mark.svg" alt="" className="size-20 rounded-[22%]" />
</LogoBurst>Replay from outside by incrementing replayKey.
"use client"
import { useState } from "react"
import { LogoBurst } from "@/components/ui/logo-burst"
export function Replayable() {
const [key, setKey] = useState(0)
return (
<div className="relative h-96 bg-background">
<LogoBurst replayKey={key} replayOnClick={false} />
<button type="button" onClick={() => setKey((n) => n + 1)}>
Replay
</button>
</div>
)
}
prefers-reduced-motion: reduce draws the settled field and skips the explosion and the inhale.
Props
| Prop | Type | Default |
|---|---|---|
children | ReactNode / Snippet | none |
tentacleCount | number | 260 |
color | string | theme ink / bone |
theme | "light" | "dark" | "auto" | "auto" |
breathe | boolean | true |
coreSize | number | 0 — lines meet at the origin; measured when children are set |
radius | number | 0.48 — outer reach vs the shorter edge |
duration | number | 1.35 |
seed | number | 23 |
particleRatio | number | 0.62 |
replayKey | number | 0 |
replayOnClick | boolean | true |
label | string | "Logo burst" |
className | string | React only |
class | string | Svelte only |
color overrides the theme filament. Omit it and theme="auto" picks ink on light, bone on dark.