SIG—01 Signature system
Chronicle
A zoomable, multi-lane timeline for incidents, releases and audit trails — spans, instants, a playhead and an overview brush.
Live — this one is real
Illustrative data. Drag to pan, pinch or Ctrl-scroll to zoom, and drag the diamond playhead.
INC-4127 checkout latency
Arrow keys pan, plus and minus zoom, 0 fits every event, Home and End jump to the edges. Pinch or Control-scroll to zoom.
Left and right move through a lane, up and down change lanes, Enter selects, Escape clears.
p95 above 2s
14:05 — 14:34 · 29m 00s · Checkout API
Playhead drives this readoutConnection pool saturated · 5xx rate 4.2% · p95 above 2s · Incident bridge
Usage
import { Chronicle } from "mizu-ui";
export function Example() {
const at = (h: number, m: number) => Date.UTC(2026, 8, 27, h, m);
return (
<Chronicle
label="Checkout incident"
utc
lanes={[
{ id: "deploys", label: "Deploys" },
{ id: "api", label: "API" },
{ id: "alerts", label: "Alerts" },
]}
events={[
{
id: "deploy",
lane: "deploys",
start: at(14, 2),
label: "Deploy v2.41",
tone: "accent",
detail: "Canary promoted to every region.",
},
{
id: "latency",
lane: "api",
start: at(14, 6),
end: at(14, 31),
label: "p95 above 2s",
tone: "danger",
},
{
id: "page",
lane: "alerts",
start: at(14, 9),
label: "On-call paged",
tone: "warning",
},
{
id: "rollback",
lane: "deploys",
start: at(14, 24),
label: "Rollback",
tone: "success",
},
]}
/>
);
}
This code, running — no configuration beyond the data
Checkout incident
Arrow keys pan, plus and minus zoom, 0 fits every event, Home and End jump to the edges. Pinch or Control-scroll to zoom.
Left and right move through a lane, up and down change lanes, Enter selects, Escape clears.
Keyboard
- ←→
- Pan the viewport (Shift for larger steps)
- +−
- Zoom around the playhead or centre
- 0
- Fit every event
- HomeEnd
- Jump to the first or last events
- Ctrl+scroll
- Zoom at the pointer (pinch on touch)
- ←→↑↓
- On an event: move through a lane, change lanes
- Enter·Esc
- Select an event · clear selection
Source & setup
Add this component to your project with the shadcn CLI. The command copies its source into your configured UI directory, with its source module’s stylesheet and base.css, Mizu’s tokens. In a project without a components.json, run npx shadcn@latest init 0xuser64bit/mizu/preset first: plain init installs shadcn’s theme into your global CSS. Then load the fonts.
npx shadcn@latest add 0xuser64bit/mizu/chronicleEvery component imports from its own path, its name in kebab case.
import { Chronicle } from "@/components/ui/mizu/chronicle";For npm imports, import mizu-ui/styles.css once. Fonts are optional via mizu-ui/fonts.css. Override --mizu-* tokens or use className for local styling. Requires React and Motion. A Client Component: its source starts with “use client”.
Inspect signature/Chronicle.tsx
Source is included in the npm package under src/signature/Chronicle.tsx.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| label | string | — | Accessible name and visible heading. |
| events | ChronicleEvent[] | — | id, lane, start, optional end (omit for an instant), label, tone and detail content. |
| lanes | ChronicleLane[] | — | Lane order and names. Derived from the events when omitted. |
| range / defaultRange / onRangeChange | [number, number] | — | Visible interval in ms. Fits every event until the viewer moves. |
| cursor / defaultCursor / onCursorChange | number | — | Playhead time. Supply either to show it and drive other views. |
| selected / defaultSelected / onSelectedChange | string | null | — | Selected event id; its detail opens beneath the lanes. |
| now | number | Date | — | Marks the present. |
| utc | boolean | false | Align and label time in UTC. |
| minSpan | number | 1000 | Smallest visible interval in ms. |
| loading / empty | boolean / ReactNode | — | Loading and empty states. |
Accessibility
The viewport is a focusable region with keyboard panning and zoom. Events form a listbox grouped by lane; each option names its label, time and duration, and selection is announced. The playhead is a slider with readable time. The overview brush is a pointer shortcut — every action has a keyboard path.
Motion
Events sweep in left to right on first view. Button and keyboard zooms glide in log space so scale changes feel even; drags pan directly and coast to rest. Reduced motion removes the sweep, glide and coasting.