TimeseriesChart
Spend over time: y labels on the right, a dashed grid, smart time ticks, a crosshair and tooltip.
| Time | GPT-5 | GPT-5 mini | Claude Sonnet 4.5 | Claude Haiku 4.5 |
|---|---|---|---|---|
| Sep 13 | $4.72 | $8.22 | $11.71 | $13.34 |
| Sep 14 | $7.39 | $7.76 | $12.36 | $13.16 |
| Sep 15 | $7.07 | $8.23 | $10.78 | $15.20 |
| Sep 16 | $8.46 | $10.01 | $12.02 | $13.03 |
| Sep 17 | $6.09 | $10.51 | $12.44 | $14.08 |
| Sep 18 | $8.56 | $8.27 | $12.49 | $13.61 |
| Sep 19 | $6.90 | $9.46 | $10.43 | $12.20 |
| Sep 20 | $5.61 | $9.89 | $9.90 | $11.02 |
| Sep 21 | $5.12 | $7.28 | $9.93 | $11.17 |
| Sep 22 | $7.23 | $7.59 | $9.88 | $10.10 |
| Sep 23 | $6.54 | $6.26 | $8.40 | $9.04 |
| Sep 24 | $4.59 | $5.62 | $7.99 | $9.76 |
| Sep 25 | $3.84 | $5.88 | $8.76 | $10.08 |
| Sep 26 | $3.79 | $6.34 | $9.35 | $11.23 |
| Sep 27 | $3.82 | $5.21 | $7.75 | $12.03 |
| Sep 28 | $4.41 | $5.05 | $9.90 | $12.36 |
| Sep 29 | $4.71 | $7.67 | $8.46 | $11.40 |
| Sep 30 | $4.10 | $7.52 | $9.33 | $13.41 |
| Oct 1 | $4.86 | $7.44 | $12.00 | $13.67 |
| Oct 2 | $6.66 | $9.94 | $11.86 | $12.56 |
| Oct 3 | $5.84 | $8.97 | $10.76 | $14.79 |
| Oct 4 | $6.76 | $8.47 | $10.52 | $15.05 |
| Oct 5 | $6.01 | $8.93 | $11.26 | $14.06 |
| Oct 6 | $8.21 | $10.94 | $12.65 | $14.53 |
| Oct 7 | $8.48 | $9.74 | $12.06 | $11.59 |
| Oct 8 | $6.85 | $9.05 | $9.86 | $13.02 |
| Oct 9 | $5.91 | $7.55 | $10.11 | $11.43 |
| Oct 10 | $7.77 | $7.68 | $10.19 | $12.50 |
| Oct 11 | $4.55 | $6.26 | $8.56 | $11.76 |
| Oct 12 | $4.89 | $5.12 | $7.81 | $9.30 |
<div className="w-full">
<TimeseriesChart aria-label="Spend per model, last 30 days" series={series} formatValue={money} />
</div>import { TimeseriesChart } from "@logicplanes/kaeso-ui";Props
aria-labelstringThe chart's accessible name ("Requests by model").
emptybooleanShows the empty state (
emptyText) in place of the data. By default it shows when every value is 0.emptyTextReactNodeWhat the empty state says. Defaults to "No data for this period" in the provider's language.
errorReactNodeThe data failed to load: the chart keeps its height, says so quietly and offers Try again. Errors are toasts, so the value isn't shown; toast the message where the request fails.
formatTime((t: Date) => string)Names a point's time in the tooltip, the table and for screen readers, where a point stands for more than its instant: "Week of 3 Aug", "Aug 2026". The axis keeps its calendar ticks.
formatValue((v: number) => string) = (v) => formatNumber(v)Formats values on the axis and in the tooltip.
heightnumber = 240The plot's height in px (240 by default).
hideLegendbooleanHide the legend (one series).
highlightnumberHighlight a point in time as the pointer does, with the crosshair and tooltip: a linked view, or the states pages.
kind"stacked" | "line" | "area" = linelinedraws lines (default),areaadds a light fill under each line, andstackedstacks the areas.loadingbooleanThe data is loading: the chart keeps its height and shows a quiet loading bar.
onRetry(() => void)Called when Try again is pressed after
error; without it, the button doesn't show.seriesTimeSeries[]The series, each with an
id, alabel,pointsoft(a time) andv, and an optionalcolor.threshold{ value: number; label: string; }A threshold line (a budget) in danger, dashed.