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 等)も検証・切り詰めなしでそのまま出力する。 |
| size | Size | Size::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 段階へ畳み込み: 本クレート共通の
Size5 段(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 に非掲載と確定しています。本ページも画像は置かず、上記の外部リンクのみで代替します。