Prompt Input

An auto-growing agent composer inside a liquid-metal ring that bends under the cursor, with a voice mode that lights a sound-reactive beam along its bottom edge.

Enter to send · Shift + Enter for a new line

Install

Steps for Next.js.

  1. Install the package

    One package carries every component, the beUI base they build on, and the effect libraries. It is not published to npm yet, so this command will not work until it is; until then, copy the source from the Code tab.

    bun add @pouyal/ai-components
  2. Load the styles with Tailwind v4

    Add both lines to your global stylesheet so Tailwind generates the classes the components use. If your app already defines the shadcn/ui tokens, skip the theme import to keep your own palette.

    @import "@pouyal/ai-components/theme.css";
    @source "../node_modules/@pouyal/ai-components/dist";
  3. Or load the prebuilt stylesheet

    For apps without Tailwind. Import it once at the root; it includes Tailwind's base reset.

    import "@pouyal/ai-components/styles.css";

Props

NameTypeDefaultDescription
value / defaultValuestring—Controlled or initial prompt text.
onValueChange(value: string) => void—Called on every edit.
onSubmit(value: string, model?: string) => void—Called with the trimmed prompt on Enter or send.
modelsPromptModel[][]Options for the model menu. Hidden when empty.
actionsPromptAction[][]Items in the plus menu. Hidden when empty.
loadingbooleanfalseSwaps send for stop. Pair with onStop.
voice / defaultVoicebooleanfalseControlled or initial voice mode.
onVoiceChange(voice: boolean) => void—Called when the mic button toggles voice mode.
voiceLevelnumber | (() => number)—Drive the beam yourself, 0–1, instead of the microphone.
voiceColorVariantVoiceBeamColorVariant"colorful"Palette of the voice beam.
disableVoicebooleanfalseHides the mic button.
metalPreset"chromatic" | "silver" | "gold""chromatic"Metal palette for the ring and send button.
metalStrengthnumber1Intensity of the ring around the box, 0–1.
minRows / maxRowsnumber2 / 8Bounds for the auto-growing textarea.