Foundation
PackagesUIComponents

Spinner

ローディング状態を示す回転アイコンコンポーネント。データ取得中やページ遷移時の待機表示に使用する。

いつ使うか

  • データフェッチ中やページ遷移時に、処理が進行中であることをユーザーに伝えるときに使用する
  • コンテンツの読み込み完了まで待機が必要なエリアに配置する
  • message でユーザーに何が起きているかを補足できる

いつ使わないか

  • ボタン内のローディング表示には使わない。ActionButtonloading prop を使用する
  • ページ全体のスケルトン表示には使わない。Skeleton コンポーネント(未実装)を使用する

Usage

import { Spinner } from '@bi-shop-it/ui/spinner';

<Spinner />
<Spinner size="lg" message="データを読み込んでいます..." />

Props

Propデフォルト説明
size'sm' | 'md' | 'lg''md'スピナーのサイズ
layout'vertical' | 'horizontal''vertical'スピナーとメッセージの並び方向
messagestringスピナーに添える補足テキスト

サイズの使い分け

sizeアイコンサイズ用途
sm16pxインラインやコンパクトなスペースでの使用
md24px一般的なローディング表示
lg32pxページ中央やモーダル内での目立つ表示

状態

デフォルト

読み込み中
<Spinner />

サイズ

読み込み中
sm
読み込み中
md
読み込み中
lg
<Spinner size="sm" />
<Spinner size="md" />
<Spinner size="lg" />

メッセージ付き

message を指定すると、スピナーに補足テキストを表示する。layout で並び方向を切り替えられる。

データを読み込んでいます...

データを読み込んでいます...

{
  /* 縦並び(デフォルト) */
}
<Spinner message="データを読み込んでいます..." />;

{
  /* 横並び */
}
<Spinner layout="horizontal" message="データを読み込んでいます..." />;

色の継承

Spinner は currentColor を使用するため、親要素の color をそのまま継承する。

読み込み中
foreground
読み込み中
primary
読み込み中
destructive
読み込み中
muted
{/* 親要素の text color に応じてスピナーの色が変わる */}
<div className="text-primary">
  <Spinner />
</div>
<div className="text-destructive">
  <Spinner />
</div>

アクセシビリティ

コンポーネントが内部で処理すること

  • コンテナに role="status" を付与し、スクリーンリーダーにライブリージョンとして通知する
  • message がない場合は sr-only テキスト(「読み込み中」)でスクリーンリーダーに状態を伝える
  • 回転アイコンは aria-hidden="true" で装飾として扱い、二重読み上げを防止する
  • prefers-reduced-motion 設定を尊重し、モーション軽減時はアニメーションを停止する

利用者が対応すること

  • message はユーザーにとって意味のあるテキストにすること(「読み込み中...」ではなく「注文履歴を読み込んでいます...」等)
  • 長時間のローディングが予想される場合は、message で状況を伝えることを推奨する

関連コンポーネント

  • ActionButton — ボタン内のローディング表示は loading prop を使用する

On this page