JDS.

Search docs

Find a page or component

Voice Orb

Presence for a voice agent, drawn in the primary color. Ten variants: particle mesh, glowing ring, twisting ribbons, soft aura, circular bars, halftone dots, three WebGL shaders (plasma, liquid and glass), and a minimal dot for small spots. All share the same states, speed, glow and sensitivity, and react to voice level. Tune one in the Studio.

Installation

pnpm dlx shadcn@latest add @jds/voice-orb

Usage

import { VoiceOrb, VoiceOrbProvider } from "@/components/voice/voice-orb"

<VoiceOrb state="listening" level={level} />
<VoiceOrb variant="ring" state="thinking" />

// Or style every orb in the app once, at the root
<VoiceOrbProvider variant="glass" palette="iris" glow={0.3}>{children}</VoiceOrbProvider>

Examples

Variants

particles
ring
aura
plasma
liquid
glass
bars
halftone
wave
dot

Aura palettes

mist
iris
ember
cocoa
primary

API Reference

VoiceOrb

PropTypeDefault
variant

Visual style. Omit to use the nearest VoiceOrbProvider.

"particles" | "ring" | "wave" | "aura" | "bars" | "halftone" | "plasma" | "liquid" | "glass" | "dot"provider, else "particles"
state

Same meaning on every variant. Connecting breathes; error turns destructive and nearly still.

"idle" | "connecting" | "listening" | "thinking" | "speaking" | "error""idle"
level

Loudness 0 to 1. Smoothed with a spring.

number0
sensitivity

Multiplies level before it moves the orb, capped at 1. Raise it for quiet sources.

number1
speed

Animation speed multiplier.

number1
glow

Soft light around the orb, 0 to 1. Named aura palettes glow in their own color.

number0
size

Size in px. Wave renders 2x wide and 0.6x tall, capped to its container. Dot is built for 16 to 48px. Color follows --primary; override with a text-* class.

number160
palette

Aura, plasma, liquid and glass. A named palette, or four colors: base, then three fields. Primary builds shades of --primary.

"primary" | "iris" | "ember" | "cocoa" | "mist" | string[]"primary"
particles

Particles variant only. Approximate count, capped at 6000.

numbersize² × 0.07
thickness

Ring: stroke weight. Glass: how strongly it bends and tints the light.

number1
gloss

Liquid and glass: highlight strength.

number1
blobs

Liquid: number of blobs, 1 to 8.

number5
turbulence

Plasma: how strongly the noise warps.

number1
filaments

Plasma: brightness of the flaring streaks.

number1
grain

Aura: film grain strength, 0 to 2.

number1
bars

Bars: number of bars.

number56
density

Halftone: dot grid density multiplier.

number1

VoiceOrbProvider

PropTypeDefault
variant

Default variant for every VoiceOrb inside.

"particles" | "ring" | "wave" | "aura" | "bars" | "halftone" | "plasma" | "liquid" | "glass" | "dot"–
palette, glow, speed, sensitivity, …

Any style prop except size becomes the default for every orb inside, so one provider at the root styles the whole app. Props on a VoiceOrb win; classes combine.

same as VoiceOrb–