@xeonr/platform-ui 1.8.0 → 1.10.0

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,320 @@
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, spaced at least 46 px apart.
105
+ const xTicks = [];
106
+ if (axes) {
107
+ if (lo > 0) {
108
+ for (let e = Math.floor(Math.log10(lo)); e <= Math.ceil(Math.log10(hi)); e++) {
109
+ for (const m of [1, 3]) {
110
+ const t = m * 10 ** e;
111
+ if (t >= lo && t <= hi)
112
+ xTicks.push(t);
113
+ }
114
+ }
115
+ }
116
+ else
117
+ xTicks.push(...niceTicks(lo, hi, 5).ticks.filter((t) => t >= lo && t <= hi));
118
+ }
119
+ const tickPx = xTicks.map((t) => pos(t));
120
+ const keepTick = spaced(tickPx, 46);
121
+ const xMarks = xTicks.map((t, i) => ({ t, px: tickPx[i] })).filter((_m, i) => keepTick[i]);
122
+ const byValue = [...percentiles].sort((a, b) => a.value - b.value);
123
+ const markPx = byValue.map((p) => pos(p.value));
124
+ const keepMark = spaced(markPx, 40);
125
+ const marks = byValue.map((p, i) => ({ ...p, px: markPx[i], show: keepMark[i] }));
126
+ const toLocal = (clientX, el) => {
127
+ const r = el.getBoundingClientRect();
128
+ return ((clientX - r.left) / Math.max(1, r.width)) * width;
129
+ };
130
+ const idxOf = (px) => Math.min(n - 1, Math.max(0, Math.floor((px - padL) / bw)));
131
+ const interactive = !!onBucketClick || !!onSelectRange;
132
+ const handlers = {
133
+ onPointerMove: (e) => {
134
+ const px = toLocal(e.clientX, e.currentTarget);
135
+ setHover(px >= padL && px <= padL + plotW ? idxOf(px) : null);
136
+ if (drag)
137
+ setDrag({ from: drag.from, to: px });
138
+ },
139
+ onPointerLeave: () => { setHover(null); setDrag(null); },
140
+ onPointerDown: (e) => {
141
+ const px = toLocal(e.clientX, e.currentTarget);
142
+ downX.current = px;
143
+ if (onSelectRange)
144
+ setDrag({ from: px, to: px });
145
+ },
146
+ onPointerUp: (e) => {
147
+ const px = toLocal(e.clientX, e.currentTarget);
148
+ const start = downX.current;
149
+ downX.current = null;
150
+ setDrag(null);
151
+ if (onSelectRange && start !== null && Math.abs(px - start) > 6) {
152
+ const [a, b] = [start, px].sort((p, q) => p - q);
153
+ onSelectRange(valueAt(a), valueAt(b));
154
+ return;
155
+ }
156
+ if (onBucketClick && start !== null) {
157
+ const i = idxOf(px);
158
+ onBucketClick(buckets[i], i);
159
+ }
160
+ },
161
+ };
162
+ const hb = hover !== null ? buckets[hover] : undefined;
163
+ const showLegend = (legend ?? spec.legend) && marks.length > 0;
164
+ 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) => {
165
+ const h = b.count > 0 ? Math.max(1.5, bottom - y(b.count)) : 0;
166
+ 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));
167
+ }), 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: `p${m.p} ${formatValue(m.value)}` }) : 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] }));
168
+ }
169
+ const Rows = styled.ol `list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; min-width: 0;`;
170
+ const RowItem = styled.li `min-width: 0;`;
171
+ const RowBody = styled.div `
172
+ position: relative;
173
+ display: grid;
174
+ grid-template-columns: minmax(0, 1fr) auto;
175
+ align-items: center;
176
+ gap: 10px;
177
+ min-height: 24px;
178
+ padding: 3px 8px;
179
+ border-radius: 6px;
180
+ color: ${v.text};
181
+ text-decoration: none;
182
+ font-size: 12px;
183
+ cursor: ${(p) => (p.$link ? "pointer" : "default")};
184
+ .bar { position: absolute; inset: 2px auto 2px 0; border-radius: 5px; opacity: 0.18; pointer-events: none; }
185
+ .l { position: relative; font-family: ${v.mono}; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
186
+ .v { position: relative; font-family: ${v.mono}; font-variant-numeric: tabular-nums; color: ${v.text}; font-weight: 600; }
187
+ &:hover { background: ${(p) => (p.$link ? v.hover : "transparent")}; }
188
+ &:focus-visible { outline: none; box-shadow: ${v.ring}; }
189
+ `;
190
+ const BUTTON_RESET = { width: "100%", border: 0, background: "none", font: "inherit", fontSize: 12, textAlign: "left" };
191
+ /**
192
+ * TopList: ranked horizontal bars with the value — p99 by endpoint, errors by
193
+ * route. Rows are sorted by value, highest first, and cut at `max`; a row with
194
+ * `to` or `onSelect` opens the thing it ranks.
195
+ */
196
+ export function TopList({ rows, formatValue = fmtCount, max = 10, label = "Top list", empty = "Nothing to rank in this window.", testId }) {
197
+ const sorted = useMemo(() => [...rows].sort((a, b) => b.value - a.value).slice(0, max), [rows, max]);
198
+ if (sorted.length === 0)
199
+ return _jsx(Empty, { "$h": 80, "data-testid": testId, children: empty });
200
+ const top = Math.max(...sorted.map((r) => Math.abs(r.value)), 1e-12);
201
+ return (_jsx(Rows, { "aria-label": label, "data-testid": testId, children: sorted.map((r) => {
202
+ 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) })] }));
203
+ return (_jsx(RowItem, { children: r.to ? _jsx(RowBody, { as: Link, to: r.to, "$link": true, children: inner })
204
+ : r.onSelect ? _jsx(RowBody, { as: "button", type: "button", "$link": true, onClick: r.onSelect, style: BUTTON_RESET, children: inner })
205
+ : _jsx(RowBody, { "$link": false, children: inner }) }, r.key));
206
+ }) }));
207
+ }
208
+ /**
209
+ * Heatmap: value buckets × time, intensity = count — the shape of a latency
210
+ * tail without a line per percentile. `bounds` are the value buckets' edges,
211
+ * bottom up (one more than each column's counts). Intensity is on a log scale
212
+ * so one busy cell does not wash out the rest.
213
+ */
214
+ 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 }) {
215
+ const size = useChartSize(sizeProp);
216
+ const spec = CHART_SIZES[size];
217
+ const H = height ?? spec.height;
218
+ const axes = spec.yTicks > 0;
219
+ const [ref, width] = useWidth(columns.length > 0);
220
+ const [hover, setHover] = useState(null);
221
+ const sorted = useMemo(() => [...columns].sort((a, b) => a.t - b.t), [columns]);
222
+ if (sorted.length === 0 || bounds.length < 2)
223
+ return _jsx(Box, { ref: ref, "data-testid": testId, children: _jsx(Empty, { "$h": H, children: empty }) });
224
+ const rowsN = bounds.length - 1;
225
+ const step = sorted.length > 1 ? sorted[1].t - sorted[0].t : 60_000;
226
+ const from = sorted[0].t;
227
+ const to = sorted[sorted.length - 1].t + step;
228
+ const maxC = Math.max(1, ...sorted.flatMap((c) => c.counts));
229
+ const yLabelsAll = bounds.map((b) => formatValue(b));
230
+ const padL = axes ? Math.max(30, Math.ceil(Math.max(...yLabelsAll.map((s) => s.length)) * 6.2) + 10) : 0;
231
+ const padR = axes ? 10 : 0;
232
+ const padT = axes ? 6 : 1;
233
+ const padB = axes ? 20 : 1;
234
+ const plotW = Math.max(10, width - padL - padR);
235
+ const plotH = Math.max(10, H - padT - padB);
236
+ const cw = plotW / sorted.length;
237
+ const rh = plotH / rowsN;
238
+ const x = (t) => padL + ((t - from) / (to - from)) * plotW;
239
+ const intensity = (c) => (c <= 0 ? 0 : 0.12 + 0.88 * (Math.log1p(c) / Math.log1p(maxC)));
240
+ // Value labels at about four bounds, bottom to top.
241
+ const every = Math.max(1, Math.ceil(rowsN / 4));
242
+ const xMarks = axes ? timeTicks(from, to, Math.min(spec.xTicks, Math.max(2, Math.floor(plotW / 70))), formatTime) : [];
243
+ const detail = formatTime ?? timeDetail(step);
244
+ const cell = hover ? { col: sorted[hover.c], r: hover.r } : null;
245
+ 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) => {
246
+ const r = e.currentTarget.getBoundingClientRect();
247
+ const px = ((e.clientX - r.left) / Math.max(1, r.width)) * width;
248
+ const py = ((e.clientY - r.top) / Math.max(1, r.height)) * H;
249
+ const c = Math.floor((px - padL) / cw);
250
+ const row = rowsN - 1 - Math.floor((py - padT) / rh);
251
+ setHover(c >= 0 && c < sorted.length && row >= 0 && row < rowsN ? { c, r: row } : null);
252
+ }, onPointerLeave: () => setHover(null), onClick: onCellClick ? () => {
253
+ if (!cell)
254
+ return;
255
+ onCellClick({ t: cell.col.t, lower: bounds[cell.r], upper: bounds[cell.r + 1], count: cell.col.counts[cell.r] ?? 0 });
256
+ } : undefined, style: { cursor: onCellClick ? "pointer" : "default" }, children: [sorted.map((col, ci) => col.counts.map((c, ri) => {
257
+ const a = intensity(c);
258
+ if (a === 0)
259
+ return null;
260
+ 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}`);
261
+ })), 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] }) }));
262
+ }
263
+ // ---------------------------------------------------------------------------
264
+ // SingleValue
265
+ // ---------------------------------------------------------------------------
266
+ const SV = styled.div `
267
+ display: grid;
268
+ gap: 4px;
269
+ min-width: 0;
270
+ align-content: ${(p) => (p.$size === "s" ? "start" : "center")};
271
+ min-height: ${(p) => (p.$size === "s" ? 0 : CHART_SIZES[p.$size].height * 0.6)}px;
272
+ .num {
273
+ font-size: ${(p) => (p.$size === "s" ? 20 : p.$size === "m" ? 32 : 44)}px;
274
+ font-weight: 650; letter-spacing: -0.02em; color: ${v.text}; line-height: 1.1;
275
+ font-variant-numeric: tabular-nums; white-space: nowrap;
276
+ }
277
+ .num .u { font-size: 0.5em; font-weight: 500; color: ${v.muted}; margin-left: 3px; letter-spacing: 0; }
278
+ .sub { font-size: 11.5px; color: ${v.faint}; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
279
+ .d { font-variant-numeric: tabular-nums; }
280
+ .d.ok { color: ${v.chartOk}; } .d.warn { color: ${v.chartWarn}; } .d.crit { color: ${v.chartCrit}; }
281
+ `;
282
+ /**
283
+ * SingleValue: one number, its delta and an S sparkline — the stat tile's
284
+ * chart form ("98.4 % · availability · 30 d · ↑ 0.3 pt vs prior"). At `s` it
285
+ * is a tile's body; at M and up it fills a widget cell.
286
+ */
287
+ export function SingleValue({ value, unit, label, delta, points, tone, size: sizeProp, testId }) {
288
+ const size = useChartSize(sizeProp);
289
+ const [ref, width] = useWidth(null);
290
+ const arrow = delta?.direction === "up" ? "↑ " : delta?.direction === "down" ? "↓ " : delta?.direction === "flat" ? "→ " : "";
291
+ 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] }));
292
+ }
293
+ const Track = styled.div `
294
+ display: flex;
295
+ height: ${(p) => p.$h}px;
296
+ width: ${(p) => (p.$w ? `${p.$w}px` : "100%")};
297
+ border-radius: 3px;
298
+ overflow: hidden;
299
+ background: ${v.field};
300
+ `;
301
+ const Seg = styled.div `min-width: 1px; flex: 1;`;
302
+ const Ticks = styled.div `
303
+ position: relative; height: 16px; margin-top: 3px;
304
+ font-family: ${v.mono}; font-size: 10px; color: ${v.faint};
305
+ span { position: absolute; transform: translateX(-50%); white-space: nowrap; }
306
+ span.dim { opacity: 0.6; }
307
+ `;
308
+ /**
309
+ * StateTimeline: a monitor's state (ok · warn · alert · no data) over a
310
+ * window, as proportional segments — the band under an alert chart and in
311
+ * monitor rows. Each segment's tooltip says what it was and when. `axis`
312
+ * draws the time ticks under it (at L, under a chart it does not sit beside).
313
+ */
314
+ export function StateTimeline({ segments, range, height = 10, width, label = "State over time", axis = false, formatTime, testId = "state-timeline" }) {
315
+ const span = Math.max(1, range.to - range.from);
316
+ const detail = formatTime ?? timeDetail(60_000);
317
+ const ticks = axis ? timeTicks(range.from, range.to, 6, formatTime) : [];
318
+ 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] }));
319
+ }
320
+ //# 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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"}