Message
アバター、名前、バブル、ステータスを備えたチャットのメッセージ行です。新しいメッセージは送信者の側からせり上がって表示されます。
pnpm dlx shadcn@latest add https://hextaui.com/r/message.jsonコンポーネント、HextaUIのテーマトークン、依存するHextaUIコンポーネントを追加します。
まだ追加していない場合は、グローバルCSSにテーマトークンを追加してください。
依存関係をインストールします。
pnpm add @base-ui/react class-variance-authority cn次のコードをコピーしてプロジェクトに貼り付けてください。
components/ui/message.tsx components/ui/bubble.tsx インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
message は、アバター、名前、1つ以上の <Bubble />、ステータス行をレイアウトします。バブルは message の align を継承するので、設定は一度だけです。
配置
align="end" は、自分のメッセージ用にアバターとバブルを反対側に置きます。
ヘッダーとフッター
<MessageHeader /> は名前と時刻を、<MessageFooter /> は1行のステータスを保持します。フッターの有無にかかわらず、アバターは常に最後のバブルに揃います。
アシスタント
ghost バブルは長い回答向けに全幅に広がり、<MessageAvatar /> 内のアイコンは丸いタイルになります。
長いコンテンツ
バブルは長いリンクを折り返し、ヘッダーとフッターのテキストはアバターを押し出さずに切り詰められます。
右から左
start と end の側が入れ替わり、新しいメッセージは対応する角から広がります。
- メッセージはプレーンなコンテンツです。ライブチャットでは、リストを
role="log"要素で囲むと、スクリーンリーダーが新しいメッセージを届いた時点で読み上げます。 - 配置だけでは誰が書いたかわからないので、送信者の名前はヘッダーか視覚的に非表示のテキストに入れてください。
- 登場アニメーションは、リストが最初に描画された後に追加されたメッセージにだけ再生されます。視差効果の軽減が有効な場合はフェードインになります。
すべてのパーツは <div> を描画し、render を受け付けます。
スレッド。最初の描画後に追加されたメッセージはアニメーションで登場します。
| 属性 | 説明 |
|---|---|
data-slot="message-group" | CSS でスレッドを指定します。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
align会話のどちら側か。バブルはこれを継承します。 | "start" | "end" | "start" |
animated最初の描画後に MessageGroup へ追加されると、せり上がって表示されます。 | boolean | true |
render | ReactElement | (props, state) => ReactElement | <div> |
| 属性 | 説明 |
|---|---|
data-slot="message" | CSS でメッセージを指定します。 |
data-align | 側。 |
data-entering | アニメーションで登場するメッセージに付きます。 |
| 属性 | 説明 |
|---|---|
data-slot="message-avatar" | 最後のバブルに揃います。アイコンや画像だけの場合は32pxにサイズ調整されます。 |
| 属性 | 説明 |
|---|---|
data-slot="message-content" | ヘッダー、バブル、フッターを積み重ねます。 |
| 属性 | 説明 |
|---|---|
data-slot="message-header" | バブルの上に表示する名前と時刻。 |
data-slot="message-footer" | 下に表示する1行のステータス。アバターの位置がずれないよう、1行に収めてください。 |
- Bubbleバリアント、グループ化された角、リアクション、インタラクティブなコンテンツの余地を備えたチャットのメッセージバブルです。
- Avatarイニシャルのフォールバック、ステータスバッジ、件数にまとめられる積み重ねグループを備えたユーザー写真です。
- Attachmentアップロード向けのファイルカードと画像カードです。進捗、状態、操作、カード全体のトリガーに対応し、名前は拡張子を保ったまま表示されます。
- Marker日付の区切りやシステムイベントのように、コンテンツの間に置く控えめなメモです。日付と時刻はスティッキーで、「今日」や「昨日」と表示されます。
- Message scroller新しいメッセージに追従し、過去を読み返している間は位置を保ち、見逃した件数をジャンプボタンに表示するチャットのスクロール領域です。
使用しているブロック
Message の上に構築されるブロック。
- Prompt Input最初は静かな1行で、入力に合わせてカードへ広がり、会話が始まると下へ移動するチャット入力欄です。Enterで送信でき、日本語や中国語の入力でも安全です。ファイルは貼り付け、ドロップ、選択でき、プレビュー、進捗、再試行に対応します。@でファイルを追加し、/でコマンドをカーソル位置のメニューから実行できます。数字キーで選べるモデルピッカー、Maxで動き出す推論量スライダー、コンテキストリング、リアルタイム波形つきの音声入力、ツールチップ、返信のストリーミング中に入力したメッセージのキュー、再読み込みしても残る下書きを備えています。
- Agent Todosエージェントの作業中のプランを表示します。すべてのステップはバックログからToDo、進行中、完了へと移り、リアルタイムの所要時間、失敗、その裏にあるツール呼び出しも確認できます。コンポーザーの上に置くステータスピル、目に見えるプランの変更、実行前にプランを編集できるレビューステップを備えています。
- Chat Sidebarチャットアプリ向けのサイドバーです。上部にロゴ、検索、New chat、その下に独自のリンク、ピン留めされたチャット、チャットを表示するために展開するプロジェクト、日ごとにグループ化された最近のチャットを配置します。行にはホバーメニューと右クリックメニュー、インラインでの名前変更、取り消しできる削除、リアルタイムの返信状態があります。
- Chat Threadコンポーザーを中心にした会話全体です。回答のストリーミング中も質問は上部に固定され、サイドのチェックポイントでメッセージ間を移動でき、すべての返信をコピー、編集、再試行、評価し、バージョン間で切り替えられます。返信はコードブロック、テーブル、引用を含むMarkdownとして描画され、思考、ツール呼び出し、Prompt Inputもそのまま組み込めます。