ステータスバーStatusBarExperimental
ステータスや情報を表示するバーです。
プレビュー
記事エディタ
保存済み
バックグラウンド処理なし
UTF-8
状態とバリエーション
ワークスペース状態
同期状態や選択数など、画面全体に関わる軽い状態をまとめます。
同期済み
アップロード待ちはありません
3 件選択中
エディタ情報
保存状態、文字コード、入力モードなどを短く表示します。
記事エディタ
保存済み
バックグラウンド処理なし
UTF-8
注意が必要な状態
切断や未保存など、ユーザーが気づくべき状態は色と文言を変えます。
未保存
接続が不安定です
再接続中
シェル下部の配置
docs のような枠内では fixed を false にし、シェルの下部に配置します。実アプリ全体に固定する場合は fixed の既定値を使います。
アプリケーションの作業領域
準備完了
バックグラウンド処理はありません
v1.4.0
プロパティ
表は横にスクロールできます
| プロパティ | 型 | 初期値 | 説明 |
|---|---|---|---|
| fixed | boolean | true | true の場合は画面下部に固定します。docs やカード内では false にして領域内に置きます。 |
| leftNode | React.ReactNode | - | 左側に表示する状態や補助情報です。 |
| rightNode | React.ReactNode | - | 右側に表示するバージョン、選択数、入力モードなどです。 |
| children | React.ReactNode | - | 中央に表示する主要な状態文です。 |
| className | string | - | ラッパーに追加するクラスです。プレビュー内では幅や色の調整に使います。 |
使い方
import { StatusBar } from "@gunjo/ui"
export function EditorStatusBar() {
return (
<div className="w-full max-w-[720px] overflow-hidden rounded-lg border bg-background">
<div className="border-b bg-muted/40 px-4 py-2 text-sm font-medium">
記事エディタ
</div>
<div className="grid min-h-40 grid-cols-1 text-sm sm:grid-cols-[160px_1fr]">
<aside className="border-r bg-muted/20 p-3 text-muted-foreground">
下書き / 公開設定 / 履歴
</aside>
<main className="space-y-3 p-4">
<div className="h-4 w-2/3 rounded bg-muted" />
<div className="h-3 w-full rounded bg-muted/70" />
<div className="h-3 w-5/6 rounded bg-muted/70" />
</main>
</div>
<StatusBar
fixed={false}
className="w-full"
leftNode={<span>保存済み</span>}
rightNode={<span>UTF-8</span>}
>
<span>バックグラウンド処理なし</span>
</StatusBar>
</div>
)
}設計の判断
- 左右の2つではなく、真ん中を足して3つにした。資料は「左に重要な状態、右に補足情報」の2つの区画を挙げています。GUNJO は
leftNodeとrightNodeに加えて、childrenを真ん中の区画に置きました。左右は幅の3割で頭打ちにしてあるので、いちばん伝えたい一文が両端の情報に押し出されずに済みます。 - 狭い画面では、真ん中だけが上の行に移る。640px 未満では2列の格子になり、真ん中の区画が上の行に回って全幅を取ります。横に3つ並べたまま縮めると3つとも読めない長さになるからです。区画の中身はすべて1行に収めて、溢れた分は省略します。
- 変化の読み上げは入っていません。資料は「バー全体を
aria-liveの領域にして、接続や保存の変化を読み上げる」を挙げています。GUNJO のStatusBarは素のdivで、その指定を持ちません。知らせたい画面は、いまは属性を渡して足します。なおfixedの既定は入りで画面の下に貼り付くので、文書の中に埋めたいときは切ります。
いつ・なぜ使うか(UIXHERO)
「いつ・なぜ使うか」の判断は、姉妹サイト UIXHERO の記事で解説しています。