@xeonr/platform-ui 1.9.0 → 1.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,327 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useLayoutEffect, useMemo, useRef, useState } from "react";
3
+ import styled from "styled-components";
4
+ import { Link } from "react-router-dom";
5
+ import { v } from "../theme/tokens.js";
6
+ import { fmtCount } from "./Facet.js";
7
+ import { Tooltip } from "./Tooltip.js";
8
+ import { Sparkline } from "./Sparkline.js";
9
+ import { LegendNote } from "./ChartFrame.js";
10
+ import { CHART_SIZES, TONE_COLOUR, niceTicks, percentileToken, spaced, timeDetail, timeTicks, useChartSize, } from "./chartScale.js";
11
+ // The chart types that are not a line over time (board 33): a value
12
+ // distribution, a ranked list, a heatmap, a single value and a state timeline.
13
+ // Each shares the anatomy — the frame's title row and states, the sizes, the
14
+ // ramp and the tones — and each has one job.
15
+ /** Measures an element's width for a chart drawn at its real size; 600 where there is no ResizeObserver. */
16
+ function useWidth(dep) {
17
+ const ref = useRef(null);
18
+ const [width, setWidth] = useState(600);
19
+ useLayoutEffect(() => {
20
+ const el = ref.current;
21
+ if (!el || typeof ResizeObserver === "undefined")
22
+ return;
23
+ const measure = () => { const w = el.getBoundingClientRect().width; if (w > 0)
24
+ setWidth(Math.max(120, Math.round(w))); };
25
+ measure();
26
+ const ro = new ResizeObserver(measure);
27
+ ro.observe(el);
28
+ return () => ro.disconnect();
29
+ }, [dep]);
30
+ return [ref, width];
31
+ }
32
+ const Box = styled.div `position: relative; min-width: 0;`;
33
+ const Svg = styled.svg `
34
+ display: block; width: 100%; overflow: visible; user-select: none;
35
+ text { font-family: ${v.mono}; font-variant-numeric: tabular-nums; }
36
+ &:focus { outline: none; }
37
+ &:focus-visible { outline: 2px solid ${v.brand55}; outline-offset: 2px; border-radius: 4px; }
38
+ `;
39
+ const Empty = styled.div `
40
+ height: ${(p) => p.$h}px; display: grid; place-items: center; color: ${v.faint}; font-size: 12px;
41
+ `;
42
+ const Readout = styled.div `
43
+ position: absolute; top: 4px; pointer-events: none; z-index: ${v.zPop};
44
+ padding: 5px 8px; border: 1px solid ${v.line2}; border-radius: 8px; background: ${v.surface2}; box-shadow: ${v.elev};
45
+ font-family: ${v.mono}; font-size: 11px; color: ${v.text}; white-space: nowrap;
46
+ .d { color: ${v.faint}; }
47
+ `;
48
+ const Notes = styled.div `display: flex; flex-wrap: wrap; gap: 2px 4px; padding-top: 4px;`;
49
+ /**
50
+ * DistributionChart: a histogram of values (latency over a window) with the
51
+ * percentiles marked — p50 light to p99 hot. The point of this shape over
52
+ * percentile lines is the bimodal case: two humps, a fast path and a slow one,
53
+ * that a p99 line renders as one number halfway between two behaviours nothing
54
+ * actually exhibits.
55
+ *
56
+ * Buckets arrive pre-binned and are drawn one bar each, so exponential buckets
57
+ * give a log axis without saying so; the value ticks (1 · 3 · 10 …) and the
58
+ * percentile lines are placed within their bucket on the same scale. A click
59
+ * on a bar is `onBucketClick` (its traces); a drag is `onSelectRange`.
60
+ */
61
+ export function DistributionChart({ buckets, percentiles = [], formatValue = (n) => String(Number(n.toPrecision(3))), formatCount = fmtCount, size: sizeProp, height, label = "Distribution", empty = "No observations in this window.", onBucketClick, onSelectRange, legend, testId, }) {
62
+ const size = useChartSize(sizeProp);
63
+ const spec = CHART_SIZES[size];
64
+ const H = height ?? spec.height;
65
+ const axes = spec.yTicks > 0;
66
+ const [ref, width] = useWidth(buckets.length > 0);
67
+ const [hover, setHover] = useState(null);
68
+ const [drag, setDrag] = useState(null);
69
+ const downX = useRef(null);
70
+ if (buckets.length === 0)
71
+ return _jsx(Box, { ref: ref, "data-testid": testId, children: _jsx(Empty, { "$h": H, children: empty }) });
72
+ const n = buckets.length;
73
+ const maxCount = Math.max(1, ...buckets.map((b) => b.count));
74
+ const yt = axes ? niceTicks(0, maxCount, Math.max(2, spec.yTicks - 1)) : { ticks: [0, maxCount], max: maxCount, min: 0 };
75
+ const yLabels = yt.ticks.map((t) => formatCount(t));
76
+ const padL = axes ? Math.max(26, Math.ceil(Math.max(...yLabels.map((s) => s.length)) * 6.2) + 10) : 0;
77
+ const padR = axes ? 10 : 0;
78
+ const padT = axes ? 16 : 2;
79
+ const padB = axes ? 20 : 2;
80
+ const plotW = Math.max(10, width - padL - padR);
81
+ const plotH = Math.max(10, H - padT - padB);
82
+ const bottom = padT + plotH;
83
+ const bw = plotW / n;
84
+ const y = (c) => bottom - (c / yt.max) * plotH;
85
+ // A value's place on the bucket axis: its bucket, then within it (log when both bounds are positive).
86
+ const pos = (val) => {
87
+ let i = buckets.findIndex((b) => val <= b.upper);
88
+ if (i < 0)
89
+ i = n - 1;
90
+ const b = buckets[i];
91
+ const within = b.upper <= b.lower ? 0
92
+ : b.lower > 0 ? (Math.log(Math.max(val, b.lower)) - Math.log(b.lower)) / (Math.log(b.upper) - Math.log(b.lower))
93
+ : (val - b.lower) / (b.upper - b.lower);
94
+ return padL + (i + Math.min(1, Math.max(0, within))) * bw;
95
+ };
96
+ const valueAt = (px) => {
97
+ const i = Math.min(n - 1, Math.max(0, Math.floor((px - padL) / bw)));
98
+ const b = buckets[i];
99
+ const within = Math.min(1, Math.max(0, (px - padL) / bw - i));
100
+ return b.lower > 0 ? Math.exp(Math.log(b.lower) + within * (Math.log(b.upper) - Math.log(b.lower))) : b.lower + within * (b.upper - b.lower);
101
+ };
102
+ const lo = buckets[0].lower;
103
+ const hi = buckets[n - 1].upper;
104
+ // Ticks at 1 · 3 × 10ⁿ on a positive axis — from the first positive bound
105
+ // when the first bucket starts at zero — spaced so their labels never touch.
106
+ const xTicks = [];
107
+ const firstPositive = lo > 0 ? lo : buckets.find((b) => b.upper > 0)?.upper ?? 0;
108
+ const geometric = hi > 0 && firstPositive > 0 && hi / firstPositive >= 20;
109
+ if (axes) {
110
+ if (geometric) {
111
+ if (lo <= 0)
112
+ xTicks.push(lo);
113
+ for (let e = Math.floor(Math.log10(firstPositive)); e <= Math.ceil(Math.log10(hi)); e++) {
114
+ for (const m of [1, 3]) {
115
+ const t = m * 10 ** e;
116
+ if (t >= firstPositive && t <= hi)
117
+ xTicks.push(t);
118
+ }
119
+ }
120
+ }
121
+ else
122
+ xTicks.push(...niceTicks(lo, hi, 5).ticks.filter((t) => t >= lo && t <= hi));
123
+ }
124
+ const tickPx = xTicks.map((t) => pos(t));
125
+ const keepTick = spaced(tickPx, xTicks.map((t) => formatValue(t).length * 6.2 + 12));
126
+ const xMarks = xTicks.map((t, i) => ({ t, px: tickPx[i] })).filter((_m, i) => keepTick[i]);
127
+ const byValue = [...percentiles].sort((a, b) => a.value - b.value);
128
+ const markPx = byValue.map((p) => pos(p.value));
129
+ const markLabel = (p) => `p${p.p} ${formatValue(p.value)}`;
130
+ const keepMark = spaced(markPx, byValue.map((p) => markLabel(p).length * 6.2 + 8));
131
+ const marks = byValue.map((p, i) => ({ ...p, px: markPx[i], show: keepMark[i] }));
132
+ const toLocal = (clientX, el) => {
133
+ const r = el.getBoundingClientRect();
134
+ return ((clientX - r.left) / Math.max(1, r.width)) * width;
135
+ };
136
+ const idxOf = (px) => Math.min(n - 1, Math.max(0, Math.floor((px - padL) / bw)));
137
+ const interactive = !!onBucketClick || !!onSelectRange;
138
+ const handlers = {
139
+ onPointerMove: (e) => {
140
+ const px = toLocal(e.clientX, e.currentTarget);
141
+ setHover(px >= padL && px <= padL + plotW ? idxOf(px) : null);
142
+ if (drag)
143
+ setDrag({ from: drag.from, to: px });
144
+ },
145
+ onPointerLeave: () => { setHover(null); setDrag(null); },
146
+ onPointerDown: (e) => {
147
+ const px = toLocal(e.clientX, e.currentTarget);
148
+ downX.current = px;
149
+ if (onSelectRange)
150
+ setDrag({ from: px, to: px });
151
+ },
152
+ onPointerUp: (e) => {
153
+ const px = toLocal(e.clientX, e.currentTarget);
154
+ const start = downX.current;
155
+ downX.current = null;
156
+ setDrag(null);
157
+ if (onSelectRange && start !== null && Math.abs(px - start) > 6) {
158
+ const [a, b] = [start, px].sort((p, q) => p - q);
159
+ onSelectRange(valueAt(a), valueAt(b));
160
+ return;
161
+ }
162
+ if (onBucketClick && start !== null) {
163
+ const i = idxOf(px);
164
+ onBucketClick(buckets[i], i);
165
+ }
166
+ },
167
+ };
168
+ const hb = hover !== null ? buckets[hover] : undefined;
169
+ const showLegend = (legend ?? spec.legend) && marks.length > 0;
170
+ return (_jsxs(Box, { "data-testid": testId, children: [_jsxs("div", { ref: ref, style: { position: "relative" }, children: [_jsxs(Svg, { width: "100%", height: H, viewBox: `0 0 ${width} ${H}`, preserveAspectRatio: "none", role: "img", "aria-label": label, style: { cursor: interactive ? "pointer" : "default" }, ...handlers, children: [axes ? yt.ticks.map((t, i) => (_jsxs("g", { children: [t > 0 ? _jsx("line", { x1: padL, x2: padL + plotW, y1: y(t), y2: y(t), stroke: v.line }) : null, _jsx("text", { x: padL - 6, y: y(t) + 3.5, textAnchor: "end", fontSize: 10, fill: v.faint, children: yLabels[i] })] }, `y${t}`))) : null, buckets.map((b, i) => {
171
+ const h = b.count > 0 ? Math.max(1.5, bottom - y(b.count)) : 0;
172
+ return (_jsx("rect", { x: padL + i * bw + 0.5, y: bottom - h, width: Math.max(0.5, bw - 1), height: h, fill: v.chartInfo, opacity: hover === i ? 1 : 0.7, "data-testid": testId ? `${testId}-bar` : undefined, children: _jsx("title", { children: `${formatValue(b.lower)} – ${formatValue(b.upper)}: ${formatCount(b.count)}` }) }, i));
173
+ }), axes ? _jsx("line", { x1: padL, x2: padL + plotW, y1: bottom, y2: bottom, stroke: v.line2 }) : null, xMarks.map((m) => (_jsx("text", { x: m.px, y: H - 5, fontSize: 10, fill: v.faint, textAnchor: m.px - padL < 16 ? "start" : "middle", children: formatValue(m.t) }, m.t))), marks.map((m) => (_jsxs("g", { children: [_jsx("line", { x1: m.px, x2: m.px, y1: padT, y2: bottom, stroke: percentileToken(m.p), strokeDasharray: "4 3" }), m.show && axes ? _jsx("text", { x: m.px + 3, y: padT - 4, fontSize: 10, fill: percentileToken(m.p), children: markLabel(m) }) : null] }, m.p))), drag && Math.abs(drag.to - drag.from) > 2 ? (_jsx("rect", { x: Math.min(drag.from, drag.to), width: Math.abs(drag.to - drag.from), y: padT, height: plotH, fill: v.brand16, stroke: v.brand55 })) : null] }), hb && !drag && size !== "s" ? (_jsxs(Readout, { style: hover > n / 2 ? { right: width - (padL + hover * bw) + 6 } : { left: padL + (hover + 1) * bw + 6 }, children: [formatValue(hb.lower), " \u2013 ", formatValue(hb.upper), " ", _jsx("span", { className: "d", children: "\u00B7" }), " ", formatCount(hb.count), onBucketClick ? _jsx("span", { className: "d", children: " \u00B7 click for its traces" }) : null] })) : null] }), showLegend ? (_jsx(Notes, { "aria-label": "Percentiles", children: marks.map((m) => _jsx(LegendNote, { colour: percentileToken(m.p), dashed: true, children: `p${m.p} ${formatValue(m.value)}` }, m.p)) })) : null] }));
174
+ }
175
+ const Rows = styled.ol `list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; min-width: 0;`;
176
+ const RowItem = styled.li `min-width: 0;`;
177
+ const RowBody = styled.div `
178
+ position: relative;
179
+ display: grid;
180
+ grid-template-columns: minmax(0, 1fr) auto;
181
+ align-items: center;
182
+ gap: 10px;
183
+ min-height: 24px;
184
+ padding: 3px 8px;
185
+ border-radius: 6px;
186
+ color: ${v.text};
187
+ text-decoration: none;
188
+ font-size: 12px;
189
+ cursor: ${(p) => (p.$link ? "pointer" : "default")};
190
+ .bar { position: absolute; inset: 2px auto 2px 0; border-radius: 5px; opacity: 0.18; pointer-events: none; }
191
+ .l { position: relative; font-family: ${v.mono}; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
192
+ .v { position: relative; font-family: ${v.mono}; font-variant-numeric: tabular-nums; color: ${v.text}; font-weight: 600; }
193
+ &:hover { background: ${(p) => (p.$link ? v.hover : "transparent")}; }
194
+ &:focus-visible { outline: none; box-shadow: ${v.ring}; }
195
+ `;
196
+ const BUTTON_RESET = { width: "100%", border: 0, background: "none", font: "inherit", fontSize: 12, textAlign: "left" };
197
+ /**
198
+ * TopList: ranked horizontal bars with the value — p99 by endpoint, errors by
199
+ * route. Rows are sorted by value, highest first (`order="asc"` for a list
200
+ * that reads worst-lowest, a coverage list), and cut at `max`; a row with `to`
201
+ * or `onSelect` opens the thing it ranks.
202
+ */
203
+ export function TopList({ rows, formatValue = fmtCount, max = 10, order = "desc", label = "Top list", empty = "Nothing to rank in this window.", testId }) {
204
+ const sorted = useMemo(() => [...rows].sort((a, b) => (order === "asc" ? a.value - b.value : b.value - a.value)).slice(0, max), [rows, max, order]);
205
+ if (sorted.length === 0)
206
+ return _jsx(Empty, { "$h": 80, "data-testid": testId, children: empty });
207
+ const top = Math.max(...sorted.map((r) => Math.abs(r.value)), 1e-12);
208
+ return (_jsx(Rows, { "aria-label": label, "data-testid": testId, children: sorted.map((r) => {
209
+ const inner = (_jsxs(_Fragment, { children: [_jsx("span", { className: "bar", style: { width: `${Math.max(1, (Math.abs(r.value) / top) * 100)}%`, background: r.colour ?? (r.tone ? TONE_COLOUR[r.tone] : v.series1) } }), _jsx("span", { className: "l", title: r.title ?? (typeof r.label === "string" ? r.label : undefined), children: r.label }), _jsx("span", { className: "v", children: r.display ?? formatValue(r.value) })] }));
210
+ return (_jsx(RowItem, { children: r.to ? _jsx(RowBody, { as: Link, to: r.to, "$link": true, children: inner })
211
+ : r.onSelect ? _jsx(RowBody, { as: "button", type: "button", "$link": true, onClick: r.onSelect, style: BUTTON_RESET, children: inner })
212
+ : _jsx(RowBody, { "$link": false, children: inner }) }, r.key));
213
+ }) }));
214
+ }
215
+ /**
216
+ * Heatmap: value buckets × time, intensity = count — the shape of a latency
217
+ * tail without a line per percentile. `bounds` are the value buckets' edges,
218
+ * bottom up (one more than each column's counts). Intensity is on a log scale
219
+ * so one busy cell does not wash out the rest.
220
+ */
221
+ export function Heatmap({ columns, bounds, formatValue = (n) => String(Number(n.toPrecision(3))), formatTime, size: sizeProp, height, label = "Heatmap", empty = "No samples in range", onCellClick, testId }) {
222
+ const size = useChartSize(sizeProp);
223
+ const spec = CHART_SIZES[size];
224
+ const H = height ?? spec.height;
225
+ const axes = spec.yTicks > 0;
226
+ const [ref, width] = useWidth(columns.length > 0);
227
+ const [hover, setHover] = useState(null);
228
+ const sorted = useMemo(() => [...columns].sort((a, b) => a.t - b.t), [columns]);
229
+ if (sorted.length === 0 || bounds.length < 2)
230
+ return _jsx(Box, { ref: ref, "data-testid": testId, children: _jsx(Empty, { "$h": H, children: empty }) });
231
+ const rowsN = bounds.length - 1;
232
+ const step = sorted.length > 1 ? sorted[1].t - sorted[0].t : 60_000;
233
+ const from = sorted[0].t;
234
+ const to = sorted[sorted.length - 1].t + step;
235
+ const maxC = Math.max(1, ...sorted.flatMap((c) => c.counts));
236
+ const yLabelsAll = bounds.map((b) => formatValue(b));
237
+ const padL = axes ? Math.max(30, Math.ceil(Math.max(...yLabelsAll.map((s) => s.length)) * 6.2) + 10) : 0;
238
+ const padR = axes ? 10 : 0;
239
+ const padT = axes ? 6 : 1;
240
+ const padB = axes ? 20 : 1;
241
+ const plotW = Math.max(10, width - padL - padR);
242
+ const plotH = Math.max(10, H - padT - padB);
243
+ const cw = plotW / sorted.length;
244
+ const rh = plotH / rowsN;
245
+ const x = (t) => padL + ((t - from) / (to - from)) * plotW;
246
+ const intensity = (c) => (c <= 0 ? 0 : 0.12 + 0.88 * (Math.log1p(c) / Math.log1p(maxC)));
247
+ // Value labels at about four bounds, bottom to top.
248
+ const every = Math.max(1, Math.ceil(rowsN / 4));
249
+ const xMarks = axes ? timeTicks(from, to, Math.min(spec.xTicks, Math.max(2, Math.floor(plotW / 70))), formatTime) : [];
250
+ const detail = formatTime ?? timeDetail(step);
251
+ const cell = hover ? { col: sorted[hover.c], r: hover.r } : null;
252
+ return (_jsx(Box, { "data-testid": testId, children: _jsxs("div", { ref: ref, style: { position: "relative" }, children: [_jsxs(Svg, { width: "100%", height: H, viewBox: `0 0 ${width} ${H}`, preserveAspectRatio: "none", role: "img", "aria-label": label, onPointerMove: (e) => {
253
+ const r = e.currentTarget.getBoundingClientRect();
254
+ const px = ((e.clientX - r.left) / Math.max(1, r.width)) * width;
255
+ const py = ((e.clientY - r.top) / Math.max(1, r.height)) * H;
256
+ const c = Math.floor((px - padL) / cw);
257
+ const row = rowsN - 1 - Math.floor((py - padT) / rh);
258
+ setHover(c >= 0 && c < sorted.length && row >= 0 && row < rowsN ? { c, r: row } : null);
259
+ }, onPointerLeave: () => setHover(null), onClick: onCellClick ? () => {
260
+ if (!cell)
261
+ return;
262
+ onCellClick({ t: cell.col.t, lower: bounds[cell.r], upper: bounds[cell.r + 1], count: cell.col.counts[cell.r] ?? 0 });
263
+ } : undefined, style: { cursor: onCellClick ? "pointer" : "default" }, children: [sorted.map((col, ci) => col.counts.map((c, ri) => {
264
+ const a = intensity(c);
265
+ if (a === 0)
266
+ return null;
267
+ return _jsx("rect", { x: padL + ci * cw, y: padT + (rowsN - 1 - ri) * rh, width: Math.max(0.5, cw - 0.5), height: Math.max(0.5, rh - 0.5), fill: v.pct99, opacity: a }, `${ci}-${ri}`);
268
+ })), axes ? bounds.map((_b, i) => (i % every === 0 ? (_jsx("text", { x: padL - 6, y: padT + (rowsN - i) * rh + 3.5, textAnchor: "end", fontSize: 10, fill: v.faint, children: yLabelsAll[i] }, `y${i}`)) : null)) : null, axes ? _jsx("line", { x1: padL, x2: padL + plotW, y1: padT + plotH, y2: padT + plotH, stroke: v.line2 }) : null, xMarks.map((tk, i) => (_jsx("text", { x: x(tk.t), y: H - 5, fontSize: 10, fill: v.faint, opacity: tk.dim ? 0.6 : 1, textAnchor: "middle", children: tk.label }, `x${i}`))), hover ? _jsx("rect", { x: padL + hover.c * cw, y: padT + (rowsN - 1 - hover.r) * rh, width: cw, height: rh, fill: "none", stroke: v.text, strokeWidth: 1 }) : null] }), cell && size !== "s" ? (_jsxs(Readout, { style: hover.c > sorted.length / 2 ? { right: width - (padL + hover.c * cw) + 6 } : { left: padL + (hover.c + 1) * cw + 6 }, children: [detail(cell.col.t), " ", _jsx("span", { className: "d", children: "\u00B7" }), " ", formatValue(bounds[cell.r]), " \u2013 ", formatValue(bounds[cell.r + 1]), " ", _jsx("span", { className: "d", children: "\u00B7" }), " ", fmtCount(cell.col.counts[cell.r] ?? 0)] })) : null] }) }));
269
+ }
270
+ // ---------------------------------------------------------------------------
271
+ // SingleValue
272
+ // ---------------------------------------------------------------------------
273
+ const SV = styled.div `
274
+ display: grid;
275
+ gap: 4px;
276
+ min-width: 0;
277
+ align-content: ${(p) => (p.$size === "s" ? "start" : "center")};
278
+ min-height: ${(p) => (p.$size === "s" ? 0 : CHART_SIZES[p.$size].height * 0.6)}px;
279
+ .num {
280
+ font-size: ${(p) => (p.$size === "s" ? 20 : p.$size === "m" ? 32 : 44)}px;
281
+ font-weight: 650; letter-spacing: -0.02em; color: ${v.text}; line-height: 1.1;
282
+ font-variant-numeric: tabular-nums; white-space: nowrap;
283
+ }
284
+ .num .u { font-size: 0.5em; font-weight: 500; color: ${v.muted}; margin-left: 3px; letter-spacing: 0; }
285
+ .sub { font-size: 11.5px; color: ${v.faint}; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
286
+ .d { font-variant-numeric: tabular-nums; }
287
+ .d.ok { color: ${v.chartOk}; } .d.warn { color: ${v.chartWarn}; } .d.crit { color: ${v.chartCrit}; }
288
+ `;
289
+ /**
290
+ * SingleValue: one number, its delta and an S sparkline — the stat tile's
291
+ * chart form ("98.4 % · availability · 30 d · ↑ 0.3 pt vs prior"). At `s` it
292
+ * is a tile's body; at M and up it fills a widget cell.
293
+ */
294
+ export function SingleValue({ value, unit, label, delta, points, tone, size: sizeProp, testId }) {
295
+ const size = useChartSize(sizeProp);
296
+ const [ref, width] = useWidth(null);
297
+ const arrow = delta?.direction === "up" ? "↑ " : delta?.direction === "down" ? "↓ " : delta?.direction === "flat" ? "→ " : "";
298
+ return (_jsxs(SV, { "$size": size, "data-testid": testId, ref: ref, children: [_jsxs("span", { className: "num", style: tone ? { color: TONE_COLOUR[tone] } : undefined, children: [value, unit !== undefined ? _jsx("span", { className: "u", children: unit }) : null] }), label !== undefined || delta ? (_jsxs("span", { className: "sub", children: [label, label !== undefined && delta ? " · " : null, delta ? _jsxs("span", { className: `d ${delta.tone ?? ""}`, children: [arrow, delta.text] }) : null] })) : null, points && points.length > 1 ? (_jsx(Sparkline, { points: points, width: Math.max(60, width), height: size === "s" ? 24 : 32, tone: tone, lastDot: true, zeroBased: false })) : null] }));
299
+ }
300
+ const Track = styled.div `
301
+ display: flex;
302
+ height: ${(p) => p.$h}px;
303
+ width: ${(p) => (p.$w ? `${p.$w}px` : "100%")};
304
+ border-radius: 3px;
305
+ overflow: hidden;
306
+ background: ${v.field};
307
+ `;
308
+ const Seg = styled.div `min-width: 1px; flex: 1;`;
309
+ const Ticks = styled.div `
310
+ position: relative; height: 16px; margin-top: 3px;
311
+ font-family: ${v.mono}; font-size: 10px; color: ${v.faint};
312
+ span { position: absolute; transform: translateX(-50%); white-space: nowrap; }
313
+ span.dim { opacity: 0.6; }
314
+ `;
315
+ /**
316
+ * StateTimeline: a monitor's state (ok · warn · alert · no data) over a
317
+ * window, as proportional segments — the band under an alert chart and in
318
+ * monitor rows. Each segment's tooltip says what it was and when. `axis`
319
+ * draws the time ticks under it (at L, under a chart it does not sit beside).
320
+ */
321
+ export function StateTimeline({ segments, range, height = 10, width, label = "State over time", axis = false, formatTime, testId = "state-timeline" }) {
322
+ const span = Math.max(1, range.to - range.from);
323
+ const detail = formatTime ?? timeDetail(60_000);
324
+ const ticks = axis ? timeTicks(range.from, range.to, 6, formatTime) : [];
325
+ return (_jsxs("div", { style: { minWidth: 0, width: width ? `${width}px` : undefined }, children: [_jsx(Track, { "$h": height, "$w": width, role: "img", "aria-label": label, "data-testid": testId, children: segments.map((s, i) => (_jsx(Tooltip, { label: s.label ?? `${s.state} · ${detail(s.from)} → ${detail(s.to)}`, style: { display: "flex", width: `${(Math.max(0, Math.min(s.to, range.to) - Math.max(s.from, range.from)) / span) * 100}%` }, children: _jsx(Seg, { style: { background: s.colour ?? TONE_COLOUR[s.tone ?? "mut"] }, "data-state": s.state }) }, i))) }), axis ? (_jsx(Ticks, { "aria-hidden": true, children: ticks.map((t) => _jsx("span", { className: t.dim ? "dim" : undefined, style: { left: `${((t.t - range.from) / span) * 100}%` }, children: t.label }, t.t)) })) : null] }));
326
+ }
327
+ //# sourceMappingURL=ChartTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartTypes.js","sourceRoot":"","sources":["../../src/kit/ChartTypes.tsx"],"names":[],"mappings":"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"}