Skip to content
fandhe-frontendcore v0.4.3
GitHub

Select

fandhe-frontend-wireframe-ui のドロップダウン選択欄風プレースホルダーです。表示文言 + 任意の先頭アイコン + サイズ/強調/無効状態を持つ非インタラクティブな部品です。API は select(text_content, leading, size, active, disabled) の 5 引数(詳細は下の引数表を参照)で、props 構造体は導入していません。

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

「Select」という名前ですが、<select> 要素・開閉・リストボックス・キーボード操作のいずれも実装しない表示専用プレースホルダーです。実際に操作可能な select が必要な場合は Select(Themes) / Select(Primitives) を検討してください。

Demo

既定

未選択

先頭アイコン付き

山田太郎

Active

選択中

Disabled

選択できません

Sm

小サイズ

Lg

大サイズ

引数表

引数型既定値説明
text_content&str-表示文言(選択済み値・プレースホルダー風のいずれも 1 種類の文言として扱う)。
leadingOption<Node>None省略可能な先頭アイコンスロット。Some(icon::user(size)) のように渡す。
sizeSizeSize::Mdサイズ段階(xs〜xl)。コントロール高さ・フォントサイズに反映される。
activeActiveActive(false)true のとき data-active="" を付与する(フォーカス風の強調枠)。
disabledDisabledDisabled(false)true のとき data-disabled="" を付与する(見た目のみ。操作不能を実装するものではない)。

原案差分メモ

  • div ルート・非対話制約: docs/design/wireframe-ui-architecture.md §7 に従い、ルートは div とし role/aria-*/tabindex/on* は一切出力しません(アイコンが持つ aria-hidden="true" は装飾用途の既定属性で対話的 ARIA ではありません)。
  • アイコン有無は先頭アイコンスロットの有無に畳み込む: docs/design/ wireframe-ui-architecture.md §2 の保留(イシュー #2602)に従い、blocks.pm の Figma プロパティ構成を参照・書き写さず、button/link と同型の一般的な UI パターンから独立に設計しました。「アイコン付き」「テキストのみ」の区別に専用の列挙型は導入せず、leading: Option<Node> の Some/None へ畳み込みます。
  • ドロップダウン指示子は固定パート: 末尾の指示子アイコン(⌄)はスロットではなく部品固有の固定パートとし、常に icon::caret_down を出力します(利用者が省略・差し替えできない部品の同一性を担う要素のため)。
  • State は共通型 Active/Disabled へ畳み込む: 専用の SelectState 列挙は追加せず、フォーカス風の強調は Active、無効状態は Disabled(いずれも既存の共通型)で表現します。true のときそれぞれ data-active=""/data-disabled="" を付与します(見た目のみで、実際のフォーカス管理・操作不能を実装するものではありません)。
  • 開いた状態(リストボックス表示)の variant は実装しない: 非対話制約(docs/design/wireframe-ui-architecture.md §5/§7)により、開閉状態の表示専用再現は本イシューでは実装していません。
  • スクリーンショット非掲載: docs/design/reference-screenshots/ への blocks.pm 画像取り込みは #2602 で fail-closed に非掲載と確定しています。本ページも画像は置かず、上記の外部リンクのみで代替します。
  • 配色はグレースケール: 黒塗り二値ではなく --fw-wire-* トークン(ink/ink-muted/line/fill-subtle)で読みやすさを優先します。