nirs4all-ui 0.1.16 → 0.2.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.
- package/README.md +20 -0
- package/assets/dropzone.css +21 -0
- package/assets/pipeline-presets.css +38 -0
- package/assets/qualification.css +142 -0
- package/dist/components/DatasetDropzone.d.ts +44 -0
- package/dist/components/DatasetDropzone.d.ts.map +1 -0
- package/dist/components/DatasetDropzone.js +84 -0
- package/dist/components/DatasetDropzone.js.map +1 -0
- package/dist/components/PipelinePresetCard.d.ts +16 -0
- package/dist/components/PipelinePresetCard.d.ts.map +1 -0
- package/dist/components/PipelinePresetCard.js +21 -0
- package/dist/components/PipelinePresetCard.js.map +1 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/pipelines/canonicalPipelinePreview.d.ts +21 -0
- package/dist/pipelines/canonicalPipelinePreview.d.ts.map +1 -0
- package/dist/pipelines/canonicalPipelinePreview.js +384 -0
- package/dist/pipelines/canonicalPipelinePreview.js.map +1 -0
- package/dist/pipelines/index.d.ts +5 -0
- package/dist/pipelines/index.d.ts.map +1 -0
- package/dist/pipelines/index.js +5 -0
- package/dist/pipelines/index.js.map +1 -0
- package/dist/pipelines/pipelineStats.d.ts +27 -0
- package/dist/pipelines/pipelineStats.d.ts.map +1 -0
- package/dist/pipelines/pipelineStats.js +128 -0
- package/dist/pipelines/pipelineStats.js.map +1 -0
- package/dist/pipelines/presets.d.ts +50 -0
- package/dist/pipelines/presets.d.ts.map +1 -0
- package/dist/pipelines/presets.js +92 -0
- package/dist/pipelines/presets.js.map +1 -0
- package/dist/pipelines/studio-presets.json +3996 -0
- package/dist/pipelines/studioPresets.d.ts +21 -0
- package/dist/pipelines/studioPresets.d.ts.map +1 -0
- package/dist/pipelines/studioPresets.js +12 -0
- package/dist/pipelines/studioPresets.js.map +1 -0
- package/dist/qualification/AvailabilitySummary.d.ts +3 -1
- package/dist/qualification/AvailabilitySummary.d.ts.map +1 -1
- package/dist/qualification/AvailabilitySummary.js +2 -2
- package/dist/qualification/AvailabilitySummary.js.map +1 -1
- package/dist/qualification/CapabilityGrid.d.ts +10 -0
- package/dist/qualification/CapabilityGrid.d.ts.map +1 -0
- package/dist/qualification/CapabilityGrid.js +16 -0
- package/dist/qualification/CapabilityGrid.js.map +1 -0
- package/dist/qualification/CheckList.d.ts +19 -0
- package/dist/qualification/CheckList.d.ts.map +1 -0
- package/dist/qualification/CheckList.js +14 -0
- package/dist/qualification/CheckList.js.map +1 -0
- package/dist/qualification/ComparisonMatrix.d.ts +37 -0
- package/dist/qualification/ComparisonMatrix.d.ts.map +1 -0
- package/dist/qualification/ComparisonMatrix.js +30 -0
- package/dist/qualification/ComparisonMatrix.js.map +1 -0
- package/dist/qualification/EigenvalueScree.d.ts +17 -0
- package/dist/qualification/EigenvalueScree.d.ts.map +1 -0
- package/dist/qualification/EigenvalueScree.js +39 -0
- package/dist/qualification/EigenvalueScree.js.map +1 -0
- package/dist/qualification/EvidenceTable.d.ts +3 -1
- package/dist/qualification/EvidenceTable.d.ts.map +1 -1
- package/dist/qualification/EvidenceTable.js +14 -6
- package/dist/qualification/EvidenceTable.js.map +1 -1
- package/dist/qualification/FindingList.d.ts +3 -1
- package/dist/qualification/FindingList.d.ts.map +1 -1
- package/dist/qualification/FindingList.js +5 -3
- package/dist/qualification/FindingList.js.map +1 -1
- package/dist/qualification/HypothesisTestTable.d.ts +48 -0
- package/dist/qualification/HypothesisTestTable.d.ts.map +1 -0
- package/dist/qualification/HypothesisTestTable.js +26 -0
- package/dist/qualification/HypothesisTestTable.js.map +1 -0
- package/dist/qualification/MeasureBars.d.ts +45 -0
- package/dist/qualification/MeasureBars.d.ts.map +1 -0
- package/dist/qualification/MeasureBars.js +52 -0
- package/dist/qualification/MeasureBars.js.map +1 -0
- package/dist/qualification/PopulationFlow.d.ts +42 -0
- package/dist/qualification/PopulationFlow.d.ts.map +1 -0
- package/dist/qualification/PopulationFlow.js +123 -0
- package/dist/qualification/PopulationFlow.js.map +1 -0
- package/dist/qualification/RepeatabilityProfile.d.ts +19 -0
- package/dist/qualification/RepeatabilityProfile.d.ts.map +1 -0
- package/dist/qualification/RepeatabilityProfile.js +119 -0
- package/dist/qualification/RepeatabilityProfile.js.map +1 -0
- package/dist/qualification/ReplicateHistogram.d.ts +23 -0
- package/dist/qualification/ReplicateHistogram.d.ts.map +1 -0
- package/dist/qualification/ReplicateHistogram.js +41 -0
- package/dist/qualification/ReplicateHistogram.js.map +1 -0
- package/dist/qualification/ScoreMap.d.ts +38 -0
- package/dist/qualification/ScoreMap.d.ts.map +1 -0
- package/dist/qualification/ScoreMap.js +77 -0
- package/dist/qualification/ScoreMap.js.map +1 -0
- package/dist/qualification/SpectraExplorer.d.ts +31 -0
- package/dist/qualification/SpectraExplorer.d.ts.map +1 -0
- package/dist/qualification/SpectraExplorer.js +111 -0
- package/dist/qualification/SpectraExplorer.js.map +1 -0
- package/dist/qualification/StatTile.d.ts +16 -0
- package/dist/qualification/StatTile.d.ts.map +1 -0
- package/dist/qualification/StatTile.js +10 -0
- package/dist/qualification/StatTile.js.map +1 -0
- package/dist/qualification/TargetDistribution.d.ts +35 -0
- package/dist/qualification/TargetDistribution.d.ts.map +1 -0
- package/dist/qualification/TargetDistribution.js +87 -0
- package/dist/qualification/TargetDistribution.js.map +1 -0
- package/dist/qualification/_chart.d.ts +19 -0
- package/dist/qualification/_chart.d.ts.map +1 -0
- package/dist/qualification/_chart.js +30 -0
- package/dist/qualification/_chart.js.map +1 -0
- package/dist/qualification/engineNumber.d.ts +26 -0
- package/dist/qualification/engineNumber.d.ts.map +1 -0
- package/dist/qualification/engineNumber.js +88 -0
- package/dist/qualification/engineNumber.js.map +1 -0
- package/dist/qualification/extract.d.ts +107 -0
- package/dist/qualification/extract.d.ts.map +1 -0
- package/dist/qualification/extract.js +139 -0
- package/dist/qualification/extract.js.map +1 -0
- package/dist/qualification/extractBlocks.d.ts +441 -0
- package/dist/qualification/extractBlocks.d.ts.map +1 -0
- package/dist/qualification/extractBlocks.js +576 -0
- package/dist/qualification/extractBlocks.js.map +1 -0
- package/dist/qualification/index.d.ts +16 -0
- package/dist/qualification/index.d.ts.map +1 -1
- package/dist/qualification/index.js +16 -0
- package/dist/qualification/index.js.map +1 -1
- package/dist/qualification/locale.d.ts +317 -1
- package/dist/qualification/locale.d.ts.map +1 -1
- package/dist/qualification/locale.js +369 -0
- package/dist/qualification/locale.js.map +1 -1
- package/dist/qualification/report.d.ts +13 -1
- package/dist/qualification/report.d.ts.map +1 -1
- package/dist/qualification/report.js +94 -3
- package/dist/qualification/report.js.map +1 -1
- package/dist/styles/index.d.ts +7 -1
- package/dist/styles/index.d.ts.map +1 -1
- package/dist/styles/index.js +5 -0
- package/dist/styles/index.js.map +1 -1
- package/package.json +7 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReplicateHistogram.js","sourceRoot":"","sources":["../../src/qualification/ReplicateHistogram.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type Locale } from '../lab/locale.js';
|
|
2
|
+
export interface ScorePoint {
|
|
3
|
+
id: string;
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
group?: string | null;
|
|
7
|
+
value?: number | null;
|
|
8
|
+
/** extra tooltip lines (metadata) */
|
|
9
|
+
details?: readonly string[];
|
|
10
|
+
}
|
|
11
|
+
export type ScoreColorMode = 'none' | 'group' | 'value';
|
|
12
|
+
export interface ScoreMapProps {
|
|
13
|
+
points: readonly ScorePoint[];
|
|
14
|
+
colorBy?: ScoreColorMode;
|
|
15
|
+
xLabel: string;
|
|
16
|
+
yLabel: string;
|
|
17
|
+
/** legend title for group/value coloring */
|
|
18
|
+
colorLabel?: string;
|
|
19
|
+
title: string;
|
|
20
|
+
locale?: Locale;
|
|
21
|
+
width?: number;
|
|
22
|
+
height?: number;
|
|
23
|
+
/** fixed colours for some groups (e.g. a neutral grey for HDBSCAN noise); other groups use the palette */
|
|
24
|
+
groupColors?: Readonly<Record<string, string>> | undefined;
|
|
25
|
+
/** draw the y = x line on a shared axis extent (e.g. predicted vs observed) */
|
|
26
|
+
identityLine?: boolean;
|
|
27
|
+
className?: string;
|
|
28
|
+
}
|
|
29
|
+
/** One-hue sequential ramp (light → dark teal) for continuous coloring. */
|
|
30
|
+
export declare const SCORE_SEQUENTIAL: readonly ["#99f6e4", "#2dd4bf", "#0d9488", "#0f766e", "#134e4a"];
|
|
31
|
+
/** Group → color in a fixed order (sorted names), so a color follows its group, never its rank. */
|
|
32
|
+
export declare function scoreGroupColors(points: readonly ScorePoint[], fixed?: Readonly<Record<string, string>>): Map<string, string>;
|
|
33
|
+
/**
|
|
34
|
+
* Engine score scatter with categorical or sequential coloring, nearest-point hover,
|
|
35
|
+
* keyboard browsing (arrow keys) and a legend / colorbar. Axes scale independently.
|
|
36
|
+
*/
|
|
37
|
+
export declare function ScoreMap({ points, colorBy, xLabel, yLabel, colorLabel, title, locale, width, height, groupColors, identityLine, className }: ScoreMapProps): import("react").JSX.Element;
|
|
38
|
+
//# sourceMappingURL=ScoreMap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScoreMap.d.ts","sourceRoot":"","sources":["../../src/qualification/ScoreMap.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAOpD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,qCAAqC;IACrC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0GAA0G;IAC1G,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAC3D,+EAA+E;IAC/E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,kEAAmE,CAAC;AAKjG,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,EAAE,KAAK,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAIjI;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAa,EAAE,KAAW,EAAE,MAAY,EAAE,WAAW,EAAE,YAAoB,EAAE,SAAS,EAAE,EAAE,aAAa,+BAmH9L"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId, useState } from 'react';
|
|
3
|
+
import { loc } from '../lab/locale.js';
|
|
4
|
+
import { categoricalColor, rampAt } from '../viz/theme.js';
|
|
5
|
+
import { extentOf, makeScale, niceExtent, ticks } from '../viz/geometry.js';
|
|
6
|
+
import { ChartTooltip, fmt, TipRow } from './_chart.js';
|
|
7
|
+
import { cx } from './_cx.js';
|
|
8
|
+
import { CHART_TEXT as C } from './locale.js';
|
|
9
|
+
/** One-hue sequential ramp (light → dark teal) for continuous coloring. */
|
|
10
|
+
export const SCORE_SEQUENTIAL = ['#99f6e4', '#2dd4bf', '#0d9488', '#0f766e', '#134e4a'];
|
|
11
|
+
const BASE = '#0d9488';
|
|
12
|
+
const NULL = '#94a3b8';
|
|
13
|
+
const PAD = { left: 52, right: 14, top: 12, bottom: 40 };
|
|
14
|
+
/** Group → color in a fixed order (sorted names), so a color follows its group, never its rank. */
|
|
15
|
+
export function scoreGroupColors(points, fixed = {}) {
|
|
16
|
+
const groups = [...new Set(points.flatMap((p) => (p.group ? [p.group] : [])))].sort((a, b) => a.localeCompare(b));
|
|
17
|
+
const free = groups.filter((g) => !(g in fixed));
|
|
18
|
+
return new Map(groups.map((g) => [g, fixed[g] ?? categoricalColor(free.indexOf(g))]));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Engine score scatter with categorical or sequential coloring, nearest-point hover,
|
|
22
|
+
* keyboard browsing (arrow keys) and a legend / colorbar. Axes scale independently.
|
|
23
|
+
*/
|
|
24
|
+
export function ScoreMap({ points, colorBy = 'none', xLabel, yLabel, colorLabel, title, locale = 'fr', width = 560, height = 400, groupColors, identityLine = false, className }) {
|
|
25
|
+
const id = useId();
|
|
26
|
+
const [hover, setHover] = useState(null);
|
|
27
|
+
const valid = points.filter((p) => Number.isFinite(p.x) && Number.isFinite(p.y));
|
|
28
|
+
const x0 = PAD.left;
|
|
29
|
+
const x1 = width - PAD.right;
|
|
30
|
+
const y0 = PAD.top;
|
|
31
|
+
const y1 = height - PAD.bottom;
|
|
32
|
+
const xd = niceExtent(identityLine ? valid.flatMap((p) => [p.x, p.y]) : valid.map((p) => p.x), 0.08);
|
|
33
|
+
const yd = identityLine ? xd : niceExtent(valid.map((p) => p.y), 0.08);
|
|
34
|
+
const xs = makeScale(xd, x0, x1);
|
|
35
|
+
const ys = makeScale(yd, y1, y0);
|
|
36
|
+
const groups = scoreGroupColors(valid, groupColors);
|
|
37
|
+
const values = valid.flatMap((p) => (typeof p.value === 'number' && Number.isFinite(p.value) ? [p.value] : []));
|
|
38
|
+
const vd = extentOf(values.length ? values : [0, 1]);
|
|
39
|
+
const colorOf = (p) => {
|
|
40
|
+
if (colorBy === 'group')
|
|
41
|
+
return p.group ? (groups.get(p.group) ?? NULL) : NULL;
|
|
42
|
+
if (colorBy === 'value')
|
|
43
|
+
return typeof p.value === 'number' && Number.isFinite(p.value) ? rampAt(SCORE_SEQUENTIAL, (p.value - vd.min) / (vd.max - vd.min || 1)) : NULL;
|
|
44
|
+
return BASE;
|
|
45
|
+
};
|
|
46
|
+
const isNull = (p) => (colorBy === 'group' && !p.group) || (colorBy === 'value' && !(typeof p.value === 'number' && Number.isFinite(p.value)));
|
|
47
|
+
const onMove = (e) => {
|
|
48
|
+
const box = e.currentTarget.ownerSVGElement?.getBoundingClientRect();
|
|
49
|
+
if (!box || box.width === 0)
|
|
50
|
+
return;
|
|
51
|
+
const px = ((e.clientX - box.left) / box.width) * width;
|
|
52
|
+
const py = ((e.clientY - box.top) / box.height) * height;
|
|
53
|
+
let best = -1;
|
|
54
|
+
let bestD = 22 * 22;
|
|
55
|
+
valid.forEach((p, i) => {
|
|
56
|
+
const d = (xs(p.x) - px) ** 2 + (ys(p.y) - py) ** 2;
|
|
57
|
+
if (d < bestD) {
|
|
58
|
+
bestD = d;
|
|
59
|
+
best = i;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
setHover(best >= 0 ? best : null);
|
|
63
|
+
};
|
|
64
|
+
const onKey = (e) => {
|
|
65
|
+
if (!valid.length)
|
|
66
|
+
return;
|
|
67
|
+
const step = e.key === 'ArrowRight' || e.key === 'ArrowDown' ? 1 : e.key === 'ArrowLeft' || e.key === 'ArrowUp' ? -1 : 0;
|
|
68
|
+
if (!step)
|
|
69
|
+
return;
|
|
70
|
+
e.preventDefault();
|
|
71
|
+
setHover((cur) => (cur === null ? 0 : (cur + step + valid.length) % valid.length));
|
|
72
|
+
};
|
|
73
|
+
const hp = hover !== null ? valid[hover] : undefined;
|
|
74
|
+
const desc = `${valid.length} points; ${xLabel} ${fmt(xd.min)}…${fmt(xd.max)}; ${yLabel} ${fmt(yd.min)}…${fmt(yd.max)}`;
|
|
75
|
+
return (_jsxs("figure", { className: cx('n4q-chart', 'n4q-scores', className), children: [_jsxs("div", { className: "n4q-chart-plot", children: [_jsxs("svg", { viewBox: `0 0 ${width} ${height}`, className: "n4q-svg", role: "img", "aria-labelledby": `${id}-t ${id}-d`, tabIndex: 0, onKeyDown: onKey, onBlur: () => setHover(null), children: [_jsx("title", { id: `${id}-t`, children: title }), _jsx("desc", { id: `${id}-d`, children: desc }), ticks(xd, Math.max(3, Math.min(6, Math.floor((x1 - x0) / 80)))).map((v) => (_jsxs("g", { children: [_jsx("line", { className: v === 0 ? 'n4q-zero' : 'n4q-grid', x1: xs(v), x2: xs(v), y1: y0, y2: y1 }), _jsx("text", { className: "n4q-tick", x: xs(v), y: y1 + 15, textAnchor: "middle", children: fmt(v) })] }, `x${v}`))), ticks(yd, 5).map((v) => (_jsxs("g", { children: [_jsx("line", { className: v === 0 ? 'n4q-zero' : 'n4q-grid', x1: x0, x2: x1, y1: ys(v), y2: ys(v) }), _jsx("text", { className: "n4q-tick", x: x0 - 6, y: ys(v) + 3, textAnchor: "end", children: fmt(v) })] }, `y${v}`))), _jsx("text", { className: "n4q-axis-title", x: (x0 + x1) / 2, y: height - 6, textAnchor: "middle", children: xLabel }), _jsx("text", { className: "n4q-axis-title", transform: `translate(13 ${(y0 + y1) / 2}) rotate(-90)`, textAnchor: "middle", children: yLabel }), identityLine ? _jsx("line", { className: "n4q-identity", x1: xs(xd.min), y1: ys(xd.min), x2: xs(xd.max), y2: ys(xd.max) }) : null, valid.map((p, i) => (_jsx("circle", { className: "n4q-dot", cx: xs(p.x), cy: ys(p.y), r: hover === i ? 7 : 5, fill: colorOf(p), fillOpacity: hover === null || hover === i ? 0.92 : 0.45, style: isNull(p) ? { fill: 'var(--n4q-surface, #fff)', stroke: NULL, strokeWidth: 1.5 } : undefined }, `${p.id}:${i}`))), _jsx("rect", { x: x0, y: y0, width: x1 - x0, height: y1 - y0, fill: "transparent", onPointerMove: onMove, onPointerLeave: () => setHover(null) })] }), hp ? (_jsxs(ChartTooltip, { x: xs(hp.x), y: ys(hp.y), width: width, height: height, children: [_jsx("div", { className: "n4q-tip-head", children: hp.id }), _jsx(TipRow, { label: xLabel, value: fmt(hp.x) }), _jsx(TipRow, { label: yLabel, value: fmt(hp.y) }), colorBy === 'value' ? _jsx(TipRow, { color: colorOf(hp), label: colorLabel ?? '', value: hp.value === null || hp.value === undefined ? loc(C.noValue, locale) : fmt(hp.value) }) : null, colorBy === 'group' ? _jsx(TipRow, { color: colorOf(hp), label: colorLabel ?? '', value: hp.group ?? loc(C.noValue, locale) }) : null, (hp.details ?? []).map((d) => _jsx("div", { className: "n4q-tip-sub", children: d }, d))] })) : null] }), colorBy !== 'none' ? (_jsx("figcaption", { children: colorBy === 'group' ? (_jsxs("ul", { className: "n4q-legend", "aria-label": colorLabel, children: [colorLabel ? _jsx("li", { className: "n4q-legend-title", children: colorLabel }) : null, [...groups].map(([g, c]) => _jsxs("li", { children: [_jsx("span", { className: "n4q-key-dot", style: { background: c }, "aria-hidden": "true" }), g] }, g)), valid.some(isNull) ? _jsxs("li", { children: [_jsx("span", { className: "n4q-key-dot n4q-key-null", "aria-hidden": "true" }), loc(C.noValue, locale)] }) : null] })) : (_jsxs("div", { className: "n4q-colorbar", "aria-label": colorLabel, children: [colorLabel ? _jsx("span", { className: "n4q-legend-title", children: colorLabel }) : null, _jsx("span", { children: fmt(vd.min) }), _jsx("span", { className: "n4q-colorbar-ramp", style: { background: `linear-gradient(90deg, ${SCORE_SEQUENTIAL.join(', ')})` }, "aria-hidden": "true" }), _jsx("span", { children: fmt(vd.max) }), valid.some(isNull) ? _jsxs("span", { children: [_jsx("span", { className: "n4q-key-dot n4q-key-null", "aria-hidden": "true" }), " ", loc(C.noValue, locale)] }) : null] })) })) : null] }));
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=ScoreMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScoreMap.js","sourceRoot":"","sources":["../../src/qualification/ScoreMap.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type Locale } from '../lab/locale.js';
|
|
2
|
+
/** One raw input spectrum; null cells are drawn as gaps and flagged on the axis. */
|
|
3
|
+
export interface ExplorerSeries {
|
|
4
|
+
id: string;
|
|
5
|
+
values: readonly (number | null)[];
|
|
6
|
+
color: string;
|
|
7
|
+
/** secondary text (sample id, group…) */
|
|
8
|
+
label?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SpectraExplorerProps {
|
|
11
|
+
axis: readonly number[];
|
|
12
|
+
series: readonly ExplorerSeries[];
|
|
13
|
+
axisUnit?: string;
|
|
14
|
+
yLabel?: string;
|
|
15
|
+
title: string;
|
|
16
|
+
/** emphasised series ids (host-controlled selection) */
|
|
17
|
+
selected?: readonly string[];
|
|
18
|
+
/** called on click / keyboard selection; null clears */
|
|
19
|
+
onSelect?: (id: string | null) => void;
|
|
20
|
+
locale?: Locale;
|
|
21
|
+
width?: number;
|
|
22
|
+
height?: number;
|
|
23
|
+
className?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Raw spectra explorer: hover finds the nearest curve at the nearest band, click (or
|
|
27
|
+
* ↑/↓) selects it, ←/→ moves along the axis. Missing cells leave gaps and get a mark
|
|
28
|
+
* on the axis. Draws input values only.
|
|
29
|
+
*/
|
|
30
|
+
export declare function SpectraExplorer({ axis, series, axisUnit, yLabel, title, selected, onSelect, locale, width, height, className }: SpectraExplorerProps): import("react").JSX.Element;
|
|
31
|
+
//# sourceMappingURL=SpectraExplorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpectraExplorer.d.ts","sourceRoot":"","sources":["../../src/qualification/SpectraExplorer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAMpD,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmBD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAa,EAAE,MAAW,EAAE,KAAK,EAAE,QAAa,EAAE,QAAQ,EAAE,MAAa,EAAE,KAAW,EAAE,MAAY,EAAE,SAAS,EAAE,EAAE,oBAAoB,+BA4ItL"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useId, useState } from 'react';
|
|
3
|
+
import { loc } from '../lab/locale.js';
|
|
4
|
+
import { extentOf, makeScale, niceExtent, ticks } from '../viz/geometry.js';
|
|
5
|
+
import { ChartTooltip, fmt, TipRow } from './_chart.js';
|
|
6
|
+
import { cx } from './_cx.js';
|
|
7
|
+
import { CHART_TEXT as C } from './locale.js';
|
|
8
|
+
const PAD = { left: 54, right: 14, top: 12, bottom: 36 };
|
|
9
|
+
const MISSING = '#e11d48';
|
|
10
|
+
function path(values, x, y) {
|
|
11
|
+
let d = '';
|
|
12
|
+
let open = false;
|
|
13
|
+
values.forEach((v, i) => {
|
|
14
|
+
if (v === null || !Number.isFinite(v)) {
|
|
15
|
+
open = false;
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
d += `${open ? 'L' : 'M'}${x(i).toFixed(1)},${y(v).toFixed(1)}`;
|
|
19
|
+
open = true;
|
|
20
|
+
});
|
|
21
|
+
return d;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Raw spectra explorer: hover finds the nearest curve at the nearest band, click (or
|
|
25
|
+
* ↑/↓) selects it, ←/→ moves along the axis. Missing cells leave gaps and get a mark
|
|
26
|
+
* on the axis. Draws input values only.
|
|
27
|
+
*/
|
|
28
|
+
export function SpectraExplorer({ axis, series, axisUnit = '', yLabel = '', title, selected = [], onSelect, locale = 'fr', width = 900, height = 340, className }) {
|
|
29
|
+
const id = useId();
|
|
30
|
+
const [hover, setHover] = useState(null);
|
|
31
|
+
const t = (k) => loc(C[k], locale);
|
|
32
|
+
const n = axis.length;
|
|
33
|
+
const x0 = PAD.left;
|
|
34
|
+
const x1 = width - PAD.right;
|
|
35
|
+
const y0 = PAD.top;
|
|
36
|
+
const y1 = height - PAD.bottom;
|
|
37
|
+
const xd = extentOf(axis);
|
|
38
|
+
const all = [];
|
|
39
|
+
for (const s of series)
|
|
40
|
+
for (const v of s.values)
|
|
41
|
+
if (v !== null && Number.isFinite(v))
|
|
42
|
+
all.push(v);
|
|
43
|
+
const yd = niceExtent(all.length ? all : [0, 1], 0.06);
|
|
44
|
+
const xs = makeScale(xd, x0, x1);
|
|
45
|
+
const ys = makeScale(yd, y1, y0);
|
|
46
|
+
const xAt = (i) => xs(axis[i]);
|
|
47
|
+
const chosen = new Set(selected);
|
|
48
|
+
const selectedIdx = series.findIndex((s) => chosen.has(s.id));
|
|
49
|
+
const focusIdx = hover?.series ?? (selectedIdx >= 0 ? selectedIdx : null);
|
|
50
|
+
const emphasised = (k) => k === focusIdx || chosen.has(series[k].id);
|
|
51
|
+
const u = axisUnit ? ` ${axisUnit}` : '';
|
|
52
|
+
const nearestBand = (px) => {
|
|
53
|
+
let best = 0;
|
|
54
|
+
let bestD = Infinity;
|
|
55
|
+
for (let i = 0; i < n; i++) {
|
|
56
|
+
const d = Math.abs(xAt(i) - px);
|
|
57
|
+
if (d < bestD) {
|
|
58
|
+
bestD = d;
|
|
59
|
+
best = i;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return best;
|
|
63
|
+
};
|
|
64
|
+
const onMove = (e) => {
|
|
65
|
+
const box = e.currentTarget.ownerSVGElement?.getBoundingClientRect();
|
|
66
|
+
if (!box || box.width === 0 || n === 0)
|
|
67
|
+
return;
|
|
68
|
+
const px = ((e.clientX - box.left) / box.width) * width;
|
|
69
|
+
const py = ((e.clientY - box.top) / box.height) * height;
|
|
70
|
+
const band = nearestBand(px);
|
|
71
|
+
let best = null;
|
|
72
|
+
let bestD = 18;
|
|
73
|
+
series.forEach((s, k) => {
|
|
74
|
+
const v = s.values[band];
|
|
75
|
+
if (v === null || v === undefined || !Number.isFinite(v))
|
|
76
|
+
return;
|
|
77
|
+
const d = Math.abs(ys(v) - py);
|
|
78
|
+
if (d < bestD) {
|
|
79
|
+
bestD = d;
|
|
80
|
+
best = k;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
setHover({ series: best, band });
|
|
84
|
+
};
|
|
85
|
+
const onKey = (e) => {
|
|
86
|
+
if (!n || !series.length)
|
|
87
|
+
return;
|
|
88
|
+
if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {
|
|
89
|
+
e.preventDefault();
|
|
90
|
+
const step = e.key === 'ArrowDown' ? 1 : -1;
|
|
91
|
+
const next = selectedIdx < 0 ? 0 : (selectedIdx + step + series.length) % series.length;
|
|
92
|
+
onSelect?.(series[next].id);
|
|
93
|
+
setHover((h) => ({ series: null, band: h?.band ?? Math.floor(n / 2) }));
|
|
94
|
+
}
|
|
95
|
+
else if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
|
|
96
|
+
e.preventDefault();
|
|
97
|
+
const step = e.key === 'ArrowRight' ? 1 : -1;
|
|
98
|
+
setHover((h) => ({ series: null, band: Math.min(n - 1, Math.max(0, (h?.band ?? Math.floor(n / 2)) + step)) }));
|
|
99
|
+
}
|
|
100
|
+
else if (e.key === 'Escape') {
|
|
101
|
+
onSelect?.(null);
|
|
102
|
+
setHover(null);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const missing = series.flatMap((s, k) => s.values.flatMap((v, i) => (v === null || !Number.isFinite(v) ? [{ k, i }] : [])));
|
|
106
|
+
const focus = focusIdx !== null ? series[focusIdx] : undefined;
|
|
107
|
+
const band = hover?.band ?? null;
|
|
108
|
+
const desc = `${series.length} ${t('spectra')}, ${n} ${t('band')}; ${fmt(xd.min)}–${fmt(xd.max)}${u}; ${missing.length} ${t('missingValue')}`;
|
|
109
|
+
return (_jsx("figure", { className: cx('n4q-chart', 'n4q-explorer', className), children: _jsxs("div", { className: "n4q-chart-plot", children: [_jsxs("svg", { viewBox: `0 0 ${width} ${height}`, className: "n4q-svg", role: "img", "aria-labelledby": `${id}-t ${id}-d`, tabIndex: 0, onKeyDown: onKey, onBlur: () => setHover(null), children: [_jsx("title", { id: `${id}-t`, children: title }), _jsx("desc", { id: `${id}-d`, children: desc }), ticks(yd, 5).map((v) => (_jsxs("g", { children: [_jsx("line", { className: "n4q-grid", x1: x0, x2: x1, y1: ys(v), y2: ys(v) }), _jsx("text", { className: "n4q-tick", x: x0 - 6, y: ys(v) + 3, textAnchor: "end", children: fmt(v) })] }, `y${v}`))), ticks(xd, Math.max(3, Math.min(8, Math.floor((x1 - x0) / 90)))).map((v) => (_jsx("text", { className: "n4q-tick", x: xs(v), y: y1 + 16, textAnchor: "middle", children: fmt(v) }, `x${v}`))), _jsx("line", { className: "n4q-baseline", x1: x0, x2: x1, y1: y1, y2: y1 }), axisUnit ? _jsx("text", { className: "n4q-axis-title", x: (x0 + x1) / 2, y: height - 4, textAnchor: "middle", children: axisUnit }) : null, yLabel ? _jsx("text", { className: "n4q-axis-title", transform: `translate(12 ${(y0 + y1) / 2}) rotate(-90)`, textAnchor: "middle", children: yLabel }) : null, _jsx("g", { className: "n4q-explorer-lines", "data-dim": focusIdx !== null || chosen.size > 0 || undefined, children: series.map((s, k) => (emphasised(k) ? null : _jsx("path", { d: path(s.values, xAt, ys), stroke: s.color, className: "n4q-explorer-line" }, s.id))) }), series.map((s, k) => (emphasised(k) ? _jsx("path", { d: path(s.values, xAt, ys), stroke: s.color, className: "n4q-explorer-focus" }, `f-${s.id}`) : null)), missing.map(({ k, i }) => (_jsx("path", { d: `M${xAt(i)},${y1 - 1}l-4,-7h8Z`, fill: MISSING, className: "n4q-explorer-missing", "data-active": emphasised(k) || undefined }, `m${k}-${i}`))), band !== null ? _jsx("line", { className: "n4q-crosshair", x1: xAt(band), x2: xAt(band), y1: y0, y2: y1, pointerEvents: "none" }) : null, band !== null && focus && focus.values[band] !== null && focus.values[band] !== undefined ? (_jsx("circle", { className: "n4q-marker", cx: xAt(band), cy: ys(focus.values[band]), r: 4.5, fill: focus.color, pointerEvents: "none" })) : null, _jsx("rect", { x: x0, y: y0, width: x1 - x0, height: y1 - y0, fill: "transparent", style: { cursor: onSelect ? 'pointer' : 'default' }, onPointerMove: onMove, onPointerLeave: () => setHover(null), onClick: () => onSelect?.(hover?.series !== null && hover?.series !== undefined ? series[hover.series].id : null) })] }), band !== null ? (_jsxs(ChartTooltip, { x: xAt(band), y: focus && focus.values[band] != null ? ys(focus.values[band]) : y0 + 10, width: width, height: height, children: [_jsxs("div", { className: "n4q-tip-head", children: [t('band'), " ", fmt(axis[band] ?? null), u] }), focus ? (_jsxs(_Fragment, { children: [_jsx(TipRow, { line: true, color: focus.color, label: focus.id, value: focus.values[band] == null ? '—' : fmt(focus.values[band]) }), focus.label ? _jsx("div", { className: "n4q-tip-sub", children: focus.label }) : null, focus.values[band] == null ? _jsx("div", { className: "n4q-tip-sub n4q-tip-alert", children: t('missingValue') }) : null] })) : _jsxs("div", { className: "n4q-tip-sub", children: [series.length, " ", t('spectra')] })] })) : null] }) }));
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=SpectraExplorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpectraExplorer.js","sourceRoot":"","sources":["../../src/qualification/SpectraExplorer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export type StatTone = 'neutral' | 'good' | 'warning' | 'critical';
|
|
3
|
+
export interface StatTileProps {
|
|
4
|
+
label: string;
|
|
5
|
+
value: ReactNode;
|
|
6
|
+
/** small text after the value (unit, denominator) */
|
|
7
|
+
suffix?: ReactNode;
|
|
8
|
+
hint?: ReactNode;
|
|
9
|
+
/** state tone; always paired with a text hint, never colour alone */
|
|
10
|
+
tone?: StatTone;
|
|
11
|
+
href?: string;
|
|
12
|
+
className?: string;
|
|
13
|
+
}
|
|
14
|
+
/** Headline number tile (label · value · hint); links to its evidence when `href` is given. */
|
|
15
|
+
export declare function StatTile({ label, value, suffix, hint, tone, href, className }: StatTileProps): import("react").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=StatTile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatTile.d.ts","sourceRoot":"","sources":["../../src/qualification/StatTile.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,qDAAqD;IACrD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,qEAAqE;IACrE,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,+FAA+F;AAC/F,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,aAAa,+BAWxG"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { cx } from './_cx.js';
|
|
3
|
+
/** Headline number tile (label · value · hint); links to its evidence when `href` is given. */
|
|
4
|
+
export function StatTile({ label, value, suffix, hint, tone = 'neutral', href, className }) {
|
|
5
|
+
const body = (_jsxs(_Fragment, { children: [_jsx("span", { className: "n4q-stat-label", children: label }), _jsxs("span", { className: "n4q-stat-value", children: [value, suffix ? _jsx("span", { className: "n4q-stat-suffix", children: suffix }) : null] }), hint ? _jsx("span", { className: "n4q-stat-hint", children: hint }) : null] }));
|
|
6
|
+
return href
|
|
7
|
+
? _jsx("a", { className: cx('n4q-stat', className), "data-tone": tone, href: href, children: body })
|
|
8
|
+
: _jsx("div", { className: cx('n4q-stat', className), "data-tone": tone, children: body });
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=StatTile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatTile.js","sourceRoot":"","sources":["../../src/qualification/StatTile.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAgB9B,+FAA+F;AAC/F,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,SAAS,EAAiB;IACvG,MAAM,IAAI,GAAG,CACX,8BACE,eAAM,SAAS,EAAC,gBAAgB,YAAE,KAAK,GAAQ,EAC/C,gBAAM,SAAS,EAAC,gBAAgB,aAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,iBAAiB,YAAE,MAAM,GAAQ,CAAC,CAAC,CAAC,IAAI,IAAQ,EACjH,IAAI,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,eAAe,YAAE,IAAI,GAAQ,CAAC,CAAC,CAAC,IAAI,IAC3D,CACJ,CAAC;IACF,OAAO,IAAI;QACT,CAAC,CAAC,YAAG,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,eAAa,IAAI,EAAE,IAAI,EAAE,IAAI,YAAG,IAAI,GAAK;QAClF,CAAC,CAAC,cAAK,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,eAAa,IAAI,YAAG,IAAI,GAAO,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type Locale } from '../lab/locale.js';
|
|
2
|
+
import type { ContinuousSummary } from './extract.js';
|
|
3
|
+
export type TargetPointStatus = 'exact' | 'censored' | 'composite';
|
|
4
|
+
/** One raw reference value, as declared in the host input (never a computed value). */
|
|
5
|
+
export interface TargetPoint {
|
|
6
|
+
id: string;
|
|
7
|
+
value: number;
|
|
8
|
+
status: TargetPointStatus;
|
|
9
|
+
}
|
|
10
|
+
export interface TargetDistributionProps {
|
|
11
|
+
/** engine (Methods) summary of the eligible exact values */
|
|
12
|
+
summary: ContinuousSummary | null;
|
|
13
|
+
/** raw declared values shown as a histogram under the box (host decides the population) */
|
|
14
|
+
points?: readonly TargetPoint[];
|
|
15
|
+
unit?: string | null;
|
|
16
|
+
title: string;
|
|
17
|
+
locale?: Locale;
|
|
18
|
+
width?: number;
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Continuous target: the engine's quartile box (min–max whiskers, Q1–Q3 box, median,
|
|
23
|
+
* mean) above a histogram of the raw declared values; censored/composite counts are
|
|
24
|
+
* stacked as outlined bars.
|
|
25
|
+
*/
|
|
26
|
+
export declare function TargetDistribution({ summary, points: declared, unit, title, locale, width, className }: TargetDistributionProps): import("react").JSX.Element;
|
|
27
|
+
export interface ClassCountBarsProps {
|
|
28
|
+
counts: Readonly<Record<string, number>>;
|
|
29
|
+
title: string;
|
|
30
|
+
width?: number;
|
|
31
|
+
className?: string;
|
|
32
|
+
}
|
|
33
|
+
/** Categorical target: horizontal bars of engine class counts, largest first, value at the tip. */
|
|
34
|
+
export declare function ClassCountBars({ counts, title, width, className }: ClassCountBarsProps): import("react").JSX.Element;
|
|
35
|
+
//# sourceMappingURL=TargetDistribution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TargetDistribution.d.ts","sourceRoot":"","sources":["../../src/qualification/TargetDistribution.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAKpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;AAEnE,uFAAuF;AACvF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,4DAA4D;IAC5D,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,2FAA2F;IAC3F,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAa,EAAE,IAAI,EAAE,KAAK,EAAE,MAAa,EAAE,KAAY,EAAE,SAAS,EAAE,EAAE,uBAAuB,+BAyIlJ;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAW,EAAE,SAAS,EAAE,EAAE,mBAAmB,+BA2B5F"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId, useState } from 'react';
|
|
3
|
+
import { loc } from '../lab/locale.js';
|
|
4
|
+
import { extentOf, makeScale, niceExtent, ticks } from '../viz/geometry.js';
|
|
5
|
+
import { ChartTooltip, fmt, TipRow } from './_chart.js';
|
|
6
|
+
import { cx } from './_cx.js';
|
|
7
|
+
import { CHART_TEXT as C } from './locale.js';
|
|
8
|
+
const STATUS_COLOR = { exact: '#0d9488', censored: '#d97706', composite: '#7c3aed' };
|
|
9
|
+
const BOX = '#0d9488';
|
|
10
|
+
const MEAN = '#4f46e5';
|
|
11
|
+
const PAD = { left: 16, right: 16 };
|
|
12
|
+
/** Equal-width bins over the shown extent (about √n bins, 5 to 40), with counts per status. */
|
|
13
|
+
function binsOf(points, lo, hi) {
|
|
14
|
+
const k = Math.max(5, Math.min(40, Math.ceil(Math.sqrt(points.length))));
|
|
15
|
+
const step = hi > lo ? (hi - lo) / k : 1;
|
|
16
|
+
const bins = Array.from({ length: k }, (_, i) => ({ from: lo + i * step, to: lo + (i + 1) * step, exact: 0, censored: 0, composite: 0 }));
|
|
17
|
+
for (const p of points)
|
|
18
|
+
bins[Math.min(k - 1, Math.max(0, Math.floor((p.value - lo) / step)))][p.status] += 1;
|
|
19
|
+
return bins;
|
|
20
|
+
}
|
|
21
|
+
const STACK = ['exact', 'censored', 'composite'];
|
|
22
|
+
/**
|
|
23
|
+
* Continuous target: the engine's quartile box (min–max whiskers, Q1–Q3 box, median,
|
|
24
|
+
* mean) above a histogram of the raw declared values; censored/composite counts are
|
|
25
|
+
* stacked as outlined bars.
|
|
26
|
+
*/
|
|
27
|
+
export function TargetDistribution({ summary, points: declared = [], unit, title, locale = 'fr', width = 1000, className }) {
|
|
28
|
+
const id = useId();
|
|
29
|
+
const [hover, setHover] = useState(null);
|
|
30
|
+
const t = (k) => loc(C[k], locale);
|
|
31
|
+
// non-finite values cannot be placed on the axis; they are neither binned nor counted
|
|
32
|
+
const points = declared.filter((p) => Number.isFinite(p.value));
|
|
33
|
+
const height = points.length ? 236 : 112;
|
|
34
|
+
const x0 = PAD.left;
|
|
35
|
+
const x1 = width - PAD.right;
|
|
36
|
+
const all = [...points.map((p) => p.value), ...(summary ? [summary.min, summary.max] : [])];
|
|
37
|
+
const range = extentOf(all.length ? all : [0, 1]);
|
|
38
|
+
const xd = niceExtent(all.length ? all : [0, 1], 0.04);
|
|
39
|
+
const xs = makeScale(xd, x0, x1);
|
|
40
|
+
const boxY = 18;
|
|
41
|
+
const boxH = 34;
|
|
42
|
+
const mid = boxY + boxH / 2;
|
|
43
|
+
const histTop = 72;
|
|
44
|
+
const axisY = height - 10;
|
|
45
|
+
const histBottom = axisY - 16;
|
|
46
|
+
const u = unit ? ` ${unit}` : '';
|
|
47
|
+
const desc = summary
|
|
48
|
+
? `${t('min')} ${fmt(summary.min)}, ${t('q25')} ${fmt(summary.q25)}, ${t('median')} ${fmt(summary.median)}, ${t('q75')} ${fmt(summary.q75)}, ${t('max')} ${fmt(summary.max)}, ${t('mean')} ${fmt(summary.mean)}${u}; n=${summary.count}`
|
|
49
|
+
: `${points.length}`;
|
|
50
|
+
const bins = points.length ? binsOf(points, range.min, range.max) : [];
|
|
51
|
+
const top = Math.max(1, ...bins.map((b) => b.exact + b.censored + b.composite));
|
|
52
|
+
const ys = (v) => histBottom - (v / top) * (histBottom - histTop);
|
|
53
|
+
const hb = typeof hover === 'number' ? bins[hover] : undefined;
|
|
54
|
+
const counts = { exact: 0, censored: 0, composite: 0 };
|
|
55
|
+
for (const p of points)
|
|
56
|
+
counts[p.status] += 1;
|
|
57
|
+
return (_jsxs("figure", { className: cx('n4q-chart', 'n4q-target', className), children: [_jsxs("div", { className: "n4q-chart-plot", children: [_jsxs("svg", { viewBox: `0 0 ${width} ${height}`, className: "n4q-svg", role: "img", "aria-labelledby": `${id}-t ${id}-d`, onMouseLeave: () => setHover(null), children: [_jsx("title", { id: `${id}-t`, children: title }), _jsx("desc", { id: `${id}-d`, children: desc }), ticks(xd, Math.max(3, Math.min(8, Math.floor((x1 - x0) / 80)))).map((v) => (_jsxs("g", { children: [_jsx("line", { className: "n4q-grid", x1: xs(v), x2: xs(v), y1: 8, y2: axisY - 12 }), _jsx("text", { className: "n4q-tick", x: xs(v), y: axisY, textAnchor: "middle", children: fmt(v) })] }, v))), summary ? (_jsxs("g", { tabIndex: 0, role: "img", "aria-label": desc, className: "n4q-hit", onMouseEnter: () => setHover('box'), onFocus: () => setHover('box'), onBlur: () => setHover(null), children: [_jsx("rect", { x: xs(summary.min) - 6, y: boxY - 6, width: xs(summary.max) - xs(summary.min) + 12, height: boxH + 12, fill: "transparent" }), _jsx("line", { className: "n4q-whisker", x1: xs(summary.min), x2: xs(summary.q25), y1: mid, y2: mid }), _jsx("line", { className: "n4q-whisker", x1: xs(summary.q75), x2: xs(summary.max), y1: mid, y2: mid }), _jsx("line", { className: "n4q-whisker", x1: xs(summary.min), x2: xs(summary.min), y1: mid - 8, y2: mid + 8 }), _jsx("line", { className: "n4q-whisker", x1: xs(summary.max), x2: xs(summary.max), y1: mid - 8, y2: mid + 8 }), _jsx("rect", { x: xs(summary.q25), y: boxY, width: Math.max(2, xs(summary.q75) - xs(summary.q25)), height: boxH, rx: 4, fill: BOX, fillOpacity: hover === 'box' ? 0.3 : 0.18 }), _jsx("line", { x1: xs(summary.median), x2: xs(summary.median), y1: boxY, y2: boxY + boxH, stroke: BOX, strokeWidth: 3, strokeLinecap: "round" }), _jsx("path", { d: `M${xs(summary.mean)},${mid - 6}l6,6l-6,6l-6,-6Z`, fill: MEAN, className: "n4q-marker" })] })) : null, bins.length ? _jsx("line", { className: "n4q-whisker", x1: x0, x2: x1, y1: histBottom, y2: histBottom }) : null, bins.map((b, i) => {
|
|
58
|
+
const left = xs(b.from) + 0.5;
|
|
59
|
+
const w = Math.max(1, xs(b.to) - xs(b.from) - 1);
|
|
60
|
+
let base = 0;
|
|
61
|
+
return (_jsxs("g", { className: "n4q-hit", onMouseEnter: () => setHover(i), children: [_jsx("rect", { x: left, y: histTop, width: w, height: histBottom - histTop, fill: "transparent" }), STACK.map((status) => {
|
|
62
|
+
const n = b[status];
|
|
63
|
+
if (!n)
|
|
64
|
+
return null;
|
|
65
|
+
const y = ys(base + n);
|
|
66
|
+
const h = ys(base) - y;
|
|
67
|
+
base += n;
|
|
68
|
+
return (_jsx("rect", { x: left, y: y, width: w, height: h, fill: STATUS_COLOR[status], fillOpacity: hover === i ? 1 : 0.85, style: status === 'exact' ? undefined : { fill: 'var(--n4q-surface, #fff)', fillOpacity: 1, stroke: STATUS_COLOR[status], strokeWidth: 2 } }, status));
|
|
69
|
+
})] }, i));
|
|
70
|
+
})] }), hover === 'box' && summary ? (_jsxs(ChartTooltip, { x: xs(summary.median), y: boxY, width: width, height: height, children: [_jsxs("div", { className: "n4q-tip-head", children: [t('count'), " ", summary.count] }), _jsx(TipRow, { label: t('max'), value: `${fmt(summary.max)}${u}` }), _jsx(TipRow, { label: t('q75'), value: fmt(summary.q75) }), _jsx(TipRow, { color: BOX, label: t('median'), value: fmt(summary.median) }), _jsx(TipRow, { label: t('q25'), value: fmt(summary.q25) }), _jsx(TipRow, { label: t('min'), value: fmt(summary.min) }), _jsx(TipRow, { color: MEAN, label: t('mean'), value: fmt(summary.mean) }), _jsx(TipRow, { label: t('sd'), value: fmt(summary.sampleSd) })] })) : null, hb ? (_jsxs(ChartTooltip, { x: xs((hb.from + hb.to) / 2), y: histTop, width: width, height: height, children: [_jsxs("div", { className: "n4q-tip-head", children: [fmt(hb.from), " \u2013 ", fmt(hb.to), u] }), STACK.filter((s) => hb[s] > 0).map((s) => _jsx(TipRow, { color: STATUS_COLOR[s], label: t(s), value: String(hb[s]) }, s))] })) : null, bins.length ? (_jsxs("table", { className: "n4q-visually-hidden", children: [_jsx("caption", { children: title }), _jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: t('range') }), STACK.map((s) => _jsx("th", { scope: "col", children: t(s) }, s))] }) }), _jsx("tbody", { children: bins.filter((b) => b.exact + b.censored + b.composite).map((b) => (_jsxs("tr", { children: [_jsxs("th", { scope: "row", children: [fmt(b.from), " \u2013 ", fmt(b.to), u] }), STACK.map((s) => _jsx("td", { children: b[s] }, s))] }, b.from))) })] })) : null] }), _jsx("figcaption", { children: _jsxs("ul", { className: "n4q-legend", children: [summary ? _jsxs("li", { children: [_jsx("span", { className: "n4q-key-box", "aria-hidden": "true" }), t('q25'), "\u2013", t('q75'), " \u00B7 ", t('median')] }) : null, summary ? _jsxs("li", { children: [_jsx("span", { className: "n4q-key-diamond", style: { background: MEAN }, "aria-hidden": "true" }), t('mean')] }) : null, Object.keys(counts).filter((s) => counts[s] > 0).map((s) => (_jsxs("li", { children: [_jsx("span", { className: s === 'exact' ? 'n4q-key-dot' : 'n4q-key-dot n4q-key-hollow', style: s === 'exact' ? { background: STATUS_COLOR[s] } : { borderColor: STATUS_COLOR[s] }, "aria-hidden": "true" }), t(s), " ", _jsx("strong", { children: counts[s] })] }, s)))] }) })] }));
|
|
71
|
+
}
|
|
72
|
+
/** Categorical target: horizontal bars of engine class counts, largest first, value at the tip. */
|
|
73
|
+
export function ClassCountBars({ counts, title, width = 640, className }) {
|
|
74
|
+
const id = useId();
|
|
75
|
+
const rows = Object.entries(counts).sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]));
|
|
76
|
+
const labelW = Math.min(180, Math.max(60, ...rows.map(([k]) => k.length * 7 + 12)));
|
|
77
|
+
const rowH = 30;
|
|
78
|
+
const height = rows.length * rowH + 8;
|
|
79
|
+
const max = extentOf([0, ...rows.map(([, v]) => v)]).max;
|
|
80
|
+
const xs = makeScale({ min: 0, max }, labelW, width - 48);
|
|
81
|
+
return (_jsx("figure", { className: cx('n4q-chart', 'n4q-classes', className), children: _jsxs("svg", { viewBox: `0 0 ${width} ${height}`, className: "n4q-svg", role: "img", "aria-labelledby": `${id}-t ${id}-d`, children: [_jsx("title", { id: `${id}-t`, children: title }), _jsx("desc", { id: `${id}-d`, children: rows.map(([k, v]) => `${k} ${v}`).join(', ') }), rows.map(([k, v], i) => {
|
|
82
|
+
const y = 4 + i * rowH;
|
|
83
|
+
const w = Math.max(2, xs(v) - labelW);
|
|
84
|
+
return (_jsxs("g", { children: [_jsx("text", { className: "n4q-cat-label", x: labelW - 8, y: y + 16, textAnchor: "end", children: k }), _jsx("path", { d: `M${labelW},${y + 5}h${w - 4}q4,0 4,4v${rowH - 18}q0,4 -4,4h${-(w - 4)}Z`, fill: BOX }), _jsx("text", { className: "n4q-cat-value", x: labelW + w + 6, y: y + 16, children: v })] }, k));
|
|
85
|
+
})] }) }));
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=TargetDistribution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TargetDistribution.js","sourceRoot":"","sources":["../../src/qualification/TargetDistribution.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
/** Compact display of an engine number: 4 significant digits, exponent only outside [1e-4, 1e5). */
|
|
3
|
+
export declare function fmt(value: number | null | undefined): string;
|
|
4
|
+
export declare function pct(fraction: number): string;
|
|
5
|
+
/** HTML tooltip anchored at a point of the SVG viewBox (percent placement, flips near edges). */
|
|
6
|
+
export declare function ChartTooltip({ x, y, width, height, children }: {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
children: ReactNode;
|
|
12
|
+
}): import("react").JSX.Element;
|
|
13
|
+
export declare function TipRow({ color, label, value, line }: {
|
|
14
|
+
color?: string;
|
|
15
|
+
label: string;
|
|
16
|
+
value: string;
|
|
17
|
+
line?: boolean;
|
|
18
|
+
}): import("react").JSX.Element;
|
|
19
|
+
//# sourceMappingURL=_chart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_chart.d.ts","sourceRoot":"","sources":["../../src/qualification/_chart.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,oGAAoG;AACpG,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAM5D;AAED,wBAAgB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI5C;AAED,iGAAiG;AACjG,wBAAgB,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAU3I;AAED,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,+BAQ7H"}
|