Line, area or bar chart over time: axes, readout, touch scrubbing and a data table.
- Visitors
- Sign-ups
| Date | Visitors | Sign-ups |
|---|---|---|
| Tue, Sep 1, 2026 | 405 | 103 |
| Wed, Sep 2, 2026 | 435 | 115 |
| Thu, Sep 3, 2026 | 464 | 128 |
| Fri, Sep 4, 2026 | 461 | 124 |
| Sat, Sep 5, 2026 | 340 | 94 |
| Sun, Sep 6, 2026 | 355 | 100 |
| Mon, Sep 7, 2026 | 494 | 135 |
| Tue, Sep 8, 2026 | 508 | 140 |
| Wed, Sep 9, 2026 | 519 | 143 |
| Thu, Sep 10, 2026 | 496 | 130 |
| Fri, Sep 11, 2026 | 500 | 130 |
| Sat, Sep 12, 2026 | 330 | 80 |
| Sun, Sep 13, 2026 | 331 | 79 |
| Mon, Sep 14, 2026 | 472 | 110 |
| Tue, Sep 15, 2026 | 443 | 93 |
| Wed, Sep 16, 2026 | 444 | 92 |
| Thu, Sep 17, 2026 | 448 | 92 |
| Fri, Sep 18, 2026 | 425 | No data |
| Sat, Sep 19, 2026 | 304 | No data |
| Sun, Sep 20, 2026 | 314 | 60 |
| Mon, Sep 21, 2026 | 436 | 78 |
| Tue, Sep 22, 2026 | 457 | 86 |
| Wed, Sep 23, 2026 | 451 | 81 |
| Thu, Sep 24, 2026 | 477 | 93 |
| Fri, Sep 25, 2026 | 506 | 105 |
| Sat, Sep 26, 2026 | 354 | 72 |
| Sun, Sep 27, 2026 | 375 | 81 |
| Mon, Sep 28, 2026 | 565 | 128 |
| Tue, Sep 29, 2026 | 562 | 125 |
| Wed, Sep 30, 2026 | 587 | 135 |
| Date | Uploads |
|---|---|
| Tue, Sep 1, 2026 | 60 |
| Wed, Sep 2, 2026 | 67 |
| Thu, Sep 3, 2026 | 75 |
| Fri, Sep 4, 2026 | 73 |
| Sat, Sep 5, 2026 | 55 |
| Sun, Sep 6, 2026 | 59 |
| Mon, Sep 7, 2026 | 79 |
| Tue, Sep 8, 2026 | 82 |
| Wed, Sep 9, 2026 | 84 |
| Thu, Sep 10, 2026 | 76 |
| Fri, Sep 11, 2026 | 76 |
| Sat, Sep 12, 2026 | 46 |
| Sun, Sep 13, 2026 | 46 |
| Mon, Sep 14, 2026 | 64 |
| Tue, Sep 15, 2026 | 54 |
| Wed, Sep 16, 2026 | 53 |
| Thu, Sep 17, 2026 | 53 |
| Fri, Sep 18, 2026 | 45 |
| Sat, Sep 19, 2026 | 33 |
| Sun, Sep 20, 2026 | 35 |
| Mon, Sep 21, 2026 | 45 |
| Tue, Sep 22, 2026 | 50 |
| Wed, Sep 23, 2026 | 47 |
| Thu, Sep 24, 2026 | 54 |
| Fri, Sep 25, 2026 | 61 |
| Sat, Sep 26, 2026 | 42 |
| Sun, Sep 27, 2026 | 47 |
| Mon, Sep 28, 2026 | 75 |
| Tue, Sep 29, 2026 | 73 |
| Wed, Sep 30, 2026 | 79 |
Usage
<script lang="ts">
import TimeSeriesChart, {
type TimeSeries,
} from "@zedensix/ui/blocks/time-series-chart";
const days = Array.from(
{ length: 30 },
(_, index) => new Date(2026, 8, 1 + index),
);
function wave(index: number, base: number, swing: number) {
const weekend = [0, 6].includes(days[index]?.getDay() ?? 1) ? 0.7 : 1;
const ripple = ((index * 37) % 11) / 11 - 0.5;
return Math.round(
(base + swing * Math.sin(index / 4) + (swing / 2) * ripple) * weekend,
);
}
const traffic: TimeSeries[] = [
{
name: "Visitors",
points: days.map((at, index) => ({
at,
value: wave(index, 420 + index * 4, 60),
})),
},
{
name: "Sign-ups",
points: days.map((at, index) => ({
at,
value: index === 17 || index === 18 ? null : wave(index, 110, 30),
})),
},
];
const uploads: TimeSeries[] = [
{
name: "Uploads",
points: days.map((at, index) => ({
at,
value: wave(index, 64, 18),
})),
},
];
</script>
<div class="grid w-full gap-10">
<TimeSeriesChart
title="Visitors and sign-ups"
description="September, per day. Sign-ups weren't tracked on the 18th and 19th."
series={traffic}
/>
<TimeSeriesChart
title="Daily uploads"
kind="bar"
height={200}
series={uploads}
/>
</div>