Caroa UI

Sparkline

数字の横に添える小さな推移の線。軸や目盛りを持たず、形だけを見せる。触れると、その点までの線が濃くなり、印が指に付いて滑る。

インポート

import { Sparkline } from '@caroainc/ui-components/client'

個別サブパス(バンドルサイズを抑えたい場合):

import { Sparkline } from '@caroainc/ui-components/sparkline'

ダッシュボードの数字のカードに、直近の推移を添えるときに使います。高さは最小〜最大の幅で描くので、値の大きさではなく動きの形を見せます。値の大きさを比べたいときはLine Chartを使います。

基本的な使い方

線に触れる(スマートフォンでは指でなぞる)と、触れた点までの線が濃く、その先が薄くなり、点の印が隣の点へ滑って移ります。onActiveChangeで触れた点を受け取り、カードの大きな数字をその日の値に替えると、線をなぞるだけで日ごとの値を見られます(このときはrenderTooltip={() => null}で吹き出しを消します)。

Loading...
<div className="flex flex-col gap-2 rounded-lg border border-border p-4">
  <span className="text-xs text-sub-foreground">チケット売上</span>
  <span className="text-xl font-semibold">27,600円</span>
  <Sparkline aria-label="チケット売上の推移" data={amounts} />
</div>
// なぞった日の値をカードの数字に出す
const [active, setActive] = useState<number | null>(null)
const index = active ?? amounts.length - 1

<span className="text-xl font-semibold">{amounts[index].toLocaleString()}円</span>
<Sparkline data={amounts} onActiveChange={setActive} renderTooltip={() => null} />

吹き出し

カードの数字を替えないときは、触れた点の値を吹き出しで出します。既定は値の3桁区切りです。renderTooltipで日付などを添えられます。

Loading...
<Sparkline
  data={days.map((day) => day.tickets)}
  color="purple"
  renderTooltip={(value, index) => `${days[index].date} ${value}枚`}
/>

既定の大きさはh-8 w-fullです。classNameで変えます。

Props

PropTypeDefaultDescription
datanumber[]-左から順に結ぶ値(必須)
colorChartColor'base'線の色
areabooleantrue線の下を薄く塗る
showLastPointbooleantrue最後の点に印を付ける
renderTooltip(value: number, index: number) => ReactNode-触れた点の吹き出し。nullを返すと出さない
onActiveChange(index: number | null) => void-触れた点が変わったとき(離れたらnull)
aria-labelstring-推移の名前(読み上げ用)。付けると画像として読み上げる