Goose UI
uiborder-beamsource: ok · hit
Border Beam
Animated beam of light traveling along the border of a container.
npx shadcn add "https://gooseui.pro/r/border-beam.json"free
No selection tags yet — empty means no evidence, not lack of support.
Files1 · source cached 10/14/2026, 2:10:15 PM
registry/new-york/effects/border-beam.tsx
"use client"
import { useGlobalStyles } from "@/hooks/use-global-styles"
import { cn } from "@/lib/utils"
const BORDER_BEAM_STYLES = `
@keyframes border-beam-spin {
from {
--angle: 0deg;
}
to {
--angle: 360deg;
}
}
@property --angle {
syntax: "<angle>";
initial-value: 0deg;
inherits: false;
}
`
interface BorderBeamProps {
className?: string
size?: number
duration?: number
delay?: number
colorFrom?: string
colorTo?: string
borderWidth?: number
/** Match iOS-style squircle corners (requires Chrome 139+) */
squircle?: boolean
}
export function BorderBeam({
className,
size = 200,
duration = 12,
delay = 0,
colorFrom = "#ffaa40",
colorTo = "#9c40ff",
borderWidth = 1.5,
squircle = false,
}: BorderBeamProps) {
useGlobalStyles(BORDER_BEAM_STYLES, "border-beam-styles")
const squircleStyle = squircle
? ({ cornerShape: "squircle" } as React.CSSProperties)
: {}
return (
<div
className={cn(
"pointer-events-none absolute inset-0 rounded-[inherit]",
className,
)}
style={
{
"--size": size,
"--duration": `${duration}s`,
"--delay": `-${delay}s`,
"--color-from": colorFrom,
"--color-to": colorTo,
"--border-width": `${borderWidth}px`,
...squircleStyle,
} as React.CSSProperties
}
>
<div
className="absolute inset-0 rounded-[inherit]"
style={
{
padding: "var(--border-width)",
background: `
linear-gradient(
var(--angle, 0deg),
transparent 0%,
transparent 35%,
var(--color-from) 50%,
var(--color-to) 65%,
transparent 80%,
transparent 100%
)
`,
mask: "linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)",
maskComposite: "exclude",
WebkitMask:
"linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)",
WebkitMaskComposite: "xor",
animation: `border-beam-spin var(--duration) linear infinite var(--delay)`,
...squircleStyle,
} as React.CSSProperties
}
/>
</div>
)
}