Component reference
ComposerPanel
A ChatComposer and optional page-level meta row.
Preview
surface and meta
ComposerPanel refines ChatComposer's single writing surface. The keyboard hint and optional page-level facts follow outside the rounded editor and its bottom action row.
render: () => (
<Measure width="content">
<Stack gap="relaxed">
<Stack gap="compact">
<strong>Default panel</strong>
<span>
Draft and actions share one writing surface. Supporting instructions and page facts stay
below its edge.
</span>
</Stack>
<ComposerPanel
value="Continue — I'm wondering whether the component set is still too thin, especially for containers."
placeholder="Continue, type a message…"
inputLabel="Message"
hint="Enter for a new line · Use Send to submit"
hintId="panel-composer-hint"
submitLabel="Send message"
submitContent={<Icon name="arrow-up" />}
trailing={[
<IconButton label="Auto review">
<Icon name="shield-check" />
</IconButton>,
<Button variant="quiet" size="small">
DeepSeek-V4.1-Flash <Badge tone="accent">1017</Badge>
</Button>,
]}
meta={
<MetaRow
items={[
{ icon: <Icon name="refresh-cw" />, label: "7 turns 162 steps" },
{ label: "219 tok/s" },
]}
progress={45}
progressLabel="Cache progress"
align="center"
/>
}
>
<IconButton label="Add">
<Icon name="plus" />
</IconButton>
</ComposerPanel>
</Stack>
</Measure>
)Installation
bun add meowtail
Usage
import { ComposerPanel } from "meowtail";API reference
The composer keeps its single writing surface and external hint; this panel owns the surrounding composition.
Props
| Prop | Type | Default |
|---|---|---|
value | MaybeSignal<string> | – |
placeholder | string | – |
inputLabel | string | – |
attachmentsDraft attachments belong to the same writing surface; upload ownership stays with the host. | Child | – |
trailingModel/provider selection beside the send action; options and state belong to the host. | Child | – |
hintSupporting instructions below the writing surface, associated through hintId. | Child | – |
hintId | string | – |
submitLabel | string | – |
submitContentVisible action content; the accessible name always comes from submitLabel. | Child | – |
disabled | MaybeSignal<boolean> | – |
readOnly | MaybeSignal<boolean> | – |
submitDisabledPrevent another submission while keeping the draft editable. | MaybeSignal<boolean> | – |
onSubmit | ChatComposerSubmit | – |
onInput | ChatComposerInput | – |
metaPage-level facts below the writing surface, usually a MetaRow. | Child | – |
Also takes className, children and the attributes and events of its root element. It also extends "surface" | "className">.
DOM parts
rootsurfacemeta
Registry
The component is registered as composer-panel in the meowtail component registry.