ラベル付きドーナツカードLabeledDonutCardExperimental
中央サマリーと外部ラベルで、セグメントの構成比を読み取りやすくするドーナツカードです。
プレビュー
状態とバリエーション
標準表示
中央サマリーと外部ラベルを持つ、SSOT 登録済みの標準バリエーションです。
プラットフォーム別売上
ラベル付きドーナツ
105合計
選択セグメント
確認中のセグメントをリングと外部ラベル行で強調します。
プラットフォーム別売上
33%
105合計
外部ラベルなし
カード幅が狭い場合や、周辺で凡例を持つ場合は外部ラベルを省略できます。
プラットフォーム別売上
105合計
コンパクト
狭いカードグリッド向けに余白とチャートサイズを抑える、SSOT 登録済みバリエーションです。
プラットフォーム別売上
105合計
値の整形
金額や単位付きの値を、ツールチップと外部ラベル行で同じ形式に整えます。
予算配分
27.5万円予算
補足付き
グラフの読み方や比較条件をカード下部の補足で伝える状態です。
プラットフォーム別売上
105合計
セグメントの構成比を外部ラベル付きで比較します。
プロパティ
表は横にスクロールできます
| プロパティ | 型 | 初期値 | 説明 |
|---|---|---|---|
| segments | { label?: ReactNode; value: number; color?: ChartColor; calloutLabel?: ReactNode; comparison?: ReactNode }[] | - | ドーナツのセグメントと、必要に応じて外側に表示するラベルです。 |
| variant | "default" | "compact" | "default" | カード密度を切り替える生成済みデザインバリアントです。 |
| selectedIndex | number | - | 確認中のセグメントを強調します。 |
| showCallouts | boolean | true | ドーナツの横に外部ラベル行を表示します。 |
| thickness | number | - | ドーナツリングの太さをピクセルで指定します。 |
| formatValue | (value: number) => ReactNode | - | ツールチップと外部ラベル行に表示するセグメント値のフォーマット関数です。 |
| onSegmentSelect | (segment, index) => void | - | ドーナツリングまたは外部ラベル行を選択したときに呼ばれる任意のコールバックです。 |
使い方
import { LabeledDonutCard } from "@gunjo/ui";
const segments = [
{
label: "Amazon",
calloutLabel: "Amazon",
value: 45,
comparison: "販売チャネル 1",
},
{
label: "Alibaba",
calloutLabel: "Alibaba",
value: 35,
comparison: "販売チャネル 2",
},
{
label: "Tokopedia",
calloutLabel: "Tokopedia",
value: 25,
comparison: "販売チャネル 3",
},
];
export function LabeledDonutCardUsage() {
return (
<div className="grid gap-6">
<LabeledDonutCard
segments={segments}
centerValue="105"
centerLabel="合計"
/>
<LabeledDonutCard segments={segments} selectedIndex={1} />
<LabeledDonutCard segments={segments} showCallouts={false} />
<LabeledDonutCard segments={segments} variant="compact" />
</div>
);
}設計の判断
- ドーナツも引き出しラベルも SVG を使わずに置いた。円は
conic-gradient、真ん中の抜きは重ねた丸で作ります。区分の位置は角度から座標を出して、calloutLabelを円のまわりに置きます。showCalloutsをfalseにすると引き出しを畳んで、右の一覧だけの姿になります(狭い枠に入れるとき用)。 - 図の役割が props で変わる。
onSegmentSelectを渡すと図の塊はrole="button"になり、Enter と Space で選べます。渡さなければrole="img"の読み物です。押せそうな見た目なのに押せない、という状態を作らないためです。 - 真ん中の値はカードが決めない。
centerValueとcenterLabelは呼ぶ側が渡します。合計を出すのか、いちばん大きい区分を出すのかは画面の意味で変わるからです。指で触ったときのツールチップは触れた位置に出し、離しても少しの間そこに残します。
一般のカードの設計は UIXHERO の「カード」にあります。 UIXHERO: カード(Card)