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.
Files changed (95) hide show
  1. package/README.md +4 -1
  2. package/dist/chains/NodeEffectForest.d.ts.map +1 -1
  3. package/dist/chains/NodeEffectForest.js +5 -1
  4. package/dist/chains/NodeEffectForest.js.map +1 -1
  5. package/dist/chains/contract.d.ts.map +1 -1
  6. package/dist/chains/contract.js +10 -5
  7. package/dist/chains/contract.js.map +1 -1
  8. package/dist/datasetBuilder/exportConfig.d.ts.map +1 -1
  9. package/dist/datasetBuilder/exportConfig.js +1 -7
  10. package/dist/datasetBuilder/exportConfig.js.map +1 -1
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/nodeRegistry/index.d.ts +9 -0
  16. package/dist/nodeRegistry/index.d.ts.map +1 -0
  17. package/dist/nodeRegistry/index.js +9 -0
  18. package/dist/nodeRegistry/index.js.map +1 -0
  19. package/dist/nodeRegistry/n4m.d.ts +83 -0
  20. package/dist/nodeRegistry/n4m.d.ts.map +1 -0
  21. package/dist/nodeRegistry/n4m.js +131 -0
  22. package/dist/nodeRegistry/n4m.js.map +1 -0
  23. package/dist/viz/BiasVarianceBars.d.ts +3 -1
  24. package/dist/viz/BiasVarianceBars.d.ts.map +1 -1
  25. package/dist/viz/BiasVarianceBars.js +19 -7
  26. package/dist/viz/BiasVarianceBars.js.map +1 -1
  27. package/dist/viz/BoxPlot.d.ts +3 -1
  28. package/dist/viz/BoxPlot.d.ts.map +1 -1
  29. package/dist/viz/BoxPlot.js +15 -2
  30. package/dist/viz/BoxPlot.js.map +1 -1
  31. package/dist/viz/ConformalIntervalStrip.d.ts +4 -2
  32. package/dist/viz/ConformalIntervalStrip.d.ts.map +1 -1
  33. package/dist/viz/ConformalIntervalStrip.js +25 -5
  34. package/dist/viz/ConformalIntervalStrip.js.map +1 -1
  35. package/dist/viz/ConfusionMatrix.d.ts +3 -1
  36. package/dist/viz/ConfusionMatrix.d.ts.map +1 -1
  37. package/dist/viz/ConfusionMatrix.js +28 -7
  38. package/dist/viz/ConfusionMatrix.js.map +1 -1
  39. package/dist/viz/FeatureImportanceBar.d.ts +3 -1
  40. package/dist/viz/FeatureImportanceBar.d.ts.map +1 -1
  41. package/dist/viz/FeatureImportanceBar.js +10 -3
  42. package/dist/viz/FeatureImportanceBar.js.map +1 -1
  43. package/dist/viz/FoldStabilityLines.d.ts +3 -1
  44. package/dist/viz/FoldStabilityLines.d.ts.map +1 -1
  45. package/dist/viz/FoldStabilityLines.js +14 -2
  46. package/dist/viz/FoldStabilityLines.js.map +1 -1
  47. package/dist/viz/Histogram.d.ts +3 -1
  48. package/dist/viz/Histogram.d.ts.map +1 -1
  49. package/dist/viz/Histogram.js +15 -3
  50. package/dist/viz/Histogram.js.map +1 -1
  51. package/dist/viz/PcaScatter.d.ts +3 -1
  52. package/dist/viz/PcaScatter.d.ts.map +1 -1
  53. package/dist/viz/PcaScatter.js +30 -6
  54. package/dist/viz/PcaScatter.js.map +1 -1
  55. package/dist/viz/PipelineFlow.d.ts +3 -1
  56. package/dist/viz/PipelineFlow.d.ts.map +1 -1
  57. package/dist/viz/PipelineFlow.js +8 -2
  58. package/dist/viz/PipelineFlow.js.map +1 -1
  59. package/dist/viz/PredictionScatter.d.ts +4 -2
  60. package/dist/viz/PredictionScatter.d.ts.map +1 -1
  61. package/dist/viz/PredictionScatter.js +25 -4
  62. package/dist/viz/PredictionScatter.js.map +1 -1
  63. package/dist/viz/ResidualPlot.d.ts +3 -1
  64. package/dist/viz/ResidualPlot.d.ts.map +1 -1
  65. package/dist/viz/ResidualPlot.js +18 -3
  66. package/dist/viz/ResidualPlot.js.map +1 -1
  67. package/dist/viz/ScoreHeatmap.d.ts +3 -1
  68. package/dist/viz/ScoreHeatmap.d.ts.map +1 -1
  69. package/dist/viz/ScoreHeatmap.js +23 -2
  70. package/dist/viz/ScoreHeatmap.js.map +1 -1
  71. package/dist/viz/ScoreSummary.d.ts +3 -1
  72. package/dist/viz/ScoreSummary.d.ts.map +1 -1
  73. package/dist/viz/ScoreSummary.js +8 -2
  74. package/dist/viz/ScoreSummary.js.map +1 -1
  75. package/dist/viz/ShapBeeswarm.d.ts +3 -1
  76. package/dist/viz/ShapBeeswarm.d.ts.map +1 -1
  77. package/dist/viz/ShapBeeswarm.js +20 -4
  78. package/dist/viz/ShapBeeswarm.js.map +1 -1
  79. package/dist/viz/SpectraPlot.d.ts +4 -2
  80. package/dist/viz/SpectraPlot.d.ts.map +1 -1
  81. package/dist/viz/SpectraPlot.js +27 -7
  82. package/dist/viz/SpectraPlot.js.map +1 -1
  83. package/dist/viz/WaterfallChart.d.ts +3 -1
  84. package/dist/viz/WaterfallChart.d.ts.map +1 -1
  85. package/dist/viz/WaterfallChart.js +18 -6
  86. package/dist/viz/WaterfallChart.js.map +1 -1
  87. package/dist/viz/description.d.ts +9 -0
  88. package/dist/viz/description.d.ts.map +1 -0
  89. package/dist/viz/description.js +25 -0
  90. package/dist/viz/description.js.map +1 -0
  91. package/dist/viz/index.d.ts +3 -1
  92. package/dist/viz/index.d.ts.map +1 -1
  93. package/dist/viz/index.js +3 -1
  94. package/dist/viz/index.js.map +1 -1
  95. package/package.json +5 -1
@@ -18,6 +18,8 @@ export interface ScoreHeatmapProps {
18
18
  xLabel?: string;
19
19
  yLabel?: string;
20
20
  title?: string;
21
+ /** Faithful host-provided text alternative; defaults to a data summary. */
22
+ description?: string;
21
23
  className?: string;
22
24
  }
