nirs4all-ui 0.1.13 → 0.1.15
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 +4 -1
- package/dist/chains/NodeEffectForest.d.ts.map +1 -1
- package/dist/chains/NodeEffectForest.js +5 -1
- package/dist/chains/NodeEffectForest.js.map +1 -1
- package/dist/chains/contract.d.ts.map +1 -1
- package/dist/chains/contract.js +10 -5
- package/dist/chains/contract.js.map +1 -1
- package/dist/datasetBuilder/exportConfig.d.ts.map +1 -1
- package/dist/datasetBuilder/exportConfig.js +1 -7
- package/dist/datasetBuilder/exportConfig.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/nodeRegistry/index.d.ts +9 -0
- package/dist/nodeRegistry/index.d.ts.map +1 -0
- package/dist/nodeRegistry/index.js +9 -0
- package/dist/nodeRegistry/index.js.map +1 -0
- package/dist/nodeRegistry/n4m.d.ts +83 -0
- package/dist/nodeRegistry/n4m.d.ts.map +1 -0
- package/dist/nodeRegistry/n4m.js +131 -0
- package/dist/nodeRegistry/n4m.js.map +1 -0
- package/dist/viz/BiasVarianceBars.d.ts +3 -1
- package/dist/viz/BiasVarianceBars.d.ts.map +1 -1
- package/dist/viz/BiasVarianceBars.js +19 -7
- package/dist/viz/BiasVarianceBars.js.map +1 -1
- package/dist/viz/BoxPlot.d.ts +3 -1
- package/dist/viz/BoxPlot.d.ts.map +1 -1
- package/dist/viz/BoxPlot.js +15 -2
- package/dist/viz/BoxPlot.js.map +1 -1
- package/dist/viz/ConformalIntervalStrip.d.ts +4 -2
- package/dist/viz/ConformalIntervalStrip.d.ts.map +1 -1
- package/dist/viz/ConformalIntervalStrip.js +25 -5
- package/dist/viz/ConformalIntervalStrip.js.map +1 -1
- package/dist/viz/ConfusionMatrix.d.ts +3 -1
- package/dist/viz/ConfusionMatrix.d.ts.map +1 -1
- package/dist/viz/ConfusionMatrix.js +28 -7
- package/dist/viz/ConfusionMatrix.js.map +1 -1
- package/dist/viz/FeatureImportanceBar.d.ts +3 -1
- package/dist/viz/FeatureImportanceBar.d.ts.map +1 -1
- package/dist/viz/FeatureImportanceBar.js +10 -3
- package/dist/viz/FeatureImportanceBar.js.map +1 -1
- package/dist/viz/FoldStabilityLines.d.ts +3 -1
- package/dist/viz/FoldStabilityLines.d.ts.map +1 -1
- package/dist/viz/FoldStabilityLines.js +14 -2
- package/dist/viz/FoldStabilityLines.js.map +1 -1
- package/dist/viz/Histogram.d.ts +3 -1
- package/dist/viz/Histogram.d.ts.map +1 -1
- package/dist/viz/Histogram.js +15 -3
- package/dist/viz/Histogram.js.map +1 -1
- package/dist/viz/PcaScatter.d.ts +3 -1
- package/dist/viz/PcaScatter.d.ts.map +1 -1
- package/dist/viz/PcaScatter.js +30 -6
- package/dist/viz/PcaScatter.js.map +1 -1
- package/dist/viz/PipelineFlow.d.ts +3 -1
- package/dist/viz/PipelineFlow.d.ts.map +1 -1
- package/dist/viz/PipelineFlow.js +8 -2
- package/dist/viz/PipelineFlow.js.map +1 -1
- package/dist/viz/PredictionScatter.d.ts +4 -2
- package/dist/viz/PredictionScatter.d.ts.map +1 -1
- package/dist/viz/PredictionScatter.js +25 -4
- package/dist/viz/PredictionScatter.js.map +1 -1
- package/dist/viz/ResidualPlot.d.ts +3 -1
- package/dist/viz/ResidualPlot.d.ts.map +1 -1
- package/dist/viz/ResidualPlot.js +18 -3
- package/dist/viz/ResidualPlot.js.map +1 -1
- package/dist/viz/ScoreHeatmap.d.ts +3 -1
- package/dist/viz/ScoreHeatmap.d.ts.map +1 -1
- package/dist/viz/ScoreHeatmap.js +23 -2
- package/dist/viz/ScoreHeatmap.js.map +1 -1
- package/dist/viz/ScoreSummary.d.ts +3 -1
- package/dist/viz/ScoreSummary.d.ts.map +1 -1
- package/dist/viz/ScoreSummary.js +8 -2
- package/dist/viz/ScoreSummary.js.map +1 -1
- package/dist/viz/ShapBeeswarm.d.ts +3 -1
- package/dist/viz/ShapBeeswarm.d.ts.map +1 -1
- package/dist/viz/ShapBeeswarm.js +20 -4
- package/dist/viz/ShapBeeswarm.js.map +1 -1
- package/dist/viz/SpectraPlot.d.ts +4 -2
- package/dist/viz/SpectraPlot.d.ts.map +1 -1
- package/dist/viz/SpectraPlot.js +27 -7
- package/dist/viz/SpectraPlot.js.map +1 -1
- package/dist/viz/WaterfallChart.d.ts +3 -1
- package/dist/viz/WaterfallChart.d.ts.map +1 -1
- package/dist/viz/WaterfallChart.js +18 -6
- package/dist/viz/WaterfallChart.js.map +1 -1
- package/dist/viz/description.d.ts +9 -0
- package/dist/viz/description.d.ts.map +1 -0
- package/dist/viz/description.js +25 -0
- package/dist/viz/description.js.map +1 -0
- package/dist/viz/index.d.ts +3 -1
- package/dist/viz/index.d.ts.map +1 -1
- package/dist/viz/index.js +3 -1
- package/dist/viz/index.js.map +1 -1
- package/package.json +5 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FoldStabilityLines.js","sourceRoot":"","sources":["../../src/viz/FoldStabilityLines.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,UAAU,EACV,KAAK,EACL,KAAK,GAEN,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"FoldStabilityLines.js","sourceRoot":"","sources":["../../src/viz/FoldStabilityLines.tsx"],"names":[],"mappings":"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"}
|
package/dist/viz/Histogram.d.ts
CHANGED
|
@@ -21,6 +21,8 @@ export interface HistogramProps {
|
|
|
21
21
|
xLabel?: string;
|
|
22
22
|
yLabel?: string;
|
|
23
23
|
title?: string;
|
|
24
|
+
/** Faithful host-provided text alternative; defaults to a data summary. */
|
|
25
|
+
description?: string;
|
|
24
26
|
className?: string;
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
@@ -29,5 +31,5 @@ export interface HistogramProps {
|
|
|
29
31
|
* classification renders precomputed categorical `bins`. Pure inline SVG — no
|
|
30
32
|
* chart library, no state.
|
|
31
33
|
*/
|
|
32
|
-
export declare function Histogram({ values, bins, variant, binCount, barColor, meanLine, width, height, padding, xLabel, yLabel, title, className, }: HistogramProps): import("react").JSX.Element;
|
|
34
|
+
export declare function Histogram({ values, bins, variant, binCount, barColor, meanLine, width, height, padding, xLabel, yLabel, title, description, className, }: HistogramProps): import("react").JSX.Element;
|
|
33
35
|
//# sourceMappingURL=Histogram.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Histogram.d.ts","sourceRoot":"","sources":["../../src/viz/Histogram.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Histogram.d.ts","sourceRoot":"","sources":["../../src/viz/Histogram.tsx"],"names":[],"mappings":"AAIA,OAAO,EAQL,KAAK,WAAW,EACjB,MAAM,eAAe,CAAC;AAGvB,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,mEAAmE;IACnE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,+DAA+D;IAC/D,IAAI,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,YAAY,GAAG,gBAAgB,CAAC;IAC1C,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,IAAI,EACJ,OAAsB,EACtB,QAAa,EACb,QAA6B,EAC7B,QAAgB,EAChB,KAAW,EACX,MAAY,EACZ,OAAO,EACP,MAAM,EACN,MAAgB,EAChB,KAAsB,EACtB,WAAW,EACX,SAAS,GACV,EAAE,cAAc,+BAmKhB"}
|
package/dist/viz/Histogram.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId } from "react";
|
|
2
3
|
import { cx } from "./_cx.js";
|
|
4
|
+
import { countLabel, rangeText, summaryNumber } from "./description.js";
|
|
3
5
|
import { buildFrame, extentOf, histogram, makeScale, mean, round, ticks, } from "./geometry.js";
|
|
4
6
|
import { N4_VIZ_COLORS } from "./theme.js";
|
|
5
7
|
function fmt(value) {
|
|
@@ -20,14 +22,15 @@ function fmtCount(value) {
|
|
|
20
22
|
* classification renders precomputed categorical `bins`. Pure inline SVG — no
|
|
21
23
|
* chart library, no state.
|
|
22
24
|
*/
|
|
23
|
-
export function Histogram({ values, bins, variant = "regression", binCount = 12, barColor = N4_VIZ_COLORS.teal, meanLine = false, width = 360, height = 220, padding, xLabel, yLabel = "Count", title = "Distribution", className, }) {
|
|
25
|
+
export function Histogram({ values, bins, variant = "regression", binCount = 12, barColor = N4_VIZ_COLORS.teal, meanLine = false, width = 360, height = 220, padding, xLabel, yLabel = "Count", title = "Distribution", description, className, }) {
|
|
26
|
+
const descriptionId = useId();
|
|
24
27
|
const frame = buildFrame(width, height, padding);
|
|
25
28
|
const { top, left } = frame.padding;
|
|
26
29
|
const bottom = top + frame.innerHeight;
|
|
27
30
|
const right = left + frame.innerWidth;
|
|
28
31
|
const isClassification = variant === "classification";
|
|
29
32
|
const numericBins = isClassification ? [] : histogram(values ?? [], binCount);
|
|
30
|
-
const categorical = bins ?? [];
|
|
33
|
+
const categorical = (bins ?? []).filter((bar) => Number.isFinite(bar.count) && bar.count >= 0);
|
|
31
34
|
const counts = isClassification ? categorical.map((b) => b.count) : numericBins.map((b) => b.count);
|
|
32
35
|
const maxCount = Math.max(1, ...counts.filter((c) => Number.isFinite(c)));
|
|
33
36
|
const yDomain = { min: 0, max: maxCount };
|
|
@@ -43,7 +46,16 @@ export function Histogram({ values, bins, variant = "regression", binCount = 12,
|
|
|
43
46
|
const rotateLabels = categorical.length > 6;
|
|
44
47
|
const meanValue = mean(values ?? []);
|
|
45
48
|
const showMean = meanLine && !isClassification && numericBins.length > 0 && Number.isFinite(meanValue);
|
|
46
|
-
|
|
49
|
+
const validValues = (values ?? []).filter((value) => Number.isFinite(value));
|
|
50
|
+
const validCategories = categorical;
|
|
51
|
+
const summary = description?.trim() || (isClassification
|
|
52
|
+
? validCategories.length === 0
|
|
53
|
+
? "No category counts available."
|
|
54
|
+
: `${countLabel(validCategories.length, "category", "categories")}; ${countLabel(validCategories.reduce((sum, bar) => sum + bar.count, 0), "observation")}; ${validCategories.map((bar) => `${bar.label}: ${summaryNumber(bar.count)}`).join("; ")}.`
|
|
55
|
+
: validValues.length === 0
|
|
56
|
+
? "No finite numeric observations."
|
|
57
|
+
: `${countLabel(validValues.length, "numeric observation")}; range ${rangeText(validValues)}; mean ${summaryNumber(validValues.reduce((sum, value) => sum + value, 0) / validValues.length)}.`);
|
|
58
|
+
return (_jsxs("svg", { className: cx("n4viz", "n4viz-histogram", className), viewBox: `0 0 ${width} ${height}`, role: "img", "aria-label": title, "aria-describedby": descriptionId, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { children: title }), _jsx("desc", { id: descriptionId, children: summary }), yTicks.map((t) => (_jsx("line", { className: "n4viz-grid", x1: left, x2: right, y1: round(yScale(t)), y2: round(yScale(t)) }, `gy-${t}`))), isClassification
|
|
47
59
|
? categorical.map((bar, i) => {
|
|
48
60
|
const center = left + (i + 0.5) * slotW;
|
|
49
61
|
const y = yScale(bar.count);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Histogram.js","sourceRoot":"","sources":["../../src/viz/Histogram.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,IAAI,EACJ,KAAK,EACL,KAAK,GAEN,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"Histogram.js","sourceRoot":"","sources":["../../src/viz/Histogram.tsx"],"names":[],"mappings":"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"}
|
package/dist/viz/PcaScatter.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ export interface PcaScatterProps {
|
|
|
25
25
|
/** Small swatch legend (top-right); defaults on for categorical modes. */
|
|
26
26
|
legend?: boolean;
|
|
27
27
|
title?: string;
|
|
28
|
+
/** Faithful host-provided text alternative; defaults to a data summary. */
|
|
29
|
+
description?: string;
|
|
28
30
|
className?: string;
|
|
29
31
|
}
|
|
30
32
|
/**
|
|
@@ -32,5 +34,5 @@ export interface PcaScatterProps {
|
|
|
32
34
|
* value, or train/validation/test partition — the Studio Playground and Web PCA
|
|
33
35
|
* panel. Pure inline SVG; hosts pass already-projected points.
|
|
34
36
|
*/
|
|
35
|
-
export declare function PcaScatter({ points, colorMode, groupColors, explained, xLabel, yLabel, pointRadius, pointOpacity, width, height, padding, legend, title, className, }: PcaScatterProps): import("react").JSX.Element;
|
|
37
|
+
export declare function PcaScatter({ points, colorMode, groupColors, explained, xLabel, yLabel, pointRadius, pointOpacity, width, height, padding, legend, title, description, className, }: PcaScatterProps): import("react").JSX.Element;
|
|
36
38
|
//# sourceMappingURL=PcaScatter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PcaScatter.d.ts","sourceRoot":"","sources":["../../src/viz/PcaScatter.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PcaScatter.d.ts","sourceRoot":"","sources":["../../src/viz/PcaScatter.tsx"],"names":[],"mappings":"AAIA,OAAO,EAQL,KAAK,WAAW,EACjB,MAAM,eAAe,CAAC;AASvB,mEAAmE;AACnE,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC5B,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,WAAW,CAAC;IAC5C,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,SAAmB,EACnB,WAAW,EACX,SAAS,EACT,MAAM,EACN,MAAM,EACN,WAAiB,EACjB,YAAkB,EAClB,KAAW,EACX,MAAY,EACZ,OAAO,EACP,MAAa,EACb,KAAoB,EACpB,WAAW,EACX,SAAS,GACV,EAAE,eAAe,+BA2JjB"}
|
package/dist/viz/PcaScatter.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId } from "react";
|
|
2
3
|
import { cx } from "./_cx.js";
|
|
4
|
+
import { countLabel, rangeText, summaryNumber } from "./description.js";
|
|
3
5
|
import { buildFrame, extentOf, makeScale, niceExtent, round, ticks, } from "./geometry.js";
|
|
4
6
|
import { N4_PARTITION_COLORS, N4_VIZ_COLORS, categoricalColor, sequentialColor, } from "./theme.js";
|
|
5
7
|
function fmt(value) {
|
|
@@ -16,23 +18,25 @@ function fmt(value) {
|
|
|
16
18
|
* value, or train/validation/test partition — the Studio Playground and Web PCA
|
|
17
19
|
* panel. Pure inline SVG; hosts pass already-projected points.
|
|
18
20
|
*/
|
|
19
|
-
export function PcaScatter({ points, colorMode = "group", groupColors, explained, xLabel, yLabel, pointRadius = 3.5, pointOpacity = 0.8, width = 360, height = 320, padding, legend = true, title = "Projection", className, }) {
|
|
21
|
+
export function PcaScatter({ points, colorMode = "group", groupColors, explained, xLabel, yLabel, pointRadius = 3.5, pointOpacity = 0.8, width = 360, height = 320, padding, legend = true, title = "Projection", description, className, }) {
|
|
22
|
+
const descriptionId = useId();
|
|
20
23
|
const frame = buildFrame(width, height, padding);
|
|
21
24
|
const { top, left } = frame.padding;
|
|
22
25
|
const bottom = top + frame.innerHeight;
|
|
23
26
|
const right = left + frame.innerWidth;
|
|
24
|
-
const
|
|
25
|
-
const
|
|
27
|
+
const valid = points.filter((point) => Number.isFinite(point.x) && Number.isFinite(point.y));
|
|
28
|
+
const xDomain = niceExtent(valid.map((p) => p.x), 0.06);
|
|
29
|
+
const yDomain = niceExtent(valid.map((p) => p.y), 0.06);
|
|
26
30
|
const xScale = makeScale(xDomain, left, right);
|
|
27
31
|
const yScale = makeScale(yDomain, bottom, top);
|
|
28
32
|
const xTicks = ticks(xDomain, 5);
|
|
29
33
|
const yTicks = ticks(yDomain, 5);
|
|
30
|
-
const valueList =
|
|
34
|
+
const valueList = valid
|
|
31
35
|
.map((p) => p.value)
|
|
32
36
|
.filter((v) => typeof v === "number" && Number.isFinite(v));
|
|
33
37
|
const valueDomain = extentOf(valueList.length ? valueList : [0, 1]);
|
|
34
38
|
const groupOrder = [];
|
|
35
|
-
for (const p of
|
|
39
|
+
for (const p of valid) {
|
|
36
40
|
if (p.group != null && !groupOrder.includes(p.group))
|
|
37
41
|
groupOrder.push(p.group);
|
|
38
42
|
}
|
|
@@ -62,7 +66,27 @@ export function PcaScatter({ points, colorMode = "group", groupColors, explained
|
|
|
62
66
|
const showLegend = legend && colorMode !== "value" && groupOrder.length > 0;
|
|
63
67
|
const resolvedXLabel = xLabel ?? (explained ? `PC1 (${Math.round(explained[0] * 100)}%)` : "PC1");
|
|
64
68
|
const resolvedYLabel = yLabel ?? (explained ? `PC2 (${Math.round(explained[1] * 100)}%)` : "PC2");
|
|
65
|
-
|
|
69
|
+
const groups = new Map();
|
|
70
|
+
if (colorMode !== "value") {
|
|
71
|
+
for (const point of valid) {
|
|
72
|
+
if (point.group != null)
|
|
73
|
+
groups.set(point.group, (groups.get(point.group) ?? 0) + 1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const valueRange = colorMode === "value"
|
|
77
|
+
? rangeText(valid.map((point) => point.value).filter((value) => value != null))
|
|
78
|
+
: null;
|
|
79
|
+
const summary = description?.trim() || (valid.length === 0
|
|
80
|
+
? "No valid projected points."
|
|
81
|
+
: [
|
|
82
|
+
countLabel(valid.length, "projected point"),
|
|
83
|
+
`${resolvedXLabel} range ${rangeText(valid.map((point) => point.x))}`,
|
|
84
|
+
`${resolvedYLabel} range ${rangeText(valid.map((point) => point.y))}`,
|
|
85
|
+
...[...groups].map(([group, count]) => `${group}: ${count}`),
|
|
86
|
+
...(valueRange ? [`color value range ${valueRange}`] : []),
|
|
87
|
+
...(explained ? [`explained variance ${summaryNumber(explained[0] * 100)}% and ${summaryNumber(explained[1] * 100)}%`] : []),
|
|
88
|
+
].join("; ") + ".");
|
|
89
|
+
return (_jsxs("svg", { className: cx("n4viz", "n4viz-pca", className), viewBox: `0 0 ${width} ${height}`, role: "img", "aria-label": title, "aria-describedby": descriptionId, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { children: title }), _jsx("desc", { id: descriptionId, children: summary }), xTicks.map((t) => (_jsx("line", { className: "n4viz-grid", x1: round(xScale(t)), x2: round(xScale(t)), y1: top, y2: bottom }, `gx-${t}`))), yTicks.map((t) => (_jsx("line", { className: "n4viz-grid", x1: left, x2: right, y1: round(yScale(t)), y2: round(yScale(t)) }, `gy-${t}`))), valid.map((p, i) => (_jsx("circle", { className: "n4viz-dot", cx: round(xScale(p.x)), cy: round(yScale(p.y)), r: pointRadius, fill: resolveColor(p), fillOpacity: pointOpacity }, i))), _jsx("line", { className: "n4viz-axis", x1: left, x2: right, y1: bottom, y2: bottom }), _jsx("line", { className: "n4viz-axis", x1: left, x2: left, y1: top, y2: bottom }), xTicks.map((t) => (_jsx("text", { className: "n4viz-tick", x: round(xScale(t)), y: bottom + 15, textAnchor: "middle", children: fmt(t) }, `tx-${t}`))), yTicks.map((t) => (_jsx("text", { className: "n4viz-tick", x: left - 6, y: round(yScale(t)) + 3, textAnchor: "end", children: fmt(t) }, `ty-${t}`))), _jsx("text", { className: "n4viz-axis-label", x: left + frame.innerWidth / 2, y: height - 2, textAnchor: "middle", children: resolvedXLabel }), _jsx("text", { className: "n4viz-axis-label", transform: `translate(11 ${top + frame.innerHeight / 2}) rotate(-90)`, textAnchor: "middle", children: resolvedYLabel }), showLegend
|
|
66
90
|
? groupOrder.map((g, i) => {
|
|
67
91
|
const ly = top + 6 + i * 14;
|
|
68
92
|
return (_jsxs("g", { className: "n4viz-legend-item", children: [_jsx("rect", { className: "n4viz-swatch", x: round(right - 10), y: round(ly), width: 8, height: 8, rx: 2, fill: colorForGroup(g) }), _jsx("text", { className: "n4viz-legend-label", x: round(right - 14), y: round(ly + 8), textAnchor: "end", children: g })] }, `lg-${g}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PcaScatter.js","sourceRoot":"","sources":["../../src/viz/PcaScatter.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,KAAK,EACL,KAAK,GAGN,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,eAAe,GAEhB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"PcaScatter.js","sourceRoot":"","sources":["../../src/viz/PcaScatter.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,KAAK,EACL,KAAK,GAGN,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,eAAe,GAEhB,MAAM,YAAY,CAAC;AAkCpB,SAAS,GAAG,CAAC,KAAa;IACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,MAAM,EACN,SAAS,GAAG,OAAO,EACnB,WAAW,EACX,SAAS,EACT,MAAM,EACN,MAAM,EACN,WAAW,GAAG,GAAG,EACjB,YAAY,GAAG,GAAG,EAClB,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,OAAO,EACP,MAAM,GAAG,IAAI,EACb,KAAK,GAAG,YAAY,EACpB,WAAW,EACX,SAAS,GACO;IAChB,MAAM,aAAa,GAAG,KAAK,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IACpC,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC;IAEtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,MAAM,OAAO,GAAW,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAChE,MAAM,OAAO,GAAW,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAEjC,MAAM,SAAS,GAAG,KAAK;SACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;SACnB,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpE,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,CAAC,CAAS,EAAU,EAAE;QAC1C,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAiB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;QACjG,CAAC;QACD,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC;IACpD,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,CAAW,EAAU,EAAE;QAC3C,IAAI,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC;QAC5B,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC1B,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAE,OAAO,aAAa,CAAC,KAAK,CAAC;YACzF,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;YACpD,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI;YAAE,OAAO,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO,aAAa,CAAC,IAAI,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,IAAI,SAAS,KAAK,OAAO,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5E,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClG,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClG,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,SAAS,KAAK,OAAO;QACtC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;QAChG,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,OAAO,GAAG,WAAW,EAAE,IAAI,EAAE,IAAI,CACrC,KAAK,CAAC,MAAM,KAAK,CAAC;QAChB,CAAC,CAAC,4BAA4B;QAC9B,CAAC,CAAC;YACE,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,CAAC;YAC3C,GAAG,cAAc,UAAU,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YACrE,GAAG,cAAc,UAAU,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YACrE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,KAAK,EAAE,CAAC;YAC5D,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,sBAAsB,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7H,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CACvB,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAC9C,OAAO,EAAE,OAAO,KAAK,IAAI,MAAM,EAAE,EACjC,IAAI,EAAC,KAAK,gBACE,KAAK,sBACC,aAAa,EAC/B,mBAAmB,EAAC,eAAe,aAEnC,0BAAQ,KAAK,GAAS,EACtB,eAAM,EAAE,EAAE,aAAa,YAAG,OAAO,GAAQ,EAExC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjB,eAEE,SAAS,EAAC,YAAY,EACtB,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACpB,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACpB,EAAE,EAAE,GAAG,EACP,EAAE,EAAE,MAAM,IALL,MAAM,CAAC,EAAE,CAMd,CACH,CAAC,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjB,eAEE,SAAS,EAAC,YAAY,EACtB,EAAE,EAAE,IAAI,EACR,EAAE,EAAE,KAAK,EACT,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACpB,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IALf,MAAM,CAAC,EAAE,CAMd,CACH,CAAC,EAED,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACnB,iBAEE,SAAS,EAAC,WAAW,EACrB,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACtB,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACtB,CAAC,EAAE,WAAW,EACd,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EACrB,WAAW,EAAE,YAAY,IANpB,CAAC,CAON,CACH,CAAC,EAEF,eAAM,SAAS,EAAC,YAAY,EAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAI,EAC5E,eAAM,SAAS,EAAC,YAAY,EAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,GAAI,EACvE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjB,eAAsB,SAAS,EAAC,YAAY,EAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE,UAAU,EAAC,QAAQ,YAClG,GAAG,CAAC,CAAC,CAAC,IADE,MAAM,CAAC,EAAE,CAEb,CACR,CAAC,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjB,eAAsB,SAAS,EAAC,YAAY,EAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,EAAC,KAAK,YAChG,GAAG,CAAC,CAAC,CAAC,IADE,MAAM,CAAC,EAAE,CAEb,CACR,CAAC,EACF,eAAM,SAAS,EAAC,kBAAkB,EAAC,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,UAAU,EAAC,QAAQ,YAClG,cAAc,GACV,EACP,eACE,SAAS,EAAC,kBAAkB,EAC5B,SAAS,EAAE,gBAAgB,GAAG,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,eAAe,EACrE,UAAU,EAAC,QAAQ,YAElB,cAAc,GACV,EAEN,UAAU;gBACT,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACtB,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;oBAC5B,OAAO,CACL,aAAmB,SAAS,EAAC,mBAAmB,aAC9C,eAAM,SAAS,EAAC,cAAc,EAAC,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAI,EACzH,eAAM,SAAS,EAAC,oBAAoB,EAAC,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,EAAC,KAAK,YAC1F,CAAC,GACG,KAJD,MAAM,CAAC,EAAE,CAKb,CACL,CAAC;gBACJ,CAAC,CAAC;gBACJ,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -15,6 +15,8 @@ export interface PipelineFlowProps {
|
|
|
15
15
|
/** Defaults to `nodes.length * 84 + 24`. */
|
|
16
16
|
height?: number;
|
|
17
17
|
title?: string;
|
|
18
|
+
/** Faithful host-provided text alternative; defaults to a node sequence. */
|
|
19
|
+
description?: string;
|
|
18
20
|
className?: string;
|
|
19
21
|
/** Override the per-type accent color. */
|
|
20
22
|
nodeColor?: (type: PipelineNode["type"]) => string;
|
|
@@ -24,5 +26,5 @@ export interface PipelineFlowProps {
|
|
|
24
26
|
* pipeline editor, Web CanvasFlow, and Inspector BranchTopology. Each step is a
|
|
25
27
|
* card connected top→down; pure inline SVG, no interaction or layout engine.
|
|
26
28
|
*/
|
|
27
|
-
export declare function PipelineFlow({ nodes, width, height, title, className, nodeColor, }: PipelineFlowProps): import("react").JSX.Element;
|
|
29
|
+
export declare function PipelineFlow({ nodes, width, height, title, description, className, nodeColor, }: PipelineFlowProps): import("react").JSX.Element;
|
|
28
30
|
//# sourceMappingURL=PipelineFlow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineFlow.d.ts","sourceRoot":"","sources":["../../src/viz/PipelineFlow.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PipelineFlow.d.ts","sourceRoot":"","sources":["../../src/viz/PipelineFlow.tsx"],"names":[],"mappings":"AAOA,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;CACpD;AA6BD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAW,EACX,MAAM,EACN,KAAkB,EAClB,WAAW,EACX,SAAS,EACT,SAA4B,GAC7B,EAAE,iBAAiB,+BAwHnB"}
|
package/dist/viz/PipelineFlow.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId } from "react";
|
|
2
3
|
import { cx } from "./_cx.js";
|
|
4
|
+
import { countLabel, summaryNumber } from "./description.js";
|
|
3
5
|
import { round } from "./geometry.js";
|
|
4
6
|
import { N4_VIZ_COLORS } from "./theme.js";
|
|
5
7
|
const NODE_COLORS = {
|
|
@@ -33,7 +35,8 @@ function fmtMetric(value) {
|
|
|
33
35
|
* pipeline editor, Web CanvasFlow, and Inspector BranchTopology. Each step is a
|
|
34
36
|
* card connected top→down; pure inline SVG, no interaction or layout engine.
|
|
35
37
|
*/
|
|
36
|
-
export function PipelineFlow({ nodes, width = 300, height, title = "Pipeline", className, nodeColor = defaultNodeColor, }) {
|
|
38
|
+
export function PipelineFlow({ nodes, width = 300, height, title = "Pipeline", description, className, nodeColor = defaultNodeColor, }) {
|
|
39
|
+
const descriptionId = useId();
|
|
37
40
|
const rowH = 84;
|
|
38
41
|
const cardH = 60;
|
|
39
42
|
const marginTop = 12;
|
|
@@ -41,7 +44,10 @@ export function PipelineFlow({ nodes, width = 300, height, title = "Pipeline", c
|
|
|
41
44
|
const cardW = Math.max(0, width - 36);
|
|
42
45
|
const spineX = width / 2;
|
|
43
46
|
const resolvedHeight = height ?? nodes.length * rowH + 24;
|
|
44
|
-
|
|
47
|
+
const summary = description?.trim() || (nodes.length === 0
|
|
48
|
+
? "No pipeline steps."
|
|
49
|
+
: `${countLabel(nodes.length, "pipeline step")} in order; ${nodes.map((node, index) => `${index + 1}. ${node.label} (${node.type}${node.status ? `, ${node.status}` : ""}${node.metric != null && Number.isFinite(node.metric) ? `, metric ${summaryNumber(node.metric)}` : ""})`).join("; ")}.`);
|
|
50
|
+
return (_jsxs("svg", { className: cx("n4viz", "n4viz-pipeline", className), viewBox: `0 0 ${width} ${resolvedHeight}`, role: "img", "aria-label": title, "aria-describedby": descriptionId, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { children: title }), _jsx("desc", { id: descriptionId, children: summary }), nodes.map((node, i) => {
|
|
45
51
|
if (i === 0)
|
|
46
52
|
return null;
|
|
47
53
|
const prevBottom = marginTop + (i - 1) * rowH + cardH;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineFlow.js","sourceRoot":"","sources":["../../src/viz/PipelineFlow.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"PipelineFlow.js","sourceRoot":"","sources":["../../src/viz/PipelineFlow.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
2
|
import { type PlotPadding } from "./geometry.js";
|
|
3
3
|
import { type PartitionKey } from "./theme.js";
|
|
4
4
|
/** A single predicted-vs-observed observation. */
|
|
@@ -28,6 +28,8 @@ export interface PredictionScatterProps {
|
|
|
28
28
|
xLabel?: string;
|
|
29
29
|
yLabel?: string;
|
|
30
30
|
title?: string;
|
|
31
|
+
/** Faithful host-provided text alternative; defaults to a data summary. */
|
|
32
|
+
description?: string;
|
|
31
33
|
className?: string;
|
|
32
34
|
children?: ReactNode;
|
|
33
35
|
}
|
|
@@ -37,5 +39,5 @@ export interface PredictionScatterProps {
|
|
|
37
39
|
* Inspector and the Web results view. Pure inline SVG; hosts pass points and
|
|
38
40
|
* (optionally) precomputed metrics.
|
|
39
41
|
*/
|
|
40
|
-
export declare function PredictionScatter({ points, width, height, padding, identityLine, regressionLine, metrics, pointRadius, pointOpacity, xLabel, yLabel, title, className, children, }: PredictionScatterProps): import("react").JSX.Element;
|
|
42
|
+
export declare function PredictionScatter({ points, width, height, padding, identityLine, regressionLine, metrics, pointRadius, pointOpacity, xLabel, yLabel, title, description, className, children, }: PredictionScatterProps): import("react").JSX.Element;
|
|
41
43
|
//# sourceMappingURL=PredictionScatter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PredictionScatter.d.ts","sourceRoot":"","sources":["../../src/viz/PredictionScatter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"PredictionScatter.d.ts","sourceRoot":"","sources":["../../src/viz/PredictionScatter.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI9C,OAAO,EAQL,KAAK,WAAW,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnF,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6DAA6D;IAC7D,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAeD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,KAAW,EACX,MAAY,EACZ,OAAO,EACP,YAAmB,EACnB,cAAsB,EACtB,OAAO,EACP,WAAe,EACf,YAAkB,EAClB,MAAmB,EACnB,MAAoB,EACpB,KAA+B,EAC/B,WAAW,EACX,SAAS,EACT,QAAQ,GACT,EAAE,sBAAsB,+BA6HxB"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId } from "react";
|
|
2
3
|
import { cx } from "./_cx.js";
|
|
4
|
+
import { countLabel, summaryNumber } from "./description.js";
|
|
3
5
|
import { buildFrame, linearFit, makeScale, niceExtent, round, ticks, } from "./geometry.js";
|
|
4
6
|
import { N4_PARTITION_COLORS, N4_VIZ_COLORS } from "./theme.js";
|
|
5
7
|
function pointColor(point) {
|
|
@@ -24,18 +26,37 @@ function fmt(value) {
|
|
|
24
26
|
* Inspector and the Web results view. Pure inline SVG; hosts pass points and
|
|
25
27
|
* (optionally) precomputed metrics.
|
|
26
28
|
*/
|
|
27
|
-
export function PredictionScatter({ points, width = 320, height = 320, padding, identityLine = true, regressionLine = false, metrics, pointRadius = 3, pointOpacity = 0.7, xLabel = "Observed", yLabel = "Predicted", title = "Predicted vs observed", className, children, }) {
|
|
29
|
+
export function PredictionScatter({ points, width = 320, height = 320, padding, identityLine = true, regressionLine = false, metrics, pointRadius = 3, pointOpacity = 0.7, xLabel = "Observed", yLabel = "Predicted", title = "Predicted vs observed", description, className, children, }) {
|
|
30
|
+
const descriptionId = useId();
|
|
28
31
|
const frame = buildFrame(width, height, padding);
|
|
29
32
|
const { top, left } = frame.padding;
|
|
30
33
|
const bottom = top + frame.innerHeight;
|
|
31
34
|
const right = left + frame.innerWidth;
|
|
32
|
-
const
|
|
33
|
-
const
|
|
35
|
+
const valid = points.filter((point) => Number.isFinite(point.actual) && Number.isFinite(point.predicted));
|
|
36
|
+
const actuals = valid.map((p) => p.actual);
|
|
37
|
+
const predicted = valid.map((p) => p.predicted);
|
|
34
38
|
const domain = niceExtent([...actuals, ...predicted], 0.06);
|
|
35
39
|
const xScale = makeScale(domain, left, right);
|
|
36
40
|
const yScale = makeScale(domain, bottom, top);
|
|
37
41
|
const axisTicks = ticks(domain, 5);
|
|
38
42
|
const fit = regressionLine ? linearFit(actuals, predicted) : null;
|
|
39
|
-
|
|
43
|
+
const meanAbsoluteError = valid.length
|
|
44
|
+
? valid.reduce((sum, point) => sum + Math.abs(point.predicted - point.actual), 0) / valid.length
|
|
45
|
+
: null;
|
|
46
|
+
const partitionCounts = new Map();
|
|
47
|
+
for (const point of valid) {
|
|
48
|
+
if (point.partition)
|
|
49
|
+
partitionCounts.set(point.partition, (partitionCounts.get(point.partition) ?? 0) + 1);
|
|
50
|
+
}
|
|
51
|
+
const summary = description?.trim() || (valid.length === 0
|
|
52
|
+
? "No valid observed and predicted pairs."
|
|
53
|
+
: [
|
|
54
|
+
countLabel(valid.length, "valid observed and predicted pair"),
|
|
55
|
+
`mean absolute error ${summaryNumber(meanAbsoluteError)}`,
|
|
56
|
+
...[...partitionCounts].map(([partition, count]) => `${partition}: ${count}`),
|
|
57
|
+
...(metrics?.r2 != null && Number.isFinite(metrics.r2) ? [`R² ${summaryNumber(metrics.r2)}`] : []),
|
|
58
|
+
...(metrics?.rmse != null && Number.isFinite(metrics.rmse) ? [`RMSE ${summaryNumber(metrics.rmse)}`] : []),
|
|
59
|
+
].join("; ") + ".");
|
|
60
|
+
return (_jsxs("svg", { className: cx("n4viz", "n4viz-scatter", className), viewBox: `0 0 ${width} ${height}`, role: "img", "aria-label": title, "aria-describedby": descriptionId, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { children: title }), _jsx("desc", { id: descriptionId, children: summary }), axisTicks.map((t) => (_jsxs("g", { children: [_jsx("line", { className: "n4viz-grid", x1: left, x2: right, y1: round(yScale(t)), y2: round(yScale(t)) }), _jsx("line", { className: "n4viz-grid", x1: round(xScale(t)), x2: round(xScale(t)), y1: top, y2: bottom })] }, `grid-${t}`))), identityLine ? (_jsx("line", { className: "n4viz-reference n4viz-identity", x1: round(xScale(domain.min)), y1: round(yScale(domain.min)), x2: round(xScale(domain.max)), y2: round(yScale(domain.max)), stroke: N4_VIZ_COLORS.slate, strokeDasharray: "5 4", strokeWidth: 1.4 })) : null, fit ? (_jsx("line", { className: "n4viz-reference n4viz-fit", x1: round(xScale(domain.min)), y1: round(yScale(fit.slope * domain.min + fit.intercept)), x2: round(xScale(domain.max)), y2: round(yScale(fit.slope * domain.max + fit.intercept)), stroke: N4_VIZ_COLORS.indigo, strokeWidth: 1.8 })) : null, valid.map((p, i) => (_jsx("circle", { className: "n4viz-dot", cx: round(xScale(p.actual)), cy: round(yScale(p.predicted)), r: pointRadius, fill: pointColor(p), fillOpacity: pointOpacity }, p.label ?? i))), _jsx("line", { className: "n4viz-axis", x1: left, x2: right, y1: bottom, y2: bottom }), _jsx("line", { className: "n4viz-axis", x1: left, x2: left, y1: top, y2: bottom }), axisTicks.map((t) => (_jsx("text", { className: "n4viz-tick", x: round(xScale(t)), y: bottom + 15, textAnchor: "middle", children: fmt(t) }, `tx-${t}`))), axisTicks.map((t) => (_jsx("text", { className: "n4viz-tick", x: left - 6, y: round(yScale(t)) + 3, textAnchor: "end", children: fmt(t) }, `ty-${t}`))), _jsx("text", { className: "n4viz-axis-label", x: left + frame.innerWidth / 2, y: height - 2, textAnchor: "middle", children: xLabel }), _jsx("text", { className: "n4viz-axis-label", transform: `translate(11 ${top + frame.innerHeight / 2}) rotate(-90)`, textAnchor: "middle", children: yLabel }), metrics ? (_jsxs("text", { className: "n4viz-badge", x: right, y: top + 12, textAnchor: "end", children: [metrics.r2 != null ? `R² ${fmt(metrics.r2)}` : "", metrics.r2 != null && metrics.rmse != null ? " · " : "", metrics.rmse != null ? `RMSE ${fmt(metrics.rmse)}` : ""] })) : null, children] }));
|
|
40
61
|
}
|
|
41
62
|
//# sourceMappingURL=PredictionScatter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PredictionScatter.js","sourceRoot":"","sources":["../../src/viz/PredictionScatter.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"PredictionScatter.js","sourceRoot":"","sources":["../../src/viz/PredictionScatter.tsx"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,8 @@ export interface ResidualPlotProps {
|
|
|
20
20
|
xLabel?: string;
|
|
21
21
|
yLabel?: string;
|
|
22
22
|
title?: string;
|
|
23
|
+
/** Faithful host-provided text alternative; defaults to a data summary. */
|
|
24
|
+
description?: string;
|
|
23
25
|
className?: string;
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
@@ -28,5 +30,5 @@ export interface ResidualPlotProps {
|
|
|
28
30
|
* SVG; hosts pass points (residual or actual) and (optionally) precomputed
|
|
29
31
|
* colors.
|
|
30
32
|
*/
|
|
31
|
-
export declare function ResidualPlot({ points, width, height, padding, sigmaBand, pointRadius, pointOpacity, xLabel, yLabel, title, className, }: ResidualPlotProps): import("react").JSX.Element;
|
|
33
|
+
export declare function ResidualPlot({ points, width, height, padding, sigmaBand, pointRadius, pointOpacity, xLabel, yLabel, title, description, className, }: ResidualPlotProps): import("react").JSX.Element;
|
|
32
34
|
//# sourceMappingURL=ResidualPlot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResidualPlot.d.ts","sourceRoot":"","sources":["../../src/viz/ResidualPlot.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ResidualPlot.d.ts","sourceRoot":"","sources":["../../src/viz/ResidualPlot.tsx"],"names":[],"mappings":"AAIA,OAAO,EAQL,KAAK,WAAW,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnF,kGAAkG;AAClG,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAqBD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,KAAW,EACX,MAAY,EACZ,OAAO,EACP,SAAgB,EAChB,WAAe,EACf,YAAkB,EAClB,MAAoB,EACpB,MAAmB,EACnB,KAAmB,EACnB,WAAW,EACX,SAAS,GACV,EAAE,iBAAiB,+BAmInB"}
|
package/dist/viz/ResidualPlot.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId } from "react";
|
|
2
3
|
import { cx } from "./_cx.js";
|
|
4
|
+
import { countLabel, finiteRange, rangeText, summaryNumber } from "./description.js";
|
|
3
5
|
import { buildFrame, makeScale, niceExtent, round, stdDev, ticks, } from "./geometry.js";
|
|
4
6
|
import { N4_PARTITION_COLORS, N4_VIZ_COLORS } from "./theme.js";
|
|
5
7
|
function resolveResidual(point) {
|
|
@@ -31,7 +33,8 @@ function fmt(value) {
|
|
|
31
33
|
* SVG; hosts pass points (residual or actual) and (optionally) precomputed
|
|
32
34
|
* colors.
|
|
33
35
|
*/
|
|
34
|
-
export function ResidualPlot({ points, width = 420, height = 260, padding, sigmaBand = true, pointRadius = 3, pointOpacity = 0.7, xLabel = "Predicted", yLabel = "Residual", title = "Residuals", className, }) {
|
|
36
|
+
export function ResidualPlot({ points, width = 420, height = 260, padding, sigmaBand = true, pointRadius = 3, pointOpacity = 0.7, xLabel = "Predicted", yLabel = "Residual", title = "Residuals", description, className, }) {
|
|
37
|
+
const descriptionId = useId();
|
|
35
38
|
const frame = buildFrame(width, height, padding);
|
|
36
39
|
const { top, left } = frame.padding;
|
|
37
40
|
const bottom = top + frame.innerHeight;
|
|
@@ -42,7 +45,8 @@ export function ResidualPlot({ points, width = 420, height = 260, padding, sigma
|
|
|
42
45
|
const residuals = resolved.map((p) => p.residual);
|
|
43
46
|
const sigma = stdDev(residuals);
|
|
44
47
|
const twoSigma = 2 * sigma;
|
|
45
|
-
const
|
|
48
|
+
const residualRange = finiteRange(residuals);
|
|
49
|
+
const maxAbs = Math.max(1e-9, Math.abs(residualRange?.min ?? 0), Math.abs(residualRange?.max ?? 0), sigmaBand ? twoSigma : 0);
|
|
46
50
|
const safeMaxAbs = Number.isFinite(maxAbs) && maxAbs > 0 ? maxAbs : 1;
|
|
47
51
|
const yDomain = niceExtent([-safeMaxAbs, safeMaxAbs], 0.08);
|
|
48
52
|
const xDomain = niceExtent(resolved.map((p) => p.predicted), 0.06);
|
|
@@ -51,7 +55,18 @@ export function ResidualPlot({ points, width = 420, height = 260, padding, sigma
|
|
|
51
55
|
const xTicks = ticks(xDomain, 5);
|
|
52
56
|
const yTicks = ticks(yDomain, 5);
|
|
53
57
|
const showSigma = sigmaBand && Number.isFinite(sigma) && sigma > 0 && resolved.length > 1;
|
|
54
|
-
|
|
58
|
+
const meanResidual = residuals.length
|
|
59
|
+
? residuals.reduce((sum, value) => sum + value, 0) / residuals.length
|
|
60
|
+
: null;
|
|
61
|
+
const summary = description?.trim() || (resolved.length === 0
|
|
62
|
+
? "No valid residual observations."
|
|
63
|
+
: [
|
|
64
|
+
countLabel(resolved.length, "valid residual observation"),
|
|
65
|
+
`residual range ${rangeText(residuals)}`,
|
|
66
|
+
`mean residual ${summaryNumber(meanResidual)}`,
|
|
67
|
+
...(showSigma ? [`two-standard-deviation guides at ±${summaryNumber(twoSigma)}`] : []),
|
|
68
|
+
].join("; ") + ".");
|
|
69
|
+
return (_jsxs("svg", { className: cx("n4viz", "n4viz-residual", className), viewBox: `0 0 ${width} ${height}`, role: "img", "aria-label": title, "aria-describedby": descriptionId, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { children: title }), _jsx("desc", { id: descriptionId, children: summary }), yTicks.map((t) => (_jsx("line", { className: "n4viz-grid", x1: left, x2: right, y1: round(yScale(t)), y2: round(yScale(t)) }, `gy-${t}`))), showSigma
|
|
55
70
|
? [twoSigma, -twoSigma].map((s) => (_jsx("line", { className: "n4viz-reference n4viz-sigma", x1: left, x2: right, y1: round(yScale(s)), y2: round(yScale(s)), stroke: N4_VIZ_COLORS.amber, strokeDasharray: "5 4", strokeWidth: 1.3 }, `sigma-${s}`)))
|
|
56
71
|
: null, _jsx("line", { className: "n4viz-reference n4viz-zero", x1: left, x2: right, y1: round(yScale(0)), y2: round(yScale(0)), stroke: N4_VIZ_COLORS.slate, strokeWidth: 1.4 }), resolved.map((p, i) => (_jsx("circle", { className: "n4viz-dot", cx: round(xScale(p.predicted)), cy: round(yScale(p.residual)), r: pointRadius, fill: p.color, fillOpacity: pointOpacity }, i))), _jsx("line", { className: "n4viz-axis", x1: left, x2: right, y1: bottom, y2: bottom }), _jsx("line", { className: "n4viz-axis", x1: left, x2: left, y1: top, y2: bottom }), xTicks.map((t) => (_jsx("text", { className: "n4viz-tick", x: round(xScale(t)), y: bottom + 15, textAnchor: "middle", children: fmt(t) }, `tx-${t}`))), yTicks.map((t) => (_jsx("text", { className: "n4viz-tick", x: left - 6, y: round(yScale(t)) + 3, textAnchor: "end", children: fmt(t) }, `ty-${t}`))), _jsx("text", { className: "n4viz-axis-label", x: left + frame.innerWidth / 2, y: height - 2, textAnchor: "middle", children: xLabel }), _jsx("text", { className: "n4viz-axis-label", transform: `translate(11 ${top + frame.innerHeight / 2}) rotate(-90)`, textAnchor: "middle", children: yLabel })] }));
|
|
57
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResidualPlot.js","sourceRoot":"","sources":["../../src/viz/ResidualPlot.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,SAAS,EACT,UAAU,EACV,KAAK,EACL,MAAM,EACN,KAAK,GAGN,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAqB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ResidualPlot.js","sourceRoot":"","sources":["../../src/viz/ResidualPlot.tsx"],"names":[],"mappings":"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"}
|