Date Input
年・月・日を独立したセグメントとして編集する、WAI-ARIA の spinbutton パターンに従った unstyled 部品です。3 セグメントすべてが揃った場合のみ実在する日付か検証し、存在しない日付(例: 2 月 30 日)はセグメント値を保持したまま invalid 表示に倒します(fail-closed)。
Themes 版(fandhe-frontend-pre-styled-ui)はこの構造へ既定 CSS を追加するだけの薄いラッパーであり、CSS は持ちません。スタイル済みの表示例は Date Input を参照してください。
実在性検証以外の入力値検証・ロケール依存の日付整形・フォーム送信処理は本部品の責務外であり、利用側が担います。
関連 API: fandhe-frontend-headless-ui API
Demo
枠線・余白は docs サイト側のデモ枠であり、fandhe-frontend-headless-ui 自体はスタイルを持ちません。
2026
07
dd
Features
- Root/Label/Control/SegmentGroup/Segment/HiddenInput の 6 anatomy パーツと、年・月・日をそれぞれ独立したセグメントとして編集する状態機械 `DateInput` を提供する。
- 各 `segment` は `role="spinbutton"` + `aria-valuemin`/`aria-valuemax` を常に出力し、値が入力済みのときのみ `aria-valuenow` を追加する(WAI-ARIA spinbutton パターン)。
- 3 セグメントすべてが揃った場合のみ実在する日付か検証する(fail-closed)。存在しない日付(例: 2 月 30 日)は `is_invalid` が `true` を返す状態としてセグメント値を保持したまま表示する(値を破棄しない)。
- `hidden_input` パーツのみが `name` を持ち、確定済み日付を ISO 8601 文字列としてフォーム送信へ渡す。各 `segment` 自体は `name` を持たずフォーム送信に参加しない。
- セグメント値の実在性チェック以外の入力値検証・ロケール依存の日付整形は本コンポーネントの責務外であり、利用者側が担う(`docs/policy/intentional-non-adoption.md` §3.25)。
Anatomy
root
label
control
segment-group
segment
hidden-inputAPI Reference
Arguments
| Name | Type | Default | Description |
|---|---|---|---|
| kind | DateSegment | (必須) | Year/Month/Day のいずれか。`aria-label`・未入力時のプレースホルダを内部で決定する。 |
| value | Option<&str> | None | 現在の表示値。`None` のとき `data-placeholder` を付与しプレースホルダを表示する。 |
| min / max | &str | (必須) | `aria-valuemin`/`aria-valuemax` に出力する下限・上限の文字列表現。 |
| flags | DateSegmentFlags | DateSegmentFlags::default() | `disabled`/`invalid`/`readonly` の 3 フラグを束ねる構造体。 |
Data Attributes
| Part | Attribute | Observed Values |
|---|---|---|
| segment | data-placeholder |
Examples
実在しない日付(invalid)の表示
年・月・日すべてが揃っても実在しない日付(2 月 30 日)の場合、Day セグメントへ `aria-invalid`・`data-invalid` が付与されます。セグメント値自体は保持されたままです。
2026
02
30
Accessibility
Keyboard Interactions
| Key | Description |
|---|---|
| Tab | 各 `segment`(`div role="spinbutton"`)は `disabled` でない限り `tabindex="0"` を持ち、ブラウザ既定の Tab 順に含まれる。 |
WAI-ARIA
| Attribute | Description |
|---|---|
| role | 各 `segment` へ `"spinbutton"` を固定付与する。 |
| aria-valuemin / aria-valuemax | 各 `segment` へ常に出力する下限・上限。 |
| aria-valuenow | `value` が `Some` のときのみ `segment` へ出力する。 |
| aria-invalid | `flags.invalid` が `true` のとき `segment` へ `"true"` を付与する。 |