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.
Files changed (138) hide show
  1. package/README.md +20 -0
  2. package/assets/dropzone.css +21 -0
  3. package/assets/pipeline-presets.css +38 -0
  4. package/assets/qualification.css +142 -0
  5. package/dist/components/DatasetDropzone.d.ts +44 -0
  6. package/dist/components/DatasetDropzone.d.ts.map +1 -0
  7. package/dist/components/DatasetDropzone.js +84 -0
  8. package/dist/components/DatasetDropzone.js.map +1 -0
  9. package/dist/components/PipelinePresetCard.d.ts +16 -0
  10. package/dist/components/PipelinePresetCard.d.ts.map +1 -0
  11. package/dist/components/PipelinePresetCard.js +21 -0
  12. package/dist/components/PipelinePresetCard.js.map +1 -0
  13. package/dist/components/index.d.ts +2 -0
  14. package/dist/components/index.d.ts.map +1 -1
  15. package/dist/components/index.js +2 -0
  16. package/dist/components/index.js.map +1 -1
  17. package/dist/index.d.ts +1 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/pipelines/canonicalPipelinePreview.d.ts +21 -0
  22. package/dist/pipelines/canonicalPipelinePreview.d.ts.map +1 -0
  23. package/dist/pipelines/canonicalPipelinePreview.js +384 -0
  24. package/dist/pipelines/canonicalPipelinePreview.js.map +1 -0
  25. package/dist/pipelines/index.d.ts +5 -0
  26. package/dist/pipelines/index.d.ts.map +1 -0
  27. package/dist/pipelines/index.js +5 -0
  28. package/dist/pipelines/index.js.map +1 -0
  29. package/dist/pipelines/pipelineStats.d.ts +27 -0
  30. package/dist/pipelines/pipelineStats.d.ts.map +1 -0
  31. package/dist/pipelines/pipelineStats.js +128 -0
  32. package/dist/pipelines/pipelineStats.js.map +1 -0
  33. package/dist/pipelines/presets.d.ts +50 -0
  34. package/dist/pipelines/presets.d.ts.map +1 -0
  35. package/dist/pipelines/presets.js +92 -0
  36. package/dist/pipelines/presets.js.map +1 -0
  37. package/dist/pipelines/studio-presets.json +3996 -0
  38. package/dist/pipelines/studioPresets.d.ts +21 -0
  39. package/dist/pipelines/studioPresets.d.ts.map +1 -0
  40. package/dist/pipelines/studioPresets.js +12 -0
  41. package/dist/pipelines/studioPresets.js.map +1 -0
  42. package/dist/qualification/AvailabilitySummary.d.ts +3 -1
  43. package/dist/qualification/AvailabilitySummary.d.ts.map +1 -1
  44. package/dist/qualification/AvailabilitySummary.js +2 -2
  45. package/dist/qualification/AvailabilitySummary.js.map +1 -1
  46. package/dist/qualification/CapabilityGrid.d.ts +10 -0
  47. package/dist/qualification/CapabilityGrid.d.ts.map +1 -0
  48. package/dist/qualification/CapabilityGrid.js +16 -0
  49. package/dist/qualification/CapabilityGrid.js.map +1 -0
  50. package/dist/qualification/CheckList.d.ts +19 -0
  51. package/dist/qualification/CheckList.d.ts.map +1 -0
  52. package/dist/qualification/CheckList.js +14 -0
  53. package/dist/qualification/CheckList.js.map +1 -0
  54. package/dist/qualification/ComparisonMatrix.d.ts +37 -0
  55. package/dist/qualification/ComparisonMatrix.d.ts.map +1 -0
  56. package/dist/qualification/ComparisonMatrix.js +30 -0
  57. package/dist/qualification/ComparisonMatrix.js.map +1 -0
  58. package/dist/qualification/EigenvalueScree.d.ts +17 -0
  59. package/dist/qualification/EigenvalueScree.d.ts.map +1 -0
  60. package/dist/qualification/EigenvalueScree.js +39 -0
  61. package/dist/qualification/EigenvalueScree.js.map +1 -0
  62. package/dist/qualification/EvidenceTable.d.ts +3 -1
  63. package/dist/qualification/EvidenceTable.d.ts.map +1 -1
  64. package/dist/qualification/EvidenceTable.js +14 -6
  65. package/dist/qualification/EvidenceTable.js.map +1 -1
  66. package/dist/qualification/FindingList.d.ts +3 -1
  67. package/dist/qualification/FindingList.d.ts.map +1 -1
  68. package/dist/qualification/FindingList.js +5 -3
  69. package/dist/qualification/FindingList.js.map +1 -1
  70. package/dist/qualification/HypothesisTestTable.d.ts +48 -0
  71. package/dist/qualification/HypothesisTestTable.d.ts.map +1 -0
  72. package/dist/qualification/HypothesisTestTable.js +26 -0
  73. package/dist/qualification/HypothesisTestTable.js.map +1 -0
  74. package/dist/qualification/MeasureBars.d.ts +45 -0
  75. package/dist/qualification/MeasureBars.d.ts.map +1 -0
  76. package/dist/qualification/MeasureBars.js +52 -0
  77. package/dist/qualification/MeasureBars.js.map +1 -0
  78. package/dist/qualification/PopulationFlow.d.ts +42 -0
  79. package/dist/qualification/PopulationFlow.d.ts.map +1 -0
  80. package/dist/qualification/PopulationFlow.js +123 -0
  81. package/dist/qualification/PopulationFlow.js.map +1 -0
  82. package/dist/qualification/RepeatabilityProfile.d.ts +19 -0
  83. package/dist/qualification/RepeatabilityProfile.d.ts.map +1 -0
  84. package/dist/qualification/RepeatabilityProfile.js +119 -0
  85. package/dist/qualification/RepeatabilityProfile.js.map +1 -0
  86. package/dist/qualification/ReplicateHistogram.d.ts +23 -0
  87. package/dist/qualification/ReplicateHistogram.d.ts.map +1 -0
  88. package/dist/qualification/ReplicateHistogram.js +41 -0
  89. package/dist/qualification/ReplicateHistogram.js.map +1 -0
  90. package/dist/qualification/ScoreMap.d.ts +38 -0
  91. package/dist/qualification/ScoreMap.d.ts.map +1 -0
  92. package/dist/qualification/ScoreMap.js +77 -0
  93. package/dist/qualification/ScoreMap.js.map +1 -0
  94. package/dist/qualification/SpectraExplorer.d.ts +31 -0
  95. package/dist/qualification/SpectraExplorer.d.ts.map +1 -0
  96. package/dist/qualification/SpectraExplorer.js +111 -0
  97. package/dist/qualification/SpectraExplorer.js.map +1 -0
  98. package/dist/qualification/StatTile.d.ts +16 -0
  99. package/dist/qualification/StatTile.d.ts.map +1 -0
  100. package/dist/qualification/StatTile.js +10 -0
  101. package/dist/qualification/StatTile.js.map +1 -0
  102. package/dist/qualification/TargetDistribution.d.ts +35 -0
  103. package/dist/qualification/TargetDistribution.d.ts.map +1 -0
  104. package/dist/qualification/TargetDistribution.js +87 -0
  105. package/dist/qualification/TargetDistribution.js.map +1 -0
  106. package/dist/qualification/_chart.d.ts +19 -0
  107. package/dist/qualification/_chart.d.ts.map +1 -0
  108. package/dist/qualification/_chart.js +30 -0
  109. package/dist/qualification/_chart.js.map +1 -0
  110. package/dist/qualification/engineNumber.d.ts +26 -0
  111. package/dist/qualification/engineNumber.d.ts.map +1 -0
  112. package/dist/qualification/engineNumber.js +88 -0
  113. package/dist/qualification/engineNumber.js.map +1 -0
  114. package/dist/qualification/extract.d.ts +107 -0
  115. package/dist/qualification/extract.d.ts.map +1 -0
  116. package/dist/qualification/extract.js +139 -0
  117. package/dist/qualification/extract.js.map +1 -0
  118. package/dist/qualification/extractBlocks.d.ts +441 -0
  119. package/dist/qualification/extractBlocks.d.ts.map +1 -0
  120. package/dist/qualification/extractBlocks.js +576 -0
  121. package/dist/qualification/extractBlocks.js.map +1 -0
  122. package/dist/qualification/index.d.ts +16 -0
  123. package/dist/qualification/index.d.ts.map +1 -1
  124. package/dist/qualification/index.js +16 -0
  125. package/dist/qualification/index.js.map +1 -1
  126. package/dist/qualification/locale.d.ts +317 -1
  127. package/dist/qualification/locale.d.ts.map +1 -1
  128. package/dist/qualification/locale.js +369 -0
  129. package/dist/qualification/locale.js.map +1 -1
  130. package/dist/qualification/report.d.ts +13 -1
  131. package/dist/qualification/report.d.ts.map +1 -1
  132. package/dist/qualification/report.js +94 -3
  133. package/dist/qualification/report.js.map +1 -1
  134. package/dist/styles/index.d.ts +7 -1
  135. package/dist/styles/index.d.ts.map +1 -1
  136. package/dist/styles/index.js +5 -0
  137. package/dist/styles/index.js.map +1 -1
  138. 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"}