Vercel の UI SDK 0.1.0-beta.2 上に構築。API は変わる可能性があります。
Timeline
Vercel の UI SDK で作るタイムライン。アクティビティ、注文の進捗、エージェントの手順向けで、縦横どちらにも並び、ステータス、日時、アイコンの印、フィードモードを備えます。
- データ表示コンポーネント
- 7 個のパーツ
- 8 個の例
@ui-sdk/core@ui-sdk/reactclass-variance-authority
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-timeline.jsonコンポーネント、HextaUIのテーマトークン、依存するHextaUIコンポーネントを追加します。
まだ追加していない場合は、グローバルCSSにテーマトークンを追加してください。
依存関係をインストールします。
pnpm add @ui-sdk/react@0.1.0-beta.2 @ui-sdk/core@0.1.0-beta.2 class-variance-authority cn次のコードをコピーしてプロジェクトに貼り付けてください。
components/ui/ui-sdk-timeline.tsx インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
UI SDK は ui-sdk というカスケードレイヤーに少しだけ独自の CSS を追加します。自分のクラスが優先されるよう、グローバルスタイルシートの先頭、Tailwind の import より上でこのレイヤーを宣言してください。
タイムラインは、アクティビティ、注文の進捗、エージェントの手順など、起きたことやこれから起きることを並べます。スクリーンリーダーにはタブ停止が 1 つのリストとして伝わり、矢印キーでイベント間を移動します。TimelineTime に dateTime を渡すと、表示は親しみやすいまま日付を機械が読めるようになります。UI SDK は 0.1.0-beta.2 でこれを実験的としています。
項目内の部品はすべて任意です。印は専用の列に置かれ、コネクターはそこから次のイベントまで伸び、最後のイベントの後では隠れます。ボタンや折りたたみなど、項目に入れたほかの要素はタイトルにそろいます。
各項目に complete、current、upcoming のいずれかの status を付けます。現在のイベントには aria-current="step" とタブ停止が付き、コントローラーは value でイベントにフォーカスします。印は見た目だけなので、ステータスはタイトルにも書いてください。
TimelineMarker にアイコンを入れると小さな円になります。エージェントの作業中は現在の手順にスピナーを置き、dateTime には PT5S のような期間を入れます。
印の variant は success、warning、destructive、info のいずれかで、空の点にもアイコンにも使えます。
feed を付けると、伸びていくタイムライン向けにリストが記事のフィードになり、Page Down と Page Up で記事間を移動します。続きを読み込む間は busy を設定します。
印と線は右側に移ります。
| キー | アクション |
|---|---|
| ↓↑ | 縦のタイムラインでイベント間を移動します。 |
| →← | 横のタイムラインでイベント間を移動します。右から左の文字では左右が入れ替わります。 |
| HomeEnd | 最初または最後のイベントにフォーカスします。 |
| PageDownPageUp | フィードでは、記事の中のどこからでも次または前の記事にフォーカスします。 |
| Tab | 現在のイベント、なければ最初のイベントに入り、次にその中のリンクやボタンへ移動します。 |
タイムラインは aria-label で名前を付けたリスト、または位置情報付きの記事のフィードです。各イベントはタイトルで名前が付き、日時と説明で説明され、印とコネクターはスクリーンリーダーから隠れます。
フォーカス中のイベントには余白付きのリングが表示されます。印の色は動きが許可されているときだけステータス間でフェードし、強制カラーでは点と線が文字色で描かれます。
各パーツは同名の UI SDK パーツをラップし、render やパーツの状態を受け取る関数にもできる className を含むすべての props を受け付けます。
| プロパティ | 型 | デフォルト |
|---|---|---|
orientation | "vertical" | "horizontal" | "vertical" |
loop | boolean | true |
feed | boolean | false |
busyフィードの読み込み中に aria-busy を設定します。 | boolean | false |
controllercreateTimelineController() で作ります。 | TimelineController | – |
render | ReactElement | (props, state) => ReactElement | – |
| 属性 | 説明 |
|---|---|
data-slot="timeline" | CSS でタイムラインを指定するためのものです。 |
data-orientation | vertical または horizontal。 |
data-busy | フィードが処理中の間に付きます。 |
--timeline-count | ページ内のイベントの数です。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
valueコントローラーの focus() で使うイベントの名前です。 | string | – |
status | "complete" | "current" | "upcoming" | – |
render | ReactElement | (props, state) => ReactElement | – |
| 属性 | 説明 |
|---|---|
data-slot="timeline-item" | CSS でイベントを指定するためのものです。 |
data-complete | イベントのステータスが complete のときに付きます。 |
data-current | イベントのステータスが current のときに付きます。 |
data-upcoming | イベントのステータスが upcoming のときに付きます。 |
data-first | 最初のイベントがページに入った後、そのイベントに付きます。 |
data-last | 最後のイベントがページに入った後、そのイベントに付きます。 |
--timeline-index | 0 から数えたイベントの位置です。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
variant | "default" | "success" | "warning" | "destructive" | "info" | "default" |
childrenアイコンまたは画像です。空なら点を描きます。 | ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| 属性 | 説明 |
|---|---|
data-slot="timeline-marker" | CSS で印を指定するためのものです。 |
data-variant | 印のバリアントです。 |
data-complete | イベントのステータスが complete のときに付きます。 |
data-current | イベントのステータスが current のときに付きます。 |
data-upcoming | イベントのステータスが upcoming のときに付きます。 |
印から次のイベントへの線です。完了したイベントの下では濃く、最後のイベントの後では隠れます。
イベントの名前です。render={<h3 />} で見出しとして描画すると、見出し単位でイベント間を移動できます。
| プロパティ | 型 | デフォルト |
|---|---|---|
dateTime機械が読める日付、時刻、または期間です。イベントを説明します。 | string | – |
イベントの詳しい内容です。イベントを説明します。
- Avatarイニシャルのフォールバック、ステータスバッジ、件数にまとめられる積み重ねグループを備えたユーザー写真です。
- Badge色付きのドットを持つステータスラベル、スライドして閉じる削除可能なタグ、新しい値へ回転するカウントです。
- Cardコンテンツをまとめるサーフェスです。3つのバリアント、端まで広がるメディア、同心円状の角丸、カード全体のリンクに対応します。
- Chartテーマ対応の色を持つRechartsのチャートです。1つの設定からラベルを読み取るツールチップと凡例、見えるフォーカスリングつきのキーボード操作に対応します。
- Data table実データのためのテーブルです。並べ替え、検索、行の選択、固定列、スティッキーヘッダー、ページネーションを備えています。
- Itemリスト、設定、ピッカー向けに、メディア、テキスト、操作を並べた行です。グループ化されたサーフェスと、行の間を滑るように移動するホバーハイライトを備えています。