Mode Selector
The composer's mode toggle — agent / plan / ask, or permission modes — compacted to footer height. A thin recipe over Toggle Group: the debossed well with the active mode risen as the embossed key.
tsx
import { Bot, HelpCircle, ListTodo } from "lucide-react"
import { ModeOption, ModeSelector } from "@/registry/seam/ui/mode-selector"
export default function ModeSelectorDemo() {
return (
<ModeSelector defaultValue={["agent"]}>
<ModeOption value="agent" aria-label="Agent mode">
<Bot className="size-3.5" /> Agent
</ModeOption>
<ModeOption value="plan" aria-label="Plan mode">
<ListTodo className="size-3.5" /> Plan
</ModeOption>
<ModeOption value="ask" aria-label="Ask mode">
<HelpCircle className="size-3.5" /> Ask
</ModeOption>
</ModeSelector>
)
}bunx --bun @seamui/cli@latest add mode-selectorNotes
- Base UI Toggle Group semantics:
value={["agent"]}/onValueChange, single-select by default; arrow keys rove between options. - Press feedback, haptics, and the reduced-motion variant all come from the
Togglefoundation — this recipe only sets sizing.
Press feedback, reduced motion, and haptics follow the global policy — see Motion and Haptics.