23
25
  /**
@@ -26,5 +28,5 @@ export interface ScoreHeatmapProps {
26
28
  * non-finite entries drop out as blanks, and a compact gradient legend keys the
27
29
  * scale. Pure inline SVG; hosts pass labels + a values matrix.
28
30
  */
29
- export declare function ScoreHeatmap({ rows, cols, values, colorScale, showValues, valueFormat, min, max, width, height, xLabel, yLabel, title, className, }: ScoreHeatmapProps): import("react").JSX.Element;
31
+ export declare function ScoreHeatmap({ rows, cols, values, colorScale, showValues, valueFormat, min, max, width, height, xLabel, yLabel, title, description, className, }: ScoreHeatmapProps): import("react").JSX.Element;
30
32
  //# sourceMappingURL=ScoreHeatmap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScoreHeatmap.d.ts","sourceRoot":"","sources":["../../src/viz/ScoreHeatmap.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,6DAA6D;IAC7D,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,0EAA0E;IAC1E,MAAM,EAAE,aAAa,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IACzC,yDAAyD;IACzD,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,UAAyB,EACzB,UAAiB,EACjB,WAA2B,EAC3B,GAAG,EACH,GAAG,EACH,KAAW,EACX,MAAM,EACN,MAAM,EACN,MAAM,EACN,KAA6B,EAC7B,SAAS,GACV,EAAE,iBAAiB,+BAgJnB"}
