@xeonr/platform-ui 0.2.5 → 0.3.2
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.
- package/dist/index.d.ts +12 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -7
- package/dist/index.js.map +1 -1
- package/dist/kit/Badge.d.ts +2 -1
- package/dist/kit/Badge.d.ts.map +1 -1
- package/dist/kit/Badge.js +23 -0
- package/dist/kit/Badge.js.map +1 -1
- package/dist/kit/Blocks.d.ts +22 -2
- package/dist/kit/Blocks.d.ts.map +1 -1
- package/dist/kit/Blocks.js +108 -17
- package/dist/kit/Blocks.js.map +1 -1
- package/dist/kit/Card.d.ts +44 -0
- package/dist/kit/Card.d.ts.map +1 -0
- package/dist/kit/Card.js +95 -0
- package/dist/kit/Card.js.map +1 -0
- package/dist/kit/Charts.d.ts +44 -0
- package/dist/kit/Charts.d.ts.map +1 -0
- package/dist/kit/Charts.js +164 -0
- package/dist/kit/Charts.js.map +1 -0
- package/dist/kit/DataTable.d.ts +3 -1
- package/dist/kit/DataTable.d.ts.map +1 -1
- package/dist/kit/DataTable.js +8 -2
- package/dist/kit/DataTable.js.map +1 -1
- package/dist/kit/Facet.d.ts +37 -0
- package/dist/kit/Facet.d.ts.map +1 -0
- package/dist/kit/Facet.js +126 -0
- package/dist/kit/Facet.js.map +1 -0
- package/dist/kit/Form.d.ts +8 -0
- package/dist/kit/Form.d.ts.map +1 -1
- package/dist/kit/Form.js +17 -0
- package/dist/kit/Form.js.map +1 -1
- package/dist/kit/Icon.d.ts +17 -0
- package/dist/kit/Icon.d.ts.map +1 -1
- package/dist/kit/Icon.js +6 -1
- package/dist/kit/Icon.js.map +1 -1
- package/dist/kit/Range.d.ts +30 -0
- package/dist/kit/Range.d.ts.map +1 -0
- package/dist/kit/Range.js +137 -0
- package/dist/kit/Range.js.map +1 -0
- package/dist/kit/Search.d.ts +9 -0
- package/dist/kit/Search.d.ts.map +1 -0
- package/dist/kit/Search.js +59 -0
- package/dist/kit/Search.js.map +1 -0
- package/dist/kit/Secret.d.ts +10 -0
- package/dist/kit/Secret.d.ts.map +1 -1
- package/dist/kit/Secret.js +33 -0
- package/dist/kit/Secret.js.map +1 -1
- package/dist/kit/Skeleton.d.ts +6 -0
- package/dist/kit/Skeleton.d.ts.map +1 -1
- package/dist/kit/Skeleton.js +15 -0
- package/dist/kit/Skeleton.js.map +1 -1
- package/dist/kit/Toast.d.ts +10 -2
- package/dist/kit/Toast.d.ts.map +1 -1
- package/dist/kit/Toast.js +9 -2
- package/dist/kit/Toast.js.map +1 -1
- package/dist/theme/ThemeProvider.d.ts +15 -2
- package/dist/theme/ThemeProvider.d.ts.map +1 -1
- package/dist/theme/ThemeProvider.js +43 -53
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/tokens.d.ts +3 -0
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +59 -0
- package/dist/theme/tokens.js.map +1 -1
- package/package.json +1 -1
package/dist/kit/Card.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import styled, { css } from "styled-components";
|
|
3
|
+
import { Link } from "react-router-dom";
|
|
4
|
+
import { v } from "../theme/tokens.js";
|
|
5
|
+
import { Icon } from "./Icon.js";
|
|
6
|
+
// The card list. A list of things too few and too visual for a DataTable — a
|
|
7
|
+
// team picker, a project picker, a handful of environments — reads as cards,
|
|
8
|
+
// and three consoles had grown their own `Grid`/`Card` pair for it
|
|
9
|
+
// (container-platform's pools, dbaas' teams, dev's environments). This is that
|
|
10
|
+
// pair, with the differences between them as props.
|
|
11
|
+
/** CardGrid: auto-fill columns that reflow; `$min` is the narrowest a card gets. */
|
|
12
|
+
export const CardGrid = styled.div `
|
|
13
|
+
display: grid;
|
|
14
|
+
gap: ${(p) => p.$gap ?? 12}px;
|
|
15
|
+
grid-template-columns: repeat(auto-fill, minmax(${(p) => p.$min ?? 300}px, 1fr));
|
|
16
|
+
`;
|
|
17
|
+
const shell = css `
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
min-width: 0;
|
|
21
|
+
background: ${v.surface};
|
|
22
|
+
border: 1px solid ${(p) => (p.$tone === "crit" ? v.danger : p.$tone === "warn" ? v.warning : v.line)};
|
|
23
|
+
border-radius: ${v.rCard};
|
|
24
|
+
box-shadow: inset 0 1px 0 0 ${v.brand08}, ${v.elev};
|
|
25
|
+
color: inherit;
|
|
26
|
+
text-align: left;
|
|
27
|
+
text-decoration: none;
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
${(p) => p.$interactive &&
|
|
30
|
+
css `
|
|
31
|
+
cursor: pointer;
|
|
32
|
+
transition: border-color 0.14s ease, transform 0.14s ease;
|
|
33
|
+
&:hover { border-color: ${v.brand55}; transform: translateY(-1px); }
|
|
34
|
+
&:focus-visible { outline: 2px solid ${v.brand55}; outline-offset: 2px; }
|
|
35
|
+
`}
|
|
36
|
+
`;
|
|
37
|
+
const DivShell = styled.div `${shell}`;
|
|
38
|
+
const AShell = styled.a `${shell}`;
|
|
39
|
+
const LinkShell = styled(Link) `${shell}`;
|
|
40
|
+
const Head = styled.div `
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
gap: 10px;
|
|
44
|
+
padding: 14px 16px 0;
|
|
45
|
+
svg { flex: none; color: ${v.brand}; }
|
|
46
|
+
`;
|
|
47
|
+
const Title = styled.div `
|
|
48
|
+
flex: 1;
|
|
49
|
+
min-width: 0;
|
|
50
|
+
font-weight: 600;
|
|
51
|
+
font-size: 14px;
|
|
52
|
+
overflow: hidden;
|
|
53
|
+
text-overflow: ellipsis;
|
|
54
|
+
white-space: nowrap;
|
|
55
|
+
${(p) => p.$mono && css `font-family: ${v.mono}; font-size: 13px;`}
|
|
56
|
+
`;
|
|
57
|
+
const Facts = styled.div `
|
|
58
|
+
display: flex;
|
|
59
|
+
flex-wrap: wrap;
|
|
60
|
+
align-items: center;
|
|
61
|
+
gap: 6px;
|
|
62
|
+
padding: 10px 16px 0;
|
|
63
|
+
color: ${v.muted};
|
|
64
|
+
font-size: 12px;
|
|
65
|
+
`;
|
|
66
|
+
const Body = styled.div `
|
|
67
|
+
padding: 12px 16px 0;
|
|
68
|
+
min-width: 0;
|
|
69
|
+
`;
|
|
70
|
+
const Actions = styled.div `
|
|
71
|
+
display: flex;
|
|
72
|
+
align-items: center;
|
|
73
|
+
gap: 8px;
|
|
74
|
+
padding: 14px 16px;
|
|
75
|
+
margin-top: auto;
|
|
76
|
+
`;
|
|
77
|
+
/**
|
|
78
|
+
* ListCard: one card in a CardGrid.
|
|
79
|
+
*
|
|
80
|
+
* `to`/`href` make the whole card the link. `actions` and a whole-card link are
|
|
81
|
+
* mutually exclusive by construction — a link wrapping buttons is invalid
|
|
82
|
+
* markup and unusable by keyboard — so a card with actions renders as a plain
|
|
83
|
+
* surface and the actions carry the navigation.
|
|
84
|
+
*/
|
|
85
|
+
export function ListCard({ title, icon, mono, status, facts, actions, tone, to, href, target, rel, children, className, tooltip, }) {
|
|
86
|
+
const inner = (_jsxs(_Fragment, { children: [_jsxs(Head, { children: [icon ? _jsx(Icon, { name: icon }) : null, _jsx(Title, { "$mono": mono, title: tooltip ?? (typeof title === "string" ? title : undefined), children: title }), status] }), facts ? _jsx(Facts, { children: facts }) : null, children ? _jsx(Body, { children: children }) : null, actions ? _jsx(Actions, { children: actions }) : null] }));
|
|
87
|
+
if (to && !actions) {
|
|
88
|
+
return _jsx(LinkShell, { to: to, "$tone": tone, "$interactive": true, className: className, children: inner });
|
|
89
|
+
}
|
|
90
|
+
if (href && !actions) {
|
|
91
|
+
return _jsx(AShell, { href: href, target: target, rel: rel, "$tone": tone, "$interactive": true, className: className, children: inner });
|
|
92
|
+
}
|
|
93
|
+
return _jsx(DivShell, { "$tone": tone, className: className, children: inner });
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=Card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Card.js","sourceRoot":"","sources":["../../src/kit/Card.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface HistogramBucket {
|
|
2
|
+
/** bucket start, ms since epoch */
|
|
3
|
+
t: number;
|
|
4
|
+
/** stacked parts, in stack order */
|
|
5
|
+
parts: {
|
|
6
|
+
name: string;
|
|
7
|
+
value: number;
|
|
8
|
+
}[];
|
|
9
|
+
}
|
|
10
|
+
/** Tones a part may take; unnamed parts use the brand colour. */
|
|
11
|
+
export type ChartTone = "brand" | "ok" | "warn" | "crit" | "info" | "mut";
|
|
12
|
+
/**
|
|
13
|
+
* Histogram: a stacked bar per bucket over time, so the shape of what you are
|
|
14
|
+
* looking at is visible before you read a single row. `tones` maps a part
|
|
15
|
+
* name to its tone (e.g. error → crit) so a spike reads without a legend.
|
|
16
|
+
*/
|
|
17
|
+
export declare function Histogram({ buckets, tones, height, label, empty }: {
|
|
18
|
+
buckets: HistogramBucket[];
|
|
19
|
+
tones?: Record<string, ChartTone> | undefined;
|
|
20
|
+
height?: number | undefined;
|
|
21
|
+
label?: string | undefined;
|
|
22
|
+
empty?: string | undefined;
|
|
23
|
+
}): import("react").JSX.Element;
|
|
24
|
+
export interface ChartSeries {
|
|
25
|
+
name: string;
|
|
26
|
+
points: {
|
|
27
|
+
t: number;
|
|
28
|
+
v: number;
|
|
29
|
+
}[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* LineChart: n series over a shared time axis. Axes to read a value off, a
|
|
33
|
+
* crosshair to compare series at one instant, a legend that mutes lines, and
|
|
34
|
+
* a drag that selects a window (`onZoom`) — the natural gesture once a spike
|
|
35
|
+
* is visible.
|
|
36
|
+
*/
|
|
37
|
+
export declare function LineChart({ series, onZoom, label, empty }: {
|
|
38
|
+
series: ChartSeries[];
|
|
39
|
+
/** Given a dragged selection. Omit to leave the chart read-only. */
|
|
40
|
+
onZoom?: ((from: Date, to: Date) => void) | undefined;
|
|
41
|
+
label?: string | undefined;
|
|
42
|
+
empty?: string | undefined;
|
|
43
|
+
}): import("react").JSX.Element;
|
|
44
|
+
//# sourceMappingURL=Charts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Charts.d.ts","sourceRoot":"","sources":["../../src/kit/Charts.tsx"],"names":[],"mappings":"AAiBA,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,CAAC,EAAE,MAAM,CAAC;IACV,oCAAoC;IACpC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1C;AAUD,iEAAiE;AACjE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAK1E;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,KAAU,EAAE,MAAM,EAAE,KAA4B,EAAE,KAA8B,EAAE,EAAE;IACvH,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BA6BA;AAMD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpC;AA0DD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAgB,EAAE,KAA6B,EAAE,EAAE;IAC7F,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,oEAAoE;IACpE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BA8GA"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useRef, useState } from "react";
|
|
3
|
+
import styled from "styled-components";
|
|
4
|
+
import { v } from "../theme/tokens.js";
|
|
5
|
+
import { fmtCount } from "./Facet.js";
|
|
6
|
+
// Two charts in raw SVG, themed with the tokens so they sit in the same visual
|
|
7
|
+
// system as everything else. No charting library: the need is "n series over a
|
|
8
|
+
// shared time axis" and "a stacked histogram", and a dependency for that costs
|
|
9
|
+
// more in bundle size and theming friction than the code it saves.
|
|
10
|
+
const hhmm = (t) => new Date(t).toLocaleTimeString(undefined, { hour: "2-digit", minute: "2-digit", hour12: false });
|
|
11
|
+
const HistWrap = styled.div `padding: 12px 14px 8px;`;
|
|
12
|
+
const HistSvg = styled.svg `display: block; width: 100%; height: 84px;`;
|
|
13
|
+
const Axis = styled.div `
|
|
14
|
+
display: flex; justify-content: space-between;
|
|
15
|
+
color: ${v.faint}; font-size: 11px; margin-top: 4px; font-variant-numeric: tabular-nums;
|
|
16
|
+
`;
|
|
17
|
+
const Note = styled.div `color: ${v.faint}; font-size: 12px; padding: 22px 0; text-align: center;`;
|
|
18
|
+
const TONE_FILL = {
|
|
19
|
+
brand: v.brand, ok: v.success, warn: v.warning, crit: v.danger, info: v.info, mut: v.faint,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Histogram: a stacked bar per bucket over time, so the shape of what you are
|
|
23
|
+
* looking at is visible before you read a single row. `tones` maps a part
|
|
24
|
+
* name to its tone (e.g. error → crit) so a spike reads without a legend.
|
|
25
|
+
*/
|
|
26
|
+
export function Histogram({ buckets, tones = {}, height, label = "Activity over time", empty = "No activity in range" }) {
|
|
27
|
+
const sorted = useMemo(() => [...buckets].sort((a, b) => a.t - b.t), [buckets]);
|
|
28
|
+
if (sorted.length === 0)
|
|
29
|
+
return _jsx(HistWrap, { children: _jsx(Note, { children: empty }) });
|
|
30
|
+
const totals = sorted.map((b) => b.parts.reduce((s, p) => s + p.value, 0));
|
|
31
|
+
const max = Math.max(...totals, 1);
|
|
32
|
+
const w = 100 / sorted.length;
|
|
33
|
+
return (_jsxs(HistWrap, { children: [_jsx(HistSvg, { viewBox: "0 0 100 40", preserveAspectRatio: "none", role: "img", "aria-label": label, style: height ? { height } : undefined, children: sorted.map((b, i) => {
|
|
34
|
+
let y = 40;
|
|
35
|
+
return (_jsxs("g", { children: [_jsx("title", { children: `${hhmm(b.t)} — ${fmtCount(totals[i] ?? 0)}` }), b.parts.map((p) => {
|
|
36
|
+
const h = (p.value / max) * 40;
|
|
37
|
+
y -= h;
|
|
38
|
+
return _jsx("rect", { x: i * w + w * 0.12, y: y, width: w * 0.76, height: h, fill: TONE_FILL[tones[p.name] ?? "brand"] }, p.name);
|
|
39
|
+
})] }, b.t));
|
|
40
|
+
}) }), _jsxs(Axis, { children: [_jsx("span", { children: hhmm(sorted[0].t) }), _jsx("span", { children: hhmm(sorted[sorted.length - 1].t) })] })] }));
|
|
41
|
+
}
|
|
42
|
+
const Wrap = styled.div `padding: 14px;`;
|
|
43
|
+
const Plot = styled.div `position: relative;`;
|
|
44
|
+
const Svg = styled.svg `display: block; width: 100%; height: 220px; cursor: crosshair; user-select: none;`;
|
|
45
|
+
const Legend = styled.div `display: flex; flex-wrap: wrap; gap: 12px; margin-top: 10px; font-size: 12px; color: ${v.muted};`;
|
|
46
|
+
// Series colours come from the theme's accent ramp rather than a chart palette.
|
|
47
|
+
const STROKES = [v.brand, v.success, v.warning, v.info, v.danger];
|
|
48
|
+
// A legend entry is a control: clicking isolates or restores a series, which is
|
|
49
|
+
// the only way to read a chart split into a dozen sessions.
|
|
50
|
+
const Key = styled.button `
|
|
51
|
+
display: inline-flex; align-items: center; gap: 6px;
|
|
52
|
+
font: inherit; font-size: 12px;
|
|
53
|
+
color: ${(p) => (p.$off ? v.faint : v.muted)};
|
|
54
|
+
opacity: ${(p) => (p.$off ? 0.55 : 1)};
|
|
55
|
+
&::before { content: ""; width: 9px; height: 3px; border-radius: 2px; background: ${(p) => (p.$off ? v.faint : STROKES[p.$i % STROKES.length])}; }
|
|
56
|
+
&:hover { color: ${v.text}; }
|
|
57
|
+
`;
|
|
58
|
+
const ChartHint = styled.div `margin-top: 8px; font-size: 11px; color: ${v.faint};`;
|
|
59
|
+
const Tip = styled.div `
|
|
60
|
+
position: absolute;
|
|
61
|
+
top: 6px;
|
|
62
|
+
left: ${(p) => p.$left}%;
|
|
63
|
+
transform: translateX(${(p) => (p.$flip ? "-100%" : "0")});
|
|
64
|
+
margin-left: ${(p) => (p.$flip ? "-10px" : "10px")};
|
|
65
|
+
pointer-events: none;
|
|
66
|
+
background: ${v.surface2};
|
|
67
|
+
border: 1px solid ${v.line2};
|
|
68
|
+
border-radius: ${v.rCard};
|
|
69
|
+
box-shadow: ${v.elev};
|
|
70
|
+
padding: 7px 9px;
|
|
71
|
+
font-size: 11px;
|
|
72
|
+
color: ${v.text};
|
|
73
|
+
white-space: nowrap;
|
|
74
|
+
z-index: ${v.zPop};
|
|
75
|
+
.t { color: ${v.faint}; margin-bottom: 4px; }
|
|
76
|
+
.val { margin-left: auto; padding-left: 12px; font-variant-numeric: tabular-nums; }
|
|
77
|
+
`;
|
|
78
|
+
const TipRow = styled.div `
|
|
79
|
+
display: flex; align-items: center; gap: 6px;
|
|
80
|
+
&::before { content: ""; width: 8px; height: 3px; border-radius: 2px; background: ${(p) => STROKES[p.$i % STROKES.length]}; }
|
|
81
|
+
`;
|
|
82
|
+
const W = 600;
|
|
83
|
+
const H = 200;
|
|
84
|
+
const PAD_L = 44;
|
|
85
|
+
const PAD_B = 18;
|
|
86
|
+
const PAD_T = 8;
|
|
87
|
+
function tickValue(x) {
|
|
88
|
+
if (Math.abs(x) >= 1000)
|
|
89
|
+
return fmtCount(Math.round(x));
|
|
90
|
+
return Number.isInteger(x) ? String(x) : x.toFixed(2);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* LineChart: n series over a shared time axis. Axes to read a value off, a
|
|
94
|
+
* crosshair to compare series at one instant, a legend that mutes lines, and
|
|
95
|
+
* a drag that selects a window (`onZoom`) — the natural gesture once a spike
|
|
96
|
+
* is visible.
|
|
97
|
+
*/
|
|
98
|
+
export function LineChart({ series, onZoom, label = "Series", empty = "No samples in range" }) {
|
|
99
|
+
const svg = useRef(null);
|
|
100
|
+
const [hidden, setHidden] = useState(new Set());
|
|
101
|
+
const [hoverX, setHoverX] = useState(null);
|
|
102
|
+
const [drag, setDrag] = useState(null);
|
|
103
|
+
const shown = useMemo(() => series.filter((s) => !hidden.has(s.name)), [series, hidden]);
|
|
104
|
+
const points = shown.flatMap((s) => s.points);
|
|
105
|
+
const all = series.flatMap((s) => s.points.map((p) => p.t));
|
|
106
|
+
if (all.length === 0)
|
|
107
|
+
return _jsx(Wrap, { children: _jsx(Note, { children: empty }) });
|
|
108
|
+
// The time axis spans every series, so hiding one does not move the x axis
|
|
109
|
+
// under the reader; only the value axis rescales to what is shown.
|
|
110
|
+
const tMin = Math.min(...all);
|
|
111
|
+
const tMax = Math.max(...all);
|
|
112
|
+
const vMax = Math.max(...points.map((p) => p.v), 0);
|
|
113
|
+
const vMin = Math.min(...points.map((p) => p.v), 0);
|
|
114
|
+
const tSpan = tMax - tMin || 1;
|
|
115
|
+
const vSpan = vMax - vMin || 1;
|
|
116
|
+
const x = (t) => PAD_L + ((t - tMin) / tSpan) * (W - PAD_L);
|
|
117
|
+
const y = (val) => (H - PAD_B) - ((val - vMin) / vSpan) * (H - PAD_B - PAD_T);
|
|
118
|
+
const frac = (t) => (x(t) - PAD_L) / (W - PAD_L);
|
|
119
|
+
const timeAt = (fraction) => tMin + fraction * tSpan;
|
|
120
|
+
const gridValues = [vMin, vMin + vSpan / 2, vMax];
|
|
121
|
+
const fractionOf = (clientX) => {
|
|
122
|
+
const rect = svg.current?.getBoundingClientRect();
|
|
123
|
+
if (!rect)
|
|
124
|
+
return null;
|
|
125
|
+
const plotLeft = rect.left + (PAD_L / W) * rect.width;
|
|
126
|
+
const plotWidth = rect.width * (1 - PAD_L / W);
|
|
127
|
+
return Math.min(1, Math.max(0, (clientX - plotLeft) / plotWidth));
|
|
128
|
+
};
|
|
129
|
+
// The nearest sample per series to the hovered instant.
|
|
130
|
+
const hovered = hoverX === null ? null : (() => {
|
|
131
|
+
const t = timeAt(hoverX);
|
|
132
|
+
const rows = shown.map((s) => {
|
|
133
|
+
let best = null;
|
|
134
|
+
for (const p of s.points)
|
|
135
|
+
if (!best || Math.abs(p.t - t) < Math.abs(best.t - t))
|
|
136
|
+
best = p;
|
|
137
|
+
return best ? { name: s.name, i: series.indexOf(s), v: best.v, t: best.t } : null;
|
|
138
|
+
}).filter((r) => r !== null);
|
|
139
|
+
return rows.length ? { t, rows } : null;
|
|
140
|
+
})();
|
|
141
|
+
const toggle = (name) => setHidden((prev) => {
|
|
142
|
+
const next = new Set(prev);
|
|
143
|
+
if (next.has(name))
|
|
144
|
+
next.delete(name);
|
|
145
|
+
else
|
|
146
|
+
next.add(name);
|
|
147
|
+
// Hiding everything leaves a chart with no axis to read; treat the last
|
|
148
|
+
// one as "show all again".
|
|
149
|
+
return next.size === series.length ? new Set() : next;
|
|
150
|
+
});
|
|
151
|
+
return (_jsxs(Wrap, { children: [_jsxs(Plot, { children: [_jsxs(Svg, { ref: svg, viewBox: `0 0 ${W} ${H}`, preserveAspectRatio: "none", role: "img", "aria-label": label, onMouseMove: (e) => { const f = fractionOf(e.clientX); if (f === null)
|
|
152
|
+
return; setHoverX(f); setDrag((d) => (d ? { ...d, to: f } : null)); }, onMouseLeave: () => { setHoverX(null); setDrag(null); }, onMouseDown: (e) => { if (!onZoom)
|
|
153
|
+
return; const f = fractionOf(e.clientX); if (f !== null)
|
|
154
|
+
setDrag({ from: f, to: f }); }, onMouseUp: () => {
|
|
155
|
+
if (drag && onZoom)
|
|
156
|
+
onZoom(new Date(timeAt(Math.min(drag.from, drag.to))), new Date(timeAt(Math.max(drag.from, drag.to))));
|
|
157
|
+
setDrag(null);
|
|
158
|
+
}, children: [gridValues.map((g) => (_jsxs("g", { children: [_jsx("line", { x1: PAD_L, x2: W, y1: y(g), y2: y(g), stroke: v.line, strokeWidth: 1, vectorEffect: "non-scaling-stroke" }), _jsx("text", { x: PAD_L - 6, y: y(g) + 3, textAnchor: "end", fontSize: 9, fill: v.faint, children: tickValue(g) })] }, g))), _jsx("text", { x: PAD_L, y: H - 4, fontSize: 9, fill: v.faint, children: hhmm(tMin) }), _jsx("text", { x: W, y: H - 4, fontSize: 9, fill: v.faint, textAnchor: "end", children: hhmm(tMax) }), shown.map((s) => {
|
|
159
|
+
const i = series.indexOf(s);
|
|
160
|
+
const d = s.points.map((p, j) => `${j === 0 ? "M" : "L"} ${x(p.t)} ${y(p.v)}`).join(" ");
|
|
161
|
+
return _jsx("path", { d: d, fill: "none", stroke: STROKES[i % STROKES.length], strokeWidth: 1.5, vectorEffect: "non-scaling-stroke" }, s.name);
|
|
162
|
+
}), drag && Math.abs(drag.to - drag.from) > 0.002 ? (_jsx("rect", { x: PAD_L + Math.min(drag.from, drag.to) * (W - PAD_L), width: Math.abs(drag.to - drag.from) * (W - PAD_L), y: PAD_T, height: H - PAD_B - PAD_T, fill: v.brand12, stroke: v.brand55, strokeWidth: 1, vectorEffect: "non-scaling-stroke" })) : null, hoverX !== null && !drag ? (_jsx("line", { x1: PAD_L + hoverX * (W - PAD_L), x2: PAD_L + hoverX * (W - PAD_L), y1: PAD_T, y2: H - PAD_B, stroke: v.line2, strokeWidth: 1, vectorEffect: "non-scaling-stroke" })) : null, hovered && !drag ? hovered.rows.map((r) => _jsx("circle", { cx: x(r.t), cy: y(r.v), r: 2.5, fill: STROKES[r.i % STROKES.length] }, r.name)) : null] }), hovered && !drag ? (_jsxs(Tip, { "$left": frac(hovered.t) * 100, "$flip": frac(hovered.t) > 0.6, children: [_jsx("div", { className: "t", children: new Date(hovered.t).toLocaleString() }), hovered.rows.map((r) => _jsxs(TipRow, { "$i": r.i, children: [r.name, _jsx("span", { className: "val", children: tickValue(r.v) })] }, r.name))] })) : null] }), _jsx(Legend, { children: series.map((s, i) => (_jsx(Key, { type: "button", "$i": i, "$off": hidden.has(s.name), onClick: () => toggle(s.name), title: hidden.has(s.name) ? "Show this series" : "Hide this series", children: s.name }, s.name))) }), onZoom ? _jsx(ChartHint, { children: "Drag across the chart to zoom into a window." }) : null] }));
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=Charts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Charts.js","sourceRoot":"","sources":["../../src/kit/Charts.tsx"],"names":[],"mappings":"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"}
|
package/dist/kit/DataTable.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export interface Column<T> {
|
|
|
8
8
|
/** hide below this viewport width (px) */
|
|
9
9
|
hideBelow?: number | undefined;
|
|
10
10
|
}
|
|
11
|
-
export declare function DataTable<T>({ columns, rows, rowKey, loading, skeletonRows, empty, rowHref, onRowClick, severity, footer, variant, hideHead }: {
|
|
11
|
+
export declare function DataTable<T>({ columns, rows, rowKey, loading, skeletonRows, empty, rowHref, onRowClick, severity, footer, variant, hideHead, detail }: {
|
|
12
12
|
columns: Column<T>[];
|
|
13
13
|
rows: T[] | undefined;
|
|
14
14
|
rowKey: (row: T) => string;
|
|
@@ -23,5 +23,7 @@ export declare function DataTable<T>({ columns, rows, rowKey, loading, skeletonR
|
|
|
23
23
|
variant?: "panel" | "bare" | undefined;
|
|
24
24
|
/** omit the header row (short bare lists whose columns are self-evident) */
|
|
25
25
|
hideHead?: boolean | undefined;
|
|
26
|
+
/** an expanded row under this one (a log line's attributes); null/undefined for none — the caller keeps the open state */
|
|
27
|
+
detail?: ((row: T) => ReactNode) | undefined;
|
|
26
28
|
}): import("react").JSX.Element;
|
|
27
29
|
//# sourceMappingURL=DataTable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../src/kit/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOjD,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACrC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;
|
|
1
|
+
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../src/kit/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOjD,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACrC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AA4DD,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;IAC1J,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC;IACtB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAClD,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5D,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,oFAAoF;IACpF,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,0HAA0H;IAC1H,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;CAC9C,+BAmDA"}
|
package/dist/kit/DataTable.js
CHANGED
|
@@ -50,7 +50,12 @@ const Bare = styled.div `
|
|
|
50
50
|
table td { padding: 7px 12px; }
|
|
51
51
|
table th { padding: 7px 12px; background: transparent; }
|
|
52
52
|
`;
|
|
53
|
-
|
|
53
|
+
const DetailTd = styled.td `
|
|
54
|
+
padding: 12px 16px 16px;
|
|
55
|
+
background: ${v.surface2};
|
|
56
|
+
border-bottom: 1px solid ${v.line};
|
|
57
|
+
`;
|
|
58
|
+
export function DataTable({ columns, rows, rowKey, loading, skeletonRows = 5, empty, rowHref, onRowClick, severity, footer, variant, hideHead, detail }) {
|
|
54
59
|
const navigate = useNavigate();
|
|
55
60
|
const Wrap = variant === "bare" ? Bare : Panel;
|
|
56
61
|
const showSkeleton = loading && (!rows || rows.length === 0);
|
|
@@ -58,7 +63,8 @@ export function DataTable({ columns, rows, rowKey, loading, skeletonRows = 5, em
|
|
|
58
63
|
return (_jsxs(Wrap, { children: [_jsx(Scroll, { children: _jsxs(Table, { children: [hideHead ? null : (_jsx("thead", { children: _jsx("tr", { children: columns.map((c) => _jsx(Th, { "$align": c.align, "$hide": c.hideBelow, style: c.width ? { width: c.width } : undefined, children: c.head }, c.key)) }) })), !showSkeleton && !isEmpty ? (_jsx("tbody", { style: loading ? { opacity: 0.55 } : undefined, children: (rows ?? []).map((r) => {
|
|
59
64
|
const href = rowHref?.(r) ?? null;
|
|
60
65
|
const click = !!href || !!onRowClick;
|
|
61
|
-
|
|
66
|
+
const extra = detail?.(r);
|
|
67
|
+
return (_jsxs(Fragment, { children: [_jsx(Tr, { "$click": click, "$mark": severity?.(r) ?? null, onClick: click ? () => (href ? navigate(href) : onRowClick?.(r)) : undefined, children: columns.map((c) => _jsx(Td, { "$align": c.align, "$hide": c.hideBelow, children: c.render(r) }, c.key)) }), extra ? _jsx("tr", { children: _jsx(DetailTd, { colSpan: columns.length, children: extra }) }) : null] }, rowKey(r)));
|
|
62
68
|
}) })) : null] }) }), showSkeleton ? (_jsx("div", { children: Array.from({ length: skeletonRows }).map((_, i) => (_jsxs(SkeletonRow, { children: [_jsx(Skeleton, { "$w": "26%" }), _jsx(Skeleton, { "$w": "12%" }), _jsx(Skeleton, { "$w": "8%" }), _jsx(Skeleton, { "$w": "16%" })] }, i))) })) : null, isEmpty ? _jsx(Fragment, { children: empty }) : null, footer && !showSkeleton && !isEmpty ? _jsx(FootRow, { children: footer }) : null] }));
|
|
63
69
|
}
|
|
64
70
|
//# sourceMappingURL=DataTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../src/kit/DataTable.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACjD,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAa,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAgB,CAAC;AAYvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;;;;CAIzB,CAAC;AAEF,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAuE;gBAC3E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM;;;;;WAK9B,CAAC,CAAC,KAAK;gBACF,CAAC,CAAC,QAAQ;6BACG,CAAC,CAAC,IAAI;;;IAG/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAA,sBAAsB,CAAC,CAAC,KAAK,wBAAwB;CAC7E,CAAC;AAEF,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAuE;gBAC3E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM;;6BAEZ,CAAC,CAAC,IAAI;;IAE/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAA,sBAAsB,CAAC,CAAC,KAAK,wBAAwB;CAC7E,CAAC;AAEF,iFAAiF;AACjF,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAA8E;IAC9F,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,CAAA,6CAA6C,CAAC,CAAC,KAAK,KAAK;;IAE/E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAA,gDAAgD,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK;CACtH,CAAC;AAEF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;WAMf,CAAC,CAAC,KAAK;0BACQ,CAAC,CAAC,IAAI;CAC/B,CAAC;AAEF,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA,mBAAmB,CAAC;AAE7C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA;;;CAGtB,CAAC;AAEF,MAAM,UAAU,SAAS,CAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../src/kit/DataTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export interface FacetOption {
|
|
3
|
+
value: string;
|
|
4
|
+
count: number | bigint;
|
|
5
|
+
/** 0..1 fraction of the total */
|
|
6
|
+
share: number;
|
|
7
|
+
}
|
|
8
|
+
/** compact count: 1234 → "1.2k" */
|
|
9
|
+
export declare function fmtCount(n: number | bigint): string;
|
|
10
|
+
/** share as a percentage: 0.0421 → "4.2%" */
|
|
11
|
+
export declare function fmtShare(share: number): string;
|
|
12
|
+
/**
|
|
13
|
+
* FacetSelect: a multi-select over the values a field takes, each with its
|
|
14
|
+
* count and share. Clearing from the chip is the common case once a filter is
|
|
15
|
+
* set, so the trailing × clears without opening the menu.
|
|
16
|
+
*/
|
|
17
|
+
export declare function FacetSelect({ label, options, selected, onChange, loading, unavailable }: {
|
|
18
|
+
label: ReactNode;
|
|
19
|
+
options: FacetOption[];
|
|
20
|
+
selected: string[];
|
|
21
|
+
onChange: (values: string[]) => void;
|
|
22
|
+
loading?: boolean | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Why this field cannot be offered for what is being viewed. Distinct from
|
|
25
|
+
* having no options: "nothing matched" and "you cannot filter on this here"
|
|
26
|
+
* look identical in an empty menu, and only one is the user's to fix.
|
|
27
|
+
*/
|
|
28
|
+
unavailable?: string | undefined;
|
|
29
|
+
}): import("react").JSX.Element;
|
|
30
|
+
/** RankList: ranked rows with a share bar behind each — "top events", "top clients". */
|
|
31
|
+
export declare function RankList({ items, onPick, empty, limit }: {
|
|
32
|
+
items: FacetOption[];
|
|
33
|
+
onPick?: ((value: string) => void) | undefined;
|
|
34
|
+
empty?: string | undefined;
|
|
35
|
+
limit?: number | undefined;
|
|
36
|
+
}): import("react").JSX.Element;
|
|
37
|
+
//# sourceMappingURL=Facet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Facet.d.ts","sourceRoot":"","sources":["../../src/kit/Facet.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AASpE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,mCAAmC;AACnC,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAKnD;AAED,6CAA6C;AAC7C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG9C;AAsFD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;IACxF,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,+BAoDA;AAID,wFAAwF;AACxF,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAA0B,EAAE,KAAK,EAAE,EAAE;IAC7E,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAcA"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import styled from "styled-components";
|
|
4
|
+
import { v } from "../theme/tokens.js";
|
|
5
|
+
import { Icon } from "./Icon.js";
|
|
6
|
+
/** compact count: 1234 → "1.2k" */
|
|
7
|
+
export function fmtCount(n) {
|
|
8
|
+
const x = typeof n === "bigint" ? Number(n) : n;
|
|
9
|
+
if (Math.abs(x) >= 1_000_000)
|
|
10
|
+
return `${(x / 1_000_000).toFixed(1)}M`;
|
|
11
|
+
if (Math.abs(x) >= 1_000)
|
|
12
|
+
return `${(x / 1_000).toFixed(1)}k`;
|
|
13
|
+
return String(x);
|
|
14
|
+
}
|
|
15
|
+
/** share as a percentage: 0.0421 → "4.2%" */
|
|
16
|
+
export function fmtShare(share) {
|
|
17
|
+
const pct = share * 100;
|
|
18
|
+
return pct >= 10 ? `${Math.round(pct)}%` : `${pct.toFixed(1)}%`;
|
|
19
|
+
}
|
|
20
|
+
const Wrap = styled.div `position: relative;`;
|
|
21
|
+
const Trigger = styled.button `
|
|
22
|
+
display: inline-flex;
|
|
23
|
+
align-items: center;
|
|
24
|
+
gap: 7px;
|
|
25
|
+
height: 30px;
|
|
26
|
+
padding: 0 11px;
|
|
27
|
+
border-radius: ${v.rCtl};
|
|
28
|
+
font-size: 12.5px;
|
|
29
|
+
font-weight: 500;
|
|
30
|
+
color: ${(p) => (p.$muted ? v.faint : v.text)};
|
|
31
|
+
background: ${(p) => (p.$active ? v.brand12 : v.field)};
|
|
32
|
+
border: 1px solid ${(p) => (p.$active ? v.brand55 : v.fieldLine)};
|
|
33
|
+
cursor: pointer;
|
|
34
|
+
white-space: nowrap;
|
|
35
|
+
&:hover { border-color: ${v.brand55}; }
|
|
36
|
+
&:focus-visible { outline: none; box-shadow: ${v.ring}; }
|
|
37
|
+
.n { color: ${v.muted}; font-size: 11.5px; font-variant-numeric: tabular-nums; }
|
|
38
|
+
.caret { font-size: 10px; opacity: 0.7; }
|
|
39
|
+
`;
|
|
40
|
+
const Menu = styled.div `
|
|
41
|
+
position: absolute;
|
|
42
|
+
top: calc(100% + 6px);
|
|
43
|
+
left: 0;
|
|
44
|
+
min-width: 260px;
|
|
45
|
+
max-height: 320px;
|
|
46
|
+
overflow-y: auto;
|
|
47
|
+
background: ${v.surface2};
|
|
48
|
+
border: 1px solid ${v.line2};
|
|
49
|
+
border-radius: ${v.rCard};
|
|
50
|
+
box-shadow: ${v.elev};
|
|
51
|
+
z-index: ${v.zPop};
|
|
52
|
+
padding: 5px;
|
|
53
|
+
`;
|
|
54
|
+
// The share bar sits behind the row rather than beside it: it turns the list
|
|
55
|
+
// into a distribution at a glance without costing a column.
|
|
56
|
+
const RankRow = styled.label `
|
|
57
|
+
position: relative;
|
|
58
|
+
display: flex;
|
|
59
|
+
align-items: center;
|
|
60
|
+
gap: 9px;
|
|
61
|
+
padding: 7px 9px;
|
|
62
|
+
border-radius: ${v.rCtl};
|
|
63
|
+
font-size: 12.5px;
|
|
64
|
+
color: ${v.text};
|
|
65
|
+
overflow: hidden;
|
|
66
|
+
${(p) => p.$click && `cursor: pointer; &:hover { background: ${v.hover}; }`}
|
|
67
|
+
input { position: relative; }
|
|
68
|
+
`;
|
|
69
|
+
const Bar = styled.span `
|
|
70
|
+
position: absolute;
|
|
71
|
+
inset: 0 auto 0 0;
|
|
72
|
+
width: ${(p) => Math.max(2, p.$share * 100)}%;
|
|
73
|
+
background: ${v.brand08};
|
|
74
|
+
pointer-events: none;
|
|
75
|
+
`;
|
|
76
|
+
const Label = styled.span `
|
|
77
|
+
position: relative;
|
|
78
|
+
flex: 1;
|
|
79
|
+
overflow: hidden;
|
|
80
|
+
text-overflow: ellipsis;
|
|
81
|
+
white-space: nowrap;
|
|
82
|
+
`;
|
|
83
|
+
const Meta = styled.span `
|
|
84
|
+
position: relative;
|
|
85
|
+
color: ${v.faint};
|
|
86
|
+
font-size: 11px;
|
|
87
|
+
font-variant-numeric: tabular-nums;
|
|
88
|
+
white-space: nowrap;
|
|
89
|
+
`;
|
|
90
|
+
const Note = styled.div `
|
|
91
|
+
padding: 12px;
|
|
92
|
+
color: ${v.faint};
|
|
93
|
+
font-size: 12px;
|
|
94
|
+
text-align: center;
|
|
95
|
+
`;
|
|
96
|
+
/**
|
|
97
|
+
* FacetSelect: a multi-select over the values a field takes, each with its
|
|
98
|
+
* count and share. Clearing from the chip is the common case once a filter is
|
|
99
|
+
* set, so the trailing × clears without opening the menu.
|
|
100
|
+
*/
|
|
101
|
+
export function FacetSelect({ label, options, selected, onChange, loading, unavailable }) {
|
|
102
|
+
const [open, setOpen] = useState(false);
|
|
103
|
+
const wrap = useRef(null);
|
|
104
|
+
useEffect(() => {
|
|
105
|
+
if (!open)
|
|
106
|
+
return;
|
|
107
|
+
const onDown = (e) => {
|
|
108
|
+
if (wrap.current && !wrap.current.contains(e.target))
|
|
109
|
+
setOpen(false);
|
|
110
|
+
};
|
|
111
|
+
document.addEventListener("mousedown", onDown);
|
|
112
|
+
return () => document.removeEventListener("mousedown", onDown);
|
|
113
|
+
}, [open]);
|
|
114
|
+
const toggle = (val) => onChange(selected.includes(val) ? selected.filter((s) => s !== val) : [...selected, val]);
|
|
115
|
+
const active = selected.length > 0;
|
|
116
|
+
return (_jsxs(Wrap, { ref: wrap, children: [_jsxs(Trigger, { type: "button", "$active": active, "$muted": !!unavailable, title: unavailable, "aria-expanded": open, onClick: () => setOpen((o) => !o), children: [label, active ? _jsx("span", { className: "n", children: selected.length }) : null, active ? (_jsx("span", { className: "caret", role: "button", "aria-label": "Clear", onClick: (e) => { e.stopPropagation(); onChange([]); setOpen(false); }, children: _jsx(Icon, { name: "close" }) })) : (_jsx("span", { className: "caret", children: _jsx(Icon, { name: "chevron-down" }) }))] }), open ? (_jsxs(Menu, { role: "listbox", "aria-multiselectable": "true", children: [loading ? _jsx(Note, { children: "Loading\u2026" }) : null, !loading && unavailable ? _jsx(Note, { children: unavailable }) : null, !loading && !unavailable && options.length === 0 ? _jsx(Note, { children: "No values in range" }) : null, options.map((o) => (_jsxs(RankRow, { "$click": true, children: [_jsx(Bar, { "$share": o.share }), _jsx("input", { type: "checkbox", checked: selected.includes(o.value), onChange: () => toggle(o.value) }), _jsx(Label, { title: o.value, children: o.value || "(empty)" }), _jsxs(Meta, { children: [fmtCount(o.count), " \u00B7 ", fmtShare(o.share)] })] }, o.value)))] })) : null] }));
|
|
117
|
+
}
|
|
118
|
+
const RankWrap = styled.div `display: flex; flex-direction: column; gap: 1px;`;
|
|
119
|
+
/** RankList: ranked rows with a share bar behind each — "top events", "top clients". */
|
|
120
|
+
export function RankList({ items, onPick, empty = "Nothing in range", limit }) {
|
|
121
|
+
const rows = limit ? items.slice(0, limit) : items;
|
|
122
|
+
if (rows.length === 0)
|
|
123
|
+
return _jsx(Note, { children: empty });
|
|
124
|
+
return (_jsx(RankWrap, { children: rows.map((o) => (_jsxs(RankRow, { as: onPick ? "button" : "div", "$click": !!onPick, onClick: onPick ? () => onPick(o.value) : undefined, children: [_jsx(Bar, { "$share": o.share }), _jsx(Label, { title: o.value, children: o.value || "(empty)" }), _jsxs(Meta, { children: [fmtCount(o.count), " \u00B7 ", fmtShare(o.share)] })] }, o.value))) }));
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=Facet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Facet.js","sourceRoot":"","sources":["../../src/kit/Facet.tsx"],"names":[],"mappings":"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"}
|
package/dist/kit/Form.d.ts
CHANGED
|
@@ -75,4 +75,12 @@ export declare const FormActions: import("styled-components/dist/types").IStyled
|
|
|
75
75
|
export declare const InlineError: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
|
|
76
76
|
style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
|
|
77
77
|
}> & string;
|
|
78
|
+
export declare function CheckRow({ checked, onChange, label, desc, nested, disabled }: {
|
|
79
|
+
checked: boolean;
|
|
80
|
+
onChange: (c: boolean) => void;
|
|
81
|
+
label: ReactNode;
|
|
82
|
+
desc?: ReactNode | undefined;
|
|
83
|
+
nested?: boolean | undefined;
|
|
84
|
+
disabled?: boolean | undefined;
|
|
85
|
+
}): import("react").JSX.Element;
|
|
78
86
|
//# sourceMappingURL=Form.d.ts.map
|
package/dist/kit/Form.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../src/kit/Form.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../src/kit/Form.tsx"],"names":[],"mappings":"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"}
|