Pluto Design System
Components

ChatComposer

제어형 textarea + send/cancel 토글 composer

사용

import { ChatComposer } from "@fluxloop-ai/pds-ui/components/chat-composer";

const [value, setValue] = useState("");

<ChatComposer
  value={value}
  onChange={setValue}
  onSubmit={(v) => send(v)}
  isStreaming={streaming}
  onCancel={() => abort()}
/>
  • 제어형value / onChange / onSubmit 만 핵심. 내부 스토어 없음.
  • Auto-growminRows ~ maxRows 범위에서 scrollHeight 측정.
  • Enter 전송 / Shift+Enter 줄바꿈 / IME 조합 중 Enter 무시.
  • Streaming 토글isStreaming true 면 Send → Cancel 로 교체, onCancel 호출.
  • Toolbar slotleadingToolbar / trailingToolbar 로 첨부·컨텍스트·모드 조작 버튼 주입.

Toolbar / accessory slots

  • leadingToolbar · trailingToolbar — send 버튼 row(shell 안 하단)
  • topAccessory — shell 안쪽 상단 (textarea 위). 첨부 chip 등 입력 컨텍스트 표시 자리.
  • bottomAccessory — shell 바깥 하단 (composer 카드 아래). 톤·모델 선택 row 같은 외부 컨트롤.
ui-reference.png
color-palette-draft-2026.jpg
release-notes-2026-q2.md
design-tokens.json
archive.zip

Streaming toggle

Disabled

Props

Prop타입기본설명
valuestringtextarea 값
onChange(value: string) => void입력 콜백
onSubmit(value: string) => voidEnter 또는 Send 버튼
onCancel() => voidCancel 버튼 (isStreaming=true 일 때)
isStreamingbooleanfalseSend/Cancel 토글
placeholderstring"ask a question..."placeholder
minRows / maxRowsnumber2 / 10auto-grow 범위
disabledbooleanfalse입력 비활성
helperText / errorText / footerTextReactNode3종 보조 텍스트 라인
leadingToolbar / trailingToolbarReactNodetoolbar slot (send 버튼 row 좌/우, shell 안)
topAccessoryReactNodeshell 안쪽 상단 슬롯 (첨부 chip 등)
bottomAccessoryReactNodeshell 바깥 하단 슬롯 (외부 컨트롤 row)
autoFocusboolean초기 포커스