Skip to content
fandhe-frontendcore v0.4.3
GitHub

Switch

fandhe-frontend-pre-styled-ui の switch mod が提供するスタイル済み Switch 部品です。

関連 API: fandhe-frontend-pre-styled-ui API / fandhe-frontend-headless-ui API

Demo

data-state="checked"/"unchecked" で見た目が切り替わるオン/オフ スイッチ。visually-hidden な input[type="checkbox"][role="switch"] がフォーム送信・キーボード操作の意味論を担います。

Size

Features

  • size/colorPalette variant クラスを root へ付与し、headless-ui の switch::root へ委譲する。
  • ネイティブ checked 状態がブラウザにより aria-checked へ自動マップされるため、本モジュールは aria-checked を明示付与しない(二重読み上げ防止)。
  • readonly/invalid/required の各フラグを SwitchProps で受け取り、data-* 属性・ネイティブ属性へ全パーツ一律反映する(イシュー #1622)。
  • data-invalid は control パーツへ danger 色の box-shadow リングとして反映される(イシュー #2021、shadcn/ui との突合で追加)。
  • root_with で track: SwitchTrack::Short を渡すと、つまみより細く短いトラック形状になり、つまみが上下左右へはみ出す(イシュー #3141)。SwitchTrack::Default(root が使う既定値)では class・CSS とも出力されない opt-in 軸。
  • thumb_icon で thumb 中央に on/off アイコンを重ねられる(イシュー #3141)。checked/show の組み合わせに応じて opacity を切り替え、checked 状態で表示される on 側アイコンのみ colorPalette と連動した色になる(unchecked 側は常に中立色のまま。オフ状態を装飾色で強調しない意図的な非対称)。装飾のため aria-hidden="true" を固定する。

Anatomy

root
  hidden-input
  control
    thumb
  label

API Reference

Arguments

NameTypeDefaultDescription
sizeSizeSize::Mdサイズ variant。
paletteColorPaletteColorPalette::AccentcolorPalette 軸。
trackSwitchTrackSwitchTrack::Defaultトラック形状 variant(root_with のみが受け取る。root は常に Default を渡す、イシュー #3141)。
checkedboolfalseオン/オフ状態。
props&SwitchProps—disabled・readonly・invalid・required を束ねる構造体。全パーツへ対応する data-* を一律反映する(イシュー #1622)。
attrsVec<(&str, &str)>—root パーツへ合成する追加属性。
childrenVec<Node>—root 配下の子ノード(通常 hidden-input/control/label を含む)。

Data Attributes

PartAttributeObserved Values
controldata-disabled(値なし)
controldata-invalid(値なし)
controldata-statechecked, unchecked
hidden-inputdata-disabled(値なし)
hidden-inputdata-invalid(値なし)
hidden-inputdata-statechecked, unchecked
labeldata-disabled(値なし)
labeldata-invalid(値なし)
labeldata-statechecked, unchecked
rootdata-disabled(値なし)
rootdata-invalid(値なし)
rootdata-statechecked, unchecked
thumbdata-disabled(値なし)
thumbdata-invalid(値なし)
thumbdata-statechecked, unchecked

CSS Variables

VariableDefault
--fandhe-switch-gapvar(--fandhe-space-2)
--fandhe-switch-label-font-sizevar(--fandhe-font-font-size-sm)
--fandhe-switch-thumb-icon-colorvar(--fandhe-color-fg-muted)
--fandhe-switch-thumb-offset0
--fandhe-switch-thumb-size1.1rem
--fandhe-switch-thumb-travel1.1rem
--fandhe-switch-track-height1.4rem
--fandhe-switch-track-width2.5rem

Examples

説明文付き(label + description の合成)

switch は description 専用パートを持たない(headless anatomy に存在せず、chakra-ui も同様に呼び出し側合成のため。fandhe_frontend_pre_styled_ui::switch rustdoc「shadcn/ui との突合」節参照)。root は flex コンテナのため、label とスイッチ本体を両端揃えで並べつつ、label 下へ fg-muted + 1 段小さいフォントサイズの説明文を並べる合成例です。

枠付きボックス内での利用

shadcn/ui の Examples が示す「枠付きカード内に label/description + switch を配置する」構成を、既存 anatomy パーツと plain な <div> の合成で再現した例です(専用の複合コンポーネントは新設しない、fandhe_frontend_pre_styled_ui::switch rustdoc「本イシューのスコープ外」節参照)。

短いトラック形状

root_with へ SwitchTrack::Short を渡した例です。つまみより細く短いトラックで、つまみが上下左右へはみ出す形状になります(イシュー #3141、R1375)。

thumb アイコン

thumb の子として thumb_icon を 2 個(checked/unchecked 用)配置した例です。状態に応じてどちらか一方だけが見え、checked 側が表示されているときのみ colorPalette に連動した色になります(unchecked 側は中立色のまま、イシュー #3141、R1376)。

Accessibility

WAI-ARIA

AttributeDescription
aria-hidden視覚的な表現のみを担う control/thumb パーツへ固定付与し、支援技術からの重複読み上げを防ぐ。
aria-invalidprops.invalid が true のとき hidden-input パーツへ "true" を付与する。