Skip to content
fandhe-frontendcore v0.4.3
GitHub

Emoji

fandhe-frontend-wireframe-ui の絵文字プレースホルダーです。画面設計図中に絵文字 1 個を置く、非インタラクティブな部品です。API は emoji(glyph, size) の 2 引数(詳細は下の引数表を参照)で、props 構造体は導入していません。

視覚的な参照元は blocks.pm の Emoji 部品ですが、ライセンス上の理由によりスクリーンショットは掲載していません(詳細は docs/design/wireframe-ui-architecture.md §2)。参照したい場合は外部リンク先を直接確認してください。

実際にアクセシブルな絵文字表示(role="img"・aria-label 付き)や任意のノードを差し込みたい場合は、Themes/Primitives 側の部品や既存の fandhe-frontend-wireframe-ui の icon モジュールを検討してください。

Demo

既定

🙂

別の絵文字

🎉

複数コードポイントのシーケンス(ZWJ)

👩‍💻

空文字列(破線の円プレースホルダー)

サイズ比較(Xs〜Xl)

🙂🙂🙂🙂🙂

引数表

引数型既定値説明
glyph&str(必須・既定値なし)表示する絵文字。空文字列のときは CSS の :empty 規則で破線の円プレースホルダーになる。複数コードポイントのシーケンス(ZWJ 等)も検証・切り詰めなしでそのまま出力する。
sizeSizeSize::Mdサイズ段階(xs〜xl)。フォントサイズに反映される。

原案差分メモ

  • API は独自設計: docs/design/wireframe-ui-architecture.md §4・§6 の Figma プロパティ変換規約から独立設計しました。原案のプロパティ軸はサイズと絵文字の差し替えの 2 つで、これを glyph/size の 2 引数へ変換しています。
  • Option<Node> アイコンスロット規約(§11.4)からの意図的な逸脱: 絵文字は Unicode の 1 文字(または ZWJ シーケンス等の複数コードポイント列)であり、crate::icon のような SVG インスタンスではないため、Option<Node> アイコンスロットではなく glyph: &str の 1 引数へ畳み込みました(§6 の「boolean 爆発やスロットを最小引数に畳む」趣旨に沿う判断)。任意のノードを差し込みたい場合は、既存の icon モジュールや他部品を直接使うことを想定し、本部品ではスロットを持ちません。
  • サイズは 5 段階へ畳み込み: 本クレート共通の Size 5 段(xs〜xl)へ畳み込んでいます(他部品と同じ判断)。
  • モノクロ化は CSS の filter: grayscale(1): カラー絵文字をモノクロ方針(同文書 §3)へ合わせるため、色値のリテラルは書かず CSS フィルタで彩度を落としています。
  • 空文字列は破線の円プレースホルダー: glyph が空文字列のときはテキストノードを出力せず、CSS の :empty 疑似クラスが破線の円プレースホルダーを表示します(「絵文字を置く場所」を示すため)。Rust 側の分岐はこの 1 点だけです。
  • 入力の検証・切り詰めはしない: ZWJ シーケンス・肌色修飾・国旗などの複数コードポイントは、そのまま 1 テキストノードとして出力します。「ちょうど 1 絵文字であること」は強制しません(Unicode 依存を core へ持ち込まない責務境界、同文書 §5)。
  • 非対話・ARIA なし: role="img"・aria-label・aria-*・tabindex・style・href・src・on*・<img>・<a>・<button>・表示状態の data-* は一切出力しません(同文書 §5・§7)。
  • スクリーンショット非掲載: docs/design/reference-screenshots/ への blocks.pm 画像取り込みは #2602 で fail-closed に非掲載と確定しています。本ページも画像は置かず、上記の外部リンクのみで代替します。