Meowland docs
Workbench

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.

packages/meowtail/stories/composer-panel.stories.tsxline 16tsx
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

usage.tsts
import { ComposerPanel } from "meowtail";

API reference

The composer keeps its single writing surface and external hint; this panel owns the surrounding composition.

Props

PropTypeDefault
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.