Progress
進捗表示(Linear)の unstyled 部品です。value = None は不定進捗(indeterminate)を表し、min/max/value は fail-closed に正規化されます。
Themes 版(fandhe-frontend-pre-styled-ui)はこの構造へ既定 CSS を追加するだけの薄いラッパーであり、CSS は持ちません。スタイル済みの表示例は Progress を参照してください。
アクセシビリティ
role="progressbar"はrootへ固定付与します(参考サイト ark-ui/Zag.js はtrackへ置きますが、本実装は Radix Primitives に合わせてrootへ配置します)。value_textへはaria-live="polite"を無条件付与します(数値の更新を支援技術へ非割り込みで通知します)。- キーボード操作はありません(
progressbarは非インタラクティブなロールであり、参照サイト 4 件〔ark-ui / Radix Primitives / Radix Themes / chakra-ui〕もキーボード操作表を持ちません)。 aria-label/aria-labelledbyの既定値は持ちません。意味論的なラベル関連付けは呼び出し側がattrs経由で配線してください。
関連 API: fandhe-frontend-headless-ui API
Demo
枠線・余白は docs サイト側のデモ枠であり、fandhe-frontend-headless-ui 自体はスタイルを持ちません。
Uploading
40%
Features
- Root/Label/ValueText/Track/Range の 5 anatomy パーツ(linear)を提供する値状態機械
Progress。value = Noneは indeterminate(不定進捗)を表す。 data-state("indeterminate"/"loading"/"complete")はvalue/min/maxから導出され、パーツ関数間で分裂しない。min/max/valueはProgress::newが fail-closed に正規化する(非有限値・min >= maxは既定(0.0, 100.0)へフォールバック、valueは[min, max]へ clamp)。- Circle(circular 表示)変種の 3 パーツ(
circle/circle_track/circle_range)も提供するが、本ページの Demo・Anatomy 表は linear 変種のみを描画対象とする。 progressbarロールは非インタラクティブなためキーボード操作を持たない(参照サイト ark-ui / Radix Primitives / Radix Themes / chakra-ui いずれもキーボード操作表を持たない)。
Anatomy
root
label
track
range
value-textAPI Reference
Arguments
| Name | Type | Default | Description |
|---|---|---|---|
min / max | f64 | 0.0 / 100.0 | 値の下限・上限。非有限または min >= max の場合は既定 (0.0, 100.0) へフォールバックする。 |
value | Option<f64> | Some(0.0) | 現在の値。None は indeterminate(不定進捗)を表す。 |
orientation | Orientation | Orientation::Horizontal | data-orientation へ反映する向き。 |
Data Attributes
| Part | Attribute | Observed Values |
|---|---|---|
label | data-orientation | horizontal |
label | data-state | loading |
range | data-orientation | horizontal |
range | data-state | loading |
root | data-max | 100 |
root | data-orientation | horizontal |
root | data-state | loading |
root | data-value | 40 |
track | data-orientation | horizontal |
track | data-state | loading |
value-text | data-state | loading |
Examples
Indeterminate(不定進捗)
value に None を渡すと data-state="indeterminate" となり、aria-valuenow/data-value は出力されません。
Loading
自前 CSS の最小例
headless-ui はスタイルレスであるため、track/range/label の data-* 属性セレクタで見た目を組み立てます。
利用者が data-scope / data-part / data-state / data-orientation 属性セレクタで自前 CSS を当てます。range の幅は headless が付与しないため、Progress::percent() から呼び出し側が style で渡します。
Upload progress65%
CSS
[data-scope="progress"][data-part="track"] {
height: 8px;
background: #e5e7eb;
border-radius: 4px;
}
[data-scope="progress"][data-part="range"] {
height: 100%;
background: #2563eb;
border-radius: inherit;
}
[data-scope="progress"][data-part="range"][data-state="indeterminate"] {
width: 40%;
animation: fandhe-progress-indeterminate 1.2s ease-in-out infinite;
}
[data-scope="progress"][data-part="track"][data-orientation="vertical"] {
width: 8px;
height: 160px;
}
[data-scope="progress"][data-part="label"][data-orientation="vertical"] {
writing-mode: vertical-rl;
}
@keyframes fandhe-progress-indeterminate {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(250%);
}
}
Accessibility
WAI-ARIA
| Attribute | Description |
|---|---|
| role | root へ "progressbar" を固定付与する(Zag.js は track へ置くが、本実装は Radix Primitives に合わせて root へ配置する)。 |
| aria-valuemin / aria-valuemax | root へ常に出力する下限・上限。 |
| aria-valuenow | determinate(value = Some(_))のときのみ root へ出力する。indeterminate では省略する(WAI-ARIA progressbar ロールの規定どおり)。 |
| aria-valuetext | 呼び出し側が Some を渡したときのみ root へ出力する。 |
| aria-live | value_text へ "polite" を固定付与する(イシュー #1633)。数値の更新を支援技術へ非割り込みで通知する。 |
| aria-label / aria-labelledby | 本コンポーネントは既定値を持たない。意味論的なラベル関連付けは呼び出し側が attrs 経由で配線する責務。 |