Skip to content
fandhe-frontend
GitHub

Timer

カウントダウン/カウントアップを表示する unstyled 部品です。時計 API を一切使わず、時間の前進は tick(デルタミリ秒)の明示的な注入のみで進む決定的な状態機械です。

Themes 版(fandhe-frontend-pre-styled-ui)はこの構造へ既定 CSS を追加するだけの薄いラッパーであり、CSS は持ちません。スタイル済みの表示例は Timer を参照してください。

実際の計時駆動(setInterval 相当)はクライアントランタイム側の責務であり、本部品は経過値の表示 anatomy と現在フェーズの表示状態のみを提供します。

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

Demo

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

00min
:
45sec

Features

  • Root/Area/Item/ItemValue/ItemLabel/Separator/Control/ActionTrigger の 8 anatomy パーツと、idle/running/paused/completed の 4 値状態機械 `Timer` を提供する。
  • 時計 API(`std::time`・`Instant`・`js_sys::Date`)を一切使用しない。時間の前進は `TimerAction::Tick`(デルタミリ秒)の明示的注入のみで行われ、同一 tick 列を dispatch すれば常に同一の状態列に到達する決定的設計。
  • `countdown`/`start_ms`/`target_ms`/`interval_ms`/`elapsed_ms` を `data-*` としてそのまま出力し、クライアント配線層がこれらを読み取って tick 駆動・完了判定の表示反映を行う契約。
  • 実 tick 駆動(`setInterval` 相当)・ロケール依存の表示形式は本コンポーネントの責務外であり、ミリ秒の加算とゼロ埋め 2 桁整形のみを提供する(`docs/policy/intentional-non-adoption.md` §3.25)。

Anatomy

root
  area
    item
      item-value
      item-label
    separator
  control
    action-trigger

API Reference

Arguments

NameTypeDefaultDescription
countdownbool(必須)カウントダウン(`true`)かカウントアップ(`false`)か。
start_ms / target_msu64(必須)カウントダウンの開始値・カウントアップの目標値(`target_ms = 0` は無期限)。
interval_msu641000tick の間隔(表示上のヒント。実 tick 駆動はクライアント配線層の責務)。
elapsed_msu640経過ミリ秒。`data-elapsed` へ反映される。
phaseTimerPhase(必須)`data-state` へ反映する現在フェーズ(idle/running/paused/completed)。

Data Attributes

PartAttributeObserved Values
action-triggerdata-actionpause, reset
itemdata-typeminutes, seconds
item-labeldata-typeminutes, seconds
item-valuedata-typeminutes, seconds
rootdata-countdown
rootdata-elapsed15000
rootdata-interval1000
rootdata-start-ms0
rootdata-staterunning
rootdata-target-ms60000

Examples

完了状態(Completed)

`TimerPhase::Completed` を渡すと `data-state="completed"` となり、`action_trigger` は Reset のみを表示する構成にできます。

00sec

Accessibility

Keyboard Interactions

KeyDescription
Tab / Space / Enter`action_trigger` はネイティブ `<button type="button">` であり、フォーカス・押下操作はブラウザ既定動作で成立する。