Spinner
システムが処理中であり、完了時間が確定していないことを示すインジケーター。Thinca 固有のアニメーション付き SVG(360 セグメント / 4.25 秒 1 サイクルの拡縮 + フェード)を public/spinner.svg として配布し、img タグで表示する。色とサイズ(70px)は SVG ファイル内で固定。
プレビュー
配布ファイル
アニメーションは SVG 内の SMIL で完結しています。プロジェクトの public/ などに配置し、img タグで参照してください。
仕様
構造
- SVG 本体:
public/spinner.svg(360 セグメント + SMIL アニメーション内蔵) - primitive:
src/components/ui/spinner.tsx。imgタグで SVG を表示するだけのラッパー - Thinca ラッパー:
src/components/Spinner.tsx。label/classNameの API を提供(sizeプロップは残しているが、原則 default の 70px を使う) - 色: SVG ファイル内に直接記述(コード側からは変更しない)
アニメーション
- SVG 内の
animateTransform(scale)とanimate(opacity)で表現。4.25 秒で 1 サイクル - イージング:
t²の二乗カーブ + 線形 width taper(末端ほど細く透明、先端ほど太く不透明) - CSS の
animationは使わない(SVG ファイル単体で完結)
アクセシビリティ
role="status"+aria-label(default「読み込み中」)を付与
利用基準
使うべき時
- カード内・画面全体のブロック領域に表示してユーザー操作を止める
- AI 要約・分析など完了時間が見積もれない処理の待機
- Skeleton では表現しづらい、レイアウト未確定の処理
使わない時
- ボタン内のローディング表現には使わない → Button の「処理中」状態 (disabled + ラベル進行形) を使う
- ラベル横に小さく並べる用途には使わない → 文言を進行形にして表現する
- 画面全体の初期ロード → Skeleton Loader を使用 (レイアウトを先取りできる)
- 数分以上かかる処理 → 進捗率 (プログレスバー) やバックグラウンド化を検討
- エラーや完了の通知 → Toast を使用
Figma
Figma 側の旧 Spinner デザイン(8 ドットの順次フェード表現)と、過渡期の Material 風 indeterminate は 廃止。実装は Thinca 配布の spinner.svg(360 セグメント / 拡縮 + フェードアニメ内蔵)に統一しました。Figma 側のコンポーネントノードは別途整理予定です。