Reactions

同じ絵文字ごとに、付けた人数を添えてリアクションを表示します。

リアクションを追加
別々の人が同じ絵文字を付けた時(数が増える)
リアクションを追加
短い言葉のリアクション・まだリアクションがない
リアクションを追加
    リアクションを追加
    読むだけ(押せないリアクション)
    • いいね:田中 遥、自分
    • お祝い:佐藤 健
    狭い場所:折り返す
    リアクションを追加
    右から左に読む場合
    إضافة تفاعل

    使いどころ

    • 投稿やコメントに付いたリアクションを、絵文字や短い言葉ごとにまとめて示し、自分も付け外しさせる時に使います。
    • 絵文字パネルだけが必要な時は EmojiPicker を使います。

    使い方

    items にリアクションごとの content(絵文字や短い言葉)と by(付けた人の名前の並び)を渡します。リアクションは高さ24pxの平らな白い四角で、控えめなボタンと同じ5pxの角丸にします(ピルにはしません)。読むだけのリアクションは1px #dedede の枠だけを付けます。文字は11pxで、by の人数を灰色の太字の数で添え、ホバーすると付けた人の名前を出します。言葉のリアクションは太字で書きます。自分も付けているリアクションは mine にすると、オンの状態と同じ淡い青の縦の塗りに紺の縁と紺の文字にし、数も同じ紺にします。

    add を渡すとリアクションが押せるボタンになり、控えめなボタンと同じ1px #cccccc の枠と下に1px #dddddd の影を付けます。ホバーすると面を #fafafa にし、押すと内側へへこみます。自分のリアクションを押すと外し、他の人のリアクションを押すと自分も付けます。数が0になったリアクションは消えます。付け外しで by に追加・削除する自分の名前は add.me で、mine のリアクションの by にも同じ名前を入れておきます。

    add がある時は、リアクションの並びの末尾に「リアクションを追加」の操作を、枠を持たない青緑のアイコンのボタンで置きます。開くパネルには16文字までの言葉の欄と EmojiPicker があり、開くと言葉の欄へ移ります。選んだ絵文字や書いた言葉は、同じリアクションがあればそこへ自分を加え、なければ末尾に新しいリアクションを作ります。

    ReactionsController を reactions、EmojiPickerController を emoji-picker として登録し、追加のパネルに使う PopoverController・TooltipController も登録します。付け外しすると reactions:toggle を発火するので、保存は利用側で行います。リアクションはcontrollerがその場で書き換えます。保存に失敗した時は、reactions のcontrollerの setReaction(content, selected, name) に reactions:toggle のdetailを selected だけ逆にして渡すと、イベントを発火せずにリアクションを元に戻します(消えたリアクションは作り直し、追加したリアクションは消します)。保存が済むまで書き換えたくない時は reactions:beforetoggle を取り消し、保存できてから setReaction で付け外しします。

    add がない時は表示するだけのリアクションです。JavaScriptがない時はリアクションを押しても変わりません。

    キーボード

    Reactionsのキーボード操作
    キー動作
    Enter / Spaceフォーカスのあるリアクションで、自分のリアクションを付け外しします。
    Enter言葉の欄で、書いた言葉をリアクションとして追加します。日本語入力の変換を確定するEnterでは追加しません。
    Esc追加のパネルを閉じます。

    アクセシビリティ

    • リアクションの並びは ul で、label を名前にします。label は画面には出しません。
    • リアクションは「いいね:田中 遥、佐藤 健」のように、name(無ければ content)と付けた人を読み上げ、絵文字と数は読み上げから外します。押せるリアクションは aria-pressed で自分が付けているかを伝えます。絵文字のリアクションには name を渡します。
    • 追加の操作はアイコンだけのボタンで、add.label を名前にし、Tooltipで名前を見せます。パネルの見出しは読み上げだけに残します。
    • リアクションを外して消えた時は次のリアクションか追加の操作へ、リアクションを追加した時はそのリアクションへフォーカスを移します。絵文字パネルの中の操作は EmojiPicker と同じです。

    イベント

    Reactionsが発火するイベント
    イベント内容
    reactions:beforetoggle利用者の操作で自分のリアクションを付ける・外す前に発火します。取り消せます(取り消すとリアクションを変えません)。detailは reactions:toggle と同じです。
    reactions:toggle自分のリアクションを付けた・外した後に発火します。detailは content(リアクションの内容)・name(読み上げの名前)・selected(付けた時は true)です。setReaction では発火しません。

    API

    Reactions

    項目に付いたリアクション。同じ絵文字や言葉は一つのリアクションにまとめ、付けた人数を添える。別々の人が同じ絵文字を付けると数が増え、自分が付けているリアクションは淡い青にする。自分のリアクションを押すと外し、他の人のリアクションを押すと自分も同じリアクションを付ける。新しいリアクションはEmojiPickerから選ぶか、短い言葉を入力して追加する。

    Reactionsのprops
    名前型既定値説明
    label必須stringリアクションの一覧の名前。リアクションの並びのaria-labelにする。画面には出さない。
    items必須readonly Reaction[]リアクションごとに一件。付けた人(by)が空のリアクションは描かない。
    add{ id: string; me?: string; label?: string; groups?: readonly EmojiGroup[]; textLabel?: string; submitLabel?: string; }渡すと、リアクションを押して自分のリアクションを付け外しでき、末尾にリアクションを追加する操作を置く。追加のパネルはEmojiPickerと、短い言葉でリアクションする欄(16文字まで)を持つ。付け外しは書き換える前にreactions:beforetoggle(取り消せる)、後にreactions:toggleイベントを発火する。保存は利用側が持ち、失敗した時はReactionsControllerのsetReactionでリアクションを戻す。

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

    登録するcontroller:reactions(ReactionsController)、popover(PopoverController)、tooltip(TooltipController)、emoji-picker(EmojiPickerController)

    読み込むCSS:layers.css、reset.css、tokens.css、base.css、layout.css、components/button.css、components/overlay.css、components/icon.css、components/input-group.css、components/popover.css、components/tooltip.css、components/reactions.css、components/emoji-picker.css

    addの項目

    addの項目
    名前型既定値説明
    id必須string追加のパネル(Popover)のid。ページ内で一意にする。言葉の欄と絵文字パネルのidにも使う。
    mestring自分の名前。付け外しでbyに追加・削除する名前で、itemsのbyと同じ書き方にする。既定は「自分」。
    labelstring追加の操作の名前。Tooltipとパネルの見出し(読み上げだけ)に使う。既定は「リアクションを追加」。
    groupsreadonly EmojiGroup[]EmojiPickerに並べる絵文字。渡さなければEmojiPickerの既定の絵文字を使う。
    textLabelstring言葉の欄の名前。placeholderは末尾に「…」を付けて使う。既定は「リアクションを入力」。
    submitLabelstring言葉の欄の確定ボタンの文言。既定は「追加」。

    Reaction

    Reaction
    名前型既定値説明
    content必須string絵文字や短い言葉。同じ内容のリアクションは一つにまとめる。
    namestring読み上げの名前(絵文字の名前など)。渡さなければcontentを読む。
    by必須readonly string[]付けた人の名前。数はこの人数で、ホバー時と読み上げで誰が付けたかを伝える。
    mineboolean自分も付けているもの。

    EmojiGroup

    EmojiGroup
    名前型既定値説明
    label必須string種類の見出し。グリッドのまとまりの読み上げ名にもなる。
    emojis必須readonly Emoji[]この種類に並べる絵文字。並べた順にグリッドへ置く。

    Emoji

    Emoji
    名前型既定値説明
    emoji必須stringグリッドに表示し、選んだ時にemoji-picker:pickイベントで渡す絵文字。
    name必須string読み上げとホバー時の名前。
    keywordsreadonly string[]検索に使う別名。

    コード

    HTML
    Hono JSX