nirs4all-ui 0.1.12 → 0.1.13
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 +39 -1
- package/assets/brands/README.md +28 -8
- package/assets/brands/dag-ml/favicon.ico +0 -0
- package/assets/brands/dag-ml/horizontal-dark.svg +5 -0
- package/assets/brands/dag-ml/horizontal.png +0 -0
- package/assets/brands/dag-ml/horizontal.svg +5 -0
- package/assets/brands/dag-ml/icon-180.png +0 -0
- package/assets/brands/dag-ml/icon-256.png +0 -0
- package/assets/brands/dag-ml/icon-32.png +0 -0
- package/assets/brands/dag-ml/icon-512.png +0 -0
- package/assets/brands/dag-ml/icon.svg +3 -0
- package/assets/brands/dag-ml/og.png +0 -0
- package/assets/brands/dag-ml/stacked-dark.svg +5 -0
- package/assets/brands/dag-ml/stacked.png +0 -0
- package/assets/brands/dag-ml/stacked.svg +5 -0
- package/assets/brands/dag-ml-data/favicon.ico +0 -0
- package/assets/brands/dag-ml-data/horizontal-dark.svg +6 -0
- package/assets/brands/dag-ml-data/horizontal.png +0 -0
- package/assets/brands/dag-ml-data/horizontal.svg +6 -0
- package/assets/brands/dag-ml-data/icon-180.png +0 -0
- package/assets/brands/dag-ml-data/icon-256.png +0 -0
- package/assets/brands/dag-ml-data/icon-32.png +0 -0
- package/assets/brands/dag-ml-data/icon-512.png +0 -0
- package/assets/brands/dag-ml-data/icon.svg +3 -0
- package/assets/brands/dag-ml-data/og.png +0 -0
- package/assets/brands/dag-ml-data/stacked-dark.svg +6 -0
- package/assets/brands/dag-ml-data/stacked.png +0 -0
- package/assets/brands/dag-ml-data/stacked.svg +6 -0
- package/assets/brands/nirs4all/favicon.ico +0 -0
- package/assets/brands/nirs4all/horizontal-dark.svg +36 -0
- package/assets/brands/nirs4all/horizontal.png +0 -0
- package/assets/brands/nirs4all/horizontal.svg +35 -11
- package/assets/brands/nirs4all/icon-180.png +0 -0
- package/assets/brands/nirs4all/icon-256.png +0 -0
- package/assets/brands/nirs4all/icon-32.png +0 -0
- package/assets/brands/nirs4all/icon-512.png +0 -0
- package/assets/brands/nirs4all/icon.svg +32 -7
- package/assets/brands/nirs4all/og.png +0 -0
- package/assets/brands/nirs4all/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all/stacked.png +0 -0
- package/assets/brands/nirs4all/stacked.svg +35 -11
- package/assets/brands/nirs4all-benchmarks/favicon.ico +0 -0
- package/assets/brands/nirs4all-benchmarks/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-benchmarks/horizontal.png +0 -0
- package/assets/brands/nirs4all-benchmarks/horizontal.svg +37 -0
- package/assets/brands/nirs4all-benchmarks/icon-180.png +0 -0
- package/assets/brands/nirs4all-benchmarks/icon-256.png +0 -0
- package/assets/brands/nirs4all-benchmarks/icon-32.png +0 -0
- package/assets/brands/nirs4all-benchmarks/icon-512.png +0 -0
- package/assets/brands/nirs4all-benchmarks/icon.svg +33 -0
- package/assets/brands/nirs4all-benchmarks/og.png +0 -0
- package/assets/brands/nirs4all-benchmarks/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-benchmarks/stacked.png +0 -0
- package/assets/brands/nirs4all-benchmarks/stacked.svg +36 -0
- package/assets/brands/nirs4all-cluster/favicon.ico +0 -0
- package/assets/brands/nirs4all-cluster/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-cluster/horizontal.png +0 -0
- package/assets/brands/nirs4all-cluster/horizontal.svg +37 -0
- package/assets/brands/nirs4all-cluster/icon-180.png +0 -0
- package/assets/brands/nirs4all-cluster/icon-256.png +0 -0
- package/assets/brands/nirs4all-cluster/icon-32.png +0 -0
- package/assets/brands/nirs4all-cluster/icon-512.png +0 -0
- package/assets/brands/nirs4all-cluster/icon.svg +33 -0
- package/assets/brands/nirs4all-cluster/og.png +0 -0
- package/assets/brands/nirs4all-cluster/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-cluster/stacked.png +0 -0
- package/assets/brands/nirs4all-cluster/stacked.svg +36 -0
- package/assets/brands/nirs4all-core/favicon.ico +0 -0
- package/assets/brands/nirs4all-core/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-core/horizontal.png +0 -0
- package/assets/brands/nirs4all-core/horizontal.svg +36 -11
- package/assets/brands/nirs4all-core/icon-180.png +0 -0
- package/assets/brands/nirs4all-core/icon-256.png +0 -0
- package/assets/brands/nirs4all-core/icon-32.png +0 -0
- package/assets/brands/nirs4all-core/icon-512.png +0 -0
- package/assets/brands/nirs4all-core/icon.svg +32 -7
- package/assets/brands/nirs4all-core/og.png +0 -0
- package/assets/brands/nirs4all-core/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-core/stacked.png +0 -0
- package/assets/brands/nirs4all-core/stacked.svg +35 -11
- package/assets/brands/nirs4all-datasets/favicon.ico +0 -0
- package/assets/brands/nirs4all-datasets/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-datasets/horizontal.png +0 -0
- package/assets/brands/nirs4all-datasets/horizontal.svg +37 -0
- package/assets/brands/nirs4all-datasets/icon-180.png +0 -0
- package/assets/brands/nirs4all-datasets/icon-256.png +0 -0
- package/assets/brands/nirs4all-datasets/icon-32.png +0 -0
- package/assets/brands/nirs4all-datasets/icon-512.png +0 -0
- package/assets/brands/nirs4all-datasets/icon.svg +33 -0
- package/assets/brands/nirs4all-datasets/og.png +0 -0
- package/assets/brands/nirs4all-datasets/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-datasets/stacked.png +0 -0
- package/assets/brands/nirs4all-datasets/stacked.svg +36 -0
- package/assets/brands/nirs4all-device/favicon.ico +0 -0
- package/assets/brands/nirs4all-device/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-device/horizontal.png +0 -0
- package/assets/brands/nirs4all-device/horizontal.svg +37 -0
- package/assets/brands/nirs4all-device/icon-180.png +0 -0
- package/assets/brands/nirs4all-device/icon-256.png +0 -0
- package/assets/brands/nirs4all-device/icon-32.png +0 -0
- package/assets/brands/nirs4all-device/icon-512.png +0 -0
- package/assets/brands/nirs4all-device/icon.svg +33 -0
- package/assets/brands/nirs4all-device/og.png +0 -0
- package/assets/brands/nirs4all-device/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-device/stacked.png +0 -0
- package/assets/brands/nirs4all-device/stacked.svg +36 -0
- package/assets/brands/nirs4all-formats/favicon.ico +0 -0
- package/assets/brands/nirs4all-formats/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-formats/horizontal.png +0 -0
- package/assets/brands/nirs4all-formats/horizontal.svg +37 -0
- package/assets/brands/nirs4all-formats/icon-180.png +0 -0
- package/assets/brands/nirs4all-formats/icon-256.png +0 -0
- package/assets/brands/nirs4all-formats/icon-32.png +0 -0
- package/assets/brands/nirs4all-formats/icon-512.png +0 -0
- package/assets/brands/nirs4all-formats/icon.svg +33 -0
- package/assets/brands/nirs4all-formats/og.png +0 -0
- package/assets/brands/nirs4all-formats/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-formats/stacked.png +0 -0
- package/assets/brands/nirs4all-formats/stacked.svg +36 -0
- package/assets/brands/nirs4all-io/favicon.ico +0 -0
- package/assets/brands/nirs4all-io/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-io/horizontal.png +0 -0
- package/assets/brands/nirs4all-io/horizontal.svg +37 -0
- package/assets/brands/nirs4all-io/icon-180.png +0 -0
- package/assets/brands/nirs4all-io/icon-256.png +0 -0
- package/assets/brands/nirs4all-io/icon-32.png +0 -0
- package/assets/brands/nirs4all-io/icon-512.png +0 -0
- package/assets/brands/nirs4all-io/icon.svg +33 -0
- package/assets/brands/nirs4all-io/og.png +0 -0
- package/assets/brands/nirs4all-io/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-io/stacked.png +0 -0
- package/assets/brands/nirs4all-io/stacked.svg +36 -0
- package/assets/brands/nirs4all-methods/favicon.ico +0 -0
- package/assets/brands/nirs4all-methods/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-methods/horizontal.png +0 -0
- package/assets/brands/nirs4all-methods/horizontal.svg +37 -0
- package/assets/brands/nirs4all-methods/icon-180.png +0 -0
- package/assets/brands/nirs4all-methods/icon-256.png +0 -0
- package/assets/brands/nirs4all-methods/icon-32.png +0 -0
- package/assets/brands/nirs4all-methods/icon-512.png +0 -0
- package/assets/brands/nirs4all-methods/icon.svg +33 -0
- package/assets/brands/nirs4all-methods/og.png +0 -0
- package/assets/brands/nirs4all-methods/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-methods/stacked.png +0 -0
- package/assets/brands/nirs4all-methods/stacked.svg +36 -0
- package/assets/brands/nirs4all-papers/favicon.ico +0 -0
- package/assets/brands/nirs4all-papers/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-papers/horizontal.png +0 -0
- package/assets/brands/nirs4all-papers/horizontal.svg +37 -0
- package/assets/brands/nirs4all-papers/icon-180.png +0 -0
- package/assets/brands/nirs4all-papers/icon-256.png +0 -0
- package/assets/brands/nirs4all-papers/icon-32.png +0 -0
- package/assets/brands/nirs4all-papers/icon-512.png +0 -0
- package/assets/brands/nirs4all-papers/icon.svg +33 -0
- package/assets/brands/nirs4all-papers/og.png +0 -0
- package/assets/brands/nirs4all-papers/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-papers/stacked.png +0 -0
- package/assets/brands/nirs4all-papers/stacked.svg +36 -0
- package/assets/brands/nirs4all-providers/favicon.ico +0 -0
- package/assets/brands/nirs4all-providers/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-providers/horizontal.png +0 -0
- package/assets/brands/nirs4all-providers/horizontal.svg +36 -11
- package/assets/brands/nirs4all-providers/icon-180.png +0 -0
- package/assets/brands/nirs4all-providers/icon-256.png +0 -0
- package/assets/brands/nirs4all-providers/icon-32.png +0 -0
- package/assets/brands/nirs4all-providers/icon-512.png +0 -0
- package/assets/brands/nirs4all-providers/icon.svg +32 -7
- package/assets/brands/nirs4all-providers/og.png +0 -0
- package/assets/brands/nirs4all-providers/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-providers/stacked.png +0 -0
- package/assets/brands/nirs4all-providers/stacked.svg +35 -11
- package/assets/brands/nirs4all-quality/favicon.ico +0 -0
- package/assets/brands/nirs4all-quality/horizontal-dark.svg +36 -0
- package/assets/brands/nirs4all-quality/horizontal.svg +35 -11
- package/assets/brands/nirs4all-quality/icon-180.png +0 -0
- package/assets/brands/nirs4all-quality/icon-256.png +0 -0
- package/assets/brands/nirs4all-quality/icon-32.png +0 -0
- package/assets/brands/nirs4all-quality/icon-512.png +0 -0
- package/assets/brands/nirs4all-quality/icon.svg +32 -7
- package/assets/brands/nirs4all-quality/og.png +0 -0
- package/assets/brands/nirs4all-quality/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-quality/stacked.svg +35 -11
- package/assets/brands/nirs4all-repository/favicon.ico +0 -0
- package/assets/brands/nirs4all-repository/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-repository/horizontal.png +0 -0
- package/assets/brands/nirs4all-repository/horizontal.svg +37 -0
- package/assets/brands/nirs4all-repository/icon-180.png +0 -0
- package/assets/brands/nirs4all-repository/icon-256.png +0 -0
- package/assets/brands/nirs4all-repository/icon-32.png +0 -0
- package/assets/brands/nirs4all-repository/icon-512.png +0 -0
- package/assets/brands/nirs4all-repository/icon.svg +33 -0
- package/assets/brands/nirs4all-repository/og.png +0 -0
- package/assets/brands/nirs4all-repository/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-repository/stacked.png +0 -0
- package/assets/brands/nirs4all-repository/stacked.svg +36 -0
- package/assets/brands/nirs4all-studio/favicon.ico +0 -0
- package/assets/brands/nirs4all-studio/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-studio/horizontal.png +0 -0
- package/assets/brands/nirs4all-studio/horizontal.svg +37 -0
- package/assets/brands/nirs4all-studio/icon-180.png +0 -0
- package/assets/brands/nirs4all-studio/icon-256.png +0 -0
- package/assets/brands/nirs4all-studio/icon-32.png +0 -0
- package/assets/brands/nirs4all-studio/icon-512.png +0 -0
- package/assets/brands/nirs4all-studio/icon.svg +33 -0
- package/assets/brands/nirs4all-studio/og.png +0 -0
- package/assets/brands/nirs4all-studio/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-studio/stacked.png +0 -0
- package/assets/brands/nirs4all-studio/stacked.svg +36 -0
- package/assets/brands/nirs4all-tools/favicon.ico +0 -0
- package/assets/brands/nirs4all-tools/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-tools/horizontal.png +0 -0
- package/assets/brands/nirs4all-tools/horizontal.svg +37 -0
- package/assets/brands/nirs4all-tools/icon-180.png +0 -0
- package/assets/brands/nirs4all-tools/icon-256.png +0 -0
- package/assets/brands/nirs4all-tools/icon-32.png +0 -0
- package/assets/brands/nirs4all-tools/icon-512.png +0 -0
- package/assets/brands/nirs4all-tools/icon.svg +33 -0
- package/assets/brands/nirs4all-tools/og.png +0 -0
- package/assets/brands/nirs4all-tools/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-tools/stacked.png +0 -0
- package/assets/brands/nirs4all-tools/stacked.svg +36 -0
- package/assets/brands/nirs4all-ui/favicon.ico +0 -0
- package/assets/brands/nirs4all-ui/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-ui/horizontal.png +0 -0
- package/assets/brands/nirs4all-ui/horizontal.svg +36 -11
- package/assets/brands/nirs4all-ui/icon-180.png +0 -0
- package/assets/brands/nirs4all-ui/icon-256.png +0 -0
- package/assets/brands/nirs4all-ui/icon-32.png +0 -0
- package/assets/brands/nirs4all-ui/icon-512.png +0 -0
- package/assets/brands/nirs4all-ui/icon.svg +32 -7
- package/assets/brands/nirs4all-ui/og.png +0 -0
- package/assets/brands/nirs4all-ui/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-ui/stacked.png +0 -0
- package/assets/brands/nirs4all-ui/stacked.svg +35 -11
- package/assets/brands/nirs4all-web/favicon.ico +0 -0
- package/assets/brands/nirs4all-web/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-web/horizontal.png +0 -0
- package/assets/brands/nirs4all-web/horizontal.svg +37 -0
- package/assets/brands/nirs4all-web/icon-180.png +0 -0
- package/assets/brands/nirs4all-web/icon-256.png +0 -0
- package/assets/brands/nirs4all-web/icon-32.png +0 -0
- package/assets/brands/nirs4all-web/icon-512.png +0 -0
- package/assets/brands/nirs4all-web/icon.svg +33 -0
- package/assets/brands/nirs4all-web/og.png +0 -0
- package/assets/brands/nirs4all-web/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-web/stacked.png +0 -0
- package/assets/brands/nirs4all-web/stacked.svg +36 -0
- package/assets/chains.css +601 -0
- package/assets/conformal.css +323 -0
- package/assets/dag.css +446 -0
- package/assets/motion/nirs-spectra.svg +26 -9
- package/assets/viz.css +152 -0
- package/dist/brand/index.d.ts +24 -126
- package/dist/brand/index.d.ts.map +1 -1
- package/dist/brand/index.js +52 -200
- package/dist/brand/index.js.map +1 -1
- package/dist/chains/ChainExplorer.d.ts +34 -0
- package/dist/chains/ChainExplorer.d.ts.map +1 -0
- package/dist/chains/ChainExplorer.js +119 -0
- package/dist/chains/ChainExplorer.js.map +1 -0
- package/dist/chains/ChainNodeHub.d.ts +31 -0
- package/dist/chains/ChainNodeHub.d.ts.map +1 -0
- package/dist/chains/ChainNodeHub.js +150 -0
- package/dist/chains/ChainNodeHub.js.map +1 -0
- package/dist/chains/ChainNodeOrbit.d.ts +31 -0
- package/dist/chains/ChainNodeOrbit.d.ts.map +1 -0
- package/dist/chains/ChainNodeOrbit.js +158 -0
- package/dist/chains/ChainNodeOrbit.js.map +1 -0
- package/dist/chains/ChainScoreBeeswarm.d.ts +25 -0
- package/dist/chains/ChainScoreBeeswarm.d.ts.map +1 -0
- package/dist/chains/ChainScoreBeeswarm.js +84 -0
- package/dist/chains/ChainScoreBeeswarm.js.map +1 -0
- package/dist/chains/NodeEffectForest.d.ts +33 -0
- package/dist/chains/NodeEffectForest.d.ts.map +1 -0
- package/dist/chains/NodeEffectForest.js +85 -0
- package/dist/chains/NodeEffectForest.js.map +1 -0
- package/dist/chains/PositionEffectHeatmap.d.ts +25 -0
- package/dist/chains/PositionEffectHeatmap.d.ts.map +1 -0
- package/dist/chains/PositionEffectHeatmap.js +77 -0
- package/dist/chains/PositionEffectHeatmap.js.map +1 -0
- package/dist/chains/SequenceEffectHeatmap.d.ts +22 -0
- package/dist/chains/SequenceEffectHeatmap.d.ts.map +1 -0
- package/dist/chains/SequenceEffectHeatmap.js +74 -0
- package/dist/chains/SequenceEffectHeatmap.js.map +1 -0
- package/dist/chains/_cx.d.ts +2 -0
- package/dist/chains/_cx.d.ts.map +1 -0
- package/dist/chains/_cx.js +8 -0
- package/dist/chains/_cx.js.map +1 -0
- package/dist/chains/analysis.d.ts +100 -0
- package/dist/chains/analysis.d.ts.map +1 -0
- package/dist/chains/analysis.js +440 -0
- package/dist/chains/analysis.js.map +1 -0
- package/dist/chains/colors.d.ts +26 -0
- package/dist/chains/colors.d.ts.map +1 -0
- package/dist/chains/colors.js +58 -0
- package/dist/chains/colors.js.map +1 -0
- package/dist/chains/contract.d.ts +54 -0
- package/dist/chains/contract.d.ts.map +1 -0
- package/dist/chains/contract.js +125 -0
- package/dist/chains/contract.js.map +1 -0
- package/dist/chains/index.d.ts +35 -0
- package/dist/chains/index.d.ts.map +1 -0
- package/dist/chains/index.js +41 -0
- package/dist/chains/index.js.map +1 -0
- package/dist/chains/normalize.d.ts +27 -0
- package/dist/chains/normalize.d.ts.map +1 -0
- package/dist/chains/normalize.js +104 -0
- package/dist/chains/normalize.js.map +1 -0
- package/dist/chains/radial.d.ts +21 -0
- package/dist/chains/radial.d.ts.map +1 -0
- package/dist/chains/radial.js +52 -0
- package/dist/chains/radial.js.map +1 -0
- package/dist/chains/types.d.ts +240 -0
- package/dist/chains/types.d.ts.map +1 -0
- package/dist/chains/types.js +52 -0
- package/dist/chains/types.js.map +1 -0
- package/dist/components/ConformalPredictionTree.d.ts +79 -0
- package/dist/components/ConformalPredictionTree.d.ts.map +1 -0
- package/dist/components/ConformalPredictionTree.js +223 -0
- package/dist/components/ConformalPredictionTree.js.map +1 -0
- package/dist/components/DatasetResultCard.d.ts +33 -0
- package/dist/components/DatasetResultCard.d.ts.map +1 -0
- package/dist/components/DatasetResultCard.js +9 -0
- package/dist/components/DatasetResultCard.js.map +1 -0
- package/dist/components/PerClassTable.d.ts +27 -0
- package/dist/components/PerClassTable.d.ts.map +1 -0
- package/dist/components/PerClassTable.js +9 -0
- package/dist/components/PerClassTable.js.map +1 -0
- package/dist/components/PredictionCard.d.ts +27 -0
- package/dist/components/PredictionCard.d.ts.map +1 -0
- package/dist/components/PredictionCard.js +6 -0
- package/dist/components/PredictionCard.js.map +1 -0
- package/dist/components/RankingsTable.d.ts +28 -0
- package/dist/components/RankingsTable.d.ts.map +1 -0
- package/dist/components/RankingsTable.js +14 -0
- package/dist/components/RankingsTable.js.map +1 -0
- package/dist/components/ScoreCardTree.d.ts +31 -0
- package/dist/components/ScoreCardTree.d.ts.map +1 -0
- package/dist/components/ScoreCardTree.js +17 -0
- package/dist/components/ScoreCardTree.js.map +1 -0
- package/dist/components/index.d.ts +6 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +6 -0
- package/dist/components/index.js.map +1 -1
- package/dist/conformal/index.d.ts +2 -0
- package/dist/conformal/index.d.ts.map +1 -0
- package/dist/conformal/index.js +2 -0
- package/dist/conformal/index.js.map +1 -0
- package/dist/conformal/result.d.ts +224 -0
- package/dist/conformal/result.d.ts.map +1 -0
- package/dist/conformal/result.js +461 -0
- package/dist/conformal/result.js.map +1 -0
- package/dist/dag/DagGraphView.d.ts +35 -0
- package/dist/dag/DagGraphView.d.ts.map +1 -0
- package/dist/dag/DagGraphView.js +424 -0
- package/dist/dag/DagGraphView.js.map +1 -0
- package/dist/dag/_cx.d.ts +2 -0
- package/dist/dag/_cx.d.ts.map +1 -0
- package/dist/dag/_cx.js +8 -0
- package/dist/dag/_cx.js.map +1 -0
- package/dist/dag/collapse.d.ts +81 -0
- package/dist/dag/collapse.d.ts.map +1 -0
- package/dist/dag/collapse.js +210 -0
- package/dist/dag/collapse.js.map +1 -0
- package/dist/dag/colors.d.ts +19 -0
- package/dist/dag/colors.d.ts.map +1 -0
- package/dist/dag/colors.js +54 -0
- package/dist/dag/colors.js.map +1 -0
- package/dist/dag/fromCompiledGraph.d.ts +27 -0
- package/dist/dag/fromCompiledGraph.d.ts.map +1 -0
- package/dist/dag/fromCompiledGraph.js +133 -0
- package/dist/dag/fromCompiledGraph.js.map +1 -0
- package/dist/dag/hierarchy.d.ts +38 -0
- package/dist/dag/hierarchy.d.ts.map +1 -0
- package/dist/dag/hierarchy.js +75 -0
- package/dist/dag/hierarchy.js.map +1 -0
- package/dist/dag/index.d.ts +28 -0
- package/dist/dag/index.d.ts.map +1 -0
- package/dist/dag/index.js +33 -0
- package/dist/dag/index.js.map +1 -0
- package/dist/dag/layout.d.ts +57 -0
- package/dist/dag/layout.d.ts.map +1 -0
- package/dist/dag/layout.js +267 -0
- package/dist/dag/layout.js.map +1 -0
- package/dist/dag/locale.d.ts +31 -0
- package/dist/dag/locale.d.ts.map +1 -0
- package/dist/dag/locale.js +32 -0
- package/dist/dag/locale.js.map +1 -0
- package/dist/dag/shape.d.ts +48 -0
- package/dist/dag/shape.d.ts.map +1 -0
- package/dist/dag/shape.js +263 -0
- package/dist/dag/shape.js.map +1 -0
- package/dist/dag/types.d.ts +106 -0
- package/dist/dag/types.d.ts.map +1 -0
- package/dist/dag/types.js +56 -0
- package/dist/dag/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/keywordRegistry/index.d.ts +9 -0
- package/dist/keywordRegistry/index.d.ts.map +1 -0
- package/dist/keywordRegistry/index.js +9 -0
- package/dist/keywordRegistry/index.js.map +1 -0
- package/dist/keywordRegistry/registry.d.ts +107 -0
- package/dist/keywordRegistry/registry.d.ts.map +1 -0
- package/dist/keywordRegistry/registry.js +234 -0
- package/dist/keywordRegistry/registry.js.map +1 -0
- package/dist/robustness/index.d.ts +12 -0
- package/dist/robustness/index.d.ts.map +1 -0
- package/dist/robustness/index.js +12 -0
- package/dist/robustness/index.js.map +1 -0
- package/dist/robustness/modes.d.ts +15 -0
- package/dist/robustness/modes.d.ts.map +1 -0
- package/dist/robustness/modes.js +64 -0
- package/dist/robustness/modes.js.map +1 -0
- package/dist/robustness/scenarios.d.ts +38 -0
- package/dist/robustness/scenarios.d.ts.map +1 -0
- package/dist/robustness/scenarios.js +159 -0
- package/dist/robustness/scenarios.js.map +1 -0
- package/dist/robustness/summary.d.ts +135 -0
- package/dist/robustness/summary.d.ts.map +1 -0
- package/dist/robustness/summary.js +284 -0
- package/dist/robustness/summary.js.map +1 -0
- package/dist/styles/index.d.ts +19 -1
- package/dist/styles/index.d.ts.map +1 -1
- package/dist/styles/index.js +21 -0
- package/dist/styles/index.js.map +1 -1
- package/dist/tuning/index.d.ts +3 -0
- package/dist/tuning/index.d.ts.map +1 -0
- package/dist/tuning/index.js +3 -0
- package/dist/tuning/index.js.map +1 -0
- package/dist/tuning/result.d.ts +144 -0
- package/dist/tuning/result.d.ts.map +1 -0
- package/dist/tuning/result.js +277 -0
- package/dist/tuning/result.js.map +1 -0
- package/dist/tuning/searchSpace.d.ts +54 -0
- package/dist/tuning/searchSpace.d.ts.map +1 -0
- package/dist/tuning/searchSpace.js +118 -0
- package/dist/tuning/searchSpace.js.map +1 -0
- package/dist/viz/BiasVarianceBars.d.ts +27 -0
- package/dist/viz/BiasVarianceBars.d.ts.map +1 -0
- package/dist/viz/BiasVarianceBars.js +53 -0
- package/dist/viz/BiasVarianceBars.js.map +1 -0
- package/dist/viz/BoxPlot.d.ts +24 -0
- package/dist/viz/BoxPlot.d.ts.map +1 -0
- package/dist/viz/BoxPlot.js +50 -0
- package/dist/viz/BoxPlot.js.map +1 -0
- package/dist/viz/ConformalIntervalStrip.d.ts +66 -0
- package/dist/viz/ConformalIntervalStrip.d.ts.map +1 -0
- package/dist/viz/ConformalIntervalStrip.js +167 -0
- package/dist/viz/ConformalIntervalStrip.js.map +1 -0
- package/dist/viz/ConfusionMatrix.d.ts +24 -0
- package/dist/viz/ConfusionMatrix.d.ts.map +1 -0
- package/dist/viz/ConfusionMatrix.js +39 -0
- package/dist/viz/ConfusionMatrix.js.map +1 -0
- package/dist/viz/FeatureImportanceBar.d.ts +26 -0
- package/dist/viz/FeatureImportanceBar.d.ts.map +1 -0
- package/dist/viz/FeatureImportanceBar.js +49 -0
- package/dist/viz/FeatureImportanceBar.js.map +1 -0
- package/dist/viz/FoldStabilityLines.d.ts +29 -0
- package/dist/viz/FoldStabilityLines.d.ts.map +1 -0
- package/dist/viz/FoldStabilityLines.js +57 -0
- package/dist/viz/FoldStabilityLines.js.map +1 -0
- package/dist/viz/Histogram.d.ts +33 -0
- package/dist/viz/Histogram.d.ts.map +1 -0
- package/dist/viz/Histogram.js +64 -0
- package/dist/viz/Histogram.js.map +1 -0
- package/dist/viz/PcaScatter.d.ts +36 -0
- package/dist/viz/PcaScatter.d.ts.map +1 -0
- package/dist/viz/PcaScatter.js +72 -0
- package/dist/viz/PcaScatter.js.map +1 -0
- package/dist/viz/PipelineFlow.d.ts +28 -0
- package/dist/viz/PipelineFlow.d.ts.map +1 -0
- package/dist/viz/PipelineFlow.js +57 -0
- package/dist/viz/PipelineFlow.js.map +1 -0
- package/dist/viz/PredictionScatter.d.ts +41 -0
- package/dist/viz/PredictionScatter.d.ts.map +1 -0
- package/dist/viz/PredictionScatter.js +41 -0
- package/dist/viz/PredictionScatter.js.map +1 -0
- package/dist/viz/ResidualPlot.d.ts +32 -0
- package/dist/viz/ResidualPlot.d.ts.map +1 -0
- package/dist/viz/ResidualPlot.js +58 -0
- package/dist/viz/ResidualPlot.js.map +1 -0
- package/dist/viz/ScoreHeatmap.d.ts +30 -0
- package/dist/viz/ScoreHeatmap.d.ts.map +1 -0
- package/dist/viz/ScoreHeatmap.js +61 -0
- package/dist/viz/ScoreHeatmap.js.map +1 -0
- package/dist/viz/ScoreSummary.d.ts +23 -0
- package/dist/viz/ScoreSummary.d.ts.map +1 -0
- package/dist/viz/ScoreSummary.js +32 -0
- package/dist/viz/ScoreSummary.js.map +1 -0
- package/dist/viz/ShapBeeswarm.d.ts +29 -0
- package/dist/viz/ShapBeeswarm.d.ts.map +1 -0
- package/dist/viz/ShapBeeswarm.js +60 -0
- package/dist/viz/ShapBeeswarm.js.map +1 -0
- package/dist/viz/SpectraPlot.d.ts +50 -0
- package/dist/viz/SpectraPlot.d.ts.map +1 -0
- package/dist/viz/SpectraPlot.js +46 -0
- package/dist/viz/SpectraPlot.js.map +1 -0
- package/dist/viz/WaterfallChart.d.ts +30 -0
- package/dist/viz/WaterfallChart.d.ts.map +1 -0
- package/dist/viz/WaterfallChart.js +73 -0
- package/dist/viz/WaterfallChart.js.map +1 -0
- package/dist/viz/_cx.d.ts +2 -0
- package/dist/viz/_cx.d.ts.map +1 -0
- package/dist/viz/_cx.js +8 -0
- package/dist/viz/_cx.js.map +1 -0
- package/dist/viz/geometry.d.ts +87 -0
- package/dist/viz/geometry.d.ts.map +1 -0
- package/dist/viz/geometry.js +208 -0
- package/dist/viz/geometry.js.map +1 -0
- package/dist/viz/index.d.ts +33 -0
- package/dist/viz/index.d.ts.map +1 -0
- package/dist/viz/index.js +38 -0
- package/dist/viz/index.js.map +1 -0
- package/dist/viz/theme.d.ts +50 -0
- package/dist/viz/theme.d.ts.map +1 -0
- package/dist/viz/theme.js +100 -0
- package/dist/viz/theme.js.map +1 -0
- package/package.json +34 -2
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type PlotPadding } from "../viz/geometry.js";
|
|
2
|
+
import type { ChainEffectAnalysis } from "./types.js";
|
|
3
|
+
export interface ChainScoreBeeswarmProps {
|
|
4
|
+
analysis: ChainEffectAnalysis;
|
|
5
|
+
/** Split the corpus on the presence of this token. */
|
|
6
|
+
focusToken: string;
|
|
7
|
+
width?: number;
|
|
8
|
+
height?: number;
|
|
9
|
+
padding?: PlotPadding;
|
|
10
|
+
/** Subsample dots above this count (medians stay exact). Default: draw all. */
|
|
11
|
+
maxPoints?: number;
|
|
12
|
+
withColor?: string;
|
|
13
|
+
withoutColor?: string;
|
|
14
|
+
title?: string;
|
|
15
|
+
className?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Two-lane distribution comparison — the honest "does this node shift the whole
|
|
19
|
+
* distribution?" picture that complements the forest's point estimate. Every
|
|
20
|
+
* chain is a dot on a shared goodness axis (higher = better), split into a
|
|
21
|
+
* *with* lane and a *without* lane for the focus token, each with a median line
|
|
22
|
+
* and an IQR band. A dashed baseline marks the corpus median. Pure inline SVG.
|
|
23
|
+
*/
|
|
24
|
+
export declare function ChainScoreBeeswarm({ analysis, focusToken, width, height, padding, maxPoints, withColor, withoutColor, title, className, }: ChainScoreBeeswarmProps): import("react").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=ChainScoreBeeswarm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChainScoreBeeswarm.d.ts","sourceRoot":"","sources":["../../src/chains/ChainScoreBeeswarm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG9G,OAAO,KAAK,EAAE,mBAAmB,EAAoB,MAAM,YAAY,CAAC;AAGxE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwCD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,UAAU,EACV,KAAW,EACX,MAAY,EACZ,OAAO,EACP,SAAS,EACT,SAA8B,EAC9B,YAAkC,EAClC,KAAsC,EACtC,SAAS,GACV,EAAE,uBAAuB,+BA8GzB"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { buildFrame, clamp, makeScale, niceExtent, round, ticks } from "../viz/geometry.js";
|
|
3
|
+
import { N4_VIZ_COLORS } from "../viz/theme.js";
|
|
4
|
+
import { cx } from "./_cx.js";
|
|
5
|
+
import { CHAIN_LENS_LABELS } from "./types.js";
|
|
6
|
+
function fmt(value) {
|
|
7
|
+
if (!Number.isFinite(value))
|
|
8
|
+
return "—";
|
|
9
|
+
if (Math.abs(value) >= 100)
|
|
10
|
+
return value.toFixed(0);
|
|
11
|
+
if (Math.abs(value) >= 1)
|
|
12
|
+
return value.toFixed(2);
|
|
13
|
+
return value.toFixed(3);
|
|
14
|
+
}
|
|
15
|
+
/** Deterministic [0,1) jitter from a point id (stable across SSR renders). */
|
|
16
|
+
function jitter(id) {
|
|
17
|
+
let h = 2166136261;
|
|
18
|
+
for (let i = 0; i < id.length; i += 1) {
|
|
19
|
+
h ^= id.charCodeAt(i);
|
|
20
|
+
h = Math.imul(h, 16777619);
|
|
21
|
+
}
|
|
22
|
+
return ((h >>> 0) % 1000) / 1000;
|
|
23
|
+
}
|
|
24
|
+
function summarize(points) {
|
|
25
|
+
const values = points.map((point) => point.goodness).filter((value) => Number.isFinite(value)).sort((a, b) => a - b);
|
|
26
|
+
if (values.length === 0)
|
|
27
|
+
return { n: 0, min: NaN, q1: NaN, median: NaN, q3: NaN, max: NaN, mean: NaN };
|
|
28
|
+
const q = (p) => {
|
|
29
|
+
const pos = clamp(p, 0, 1) * (values.length - 1);
|
|
30
|
+
const lo = Math.floor(pos);
|
|
31
|
+
const frac = pos - lo;
|
|
32
|
+
return values[lo] + ((values[Math.min(values.length - 1, lo + 1)] - values[lo]) * frac);
|
|
33
|
+
};
|
|
34
|
+
const mean = values.reduce((s, v) => s + v, 0) / values.length;
|
|
35
|
+
return { n: values.length, min: values[0], q1: q(0.25), median: q(0.5), q3: q(0.75), max: values[values.length - 1], mean };
|
|
36
|
+
}
|
|
37
|
+
function subsample(points, max) {
|
|
38
|
+
if (!max || points.length <= max)
|
|
39
|
+
return points;
|
|
40
|
+
const step = points.length / max;
|
|
41
|
+
const out = [];
|
|
42
|
+
for (let i = 0; i < points.length; i += step)
|
|
43
|
+
out.push(points[Math.floor(i)]);
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Two-lane distribution comparison — the honest "does this node shift the whole
|
|
48
|
+
* distribution?" picture that complements the forest's point estimate. Every
|
|
49
|
+
* chain is a dot on a shared goodness axis (higher = better), split into a
|
|
50
|
+
* *with* lane and a *without* lane for the focus token, each with a median line
|
|
51
|
+
* and an IQR band. A dashed baseline marks the corpus median. Pure inline SVG.
|
|
52
|
+
*/
|
|
53
|
+
export function ChainScoreBeeswarm({ analysis, focusToken, width = 460, height = 220, padding, maxPoints, withColor = N4_VIZ_COLORS.teal, withoutColor = N4_VIZ_COLORS.slate, title = "Distribution with vs without", className, }) {
|
|
54
|
+
const withPoints = analysis.points.filter((point) => point.tokens.includes(focusToken));
|
|
55
|
+
const withoutPoints = analysis.points.filter((point) => !point.tokens.includes(focusToken));
|
|
56
|
+
const withStat = summarize(withPoints);
|
|
57
|
+
const withoutStat = summarize(withoutPoints);
|
|
58
|
+
const label = analysis.tokens.find((token) => token.token === focusToken)?.label ?? focusToken;
|
|
59
|
+
const frame = buildFrame(width, height, {
|
|
60
|
+
top: padding?.top ?? 30,
|
|
61
|
+
right: padding?.right ?? 16,
|
|
62
|
+
bottom: padding?.bottom ?? 30,
|
|
63
|
+
left: padding?.left ?? 86,
|
|
64
|
+
});
|
|
65
|
+
const { top, left } = frame.padding;
|
|
66
|
+
const plotRight = left + frame.innerWidth;
|
|
67
|
+
const bottom = top + frame.innerHeight;
|
|
68
|
+
const domain = niceExtent([analysis.goodnessExtent.min, analysis.goodnessExtent.max, analysis.baseline], 0.04);
|
|
69
|
+
const xScale = makeScale(domain, left, plotRight);
|
|
70
|
+
const xTicks = ticks(domain, frame.innerWidth < 220 ? 4 : 5);
|
|
71
|
+
const baselineX = round(clamp(xScale(analysis.baseline), left, plotRight));
|
|
72
|
+
const laneH = frame.innerHeight / 2;
|
|
73
|
+
const lanes = [
|
|
74
|
+
{ key: "with", label: `With ${label}`, color: withColor, stat: withStat, points: subsample(withPoints, maxPoints), y0: top },
|
|
75
|
+
{ key: "without", label: "Without", color: withoutColor, stat: withoutStat, points: subsample(withoutPoints, maxPoints), y0: top + laneH },
|
|
76
|
+
];
|
|
77
|
+
const dotBand = laneH - 22;
|
|
78
|
+
return (_jsxs("svg", { className: cx("n4chains", "n4chains-beeswarm", className), viewBox: `0 0 ${width} ${height}`, role: "img", "aria-label": title, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { children: title }), _jsx("text", { className: "n4chains-title", x: 8, y: 16, textAnchor: "start", children: title }), _jsxs("text", { className: "n4chains-caption", x: round(plotRight), y: 16, textAnchor: "end", children: [CHAIN_LENS_LABELS[analysis.lens], " \u00B7 higher = better"] }), xTicks.map((t) => (_jsx("line", { className: "n4chains-grid", x1: round(xScale(t)), x2: round(xScale(t)), y1: top, y2: bottom }, `gx-${t}`))), _jsx("line", { className: "n4chains-baseline", x1: baselineX, x2: baselineX, y1: top - 2, y2: bottom }), lanes.map((lane) => {
|
|
79
|
+
const laneMid = lane.y0 + laneH / 2;
|
|
80
|
+
const hasIqr = Number.isFinite(lane.stat.q1) && Number.isFinite(lane.stat.q3);
|
|
81
|
+
return (_jsxs("g", { className: "n4chains-lane", "data-lane": lane.key, children: [_jsx("text", { className: "n4chains-lane-label", x: left - 8, y: round(laneMid - 4), textAnchor: "end", children: lane.label }), _jsxs("text", { className: "n4chains-lane-readout", x: left - 8, y: round(laneMid + 9), textAnchor: "end", children: ["n=", lane.stat.n, " \u00B7 med ", fmt(lane.stat.median)] }), hasIqr ? (_jsx("rect", { className: "n4chains-lane-iqr", x: round(xScale(lane.stat.q1)), y: round(laneMid - dotBand / 2), width: round(Math.max(0, xScale(lane.stat.q3) - xScale(lane.stat.q1))), height: round(dotBand), fill: lane.color })) : null, lane.points.map((point) => (_jsx("circle", { className: "n4chains-dot", cx: round(xScale(point.goodness)), cy: round(laneMid - dotBand / 2 + jitter(point.id) * dotBand), r: 2.2, fill: lane.color }, point.id))), Number.isFinite(lane.stat.median) ? (_jsx("line", { className: "n4chains-lane-median", x1: round(xScale(lane.stat.median)), x2: round(xScale(lane.stat.median)), y1: round(laneMid - dotBand / 2 - 4), y2: round(laneMid + dotBand / 2 + 4), stroke: lane.color })) : null] }, lane.key));
|
|
82
|
+
}), _jsx("line", { className: "n4chains-axis", x1: left, x2: plotRight, y1: round(top + laneH), y2: round(top + laneH) }), _jsx("line", { className: "n4chains-axis", x1: left, x2: plotRight, y1: bottom, y2: bottom }), xTicks.map((t) => (_jsx("text", { className: "n4chains-tick", x: round(xScale(t)), y: bottom + 14, textAnchor: "middle", children: fmt(t) }, `tx-${t}`)))] }));
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=ChainScoreBeeswarm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChainScoreBeeswarm.js","sourceRoot":"","sources":["../../src/chains/ChainScoreBeeswarm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type PlotPadding } from "../viz/geometry.js";
|
|
2
|
+
import type { ChainEffectAnalysis, ChainStepRole } from "./types.js";
|
|
3
|
+
export type ForestSort = "delta" | "median" | "coverage";
|
|
4
|
+
export interface NodeEffectForestProps {
|
|
5
|
+
analysis: ChainEffectAnalysis;
|
|
6
|
+
/** Restrict to these roles (default: all present). */
|
|
7
|
+
roles?: readonly ChainStepRole[];
|
|
8
|
+
/** Row ordering. Default `"delta"` (biggest positive effect first). */
|
|
9
|
+
sortBy?: ForestSort;
|
|
10
|
+
/** Cap rows; a "+N more" note is drawn when truncated. Default `16`. */
|
|
11
|
+
maxRows?: number;
|
|
12
|
+
/** Highlighted token (row emphasis). */
|
|
13
|
+
selectedToken?: string | null;
|
|
14
|
+
/** Row click — makes the forest a node selector. */
|
|
15
|
+
onSelectToken?: (token: string) => void;
|
|
16
|
+
width?: number;
|
|
17
|
+
rowHeight?: number;
|
|
18
|
+
padding?: PlotPadding;
|
|
19
|
+
title?: string;
|
|
20
|
+
/** Hide the in-SVG title text (e.g. when a panel head already labels it). */
|
|
21
|
+
hideTitle?: boolean;
|
|
22
|
+
className?: string;
|
|
23
|
+
roleColors?: Partial<Record<ChainStepRole, string>> | undefined;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Forest / caterpillar plot of per-node influence — the headline "which steps
|
|
27
|
+
* help" ranking. One row per token: a faint min–max whisker, a bold IQR bar,
|
|
28
|
+
* and a median dot colored by its effect vs the baseline (cool = better, warm =
|
|
29
|
+
* worse). A dashed baseline marks the corpus median. Rows are clickable, so the
|
|
30
|
+
* forest doubles as the node selector for the explorer. Pure inline SVG.
|
|
31
|
+
*/
|
|
32
|
+
export declare function NodeEffectForest({ analysis, roles, sortBy, maxRows, selectedToken, onSelectToken, width, rowHeight, padding, title, hideTitle, className, roleColors, }: NodeEffectForestProps): import("react").JSX.Element;
|
|
33
|
+
//# sourceMappingURL=NodeEffectForest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeEffectForest.d.ts","sourceRoot":"","sources":["../../src/chains/NodeEffectForest.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG9G,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAe,MAAM,YAAY,CAAC;AAGlF,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEzD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,sDAAsD;IACtD,KAAK,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACjC,uEAAuE;IACvE,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,oDAAoD;IACpD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;CACjE;AA0BD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,KAAK,EACL,MAAgB,EAChB,OAAY,EACZ,aAAa,EACb,aAAa,EACb,KAAW,EACX,SAAc,EACd,OAAO,EACP,KAAwB,EACxB,SAAiB,EACjB,SAAS,EACT,UAAU,GACX,EAAE,qBAAqB,+BA+JvB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { buildFrame, clamp, makeScale, niceExtent, round, ticks } from "../viz/geometry.js";
|
|
3
|
+
import { cx } from "./_cx.js";
|
|
4
|
+
import { effectColor, roleColor } from "./colors.js";
|
|
5
|
+
import { CHAIN_LENS_LABELS } from "./types.js";
|
|
6
|
+
function fmt(value) {
|
|
7
|
+
if (!Number.isFinite(value))
|
|
8
|
+
return "—";
|
|
9
|
+
if (Math.abs(value) >= 100)
|
|
10
|
+
return value.toFixed(0);
|
|
11
|
+
if (Math.abs(value) >= 1)
|
|
12
|
+
return value.toFixed(2);
|
|
13
|
+
return value.toFixed(3);
|
|
14
|
+
}
|
|
15
|
+
function fmtDelta(value) {
|
|
16
|
+
if (!Number.isFinite(value))
|
|
17
|
+
return "—";
|
|
18
|
+
const s = fmt(Math.abs(value));
|
|
19
|
+
return value >= 0 ? `+${s}` : `−${s}`;
|
|
20
|
+
}
|
|
21
|
+
function sortTokens(tokens, sortBy) {
|
|
22
|
+
const list = tokens.slice();
|
|
23
|
+
if (sortBy === "median") {
|
|
24
|
+
list.sort((a, b) => (b.with.median || -Infinity) - (a.with.median || -Infinity));
|
|
25
|
+
}
|
|
26
|
+
else if (sortBy === "coverage") {
|
|
27
|
+
list.sort((a, b) => b.coverage - a.coverage);
|
|
28
|
+
}
|
|
29
|
+
// "delta" keeps the analysis order (already delta desc, NaN last)
|
|
30
|
+
return list;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Forest / caterpillar plot of per-node influence — the headline "which steps
|
|
34
|
+
* help" ranking. One row per token: a faint min–max whisker, a bold IQR bar,
|
|
35
|
+
* and a median dot colored by its effect vs the baseline (cool = better, warm =
|
|
36
|
+
* worse). A dashed baseline marks the corpus median. Rows are clickable, so the
|
|
37
|
+
* forest doubles as the node selector for the explorer. Pure inline SVG.
|
|
38
|
+
*/
|
|
39
|
+
export function NodeEffectForest({ analysis, roles, sortBy = "delta", maxRows = 16, selectedToken, onSelectToken, width = 460, rowHeight = 26, padding, title = "Node influence", hideTitle = false, className, roleColors, }) {
|
|
40
|
+
const roleSet = roles ? new Set(roles) : null;
|
|
41
|
+
const filtered = analysis.tokens.filter((token) => (roleSet ? roleSet.has(token.role) : true));
|
|
42
|
+
const sorted = sortTokens(filtered, sortBy);
|
|
43
|
+
const shown = sorted.slice(0, Math.max(0, maxRows));
|
|
44
|
+
const hiddenCount = sorted.length - shown.length;
|
|
45
|
+
const headH = 30;
|
|
46
|
+
const footH = 26;
|
|
47
|
+
const frame = buildFrame(width, shown.length * rowHeight + headH + footH, {
|
|
48
|
+
top: headH,
|
|
49
|
+
right: padding?.right ?? 98,
|
|
50
|
+
bottom: footH,
|
|
51
|
+
left: padding?.left ?? 150,
|
|
52
|
+
});
|
|
53
|
+
const { top, left } = frame.padding;
|
|
54
|
+
const plotRight = left + frame.innerWidth;
|
|
55
|
+
const bottom = top + frame.innerHeight;
|
|
56
|
+
const spread = [analysis.baseline];
|
|
57
|
+
for (const token of shown) {
|
|
58
|
+
for (const value of [token.with.min, token.with.q1, token.with.median, token.with.q3, token.with.max]) {
|
|
59
|
+
if (Number.isFinite(value))
|
|
60
|
+
spread.push(value);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const domain = niceExtent(spread.length > 1 ? spread : [0, 1], 0.06);
|
|
64
|
+
const xScale = makeScale(domain, left, plotRight);
|
|
65
|
+
const halfRange = Math.max(Math.abs(domain.max - analysis.baseline), Math.abs(analysis.baseline - domain.min)) || 1;
|
|
66
|
+
const xTicks = ticks(domain, frame.innerWidth < 220 ? 2 : 5);
|
|
67
|
+
const baselineX = round(clamp(xScale(analysis.baseline), left, plotRight));
|
|
68
|
+
const interactive = typeof onSelectToken === "function";
|
|
69
|
+
return (_jsxs("svg", { className: cx("n4chains", "n4chains-forest", className), viewBox: `0 0 ${frame.width} ${frame.height}`, role: "img", "aria-label": title, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { children: title }), hideTitle ? null : (_jsx("text", { className: "n4chains-title", x: 8, y: 16, textAnchor: "start", children: title })), _jsxs("text", { className: "n4chains-caption", x: round(plotRight), y: 16, textAnchor: "end", children: [CHAIN_LENS_LABELS[analysis.lens], " \u00B7 higher = better"] }), xTicks.map((t) => (_jsx("line", { className: "n4chains-grid", x1: round(xScale(t)), x2: round(xScale(t)), y1: top, y2: bottom }, `gx-${t}`))), _jsx("line", { className: "n4chains-baseline", x1: baselineX, x2: baselineX, y1: top - 4, y2: bottom, children: _jsx("title", { children: "baseline (corpus median)" }) }), shown.map((token, i) => {
|
|
70
|
+
const cy = round(top + (i + 0.5) * rowHeight);
|
|
71
|
+
const color = roleColor(token.role, roleColors);
|
|
72
|
+
const isSelected = selectedToken === token.token;
|
|
73
|
+
const hasSpan = Number.isFinite(token.with.q1) && Number.isFinite(token.with.q3);
|
|
74
|
+
const dotColor = effectColor(token.with.median, analysis.baseline, halfRange);
|
|
75
|
+
return (_jsxs("g", { className: cx("n4chains-forest-row", isSelected && "is-selected", interactive && "is-interactive"), "data-role": token.role, onClick: interactive ? () => onSelectToken?.(token.token) : undefined, onKeyDown: interactive
|
|
76
|
+
? (event) => {
|
|
77
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
78
|
+
event.preventDefault();
|
|
79
|
+
onSelectToken?.(token.token);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
: undefined, tabIndex: interactive ? 0 : undefined, role: interactive ? "button" : undefined, "aria-pressed": interactive ? isSelected : undefined, children: [_jsx("title", { children: `${token.label} — median ${fmt(token.with.median)}, Δ ${fmtDelta(token.delta)} vs without, n=${token.n}` }), _jsx("rect", { className: "n4chains-forest-rowbg", x: 0, y: round(cy - rowHeight / 2), width: frame.width, height: rowHeight }), _jsx("rect", { className: "n4chains-chip", x: 12, y: round(cy - 5), width: 10, height: 10, rx: 2.5, fill: color }), _jsx("text", { className: "n4chains-row-label", x: 28, y: round(cy + 3.5), children: token.label }), hasSpan ? (_jsxs(_Fragment, { children: [_jsx("line", { className: "n4chains-whisker", x1: round(xScale(token.with.min)), x2: round(xScale(token.with.max)), y1: cy, y2: cy, stroke: color }), _jsx("line", { className: "n4chains-iqr", x1: round(xScale(token.with.q1)), x2: round(xScale(token.with.q3)), y1: cy, y2: cy, stroke: color }), _jsx("circle", { className: "n4chains-median", cx: round(xScale(token.with.median)), cy: cy, r: 4.5, fill: dotColor })] })) : (_jsx("text", { className: "n4chains-row-empty", x: round(left + 8), y: round(cy + 3.5), children: "n/a" })), _jsx("text", { className: cx("n4chains-row-delta", token.delta >= 0 ? "is-up" : "is-down"), x: round(frame.width - 44), y: round(cy + 3.5), textAnchor: "end", children: fmtDelta(token.delta) }), _jsxs("text", { className: "n4chains-row-n", x: round(frame.width - 6), y: round(cy + 3.5), textAnchor: "end", children: ["n=", token.n] })] }, token.token));
|
|
83
|
+
}), _jsx("line", { className: "n4chains-axis", x1: left, x2: plotRight, y1: bottom, y2: bottom }), xTicks.map((t) => (_jsx("text", { className: "n4chains-tick", x: round(xScale(t)), y: bottom + 14, textAnchor: "middle", children: fmt(t) }, `tx-${t}`))), hiddenCount > 0 ? (_jsxs("text", { className: "n4chains-more", x: round(frame.width - 8), y: frame.height - 8, textAnchor: "end", children: ["+", hiddenCount, " more nodes"] })) : null] }));
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=NodeEffectForest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeEffectForest.js","sourceRoot":"","sources":["../../src/chains/NodeEffectForest.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ChainStepRole, PositionMatrix } from "./types.js";
|
|
2
|
+
export interface PositionEffectHeatmapProps {
|
|
3
|
+
matrix: PositionMatrix;
|
|
4
|
+
width?: number;
|
|
5
|
+
height?: number;
|
|
6
|
+
/** Draw the per-cell sample size under the value. Default `true`. */
|
|
7
|
+
showCounts?: boolean;
|
|
8
|
+
selectedToken?: string | null;
|
|
9
|
+
onSelectToken?: (token: string) => void;
|
|
10
|
+
title?: string;
|
|
11
|
+
hideTitle?: boolean;
|
|
12
|
+
xLabel?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
roleColors?: Partial<Record<ChainStepRole, string>> | undefined;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Token × position goodness heatmap — answers "is this step better early, mid,
|
|
18
|
+
* or late (1st vs 2nd)?". Each cell is the median goodness of chains where the
|
|
19
|
+
* row token sits in that position bucket, colored on the diverging effect ramp
|
|
20
|
+
* pivoted at the corpus baseline (cool = better, warm = worse). Cells below the
|
|
21
|
+
* min-count gate drop out as blanks. Pure inline SVG; feed it a
|
|
22
|
+
* {@link PositionMatrix} from `positionMatrix()`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function PositionEffectHeatmap({ matrix, width, height, showCounts, selectedToken, onSelectToken, title, hideTitle, xLabel, className, roleColors, }: PositionEffectHeatmapProps): import("react").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=PositionEffectHeatmap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PositionEffectHeatmap.d.ts","sourceRoot":"","sources":["../../src/chains/PositionEffectHeatmap.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAQ,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;CACjE;AAeD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,KAAW,EACX,MAAM,EACN,UAAiB,EACjB,aAAa,EACb,aAAa,EACb,KAA4B,EAC5B,SAAiB,EACjB,MAAM,EACN,SAAS,EACT,UAAU,GACX,EAAE,0BAA0B,+BA8J5B"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { extentOf, round } from "../viz/geometry.js";
|
|
3
|
+
import { cx } from "./_cx.js";
|
|
4
|
+
import { effectColor, effectTextColor, roleColor } from "./colors.js";
|
|
5
|
+
function fmt(value) {
|
|
6
|
+
if (!Number.isFinite(value))
|
|
7
|
+
return "—";
|
|
8
|
+
if (Math.abs(value) >= 100)
|
|
9
|
+
return value.toFixed(0);
|
|
10
|
+
if (Math.abs(value) >= 1)
|
|
11
|
+
return value.toFixed(2);
|
|
12
|
+
return value.toFixed(2);
|
|
13
|
+
}
|
|
14
|
+
function cellMedians(matrix) {
|
|
15
|
+
const out = [matrix.baseline];
|
|
16
|
+
for (const row of matrix.rows)
|
|
17
|
+
for (const cell of row.cells)
|
|
18
|
+
if (cell)
|
|
19
|
+
out.push(cell.median);
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Token × position goodness heatmap — answers "is this step better early, mid,
|
|
24
|
+
* or late (1st vs 2nd)?". Each cell is the median goodness of chains where the
|
|
25
|
+
* row token sits in that position bucket, colored on the diverging effect ramp
|
|
26
|
+
* pivoted at the corpus baseline (cool = better, warm = worse). Cells below the
|
|
27
|
+
* min-count gate drop out as blanks. Pure inline SVG; feed it a
|
|
28
|
+
* {@link PositionMatrix} from `positionMatrix()`.
|
|
29
|
+
*/
|
|
30
|
+
export function PositionEffectHeatmap({ matrix, width = 460, height, showCounts = true, selectedToken, onSelectToken, title = "Effect by position", hideTitle = false, xLabel, className, roleColors, }) {
|
|
31
|
+
const rows = matrix.rows;
|
|
32
|
+
const cols = matrix.buckets;
|
|
33
|
+
const resolvedHeight = height ?? Math.max(150, rows.length * 34 + 66);
|
|
34
|
+
const padLeft = 104;
|
|
35
|
+
const padTop = 40;
|
|
36
|
+
const padRight = 44;
|
|
37
|
+
const padBottom = 26;
|
|
38
|
+
const gridLeft = padLeft;
|
|
39
|
+
const gridRight = width - padRight;
|
|
40
|
+
const gridTop = padTop;
|
|
41
|
+
const gridBottom = resolvedHeight - padBottom;
|
|
42
|
+
const gridWidth = Math.max(0, gridRight - gridLeft);
|
|
43
|
+
const gridHeight = Math.max(0, gridBottom - gridTop);
|
|
44
|
+
const cellW = cols.length > 0 ? gridWidth / cols.length : gridWidth;
|
|
45
|
+
const cellH = rows.length > 0 ? gridHeight / rows.length : gridHeight;
|
|
46
|
+
const ext = extentOf(cellMedians(matrix));
|
|
47
|
+
const halfRange = Math.max(Math.abs(ext.max - matrix.baseline), Math.abs(matrix.baseline - ext.min)) || 1;
|
|
48
|
+
const interactive = typeof onSelectToken === "function";
|
|
49
|
+
const legendX = gridRight + 16;
|
|
50
|
+
const legendW = 10;
|
|
51
|
+
const segCount = 16;
|
|
52
|
+
const renderCell = (cell, r, c) => {
|
|
53
|
+
const x = gridLeft + c * cellW;
|
|
54
|
+
const y = gridTop + r * cellH;
|
|
55
|
+
const has = cell !== null;
|
|
56
|
+
const fill = has ? effectColor(cell.median, matrix.baseline, halfRange) : "transparent";
|
|
57
|
+
return (_jsxs("g", { className: "n4chains-hcell", children: [_jsx("rect", { x: round(x + 1.5), y: round(y + 1.5), width: round(cellW - 3), height: round(cellH - 3), rx: 4, fill: fill, stroke: has ? "transparent" : "currentColor", strokeOpacity: has ? 0 : 0.16 }), has ? (_jsxs(_Fragment, { children: [_jsx("title", { children: `${rows[r].label} · ${cols[c].label} — median ${fmt(cell.median)}, n=${cell.n}` }), _jsx("text", { className: "n4chains-cell-value", x: round(x + cellW / 2), y: round(y + cellH / 2 + (showCounts ? 0 : 3.5)), textAnchor: "middle", fill: effectTextColor(cell.median, matrix.baseline, halfRange), children: fmt(cell.median) }), showCounts ? (_jsx("text", { className: "n4chains-cell-n", x: round(x + cellW / 2), y: round(y + cellH / 2 + 12), textAnchor: "middle", fill: effectTextColor(cell.median, matrix.baseline, halfRange), children: cell.n })) : null] })) : null] }, `cell-${r}-${c}`));
|
|
58
|
+
};
|
|
59
|
+
return (_jsxs("svg", { className: cx("n4chains", "n4chains-position", className), viewBox: `0 0 ${width} ${resolvedHeight}`, role: "img", "aria-label": title, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { children: title }), hideTitle ? null : (_jsx("text", { className: "n4chains-title", x: 8, y: 16, textAnchor: "start", children: title })), _jsx("text", { className: "n4chains-caption", x: round(gridRight), y: 16, textAnchor: "end", children: matrix.mode === "phase" ? "position phase" : "absolute position" }), rows.map((_, r) => cols.map((__, c) => renderCell(rows[r].cells[c] ?? null, r, c))), rows.map((row, r) => {
|
|
60
|
+
const cy = gridTop + r * cellH + cellH / 2;
|
|
61
|
+
const selected = selectedToken === row.token;
|
|
62
|
+
return (_jsxs("g", { className: cx("n4chains-position-row", selected && "is-selected", interactive && "is-interactive"), onClick: interactive ? () => onSelectToken?.(row.token) : undefined, tabIndex: interactive ? 0 : undefined, role: interactive ? "button" : undefined, "aria-pressed": interactive ? selected : undefined, onKeyDown: interactive
|
|
63
|
+
? (event) => {
|
|
64
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
65
|
+
event.preventDefault();
|
|
66
|
+
onSelectToken?.(row.token);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
: undefined, children: [_jsx("rect", { className: "n4chains-position-rowbg", x: 0, y: round(cy - cellH / 2), width: gridLeft - 4, height: round(cellH) }), _jsx("rect", { className: "n4chains-chip", x: 8, y: round(cy - 5), width: 10, height: 10, rx: 2.5, fill: roleColor(row.role, roleColors) }), _jsx("text", { className: "n4chains-row-label", x: 24, y: round(cy + 3.5), children: row.label })] }, `row-${row.token}`));
|
|
70
|
+
}), cols.map((col, c) => (_jsx("text", { className: "n4chains-col-label", x: round(gridLeft + c * cellW + cellW / 2), y: gridTop - 8, textAnchor: "middle", children: col.label }, `col-${col.key}`))), Array.from({ length: segCount }, (_, k) => {
|
|
71
|
+
const t = k / (segCount - 1); // 0 top = better
|
|
72
|
+
const value = matrix.baseline + halfRange * (1 - 2 * t);
|
|
73
|
+
const segY = gridTop + t * gridHeight;
|
|
74
|
+
return (_jsx("rect", { x: legendX, y: round(segY), width: legendW, height: round(gridHeight / segCount + 0.8), fill: effectColor(value, matrix.baseline, halfRange) }, `legend-${k}`));
|
|
75
|
+
}), _jsx("text", { className: "n4chains-legend-cap", x: round(legendX + legendW / 2), y: gridTop - 4, textAnchor: "middle", fill: "#0f766e", children: "better" }), _jsx("text", { className: "n4chains-legend-cap", x: round(legendX + legendW / 2), y: gridBottom + 12, textAnchor: "middle", fill: "#b45309", children: "worse" }), xLabel ? (_jsx("text", { className: "n4chains-axis-label", x: round(gridLeft + gridWidth / 2), y: resolvedHeight - 4, textAnchor: "middle", children: xLabel })) : null] }));
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=PositionEffectHeatmap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PositionEffectHeatmap.js","sourceRoot":"","sources":["../../src/chains/PositionEffectHeatmap.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ChainStepRole, SequenceMatrix } from "./types.js";
|
|
2
|
+
export interface SequenceEffectHeatmapProps {
|
|
3
|
+
matrix: SequenceMatrix;
|
|
4
|
+
width?: number;
|
|
5
|
+
height?: number;
|
|
6
|
+
/** Draw the per-cell sample size under the value. Default `false`. */
|
|
7
|
+
showCounts?: boolean;
|
|
8
|
+
title?: string;
|
|
9
|
+
hideTitle?: boolean;
|
|
10
|
+
className?: string;
|
|
11
|
+
roleColors?: Partial<Record<ChainStepRole, string>> | undefined;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Predecessor × successor goodness matrix — answers order questions like "is
|
|
15
|
+
* MSC better *after* SNV?". `cells[pred][succ]` is the median goodness of chains
|
|
16
|
+
* where the row token occurs before the column token, on the diverging effect
|
|
17
|
+
* ramp pivoted at the baseline. The diagonal and count-gated pairs are blank.
|
|
18
|
+
* Read a cell as "row → column". Pure inline SVG; feed a {@link SequenceMatrix}
|
|
19
|
+
* from `sequenceMatrix()`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function SequenceEffectHeatmap({ matrix, width, height, showCounts, title, hideTitle, className, roleColors, }: SequenceEffectHeatmapProps): import("react").JSX.Element;
|
|
22
|
+
//# sourceMappingURL=SequenceEffectHeatmap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SequenceEffectHeatmap.d.ts","sourceRoot":"","sources":["../../src/chains/SequenceEffectHeatmap.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAQ,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;CACjE;AAkBD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,KAAW,EACX,MAAM,EACN,UAAkB,EAClB,KAAyB,EACzB,SAAiB,EACjB,SAAS,EACT,UAAU,GACX,EAAE,0BAA0B,+BAmK5B"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { extentOf, round } from "../viz/geometry.js";
|
|
3
|
+
import { cx } from "./_cx.js";
|
|
4
|
+
import { effectColor, effectTextColor, roleColor } from "./colors.js";
|
|
5
|
+
function fmt(value) {
|
|
6
|
+
if (!Number.isFinite(value))
|
|
7
|
+
return "—";
|
|
8
|
+
if (Math.abs(value) >= 1)
|
|
9
|
+
return value.toFixed(2);
|
|
10
|
+
return value.toFixed(2);
|
|
11
|
+
}
|
|
12
|
+
function shorten(label, max = 10) {
|
|
13
|
+
return label.length > max ? `${label.slice(0, max - 1)}…` : label;
|
|
14
|
+
}
|
|
15
|
+
function medians(matrix) {
|
|
16
|
+
const out = [matrix.baseline];
|
|
17
|
+
for (const row of matrix.cells)
|
|
18
|
+
for (const cell of row)
|
|
19
|
+
if (cell)
|
|
20
|
+
out.push(cell.median);
|
|
21
|
+
return out;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Predecessor × successor goodness matrix — answers order questions like "is
|
|
25
|
+
* MSC better *after* SNV?". `cells[pred][succ]` is the median goodness of chains
|
|
26
|
+
* where the row token occurs before the column token, on the diverging effect
|
|
27
|
+
* ramp pivoted at the baseline. The diagonal and count-gated pairs are blank.
|
|
28
|
+
* Read a cell as "row → column". Pure inline SVG; feed a {@link SequenceMatrix}
|
|
29
|
+
* from `sequenceMatrix()`.
|
|
30
|
+
*/
|
|
31
|
+
export function SequenceEffectHeatmap({ matrix, width = 440, height, showCounts = false, title = "Effect by order", hideTitle = false, className, roleColors, }) {
|
|
32
|
+
const tokens = matrix.tokens;
|
|
33
|
+
const n = tokens.length;
|
|
34
|
+
const padLeft = 104;
|
|
35
|
+
const padTop = 66;
|
|
36
|
+
const padRight = 56;
|
|
37
|
+
const padBottom = 34;
|
|
38
|
+
const resolvedHeight = height ?? padTop + n * 34 + padBottom;
|
|
39
|
+
const gridLeft = padLeft;
|
|
40
|
+
const gridRight = width - padRight;
|
|
41
|
+
const gridTop = padTop;
|
|
42
|
+
const gridBottom = resolvedHeight - padBottom;
|
|
43
|
+
const gridWidth = Math.max(0, gridRight - gridLeft);
|
|
44
|
+
const gridHeight = Math.max(0, gridBottom - gridTop);
|
|
45
|
+
const cellW = n > 0 ? gridWidth / n : gridWidth;
|
|
46
|
+
const cellH = n > 0 ? gridHeight / n : gridHeight;
|
|
47
|
+
const ext = extentOf(medians(matrix));
|
|
48
|
+
const halfRange = Math.max(Math.abs(ext.max - matrix.baseline), Math.abs(matrix.baseline - ext.min)) || 1;
|
|
49
|
+
const legendX = gridRight + 14;
|
|
50
|
+
const legendW = 10;
|
|
51
|
+
const segCount = 16;
|
|
52
|
+
const renderCell = (cell, r, c) => {
|
|
53
|
+
const x = gridLeft + c * cellW;
|
|
54
|
+
const y = gridTop + r * cellH;
|
|
55
|
+
if (r === c) {
|
|
56
|
+
return (_jsx("rect", { className: "n4chains-seq-diag", x: round(x + 1.5), y: round(y + 1.5), width: round(cellW - 3), height: round(cellH - 3), rx: 4 }, `d-${r}`));
|
|
57
|
+
}
|
|
58
|
+
const has = cell !== null;
|
|
59
|
+
return (_jsxs("g", { className: "n4chains-hcell", children: [_jsx("rect", { x: round(x + 1.5), y: round(y + 1.5), width: round(cellW - 3), height: round(cellH - 3), rx: 4, fill: has ? effectColor(cell.median, matrix.baseline, halfRange) : "transparent", stroke: has ? "transparent" : "currentColor", strokeOpacity: has ? 0 : 0.14 }), has ? (_jsxs(_Fragment, { children: [_jsx("title", { children: `${tokens[r].label} → ${tokens[c].label} — median ${fmt(cell.median)}, n=${cell.n}` }), _jsx("text", { className: "n4chains-cell-value", x: round(x + cellW / 2), y: round(y + cellH / 2 + (showCounts ? 0 : 3.5)), textAnchor: "middle", fill: effectTextColor(cell.median, matrix.baseline, halfRange), children: fmt(cell.median) }), showCounts ? (_jsxs("text", { className: "n4chains-cell-n", x: round(x + cellW / 2), y: round(y + cellH / 2 + 12), textAnchor: "middle", fill: effectTextColor(cell.median, matrix.baseline, halfRange), children: ["n=", cell.n] })) : null] })) : null] }, `cell-${r}-${c}`));
|
|
60
|
+
};
|
|
61
|
+
return (_jsxs("svg", { className: cx("n4chains", "n4chains-sequence", className), viewBox: `0 0 ${width} ${resolvedHeight}`, role: "img", "aria-label": title, preserveAspectRatio: "xMidYMid meet", children: [_jsx("title", { children: title }), hideTitle ? null : (_jsx("text", { className: "n4chains-title", x: 8, y: 16, textAnchor: "start", children: title })), _jsx("text", { className: "n4chains-caption", x: round(gridRight), y: 16, textAnchor: "end", children: matrix.adjacentOnly ? "directly after" : "somewhere after" }), _jsx("text", { className: "n4chains-seq-axis", x: round(gridLeft + gridWidth / 2), y: gridTop - 30, textAnchor: "middle", children: "successor \u2192" }), _jsx("text", { className: "n4chains-seq-axis", transform: `translate(14 ${round(gridTop + gridHeight / 2)}) rotate(-90)`, textAnchor: "middle", children: "predecessor \u2193" }), matrix.cells.map((row, r) => row.map((cell, c) => renderCell(cell ?? null, r, c))), tokens.map((token, r) => {
|
|
62
|
+
const cy = gridTop + r * cellH + cellH / 2;
|
|
63
|
+
return (_jsxs("g", { children: [_jsx("rect", { className: "n4chains-chip", x: round(gridLeft - 92), y: round(cy - 5), width: 9, height: 9, rx: 2.5, fill: roleColor(token.role, roleColors) }), _jsx("text", { className: "n4chains-row-label", x: round(gridLeft - 78), y: round(cy + 3.5), children: shorten(token.label, 11) })] }, `row-${token.token}`));
|
|
64
|
+
}), tokens.map((token, c) => {
|
|
65
|
+
const cx0 = gridLeft + c * cellW + cellW / 2;
|
|
66
|
+
return (_jsx("text", { className: "n4chains-col-label", transform: `rotate(-38 ${round(cx0)} ${gridTop - 8})`, x: round(cx0), y: gridTop - 8, textAnchor: "start", children: shorten(token.label, 11) }, `col-${token.token}`));
|
|
67
|
+
}), Array.from({ length: segCount }, (_, k) => {
|
|
68
|
+
const t = k / (segCount - 1);
|
|
69
|
+
const value = matrix.baseline + halfRange * (1 - 2 * t);
|
|
70
|
+
const segY = gridTop + t * gridHeight;
|
|
71
|
+
return (_jsx("rect", { x: legendX, y: round(segY), width: legendW, height: round(gridHeight / segCount + 0.8), fill: effectColor(value, matrix.baseline, halfRange) }, `legend-${k}`));
|
|
72
|
+
}), _jsx("text", { className: "n4chains-legend-cap", x: round(legendX + legendW / 2), y: gridTop - 4, textAnchor: "middle", fill: "#0f766e", children: "better" }), _jsx("text", { className: "n4chains-legend-cap", x: round(legendX + legendW / 2), y: gridBottom + 12, textAnchor: "middle", fill: "#b45309", children: "worse" })] }));
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=SequenceEffectHeatmap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SequenceEffectHeatmap.js","sourceRoot":"","sources":["../../src/chains/SequenceEffectHeatmap.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_cx.d.ts","sourceRoot":"","sources":["../../src/chains/_cx.ts"],"names":[],"mappings":"AAGA,wBAAgB,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAGzF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Internal class-name join helper for the `chains` domain (not part of the
|
|
2
|
+
// public barrel). Mirrors the same tiny helper used by the viz/lab/dag
|
|
3
|
+
// components so the explorer stays free of any external `clsx` dependency.
|
|
4
|
+
export function cx(...parts) {
|
|
5
|
+
const resolved = parts.filter((p) => typeof p === "string" && p.length > 0);
|
|
6
|
+
return resolved.length > 0 ? resolved.join(" ") : undefined;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=_cx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_cx.js","sourceRoot":"","sources":["../../src/chains/_cx.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,uEAAuE;AACvE,2EAA2E;AAC3E,MAAM,UAAU,EAAE,CAAC,GAAG,KAA+C;IACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzF,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9D,CAAC"}
|