Skip to content
fandhe-frontendcore v0.4.3
GitHub

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-text

API Reference

Arguments

NameTypeDefaultDescription
min / maxf640.0 / 100.0値の下限・上限。非有限または min >= max の場合は既定 (0.0, 100.0) へフォールバックする。
valueOption<f64>Some(0.0)現在の値。None は indeterminate(不定進捗)を表す。
orientationOrientationOrientation::Horizontaldata-orientation へ反映する向き。

Data Attributes

PartAttributeObserved Values
labeldata-orientationhorizontal
labeldata-stateloading
rangedata-orientationhorizontal
rangedata-stateloading
rootdata-max100
rootdata-orientationhorizontal
rootdata-stateloading
rootdata-value40
trackdata-orientationhorizontal
trackdata-stateloading
value-textdata-stateloading

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

AttributeDescription
roleroot へ "progressbar" を固定付与する(Zag.js は track へ置くが、本実装は Radix Primitives に合わせて root へ配置する)。
aria-valuemin / aria-valuemaxroot へ常に出力する下限・上限。
aria-valuenowdeterminate(value = Some(_))のときのみ root へ出力する。indeterminate では省略する(WAI-ARIA progressbar ロールの規定どおり)。
aria-valuetext呼び出し側が Some を渡したときのみ root へ出力する。
aria-livevalue_text へ "polite" を固定付与する(イシュー #1633)。数値の更新を支援技術へ非割り込みで通知する。
aria-label / aria-labelledby本コンポーネントは既定値を持たない。意味論的なラベル関連付けは呼び出し側が attrs 経由で配線する責務。