1
+ {"version":3,"file":"ScoreHeatmap.d.ts","sourceRoot":"","sources":["../../src/viz/ScoreHeatmap.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,6DAA6D;IAC7D,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,0EAA0E;IAC1E,MAAM,EAAE,aAAa,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IACzC,yDAAyD;IACzD,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,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;AASD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,UAAyB,EACzB,UAAiB,EACjB,WAA2B,EAC3B,GAAG,EACH,GAAG,EACH,KAAW,EACX,MAAM,EACN,MAAM,EACN,MAAM,EACN,KAA6B,EAC7B,WAAW,EACX,SAAS,GACV,EAAE,iBAAiB,+BAoKnB"}
@@ -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 { clamp, extentOf, round } from "./geometry.js";
4
6
  import { viridisColor } from "./theme.js";
5
7
  function defaultFormat(value) {
@@ -17,7 +19,8 @@ function defaultFormat(value) {
17
19
  * non-finite entries drop out as blanks, and a compact gradient legend keys the
18
20
  * scale. Pure inline SVG; hosts pass labels + a values matrix.
19
21
  */
20
- export function ScoreHeatmap({ rows, cols, values, colorScale = viridisColor, showValues = true, valueFormat = defaultFormat, min, max, width = 420, height, xLabel, yLabel, title = "Performance heatmap", className, }) {
22
+ export function ScoreHeatmap({ rows, cols, values, colorScale = viridisColor, showValues = true, valueFormat = defaultFormat, min, max, width = 420, height, xLabel, yLabel, title = "Performance heatmap", description, className, }) {
23
+ const descriptionId = useId();
21
24
  const resolvedHeight = height ?? Math.max(160, rows.length * 34 + 60);
22
25
  const padLeft = 88;
23
26
  const padTop = 34;
@@ -40,7 +43,25 @@ export function ScoreHeatmap({ rows, cols, values, colorScale = viridisColor, sh
40
43
  const legendX = gridRight + 14;
41
44
  const legendW = 10;
42
45
  const segCount = 16;
43
- return (_jsxs("svg", { className: cx("n4viz", "n4viz-heatmap", className), viewBox: `0 0 ${width} ${resolvedHeight}`, role: "img", "aria-label": title, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { children: title }), rows.map((_, r) => cols.map((__, c) => {
46
+ let finiteCellCount = 0;
47
+ let lowest = null;
48
+ let highest = null;
49
+ for (const [row, rowLabel] of rows.entries()) {
50
+ for (const [col, colLabel] of cols.entries()) {
51
+ const value = values[row]?.[col];
52
+ if (typeof value !== "number" || !Number.isFinite(value))
53
+ continue;
54
+ finiteCellCount += 1;
55
+ if (lowest === null || value < lowest.value)
56
+ lowest = { rowLabel, colLabel, value };
57
+ if (highest === null || value > highest.value)
58
+ highest = { rowLabel, colLabel, value };
59
+ }
60
+ }
61
+ const summary = description?.trim() || (finiteCellCount === 0
62
+ ? `${countLabel(rows.length, "row")} by ${countLabel(cols.length, "column")}; no finite scores.`
63
+ : `${countLabel(rows.length, "row")} by ${countLabel(cols.length, "column")}; ${countLabel(finiteCellCount, "finite score")}; lowest ${summaryNumber(lowest.value)} at ${lowest.rowLabel} / ${lowest.colLabel}; highest ${summaryNumber(highest.value)} at ${highest.rowLabel} / ${highest.colLabel}.`);
64
+ return (_jsxs("svg", { className: cx("n4viz", "n4viz-heatmap", 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 }), rows.map((_, r) => cols.map((__, c) => {
44
65
  const raw = values[r]?.[c];
45
66
  const hasValue = typeof raw === "number" && Number.isFinite(raw);
46
67
  const t = typeof raw === "number" && Number.isFinite(raw) ? clamp((raw - lo) / span, 0, 1) : 0;
@@ -1 +1 @@
1
- {"version":3,"file":"ScoreHeatmap.js","sourceRoot":"","sources":["../../src/viz/ScoreHeatmap.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScoreHeatmap.js","sourceRoot":"","sources":["../../src/viz/ScoreHeatmap.tsx"],"names":[],"mappings":"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"}
@@ -12,6 +12,8 @@ export interface ScoreSummaryProps {
12
12
  tileHeight?: number;
13
13
  gap?: number;
14
14
  title?: string;
15
+ /** Faithful host-provided text alternative; defaults to a data summary. */
16
+ description?: string;
15
17
  className?: string;
16
18
  }
17
19
  /**
@@ -19,5 +21,5 @@ export interface ScoreSummaryProps {
19
21
  * ScoreCardTree and the Web ResultsList, rendered as one presentational SVG so
20
22
  * it composes like the other viz charts. Hosts pass pre-formatted strings.
21
23
  */
22
- export declare function ScoreSummary({ stats, columns, tileWidth, tileHeight, gap, title, className, }: ScoreSummaryProps): import("react").JSX.Element;
24
+ export declare function ScoreSummary({ stats, columns, tileWidth, tileHeight, gap, title, description, className, }: ScoreSummaryProps): import("react").JSX.Element;
23
25
  //# sourceMappingURL=ScoreSummary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScoreSummary.d.ts","sourceRoot":"","sources":["../../src/viz/ScoreSummary.tsx"],"names":[],"mappings":"AAIA,iCAAiC;AACjC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,OAAW,EACX,SAAe,EACf,UAAe,EACf,GAAQ,EACR,KAAgB,EAChB,SAAS,GACV,EAAE,iBAAiB,+BAwDnB"}
1
+ {"version":3,"file":"ScoreSummary.d.ts","sourceRoot":"","sources":["../../src/viz/ScoreSummary.tsx"],"names":[],"mappings":"AAOA,iCAAiC;AACjC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,OAAW,EACX,SAAe,EACf,UAAe,EACf,GAAQ,EACR,KAAgB,EAChB,WAAW,EACX,SAAS,GACV,EAAE,iBAAiB,+BAgEnB"}
@@ -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 } from "./description.js";
3
5
  import { round } from "./geometry.js";
4
6
  import { N4_VIZ_COLORS } from "./theme.js";
5
7
  const TONE_COLORS = {
@@ -15,12 +17,16 @@ function toneColor(tone) {
15
17
  * ScoreCardTree and the Web ResultsList, rendered as one presentational SVG so
16
18
  * it composes like the other viz charts. Hosts pass pre-formatted strings.
17
19
  */
18
- export function ScoreSummary({ stats, columns = 3, tileWidth = 120, tileHeight = 76, gap = 10, title = "Scores", className, }) {
20
+ export function ScoreSummary({ stats, columns = 3, tileWidth = 120, tileHeight = 76, gap = 10, title = "Scores", description, className, }) {
21
+ const descriptionId = useId();
19
22
  const cols = Math.max(1, Math.trunc(columns));
20
23
  const rows = stats.length > 0 ? Math.ceil(stats.length / cols) : 0;
21
24
  const width = cols * tileWidth + (cols + 1) * gap;
22
25
  const height = rows * tileHeight + (rows + 1) * gap;
23
- return (_jsxs("svg", { className: cx("n4viz", "n4viz-scores", className), viewBox: `0 0 ${width} ${height}`, role: "img", "aria-label": title, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { children: title }), stats.map((stat, i) => {
26
+ const summary = description?.trim() || (stats.length === 0
27
+ ? "No scores available."
28
+ : `${countLabel(stats.length, "score")}; ${stats.map((stat) => `${stat.label}: ${stat.value}${stat.delta ? `, change ${stat.delta}` : ""}`).join("; ")}.`);
29
+ return (_jsxs("svg", { className: cx("n4viz", "n4viz-scores", 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 }), stats.map((stat, i) => {
24
30
  const col = i % cols;
25
31
  const rowIdx = Math.floor(i / cols);
26
32
  const x = gap + col * (tileWidth + gap);
@@ -1 +1 @@
1
- {"version":3,"file":"ScoreSummary.js","sourceRoot":"","sources":["../../src/viz/ScoreSummary.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScoreSummary.js","sourceRoot":"","sources":["../../src/viz/ScoreSummary.tsx"],"names":[],"mappings":"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"}
@@ -15,6 +15,8 @@ export interface ShapBeeswarmProps {
15
15
  height?: number;
16
16
  pointRadius?: number;
17
17
  title?: string;
18
+ /** Faithful host-provided text alternative; defaults to a data summary. */
19
+ description?: string;
18
20
  className?: string;
19
21
  xLabel?: string;
20
22
  }
@@ -25,5 +27,5 @@ export interface ShapBeeswarmProps {
25
27
  * contributions. Jitter is deterministic (index-derived, never random) so the
26
28
  * markup is stable across renders. Pure inline SVG.
27
29
  */
28
- export declare function ShapBeeswarm({ features, width, height, pointRadius, title, className, xLabel, }: ShapBeeswarmProps): import("react").JSX.Element;
30
+ export declare function ShapBeeswarm({ features, width, height, pointRadius, title, description, className, xLabel, }: ShapBeeswarmProps): import("react").JSX.Element;
29
31
  //# sourceMappingURL=ShapBeeswarm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ShapBeeswarm.d.ts","sourceRoot":"","sources":["../../src/viz/ShapBeeswarm.tsx"],"names":[],"mappings":"AAIA,qEAAqE;AACrE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmBD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,KAAW,EACX,MAAM,EACN,WAAiB,EACjB,KAAuB,EACvB,SAAS,EACT,MAAqB,GACtB,EAAE,iBAAiB,+BA+FnB"}
1
+ {"version":3,"file":"ShapBeeswarm.d.ts","sourceRoot":"","sources":["../../src/viz/ShapBeeswarm.tsx"],"names":[],"mappings":"AAOA,qEAAqE;AACrE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmBD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,KAAW,EACX,MAAM,EACN,WAAiB,EACjB,KAAuB,EACvB,WAAW,EACX,SAAS,EACT,MAAqB,GACtB,EAAE,iBAAiB,+BAiHnB"}
@@ -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 { extentOf, makeScale, round, ticks } from "./geometry.js";
4
6
  import { divergingColor, N4_VIZ_COLORS } from "./theme.js";
5
7
  function fmt(value) {
@@ -26,7 +28,11 @@ function jitterUnit(index) {
26
28
  * contributions. Jitter is deterministic (index-derived, never random) so the
27
29
  * markup is stable across renders. Pure inline SVG.
28
30
  */
29
- export function ShapBeeswarm({ features, width = 420, height, pointRadius = 2.5, title = "SHAP beeswarm", className, xLabel = "SHAP value", }) {
31
+ export function ShapBeeswarm({ features, width = 420, height, pointRadius = 2.5, title = "SHAP beeswarm", description, className, xLabel = "SHAP value", }) {
32
+ const descriptionId = useId();
33
+ const validFeatures = features.map((feature) => ({
34
+ ...feature, points: feature.points.filter((point) => Number.isFinite(point.shap)),
35
+ }));
30
36
  const resolvedHeight = height ?? Math.max(180, features.length * 34 + 48);
31
37
  const padLeft = 96;
32
38
  const padRight = 16;
@@ -37,7 +43,7 @@ export function ShapBeeswarm({ features, width = 420, height, pointRadius = 2.5,
37
43
  const plotTop = padTop;
38
44
  const plotBottom = resolvedHeight - padBottom;
39
45
  const plotHeight = Math.max(0, plotBottom - plotTop);
40
- const allShap = features.flatMap((f) => f.points.map((p) => p.shap));
46
+ const allShap = validFeatures.flatMap((f) => f.points.map((p) => p.shap));
41
47
  const ext = extentOf(allShap);
42
48
  const domain = { min: Math.min(0, ext.min), max: Math.max(0, ext.max) };
43
49
  const xScale = makeScale(domain, plotLeft, plotRight);
@@ -46,14 +52,24 @@ export function ShapBeeswarm({ features, width = 420, height, pointRadius = 2.5,
46
52
  const n = features.length;
47
53
  const band = n > 0 ? plotHeight / n : plotHeight;
48
54
  const amplitude = Math.min(band, 30) * 0.35;
49
- return (_jsxs("svg", { className: cx("n4viz", "n4viz-beeswarm", className), viewBox: `0 0 ${width} ${resolvedHeight}`, role: "img", "aria-label": title, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { children: title }), _jsx("line", { className: "n4viz-reference n4viz-zero", x1: round(xZero), x2: round(xZero), y1: plotTop, y2: plotBottom, stroke: N4_VIZ_COLORS.slate, strokeDasharray: "5 4", strokeWidth: 1.4 }), features.map((feature, fi) => {
55
+ const featureSummaries = validFeatures.flatMap((feature) => {
56
+ const values = feature.points.map((point) => point.shap).filter((value) => Number.isFinite(value));
57
+ return values.length
58
+ ? [`${feature.label}: ${countLabel(values.length, "contribution")}, mean ${summaryNumber(values.reduce((sum, value) => sum + value, 0) / values.length)}, range ${rangeText(values)}`]
59
+ : [];
60
+ });
61
+ const missingFeatureValues = validFeatures.some((feature) => feature.points.some((point) => !Number.isFinite(point.featureValue)));
62
+ const summary = description?.trim() || (featureSummaries.length === 0
63
+ ? "No finite SHAP contributions."
64
+ : `${countLabel(featureSummaries.length, "feature")}; ${featureSummaries.join("; ")}. Color encodes feature value.${missingFeatureValues ? " Unavailable feature values use a neutral color." : ""}`);
65
+ return (_jsxs("svg", { className: cx("n4viz", "n4viz-beeswarm", 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 }), _jsx("line", { className: "n4viz-reference n4viz-zero", x1: round(xZero), x2: round(xZero), y1: plotTop, y2: plotBottom, stroke: N4_VIZ_COLORS.slate, strokeDasharray: "5 4", strokeWidth: 1.4 }), validFeatures.map((feature, fi) => {
50
66
  const center = plotTop + band * fi + band / 2;
51
67
  const fvExtent = extentOf(feature.points.map((p) => p.featureValue));
52
68
  const fvSpan = fvExtent.max - fvExtent.min;
53
69
  return (_jsxs("g", { children: [_jsx("text", { className: "n4viz-tick", x: plotLeft - 6, y: round(center + 3), textAnchor: "end", children: truncate(feature.label) }), feature.points.map((point, pi) => {
54
70
  const norm = fvSpan > 0 ? (point.featureValue - fvExtent.min) / fvSpan : 0.5;
55
71
  const cy = center + jitterUnit(pi + fi * 131) * amplitude;
56
- return (_jsx("circle", { className: "n4viz-dot", cx: round(xScale(point.shap)), cy: round(cy), r: pointRadius, fill: divergingColor(norm), fillOpacity: 0.72 }, `p-${fi}-${pi}`));
72
+ return (_jsx("circle", { className: "n4viz-dot", cx: round(xScale(point.shap)), cy: round(cy), r: pointRadius, fill: Number.isFinite(point.featureValue) ? divergingColor(norm) : N4_VIZ_COLORS.slate, fillOpacity: 0.72 }, `p-${fi}-${pi}`));
57
73
  })] }, `${feature.label}-${fi}`));
58
74
  }), _jsx("line", { className: "n4viz-axis", x1: plotLeft, x2: plotRight, y1: plotBottom, y2: plotBottom }), axisTicks.map((t) => (_jsx("text", { className: "n4viz-tick", x: round(xScale(t)), y: plotBottom + 15, textAnchor: "middle", children: fmt(t) }, `tx-${t}`))), _jsx("text", { className: "n4viz-axis-label", x: plotLeft + (plotRight - plotLeft) / 2, y: resolvedHeight - 2, textAnchor: "middle", children: xLabel })] }));
59
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ShapBeeswarm.js","sourceRoot":"","sources":["../../src/viz/ShapBeeswarm.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ShapBeeswarm.js","sourceRoot":"","sources":["../../src/viz/ShapBeeswarm.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,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA2B3D,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,SAAS,QAAQ,CAAC,KAAa,EAAE,GAAG,GAAG,EAAE;IACvC,OAAO,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AACpE,CAAC;AAED,gFAAgF;AAChF,SAAS,UAAU,CAAC,KAAa;IAC/B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACtD,OAAO,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,EACR,KAAK,GAAG,GAAG,EACX,MAAM,EACN,WAAW,GAAG,GAAG,EACjB,KAAK,GAAG,eAAe,EACvB,WAAW,EACX,SAAS,EACT,MAAM,GAAG,YAAY,GACH;IAClB,MAAM,aAAa,GAAG,KAAK,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/C,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAClF,CAAC,CAAC,CAAC;IACJ,MAAM,cAAc,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAE1E,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,QAAQ,GAAG,OAAO,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC;IACvB,MAAM,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;IAErD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IACxE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAExB,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC1B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5C,MAAM,gBAAgB,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACnG,OAAO,MAAM,CAAC,MAAM;YAClB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,KAAK,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACtL,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IACH,MAAM,oBAAoB,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACnI,MAAM,OAAO,GAAG,WAAW,EAAE,IAAI,EAAE,IAAI,CACrC,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAC3B,CAAC,CAAC,+BAA+B;QACjC,CAAC,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC,oBAAoB,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC,EAAE,EAAE,CACvM,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,SAAS,CAAC,EACnD,OAAO,EAAE,OAAO,KAAK,IAAI,cAAc,EAAE,EACzC,IAAI,EAAC,KAAK,gBACE,KAAK,sBACC,aAAa,EAC/B,mBAAmB,EAAC,eAAe,aAEnC,0BAAQ,KAAK,GAAS,EACtB,eAAM,EAAE,EAAE,aAAa,YAAG,OAAO,GAAQ,EAEzC,eACE,SAAS,EAAC,4BAA4B,EACtC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,EAChB,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,EAChB,EAAE,EAAE,OAAO,EACX,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,aAAa,CAAC,KAAK,EAC3B,eAAe,EAAC,KAAK,EACrB,WAAW,EAAE,GAAG,GAChB,EAED,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE;gBACjC,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;gBACrE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;gBAC3C,OAAO,CACL,wBACE,eACE,SAAS,EAAC,YAAY,EACtB,CAAC,EAAE,QAAQ,GAAG,CAAC,EACf,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EACpB,UAAU,EAAC,KAAK,YAEf,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GACnB,EACN,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;4BAChC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;4BAC7E,MAAM,EAAE,GAAG,MAAM,GAAG,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC;4BAC1D,OAAO,CACL,iBAEE,SAAS,EAAC,WAAW,EACrB,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAC7B,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,EACb,CAAC,EAAE,WAAW,EACd,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EACtF,WAAW,EAAE,IAAI,IANZ,KAAK,EAAE,IAAI,EAAE,EAAE,CAOpB,CACH,CAAC;wBACJ,CAAC,CAAC,KAvBI,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAwB5B,CACL,CAAC;YACJ,CAAC,CAAC,EAEF,eAAM,SAAS,EAAC,YAAY,EAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAI,EAC3F,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACpB,eAEE,SAAS,EAAC,YAAY,EACtB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACnB,CAAC,EAAE,UAAU,GAAG,EAAE,EAClB,UAAU,EAAC,QAAQ,YAElB,GAAG,CAAC,CAAC,CAAC,IANF,MAAM,CAAC,EAAE,CAOT,CACR,CAAC,EACF,eAAM,SAAS,EAAC,kBAAkB,EAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,cAAc,GAAG,CAAC,EAAE,UAAU,EAAC,QAAQ,YACpH,MAAM,GACF,IACH,CACP,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ReactNode } from "react";
1
+ import { type ReactNode } from "react";
2
2
  import { type PlotPadding } from "./geometry.js";
3
3
  import { type PartitionKey } from "./theme.js";
4
4
  /** One overlaid spectrum (absorbance values aligned to the shared wavelength axis). */
@@ -36,6 +36,8 @@ export interface SpectraPlotProps {
36
36
  showAxes?: boolean;
37
37
  meanColor?: string;
38
38
  title?: string;
39
+ /** Faithful host-provided text alternative; defaults to a data summary. */
40
+ description?: string;
39
41
  className?: string;
40
42
  /** Extra SVG content rendered in data space last (annotations, legends). */
41
43
  children?: ReactNode;
@@ -46,5 +48,5 @@ export interface SpectraPlotProps {
46
48
  * min/max band. Pure inline SVG — no chart library, no state. Hosts pass
47
49
  * already-aligned numeric arrays.
48
50
  */
49
- export declare function SpectraPlot({ wavelengths, series, mean, band, width, height, padding, unit, xLabel, yLabel, showGrid, showAxes, meanColor, title, className, children, }: SpectraPlotProps): import("react").JSX.Element;
51
+ export declare function SpectraPlot({ wavelengths, series, mean, band, width, height, padding, unit, xLabel, yLabel, showGrid, showAxes, meanColor, title, description, className, children, }: SpectraPlotProps): import("react").JSX.Element;
50
52
  //# sourceMappingURL=SpectraPlot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SpectraPlot.d.ts","sourceRoot":"","sources":["../../src/viz/SpectraPlot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EASL,KAAK,WAAW,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnF,uFAAuF;AACvF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,kFAAkF;IAClF,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,6CAA6C;IAC7C,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,wBAAwB;IACxB,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAcD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,WAAW,EACX,MAAW,EACX,IAAI,EACJ,IAAI,EACJ,KAAW,EACX,MAAY,EACZ,OAAO,EACP,IAAW,EACX,MAAM,EACN,MAAqB,EACrB,QAAe,EACf,QAAe,EACf,SAAkC,EAClC,KAAsB,EACtB,SAAS,EACT,QAAQ,GACT,EAAE,gBAAgB,+BA4GlB"}
1
+ {"version":3,"file":"SpectraPlot.d.ts","sourceRoot":"","sources":["../../src/viz/SpectraPlot.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI9C,OAAO,EASL,KAAK,WAAW,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnF,uFAAuF;AACvF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,kFAAkF;IAClF,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,6CAA6C;IAC7C,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,wBAAwB;IACxB,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAcD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,WAAW,EACX,MAAW,EACX,IAAI,EACJ,IAAI,EACJ,KAAW,EACX,MAAY,EACZ,OAAO,EACP,IAAW,EACX,MAAM,EACN,MAAqB,EACrB,QAAe,EACf,QAAe,EACf,SAAkC,EAClC,KAAsB,EACtB,WAAW,EACX,SAAS,EACT,QAAQ,GACT,EAAE,gBAAgB,+BAoIlB"}
@@ -1,5 +1,7 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId } from "react";
2
3
  import { cx } from "./_cx.js";
4
+ import { countLabel, rangeText } from "./description.js";
3
5
  import { bandPath, buildFrame, extentOf, linePath, makeScale, niceExtent, round, ticks, } from "./geometry.js";
4
6
  import { N4_PARTITION_COLORS, N4_VIZ_COLORS } from "./theme.js";
5
7
  function partitionColor(series) {
@@ -22,25 +24,43 @@ function formatTick(value) {
22
24
  * min/max band. Pure inline SVG — no chart library, no state. Hosts pass
23
25
  * already-aligned numeric arrays.
24
26
  */
25
- export function SpectraPlot({ wavelengths, series = [], mean, band, width = 520, height = 260, padding, unit = "nm", xLabel, yLabel = "Absorbance", showGrid = true, showAxes = true, meanColor = N4_VIZ_COLORS.tealDark, title = "NIRS spectra", className, children, }) {
27
+ export function SpectraPlot({ wavelengths, series = [], mean, band, width = 520, height = 260, padding, unit = "nm", xLabel, yLabel = "Absorbance", showGrid = true, showAxes = true, meanColor = N4_VIZ_COLORS.tealDark, title = "NIRS spectra", description, className, children, }) {
28
+ const descriptionId = useId();
26
29
  const frame = buildFrame(width, height, padding);
27
30
  const { top, left } = frame.padding;
28
31
  const bottom = top + frame.innerHeight;
32
+ const usableAxis = wavelengths.length > 0 && wavelengths.every(Number.isFinite);
33
+ const aligned = (values) => usableAxis && values.length === wavelengths.length && values.every(Number.isFinite);
34
+ const validSeries = series.filter((curve) => aligned(curve.values));
35
+ const validMean = mean && aligned(mean) ? mean : null;
36
+ const validBand = band && aligned(band.lower) && aligned(band.upper)
37
+ && band.lower.every((lower, index) => lower <= band.upper[index]) ? band : null;
29
38
  const xDomain = extentOf(wavelengths);
30
39
  const allValues = [
31
- ...series.flatMap((s) => s.values),
32
- ...(mean ?? []),
33
- ...(band ? [...band.lower, ...band.upper] : []),
40
+ ...validSeries.flatMap((s) => s.values),
41
+ ...(validMean ?? []),
42
+ ...(validBand ? [...validBand.lower, ...validBand.upper] : []),
34
43
  ];
35
44
  const yDomain = niceExtent(allValues.length ? allValues : [0, 1], 0.08);
36
45
  const xScale = makeScale(xDomain, left, left + frame.innerWidth);
37
46
  const yScale = makeScale(yDomain, bottom, top);
38
- const toPoints = (values) => wavelengths.map((wl, i) => [xScale(wl), yScale(values[i] ?? 0)]);
47
+ const toPoints = (values) => wavelengths.map((wl, i) => [xScale(wl), yScale(values[i])]);
39
48
  const xTicks = ticks(xDomain, 5);
40
49
  const yTicks = ticks(yDomain, 4);
41
50
  const resolvedXLabel = xLabel ?? `Wavelength (${unit})`;
42
- return (_jsxs("svg", { className: cx("n4viz", "n4viz-spectra", className), viewBox: `0 0 ${width} ${height}`, role: "img", "aria-label": title, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { children: title }), showGrid
51
+ const wavelengthRange = rangeText(wavelengths);
52
+ const valueRange = rangeText(allValues);
53
+ const summary = description?.trim() || (!validSeries.length && !validMean && !validBand
54
+ ? "No spectral curves available."
55
+ : [
56
+ `${countLabel(validSeries.length, "sample spectrum", "sample spectra")} across ${countLabel(wavelengths.length, "axis position")}`,
57
+ ...(wavelengthRange ? [`axis range ${wavelengthRange} ${unit}`] : []),
58
+ ...(valueRange ? [`${yLabel} range ${valueRange}`] : []),
59
+ ...(validMean ? ["mean curve shown"] : []),
60
+ ...(validBand ? ["range band shown"] : []),
61
+ ].join("; ") + ".");
62
+ return (_jsxs("svg", { className: cx("n4viz", "n4viz-spectra", 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 }), showGrid
43
63
  ? yTicks.map((t) => (_jsx("line", { className: "n4viz-grid", x1: left, x2: left + frame.innerWidth, y1: round(yScale(t)), y2: round(yScale(t)) }, `gy-${t}`)))
44
- : null, band ? (_jsx("path", { className: "n4viz-band", d: bandPath(toPoints(band.upper), toPoints(band.lower)), fill: band.color ?? N4_VIZ_COLORS.teal, fillOpacity: band.opacity ?? 0.12, stroke: "none" })) : null, series.map((s) => (_jsx("path", { className: "n4viz-line", d: linePath(toPoints(s.values)), fill: "none", stroke: partitionColor(s), strokeOpacity: s.opacity ?? 0.5, strokeWidth: 1 }, s.id))), mean ? (_jsx("path", { className: "n4viz-line n4viz-line-mean", d: linePath(toPoints(mean)), fill: "none", stroke: meanColor, strokeWidth: 2.4, strokeLinecap: "round", strokeLinejoin: "round" })) : null, showAxes ? (_jsxs(_Fragment, { children: [_jsx("line", { className: "n4viz-axis", x1: left, x2: left + frame.innerWidth, 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 + 16, textAnchor: "middle", children: formatTick(t) }, `tx-${t}`))), yTicks.map((t) => (_jsx("text", { className: "n4viz-tick", x: left - 6, y: round(yScale(t)) + 3, textAnchor: "end", children: formatTick(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: yLabel })] })) : null, children] }));
64
+ : null, validBand ? (_jsx("path", { className: "n4viz-band", d: bandPath(toPoints(validBand.upper), toPoints(validBand.lower)), fill: validBand.color ?? N4_VIZ_COLORS.teal, fillOpacity: validBand.opacity ?? 0.12, stroke: "none" })) : null, validSeries.map((s) => (_jsx("path", { className: "n4viz-line", d: linePath(toPoints(s.values)), fill: "none", stroke: partitionColor(s), strokeOpacity: s.opacity ?? 0.5, strokeWidth: 1 }, s.id))), validMean ? (_jsx("path", { className: "n4viz-line n4viz-line-mean", d: linePath(toPoints(validMean)), fill: "none", stroke: meanColor, strokeWidth: 2.4, strokeLinecap: "round", strokeLinejoin: "round" })) : null, showAxes ? (_jsxs(_Fragment, { children: [_jsx("line", { className: "n4viz-axis", x1: left, x2: left + frame.innerWidth, 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 + 16, textAnchor: "middle", children: formatTick(t) }, `tx-${t}`))), yTicks.map((t) => (_jsx("text", { className: "n4viz-tick", x: left - 6, y: round(yScale(t)) + 3, textAnchor: "end", children: formatTick(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: yLabel })] })) : null, children] }));
45
65
  }
46
66
  //# sourceMappingURL=SpectraPlot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SpectraPlot.js","sourceRoot":"","sources":["../../src/viz/SpectraPlot.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SpectraPlot.js","sourceRoot":"","sources":["../../src/viz/SpectraPlot.tsx"],"names":[],"mappings":"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"}
@@ -17,6 +17,8 @@ export interface WaterfallChartProps {
17
17
  /** Auto-sized from the kept row count when omitted. */
18
18
  height?: number;
19
19
  title?: string;
20
+ /** Faithful host-provided text alternative; defaults to a data summary. */
21
+ description?: string;
20
22
  className?: string;
21
23
  }
22
24
  /**
@@ -26,5 +28,5 @@ export interface WaterfallChartProps {
26
28
  * base value to the prediction. A dashed base reference and a solid prediction
27
29
  * reference frame the walk. Pure inline SVG; hosts pass precomputed SHAP values.
28
30
  */
29
- export declare function WaterfallChart({ baseValue, contributions, predicted, topN, valueFormat, width, height, title, className, }: WaterfallChartProps): import("react").JSX.Element;
31
+ export declare function WaterfallChart({ baseValue, contributions, predicted, topN, valueFormat, width, height, title, description, className, }: WaterfallChartProps): import("react").JSX.Element;
30
32
  //# sourceMappingURL=WaterfallChart.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WaterfallChart.d.ts","sourceRoot":"","sources":["../../src/viz/WaterfallChart.tsx"],"names":[],"mappings":"AAIA,0EAA0E;AAC1E,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,aAAa,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAChD,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,aAAa,EACb,SAAS,EACT,IAAS,EACT,WAA2B,EAC3B,KAAW,EACX,MAAM,EACN,KAAwB,EACxB,SAAS,GACV,EAAE,mBAAmB,+BAyIrB"}
1
+ {"version":3,"file":"WaterfallChart.d.ts","sourceRoot":"","sources":["../../src/viz/WaterfallChart.tsx"],"names":[],"mappings":"AAOA,0EAA0E;AAC1E,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,aAAa,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAChD,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,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;AAkBD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,aAAa,EACb,SAAS,EACT,IAAS,EACT,WAA2B,EAC3B,KAAW,EACX,MAAM,EACN,KAAwB,EACxB,WAAW,EACX,SAAS,GACV,EAAE,mBAAmB,+BAuJrB"}
@@ -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 { makeScale, niceExtent, round, ticks } from "./geometry.js";
4
6
  import { N4_VIZ_COLORS } from "./theme.js";
5
7
  function defaultFormat(value) {
@@ -26,11 +28,12 @@ function truncate(label, max = 15) {
26
28
  * base value to the prediction. A dashed base reference and a solid prediction
27
29
  * reference frame the walk. Pure inline SVG; hosts pass precomputed SHAP values.
28
30
  */
29
- export function WaterfallChart({ baseValue, contributions, predicted, topN = 10, valueFormat = defaultFormat, width = 440, height, title = "SHAP waterfall", className, }) {
30
- const sumAll = contributions.reduce((s, c) => s + (Number.isFinite(c.value) ? c.value : 0), 0);
31
+ export function WaterfallChart({ baseValue, contributions, predicted, topN = 10, valueFormat = defaultFormat, width = 440, height, title = "SHAP waterfall", description, className, }) {
32
+ const descriptionId = useId();
33
+ const sumAll = contributions.reduce((s, c) => s + c.value, 0);
31
34
  const resolvedPredicted = predicted ?? baseValue + sumAll;
32
35
  const keep = Math.max(0, Math.trunc(topN));
33
- const indexed = contributions.map((c, i) => ({ c, i }));
36
+ const indexed = contributions.map((c, i) => ({ c, i })).filter(({ c }) => Number.isFinite(c.value));
34
37
  const keptIndices = new Set([...indexed]
35
38
  .sort((a, b) => Math.abs(b.c.value) - Math.abs(a.c.value))
36
39
  .slice(0, keep)
@@ -49,19 +52,28 @@ export function WaterfallChart({ baseValue, contributions, predicted, topN = 10,
49
52
  let running = baseValue;
50
53
  const rows = kept.map((c) => {
51
54
  const from = running;
52
- const value = Number.isFinite(c.value) ? c.value : 0;
55
+ const value = c.value;
53
56
  const to = from + value;
54
57
  running = to;
55
58
  return { label: c.label, value, from, to };
56
59
  });
60
+ const visibleRows = rows.filter((row) => Number.isFinite(row.from) && Number.isFinite(row.to));
57
61
  const boundaries = [baseValue, resolvedPredicted, ...rows.flatMap((r) => [r.from, r.to])];
58
62
  const domain = niceExtent(boundaries, 0.06);
59
63
  const xScale = makeScale(domain, plotLeft, plotRight);
60
64
  const xTicks = ticks(domain, 5);
61
- const n = rows.length;
65
+ const n = visibleRows.length;
62
66
  const band = n > 0 ? plotHeight / n : plotHeight;
63
67
  const barHeight = Math.min(18, Math.max(4, band - 8));
64
- return (_jsxs("svg", { className: cx("n4viz", "n4viz-waterfall", className), viewBox: `0 0 ${width} ${resolvedHeight}`, role: "img", "aria-label": title, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { children: title }), xTicks.map((t) => (_jsx("line", { className: "n4viz-grid", x1: round(xScale(t)), x2: round(xScale(t)), y1: plotTop, y2: plotBottom }, `grid-${t}`))), _jsx("line", { className: "n4viz-reference n4viz-base", x1: round(xScale(baseValue)), x2: round(xScale(baseValue)), y1: plotTop, y2: plotBottom, stroke: N4_VIZ_COLORS.slate, strokeDasharray: "5 4", strokeWidth: 1.4 }), _jsx("line", { className: "n4viz-reference n4viz-prediction", x1: round(xScale(resolvedPredicted)), x2: round(xScale(resolvedPredicted)), y1: plotTop, y2: plotBottom, stroke: N4_VIZ_COLORS.tealDark, strokeWidth: 1.6 }), _jsx("text", { className: "n4viz-tick", x: round(xScale(baseValue)), y: plotTop - 6, textAnchor: "middle", children: "base" }), _jsx("text", { className: "n4viz-tick", x: round(xScale(resolvedPredicted)), y: plotTop - 6, textAnchor: "middle", children: "f(x)" }), rows.map((row, i) => {
68
+ const shownSum = visibleRows.reduce((sum, row) => sum + row.value, 0);
69
+ const summary = description?.trim() || ([
70
+ `base value ${summaryNumber(baseValue)}`,
71
+ `predicted value ${summaryNumber(resolvedPredicted)}`,
72
+ `${visibleRows.length} of ${countLabel(contributions.length, "contribution")} shown`,
73
+ ...visibleRows.map((row) => `${row.label}: ${row.value >= 0 ? "+" : ""}${summaryNumber(row.value)}`),
74
+ ...(contributions.length > visibleRows.length ? [`omitted contribution sum ${summaryNumber(sumAll - shownSum)}`] : []),
75
+ ].join("; ") + ".");
76
+ return (_jsxs("svg", { className: cx("n4viz", "n4viz-waterfall", 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 }), xTicks.map((t) => (_jsx("line", { className: "n4viz-grid", x1: round(xScale(t)), x2: round(xScale(t)), y1: plotTop, y2: plotBottom }, `grid-${t}`))), Number.isFinite(baseValue) ? _jsx("line", { className: "n4viz-reference n4viz-base", x1: round(xScale(baseValue)), x2: round(xScale(baseValue)), y1: plotTop, y2: plotBottom, stroke: N4_VIZ_COLORS.slate, strokeDasharray: "5 4", strokeWidth: 1.4 }) : null, Number.isFinite(resolvedPredicted) ? _jsx("line", { className: "n4viz-reference n4viz-prediction", x1: round(xScale(resolvedPredicted)), x2: round(xScale(resolvedPredicted)), y1: plotTop, y2: plotBottom, stroke: N4_VIZ_COLORS.tealDark, strokeWidth: 1.6 }) : null, Number.isFinite(baseValue) ? _jsx("text", { className: "n4viz-tick", x: round(xScale(baseValue)), y: plotTop - 6, textAnchor: "middle", children: "base" }) : null, Number.isFinite(resolvedPredicted) ? _jsx("text", { className: "n4viz-tick", x: round(xScale(resolvedPredicted)), y: plotTop - 6, textAnchor: "middle", children: "f(x)" }) : null, visibleRows.map((row, i) => {
65
77
  const center = plotTop + band * i + band / 2;
66
78
  const x0 = xScale(Math.min(row.from, row.to));
67
79
  const x1 = xScale(Math.max(row.from, row.to));
@@ -1 +1 @@
1
- {"version":3,"file":"WaterfallChart.js","sourceRoot":"","sources":["../../src/viz/WaterfallChart.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAyB3C,SAAS,aAAa,CAAC,KAAa;IAClC,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,SAAS,MAAM,CAAC,KAAa,EAAE,MAA6B;IAC1D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACxC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,GAAG,GAAG,EAAE;IACvC,OAAO,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,SAAS,EACT,aAAa,EACb,SAAS,EACT,IAAI,GAAG,EAAE,EACT,WAAW,GAAG,aAAa,EAC3B,KAAK,GAAG,GAAG,EACX,MAAM,EACN,KAAK,GAAG,gBAAgB,EACxB,SAAS,GACW;IACpB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/F,MAAM,iBAAiB,GAAG,SAAS,IAAI,SAAS,GAAG,MAAM,CAAC;IAE1D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,CAAC,GAAG,OAAO,CAAC;SACT,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;SACzD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACnB,CAAC;IACF,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzE,MAAM,cAAc,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAEtE,MAAM,OAAO,GAAG,GAAG,CAAC;IACpB,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,QAAQ,GAAG,OAAO,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC;IACvB,MAAM,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;IAErD,IAAI,OAAO,GAAG,SAAS,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC;QACrB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,IAAI,GAAG,KAAK,CAAC;QACxB,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEhC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IAEtD,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,SAAS,CAAC,EACpD,OAAO,EAAE,OAAO,KAAK,IAAI,cAAc,EAAE,EACzC,IAAI,EAAC,KAAK,gBACE,KAAK,EACjB,mBAAmB,EAAC,eAAe,aAEnC,0BAAQ,KAAK,GAAS,EAErB,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,OAAO,EACX,EAAE,EAAE,UAAU,IALT,QAAQ,CAAC,EAAE,CAMhB,CACH,CAAC,EAEF,eACE,SAAS,EAAC,4BAA4B,EACtC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAC5B,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAC5B,EAAE,EAAE,OAAO,EACX,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,aAAa,CAAC,KAAK,EAC3B,eAAe,EAAC,KAAK,EACrB,WAAW,EAAE,GAAG,GAChB,EACF,eACE,SAAS,EAAC,kCAAkC,EAC5C,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,EACpC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,EACpC,EAAE,EAAE,OAAO,EACX,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,aAAa,CAAC,QAAQ,EAC9B,WAAW,EAAE,GAAG,GAChB,EACF,eAAM,SAAS,EAAC,YAAY,EAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,UAAU,EAAC,QAAQ,qBAEtF,EACP,eAAM,SAAS,EAAC,YAAY,EAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,UAAU,EAAC,QAAQ,qBAE9F,EAEN,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;gBACnB,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;gBAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9C,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;gBACzB,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBAC5D,OAAO,CACL,wBACE,eAAM,SAAS,EAAC,YAAY,EAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,UAAU,EAAC,KAAK,YACjF,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GACf,EACP,eACE,SAAS,EAAC,WAAW,EACrB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EACZ,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,EAChC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAClC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,EACxB,EAAE,EAAE,CAAC,EACL,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,GACnD,EACF,eACE,SAAS,EAAC,aAAa,EACvB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAChB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EACpB,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAE/B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,GAC1B,KApBD,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,CAqBvB,CACL,CAAC;YACJ,CAAC,CAAC,EAEF,eAAM,SAAS,EAAC,YAAY,EAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAI,EAC3F,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjB,eAEE,SAAS,EAAC,YAAY,EACtB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACnB,CAAC,EAAE,UAAU,GAAG,EAAE,EAClB,UAAU,EAAC,QAAQ,YAElB,WAAW,CAAC,CAAC,CAAC,IANV,MAAM,CAAC,EAAE,CAOT,CACR,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"WaterfallChart.js","sourceRoot":"","sources":["../../src/viz/WaterfallChart.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /** Small, locale-neutral summaries for the data behind accessible SVG charts. */
2
+ export declare function summaryNumber(value: number): string;
3
+ export declare function countLabel(count: number, singular: string, plural?: string): string;
4
+ export declare function finiteRange(values: readonly number[]): {
5
+ min: number;
6
+ max: number;
7
+ } | null;
8
+ export declare function rangeText(values: readonly number[]): string | null;
9
+ //# sourceMappingURL=description.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"description.d.ts","sourceRoot":"","sources":["../../src/viz/description.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAiB,GAAG,MAAM,CAE3F;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAS1F;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAGlE"}
@@ -0,0 +1,25 @@
1
+ /** Small, locale-neutral summaries for the data behind accessible SVG charts. */
2
+ export function summaryNumber(value) {
3
+ if (!Number.isFinite(value))
4
+ return "unavailable";
5
+ return Number(value.toPrecision(4)).toString();
6
+ }
7
+ export function countLabel(count, singular, plural = `${singular}s`) {
8
+ return `${count} ${count === 1 ? singular : plural}`;
9
+ }
10
+ export function finiteRange(values) {
11
+ let min = Infinity;
12
+ let max = -Infinity;
13
+ for (const value of values) {
14
+ if (!Number.isFinite(value))
15
+ continue;
16
+ min = Math.min(min, value);
17
+ max = Math.max(max, value);
18
+ }
19
+ return min === Infinity ? null : { min, max };
20
+ }
21
+ export function rangeText(values) {
22
+ const range = finiteRange(values);
23
+ return range ? `${summaryNumber(range.min)} to ${summaryNumber(range.max)}` : null;
24
+ }
25
+ //# sourceMappingURL=description.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"description.js","sourceRoot":"","sources":["../../src/viz/description.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC;IAClD,OAAO,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,QAAgB,EAAE,MAAM,GAAG,GAAG,QAAQ,GAAG;IACjF,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAyB;IACnD,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;IACpB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QACtC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAyB;IACjD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrF,CAAC"}
@@ -8,7 +8,9 @@
8
8
  * nirs4all-ui: pure + stateless, NO app state, network/IO, browser globals, or
9
9
  * runtime execution. Hosts pass already-computed numeric arrays; each component
10
10
  * accepts `className` + color overrides and reads the shared teal palette by
11
- * default. A default stylesheet ships at `nirs4all-ui/assets/viz.css`.
11
+ * default. SVGs include data-derived text descriptions; hosts may override
12
+ * `description` for localized or domain-specific wording. A default stylesheet
13
+ * ships at `nirs4all-ui/assets/viz.css`.
12
14
  *
13
15
  * Consumed as `nirs4all-ui/viz`.
14
16
  */