nirs4all-ui 0.1.11 → 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,424 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
3
+ import { clamp, round } from "../viz/geometry.js";
4
+ import { cx } from "./_cx.js";
5
+ import { categoryColor, DAG_CATEGORY_LABELS, DAG_EDGE_COLORS } from "./colors.js";
6
+ import { collapseAtDepth, computeEffectiveGraph, defaultCollapsed, } from "./collapse.js";
7
+ import { ancestorGroupIds, buildHierarchy } from "./hierarchy.js";
8
+ import { layoutDag } from "./layout.js";
9
+ import { resolveLabels } from "./locale.js";
10
+ import { GROUP_NODE_PREFIX } from "./collapse.js";
11
+ import { describeShapeDelta, formatShape, shapeChange, SHAPE_CHANGE_STYLE } from "./shape.js";
12
+ import { dagCategory } from "./types.js";
13
+ const MIN_K = 0.04;
14
+ const MAX_K = 2.4;
15
+ const CULL_MARGIN = 160;
16
+ function fitTransform(layout, width, height) {
17
+ if (width <= 0 || height <= 0 || layout.width <= 0 || layout.height <= 0)
18
+ return { x: 0, y: 0, k: 1 };
19
+ const pad = 44;
20
+ const k = clamp(Math.min((width - pad) / layout.width, (height - pad) / layout.height), MIN_K, 1.1);
21
+ return { x: (width - layout.width * k) / 2, y: (height - layout.height * k) / 2, k };
22
+ }
23
+ function worldViewport(t, width, height, margin) {
24
+ return {
25
+ x0: (-t.x - margin) / t.k,
26
+ y0: (-t.y - margin) / t.k,
27
+ x1: (width - t.x + margin) / t.k,
28
+ y1: (height - t.y + margin) / t.k,
29
+ };
30
+ }
31
+ function nodeVisible(ln, v) {
32
+ return ln.x < v.x1 && ln.x + ln.w > v.x0 && ln.y < v.y1 && ln.y + ln.h > v.y0;
33
+ }
34
+ function edgeVisible(e, v) {
35
+ const minX = Math.min(e.sx, e.tx);
36
+ const maxX = Math.max(e.sx, e.tx);
37
+ const minY = Math.min(e.sy, e.ty);
38
+ const maxY = Math.max(e.sy, e.ty);
39
+ return minX < v.x1 && maxX > v.x0 && minY < v.y1 && maxY > v.y0;
40
+ }
41
+ function frameVisible(f, v) {
42
+ return f.x < v.x1 && f.x + f.w > v.x0 && f.y < v.y1 && f.y + f.h > v.y0;
43
+ }
44
+ /**
45
+ * Interactive viewer for a compiled DAG-ML graph of any size. Layered layout,
46
+ * pan / zoom, viewport culling and level-of-detail keep it responsive; the
47
+ * group hierarchy makes it readable at thousands of nodes by collapsing whole
48
+ * clusters into a single super-node. Presentational: local UI state only, no
49
+ * app state / IO / runtime execution.
50
+ */
51
+ export function DagGraphView({ graph, width = 960, height = 620, direction: directionProp = "LR", initialCollapseDepth, title, className, colors, onSelectNode, showMinimap = true, showLegend = true, showInspector = true, showShapes = true, labels: labelsProp, }) {
52
+ const labels = resolveLabels(labelsProp);
53
+ const svgRef = useRef(null);
54
+ const drag = useRef(null);
55
+ const [direction, setDirection] = useState(directionProp);
56
+ const [shapesOn, setShapesOn] = useState(showShapes);
57
+ const hasShapes = useMemo(() => graph.nodes.some((n) => n.io != null), [graph.nodes]);
58
+ const hierarchy = useMemo(() => buildHierarchy(graph), [graph]);
59
+ const initial = useMemo(() => defaultCollapsed(hierarchy, graph.nodes.length, initialCollapseDepth !== undefined ? { depth: initialCollapseDepth } : {}), [hierarchy, graph.nodes.length, initialCollapseDepth]);
60
+ const [collapsed, setCollapsed] = useState(initial.collapsed);
61
+ const [depth, setDepth] = useState(initial.depth);
62
+ const [selected, setSelected] = useState(null);
63
+ const [hovered, setHovered] = useState(null);
64
+ const [query, setQuery] = useState("");
65
+ const [focusId, setFocusId] = useState(null);
66
+ const eff = useMemo(() => computeEffectiveGraph(graph, hierarchy, collapsed), [graph, hierarchy, collapsed]);
67
+ const layout = useMemo(() => layoutDag(eff, { direction, hierarchy }), [eff, direction, hierarchy]);
68
+ const [transform, setTransform] = useState(() => fitTransform(layout, width, height));
69
+ // keep the freshest layout / size available to imperative callbacks
70
+ const layoutRef = useRef(layout);
71
+ layoutRef.current = layout;
72
+ const sizeRef = useRef({ width, height });
73
+ sizeRef.current = { width, height };
74
+ const fit = useCallback(() => {
75
+ setTransform(fitTransform(layoutRef.current, sizeRef.current.width, sizeRef.current.height));
76
+ }, []);
77
+ // reset when the graph itself changes, and re-fit on graph / orientation change
78
+ useEffect(() => {
79
+ setCollapsed(initial.collapsed);
80
+ setDepth(initial.depth);
81
+ setSelected(null);
82
+ onSelectNode?.(null);
83
+ // eslint-disable-next-line react-hooks/exhaustive-deps
84
+ }, [initial]);
85
+ useEffect(() => {
86
+ fit();
87
+ }, [initial, direction, fit]);
88
+ const zoomAt = useCallback((clientX, clientY, factor) => {
89
+ const svg = svgRef.current;
90
+ if (!svg)
91
+ return;
92
+ const rect = svg.getBoundingClientRect();
93
+ const px = clientX - rect.left;
94
+ const py = clientY - rect.top;
95
+ setTransform((t) => {
96
+ const k = clamp(t.k * factor, MIN_K, MAX_K);
97
+ const wx = (px - t.x) / t.k;
98
+ const wy = (py - t.y) / t.k;
99
+ return { k, x: px - wx * k, y: py - wy * k };
100
+ });
101
+ }, []);
102
+ // native, non-passive wheel listener so zoom doesn't scroll the page
103
+ useEffect(() => {
104
+ const svg = svgRef.current;
105
+ if (!svg)
106
+ return;
107
+ const onWheel = (e) => {
108
+ e.preventDefault();
109
+ zoomAt(e.clientX, e.clientY, Math.exp(-e.deltaY * 0.0015));
110
+ };
111
+ svg.addEventListener("wheel", onWheel, { passive: false });
112
+ return () => svg.removeEventListener("wheel", onWheel);
113
+ }, [zoomAt]);
114
+ const centerOn = useCallback((ln) => {
115
+ setTransform((t) => ({
116
+ k: t.k,
117
+ x: sizeRef.current.width / 2 - (ln.x + ln.w / 2) * t.k,
118
+ y: sizeRef.current.height / 2 - (ln.y + ln.h / 2) * t.k,
119
+ }));
120
+ }, []);
121
+ // once a focus target is laid out (after revealing it), center on it
122
+ useEffect(() => {
123
+ if (!focusId)
124
+ return;
125
+ const ln = layout.nodes.find((n) => n.node.id === focusId);
126
+ if (ln) {
127
+ centerOn(ln);
128
+ setFocusId(null);
129
+ }
130
+ }, [focusId, layout, centerOn]);
131
+ const expandGroup = useCallback((groupId) => {
132
+ setCollapsed((prev) => {
133
+ const next = new Set(prev);
134
+ next.delete(groupId);
135
+ for (const child of hierarchy.groups.get(groupId)?.children ?? [])
136
+ next.add(child);
137
+ return next;
138
+ });
139
+ }, [hierarchy]);
140
+ const collapseGroup = useCallback((groupId) => {
141
+ setCollapsed((prev) => {
142
+ const next = new Set(prev);
143
+ next.add(groupId);
144
+ const stack = [...(hierarchy.groups.get(groupId)?.children ?? [])];
145
+ while (stack.length) {
146
+ const child = stack.pop();
147
+ next.delete(child);
148
+ for (const grand of hierarchy.groups.get(child)?.children ?? [])
149
+ stack.push(grand);
150
+ }
151
+ return next;
152
+ });
153
+ }, [hierarchy]);
154
+ const revealNode = useCallback((nodeId) => {
155
+ const ancestors = ancestorGroupIds(hierarchy, nodeId);
156
+ if (ancestors.length === 0)
157
+ return;
158
+ setCollapsed((prev) => {
159
+ const next = new Set(prev);
160
+ for (const g of ancestors)
161
+ next.delete(g);
162
+ return next;
163
+ });
164
+ }, [hierarchy]);
165
+ const applyDepth = useCallback((next) => {
166
+ const clamped = clamp(next, 0, hierarchy.maxDepth + 1);
167
+ setDepth(clamped);
168
+ setCollapsed(collapseAtDepth(hierarchy, clamped));
169
+ }, [hierarchy]);
170
+ const submitSearch = useCallback(() => {
171
+ const q = query.trim().toLowerCase();
172
+ if (!q)
173
+ return;
174
+ const match = graph.nodes.find((n) => n.id.toLowerCase().includes(q) ||
175
+ (n.label ?? "").toLowerCase().includes(q) ||
176
+ (n.kind ?? "").toLowerCase().includes(q));
177
+ if (!match)
178
+ return;
179
+ revealNode(match.id);
180
+ setSelected(match.id);
181
+ onSelectNode?.(match.id);
182
+ setFocusId(match.id);
183
+ }, [query, graph.nodes, revealNode, onSelectNode]);
184
+ const zoomCenter = useCallback((factor) => {
185
+ const rect = svgRef.current?.getBoundingClientRect();
186
+ const cx0 = (rect?.left ?? 0) + sizeRef.current.width / 2;
187
+ const cy0 = (rect?.top ?? 0) + sizeRef.current.height / 2;
188
+ zoomAt(cx0, cy0, factor);
189
+ }, [zoomAt]);
190
+ // Resolve the interactive element under a screen point. Done via
191
+ // elementFromPoint (not the click target) because the stage sets pointer
192
+ // capture for panning, which retargets the browser `click` event to the
193
+ // <svg> itself — so a delegated onClick never sees the node.
194
+ const hitTarget = useCallback((clientX, clientY) => {
195
+ if (typeof document === "undefined")
196
+ return null;
197
+ return document.elementFromPoint(clientX, clientY)?.closest("[data-collapse-group],[data-node-id]") ?? null;
198
+ }, []);
199
+ const activate = useCallback((el) => {
200
+ if (!el) {
201
+ setSelected(null);
202
+ onSelectNode?.(null);
203
+ return;
204
+ }
205
+ const collapseId = el.getAttribute("data-collapse-group");
206
+ if (collapseId) {
207
+ collapseGroup(collapseId);
208
+ return;
209
+ }
210
+ const nodeId = el.getAttribute("data-node-id");
211
+ if (!nodeId)
212
+ return;
213
+ const groupId = el.getAttribute("data-group-id");
214
+ if (groupId) {
215
+ expandGroup(groupId);
216
+ }
217
+ else {
218
+ setSelected(nodeId);
219
+ onSelectNode?.(nodeId);
220
+ }
221
+ }, [collapseGroup, expandGroup, onSelectNode]);
222
+ const onContentOver = useCallback((e) => {
223
+ const el = e.target.closest("[data-node-id]");
224
+ setHovered(el ? el.getAttribute("data-node-id") : null);
225
+ }, []);
226
+ const onStagePointerDown = useCallback((e) => {
227
+ if (e.button !== 0)
228
+ return;
229
+ drag.current = { x: e.clientX, y: e.clientY, moved: false };
230
+ try {
231
+ e.currentTarget.setPointerCapture?.(e.pointerId);
232
+ }
233
+ catch {
234
+ /* no active pointer to capture (e.g. synthetic events) — panning still works */
235
+ }
236
+ }, []);
237
+ const onStagePointerMove = useCallback((e) => {
238
+ const d = drag.current;
239
+ if (!d)
240
+ return;
241
+ const dx = e.clientX - d.x;
242
+ const dy = e.clientY - d.y;
243
+ if (Math.abs(dx) + Math.abs(dy) > 3)
244
+ d.moved = true;
245
+ d.x = e.clientX;
246
+ d.y = e.clientY;
247
+ if (d.moved)
248
+ setTransform((t) => ({ ...t, x: t.x + dx, y: t.y + dy }));
249
+ }, []);
250
+ const onStagePointerUp = useCallback((e) => {
251
+ const d = drag.current;
252
+ drag.current = null;
253
+ try {
254
+ e.currentTarget.releasePointerCapture?.(e.pointerId);
255
+ }
256
+ catch {
257
+ /* pointer was never captured */
258
+ }
259
+ // A pan (moved) is never a click; a stationary press is a click — hit-test
260
+ // the real element under the pointer and expand/collapse/select it.
261
+ if (d && !d.moved)
262
+ activate(hitTarget(e.clientX, e.clientY));
263
+ }, [activate, hitTarget]);
264
+ // adjacency of the effective graph, for hover / selection emphasis
265
+ const incident = useMemo(() => {
266
+ const map = new Map();
267
+ const add = (node, edgeId) => {
268
+ const set = map.get(node) ?? new Set();
269
+ set.add(edgeId);
270
+ map.set(node, set);
271
+ };
272
+ for (const e of eff.edges) {
273
+ add(e.source, e.id);
274
+ add(e.target, e.id);
275
+ }
276
+ return map;
277
+ }, [eff.edges]);
278
+ const focusNode = hovered ?? selected;
279
+ const emphasizedEdges = useMemo(() => (focusNode ? incident.get(focusNode) ?? new Set() : null), [focusNode, incident]);
280
+ const neighborNodes = useMemo(() => {
281
+ if (!focusNode)
282
+ return null;
283
+ const set = new Set([focusNode]);
284
+ for (const e of eff.edges) {
285
+ if (e.source === focusNode)
286
+ set.add(e.target);
287
+ if (e.target === focusNode)
288
+ set.add(e.source);
289
+ }
290
+ return set;
291
+ }, [focusNode, eff.edges]);
292
+ const matches = useMemo(() => {
293
+ const q = query.trim().toLowerCase();
294
+ if (!q)
295
+ return null;
296
+ const set = new Set();
297
+ for (const ln of layout.nodes) {
298
+ const n = ln.node;
299
+ if (n.id.toLowerCase().includes(q) || n.label.toLowerCase().includes(q) || (n.kind ?? "").toLowerCase().includes(q)) {
300
+ set.add(n.id);
301
+ }
302
+ }
303
+ return set;
304
+ }, [query, layout.nodes]);
305
+ const view = worldViewport(transform, width, height, CULL_MARGIN);
306
+ const visFrames = layout.frames.filter((f) => frameVisible(f, view));
307
+ const visEdges = layout.edges.filter((e) => edgeVisible(e, view));
308
+ const visNodes = layout.nodes.filter((ln) => nodeVisible(ln, view));
309
+ const screenNodeH = layout.nodeH * transform.k;
310
+ const lod = screenNodeH >= 26 ? 2 : screenNodeH >= 14 ? 1 : 0;
311
+ const presentCategories = useMemo(() => {
312
+ const set = new Set();
313
+ for (const n of eff.nodes)
314
+ set.add(n.category);
315
+ return [...set];
316
+ }, [eff.nodes]);
317
+ const selectedNode = useMemo(() => (selected ? graph.nodes.find((n) => n.id === selected) ?? null : null), [selected, graph.nodes]);
318
+ const contentTransform = `translate(${round(transform.x)} ${round(transform.y)}) scale(${transform.k.toFixed(4)})`;
319
+ const dim = matches !== null || neighborNodes !== null;
320
+ return (_jsxs("div", { className: cx("n4dag", className), style: { width, position: "relative" }, "data-direction": direction, role: "group", "aria-label": title ?? labels.title, children: [_jsxs("div", { className: "n4dag__toolbar", children: [_jsx("span", { className: "n4dag__title", children: title ?? graph.name ?? labels.title }), _jsxs("span", { className: "n4dag__counts", children: [eff.nodes.length, "/", graph.nodes.length, " ", labels.nodesVisible, " \u00B7 ", eff.edges.length, " ", labels.edges] }), _jsx("span", { className: "n4dag__spacer" }), _jsx("form", { className: "n4dag__search", onSubmit: (e) => {
321
+ e.preventDefault();
322
+ submitSearch();
323
+ }, children: _jsx("input", { className: "n4dag__search-input", type: "search", value: query, placeholder: labels.search, "aria-label": labels.search, onChange: (e) => setQuery(e.target.value) }) }), _jsxs("div", { className: "n4dag__group", role: "group", "aria-label": labels.depth, children: [_jsx("button", { className: "n4dag__btn", type: "button", onClick: () => applyDepth(depth - 1), "aria-label": `${labels.collapseAll} (−1)`, title: `${labels.depth} −`, children: "\u2212" }), _jsxs("span", { className: "n4dag__depth", "aria-live": "polite", children: [labels.depth, " ", Math.min(depth, hierarchy.maxDepth + 1)] }), _jsx("button", { className: "n4dag__btn", type: "button", onClick: () => applyDepth(depth + 1), "aria-label": `${labels.expandAll} (+1)`, title: `${labels.depth} +`, children: "+" })] }), _jsx("button", { className: "n4dag__btn n4dag__btn--text", type: "button", onClick: () => applyDepth(0), title: labels.collapseAll, children: labels.collapseAll }), _jsx("button", { className: "n4dag__btn n4dag__btn--text", type: "button", onClick: () => applyDepth(hierarchy.maxDepth + 1), title: labels.expandAll, children: labels.expandAll }), hasShapes ? (_jsx("button", { className: cx("n4dag__btn", "n4dag__btn--text", shapesOn && "n4dag__btn--on"), type: "button", "aria-pressed": shapesOn, onClick: () => setShapesOn((v) => !v), title: labels.shapes, children: labels.shapes })) : null, _jsx("button", { className: "n4dag__btn n4dag__btn--text", type: "button", onClick: () => setDirection((d) => (d === "LR" ? "TB" : "LR")), title: labels.direction, children: direction }), _jsxs("div", { className: "n4dag__group", role: "group", "aria-label": "zoom", children: [_jsx("button", { className: "n4dag__btn", type: "button", onClick: () => zoomCenter(1 / 1.25), "aria-label": labels.zoomOut, children: "\u2212" }), _jsx("button", { className: "n4dag__btn", type: "button", onClick: fit, title: labels.fit, "aria-label": labels.fit, children: "\u2922" }), _jsx("button", { className: "n4dag__btn", type: "button", onClick: () => zoomCenter(1.25), "aria-label": labels.zoomIn, children: "+" })] })] }), _jsxs("div", { className: "n4dag__stage", style: { height }, children: [_jsxs("svg", { ref: svgRef, className: "n4dag__canvas", width: width, height: height, viewBox: `0 0 ${width} ${height}`, role: "application", "aria-label": title ?? labels.title, onPointerDown: onStagePointerDown, onPointerMove: onStagePointerMove, onPointerUp: onStagePointerUp, children: [_jsx("defs", { children: _jsx("marker", { id: "n4dag-arrow", viewBox: "0 0 8 8", refX: "7", refY: "4", markerWidth: "6", markerHeight: "6", orient: "auto-start-reverse", children: _jsx("path", { d: "M0,0 L8,4 L0,8 z", className: "n4dag__arrowhead" }) }) }), layout.nodes.length === 0 ? (_jsx("text", { className: "n4dag__empty", x: width / 2, y: height / 2, textAnchor: "middle", children: labels.emptyGraph })) : null, _jsxs("g", { transform: contentTransform, onMouseOver: onContentOver, onMouseLeave: () => setHovered(null), children: [visFrames.map((f) => (_jsxs("g", { className: "n4dag__frame", "data-depth": f.depth, children: [_jsx("rect", { className: "n4dag__frame-box", x: f.x, y: f.y, width: f.w, height: f.h, rx: 12 }), _jsxs("g", { className: "n4dag__frame-header", "data-collapse-group": f.id, role: "button", tabIndex: -1, "aria-label": `${labels.collapseAll}: ${f.label}`, children: [_jsx("rect", { x: f.x, y: f.y, width: Math.min(f.w, Math.max(64, f.label.length * 7 + 26)), height: 18, rx: 9, className: "n4dag__frame-tab" }), _jsxs("text", { className: "n4dag__frame-label", x: f.x + 10, y: f.y + 13, children: ["\u2212 ", f.label] })] })] }, `f-${f.id}`))), _jsx("g", { className: "n4dag__edges", fill: "none", children: visEdges.map((e) => {
324
+ const emphasized = emphasizedEdges?.has(e.edge.id) ?? false;
325
+ const dimmed = dim && !emphasized;
326
+ return (_jsx("path", { className: cx("n4dag__edge", e.edge.oof && "n4dag__edge--oof", e.back && "n4dag__edge--back", emphasized && "n4dag__edge--on", dimmed && "n4dag__edge--dim"), d: e.path, stroke: edgeStroke(e.edge, emphasized), strokeWidth: emphasized ? 2.4 : e.edge.oof ? 1.8 : 1.3, markerEnd: lod === 2 ? "url(#n4dag-arrow)" : undefined }, `e-${e.edge.id}`));
327
+ }) }), shapesOn && lod === 2 ? (_jsx("g", { className: "n4dag__edge-shapes", children: visEdges.map((e) => e.edge.shape && e.edge.source.startsWith(GROUP_NODE_PREFIX) && !(dim && !(emphasizedEdges?.has(e.edge.id) ?? false)) ? (_jsx(EdgeShapeLabel, { mx: (e.sx + e.tx) / 2, my: (e.sy + e.ty) / 2, shape: e.edge.shape }, `es-${e.edge.id}`)) : null) })) : null, _jsx("g", { className: "n4dag__nodes", children: visNodes.map((ln) => (_jsx(NodeMark, { ln: ln, direction: direction, lod: lod, colors: colors, shapesOn: shapesOn, selected: selected === ln.node.id, hovered: hovered === ln.node.id, matched: matches?.has(ln.node.id) ?? false, dimmed: dim && !(neighborNodes?.has(ln.node.id) ?? false) && !(matches?.has(ln.node.id) ?? false), labels: labels }, `n-${ln.node.id}`))) })] })] }), showLegend && presentCategories.length > 0 ? (_jsx("div", { className: "n4dag__legend", "aria-label": labels.legend, children: presentCategories.map((c) => (_jsxs("span", { className: "n4dag__legend-item", children: [_jsx("span", { className: "n4dag__legend-swatch", style: { background: categoryColor(c, colors) } }), DAG_CATEGORY_LABELS[c]] }, c))) })) : null, showMinimap && layout.width > 0 ? (_jsx(Minimap, { layout: layout, transform: transform, width: width, height: height, colors: colors, onRecenter: setTransform })) : null, showInspector && selectedNode ? (_jsxs("aside", { className: "n4dag__inspector", "aria-label": selectedNode.label ?? selectedNode.id, children: [_jsx("button", { className: "n4dag__inspector-close", type: "button", onClick: () => {
328
+ setSelected(null);
329
+ onSelectNode?.(null);
330
+ }, "aria-label": labels.close, children: "\u00D7" }), _jsx(NodeInspector, { node: selectedNode, colors: colors, labels: labels })] })) : null] })] }));
331
+ }
332
+ function edgeStroke(edge, emphasized) {
333
+ if (emphasized && edge.kind)
334
+ return DAG_EDGE_COLORS[edge.kind];
335
+ if (edge.oof)
336
+ return DAG_EDGE_COLORS.prediction;
337
+ return "currentColor";
338
+ }
339
+ function EdgeShapeLabel({ mx, my, shape }) {
340
+ const text = formatShape(shape);
341
+ const wpx = text.length * 6.1 + 12;
342
+ return (_jsxs("g", { className: "n4dag__edge-shape", transform: `translate(${round(mx)} ${round(my)})`, children: [_jsx("rect", { className: "n4dag__edge-shape-bg", x: round(-wpx / 2), y: -8, width: round(wpx), height: 16, rx: 5 }), _jsx("text", { className: "n4dag__edge-shape-text", x: 0, y: 4, textAnchor: "middle", children: text })] }));
343
+ }
344
+ function NodeMark({ ln, direction, lod, colors, shapesOn, selected, hovered, matched, dimmed, labels }) {
345
+ const { node, x, y, w, h } = ln;
346
+ const color = categoryColor(node.category, colors);
347
+ const shape = !node.isGroup && shapesOn ? node.outShape : undefined;
348
+ const change = shape ? shapeChange(node.inShapes ?? [], shape) : "none";
349
+ const changeStyle = SHAPE_CHANGE_STYLE[change];
350
+ const hasSub = node.isGroup || !!node.detail || !!shape;
351
+ const active = selected || hovered || matched;
352
+ const dataAttrs = { "data-node-id": node.id };
353
+ if (node.isGroup && node.groupId)
354
+ dataAttrs["data-group-id"] = node.groupId;
355
+ if (lod === 0) {
356
+ return (_jsx("rect", { ...dataAttrs, className: cx("n4dag__node-lod", dimmed && "n4dag__node--dim"), x: x, y: y, width: w, height: h, rx: 3, fill: color, fillOpacity: matched ? 0.95 : 0.62, stroke: selected ? color : "none", strokeWidth: selected ? 3 : 0 }));
357
+ }
358
+ return (_jsxs("g", { ...dataAttrs, className: cx("n4dag__node", node.isGroup && "n4dag__node--group", selected && "n4dag__node--selected", hovered && "n4dag__node--hover", matched && "n4dag__node--match", dimmed && "n4dag__node--dim"), "data-category": node.category, role: "button", "aria-label": node.label, children: [node.isGroup ? (_jsxs(_Fragment, { children: [_jsx("rect", { x: x + 5, y: y + 5, width: w, height: h, rx: 9, className: "n4dag__node-stack", fill: color }), _jsx("rect", { x: x + 2.5, y: y + 2.5, width: w, height: h, rx: 9, className: "n4dag__node-stack", fill: color })] })) : null, _jsx("rect", { className: "n4dag__node-card", x: x, y: y, width: w, height: h, rx: 9, fill: `color-mix(in srgb, ${color} ${node.isGroup ? 20 : 12}%, var(--n4dag-node-bg, #ffffff))`, stroke: color, strokeOpacity: active ? 1 : 0.7, strokeWidth: selected ? 2.2 : active ? 1.6 : 1 }), direction === "LR" ? (_jsx("rect", { className: "n4dag__node-accent", x: x, y: y + 8, width: 4, height: h - 16, rx: 2, fill: color })) : (_jsx("rect", { className: "n4dag__node-accent", x: x + 8, y: y, width: w - 16, height: 4, rx: 2, fill: color })), _jsx("text", { className: "n4dag__node-label", x: x + 14, y: hasSub ? y + h / 2 - 3 : y + h / 2 + 4, children: truncate(node.label, direction === "LR" ? 22 : 20) }), lod === 2 && node.isGroup ? (_jsxs("text", { className: "n4dag__node-sub", x: x + 14, y: y + h / 2 + 12, children: [node.childCount, " ", labels.contains] })) : null, lod === 2 && !node.isGroup && shape ? (_jsxs("text", { className: "n4dag__node-shape", x: x + 14, y: y + h / 2 + 12, fill: changeStyle.tone || undefined, children: [changeStyle.glyph ? `${changeStyle.glyph} ` : "", truncate(formatShape(shape), direction === "LR" ? 22 : 20)] })) : lod === 2 && !node.isGroup && node.detail ? (_jsx("text", { className: "n4dag__node-sub", x: x + 14, y: y + h / 2 + 12, children: truncate(node.detail, direction === "LR" ? 24 : 22) })) : null, node.isGroup ? (_jsx("text", { className: "n4dag__node-expand", x: x + w - 12, y: y + 16, textAnchor: "end", children: "+" })) : null, shape && change !== "none" ? (_jsx("circle", { className: "n4dag__node-port", cx: direction === "LR" ? x + w : x + w / 2, cy: direction === "LR" ? y + h / 2 : y + h, r: 3.5, fill: changeStyle.tone, children: _jsx("title", { children: formatShape(shape) }) })) : null, lod === 2 && node.status ? _jsx("circle", { className: "n4dag__node-status", "data-status": node.status, cx: x + w - 12, cy: y + 12, r: 4 }) : null, lod === 2 && node.variants != null && node.variants > 1 ? (_jsxs("text", { className: "n4dag__node-badge", x: x + w - 10, y: y + h - 8, textAnchor: "end", children: ["\u00D7", node.variants] })) : null] }));
359
+ }
360
+ function Minimap({ layout, transform, width, height, colors, onRecenter }) {
361
+ const boxW = 188;
362
+ const boxH = 128;
363
+ const scale = Math.min(boxW / layout.width, boxH / layout.height);
364
+ const mw = layout.width * scale;
365
+ const mh = layout.height * scale;
366
+ const view = worldViewport(transform, width, height, 0);
367
+ // node dots are static per layout — recompute only when the layout changes,
368
+ // not on every pan/zoom (which only moves the viewport rectangle)
369
+ const dots = useMemo(() => {
370
+ const step = Math.max(1, Math.ceil(layout.nodes.length / 900));
371
+ const out = [];
372
+ layout.nodes.forEach((ln, i) => {
373
+ if (i % step !== 0)
374
+ return;
375
+ out.push({
376
+ id: ln.node.id,
377
+ x: ln.x * scale,
378
+ y: ln.y * scale,
379
+ w: Math.max(1.5, ln.w * scale),
380
+ h: Math.max(1.5, ln.h * scale),
381
+ fill: categoryColor(ln.node.category, colors),
382
+ });
383
+ });
384
+ return out;
385
+ }, [layout, scale, colors]);
386
+ const recenter = (e) => {
387
+ const rect = e.currentTarget.getBoundingClientRect();
388
+ const wx = (e.clientX - rect.left) / scale;
389
+ const wy = (e.clientY - rect.top) / scale;
390
+ onRecenter((t) => ({ k: t.k, x: width / 2 - wx * t.k, y: height / 2 - wy * t.k }));
391
+ };
392
+ return (_jsxs("svg", { className: "n4dag__minimap", width: mw, height: mh, viewBox: `0 0 ${round(mw)} ${round(mh)}`, "aria-hidden": "true", onPointerDown: recenter, onPointerMove: (e) => {
393
+ if (e.buttons === 1)
394
+ recenter(e);
395
+ }, children: [_jsx("rect", { className: "n4dag__minimap-bg", x: 0, y: 0, width: mw, height: mh, rx: 4 }), dots.map((d) => (_jsx("rect", { x: d.x, y: d.y, width: d.w, height: d.h, fill: d.fill, fillOpacity: 0.75 }, d.id))), _jsx("rect", { className: "n4dag__minimap-view", x: round(clamp(view.x0 * scale, 0, mw)), y: round(clamp(view.y0 * scale, 0, mh)), width: round(clamp((view.x1 - view.x0) * scale, 0, mw)), height: round(clamp((view.y1 - view.y0) * scale, 0, mh)) })] }));
396
+ }
397
+ function ShapeRow({ tag, shape, out }) {
398
+ return (_jsxs("div", { className: cx("n4dag__io-row", out && "n4dag__io-row--out"), children: [_jsx("span", { className: "n4dag__io-tag", children: tag }), _jsx("span", { className: "n4dag__io-shape n4dag__mono", children: formatShape(shape) }), shape.representation && shape.representation !== "prediction" ? _jsx("span", { className: "n4dag__io-rep", children: shape.representation }) : null, shape.note ? _jsx("span", { className: "n4dag__io-note", children: shape.note }) : null, shape.sources && shape.sources.length > 1 ? (_jsx("span", { className: "n4dag__io-sources", children: shape.sources.map((s) => `${s.name} (${s.features ?? "?"})`).join(" · ") })) : null] }));
399
+ }
400
+ function NodeInspector({ node, colors, labels }) {
401
+ const color = categoryColor(dagCategory(node.kind), colors);
402
+ const metaEntries = node.meta ? Object.entries(node.meta).slice(0, 12) : [];
403
+ const io = node.io;
404
+ const inputs = io?.in ?? [];
405
+ const delta = io?.out ? describeShapeDelta(inputs, io.out) : null;
406
+ return (_jsxs("div", { className: "n4dag__inspector-body", children: [_jsxs("div", { className: "n4dag__inspector-head", children: [_jsx("span", { className: "n4dag__inspector-dot", style: { background: color } }), _jsx("span", { className: "n4dag__inspector-title", children: node.label ?? node.id })] }), io && (inputs.length > 0 || io.out) ? (_jsxs("div", { className: "n4dag__io", children: [_jsx("div", { className: "n4dag__io-title", children: labels.shape }), inputs.map((s, i) => (_jsx(ShapeRow, { tag: inputs.length > 1 ? `${labels.shapeIn} ${i + 1}` : labels.shapeIn, shape: s }, `in-${i}`))), io.out ? _jsx(ShapeRow, { tag: labels.shapeOut, shape: io.out, out: true }) : null, delta ? _jsx("div", { className: "n4dag__io-delta", children: delta }) : null] })) : null, _jsxs("dl", { className: "n4dag__inspector-dl", children: [_jsxs("div", { children: [_jsx("dt", { children: "id" }), _jsx("dd", { className: "n4dag__mono", children: node.id })] }), node.kind ? (_jsxs("div", { children: [_jsx("dt", { children: "kind" }), _jsx("dd", { children: node.kind })] })) : null, node.detail ? (_jsxs("div", { children: [_jsx("dt", { children: "detail" }), _jsx("dd", { children: node.detail })] })) : null, node.status ? (_jsxs("div", { children: [_jsx("dt", { children: "status" }), _jsx("dd", { children: node.status })] })) : null, node.metric != null ? (_jsxs("div", { children: [_jsx("dt", { children: "metric" }), _jsx("dd", { className: "n4dag__mono", children: node.metric })] })) : null, node.variants != null ? (_jsxs("div", { children: [_jsx("dt", { children: "variants" }), _jsx("dd", { className: "n4dag__mono", children: node.variants })] })) : null, metaEntries.map(([k, v]) => (_jsxs("div", { children: [_jsx("dt", { children: k }), _jsx("dd", { className: "n4dag__mono", children: formatMeta(v) })] }, k)))] })] }));
407
+ }
408
+ function formatMeta(value) {
409
+ if (value === null)
410
+ return "null";
411
+ if (typeof value === "object") {
412
+ try {
413
+ return JSON.stringify(value);
414
+ }
415
+ catch {
416
+ return String(value);
417
+ }
418
+ }
419
+ return String(value);
420
+ }
421
+ function truncate(text, max) {
422
+ return text.length > max ? `${text.slice(0, max - 1)}…` : text;
423
+ }
424
+ //# sourceMappingURL=DagGraphView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DagGraphView.js","sourceRoot":"","sources":["../../src/dag/DagGraphView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function cx(...parts: Array<string | false | null | undefined>): string | undefined;
2
+ //# sourceMappingURL=_cx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_cx.d.ts","sourceRoot":"","sources":["../../src/dag/_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 `dag` domain (not exported from the
2
+ // package barrel). Mirrors the tiny helper used by the viz / lab / datasetBuilder
3
+ // domains so the graph view 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/dag/_cx.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,kFAAkF;AAClF,0EAA0E;AAC1E,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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Collapse a graph against a set of collapsed group ids → the *effective* graph
3
+ * actually drawn.
4
+ *
5
+ * Collapsing a cluster hides all of its leaf nodes and replaces them with a
6
+ * single super-node; every edge that crossed the cluster boundary is re-routed
7
+ * to that super-node, and edges fully inside a collapsed cluster disappear. This
8
+ * is what keeps a 6000-node graph readable: the effective graph shrinks to the
9
+ * clusters the user has chosen to open. Pure + testable — no layout, no React.
10
+ */
11
+ import { type DagCategory, type DagEdgeKind, type DagGraph, type DagShape } from "./types.js";
12
+ import type { DagHierarchy } from "./hierarchy.js";
13
+ /** Prefix distinguishing a collapsed-group super-node id from a real node id. */
14
+ export declare const GROUP_NODE_PREFIX = "grp:";
15
+ export interface EffNode {
16
+ id: string;
17
+ isGroup: boolean;
18
+ category: DagCategory;
19
+ label: string;
20
+ detail?: string;
21
+ kind?: string;
22
+ status?: DagGraph["nodes"][number]["status"];
23
+ variants?: number;
24
+ metric?: number;
25
+ /** Innermost still-visible (expanded) group containing this node, or `null`. */
26
+ containerId: string | null;
27
+ /** Super-nodes only: number of leaf nodes hidden inside. */
28
+ childCount?: number;
29
+ /** Super-nodes only: the collapsed group id (drop `GROUP_NODE_PREFIX`). */
30
+ groupId?: string;
31
+ /** Real nodes only: dataset shape leaving this node. */
32
+ outShape?: DagShape;
33
+ /** Real nodes only: dataset shapes arriving at this node. */
34
+ inShapes?: readonly DagShape[];
35
+ }
36
+ export interface EffEdge {
37
+ id: string;
38
+ source: string;
39
+ target: string;
40
+ kind?: DagEdgeKind;
41
+ oof: boolean;
42
+ /** Number of underlying edges merged into this one. */
43
+ weight: number;
44
+ /** Shape flowing on the wire (the source node's output shape). */
45
+ shape?: DagShape;
46
+ }
47
+ export interface EffectiveGraph {
48
+ nodes: EffNode[];
49
+ edges: EffEdge[];
50
+ }
51
+ /**
52
+ * Compute the effective (collapsed) graph. `collapsed` holds group ids from the
53
+ * {@link DagHierarchy}; an empty set returns the fully-expanded graph.
54
+ */
55
+ export declare function computeEffectiveGraph(graph: DagGraph, hierarchy: DagHierarchy, collapsed: ReadonlySet<string>): EffectiveGraph;
56
+ /** Last `.`/`:`/`/` segment of an id — a readable fallback node label. */
57
+ export declare function shortLabel(id: string): string;
58
+ /**
59
+ * Collapse every cluster at exactly `depth` (deeper ones are hidden inside them,
60
+ * so they need not be listed). `depth < 0` or `depth > maxDepth` → fully
61
+ * expanded. This is the primitive behind the depth stepper and expand/collapse
62
+ * all.
63
+ */
64
+ export declare function collapseAtDepth(hierarchy: DagHierarchy, depth: number): Set<string>;
65
+ export interface DefaultCollapseOptions {
66
+ /** Force a specific collapse depth instead of auto-fitting. */
67
+ depth?: number;
68
+ /** Auto-fit target for the initial visible node count (default 160). */
69
+ targetVisible?: number;
70
+ }
71
+ /**
72
+ * Choose an initial collapse state. With an explicit `depth`, collapse to it.
73
+ * Otherwise pick the most-expanded depth whose visible node count still fits
74
+ * under `targetVisible` — so a small graph opens fully and a 6000-node graph
75
+ * opens as a handful of clusters.
76
+ */
77
+ export declare function defaultCollapsed(hierarchy: DagHierarchy, totalNodes: number, options?: DefaultCollapseOptions): {
78
+ collapsed: Set<string>;
79
+ depth: number;
80
+ };
81
+ //# sourceMappingURL=collapse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collapse.d.ts","sourceRoot":"","sources":["../../src/dag/collapse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAe,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,SAAS,CAAC;AAExC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAqDD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,GAC7B,cAAc,CAkFhB;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAOnF;AAED,MAAM,WAAW,sBAAsB;IACrC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,YAAY,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,sBAA2B,GACnC;IAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAmC3C"}