Orbs

Orb Picker

A chooser for an orb's colors: every row shows its colorway as a planet, with a name and note, on a Base UI radio group so arrow keys move the choice. Lists the nine Orb Palettes by default; pair it with the Voice Orb to let people pick their assistant's color.

The source comes with full access.

One payment of $149 ($49 for now) opens the source right here and lets the CLI install every paid component, with lifetime updates.

Installation

pnpm dlx shadcn add @01orbital/orb-picker
npx shadcn add @01orbital/orb-picker
yarn shadcn add @01orbital/orb-picker
bunx --bun shadcn add @01orbital/orb-picker

Part of the 01orbital library. With a license, put ORBITAL_TOKEN in .env.local and the same command installs it (licensed install, pricing).

It lands at components/orbs/orb-picker.tsx, as source you own and edit.

The example also uses voice-orb. Install it too:

pnpm dlx shadcn add @01orbital/voice-orb
npx shadcn add @01orbital/voice-orb
yarn shadcn add @01orbital/voice-orb
bunx --bun shadcn add @01orbital/voice-orb

Usage

"use client"

import * as React from "react"

import {
  ORB_PALETTES,
  type OrbPaletteName,
} from "@/components/orbs/orb-palettes"
import { OrbPicker } from "@/components/orbs/orb-picker"
import { VoiceOrb } from "@/components/orbs/voice-orb"

// The picker choosing the assistant's orb: pick a row, the Voice Orb takes
// that colorway.
export default function Demo() {
  const [value, setValue] = React.useState<string>("planet-14")
  const palette = (
    value in ORB_PALETTES ? value : "planet-14"
  ) as OrbPaletteName
  return (
    // Stacked on a phone, side by side from sm, so the rows keep their width.
    <div className="flex w-full max-w-2xl flex-col items-center gap-8 p-6 sm:flex-row sm:gap-10">
      <VoiceOrb palette={palette} size={160} />
      <div className="flex w-full min-w-0 flex-col gap-3 sm:flex-1">
        <p className="font-display text-xl">Assistant color</p>
        <OrbPicker
          aria-label="Assistant color"
          value={value}
          onValueChange={setValue}
        />
      </div>
    </div>
  )
}

API reference

Prop

Type

It also accepts the props of the Base UI part it wraps, and the HTML attributes of the element it renders.

Dependencies

npm: @base-ui/react, cn. The CLI installs them for you.

Registry pieces it installs with it: