セクションリストSectionListExperimental
事前にグループ化された行を、見出し、本文、小計フッター付きのセクションとして並べます。
プレビュー
2026年6月締め
3社青山商事
広告素材 / 確認済み
確認済み¥248,000
北浜デザイン
LP制作 / レビュー中
レビュー中¥186,000
神田食品
商品撮影 / 未提出
未提出¥128,000
2026年7月締め
2社渋谷出版
SNS運用 / 進行中
進行中¥96,000
西新宿物流
配送管理UI / 確認待ち
確認待ち¥322,000
状態とバリエーション
グループ別
月や荷主など、呼び出し側でまとめた区切りを表示します。
2026年6月締め
3社青山商事
広告素材 / 確認済み
確認済み¥248,000
北浜デザイン
LP制作 / レビュー中
レビュー中¥186,000
神田食品
商品撮影 / 未提出
未提出¥128,000
2026年7月締め
2社渋谷出版
SNS運用 / 進行中
進行中¥96,000
西新宿物流
配送管理UI / 確認待ち
確認待ち¥322,000
小計付き
各セクションの footer に小計行を置けます。
2026年6月締め
3社青山商事
広告素材 / 確認済み
確認済み¥248,000
北浜デザイン
LP制作 / レビュー中
レビュー中¥186,000
神田食品
商品撮影 / 未提出
未提出¥128,000
締め小計¥562,000
2026年7月締め
2社渋谷出版
SNS運用 / 進行中
進行中¥96,000
西新宿物流
配送管理UI / 確認待ち
確認待ち¥322,000
締め小計¥418,000
固定見出し
実際にスクロールする領域で stickyHeaders を使います。
2026年6月締め
3社青山商事
広告素材 / 確認済み
確認済み¥248,000
北浜デザイン
LP制作 / レビュー中
レビュー中¥186,000
神田食品
商品撮影 / 未提出
未提出¥128,000
2026年7月締め
2社渋谷出版
SNS運用 / 進行中
進行中¥96,000
西新宿物流
配送管理UI / 確認待ち
確認待ち¥322,000
プロパティ
表は横にスクロールできます
| プロパティ | 型 | 初期値 | 説明 |
|---|---|---|---|
| sections | SectionListSection[] | - | 事前にグループ化したセクションです。groupBy と小計計算は呼び出し側が持ちます。 |
| stickyHeaders | boolean | false | スクロールコンテナ内で見出しを上部固定します。 |
| label | ReactNode | - | グループ全体のアクセシブル名です。 |
| SectionListSection.title / sublabel | ReactNode | - | 見出しと補助説明です。 |
| SectionListSection.meta | ReactNode | - | 見出し右側の集計表示です。 |
| SectionListSection.content | ReactNode | - | 呼び出し側が所有する行本文です。 |
| SectionListSection.footer | ReactNode | - | セクションごとの小計フッターです。 |
使い方
import { Badge, ListCard, SectionList, type SectionListSection } from "@gunjo/ui";
const sections: SectionListSection[] = [
{
key: "june",
title: "2026年6月締め",
sublabel: "3社",
meta: "¥562,000",
content: (
<div className="divide-y divide-border/70">
<ListCard title="青山商事" description="広告素材 / 確認済み" meta="¥248,000" status={<Badge variant="secondary">確認済み</Badge>} className="rounded-none border-0 bg-background px-3 py-3 shadow-none" />
<ListCard title="北浜デザイン" description="LP制作 / レビュー中" meta="¥186,000" status={<Badge variant="secondary">レビュー中</Badge>} className="rounded-none border-0 bg-background px-3 py-3 shadow-none" />
</div>
),
footer: <><span>締め小計</span><span>¥562,000</span></>,
},
];
export function InvoiceSectionList() {
return (
<div className="w-full max-w-2xl rounded-lg border bg-card p-4">
<SectionList sections={sections} label="締め別 請求一覧" />
</div>
);
}設計の判断
- まとめ方と小計の計算を部品に持たせない。
sectionsは既にまとまった形で渡します。何でまとめるか(取引先か、月か)も、小計の出し方も画面ごとに違うので、部品が持つのは見出しの帯・本文の置き場・小計の帯という共通の枠だけです。 - 中身の形を決めない。
contentにはListCardの並びでも、Tableでも、台帳の行でも入ります。資料は「7項目以上ならセパレータや見出しでまとまりを作る」を挙げていますが、そのまとまりの中身までは決めていません。GUNJO もそこを開けたままにしました。 - 見出しを貼り付けるかどうかは宣言で選ぶ。
stickyHeadersを渡したときだけ、見出しの帯がスクロール中に上へ残ります。既定で貼り付けにしていないのは、短いまとまりが多数並ぶ画面では、帯が次々に積み替わって読みにくくなるためです。
一般のリストの設計は UIXHERO の「リスト」にあります。 UIXHERO: リスト(List)