Message

投稿者・時刻・本文を、決まった順序で表示します。

森 美咲

記事のカテゴリを5つにまとめました。まずはこの形で、実際に探しやすいか試してみたいです。

佐藤 健

いいと思います。

返信をまとめる
田中 遥

読書会の開始時間を18時に変えてもよいですか。

森 美咲

18時からで大丈夫です。

佐藤 健

少し遅れて参加します。資料は先に共有しておきます。

アバターなし・複数段落・添付
予約の受付

中会議室の予約を受け付けました。

森 美咲

当日の進め方をまとめました。

最初の10分で近況を話し、そのあと一人ずつ本を紹介します。

メールのスレッドをカードを重ねて表示する
美健
読書会

来週の打ち合わせについて

森 美咲

来週の打ち合わせの資料を共有します。事前に目を通しておいてください。

佐藤 健

ありがとうございます。料金の表だけ、先に確認しておきます。

森 美咲

助かります。気になる点があれば、この返信にまとめてください。

当日は14時から、2階の小部屋で始めます。

長い名前・長い本文
株式会社とても長い名前の制作会社・海外事業部/山田

https://example.com/documents/abcdefghijklmnopqrstuvwxyz0123456789 に資料を置きました。確認の際は、共有設定が「組織内」になっていることもあわせて確かめてください。

株式会社とても長い名前の制作会社・海外事業部/山田

https://example.com/documents/abcdefghijklmnopqrstuvwxyz0123456789 に資料を置きました。共有設定が「組織内」になっていることもあわせて確かめてください。

右から左に読む場合
ليلى

أحضر كتابًا قرأته مؤخرًا وشارك انطباعاتك.

عمر

شكرًا، سأراجع الجدول قبل الاجتماع.

使いどころ

  • コメント・チャット・メールのスレッドのように、誰がいつ何を書いたかを一件ずつ見せる時に使います。
  • 受信した連絡を件名とプレビューで並べて選ばせる時は MessageList、出来事を時刻の順に並べる時は Timeline を使います。
  • 入力欄は Composer を組み合わせます。

使い方

author・time・datetime を渡し、本文を children に書きます。見出しの行は名前、時刻(time 要素)の順で、名前は本文と同じ大きさ(14px)の黒い太字、時刻は12pxの茶色の文字です。本文は続けて読む文章の大きさ(--rx-reading、14px)の黒です。avatar は名前の行の横の2remの列に置き、conversation では本文・操作・返信をその列の後ろから書きます。

既定の layout="conversation" は、本文を吹き出しにせず、作業面の上にそのまま書きます。誰の言葉かはアバターと名前の行で示します。幅は48remまでです。layout="document" は一通を白いカード(枠なし、四方へ4〜5pxのぼかしの影、角丸3px)に書き、日付を見出しの行の終わりに寄せ、本文をカードの幅いっぱいに読ませます。document の Message を続けて置くと、カードの間の角を立てて1px重ね、一枚のカードの続きに見せます。

actions は本文の下に、replies はさらにその下に置きます。replies には返信の Message を並べ、親と返信の両方に avatar がある時は、親のアバターの下から2pxの淡い灰色の線を下ろし、角を丸めて曲げた線で返信のアバターにつなぎます。

幅が20rem未満の Message では、アバターを名前の行の横だけに置き、本文と操作をアバターの下から全幅で表示します。本文の長い URL は本文の幅で折り返します。

送信・既読・返信・リアクションのデータと保存は利用側が持ちます。controllerを持たないので、JavaScriptなしでも同じように表示されます。

アクセシビリティ

  • ルートは article で、名前は strong、時刻は datetime 付きの time 要素です。
  • avatar は読み上げから外します(名前は author で読むため)。アバターに名前以外の意味を持たせないでください。
  • actions のボタンには、どの投稿への操作か分かる名前を付けてください。同じ文言のボタンが並ぶ時は aria-label で投稿者などを補います。

API

Message

Messageのprops
名前型既定値説明
author必須string投稿者の名前。見出しの行に太字で置く。
layout"conversation" | "document""conversation"見せ方。conversationは本文を吹き出しにせず作業面の上にそのまま書き、documentは一通を一枚のカードにして日付を見出しの行の末尾に寄せる。 documentを続けて置くと、カードの角を立てて1px重ね、一枚のカードの続きに見せる。
avatarChild投稿者のアバター(Avatarなど)。名前の行の横に置き、読み上げからは外す(名前はauthorで読む)。
time必須string見出しの行に出す時刻の文字。書式は利用側で決める。
datetime必須stringtimeに対応する機械可読の日時。time要素のdatetime属性に入れる。
actionsChild本文の下に並べる操作(返信・リンクのコピーなど)。footerとして描く。
repliesChild返信のMessage。本文の下に積み、avatarがある時はアバターから下ろした線でつなぐ。
childrenChild本文。段落・FileItemなど任意のHTMLを渡せる。conversationでは名前の行の下に、documentではカードの全幅に入れる。

ほかに、<article>へ標準のHTML属性を渡せます。

読み込むCSS:layers.css、reset.css、tokens.css、base.css、layout.css、components/message.css

コード

HTML
Hono JSX