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.
Files changed (521) hide show
  1. package/README.md +39 -1
  2. package/assets/brands/README.md +28 -8
  3. package/assets/brands/dag-ml/favicon.ico +0 -0
  4. package/assets/brands/dag-ml/horizontal-dark.svg +5 -0
  5. package/assets/brands/dag-ml/horizontal.png +0 -0
  6. package/assets/brands/dag-ml/horizontal.svg +5 -0
  7. package/assets/brands/dag-ml/icon-180.png +0 -0
  8. package/assets/brands/dag-ml/icon-256.png +0 -0
  9. package/assets/brands/dag-ml/icon-32.png +0 -0
  10. package/assets/brands/dag-ml/icon-512.png +0 -0
  11. package/assets/brands/dag-ml/icon.svg +3 -0
  12. package/assets/brands/dag-ml/og.png +0 -0
  13. package/assets/brands/dag-ml/stacked-dark.svg +5 -0
  14. package/assets/brands/dag-ml/stacked.png +0 -0
  15. package/assets/brands/dag-ml/stacked.svg +5 -0
  16. package/assets/brands/dag-ml-data/favicon.ico +0 -0
  17. package/assets/brands/dag-ml-data/horizontal-dark.svg +6 -0
  18. package/assets/brands/dag-ml-data/horizontal.png +0 -0
  19. package/assets/brands/dag-ml-data/horizontal.svg +6 -0
  20. package/assets/brands/dag-ml-data/icon-180.png +0 -0
  21. package/assets/brands/dag-ml-data/icon-256.png +0 -0
  22. package/assets/brands/dag-ml-data/icon-32.png +0 -0
  23. package/assets/brands/dag-ml-data/icon-512.png +0 -0
  24. package/assets/brands/dag-ml-data/icon.svg +3 -0
  25. package/assets/brands/dag-ml-data/og.png +0 -0
  26. package/assets/brands/dag-ml-data/stacked-dark.svg +6 -0
  27. package/assets/brands/dag-ml-data/stacked.png +0 -0
  28. package/assets/brands/dag-ml-data/stacked.svg +6 -0
  29. package/assets/brands/nirs4all/favicon.ico +0 -0
  30. package/assets/brands/nirs4all/horizontal-dark.svg +36 -0
  31. package/assets/brands/nirs4all/horizontal.png +0 -0
  32. package/assets/brands/nirs4all/horizontal.svg +35 -11
  33. package/assets/brands/nirs4all/icon-180.png +0 -0
  34. package/assets/brands/nirs4all/icon-256.png +0 -0
  35. package/assets/brands/nirs4all/icon-32.png +0 -0
  36. package/assets/brands/nirs4all/icon-512.png +0 -0
  37. package/assets/brands/nirs4all/icon.svg +32 -7
  38. package/assets/brands/nirs4all/og.png +0 -0
  39. package/assets/brands/nirs4all/stacked-dark.svg +36 -0
  40. package/assets/brands/nirs4all/stacked.png +0 -0
  41. package/assets/brands/nirs4all/stacked.svg +35 -11
  42. package/assets/brands/nirs4all-benchmarks/favicon.ico +0 -0
  43. package/assets/brands/nirs4all-benchmarks/horizontal-dark.svg +37 -0
  44. package/assets/brands/nirs4all-benchmarks/horizontal.png +0 -0
  45. package/assets/brands/nirs4all-benchmarks/horizontal.svg +37 -0
  46. package/assets/brands/nirs4all-benchmarks/icon-180.png +0 -0
  47. package/assets/brands/nirs4all-benchmarks/icon-256.png +0 -0
  48. package/assets/brands/nirs4all-benchmarks/icon-32.png +0 -0
  49. package/assets/brands/nirs4all-benchmarks/icon-512.png +0 -0
  50. package/assets/brands/nirs4all-benchmarks/icon.svg +33 -0
  51. package/assets/brands/nirs4all-benchmarks/og.png +0 -0
  52. package/assets/brands/nirs4all-benchmarks/stacked-dark.svg +36 -0
  53. package/assets/brands/nirs4all-benchmarks/stacked.png +0 -0
  54. package/assets/brands/nirs4all-benchmarks/stacked.svg +36 -0
  55. package/assets/brands/nirs4all-cluster/favicon.ico +0 -0
  56. package/assets/brands/nirs4all-cluster/horizontal-dark.svg +37 -0
  57. package/assets/brands/nirs4all-cluster/horizontal.png +0 -0
  58. package/assets/brands/nirs4all-cluster/horizontal.svg +37 -0
  59. package/assets/brands/nirs4all-cluster/icon-180.png +0 -0
  60. package/assets/brands/nirs4all-cluster/icon-256.png +0 -0
  61. package/assets/brands/nirs4all-cluster/icon-32.png +0 -0
  62. package/assets/brands/nirs4all-cluster/icon-512.png +0 -0
  63. package/assets/brands/nirs4all-cluster/icon.svg +33 -0
  64. package/assets/brands/nirs4all-cluster/og.png +0 -0
  65. package/assets/brands/nirs4all-cluster/stacked-dark.svg +36 -0
  66. package/assets/brands/nirs4all-cluster/stacked.png +0 -0
  67. package/assets/brands/nirs4all-cluster/stacked.svg +36 -0
  68. package/assets/brands/nirs4all-core/favicon.ico +0 -0
  69. package/assets/brands/nirs4all-core/horizontal-dark.svg +37 -0
  70. package/assets/brands/nirs4all-core/horizontal.png +0 -0
  71. package/assets/brands/nirs4all-core/horizontal.svg +36 -11
  72. package/assets/brands/nirs4all-core/icon-180.png +0 -0
  73. package/assets/brands/nirs4all-core/icon-256.png +0 -0
  74. package/assets/brands/nirs4all-core/icon-32.png +0 -0
  75. package/assets/brands/nirs4all-core/icon-512.png +0 -0
  76. package/assets/brands/nirs4all-core/icon.svg +32 -7
  77. package/assets/brands/nirs4all-core/og.png +0 -0
  78. package/assets/brands/nirs4all-core/stacked-dark.svg +36 -0
  79. package/assets/brands/nirs4all-core/stacked.png +0 -0
  80. package/assets/brands/nirs4all-core/stacked.svg +35 -11
  81. package/assets/brands/nirs4all-datasets/favicon.ico +0 -0
  82. package/assets/brands/nirs4all-datasets/horizontal-dark.svg +37 -0
  83. package/assets/brands/nirs4all-datasets/horizontal.png +0 -0
  84. package/assets/brands/nirs4all-datasets/horizontal.svg +37 -0
  85. package/assets/brands/nirs4all-datasets/icon-180.png +0 -0
  86. package/assets/brands/nirs4all-datasets/icon-256.png +0 -0
  87. package/assets/brands/nirs4all-datasets/icon-32.png +0 -0
  88. package/assets/brands/nirs4all-datasets/icon-512.png +0 -0
  89. package/assets/brands/nirs4all-datasets/icon.svg +33 -0
  90. package/assets/brands/nirs4all-datasets/og.png +0 -0
  91. package/assets/brands/nirs4all-datasets/stacked-dark.svg +36 -0
  92. package/assets/brands/nirs4all-datasets/stacked.png +0 -0
  93. package/assets/brands/nirs4all-datasets/stacked.svg +36 -0
  94. package/assets/brands/nirs4all-device/favicon.ico +0 -0
  95. package/assets/brands/nirs4all-device/horizontal-dark.svg +37 -0
  96. package/assets/brands/nirs4all-device/horizontal.png +0 -0
  97. package/assets/brands/nirs4all-device/horizontal.svg +37 -0
  98. package/assets/brands/nirs4all-device/icon-180.png +0 -0
  99. package/assets/brands/nirs4all-device/icon-256.png +0 -0
  100. package/assets/brands/nirs4all-device/icon-32.png +0 -0
  101. package/assets/brands/nirs4all-device/icon-512.png +0 -0
  102. package/assets/brands/nirs4all-device/icon.svg +33 -0
  103. package/assets/brands/nirs4all-device/og.png +0 -0
  104. package/assets/brands/nirs4all-device/stacked-dark.svg +36 -0
  105. package/assets/brands/nirs4all-device/stacked.png +0 -0
  106. package/assets/brands/nirs4all-device/stacked.svg +36 -0
  107. package/assets/brands/nirs4all-formats/favicon.ico +0 -0
  108. package/assets/brands/nirs4all-formats/horizontal-dark.svg +37 -0
  109. package/assets/brands/nirs4all-formats/horizontal.png +0 -0
  110. package/assets/brands/nirs4all-formats/horizontal.svg +37 -0
  111. package/assets/brands/nirs4all-formats/icon-180.png +0 -0
  112. package/assets/brands/nirs4all-formats/icon-256.png +0 -0
  113. package/assets/brands/nirs4all-formats/icon-32.png +0 -0
  114. package/assets/brands/nirs4all-formats/icon-512.png +0 -0
  115. package/assets/brands/nirs4all-formats/icon.svg +33 -0
  116. package/assets/brands/nirs4all-formats/og.png +0 -0
  117. package/assets/brands/nirs4all-formats/stacked-dark.svg +36 -0
  118. package/assets/brands/nirs4all-formats/stacked.png +0 -0
  119. package/assets/brands/nirs4all-formats/stacked.svg +36 -0
  120. package/assets/brands/nirs4all-io/favicon.ico +0 -0
  121. package/assets/brands/nirs4all-io/horizontal-dark.svg +37 -0
  122. package/assets/brands/nirs4all-io/horizontal.png +0 -0
  123. package/assets/brands/nirs4all-io/horizontal.svg +37 -0
  124. package/assets/brands/nirs4all-io/icon-180.png +0 -0
  125. package/assets/brands/nirs4all-io/icon-256.png +0 -0
  126. package/assets/brands/nirs4all-io/icon-32.png +0 -0
  127. package/assets/brands/nirs4all-io/icon-512.png +0 -0
  128. package/assets/brands/nirs4all-io/icon.svg +33 -0
  129. package/assets/brands/nirs4all-io/og.png +0 -0
  130. package/assets/brands/nirs4all-io/stacked-dark.svg +36 -0
  131. package/assets/brands/nirs4all-io/stacked.png +0 -0
  132. package/assets/brands/nirs4all-io/stacked.svg +36 -0
  133. package/assets/brands/nirs4all-methods/favicon.ico +0 -0
  134. package/assets/brands/nirs4all-methods/horizontal-dark.svg +37 -0
  135. package/assets/brands/nirs4all-methods/horizontal.png +0 -0
  136. package/assets/brands/nirs4all-methods/horizontal.svg +37 -0
  137. package/assets/brands/nirs4all-methods/icon-180.png +0 -0
  138. package/assets/brands/nirs4all-methods/icon-256.png +0 -0
  139. package/assets/brands/nirs4all-methods/icon-32.png +0 -0
  140. package/assets/brands/nirs4all-methods/icon-512.png +0 -0
  141. package/assets/brands/nirs4all-methods/icon.svg +33 -0
  142. package/assets/brands/nirs4all-methods/og.png +0 -0
  143. package/assets/brands/nirs4all-methods/stacked-dark.svg +36 -0
  144. package/assets/brands/nirs4all-methods/stacked.png +0 -0
  145. package/assets/brands/nirs4all-methods/stacked.svg +36 -0
  146. package/assets/brands/nirs4all-papers/favicon.ico +0 -0
  147. package/assets/brands/nirs4all-papers/horizontal-dark.svg +37 -0
  148. package/assets/brands/nirs4all-papers/horizontal.png +0 -0
  149. package/assets/brands/nirs4all-papers/horizontal.svg +37 -0
  150. package/assets/brands/nirs4all-papers/icon-180.png +0 -0
  151. package/assets/brands/nirs4all-papers/icon-256.png +0 -0
  152. package/assets/brands/nirs4all-papers/icon-32.png +0 -0
  153. package/assets/brands/nirs4all-papers/icon-512.png +0 -0
  154. package/assets/brands/nirs4all-papers/icon.svg +33 -0
  155. package/assets/brands/nirs4all-papers/og.png +0 -0
  156. package/assets/brands/nirs4all-papers/stacked-dark.svg +36 -0
  157. package/assets/brands/nirs4all-papers/stacked.png +0 -0
  158. package/assets/brands/nirs4all-papers/stacked.svg +36 -0
  159. package/assets/brands/nirs4all-providers/favicon.ico +0 -0
  160. package/assets/brands/nirs4all-providers/horizontal-dark.svg +37 -0
  161. package/assets/brands/nirs4all-providers/horizontal.png +0 -0
  162. package/assets/brands/nirs4all-providers/horizontal.svg +36 -11
  163. package/assets/brands/nirs4all-providers/icon-180.png +0 -0
  164. package/assets/brands/nirs4all-providers/icon-256.png +0 -0
  165. package/assets/brands/nirs4all-providers/icon-32.png +0 -0
  166. package/assets/brands/nirs4all-providers/icon-512.png +0 -0
  167. package/assets/brands/nirs4all-providers/icon.svg +32 -7
  168. package/assets/brands/nirs4all-providers/og.png +0 -0
  169. package/assets/brands/nirs4all-providers/stacked-dark.svg +36 -0
  170. package/assets/brands/nirs4all-providers/stacked.png +0 -0
  171. package/assets/brands/nirs4all-providers/stacked.svg +35 -11
  172. package/assets/brands/nirs4all-quality/favicon.ico +0 -0
  173. package/assets/brands/nirs4all-quality/horizontal-dark.svg +36 -0
  174. package/assets/brands/nirs4all-quality/horizontal.svg +35 -11
  175. package/assets/brands/nirs4all-quality/icon-180.png +0 -0
  176. package/assets/brands/nirs4all-quality/icon-256.png +0 -0
  177. package/assets/brands/nirs4all-quality/icon-32.png +0 -0
  178. package/assets/brands/nirs4all-quality/icon-512.png +0 -0
  179. package/assets/brands/nirs4all-quality/icon.svg +32 -7
  180. package/assets/brands/nirs4all-quality/og.png +0 -0
  181. package/assets/brands/nirs4all-quality/stacked-dark.svg +36 -0
  182. package/assets/brands/nirs4all-quality/stacked.svg +35 -11
  183. package/assets/brands/nirs4all-repository/favicon.ico +0 -0
  184. package/assets/brands/nirs4all-repository/horizontal-dark.svg +37 -0
  185. package/assets/brands/nirs4all-repository/horizontal.png +0 -0
  186. package/assets/brands/nirs4all-repository/horizontal.svg +37 -0
  187. package/assets/brands/nirs4all-repository/icon-180.png +0 -0
  188. package/assets/brands/nirs4all-repository/icon-256.png +0 -0
  189. package/assets/brands/nirs4all-repository/icon-32.png +0 -0
  190. package/assets/brands/nirs4all-repository/icon-512.png +0 -0
  191. package/assets/brands/nirs4all-repository/icon.svg +33 -0
  192. package/assets/brands/nirs4all-repository/og.png +0 -0
  193. package/assets/brands/nirs4all-repository/stacked-dark.svg +36 -0
  194. package/assets/brands/nirs4all-repository/stacked.png +0 -0
  195. package/assets/brands/nirs4all-repository/stacked.svg +36 -0
  196. package/assets/brands/nirs4all-studio/favicon.ico +0 -0
  197. package/assets/brands/nirs4all-studio/horizontal-dark.svg +37 -0
  198. package/assets/brands/nirs4all-studio/horizontal.png +0 -0
  199. package/assets/brands/nirs4all-studio/horizontal.svg +37 -0
  200. package/assets/brands/nirs4all-studio/icon-180.png +0 -0
  201. package/assets/brands/nirs4all-studio/icon-256.png +0 -0
  202. package/assets/brands/nirs4all-studio/icon-32.png +0 -0
  203. package/assets/brands/nirs4all-studio/icon-512.png +0 -0
  204. package/assets/brands/nirs4all-studio/icon.svg +33 -0
  205. package/assets/brands/nirs4all-studio/og.png +0 -0
  206. package/assets/brands/nirs4all-studio/stacked-dark.svg +36 -0
  207. package/assets/brands/nirs4all-studio/stacked.png +0 -0
  208. package/assets/brands/nirs4all-studio/stacked.svg +36 -0
  209. package/assets/brands/nirs4all-tools/favicon.ico +0 -0
  210. package/assets/brands/nirs4all-tools/horizontal-dark.svg +37 -0
  211. package/assets/brands/nirs4all-tools/horizontal.png +0 -0
  212. package/assets/brands/nirs4all-tools/horizontal.svg +37 -0
  213. package/assets/brands/nirs4all-tools/icon-180.png +0 -0
  214. package/assets/brands/nirs4all-tools/icon-256.png +0 -0
  215. package/assets/brands/nirs4all-tools/icon-32.png +0 -0
  216. package/assets/brands/nirs4all-tools/icon-512.png +0 -0
  217. package/assets/brands/nirs4all-tools/icon.svg +33 -0
  218. package/assets/brands/nirs4all-tools/og.png +0 -0
  219. package/assets/brands/nirs4all-tools/stacked-dark.svg +36 -0
  220. package/assets/brands/nirs4all-tools/stacked.png +0 -0
  221. package/assets/brands/nirs4all-tools/stacked.svg +36 -0
  222. package/assets/brands/nirs4all-ui/favicon.ico +0 -0
  223. package/assets/brands/nirs4all-ui/horizontal-dark.svg +37 -0
  224. package/assets/brands/nirs4all-ui/horizontal.png +0 -0
  225. package/assets/brands/nirs4all-ui/horizontal.svg +36 -11
  226. package/assets/brands/nirs4all-ui/icon-180.png +0 -0
  227. package/assets/brands/nirs4all-ui/icon-256.png +0 -0
  228. package/assets/brands/nirs4all-ui/icon-32.png +0 -0
  229. package/assets/brands/nirs4all-ui/icon-512.png +0 -0
  230. package/assets/brands/nirs4all-ui/icon.svg +32 -7
  231. package/assets/brands/nirs4all-ui/og.png +0 -0
  232. package/assets/brands/nirs4all-ui/stacked-dark.svg +36 -0
  233. package/assets/brands/nirs4all-ui/stacked.png +0 -0
  234. package/assets/brands/nirs4all-ui/stacked.svg +35 -11
  235. package/assets/brands/nirs4all-web/favicon.ico +0 -0
  236. package/assets/brands/nirs4all-web/horizontal-dark.svg +37 -0
  237. package/assets/brands/nirs4all-web/horizontal.png +0 -0
  238. package/assets/brands/nirs4all-web/horizontal.svg +37 -0
  239. package/assets/brands/nirs4all-web/icon-180.png +0 -0
  240. package/assets/brands/nirs4all-web/icon-256.png +0 -0
  241. package/assets/brands/nirs4all-web/icon-32.png +0 -0
  242. package/assets/brands/nirs4all-web/icon-512.png +0 -0
  243. package/assets/brands/nirs4all-web/icon.svg +33 -0
  244. package/assets/brands/nirs4all-web/og.png +0 -0
  245. package/assets/brands/nirs4all-web/stacked-dark.svg +36 -0
  246. package/assets/brands/nirs4all-web/stacked.png +0 -0
  247. package/assets/brands/nirs4all-web/stacked.svg +36 -0
  248. package/assets/chains.css +601 -0
  249. package/assets/conformal.css +323 -0
  250. package/assets/dag.css +446 -0
  251. package/assets/motion/nirs-spectra.svg +26 -9
  252. package/assets/viz.css +152 -0
  253. package/dist/brand/index.d.ts +24 -126
  254. package/dist/brand/index.d.ts.map +1 -1
  255. package/dist/brand/index.js +52 -200
  256. package/dist/brand/index.js.map +1 -1
  257. package/dist/chains/ChainExplorer.d.ts +34 -0
  258. package/dist/chains/ChainExplorer.d.ts.map +1 -0
  259. package/dist/chains/ChainExplorer.js +119 -0
  260. package/dist/chains/ChainExplorer.js.map +1 -0
  261. package/dist/chains/ChainNodeHub.d.ts +31 -0
  262. package/dist/chains/ChainNodeHub.d.ts.map +1 -0
  263. package/dist/chains/ChainNodeHub.js +150 -0
  264. package/dist/chains/ChainNodeHub.js.map +1 -0
  265. package/dist/chains/ChainNodeOrbit.d.ts +31 -0
  266. package/dist/chains/ChainNodeOrbit.d.ts.map +1 -0
  267. package/dist/chains/ChainNodeOrbit.js +158 -0
  268. package/dist/chains/ChainNodeOrbit.js.map +1 -0
  269. package/dist/chains/ChainScoreBeeswarm.d.ts +25 -0
  270. package/dist/chains/ChainScoreBeeswarm.d.ts.map +1 -0
  271. package/dist/chains/ChainScoreBeeswarm.js +84 -0
  272. package/dist/chains/ChainScoreBeeswarm.js.map +1 -0
  273. package/dist/chains/NodeEffectForest.d.ts +33 -0
  274. package/dist/chains/NodeEffectForest.d.ts.map +1 -0
  275. package/dist/chains/NodeEffectForest.js +85 -0
  276. package/dist/chains/NodeEffectForest.js.map +1 -0
  277. package/dist/chains/PositionEffectHeatmap.d.ts +25 -0
  278. package/dist/chains/PositionEffectHeatmap.d.ts.map +1 -0
  279. package/dist/chains/PositionEffectHeatmap.js +77 -0
  280. package/dist/chains/PositionEffectHeatmap.js.map +1 -0
  281. package/dist/chains/SequenceEffectHeatmap.d.ts +22 -0
  282. package/dist/chains/SequenceEffectHeatmap.d.ts.map +1 -0
  283. package/dist/chains/SequenceEffectHeatmap.js +74 -0
  284. package/dist/chains/SequenceEffectHeatmap.js.map +1 -0
  285. package/dist/chains/_cx.d.ts +2 -0
  286. package/dist/chains/_cx.d.ts.map +1 -0
  287. package/dist/chains/_cx.js +8 -0
  288. package/dist/chains/_cx.js.map +1 -0
  289. package/dist/chains/analysis.d.ts +100 -0
  290. package/dist/chains/analysis.d.ts.map +1 -0
  291. package/dist/chains/analysis.js +440 -0
  292. package/dist/chains/analysis.js.map +1 -0
  293. package/dist/chains/colors.d.ts +26 -0
  294. package/dist/chains/colors.d.ts.map +1 -0
  295. package/dist/chains/colors.js +58 -0
  296. package/dist/chains/colors.js.map +1 -0
  297. package/dist/chains/contract.d.ts +54 -0
  298. package/dist/chains/contract.d.ts.map +1 -0
  299. package/dist/chains/contract.js +125 -0
  300. package/dist/chains/contract.js.map +1 -0
  301. package/dist/chains/index.d.ts +35 -0
  302. package/dist/chains/index.d.ts.map +1 -0
  303. package/dist/chains/index.js +41 -0
  304. package/dist/chains/index.js.map +1 -0
  305. package/dist/chains/normalize.d.ts +27 -0
  306. package/dist/chains/normalize.d.ts.map +1 -0
  307. package/dist/chains/normalize.js +104 -0
  308. package/dist/chains/normalize.js.map +1 -0
  309. package/dist/chains/radial.d.ts +21 -0
  310. package/dist/chains/radial.d.ts.map +1 -0
  311. package/dist/chains/radial.js +52 -0
  312. package/dist/chains/radial.js.map +1 -0
  313. package/dist/chains/types.d.ts +240 -0
  314. package/dist/chains/types.d.ts.map +1 -0
  315. package/dist/chains/types.js +52 -0
  316. package/dist/chains/types.js.map +1 -0
  317. package/dist/components/ConformalPredictionTree.d.ts +79 -0
  318. package/dist/components/ConformalPredictionTree.d.ts.map +1 -0
  319. package/dist/components/ConformalPredictionTree.js +223 -0
  320. package/dist/components/ConformalPredictionTree.js.map +1 -0
  321. package/dist/components/DatasetResultCard.d.ts +33 -0
  322. package/dist/components/DatasetResultCard.d.ts.map +1 -0
  323. package/dist/components/DatasetResultCard.js +9 -0
  324. package/dist/components/DatasetResultCard.js.map +1 -0
  325. package/dist/components/PerClassTable.d.ts +27 -0
  326. package/dist/components/PerClassTable.d.ts.map +1 -0
  327. package/dist/components/PerClassTable.js +9 -0
  328. package/dist/components/PerClassTable.js.map +1 -0
  329. package/dist/components/PredictionCard.d.ts +27 -0
  330. package/dist/components/PredictionCard.d.ts.map +1 -0
  331. package/dist/components/PredictionCard.js +6 -0
  332. package/dist/components/PredictionCard.js.map +1 -0
  333. package/dist/components/RankingsTable.d.ts +28 -0
  334. package/dist/components/RankingsTable.d.ts.map +1 -0
  335. package/dist/components/RankingsTable.js +14 -0
  336. package/dist/components/RankingsTable.js.map +1 -0
  337. package/dist/components/ScoreCardTree.d.ts +31 -0
  338. package/dist/components/ScoreCardTree.d.ts.map +1 -0
  339. package/dist/components/ScoreCardTree.js +17 -0
  340. package/dist/components/ScoreCardTree.js.map +1 -0
  341. package/dist/components/index.d.ts +6 -0
  342. package/dist/components/index.d.ts.map +1 -1
  343. package/dist/components/index.js +6 -0
  344. package/dist/components/index.js.map +1 -1
  345. package/dist/conformal/index.d.ts +2 -0
  346. package/dist/conformal/index.d.ts.map +1 -0
  347. package/dist/conformal/index.js +2 -0
  348. package/dist/conformal/index.js.map +1 -0
  349. package/dist/conformal/result.d.ts +224 -0
  350. package/dist/conformal/result.d.ts.map +1 -0
  351. package/dist/conformal/result.js +461 -0
  352. package/dist/conformal/result.js.map +1 -0
  353. package/dist/dag/DagGraphView.d.ts +35 -0
  354. package/dist/dag/DagGraphView.d.ts.map +1 -0
  355. package/dist/dag/DagGraphView.js +424 -0
  356. package/dist/dag/DagGraphView.js.map +1 -0
  357. package/dist/dag/_cx.d.ts +2 -0
  358. package/dist/dag/_cx.d.ts.map +1 -0
  359. package/dist/dag/_cx.js +8 -0
  360. package/dist/dag/_cx.js.map +1 -0
  361. package/dist/dag/collapse.d.ts +81 -0
  362. package/dist/dag/collapse.d.ts.map +1 -0
  363. package/dist/dag/collapse.js +210 -0
  364. package/dist/dag/collapse.js.map +1 -0
  365. package/dist/dag/colors.d.ts +19 -0
  366. package/dist/dag/colors.d.ts.map +1 -0
  367. package/dist/dag/colors.js +54 -0
  368. package/dist/dag/colors.js.map +1 -0
  369. package/dist/dag/fromCompiledGraph.d.ts +27 -0
  370. package/dist/dag/fromCompiledGraph.d.ts.map +1 -0
  371. package/dist/dag/fromCompiledGraph.js +133 -0
  372. package/dist/dag/fromCompiledGraph.js.map +1 -0
  373. package/dist/dag/hierarchy.d.ts +38 -0
  374. package/dist/dag/hierarchy.d.ts.map +1 -0
  375. package/dist/dag/hierarchy.js +75 -0
  376. package/dist/dag/hierarchy.js.map +1 -0
  377. package/dist/dag/index.d.ts +28 -0
  378. package/dist/dag/index.d.ts.map +1 -0
  379. package/dist/dag/index.js +33 -0
  380. package/dist/dag/index.js.map +1 -0
  381. package/dist/dag/layout.d.ts +57 -0
  382. package/dist/dag/layout.d.ts.map +1 -0
  383. package/dist/dag/layout.js +267 -0
  384. package/dist/dag/layout.js.map +1 -0
  385. package/dist/dag/locale.d.ts +31 -0
  386. package/dist/dag/locale.d.ts.map +1 -0
  387. package/dist/dag/locale.js +32 -0
  388. package/dist/dag/locale.js.map +1 -0
  389. package/dist/dag/shape.d.ts +48 -0
  390. package/dist/dag/shape.d.ts.map +1 -0
  391. package/dist/dag/shape.js +263 -0
  392. package/dist/dag/shape.js.map +1 -0
  393. package/dist/dag/types.d.ts +106 -0
  394. package/dist/dag/types.d.ts.map +1 -0
  395. package/dist/dag/types.js +56 -0
  396. package/dist/dag/types.js.map +1 -0
  397. package/dist/index.d.ts +7 -0
  398. package/dist/index.d.ts.map +1 -1
  399. package/dist/index.js +7 -0
  400. package/dist/index.js.map +1 -1
  401. package/dist/keywordRegistry/index.d.ts +9 -0
  402. package/dist/keywordRegistry/index.d.ts.map +1 -0
  403. package/dist/keywordRegistry/index.js +9 -0
  404. package/dist/keywordRegistry/index.js.map +1 -0
  405. package/dist/keywordRegistry/registry.d.ts +107 -0
  406. package/dist/keywordRegistry/registry.d.ts.map +1 -0
  407. package/dist/keywordRegistry/registry.js +234 -0
  408. package/dist/keywordRegistry/registry.js.map +1 -0
  409. package/dist/robustness/index.d.ts +12 -0
  410. package/dist/robustness/index.d.ts.map +1 -0
  411. package/dist/robustness/index.js +12 -0
  412. package/dist/robustness/index.js.map +1 -0
  413. package/dist/robustness/modes.d.ts +15 -0
  414. package/dist/robustness/modes.d.ts.map +1 -0
  415. package/dist/robustness/modes.js +64 -0
  416. package/dist/robustness/modes.js.map +1 -0
  417. package/dist/robustness/scenarios.d.ts +38 -0
  418. package/dist/robustness/scenarios.d.ts.map +1 -0
  419. package/dist/robustness/scenarios.js +159 -0
  420. package/dist/robustness/scenarios.js.map +1 -0
  421. package/dist/robustness/summary.d.ts +135 -0
  422. package/dist/robustness/summary.d.ts.map +1 -0
  423. package/dist/robustness/summary.js +284 -0
  424. package/dist/robustness/summary.js.map +1 -0
  425. package/dist/styles/index.d.ts +19 -1
  426. package/dist/styles/index.d.ts.map +1 -1
  427. package/dist/styles/index.js +21 -0
  428. package/dist/styles/index.js.map +1 -1
  429. package/dist/tuning/index.d.ts +3 -0
  430. package/dist/tuning/index.d.ts.map +1 -0
  431. package/dist/tuning/index.js +3 -0
  432. package/dist/tuning/index.js.map +1 -0
  433. package/dist/tuning/result.d.ts +144 -0
  434. package/dist/tuning/result.d.ts.map +1 -0
  435. package/dist/tuning/result.js +277 -0
  436. package/dist/tuning/result.js.map +1 -0
  437. package/dist/tuning/searchSpace.d.ts +54 -0
  438. package/dist/tuning/searchSpace.d.ts.map +1 -0
  439. package/dist/tuning/searchSpace.js +118 -0
  440. package/dist/tuning/searchSpace.js.map +1 -0
  441. package/dist/viz/BiasVarianceBars.d.ts +27 -0
  442. package/dist/viz/BiasVarianceBars.d.ts.map +1 -0
  443. package/dist/viz/BiasVarianceBars.js +53 -0
  444. package/dist/viz/BiasVarianceBars.js.map +1 -0
  445. package/dist/viz/BoxPlot.d.ts +24 -0
  446. package/dist/viz/BoxPlot.d.ts.map +1 -0
  447. package/dist/viz/BoxPlot.js +50 -0
  448. package/dist/viz/BoxPlot.js.map +1 -0
  449. package/dist/viz/ConformalIntervalStrip.d.ts +66 -0
  450. package/dist/viz/ConformalIntervalStrip.d.ts.map +1 -0
  451. package/dist/viz/ConformalIntervalStrip.js +167 -0
  452. package/dist/viz/ConformalIntervalStrip.js.map +1 -0
  453. package/dist/viz/ConfusionMatrix.d.ts +24 -0
  454. package/dist/viz/ConfusionMatrix.d.ts.map +1 -0
  455. package/dist/viz/ConfusionMatrix.js +39 -0
  456. package/dist/viz/ConfusionMatrix.js.map +1 -0
  457. package/dist/viz/FeatureImportanceBar.d.ts +26 -0
  458. package/dist/viz/FeatureImportanceBar.d.ts.map +1 -0
  459. package/dist/viz/FeatureImportanceBar.js +49 -0
  460. package/dist/viz/FeatureImportanceBar.js.map +1 -0
  461. package/dist/viz/FoldStabilityLines.d.ts +29 -0
  462. package/dist/viz/FoldStabilityLines.d.ts.map +1 -0
  463. package/dist/viz/FoldStabilityLines.js +57 -0
  464. package/dist/viz/FoldStabilityLines.js.map +1 -0
  465. package/dist/viz/Histogram.d.ts +33 -0
  466. package/dist/viz/Histogram.d.ts.map +1 -0
  467. package/dist/viz/Histogram.js +64 -0
  468. package/dist/viz/Histogram.js.map +1 -0
  469. package/dist/viz/PcaScatter.d.ts +36 -0
  470. package/dist/viz/PcaScatter.d.ts.map +1 -0
  471. package/dist/viz/PcaScatter.js +72 -0
  472. package/dist/viz/PcaScatter.js.map +1 -0
  473. package/dist/viz/PipelineFlow.d.ts +28 -0
  474. package/dist/viz/PipelineFlow.d.ts.map +1 -0
  475. package/dist/viz/PipelineFlow.js +57 -0
  476. package/dist/viz/PipelineFlow.js.map +1 -0
  477. package/dist/viz/PredictionScatter.d.ts +41 -0
  478. package/dist/viz/PredictionScatter.d.ts.map +1 -0
  479. package/dist/viz/PredictionScatter.js +41 -0
  480. package/dist/viz/PredictionScatter.js.map +1 -0
  481. package/dist/viz/ResidualPlot.d.ts +32 -0
  482. package/dist/viz/ResidualPlot.d.ts.map +1 -0
  483. package/dist/viz/ResidualPlot.js +58 -0
  484. package/dist/viz/ResidualPlot.js.map +1 -0
  485. package/dist/viz/ScoreHeatmap.d.ts +30 -0
  486. package/dist/viz/ScoreHeatmap.d.ts.map +1 -0
  487. package/dist/viz/ScoreHeatmap.js +61 -0
  488. package/dist/viz/ScoreHeatmap.js.map +1 -0
  489. package/dist/viz/ScoreSummary.d.ts +23 -0
  490. package/dist/viz/ScoreSummary.d.ts.map +1 -0
  491. package/dist/viz/ScoreSummary.js +32 -0
  492. package/dist/viz/ScoreSummary.js.map +1 -0
  493. package/dist/viz/ShapBeeswarm.d.ts +29 -0
  494. package/dist/viz/ShapBeeswarm.d.ts.map +1 -0
  495. package/dist/viz/ShapBeeswarm.js +60 -0
  496. package/dist/viz/ShapBeeswarm.js.map +1 -0
  497. package/dist/viz/SpectraPlot.d.ts +50 -0
  498. package/dist/viz/SpectraPlot.d.ts.map +1 -0
  499. package/dist/viz/SpectraPlot.js +46 -0
  500. package/dist/viz/SpectraPlot.js.map +1 -0
  501. package/dist/viz/WaterfallChart.d.ts +30 -0
  502. package/dist/viz/WaterfallChart.d.ts.map +1 -0
  503. package/dist/viz/WaterfallChart.js +73 -0
  504. package/dist/viz/WaterfallChart.js.map +1 -0
  505. package/dist/viz/_cx.d.ts +2 -0
  506. package/dist/viz/_cx.d.ts.map +1 -0
  507. package/dist/viz/_cx.js +8 -0
  508. package/dist/viz/_cx.js.map +1 -0
  509. package/dist/viz/geometry.d.ts +87 -0
  510. package/dist/viz/geometry.d.ts.map +1 -0
  511. package/dist/viz/geometry.js +208 -0
  512. package/dist/viz/geometry.js.map +1 -0
  513. package/dist/viz/index.d.ts +33 -0
  514. package/dist/viz/index.d.ts.map +1 -0
  515. package/dist/viz/index.js +38 -0
  516. package/dist/viz/index.js.map +1 -0
  517. package/dist/viz/theme.d.ts +50 -0
  518. package/dist/viz/theme.d.ts.map +1 -0
  519. package/dist/viz/theme.js +100 -0
  520. package/dist/viz/theme.js.map +1 -0
  521. package/package.json +34 -2
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Chain-effect analysis — descriptive aggregation over comparable chains.
3
+ *
4
+ * Pure, framework-free. Given {@link ChainPoint}s (goodness already computed by
5
+ * a lens, whether descriptive or authoritative), this derives the per-token
6
+ * effects, the position matrix (early / mid / late, 1st vs 2nd …), the
7
+ * predecessor × successor sequence matrix ("MSC after SNV?"), and per-token
8
+ * neighbour contexts. Every aggregate is a robust median/IQR over goodness and
9
+ * is gated by a minimum sample count so noise is not over-read.
10
+ */
11
+ import type { ChainEffectAnalysis, ChainMetric, ChainPoint, ChainStepRole, NodeFlow, NodeNeighborhood, PositionMatrix, PositionMode, ScoredChain, ScoreLens, SequenceMatrix, Stat, TokenContexts } from "./types.js";
12
+ /** Five-number summary + `n` of the finite values (empty → `n = 0`). */
13
+ export declare function stat(values: readonly number[]): Stat;
14
+ export interface BuildAnalysisMeta {
15
+ metric: ChainMetric;
16
+ lens: ScoreLens;
17
+ /** Reference goodness; defaults to the global median (authoritative override). */
18
+ baseline?: number | undefined;
19
+ }
20
+ /** Assemble a full {@link ChainEffectAnalysis} from pre-normalized points. */
21
+ export declare function buildAnalysis(points: readonly ChainPoint[], meta: BuildAnalysisMeta): ChainEffectAnalysis;
22
+ /**
23
+ * Descriptive analysis straight from raw scored chains — the non-authoritative
24
+ * fallback used until `dag-ml` emits the native artifact. Drops chains whose
25
+ * score is non-finite (boundary validation).
26
+ */
27
+ export declare function fromScoredChains(chains: readonly ScoredChain[], options: {
28
+ metric: ChainMetric;
29
+ lens: ScoreLens;
30
+ }): ChainEffectAnalysis;
31
+ export interface PositionMatrixOptions {
32
+ /** Default `"phase"` (Early/Mid/Late) — handles variable-length chains. */
33
+ mode?: PositionMode;
34
+ /** Absolute-mode bucket cap; the last bucket is "kth+". Default `5`. */
35
+ maxAbsolute?: number;
36
+ /** Minimum chains per cell; below this the cell is `null`. Default `3`. */
37
+ minCount?: number;
38
+ /** Roles whose ordering defines the "transform stack". Default preprocess/feature/augmentation. */
39
+ roles?: readonly ChainStepRole[];
40
+ /** Restrict/order rows to these tokens; default all tokens of `roles`. */
41
+ tokens?: readonly string[];
42
+ }
43
+ /** Token × position goodness matrix — answers "is MSC better 1st or 2nd?". */
44
+ export declare function positionMatrix(analysis: ChainEffectAnalysis, options?: PositionMatrixOptions): PositionMatrix;
45
+ export interface SequenceMatrixOptions {
46
+ roles?: readonly ChainStepRole[];
47
+ minCount?: number;
48
+ /** Consecutive in the transform stack (vs anywhere-before). Default `false`. */
49
+ adjacentOnly?: boolean;
50
+ tokens?: readonly string[];
51
+ /** Cap the matrix to the top-N tokens by coverage. Default `8`. */
52
+ maxTokens?: number;
53
+ }
54
+ /** Predecessor × successor goodness matrix — answers "MSC after SNV?". */
55
+ export declare function sequenceMatrix(analysis: ChainEffectAnalysis, options?: SequenceMatrixOptions): SequenceMatrix;
56
+ export interface TokenContextsOptions {
57
+ roles?: readonly ChainStepRole[];
58
+ minCount?: number;
59
+ /** Cap each list to the top-K by median goodness. Default: unbounded. */
60
+ topK?: number;
61
+ }
62
+ /** Best/worst neighbours around a focus token (explorer detail panel). */
63
+ export declare function tokenContexts(analysis: ChainEffectAnalysis, focusToken: string, options?: TokenContextsOptions): TokenContexts;
64
+ export interface NodeNeighborsOptions {
65
+ /** Neighbour roles to include. Default: every role present. */
66
+ roles?: readonly ChainStepRole[] | undefined;
67
+ /** Minimum shared chains for a neighbour to appear. Default `1`. */
68
+ minCount?: number;
69
+ /** Keep the top-N neighbours by link weight; the rest fold into "others". Default `9`. */
70
+ maxNeighbors?: number;
71
+ }
72
+ /**
73
+ * Co-occurrence neighbourhood of a focus node: every token that shares a chain
74
+ * with it, weighted by the number of shared chains and scored by the goodness
75
+ * of those shared chains (the *combined* effect). Drives {@link ChainNodeOrbit}.
76
+ * Returns `null` when the focus token is unknown.
77
+ */
78
+ export declare function nodeNeighbors(analysis: ChainEffectAnalysis, focusToken: string, options?: NodeNeighborsOptions): NodeNeighborhood | null;
79
+ export interface NodeFlowOptions {
80
+ /** Step roles to include. Default: every role present. */
81
+ roles?: readonly ChainStepRole[] | undefined;
82
+ /** Minimum chains for a wedge to appear. Default `1`. */
83
+ minCount?: number;
84
+ /** Outward successor levels (1–3). Default `2`. */
85
+ depth?: number;
86
+ /** Keep the top-N children per node; the rest drop. Default `6`. */
87
+ maxPerLevel?: number;
88
+ /** Cap the inner predecessor ring. Default `6`. */
89
+ maxPredecessors?: number;
90
+ }
91
+ /**
92
+ * Directional flow around a focus node: the predecessors that lead into it (one
93
+ * inner ring) and the *real ordered continuations* that follow it, expanded as
94
+ * a bounded successor tree (each path `focus → a → b` is an actual chain
95
+ * sub-sequence that occurred, weighted by its chain count). Drives the
96
+ * multi-ring {@link ChainNodeOrbit} sunburst; returns `null` for an unknown
97
+ * focus.
98
+ */
99
+ export declare function nodeFlow(analysis: ChainEffectAnalysis, focus: string | readonly string[], options?: NodeFlowOptions): NodeFlow | null;
100
+ //# sourceMappingURL=analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/chains/analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,440 @@
1
+ /**
2
+ * Chain-effect analysis — descriptive aggregation over comparable chains.
3
+ *
4
+ * Pure, framework-free. Given {@link ChainPoint}s (goodness already computed by
5
+ * a lens, whether descriptive or authoritative), this derives the per-token
6
+ * effects, the position matrix (early / mid / late, 1st vs 2nd …), the
7
+ * predecessor × successor sequence matrix ("MSC after SNV?"), and per-token
8
+ * neighbour contexts. Every aggregate is a robust median/IQR over goodness and
9
+ * is gated by a minimum sample count so noise is not over-read.
10
+ */
11
+ import { extentOf, fiveNumberSummary, quantileSorted } from "../viz/geometry.js";
12
+ import { computeChainPoints } from "./normalize.js";
13
+ import { CHAIN_ROLE_ORDER, CHAIN_TRANSFORM_ROLES } from "./types.js";
14
+ const EMPTY_STAT = { n: 0, min: NaN, q1: NaN, median: NaN, q3: NaN, max: NaN, mean: NaN };
15
+ /** Five-number summary + `n` of the finite values (empty → `n = 0`). */
16
+ export function stat(values) {
17
+ const finite = values.filter((value) => Number.isFinite(value));
18
+ if (finite.length === 0)
19
+ return { ...EMPTY_STAT };
20
+ return { n: finite.length, ...fiveNumberSummary(finite) };
21
+ }
22
+ function medianOf(values) {
23
+ const finite = values.filter((value) => Number.isFinite(value)).slice().sort((a, b) => a - b);
24
+ return quantileSorted(finite, 0.5);
25
+ }
26
+ function uniqueRolesInOrder(points) {
27
+ const present = new Set();
28
+ for (const point of points)
29
+ for (const token of point.orderedTokens)
30
+ present.add(token.role);
31
+ return CHAIN_ROLE_ORDER.filter((role) => present.has(role));
32
+ }
33
+ function uniqueSorted(values) {
34
+ return [...new Set(values)].sort((a, b) => a.localeCompare(b));
35
+ }
36
+ /** Assemble a full {@link ChainEffectAnalysis} from pre-normalized points. */
37
+ export function buildAnalysis(points, meta) {
38
+ const goodness = points.map((point) => point.goodness);
39
+ const baseline = Number.isFinite(meta.baseline) ? meta.baseline : medianOf(goodness);
40
+ const total = points.length;
41
+ const catalog = new Map();
42
+ for (const point of points) {
43
+ for (const token of point.orderedTokens) {
44
+ if (!catalog.has(token.token))
45
+ catalog.set(token.token, token);
46
+ }
47
+ }
48
+ const tokens = [];
49
+ for (const [token, ref] of catalog) {
50
+ const withValues = [];
51
+ const withoutValues = [];
52
+ for (const point of points) {
53
+ (point.tokens.includes(token) ? withValues : withoutValues).push(point.goodness);
54
+ }
55
+ const withStat = stat(withValues);
56
+ const withoutStat = stat(withoutValues);
57
+ const delta = withStat.n > 0 && withoutStat.n > 0 ? withStat.median - withoutStat.median : NaN;
58
+ tokens.push({
59
+ token,
60
+ label: ref.label,
61
+ role: ref.role,
62
+ n: withStat.n,
63
+ coverage: total > 0 ? withStat.n / total : 0,
64
+ with: withStat,
65
+ without: withoutStat,
66
+ delta,
67
+ });
68
+ }
69
+ tokens.sort((a, b) => {
70
+ const av = Number.isFinite(a.delta);
71
+ const bv = Number.isFinite(b.delta);
72
+ if (av !== bv)
73
+ return av ? -1 : 1;
74
+ if (av && bv && a.delta !== b.delta)
75
+ return b.delta - a.delta;
76
+ return b.coverage - a.coverage;
77
+ });
78
+ return {
79
+ lens: meta.lens,
80
+ metric: meta.metric,
81
+ total,
82
+ datasets: uniqueSorted(points.map((point) => point.dataset)),
83
+ sources: uniqueSorted(points.map((point) => point.source)),
84
+ roles: uniqueRolesInOrder(points),
85
+ baseline,
86
+ goodnessExtent: extentOf(goodness),
87
+ points: points.slice(),
88
+ tokens,
89
+ };
90
+ }
91
+ /**
92
+ * Descriptive analysis straight from raw scored chains — the non-authoritative
93
+ * fallback used until `dag-ml` emits the native artifact. Drops chains whose
94
+ * score is non-finite (boundary validation).
95
+ */
96
+ export function fromScoredChains(chains, options) {
97
+ const valid = chains.filter((chain) => Number.isFinite(chain.score));
98
+ const points = computeChainPoints(valid, options.metric, options.lens);
99
+ return buildAnalysis(points, { metric: options.metric, lens: options.lens });
100
+ }
101
+ // --- position -------------------------------------------------------------
102
+ const PHASE_BUCKETS = [
103
+ { key: "early", label: "Early" },
104
+ { key: "mid", label: "Mid" },
105
+ { key: "late", label: "Late" },
106
+ ];
107
+ function ordinalLabel(index1) {
108
+ const suffixes = ["th", "st", "nd", "rd"];
109
+ const mod100 = index1 % 100;
110
+ const suffix = suffixes[(mod100 - 20) % 10] ?? suffixes[mod100] ?? suffixes[0];
111
+ return `${index1}${suffix}`;
112
+ }
113
+ function absoluteBuckets(max) {
114
+ const buckets = [];
115
+ for (let i = 1; i < max; i += 1)
116
+ buckets.push({ key: `p${i}`, label: ordinalLabel(i) });
117
+ buckets.push({ key: `p${max}+`, label: `${ordinalLabel(max)}+` });
118
+ return buckets;
119
+ }
120
+ function phaseIndex(idx, length) {
121
+ if (length <= 1)
122
+ return 0;
123
+ const rel = idx / (length - 1);
124
+ if (rel < 1 / 3)
125
+ return 0;
126
+ if (rel > 2 / 3)
127
+ return 2;
128
+ return 1;
129
+ }
130
+ /** Token × position goodness matrix — answers "is MSC better 1st or 2nd?". */
131
+ export function positionMatrix(analysis, options = {}) {
132
+ const mode = options.mode ?? "phase";
133
+ const maxAbsolute = Math.max(2, Math.trunc(options.maxAbsolute ?? 5));
134
+ const minCount = Math.max(1, Math.trunc(options.minCount ?? 3));
135
+ const roles = options.roles ?? CHAIN_TRANSFORM_ROLES;
136
+ const roleSet = new Set(roles);
137
+ const buckets = mode === "absolute" ? absoluteBuckets(maxAbsolute) : [...PHASE_BUCKETS];
138
+ const byToken = new Map(analysis.tokens.map((token) => [token.token, token]));
139
+ const tokenOrder = options.tokens
140
+ ? options.tokens.filter((token) => byToken.has(token))
141
+ : analysis.tokens.filter((token) => roleSet.has(token.role)).map((token) => token.token);
142
+ const rows = tokenOrder.map((token) => {
143
+ const ref = byToken.get(token);
144
+ const perBucket = buckets.map(() => []);
145
+ for (const point of analysis.points) {
146
+ const stack = point.orderedTokens.filter((entry) => roleSet.has(entry.role));
147
+ const idx = stack.findIndex((entry) => entry.token === token);
148
+ if (idx < 0)
149
+ continue;
150
+ const bucket = mode === "absolute" ? Math.min(idx, maxAbsolute - 1) : phaseIndex(idx, stack.length);
151
+ perBucket[bucket].push(point.goodness);
152
+ }
153
+ const cells = perBucket.map((values) => {
154
+ const summary = stat(values);
155
+ return summary.n >= minCount ? summary : null;
156
+ });
157
+ return { token, label: ref.label, role: ref.role, cells };
158
+ });
159
+ return { mode, buckets, rows, baseline: analysis.baseline };
160
+ }
161
+ /** Predecessor × successor goodness matrix — answers "MSC after SNV?". */
162
+ export function sequenceMatrix(analysis, options = {}) {
163
+ const roles = options.roles ?? CHAIN_TRANSFORM_ROLES;
164
+ const roleSet = new Set(roles);
165
+ const minCount = Math.max(1, Math.trunc(options.minCount ?? 3));
166
+ const adjacentOnly = options.adjacentOnly ?? false;
167
+ const maxTokens = Math.max(2, Math.trunc(options.maxTokens ?? 8));
168
+ const byToken = new Map(analysis.tokens.map((token) => [token.token, token]));
169
+ const selected = options.tokens
170
+ ? options.tokens.filter((token) => byToken.has(token))
171
+ : analysis.tokens
172
+ .filter((token) => roleSet.has(token.role))
173
+ .slice()
174
+ .sort((a, b) => b.coverage - a.coverage)
175
+ .slice(0, maxTokens)
176
+ .map((token) => token.token);
177
+ const refs = selected.map((token) => {
178
+ const effect = byToken.get(token);
179
+ return { token: effect.token, label: effect.label, role: effect.role };
180
+ });
181
+ const colIndex = new Map(refs.map((ref, index) => [ref.token, index]));
182
+ const size = refs.length;
183
+ const buckets = refs.map(() => refs.map(() => []));
184
+ for (const point of analysis.points) {
185
+ const fullIndex = new Map();
186
+ point.orderedTokens.forEach((entry, index) => {
187
+ if (colIndex.has(entry.token))
188
+ fullIndex.set(entry.token, index);
189
+ });
190
+ const stack = point.orderedTokens.filter((entry) => roleSet.has(entry.role));
191
+ const stackPos = new Map();
192
+ stack.forEach((entry, index) => {
193
+ if (colIndex.has(entry.token))
194
+ stackPos.set(entry.token, index);
195
+ });
196
+ for (let i = 0; i < size; i += 1) {
197
+ const a = refs[i].token;
198
+ const posA = fullIndex.get(a);
199
+ if (posA === undefined)
200
+ continue;
201
+ for (let j = 0; j < size; j += 1) {
202
+ if (i === j)
203
+ continue;
204
+ const b = refs[j].token;
205
+ const posB = fullIndex.get(b);
206
+ if (posB === undefined)
207
+ continue;
208
+ const before = adjacentOnly
209
+ ? stackPos.get(b) === (stackPos.get(a) ?? -2) + 1
210
+ : posA < posB;
211
+ if (before)
212
+ buckets[i][j].push(point.goodness);
213
+ }
214
+ }
215
+ }
216
+ const cells = buckets.map((row, i) => row.map((values, j) => {
217
+ if (i === j)
218
+ return null;
219
+ const summary = stat(values);
220
+ return summary.n >= minCount ? summary : null;
221
+ }));
222
+ return { tokens: refs, cells, baseline: analysis.baseline, adjacentOnly };
223
+ }
224
+ /** Best/worst neighbours around a focus token (explorer detail panel). */
225
+ export function tokenContexts(analysis, focusToken, options = {}) {
226
+ const roles = options.roles ?? CHAIN_TRANSFORM_ROLES;
227
+ const roleSet = new Set(roles);
228
+ const minCount = Math.max(1, Math.trunc(options.minCount ?? 3));
229
+ const byToken = new Map(analysis.tokens.map((token) => [token.token, token]));
230
+ const predValues = new Map();
231
+ const succValues = new Map();
232
+ for (const point of analysis.points) {
233
+ const focusIdx = point.orderedTokens.findIndex((entry) => entry.token === focusToken);
234
+ if (focusIdx < 0)
235
+ continue;
236
+ point.orderedTokens.forEach((entry, index) => {
237
+ if (entry.token === focusToken || !roleSet.has(entry.role))
238
+ return;
239
+ const target = index < focusIdx ? predValues : succValues;
240
+ const bucket = target.get(entry.token);
241
+ if (bucket)
242
+ bucket.push(point.goodness);
243
+ else
244
+ target.set(entry.token, [point.goodness]);
245
+ });
246
+ }
247
+ const build = (values) => {
248
+ const rows = [];
249
+ for (const [token, list] of values) {
250
+ const summary = stat(list);
251
+ if (summary.n < minCount)
252
+ continue;
253
+ const ref = byToken.get(token);
254
+ rows.push({
255
+ token,
256
+ label: ref?.label ?? token,
257
+ role: ref?.role ?? "other",
258
+ stat: summary,
259
+ delta: summary.median - analysis.baseline,
260
+ });
261
+ }
262
+ rows.sort((a, b) => b.stat.median - a.stat.median);
263
+ return typeof options.topK === "number" ? rows.slice(0, Math.max(0, options.topK)) : rows;
264
+ };
265
+ return { token: focusToken, predecessors: build(predValues), successors: build(succValues) };
266
+ }
267
+ /**
268
+ * Co-occurrence neighbourhood of a focus node: every token that shares a chain
269
+ * with it, weighted by the number of shared chains and scored by the goodness
270
+ * of those shared chains (the *combined* effect). Drives {@link ChainNodeOrbit}.
271
+ * Returns `null` when the focus token is unknown.
272
+ */
273
+ export function nodeNeighbors(analysis, focusToken, options = {}) {
274
+ const focus = analysis.tokens.find((token) => token.token === focusToken);
275
+ if (!focus)
276
+ return null;
277
+ const roleSet = options.roles ? new Set(options.roles) : null;
278
+ const minCount = Math.max(1, Math.trunc(options.minCount ?? 1));
279
+ const maxNeighbors = Math.max(1, Math.trunc(options.maxNeighbors ?? 9));
280
+ const selfValues = [];
281
+ const perNeighbor = new Map();
282
+ for (const point of analysis.points) {
283
+ if (!point.tokens.includes(focusToken))
284
+ continue;
285
+ selfValues.push(point.goodness);
286
+ for (const ref of point.orderedTokens) {
287
+ if (ref.token === focusToken)
288
+ continue;
289
+ if (roleSet && !roleSet.has(ref.role))
290
+ continue;
291
+ const bucket = perNeighbor.get(ref.token);
292
+ if (bucket)
293
+ bucket.push(point.goodness);
294
+ else
295
+ perNeighbor.set(ref.token, [point.goodness]);
296
+ }
297
+ }
298
+ const byToken = new Map(analysis.tokens.map((token) => [token.token, token]));
299
+ const links = [];
300
+ for (const [token, values] of perNeighbor) {
301
+ if (values.length < minCount)
302
+ continue;
303
+ const ref = byToken.get(token);
304
+ const summary = stat(values);
305
+ links.push({
306
+ token,
307
+ label: ref?.label ?? token,
308
+ role: ref?.role ?? "other",
309
+ count: values.length,
310
+ stat: summary,
311
+ delta: summary.median - analysis.baseline,
312
+ });
313
+ }
314
+ links.sort((a, b) => b.count - a.count || b.stat.median - a.stat.median);
315
+ const kept = links.slice(0, maxNeighbors);
316
+ const folded = links.slice(maxNeighbors);
317
+ const otherWeight = folded.reduce((sum, link) => sum + link.count, 0);
318
+ return {
319
+ token: focus.token,
320
+ label: focus.label,
321
+ role: focus.role,
322
+ self: stat(selfValues),
323
+ neighbors: kept,
324
+ otherCount: folded.length,
325
+ otherWeight,
326
+ baseline: analysis.baseline,
327
+ goodnessExtent: analysis.goodnessExtent,
328
+ };
329
+ }
330
+ /**
331
+ * If `path` occurs as an ordered subsequence of `orderedTokens`, return the
332
+ * indices of its first and last matched tokens; otherwise `null`.
333
+ */
334
+ function pathSpan(orderedTokens, path) {
335
+ let pi = 0;
336
+ let first = -1;
337
+ let last = -1;
338
+ for (let i = 0; i < orderedTokens.length && pi < path.length; i += 1) {
339
+ if (orderedTokens[i].token === path[pi]) {
340
+ if (pi === 0)
341
+ first = i;
342
+ last = i;
343
+ pi += 1;
344
+ }
345
+ }
346
+ return pi === path.length ? { first, last } : null;
347
+ }
348
+ /**
349
+ * Directional flow around a focus node: the predecessors that lead into it (one
350
+ * inner ring) and the *real ordered continuations* that follow it, expanded as
351
+ * a bounded successor tree (each path `focus → a → b` is an actual chain
352
+ * sub-sequence that occurred, weighted by its chain count). Drives the
353
+ * multi-ring {@link ChainNodeOrbit} sunburst; returns `null` for an unknown
354
+ * focus.
355
+ */
356
+ export function nodeFlow(analysis, focus, options = {}) {
357
+ const path = typeof focus === "string" ? [focus] : focus.slice();
358
+ if (path.length === 0)
359
+ return null;
360
+ const headToken = path[path.length - 1];
361
+ const head = analysis.tokens.find((token) => token.token === headToken);
362
+ if (!head)
363
+ return null;
364
+ const roleSet = options.roles ? new Set(options.roles) : null;
365
+ const minCount = Math.max(1, Math.trunc(options.minCount ?? 1));
366
+ const depth = Math.min(3, Math.max(1, Math.trunc(options.depth ?? 2)));
367
+ const maxPerLevel = Math.max(1, Math.trunc(options.maxPerLevel ?? 6));
368
+ const maxPredecessors = Math.max(1, Math.trunc(options.maxPredecessors ?? 6));
369
+ const byToken = new Map(analysis.tokens.map((token) => [token.token, token]));
370
+ const selfValues = [];
371
+ const predValues = new Map();
372
+ const root = { token: "", values: [], children: new Map() };
373
+ for (const point of analysis.points) {
374
+ const span = pathSpan(point.orderedTokens, path);
375
+ if (!span)
376
+ continue;
377
+ selfValues.push(point.goodness);
378
+ for (let i = 0; i < span.first; i += 1) {
379
+ const entry = point.orderedTokens[i];
380
+ if (roleSet && !roleSet.has(entry.role))
381
+ continue;
382
+ const bucket = predValues.get(entry.token);
383
+ if (bucket)
384
+ bucket.push(point.goodness);
385
+ else
386
+ predValues.set(entry.token, [point.goodness]);
387
+ }
388
+ let node = root;
389
+ let level = 0;
390
+ for (let i = span.last + 1; i < point.orderedTokens.length && level < depth; i += 1) {
391
+ const entry = point.orderedTokens[i];
392
+ if (roleSet && !roleSet.has(entry.role))
393
+ continue;
394
+ let child = node.children.get(entry.token);
395
+ if (!child) {
396
+ child = { token: entry.token, values: [], children: new Map() };
397
+ node.children.set(entry.token, child);
398
+ }
399
+ child.values.push(point.goodness);
400
+ node = child;
401
+ level += 1;
402
+ }
403
+ }
404
+ const linkFrom = (token, values) => {
405
+ const ref = byToken.get(token);
406
+ const summary = stat(values);
407
+ return {
408
+ token,
409
+ label: ref?.label ?? token,
410
+ role: ref?.role ?? "other",
411
+ count: values.length,
412
+ stat: summary,
413
+ delta: summary.median - analysis.baseline,
414
+ };
415
+ };
416
+ const predecessors = [...predValues.entries()]
417
+ .map(([token, values]) => linkFrom(token, values))
418
+ .filter((link) => link.count >= minCount)
419
+ .sort((a, b) => b.count - a.count || b.stat.median - a.stat.median)
420
+ .slice(0, maxPredecessors);
421
+ const convert = (trie) => [...trie.children.values()]
422
+ .filter((child) => child.values.length >= minCount)
423
+ .sort((a, b) => b.values.length - a.values.length)
424
+ .slice(0, maxPerLevel)
425
+ .map((child) => {
426
+ const link = linkFrom(child.token, child.values);
427
+ return { ...link, children: convert(child) };
428
+ });
429
+ return {
430
+ token: head.token,
431
+ label: head.label,
432
+ role: head.role,
433
+ self: stat(selfValues),
434
+ predecessors,
435
+ successors: convert(root),
436
+ baseline: analysis.baseline,
437
+ goodnessExtent: analysis.goodnessExtent,
438
+ };
439
+ }
440
+ //# sourceMappingURL=analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../src/chains/analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Color mapping for the chain-effect explorer.
3
+ *
4
+ * Reuses the canonical nirs4all `viz` teal system as the single source of truth
5
+ * (same hues as {@link file://../viz/PipelineFlow.tsx PipelineFlow} and the DAG
6
+ * viewer), so the explorer sits inside the existing design language. Two color
7
+ * jobs only:
8
+ * - **role identity** → the categorical brand hues (small chips beside a text
9
+ * label, so identity is never color-alone);
10
+ * - **effect polarity** → the brand diverging ramp pivoted on the analysis
11
+ * baseline (better = cool/blue, worse = warm/red, gray at the baseline). The
12
+ * diverging ramp is CVD-safe and every cell also prints its value.
13
+ */
14
+ import type { ChainStepRole } from "./types.js";
15
+ export declare const CHAIN_ROLE_COLORS: Readonly<Record<ChainStepRole, string>>;
16
+ /** Resolve a role color, honoring per-host overrides. */
17
+ export declare function roleColor(role: ChainStepRole, overrides?: Partial<Record<ChainStepRole, string>>): string;
18
+ /**
19
+ * Diverging color for a goodness value relative to the baseline.
20
+ * `value > baseline` (better) → cool/blue; `value < baseline` (worse) → warm/red;
21
+ * `≈ baseline` → neutral gray. `halfRange` sets the saturation span.
22
+ */
23
+ export declare function effectColor(value: number, baseline: number, halfRange: number): string;
24
+ /** Ink for text drawn on top of an {@link effectColor} fill. */
25
+ export declare function effectTextColor(value: number, baseline: number, halfRange: number): string;
26
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/chains/colors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAUhD,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAQrE,CAAC;AAEF,yDAAyD;AACzD,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAEzG;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAOtF;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAK1F"}