Skip to content
fandhe-frontendcore v0.4.3
GitHub

Checkbox

真偽値または不確定(indeterminate)の 3 値チェック状態を表すフォーム部品です。aria-checked/data-state の唯一の情報源として 3 値の型を用いるため、ARIA の偽装や不整合な値を型で防ぎます。

fandhe-frontend-headless-ui の checkbox mod が提供する構造・アクセシビリティ(WAI-ARIA・キーボード操作)・表示状態(data-*)のみを持つ unstyled 部品です。Themes 版が備える見た目(サイズ・colorPalette variant 等)は持たず、anatomy・ARIA・data-* のみを提供します。CSS は利用者が当てます。

スタイル済みの表示例は Checkbox を参照してください。

関連 API: fandhe-frontend-headless-ui API

Demo

枠線・余白は docs サイト側のデモ枠であり、fandhe-frontend-headless-ui 自体はスタイルを持ちません。

Features

  • root(<label>)/control(<div aria-hidden="true">)/indicator/label/hidden_input(<input type="checkbox">)の 5 パーツで構成し、視覚的表現(control)とアクセシビリティ実体(hidden_input)を分離する(checkbox.rs:9-14, 230-232)。
  • CheckedState(Unchecked/Checked/Indeterminate)の 3 値が aria-checked/data-state 双方の唯一の情報源であり、偽装・不整合な値を型で塞ぐ(checkbox.rs:82-85)。
  • indicator は CheckedState::Unchecked のとき hidden 存在属性を出力する(checkbox.rs:251-260)。
  • hidden_input は CheckboxProps の disabled/invalid/required を受け取り、aria-invalid・ネイティブ存在属性へ反映する(checkbox.rs:139-153, 305-330)。
  • root/control は data-focus-visible を出力できる(実フォーカスを受けるのは visually-hidden な hidden_input のため、switch と同型の hidden-input パターン)。wasm-full の focus 配線が hidden-input の focus を境界 root へ写像する(checkbox.rs:45-53、crates/wasm-full/src/focus_visible.rs:51)。
  • ark-ui が付与する data-hover/data-active/data-focus は出力しない(DOM ローカルな pointer/focus 操作状態のため、SSR 静的出力の関心外。CSS 擬似クラスまたは wasm-full 配線側で表現する設計判断、data_attrs.rs の data_focus_visible/data_highlighted と同型の契約)。

Anatomy

root
  control
    indicator
  label
  hidden-input

API Reference

Arguments

NameTypeDefaultDescription
props.checkedCheckedStateCheckedState::Unchecked3 値のチェック状態。aria-checked と data-state 双方の唯一の情報源(checkbox.rs:82-85)。
props.disabled / props.invalid / props.required / props.readonlyboolfalseCheckboxProps の各フラグ(checkbox.rs:139-153)。各パーツの data-* / ネイティブ属性へ反映される(代表 1 行に集約)。
hidden_input(name, value)&str, &str—フォーム送信名・送信値。暗黙の既定値を持たず呼び出し側が明示する(checkbox.rs:284-287)。
attrs / childrenVec<(&str, &str)> / Vec<Node>—各パーツ共通の追加属性・子ノード(代表 1 行に集約)。

Data Attributes

PartAttributeObserved Values
controldata-disabled(値なし)
controldata-invalid(値なし)
controldata-readonly(値なし)
controldata-required(値なし)
controldata-statechecked, indeterminate, unchecked
hidden-inputdata-disabled(値なし)
hidden-inputdata-invalid(値なし)
hidden-inputdata-readonly(値なし)
hidden-inputdata-required(値なし)
hidden-inputdata-statechecked, indeterminate, unchecked
indicatordata-disabled(値なし)
indicatordata-invalid(値なし)
indicatordata-readonly(値なし)
indicatordata-required(値なし)
indicatordata-statechecked, indeterminate, unchecked
labeldata-disabled(値なし)
labeldata-invalid(値なし)
labeldata-readonly(値なし)
labeldata-required(値なし)
labeldata-statechecked, indeterminate, unchecked
rootdata-disabled(値なし)
rootdata-invalid(値なし)
rootdata-readonly(値なし)
rootdata-required(値なし)
rootdata-statechecked, indeterminate, unchecked

Examples

Invalid + Required

props.invalid/props.required を立てた未チェック状態の例です。

invalid かつ required な未チェック状態の Checkbox の組み立て例です。

自前 CSS の最小例

data-scope / data-part / data-state / data-focus-visible / data-disabled 属性セレクタで見た目を組み立てる最小例です。

利用者が data-scope / data-part / data-state / data-focus-visible / data-disabled 属性セレクタで自前 CSS を当てる最小例です。headless-ui 自体はスタイルを持ちません。

CSS
[data-scope="checkbox"][data-part="control"] {
  width: 1.25rem;
  height: 1.25rem;
  border: 1px solid #888;
  border-radius: 4px;
}
[data-scope="checkbox"][data-part="control"][data-state="checked"] {
  background: #2563eb;
  border-color: #2563eb;
}
[data-scope="checkbox"][data-part="control"][data-state="indeterminate"] {
  background: #6b7280;
  border-color: #6b7280;
}
[data-scope="checkbox"][data-part="control"][data-focus-visible] {
  outline: 2px solid #2563eb;
  outline-offset: 2px;
}
[data-scope="checkbox"][data-part="root"][data-disabled] {
  opacity: 0.5;
}

Accessibility

Keyboard Interactions

KeyDescription
Spacehidden_input が実際に <input type="checkbox"> を出力するため、ブラウザ標準のチェックボックストグル操作が働く(checkbox.rs:14-15, 305-330)。Enter ではトグルしない(WAI-ARIA Checkbox パターン・ネイティブ input の標準挙動に準拠、Radix Primitives も同じ理由で Enter を無効化する)。

WAI-ARIA

AttributeDescription
aria-checkedhidden_input へ CheckedState から算出した値("true"/"false"/"mixed")を付与する(Indeterminate のとき "mixed"、checkbox.rs:312-320)。
aria-invalidprops.invalid が true のとき hidden_input へ "true" を付与する(checkbox.rs:322-324)。
aria-hiddencontrol パーツ(視覚的表現のみを担う div)に固定付与し、支援技術からの重複読み上げを防ぐ(checkbox.rs:230-232, 240-243)。