semiotic 3.0.0-beta.2 → 3.0.0-beta.4

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 (342) hide show
  1. package/CLAUDE.md +93 -753
  2. package/README.md +92 -7
  3. package/ai/dist/componentRegistry.js +26 -0
  4. package/ai/dist/{ai/mcp-server.js → mcp-server.js} +1 -1
  5. package/ai/dist/{ai/renderHOCToSVG.js → renderHOCToSVG.js} +2 -2
  6. package/dist/ChartContainer.d.ts +60 -0
  7. package/dist/DetailsPanel.d.ts +37 -0
  8. package/dist/LinkedCharts.d.ts +2 -0
  9. package/dist/Tooltip/Tooltip.d.ts +2 -2
  10. package/dist/charts/index.d.ts +1 -1
  11. package/dist/charts/ordinal/BarChart.d.ts +1 -0
  12. package/dist/charts/ordinal/BoxPlot.d.ts +1 -0
  13. package/dist/charts/ordinal/DonutChart.d.ts +1 -0
  14. package/dist/charts/ordinal/DotPlot.d.ts +1 -0
  15. package/dist/charts/ordinal/GroupedBarChart.d.ts +1 -0
  16. package/dist/charts/ordinal/Histogram.d.ts +1 -0
  17. package/dist/charts/ordinal/PieChart.d.ts +1 -0
  18. package/dist/charts/ordinal/RidgelinePlot.d.ts +1 -0
  19. package/dist/charts/ordinal/StackedBarChart.d.ts +1 -0
  20. package/dist/charts/ordinal/SwarmPlot.d.ts +1 -0
  21. package/dist/charts/ordinal/ViolinPlot.d.ts +1 -0
  22. package/dist/charts/realtime/RealtimeHeatmap.d.ts +11 -0
  23. package/dist/charts/realtime/RealtimeHistogram.d.ts +15 -1
  24. package/dist/charts/realtime/RealtimeLineChart.d.ts +6 -0
  25. package/dist/charts/realtime/RealtimeSwarmChart.d.ts +6 -0
  26. package/dist/charts/realtime/RealtimeWaterfallChart.d.ts +6 -0
  27. package/dist/charts/shared/annotationRules.d.ts +3 -0
  28. package/dist/charts/shared/colorUtils.d.ts +17 -11
  29. package/dist/charts/shared/hooks.d.ts +96 -1
  30. package/dist/charts/shared/loess.d.ts +13 -0
  31. package/dist/charts/shared/networkUtils.d.ts +31 -0
  32. package/dist/charts/shared/tooltipUtils.d.ts +16 -0
  33. package/dist/charts/shared/types.d.ts +17 -2
  34. package/dist/charts/shared/validateChartData.d.ts +2 -3
  35. package/dist/charts/shared/validateProps.d.ts +18 -0
  36. package/dist/charts/xy/AreaChart.d.ts +4 -0
  37. package/dist/charts/xy/BubbleChart.d.ts +6 -0
  38. package/dist/charts/xy/Heatmap.d.ts +4 -0
  39. package/dist/charts/xy/LineChart.d.ts +6 -0
  40. package/dist/charts/xy/Scatterplot.d.ts +4 -0
  41. package/dist/charts/xy/StackedAreaChart.d.ts +4 -0
  42. package/dist/data/fromVegaLite.d.ts +48 -0
  43. package/dist/export/chartConfig.d.ts +29 -0
  44. package/dist/export/selectionSerializer.d.ts +20 -0
  45. package/dist/geometry/sankeyLinks.d.ts +1 -1
  46. package/dist/network.min.js +1 -1
  47. package/dist/network.module.min.js +1 -1
  48. package/dist/ordinal.min.js +1 -1
  49. package/dist/ordinal.module.min.js +1 -1
  50. package/dist/realtime/types.d.ts +20 -6
  51. package/dist/realtime.min.js +1 -1
  52. package/dist/realtime.module.min.js +1 -1
  53. package/dist/semiotic-ai.d.ts +14 -0
  54. package/dist/semiotic-ai.min.js +1 -1
  55. package/dist/semiotic-ai.module.min.js +1 -1
  56. package/dist/semiotic-data.d.ts +2 -0
  57. package/dist/semiotic-data.min.js +1 -1
  58. package/dist/semiotic-data.module.min.js +1 -1
  59. package/dist/semiotic-network.d.ts +9 -19
  60. package/dist/semiotic-ordinal.d.ts +12 -14
  61. package/dist/semiotic-xy.d.ts +12 -18
  62. package/dist/semiotic.d.ts +16 -13
  63. package/dist/semiotic.min.js +1 -1
  64. package/dist/semiotic.module.min.js +1 -1
  65. package/dist/server.min.js +1 -1
  66. package/dist/server.module.min.js +1 -1
  67. package/dist/store/ObservationStore.d.ts +61 -0
  68. package/dist/store/SelectionStore.d.ts +9 -1
  69. package/dist/store/ThemeStore.d.ts +6 -1
  70. package/dist/store/TooltipStore.d.ts +3 -1
  71. package/dist/store/createStore.d.ts +4 -1
  72. package/dist/store/useObservation.d.ts +18 -0
  73. package/dist/stream/MarginalGraphics.d.ts +1 -1
  74. package/dist/stream/NetworkPipelineStore.d.ts +44 -0
  75. package/dist/stream/OrdinalCanvasHitTester.d.ts +1 -0
  76. package/dist/stream/OrdinalSVGOverlay.d.ts +6 -2
  77. package/dist/stream/ParticlePool.d.ts +2 -1
  78. package/dist/stream/PipelineStore.d.ts +11 -0
  79. package/dist/stream/SVGOverlay.d.ts +21 -2
  80. package/dist/stream/SceneGraph.d.ts +1 -1
  81. package/dist/stream/networkTypes.d.ts +58 -1
  82. package/dist/stream/ordinalTypes.d.ts +13 -0
  83. package/dist/stream/types.d.ts +14 -0
  84. package/dist/types/annotationTypes.d.ts +10 -0
  85. package/dist/types/networkTypes.d.ts +1 -2
  86. package/dist/xy.min.js +1 -1
  87. package/dist/xy.module.min.js +1 -1
  88. package/package.json +30 -42
  89. package/ai/dist/ai/componentRegistry.js +0 -45
  90. package/ai/dist/src/components/Annotation.js +0 -358
  91. package/ai/dist/src/components/AnnotationLayer/AnnotationLayer.js +0 -369
  92. package/ai/dist/src/components/Axis/Axis.js +0 -374
  93. package/ai/dist/src/components/Axis/axisTitle.js +0 -14
  94. package/ai/dist/src/components/Axis/index.js +0 -7
  95. package/ai/dist/src/components/Axis/summaryGraphic.js +0 -37
  96. package/ai/dist/src/components/Brush.js +0 -84
  97. package/ai/dist/src/components/ChartErrorBoundary.js +0 -91
  98. package/ai/dist/src/components/DividedLine.js +0 -65
  99. package/ai/dist/src/components/Legend.js +0 -140
  100. package/ai/dist/src/components/LinkedCharts.js +0 -95
  101. package/ai/dist/src/components/ThemeProvider.js +0 -79
  102. package/ai/dist/src/components/Tooltip/Tooltip.js +0 -309
  103. package/ai/dist/src/components/TooltipPositioner/index.js +0 -132
  104. package/ai/dist/src/components/annotationLayerBehavior/annotationHandling.js +0 -73
  105. package/ai/dist/src/components/annotationLayerBehavior/d3labeler.js +0 -254
  106. package/ai/dist/src/components/annotationRules/baseRules.js +0 -150
  107. package/ai/dist/src/components/annotationRules/networkframeRules.js +0 -196
  108. package/ai/dist/src/components/annotationRules/xyframeRules.js +0 -297
  109. package/ai/dist/src/components/batchWork.js +0 -35
  110. package/ai/dist/src/components/charts/index.js +0 -109
  111. package/ai/dist/src/components/charts/network/ChordDiagram.js +0 -142
  112. package/ai/dist/src/components/charts/network/CirclePack.js +0 -108
  113. package/ai/dist/src/components/charts/network/ForceDirectedGraph.js +0 -121
  114. package/ai/dist/src/components/charts/network/SankeyDiagram.js +0 -155
  115. package/ai/dist/src/components/charts/network/TreeDiagram.js +0 -110
  116. package/ai/dist/src/components/charts/network/Treemap.js +0 -106
  117. package/ai/dist/src/components/charts/ordinal/BarChart.js +0 -156
  118. package/ai/dist/src/components/charts/ordinal/BoxPlot.js +0 -139
  119. package/ai/dist/src/components/charts/ordinal/DonutChart.js +0 -130
  120. package/ai/dist/src/components/charts/ordinal/DotPlot.js +0 -126
  121. package/ai/dist/src/components/charts/ordinal/GroupedBarChart.js +0 -129
  122. package/ai/dist/src/components/charts/ordinal/Histogram.js +0 -132
  123. package/ai/dist/src/components/charts/ordinal/PieChart.js +0 -128
  124. package/ai/dist/src/components/charts/ordinal/RidgelinePlot.js +0 -130
  125. package/ai/dist/src/components/charts/ordinal/StackedBarChart.js +0 -130
  126. package/ai/dist/src/components/charts/ordinal/SwarmPlot.js +0 -147
  127. package/ai/dist/src/components/charts/ordinal/ViolinPlot.js +0 -138
  128. package/ai/dist/src/components/charts/realtime/RealtimeHeatmap.js +0 -79
  129. package/ai/dist/src/components/charts/realtime/RealtimeHistogram.js +0 -114
  130. package/ai/dist/src/components/charts/realtime/RealtimeLineChart.js +0 -93
  131. package/ai/dist/src/components/charts/realtime/RealtimeSwarmChart.js +0 -105
  132. package/ai/dist/src/components/charts/realtime/RealtimeWaterfallChart.js +0 -106
  133. package/ai/dist/src/components/charts/shared/ChartError.js +0 -72
  134. package/ai/dist/src/components/charts/shared/colorUtils.js +0 -138
  135. package/ai/dist/src/components/charts/shared/formatUtils.js +0 -213
  136. package/ai/dist/src/components/charts/shared/hooks.js +0 -49
  137. package/ai/dist/src/components/charts/shared/legendUtils.js +0 -57
  138. package/ai/dist/src/components/charts/shared/selectionUtils.js +0 -67
  139. package/ai/dist/src/components/charts/shared/tooltipUtils.js +0 -79
  140. package/ai/dist/src/components/charts/shared/types.js +0 -2
  141. package/ai/dist/src/components/charts/shared/validateChartData.js +0 -82
  142. package/ai/dist/src/components/charts/shared/validateProps.js +0 -736
  143. package/ai/dist/src/components/charts/xy/AreaChart.js +0 -230
  144. package/ai/dist/src/components/charts/xy/BubbleChart.js +0 -251
  145. package/ai/dist/src/components/charts/xy/Heatmap.js +0 -235
  146. package/ai/dist/src/components/charts/xy/LineChart.js +0 -307
  147. package/ai/dist/src/components/charts/xy/MinimapChart.js +0 -298
  148. package/ai/dist/src/components/charts/xy/Scatterplot.js +0 -172
  149. package/ai/dist/src/components/charts/xy/ScatterplotMatrix.js +0 -426
  150. package/ai/dist/src/components/charts/xy/StackedAreaChart.js +0 -231
  151. package/ai/dist/src/components/constants/coordinateNames.js +0 -11
  152. package/ai/dist/src/components/constants/frame_props.js +0 -251
  153. package/ai/dist/src/components/data/dataFunctions.js +0 -487
  154. package/ai/dist/src/components/data/multiAccessorUtils.js +0 -14
  155. package/ai/dist/src/components/data/transforms.js +0 -143
  156. package/ai/dist/src/components/data/unflowedFunctions.js +0 -5
  157. package/ai/dist/src/components/export/exportChart.js +0 -121
  158. package/ai/dist/src/components/generic_utilities/functions.js +0 -5
  159. package/ai/dist/src/components/geometry/areaDrawing.js +0 -312
  160. package/ai/dist/src/components/geometry/contourLayout.js +0 -73
  161. package/ai/dist/src/components/geometry/hexbinLayout.js +0 -163
  162. package/ai/dist/src/components/geometry/lineDrawing.js +0 -356
  163. package/ai/dist/src/components/geometry/sankeyLinks.js +0 -331
  164. package/ai/dist/src/components/geometry/summaryLayouts.js +0 -136
  165. package/ai/dist/src/components/index.js +0 -18
  166. package/ai/dist/src/components/processing/InteractionItems.js +0 -223
  167. package/ai/dist/src/components/processing/hierarchyUtils.js +0 -104
  168. package/ai/dist/src/components/processing/layouts/chordLayout.js +0 -58
  169. package/ai/dist/src/components/processing/layouts/forceLayout.js +0 -142
  170. package/ai/dist/src/components/processing/layouts/hierarchyLayout.js +0 -31
  171. package/ai/dist/src/components/processing/layouts/index.js +0 -32
  172. package/ai/dist/src/components/processing/layouts/sankeyLayout.js +0 -96
  173. package/ai/dist/src/components/processing/layouts/simpleLayouts.js +0 -34
  174. package/ai/dist/src/components/processing/layouts/types.js +0 -2
  175. package/ai/dist/src/components/processing/networkDefaults.js +0 -39
  176. package/ai/dist/src/components/realtime/BinAccumulator.js +0 -36
  177. package/ai/dist/src/components/realtime/IncrementalExtent.js +0 -55
  178. package/ai/dist/src/components/realtime/RingBuffer.js +0 -104
  179. package/ai/dist/src/components/realtime/renderers/barRenderer.js +0 -133
  180. package/ai/dist/src/components/realtime/renderers/candlestickRenderer.js +0 -7
  181. package/ai/dist/src/components/realtime/renderers/lineRenderer.js +0 -164
  182. package/ai/dist/src/components/realtime/renderers/swarmRenderer.js +0 -91
  183. package/ai/dist/src/components/realtime/renderers/types.js +0 -2
  184. package/ai/dist/src/components/realtime/renderers/waterfallRenderer.js +0 -163
  185. package/ai/dist/src/components/realtime/types.js +0 -2
  186. package/ai/dist/src/components/semiotic-ai.js +0 -89
  187. package/ai/dist/src/components/semiotic-data.js +0 -12
  188. package/ai/dist/src/components/semiotic-network.js +0 -38
  189. package/ai/dist/src/components/semiotic-ordinal.js +0 -28
  190. package/ai/dist/src/components/semiotic-realtime.js +0 -30
  191. package/ai/dist/src/components/semiotic-server.js +0 -8
  192. package/ai/dist/src/components/semiotic-xy.js +0 -35
  193. package/ai/dist/src/components/semiotic.js +0 -109
  194. package/ai/dist/src/components/server/renderToStaticSVG.js +0 -594
  195. package/ai/dist/src/components/store/SelectionStore.js +0 -91
  196. package/ai/dist/src/components/store/ThemeStore.js +0 -78
  197. package/ai/dist/src/components/store/TooltipStore.js +0 -13
  198. package/ai/dist/src/components/store/createStore.js +0 -81
  199. package/ai/dist/src/components/store/useSelection.js +0 -133
  200. package/ai/dist/src/components/stream/CanvasHitTester.js +0 -164
  201. package/ai/dist/src/components/stream/DataSourceAdapter.js +0 -99
  202. package/ai/dist/src/components/stream/MarginalGraphics.js +0 -266
  203. package/ai/dist/src/components/stream/NetworkCanvasHitTester.js +0 -228
  204. package/ai/dist/src/components/stream/NetworkPipelineStore.js +0 -498
  205. package/ai/dist/src/components/stream/NetworkSVGOverlay.js +0 -70
  206. package/ai/dist/src/components/stream/NetworkSceneGraph.js +0 -38
  207. package/ai/dist/src/components/stream/OrdinalCanvasHitTester.js +0 -146
  208. package/ai/dist/src/components/stream/OrdinalPipelineStore.js +0 -786
  209. package/ai/dist/src/components/stream/OrdinalSVGOverlay.js +0 -130
  210. package/ai/dist/src/components/stream/ParticlePool.js +0 -174
  211. package/ai/dist/src/components/stream/PipelineStore.js +0 -1243
  212. package/ai/dist/src/components/stream/SVGOverlay.js +0 -129
  213. package/ai/dist/src/components/stream/SceneGraph.js +0 -132
  214. package/ai/dist/src/components/stream/StreamNetworkFrame.js +0 -561
  215. package/ai/dist/src/components/stream/StreamOrdinalFrame.js +0 -492
  216. package/ai/dist/src/components/stream/StreamXYFrame.js +0 -590
  217. package/ai/dist/src/components/stream/accessorUtils.js +0 -20
  218. package/ai/dist/src/components/stream/index.js +0 -32
  219. package/ai/dist/src/components/stream/layouts/chordLayoutPlugin.js +0 -352
  220. package/ai/dist/src/components/stream/layouts/forceLayoutPlugin.js +0 -230
  221. package/ai/dist/src/components/stream/layouts/hierarchyLayoutPlugin.js +0 -568
  222. package/ai/dist/src/components/stream/layouts/index.js +0 -28
  223. package/ai/dist/src/components/stream/layouts/sankeyLayoutPlugin.js +0 -245
  224. package/ai/dist/src/components/stream/networkTypes.js +0 -17
  225. package/ai/dist/src/components/stream/ordinalSceneBuilders/barScene.js +0 -126
  226. package/ai/dist/src/components/stream/ordinalSceneBuilders/connectorScene.js +0 -62
  227. package/ai/dist/src/components/stream/ordinalSceneBuilders/pieScene.js +0 -33
  228. package/ai/dist/src/components/stream/ordinalSceneBuilders/pointScene.js +0 -63
  229. package/ai/dist/src/components/stream/ordinalSceneBuilders/statisticalScene.js +0 -278
  230. package/ai/dist/src/components/stream/ordinalSceneBuilders/timelineScene.js +0 -30
  231. package/ai/dist/src/components/stream/ordinalSceneBuilders/types.js +0 -2
  232. package/ai/dist/src/components/stream/ordinalTypes.js +0 -2
  233. package/ai/dist/src/components/stream/renderers/areaCanvasRenderer.js +0 -48
  234. package/ai/dist/src/components/stream/renderers/barCanvasRenderer.js +0 -70
  235. package/ai/dist/src/components/stream/renderers/boxplotCanvasRenderer.js +0 -75
  236. package/ai/dist/src/components/stream/renderers/candlestickCanvasRenderer.js +0 -28
  237. package/ai/dist/src/components/stream/renderers/connectorCanvasRenderer.js +0 -47
  238. package/ai/dist/src/components/stream/renderers/heatmapCanvasRenderer.js +0 -31
  239. package/ai/dist/src/components/stream/renderers/lineCanvasRenderer.js +0 -140
  240. package/ai/dist/src/components/stream/renderers/networkArcRenderer.js +0 -38
  241. package/ai/dist/src/components/stream/renderers/networkCircleRenderer.js +0 -37
  242. package/ai/dist/src/components/stream/renderers/networkEdgeRenderer.js +0 -102
  243. package/ai/dist/src/components/stream/renderers/networkParticleRenderer.js +0 -63
  244. package/ai/dist/src/components/stream/renderers/networkRectRenderer.js +0 -35
  245. package/ai/dist/src/components/stream/renderers/pointCanvasRenderer.js +0 -38
  246. package/ai/dist/src/components/stream/renderers/swarmCanvasRenderer.js +0 -10
  247. package/ai/dist/src/components/stream/renderers/types.js +0 -2
  248. package/ai/dist/src/components/stream/renderers/violinCanvasRenderer.js +0 -47
  249. package/ai/dist/src/components/stream/renderers/waterfallCanvasRenderer.js +0 -38
  250. package/ai/dist/src/components/stream/renderers/wedgeCanvasRenderer.js +0 -33
  251. package/ai/dist/src/components/stream/types.js +0 -2
  252. package/ai/dist/src/components/types/annotationTypes.js +0 -2
  253. package/ai/dist/src/components/types/canvasTypes.js +0 -2
  254. package/ai/dist/src/components/types/generalTypes.js +0 -2
  255. package/ai/dist/src/components/types/interactionTypes.js +0 -2
  256. package/ai/dist/src/components/types/legendTypes.js +0 -2
  257. package/ai/dist/src/components/types/networkTypes.js +0 -2
  258. package/ai/dist/src/components/types/ordinalTypes.js +0 -2
  259. package/ai/dist/src/components/types/xyTypes.js +0 -2
  260. package/ai/dist/src/components/useBoundingRect.js +0 -24
  261. package/ai/dist/src/components/visualizationLayerBehavior/axis.js +0 -301
  262. package/ai/dist/src/components/visualizationLayerBehavior/general.js +0 -435
  263. package/ai/dist/src/setupTests.js +0 -4
  264. package/dist/AnnotationLayer/AnnotationLayer.d.ts +0 -25
  265. package/dist/Axis/Axis.d.ts +0 -7
  266. package/dist/Axis/axisTitle.d.ts +0 -10
  267. package/dist/Axis/index.d.ts +0 -2
  268. package/dist/Axis/summaryGraphic.d.ts +0 -17
  269. package/dist/Brush.d.ts +0 -12
  270. package/dist/DividedLine.d.ts +0 -16
  271. package/dist/TooltipPositioner/index.d.ts +0 -7
  272. package/dist/annotationLayerBehavior/annotationHandling.d.ts +0 -19
  273. package/dist/annotationLayerBehavior/d3labeler.d.ts +0 -9
  274. package/dist/annotationRules/baseRules.d.ts +0 -25
  275. package/dist/annotationRules/networkframeRules.d.ts +0 -48
  276. package/dist/annotationRules/xyframeRules.d.ts +0 -117
  277. package/dist/batchWork.d.ts +0 -6
  278. package/dist/constants/coordinateNames.d.ts +0 -8
  279. package/dist/constants/frame_props.d.ts +0 -13
  280. package/dist/data/dataFunctions.d.ts +0 -45
  281. package/dist/data/multiAccessorUtils.d.ts +0 -1
  282. package/dist/data/unflowedFunctions.d.ts +0 -1
  283. package/dist/generic_utilities/functions.d.ts +0 -1
  284. package/dist/geometry/areaDrawing.d.ts +0 -21
  285. package/dist/geometry/contourLayout.d.ts +0 -6
  286. package/dist/geometry/hexbinLayout.d.ts +0 -7
  287. package/dist/geometry/lineDrawing.d.ts +0 -71
  288. package/dist/geometry/summaryLayouts.d.ts +0 -45
  289. package/dist/index.d.ts +0 -1
  290. package/dist/network.js +0 -7495
  291. package/dist/network.js.map +0 -1
  292. package/dist/network.module.js +0 -7458
  293. package/dist/network.module.js.map +0 -1
  294. package/dist/ordinal.js +0 -6497
  295. package/dist/ordinal.js.map +0 -1
  296. package/dist/ordinal.module.js +0 -6465
  297. package/dist/ordinal.module.js.map +0 -1
  298. package/dist/processing/InteractionItems.d.ts +0 -13
  299. package/dist/processing/hierarchyUtils.d.ts +0 -16
  300. package/dist/processing/layouts/chordLayout.d.ts +0 -2
  301. package/dist/processing/layouts/forceLayout.d.ts +0 -3
  302. package/dist/processing/layouts/hierarchyLayout.d.ts +0 -10
  303. package/dist/processing/layouts/index.d.ts +0 -8
  304. package/dist/processing/layouts/sankeyLayout.d.ts +0 -8
  305. package/dist/processing/layouts/simpleLayouts.d.ts +0 -7
  306. package/dist/processing/layouts/types.d.ts +0 -17
  307. package/dist/processing/networkDefaults.d.ts +0 -36
  308. package/dist/realtime/renderers/barRenderer.d.ts +0 -2
  309. package/dist/realtime/renderers/candlestickRenderer.d.ts +0 -2
  310. package/dist/realtime/renderers/lineRenderer.d.ts +0 -2
  311. package/dist/realtime/renderers/swarmRenderer.d.ts +0 -2
  312. package/dist/realtime.js +0 -7072
  313. package/dist/realtime.js.map +0 -1
  314. package/dist/realtime.module.js +0 -7043
  315. package/dist/realtime.module.js.map +0 -1
  316. package/dist/semiotic-ai.js +0 -13323
  317. package/dist/semiotic-ai.js.map +0 -1
  318. package/dist/semiotic-ai.module.js +0 -13264
  319. package/dist/semiotic-ai.module.js.map +0 -1
  320. package/dist/semiotic-data.js +0 -141
  321. package/dist/semiotic-data.js.map +0 -1
  322. package/dist/semiotic-data.module.js +0 -136
  323. package/dist/semiotic-data.module.js.map +0 -1
  324. package/dist/semiotic.js +0 -16351
  325. package/dist/semiotic.js.map +0 -1
  326. package/dist/semiotic.module.js +0 -16265
  327. package/dist/semiotic.module.js.map +0 -1
  328. package/dist/server.js +0 -5191
  329. package/dist/server.js.map +0 -1
  330. package/dist/server.module.js +0 -5166
  331. package/dist/server.module.js.map +0 -1
  332. package/dist/stream/NetworkSceneGraph.d.ts +0 -14
  333. package/dist/stream/index.d.ts +0 -16
  334. package/dist/types/canvasTypes.d.ts +0 -9
  335. package/dist/types/xyTypes.d.ts +0 -24
  336. package/dist/useBoundingRect.d.ts +0 -2
  337. package/dist/visualizationLayerBehavior/axis.d.ts +0 -36
  338. package/dist/visualizationLayerBehavior/general.d.ts +0 -80
  339. package/dist/xy.js +0 -6993
  340. package/dist/xy.js.map +0 -1
  341. package/dist/xy.module.js +0 -6957
  342. package/dist/xy.module.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"realtime.js","sources":["../src/components/stream/DataSourceAdapter.ts","../src/components/realtime/RingBuffer.ts","../src/components/realtime/IncrementalExtent.ts","../src/components/realtime/BinAccumulator.ts","../src/components/realtime/renderers/waterfallRenderer.ts","../src/components/stream/SceneGraph.ts","../src/components/stream/accessorUtils.ts","../src/components/stream/PipelineStore.ts","../src/components/stream/CanvasHitTester.ts","../src/components/Legend.tsx","../src/components/stream/MarginalGraphics.tsx","../src/components/stream/SVGOverlay.tsx","../src/components/stream/renderers/lineCanvasRenderer.ts","../src/components/stream/renderers/areaCanvasRenderer.ts","../src/components/stream/renderers/pointCanvasRenderer.ts","../src/components/stream/renderers/barCanvasRenderer.ts","../src/components/stream/renderers/swarmCanvasRenderer.ts","../src/components/stream/renderers/waterfallCanvasRenderer.ts","../src/components/stream/renderers/heatmapCanvasRenderer.ts","../src/components/stream/renderers/candlestickCanvasRenderer.ts","../src/components/stream/StreamXYFrame.tsx","../src/components/stream/networkTypes.ts","../src/components/stream/ParticlePool.ts","../src/components/geometry/sankeyLinks.ts","../src/components/stream/layouts/sankeyLayoutPlugin.ts","../src/components/stream/layouts/forceLayoutPlugin.ts","../src/components/stream/layouts/chordLayoutPlugin.ts","../src/components/stream/layouts/hierarchyLayoutPlugin.ts","../src/components/stream/layouts/index.ts","../src/components/stream/NetworkPipelineStore.ts","../src/components/stream/NetworkCanvasHitTester.ts","../src/components/stream/NetworkSVGOverlay.tsx","../src/components/stream/renderers/networkRectRenderer.ts","../src/components/stream/renderers/networkCircleRenderer.ts","../src/components/stream/renderers/networkArcRenderer.ts","../src/components/stream/renderers/networkEdgeRenderer.ts","../src/components/stream/renderers/networkParticleRenderer.ts","../src/components/charts/shared/colorUtils.ts","../src/components/stream/StreamNetworkFrame.tsx","../src/components/charts/shared/selectionUtils.ts","../src/components/store/createStore.tsx","../src/components/store/SelectionStore.ts","../src/components/store/useSelection.ts","../src/components/charts/realtime/RealtimeLineChart.tsx","../src/components/charts/realtime/RealtimeHistogram.tsx","../src/components/charts/realtime/RealtimeSwarmChart.tsx","../src/components/charts/realtime/RealtimeWaterfallChart.tsx","../src/components/charts/realtime/RealtimeHeatmap.tsx"],"sourcesContent":["import type { Changeset } from \"./types\"\n\n/**\n * DataSourceAdapter normalizes all data ingestion paths into uniform changesets:\n *\n * 1. Bounded (props): `data` array → changeset(s) with `bounded: true`\n * 2. Streaming (push): `ref.push()` → micro-changeset with `bounded: false`\n * 3. Hybrid: `data` prop first, then `push()` — seamless transition\n *\n * For large bounded datasets (above CHUNK_THRESHOLD), data is automatically\n * chunked and ingested progressively across multiple animation frames. This\n * keeps the UI responsive while the chart draws incrementally. The first chunk\n * renders immediately so the user sees data right away.\n */\n\n/** Datasets larger than this are chunked for progressive rendering */\nconst CHUNK_THRESHOLD = 5000\n/** Number of items per progressive chunk */\nconst CHUNK_SIZE = 5000\n\nexport type ChangesetCallback<T> = (changeset: Changeset<T>) => void\n\nexport class DataSourceAdapter<T = Record<string, any>> {\n private callback: ChangesetCallback<T>\n private lastBoundedData: T[] | null = null\n private chunkTimer: number = 0\n\n constructor(callback: ChangesetCallback<T>) {\n this.callback = callback\n }\n\n /**\n * Ingest a bounded data array (from props).\n *\n * Small datasets emit a single changeset synchronously.\n * Large datasets (> CHUNK_THRESHOLD) are split into chunks that render\n * progressively: the first chunk fires immediately (bounded: true to\n * reset + seed the buffer), subsequent chunks arrive on successive\n * animation frames (bounded: false so they append without clearing).\n */\n setBoundedData(data: T[]): void {\n if (data === this.lastBoundedData) return\n this.lastBoundedData = data\n\n // Cancel any in-flight progressive ingestion\n if (this.chunkTimer) {\n cancelAnimationFrame(this.chunkTimer)\n this.chunkTimer = 0\n }\n\n if (data.length <= CHUNK_THRESHOLD) {\n // Small dataset — ingest all at once\n this.callback({ inserts: data, bounded: true })\n return\n }\n\n // Large dataset — progressive chunked ingestion.\n // First chunk is bounded: true (resets buffer and sizes it to full length).\n // Subsequent chunks are bounded: false (appends without clearing).\n this.callback({ inserts: data.slice(0, CHUNK_SIZE), bounded: true, totalSize: data.length })\n\n let offset = CHUNK_SIZE\n const scheduleNext = () => {\n if (offset >= data.length) return\n // Check that this is still the active dataset\n if (data !== this.lastBoundedData) return\n\n const end = Math.min(offset + CHUNK_SIZE, data.length)\n this.callback({ inserts: data.slice(offset, end), bounded: false })\n offset = end\n\n if (offset < data.length) {\n this.chunkTimer = requestAnimationFrame(scheduleNext)\n } else {\n this.chunkTimer = 0\n }\n }\n\n this.chunkTimer = requestAnimationFrame(scheduleNext)\n }\n\n /**\n * Push a single datum (streaming mode).\n * Emits a micro-changeset with `bounded: false`.\n */\n push(datum: T): void {\n this.callback({ inserts: [datum], bounded: false })\n }\n\n /**\n * Push multiple data (streaming batch).\n * Emits a single changeset with `bounded: false`.\n */\n pushMany(data: T[]): void {\n if (data.length === 0) return\n this.callback({ inserts: data, bounded: false })\n }\n\n /**\n * Reset the adapter state.\n */\n clear(): void {\n if (this.chunkTimer) {\n cancelAnimationFrame(this.chunkTimer)\n this.chunkTimer = 0\n }\n this.lastBoundedData = null\n }\n}\n","export class RingBuffer<T> {\n private buffer: (T | undefined)[]\n private head: number = 0\n private _size: number = 0\n\n constructor(private _capacity: number) {\n if (_capacity < 1) {\n throw new Error(\"RingBuffer capacity must be at least 1\")\n }\n this.buffer = new Array(_capacity)\n }\n\n push(value: T): T | undefined {\n let evicted: T | undefined\n if (this._size === this._capacity) {\n // Buffer is full — the slot at head is the oldest item\n evicted = this.buffer[this.head]\n } else {\n this._size++\n }\n this.buffer[this.head] = value\n this.head = (this.head + 1) % this._capacity\n return evicted\n }\n\n pushMany(values: T[]): T[] {\n const evicted: T[] = []\n for (const v of values) {\n const e = this.push(v)\n if (e !== undefined) {\n evicted.push(e)\n }\n }\n return evicted\n }\n\n get(index: number): T | undefined {\n if (index < 0 || index >= this._size) return undefined\n const realIndex =\n (this.head - this._size + index + this._capacity) % this._capacity\n return this.buffer[realIndex]\n }\n\n peek(): T | undefined {\n if (this._size === 0) return undefined\n return this.buffer[(this.head - 1 + this._capacity) % this._capacity]\n }\n\n peekOldest(): T | undefined {\n if (this._size === 0) return undefined\n return this.buffer[(this.head - this._size + this._capacity) % this._capacity]\n }\n\n [Symbol.iterator](): Iterator<T> {\n let i = 0\n const self = this\n return {\n next(): IteratorResult<T> {\n if (i >= self._size) return { done: true, value: undefined } as IteratorReturnResult<undefined>\n return { done: false, value: self.get(i++)! }\n }\n }\n }\n\n toArray(): T[] {\n const result: T[] = []\n for (const item of this) {\n result.push(item)\n }\n return result\n }\n\n resize(newCapacity: number): T[] {\n if (newCapacity < 1) {\n throw new Error(\"RingBuffer capacity must be at least 1\")\n }\n const items = this.toArray()\n const evicted: T[] = []\n while (items.length > newCapacity) {\n evicted.push(items.shift()!)\n }\n this._capacity = newCapacity\n this.buffer = new Array(newCapacity)\n this.head = 0\n this._size = 0\n for (const item of items) {\n this.push(item)\n }\n return evicted\n }\n\n clear(): void {\n this.buffer = new Array(this._capacity)\n this.head = 0\n this._size = 0\n }\n\n get size(): number {\n return this._size\n }\n\n get capacity(): number {\n return this._capacity\n }\n\n get full(): boolean {\n return this._size === this._capacity\n }\n}\n","export class IncrementalExtent {\n private _min: number = Infinity\n private _max: number = -Infinity\n private _dirty: boolean = false\n\n push(value: number): void {\n if (Number.isNaN(value)) return\n if (value < this._min) this._min = value\n if (value > this._max) this._max = value\n }\n\n evict(value: number): void {\n if (value === this._min || value === this._max) {\n this._dirty = true\n }\n }\n\n recalculate<T>(\n values: Iterable<T>,\n accessor?: (v: T) => number\n ): void {\n this._min = Infinity\n this._max = -Infinity\n for (const v of values) {\n const n = accessor ? accessor(v) : (v as number)\n if (Number.isNaN(n)) continue\n if (n < this._min) this._min = n\n if (n > this._max) this._max = n\n }\n this._dirty = false\n }\n\n clear(): void {\n this._min = Infinity\n this._max = -Infinity\n this._dirty = false\n }\n\n get extent(): [number, number] {\n return [this._min, this._max]\n }\n\n get min(): number {\n return this._min\n }\n\n get max(): number {\n return this._max\n }\n\n get dirty(): boolean {\n return this._dirty\n }\n}\n","export interface Bin {\n start: number\n end: number\n total: number\n categories: Map<string, number>\n}\n\nexport function computeBins(\n data: Iterable<Record<string, any>>,\n getTime: (d: Record<string, any>) => number,\n getValue: (d: Record<string, any>) => number,\n binSize: number,\n getCategory?: (d: Record<string, any>) => string\n): Map<number, Bin> {\n const bins = new Map<number, Bin>()\n\n for (const d of data) {\n const t = getTime(d)\n const v = getValue(d)\n\n if (t == null || v == null || Number.isNaN(t) || Number.isNaN(v)) continue\n\n const binStart = Math.floor(t / binSize) * binSize\n\n let bin = bins.get(binStart)\n if (!bin) {\n bin = { start: binStart, end: binStart + binSize, total: 0, categories: new Map() }\n bins.set(binStart, bin)\n }\n\n bin.total += v\n\n if (getCategory) {\n const cat = getCategory(d)\n bin.categories.set(cat, (bin.categories.get(cat) || 0) + v)\n }\n }\n\n return bins\n}\n\nexport function computeBinExtent(\n data: Iterable<Record<string, any>>,\n getTime: (d: Record<string, any>) => number,\n getValue: (d: Record<string, any>) => number,\n binSize: number,\n getCategory?: (d: Record<string, any>) => string\n): [number, number] {\n const bins = computeBins(data, getTime, getValue, binSize, getCategory)\n\n if (bins.size === 0) return [0, 0]\n\n let maxTotal = 0\n for (const bin of bins.values()) {\n if (bin.total > maxTotal) maxTotal = bin.total\n }\n\n return [0, maxTotal]\n}\n","import type { RendererFn } from \"./types\"\n\nconst DEFAULT_POSITIVE_COLOR = \"#28a745\"\nconst DEFAULT_NEGATIVE_COLOR = \"#dc3545\"\n\nexport function computeWaterfallExtent(\n data: Iterable<Record<string, any>>,\n getValue: (d: Record<string, any>) => number\n): [number, number] {\n let min = 0\n let max = 0\n let cumulative = 0\n\n for (const d of data) {\n const v = getValue(d)\n if (v == null || Number.isNaN(v)) continue\n cumulative += v\n if (cumulative < min) min = cumulative\n if (cumulative > max) max = cumulative\n }\n\n return [min, max]\n}\n\nexport const waterfallRenderer: RendererFn = (ctx, data, scales, layout, style, accessors, annotations, options) => {\n const { time: timeScale, value: valueScale } = scales\n const { timeAxis, width, height } = layout\n const { time: getTime, value: getValue } = accessors\n const ws = options?.waterfallStyle\n\n const positiveColor = ws?.positiveColor ?? DEFAULT_POSITIVE_COLOR\n const negativeColor = ws?.negativeColor ?? DEFAULT_NEGATIVE_COLOR\n const gap = ws?.gap ?? 1\n const connectorStroke = ws?.connectorStroke\n const connectorWidth = ws?.connectorWidth ?? 1\n const hasStroke = ws?.stroke != null\n if (hasStroke) {\n ctx.strokeStyle = ws!.stroke!\n ctx.lineWidth = ws?.strokeWidth ?? 1\n }\n\n // Collect into array for random access (skip NaN/null values)\n const arr: Record<string, any>[] = []\n for (const d of data) {\n const v = getValue(d)\n if (v == null || Number.isNaN(v)) continue\n arr.push(d)\n }\n\n if (arr.length === 0) return\n\n let baseline = 0\n // Track the end edge of the previous bar and its cumulative value for connectors\n let prevEdge: number | null = null\n let prevCumulative: number | null = null\n\n for (let i = 0; i < arr.length; i++) {\n const d = arr[i]\n const t = getTime(d)\n const delta = getValue(d)\n const cumEnd = baseline + delta\n\n // Compute bar width from time gap to next point\n let barWidthTime: number\n if (i < arr.length - 1) {\n barWidthTime = getTime(arr[i + 1]) - t\n } else if (i > 0) {\n barWidthTime = t - getTime(arr[i - 1])\n } else {\n // Single point fallback: use 0 to trigger pixel fallback\n barWidthTime = 0\n }\n\n ctx.fillStyle = delta >= 0 ? positiveColor : negativeColor\n\n if (timeAxis === \"x\") {\n let rawX0: number, rawX1: number\n\n if (barWidthTime !== 0) {\n rawX0 = timeScale(t)\n rawX1 = timeScale(t + barWidthTime)\n } else {\n rawX0 = timeScale(t)\n rawX1 = rawX0 + width / 10\n }\n\n const x0 = Math.min(rawX0, rawX1) + gap / 2\n const x1 = Math.max(rawX0, rawX1) - gap / 2\n const barWidth = x1 - x0\n if (barWidth <= 0) {\n baseline = cumEnd\n prevEdge = x1\n prevCumulative = cumEnd\n continue\n }\n\n const yBaseline = valueScale(baseline)\n const yTop = valueScale(cumEnd)\n const rectY = Math.min(yBaseline, yTop)\n const rectH = Math.abs(yBaseline - yTop)\n\n // Connector line at the baseline level from previous bar's right edge to this bar's left edge\n if (connectorStroke && prevEdge != null && prevCumulative != null) {\n ctx.save()\n ctx.strokeStyle = connectorStroke\n ctx.lineWidth = connectorWidth\n const connY = valueScale(prevCumulative)\n ctx.beginPath()\n ctx.moveTo(prevEdge, connY)\n ctx.lineTo(x0, connY)\n ctx.stroke()\n ctx.restore()\n if (hasStroke) {\n ctx.strokeStyle = ws!.stroke!\n ctx.lineWidth = ws?.strokeWidth ?? 1\n }\n }\n\n ctx.fillRect(x0, rectY, barWidth, rectH)\n if (hasStroke) ctx.strokeRect(x0, rectY, barWidth, rectH)\n\n prevEdge = x1\n } else {\n // timeAxis === \"y\": horizontal bars\n let rawY0: number, rawY1: number\n\n if (barWidthTime !== 0) {\n rawY0 = timeScale(t)\n rawY1 = timeScale(t + barWidthTime)\n } else {\n rawY0 = timeScale(t)\n rawY1 = rawY0 + height / 10\n }\n\n const y0 = Math.min(rawY0, rawY1) + gap / 2\n const y1 = Math.max(rawY0, rawY1) - gap / 2\n const barHeight = y1 - y0\n if (barHeight <= 0) {\n baseline = cumEnd\n prevEdge = y1\n prevCumulative = cumEnd\n continue\n }\n\n const xBaseline = valueScale(baseline)\n const xEnd = valueScale(cumEnd)\n const rectX = Math.min(xBaseline, xEnd)\n const rectW = Math.abs(xEnd - xBaseline)\n\n // Connector line at the baseline level from previous bar's bottom edge to this bar's top edge\n if (connectorStroke && prevEdge != null && prevCumulative != null) {\n ctx.save()\n ctx.strokeStyle = connectorStroke\n ctx.lineWidth = connectorWidth\n const connX = valueScale(prevCumulative)\n ctx.beginPath()\n ctx.moveTo(connX, prevEdge)\n ctx.lineTo(connX, y0)\n ctx.stroke()\n ctx.restore()\n if (hasStroke) {\n ctx.strokeStyle = ws!.stroke!\n ctx.lineWidth = ws?.strokeWidth ?? 1\n }\n }\n\n ctx.fillRect(rectX, y0, rectW, barHeight)\n if (hasStroke) ctx.strokeRect(rectX, y0, rectW, barHeight)\n\n prevEdge = y1\n }\n\n baseline = cumEnd\n prevCumulative = cumEnd\n }\n}\n","import type {\n SceneNode,\n LineSceneNode,\n AreaSceneNode,\n PointSceneNode,\n RectSceneNode,\n HeatcellSceneNode,\n Style,\n StreamScales,\n StreamLayout\n} from \"./types\"\n\n// ── Scene node builders ────────────────────────────────────────────────\n\nexport function buildLineNode(\n data: Record<string, any>[],\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n style: Style,\n group?: string\n): LineSceneNode {\n const path: [number, number][] = []\n const rawValues: number[] = []\n for (const d of data) {\n const xVal = xGet(d)\n const yVal = yGet(d)\n if (xVal == null || yVal == null || Number.isNaN(xVal) || Number.isNaN(yVal)) continue\n path.push([scales.x(xVal), scales.y(yVal)])\n rawValues.push(yVal)\n }\n return { type: \"line\", path, rawValues, style, datum: data, group }\n}\n\nexport function buildAreaNode(\n data: Record<string, any>[],\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n baselineY: number,\n style: Style,\n group?: string\n): AreaSceneNode {\n const topPath: [number, number][] = []\n const bottomPath: [number, number][] = []\n for (const d of data) {\n const xVal = xGet(d)\n const yVal = yGet(d)\n if (xVal == null || yVal == null || Number.isNaN(xVal) || Number.isNaN(yVal)) continue\n const px = scales.x(xVal)\n topPath.push([px, scales.y(yVal)])\n bottomPath.push([px, scales.y(baselineY)])\n }\n return { type: \"area\", topPath, bottomPath, style, datum: data, group }\n}\n\nexport function buildStackedAreaNodes(\n groups: { key: string; data: Record<string, any>[] }[],\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n styleFn: (group: string, sampleDatum?: Record<string, any>) => Style,\n normalize?: boolean\n): AreaSceneNode[] {\n // Collect all unique x values\n const xSet = new Set<number>()\n for (const g of groups) {\n for (const d of g.data) {\n const x = xGet(d)\n if (x != null && !Number.isNaN(x)) xSet.add(x)\n }\n }\n const xValues = Array.from(xSet).sort((a, b) => a - b)\n\n // Build value lookup per group per x\n const valueMaps: Map<string, Map<number, number>> = new Map()\n for (const g of groups) {\n const m = new Map<number, number>()\n for (const d of g.data) {\n const x = xGet(d)\n const y = yGet(d)\n if (x != null && y != null && !Number.isNaN(x) && !Number.isNaN(y)) {\n m.set(x, (m.get(x) || 0) + y)\n }\n }\n valueMaps.set(g.key, m)\n }\n\n // Compute totals per x for normalization\n let totals: Map<number, number> | undefined\n if (normalize) {\n totals = new Map()\n for (const x of xValues) {\n let sum = 0\n for (const g of groups) {\n sum += valueMaps.get(g.key)?.get(x) || 0\n }\n totals.set(x, sum || 1) // avoid div by 0\n }\n }\n\n // Build stacked area nodes bottom-up\n const nodes: AreaSceneNode[] = []\n const baselines = new Map<number, number>() // x → cumulative y\n for (const x of xValues) baselines.set(x, 0)\n\n for (const g of groups) {\n const vMap = valueMaps.get(g.key)!\n const topPath: [number, number][] = []\n const bottomPath: [number, number][] = []\n\n for (const x of xValues) {\n let rawY = vMap.get(x) || 0\n const base = baselines.get(x)!\n\n if (normalize) {\n const total = totals!.get(x)!\n rawY = rawY / total\n }\n\n const px = scales.x(x)\n bottomPath.push([px, scales.y(base)])\n topPath.push([px, scales.y(base + rawY)])\n baselines.set(x, base + rawY)\n }\n\n nodes.push({\n type: \"area\",\n topPath,\n bottomPath,\n style: styleFn(g.key, g.data[0]),\n datum: g.data,\n group: g.key\n })\n }\n\n return nodes\n}\n\nexport function buildPointNode(\n datum: Record<string, any>,\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n r: number,\n style: Style\n): PointSceneNode | null {\n const xVal = xGet(datum)\n const yVal = yGet(datum)\n if (xVal == null || yVal == null || Number.isNaN(xVal) || Number.isNaN(yVal)) return null\n return {\n type: \"point\",\n x: scales.x(xVal),\n y: scales.y(yVal),\n r,\n style,\n datum\n }\n}\n\nexport function buildRectNode(\n x: number,\n y: number,\n w: number,\n h: number,\n style: Style,\n datum: any,\n group?: string\n): RectSceneNode {\n return { type: \"rect\", x, y, w, h, style, datum, group }\n}\n\nexport function buildHeatcellNode(\n x: number,\n y: number,\n w: number,\n h: number,\n fill: string,\n datum: any\n): HeatcellSceneNode {\n return { type: \"heatcell\", x, y, w, h, fill, datum }\n}\n\n// ── Scene graph container ──────────────────────────────────────────────\n\nexport interface SceneGraphData {\n nodes: SceneNode[]\n version: number\n}\n\nexport function createSceneGraph(): SceneGraphData {\n return { nodes: [], version: 0 }\n}\n\nexport function updateSceneGraph(\n scene: SceneGraphData,\n nodes: SceneNode[]\n): SceneGraphData {\n return { nodes, version: scene.version + 1 }\n}\n","// ── Accessor resolution ────────────────────────────────────────────────\n\nexport function resolveAccessor<T>(\n accessor: string | ((d: T) => number) | undefined,\n fallback: string\n): (d: T) => number {\n if (typeof accessor === \"function\") return (d: T) => +accessor(d)\n const key = accessor || fallback\n return (d: T) => +(d as any)[key]\n}\n\nexport function resolveStringAccessor<T>(\n accessor: string | ((d: T) => string) | undefined,\n fallback?: string\n): ((d: T) => string) | undefined {\n if (typeof accessor === \"function\") return accessor\n if (accessor) return (d: T) => String((d as any)[accessor])\n if (fallback) return (d: T) => String((d as any)[fallback])\n return undefined\n}\n","import { scaleLinear, type ScaleLinear } from \"d3-scale\"\nimport { RingBuffer } from \"../realtime/RingBuffer\"\nimport { IncrementalExtent } from \"../realtime/IncrementalExtent\"\nimport { computeBins, computeBinExtent } from \"../realtime/BinAccumulator\"\nimport { computeWaterfallExtent } from \"../realtime/renderers/waterfallRenderer\"\nimport type {\n Changeset,\n StreamChartType,\n StreamScales,\n StreamLayout,\n SceneNode,\n AreaSceneNode,\n CandlestickSceneNode,\n CandlestickStyle,\n Style,\n ArrowOfTime,\n WindowMode,\n DecayConfig,\n PulseConfig,\n TransitionConfig,\n StalenessConfig\n} from \"./types\"\nimport {\n buildLineNode,\n buildAreaNode,\n buildStackedAreaNodes,\n buildPointNode,\n buildRectNode,\n buildHeatcellNode\n} from \"./SceneGraph\"\nimport { resolveAccessor, resolveStringAccessor } from \"./accessorUtils\"\n\n// ── Axis direction helpers ─────────────────────────────────────────────\n\nfunction getTimeAxis(arrowOfTime: ArrowOfTime): \"x\" | \"y\" {\n return arrowOfTime === \"up\" || arrowOfTime === \"down\" ? \"y\" : \"x\"\n}\n\n// ── PipelineStore config ───────────────────────────────────────────────\n\nexport interface PipelineConfig {\n chartType: StreamChartType\n runtimeMode?: \"streaming\" | \"bounded\"\n windowSize: number\n windowMode: WindowMode\n arrowOfTime: ArrowOfTime\n extentPadding: number\n\n // Accessors\n xAccessor?: string | ((d: any) => number)\n yAccessor?: string | ((d: any) => number)\n timeAccessor?: string | ((d: any) => number)\n valueAccessor?: string | ((d: any) => number)\n colorAccessor?: string | ((d: any) => string)\n sizeAccessor?: string | ((d: any) => number)\n groupAccessor?: string | ((d: any) => string)\n categoryAccessor?: string | ((d: any) => string)\n lineDataAccessor?: string\n\n // Fixed extents (partial: [min] or [min, undefined] to set only min)\n xExtent?: [number | undefined, number | undefined] | [number]\n yExtent?: [number | undefined, number | undefined] | [number]\n sizeRange?: [number, number]\n\n // Bar/heatmap specifics\n binSize?: number\n normalize?: boolean\n\n // Candlestick accessors\n openAccessor?: string | ((d: any) => number)\n highAccessor?: string | ((d: any) => number)\n lowAccessor?: string | ((d: any) => number)\n closeAccessor?: string | ((d: any) => number)\n candlestickStyle?: CandlestickStyle\n\n // Bounds/uncertainty\n boundsAccessor?: string | ((d: any) => number)\n boundsStyle?: any\n\n // Style\n lineStyle?: any\n pointStyle?: (d: any) => Style & { r?: number }\n areaStyle?: (d: any) => Style\n swarmStyle?: { radius?: number; fill?: string; opacity?: number; stroke?: string; strokeWidth?: number }\n colorScheme?: string | string[]\n barColors?: Record<string, string>\n\n // Annotations (threshold coloring uses these)\n annotations?: Record<string, any>[]\n\n // Realtime encoding\n decay?: DecayConfig\n pulse?: PulseConfig\n transition?: TransitionConfig\n staleness?: StalenessConfig\n\n // Streaming heatmap\n heatmapAggregation?: \"count\" | \"sum\" | \"mean\"\n heatmapXBins?: number\n heatmapYBins?: number\n}\n\n// ── PipelineStore ──────────────────────────────────────────────────────\n\nexport class PipelineStore {\n private buffer: RingBuffer<Record<string, any>>\n private xExtent = new IncrementalExtent()\n private yExtent = new IncrementalExtent()\n private config: PipelineConfig\n private growingCap: number\n\n private getX: (d: any) => number\n private getY: (d: any) => number\n private getGroup: ((d: any) => string) | undefined\n private getCategory: ((d: any) => string) | undefined\n private getSize: ((d: any) => number) | undefined\n private getColor: ((d: any) => string) | undefined\n private getBounds: ((d: any) => number) | undefined\n private getOpen: ((d: any) => number) | undefined\n private getHigh: ((d: any) => number) | undefined\n private getLow: ((d: any) => number) | undefined\n private getClose: ((d: any) => number) | undefined\n\n // ── Pulse tracking ──────────────────────────────────────────────────\n private timestampBuffer: RingBuffer<number> | null = null\n\n // ── Transition animation ────────────────────────────────────────────\n activeTransition: { startTime: number; duration: number } | null = null\n private prevPositionMap = new Map<string, { x: number; y: number; w?: number; h?: number; r?: number }>()\n\n // ── Staleness tracking ──────────────────────────────────────────────\n lastIngestTime = 0\n\n scales: StreamScales | null = null\n scene: SceneNode[] = []\n version = 0\n\n constructor(config: PipelineConfig) {\n this.config = config\n this.buffer = new RingBuffer(config.windowSize)\n this.growingCap = config.windowSize\n\n // Resolve accessors based on streaming vs bounded mode.\n // Streaming types use time/value defaults; bounded types use x/y defaults.\n const isStreamingType = [\"bar\", \"swarm\", \"waterfall\"].includes(config.chartType)\n const useStreamingDefaults = isStreamingType || config.runtimeMode === \"streaming\"\n\n if (useStreamingDefaults) {\n this.getX = resolveAccessor(config.timeAccessor || config.xAccessor, \"time\")\n this.getY = resolveAccessor(\n config.valueAccessor || config.yAccessor,\n \"value\"\n )\n } else {\n this.getX = resolveAccessor(config.xAccessor, \"x\")\n this.getY = resolveAccessor(config.yAccessor, \"y\")\n }\n\n this.getGroup = resolveStringAccessor(config.groupAccessor)\n this.getCategory = resolveStringAccessor(config.categoryAccessor)\n this.getSize = config.sizeAccessor\n ? resolveAccessor(config.sizeAccessor, \"size\")\n : undefined\n this.getColor = resolveStringAccessor(config.colorAccessor)\n this.getBounds = config.boundsAccessor\n ? resolveAccessor(config.boundsAccessor, \"bounds\")\n : undefined\n\n // Candlestick accessors\n if (config.chartType === \"candlestick\") {\n this.getOpen = resolveAccessor(config.openAccessor, \"open\")\n this.getHigh = resolveAccessor(config.highAccessor, \"high\")\n this.getLow = resolveAccessor(config.lowAccessor, \"low\")\n this.getClose = resolveAccessor(config.closeAccessor, \"close\")\n }\n\n // Pulse: parallel timestamp buffer\n if (config.pulse) {\n this.timestampBuffer = new RingBuffer(config.windowSize)\n }\n }\n\n /**\n * Process a changeset from DataSourceAdapter.\n * Returns true if the scene needs re-rendering.\n */\n ingest(changeset: Changeset): boolean {\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n this.lastIngestTime = now\n\n if (changeset.bounded) {\n // Full replacement for bounded data\n this.buffer.clear()\n this.xExtent.clear()\n this.yExtent.clear()\n if (this.timestampBuffer) this.timestampBuffer.clear()\n\n // Auto-resize buffer to fit all bounded data.\n // totalSize is set when data is progressively chunked — pre-allocate\n // for the full dataset so subsequent append chunks don't evict.\n const targetSize = changeset.totalSize || changeset.inserts.length\n if (targetSize > this.buffer.capacity) {\n this.buffer.resize(targetSize)\n if (this.timestampBuffer && targetSize > this.timestampBuffer.capacity) {\n this.timestampBuffer.resize(targetSize)\n }\n }\n\n for (const d of changeset.inserts) {\n this.buffer.push(d)\n if (this.timestampBuffer) this.timestampBuffer.push(now)\n this.xExtent.push(this.getX(d))\n if (this.config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n this.yExtent.push(this.getHigh(d))\n this.yExtent.push(this.getLow(d))\n } else {\n this.yExtent.push(this.getY(d))\n }\n }\n } else {\n // Streaming append\n for (const d of changeset.inserts) {\n if (this.config.windowMode === \"growing\" && this.buffer.full) {\n this.growingCap *= 2\n this.buffer.resize(this.growingCap)\n if (this.timestampBuffer) this.timestampBuffer.resize(this.growingCap)\n }\n\n const evicted = this.buffer.push(d)\n if (this.timestampBuffer) this.timestampBuffer.push(now)\n this.xExtent.push(this.getX(d))\n if (this.config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n this.yExtent.push(this.getHigh(d))\n this.yExtent.push(this.getLow(d))\n } else {\n this.yExtent.push(this.getY(d))\n }\n\n if (evicted != null) {\n this.xExtent.evict(this.getX(evicted))\n if (this.config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n this.yExtent.evict(this.getHigh(evicted))\n this.yExtent.evict(this.getLow(evicted))\n } else {\n this.yExtent.evict(this.getY(evicted))\n }\n }\n }\n }\n\n return true\n }\n\n /**\n * Recompute scales and scene graph for the current buffer contents.\n */\n computeScene(layout: StreamLayout): void {\n const { config, buffer } = this\n\n // Recalculate dirty extents\n if (this.xExtent.dirty) {\n this.xExtent.recalculate(buffer, this.getX)\n }\n if (this.yExtent.dirty) {\n if (config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n // Candlestick y-extent spans high→low, not a single y accessor\n this.yExtent.clear()\n for (const d of buffer) {\n this.yExtent.push(this.getHigh(d))\n this.yExtent.push(this.getLow(d))\n }\n } else {\n this.yExtent.recalculate(buffer, this.getY)\n }\n }\n\n // Resolve domains — merge user-specified extents with data extents\n const dataXDomain = this.xExtent.extent\n const dataYDomain = this.yExtent.extent\n let xDomain: [number, number] = config.xExtent\n ? [\n config.xExtent[0] ?? dataXDomain[0],\n config.xExtent[1] ?? dataXDomain[1]\n ]\n : dataXDomain\n let yDomain: [number, number] = config.yExtent\n ? [\n config.yExtent[0] ?? dataYDomain[0],\n config.yExtent[1] ?? dataYDomain[1]\n ]\n : dataYDomain\n\n // Determine if extents are fully user-specified (no padding needed)\n const yFullySpecified = config.yExtent && config.yExtent[0] != null && config.yExtent[1] != null\n const xFullySpecified = config.xExtent && config.xExtent[0] != null && config.xExtent[1] != null\n\n // Chart-type specific extent adjustments\n if (config.chartType === \"stackedarea\" && !yFullySpecified && buffer.size > 0) {\n // Stacked areas: y-extent must cover the cumulative sums, not raw values\n if (config.normalize) {\n // Normalized: all stacks sum to 1.0\n yDomain = [0, 1 + config.extentPadding]\n } else {\n const data = buffer.toArray()\n const groups = this.groupData(data)\n\n // Build per-x-value totals across all groups\n const xTotals = new Map<number, number>()\n for (const g of groups) {\n for (const d of g.data) {\n const x = this.getX(d)\n const y = this.getY(d)\n if (x != null && y != null && !Number.isNaN(x) && !Number.isNaN(y)) {\n xTotals.set(x, (xTotals.get(x) || 0) + y)\n }\n }\n }\n\n let maxStacked = 0\n for (const total of xTotals.values()) {\n if (total > maxStacked) maxStacked = total\n }\n\n const pad = maxStacked > 0 ? maxStacked * config.extentPadding : 1\n yDomain = [0, maxStacked + pad]\n }\n } else if (config.chartType === \"bar\" && config.binSize && !yFullySpecified && buffer.size > 0) {\n const [, maxTotal] = computeBinExtent(\n buffer, this.getX, this.getY, config.binSize, this.getCategory\n )\n yDomain = [0, maxTotal + maxTotal * config.extentPadding]\n } else if (config.chartType === \"waterfall\" && !yFullySpecified && buffer.size > 0) {\n const [minCum, maxCum] = computeWaterfallExtent(buffer, this.getY)\n const range = maxCum - minCum\n const pad = range > 0 ? range * config.extentPadding : 1\n yDomain = [\n Math.min(0, minCum - Math.abs(pad)),\n Math.max(0, maxCum + Math.abs(pad))\n ]\n } else if (!yFullySpecified && yDomain[0] !== Infinity) {\n // Expand extent to include bounds/uncertainty offsets\n if (this.getBounds) {\n const data = buffer.toArray()\n for (const d of data) {\n const y = this.getY(d)\n const offset = this.getBounds(d)\n if (y == null || Number.isNaN(y) || !offset) continue\n if (y + offset > yDomain[1]) yDomain[1] = y + offset\n if (y - offset < yDomain[0]) yDomain[0] = y - offset\n }\n }\n const range = yDomain[1] - yDomain[0]\n const pad = range > 0 ? range * config.extentPadding : 1\n // Only pad the data-derived side; preserve user-specified bounds\n const userMin = config.yExtent?.[0]\n const userMax = config.yExtent?.[1]\n yDomain = [\n userMin != null ? yDomain[0] : yDomain[0] - pad,\n userMax != null ? yDomain[1] : yDomain[1] + pad\n ]\n }\n\n // Handle degenerate extents\n if (xDomain[0] === Infinity || xDomain[1] === -Infinity) xDomain = [0, 1]\n if (yDomain[0] === Infinity || yDomain[1] === -Infinity) yDomain = [0, 1]\n\n // Build scales\n // For streaming charts, use time/value axes based on arrowOfTime\n const isStreaming = config.arrowOfTime !== undefined\n if (isStreaming) {\n const timeAxis = getTimeAxis(config.arrowOfTime)\n if (timeAxis === \"x\") {\n const xRange: [number, number] = config.arrowOfTime === \"right\"\n ? [0, layout.width]\n : [layout.width, 0]\n this.scales = {\n x: scaleLinear().domain(xDomain).range(xRange),\n y: scaleLinear().domain(yDomain).range([layout.height, 0])\n }\n } else {\n const yRange: [number, number] = config.arrowOfTime === \"down\"\n ? [0, layout.height]\n : [layout.height, 0]\n this.scales = {\n x: scaleLinear().domain(yDomain).range([0, layout.width]),\n y: scaleLinear().domain(xDomain).range(yRange)\n }\n }\n } else {\n this.scales = {\n x: scaleLinear().domain(xDomain).range([0, layout.width]),\n y: scaleLinear().domain(yDomain).range([layout.height, 0])\n }\n }\n\n // Snapshot positions for transition animation (before rebuild)\n if (this.config.transition && this.scene.length > 0) {\n this.snapshotPositions()\n }\n\n // Build scene graph based on chart type\n const data = buffer.toArray()\n this.scene = this.buildSceneNodes(layout)\n\n // Apply decay opacity to discrete nodes\n if (this.config.decay) {\n this.applyDecay(this.scene, data)\n }\n\n // Apply pulse glow to discrete nodes\n if (this.config.pulse) {\n this.applyPulse(this.scene, data)\n }\n\n // Start transition animation from old to new positions\n if (this.config.transition && this.prevPositionMap.size > 0) {\n this.startTransition()\n }\n\n this.version++\n }\n\n private buildSceneNodes(layout: StreamLayout): SceneNode[] {\n const { config, buffer, scales } = this\n if (!scales || buffer.size === 0) return []\n\n const data = buffer.toArray()\n\n switch (config.chartType) {\n case \"line\":\n return this.buildLineScene(data)\n case \"area\":\n return this.buildAreaScene(data)\n case \"stackedarea\":\n return this.buildStackedAreaScene(data)\n case \"scatter\":\n case \"bubble\":\n return this.buildPointScene(data)\n case \"heatmap\":\n return this.buildHeatmapScene(data, layout)\n case \"bar\":\n return this.buildBarScene(data)\n case \"swarm\":\n return this.buildSwarmScene(data)\n case \"waterfall\":\n return this.buildWaterfallScene(data, layout)\n case \"candlestick\":\n return this.buildCandlestickScene(data, layout)\n default:\n return []\n }\n }\n\n private buildLineScene(data: Record<string, any>[]): SceneNode[] {\n const groups = this.groupData(data)\n const nodes: SceneNode[] = []\n\n // Extract color thresholds from annotations (if any)\n const colorThresholds = this.config.annotations\n ?.filter((a: any) => a.type === \"threshold\" && a.color)\n .map((a: any) => ({\n value: a.value as number,\n color: a.color as string,\n thresholdType: (a.thresholdType || \"greater\") as \"greater\" | \"lesser\"\n }))\n\n // Build bounds areas first so they render behind lines\n if (this.getBounds) {\n for (const g of groups) {\n const boundsNode = this.buildBoundsForGroup(g.data, g.key)\n if (boundsNode) nodes.push(boundsNode)\n }\n }\n\n for (const g of groups) {\n const style = this.resolveLineStyle(g.key, g.data[0])\n const lineNode = buildLineNode(g.data, this.scales!, this.getX, this.getY, style, g.key)\n // Attach threshold info for the renderer\n if (colorThresholds && colorThresholds.length > 0) {\n lineNode.colorThresholds = colorThresholds\n }\n nodes.push(lineNode)\n }\n\n return nodes\n }\n\n private buildAreaScene(data: Record<string, any>[]): SceneNode[] {\n const groups = this.groupData(data)\n const nodes: SceneNode[] = []\n\n // Use the bottom of the y domain as the baseline so areas fill to the chart edge\n const yDomain = this.scales!.y.domain() as [number, number]\n const baseline = yDomain[0]\n\n for (const g of groups) {\n const style = this.resolveAreaStyle(g.key, g.data[0])\n nodes.push(buildAreaNode(g.data, this.scales!, this.getX, this.getY, baseline, style, g.key))\n }\n\n return nodes\n }\n\n private buildStackedAreaScene(data: Record<string, any>[]): SceneNode[] {\n const groups = this.groupData(data)\n const styleFn = (group: string, sampleDatum?: Record<string, any>) =>\n this.resolveAreaStyle(group, sampleDatum)\n return buildStackedAreaNodes(\n groups,\n this.scales!,\n this.getX,\n this.getY,\n styleFn,\n this.config.normalize\n )\n }\n\n private buildPointScene(data: Record<string, any>[]): SceneNode[] {\n const nodes: SceneNode[] = []\n const defaultR = this.config.chartType === \"bubble\" ? 10 : 5\n const sizeRange = this.config.sizeRange || [3, 15]\n\n // Compute size scale if sizeAccessor is set and no pointStyle handles it\n let sizeScale: ((v: number) => number) | null = null\n if (this.getSize && !this.config.pointStyle) {\n const sizes = data.map(d => this.getSize!(d)).filter(s => s != null && !Number.isNaN(s))\n if (sizes.length > 0) {\n const minSize = Math.min(...sizes)\n const maxSize = Math.max(...sizes)\n sizeScale = (s: number) => {\n if (minSize === maxSize) return (sizeRange[0] + sizeRange[1]) / 2\n return sizeRange[0] + ((s - minSize) / (maxSize - minSize)) * (sizeRange[1] - sizeRange[0])\n }\n }\n }\n\n // Build color map from colorAccessor if no pointStyle handles it\n let colorMap: Map<string, string> | null = null\n if (this.getColor && !this.config.pointStyle) {\n const categories = new Set<string>()\n for (const d of data) {\n const c = this.getColor(d)\n if (c) categories.add(c)\n }\n const palette = Array.isArray(this.config.colorScheme) ? this.config.colorScheme\n : [\"#4e79a7\", \"#f28e2b\", \"#e15759\", \"#76b7b2\", \"#59a14f\", \"#edc948\", \"#b07aa1\", \"#ff9da7\", \"#9c755f\", \"#bab0ac\"]\n colorMap = new Map()\n let ci = 0\n for (const cat of categories) {\n colorMap.set(cat, palette[ci % palette.length])\n ci++\n }\n }\n\n for (const d of data) {\n let style = this.config.pointStyle ? this.config.pointStyle(d) : { fill: \"#4e79a7\", opacity: 0.8 }\n\n // Apply size from accessor if pointStyle doesn't provide it\n let r = style.r || defaultR\n if (sizeScale && this.getSize) {\n const sizeVal = this.getSize(d)\n if (sizeVal != null && !Number.isNaN(sizeVal)) {\n r = sizeScale(sizeVal)\n }\n }\n\n // Apply color from accessor if pointStyle doesn't provide a custom fill\n if (colorMap && this.getColor) {\n const colorVal = this.getColor(d)\n if (colorVal && colorMap.has(colorVal)) {\n style = { ...style, fill: colorMap.get(colorVal)! }\n }\n }\n\n const node = buildPointNode(d, this.scales!, this.getX, this.getY, r, style)\n if (node) nodes.push(node)\n }\n\n return nodes\n }\n\n private buildHeatmapScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n const nodes: SceneNode[] = []\n\n // Streaming heatmap: 2D grid binning with aggregation\n if (this.config.heatmapAggregation) {\n return this.buildStreamingHeatmapScene(data, layout)\n }\n\n const getVal = resolveAccessor(this.config.valueAccessor, \"value\")\n\n // Determine grid dimensions from unique x/y values\n const xSet = new Set<number>()\n const ySet = new Set<number>()\n for (const d of data) {\n xSet.add(this.getX(d))\n ySet.add(this.getY(d))\n }\n\n const xValues = Array.from(xSet).sort((a, b) => a - b)\n const yValues = Array.from(ySet).sort((a, b) => a - b)\n if (xValues.length === 0 || yValues.length === 0) return nodes\n\n const cellW = layout.width / xValues.length\n const cellH = layout.height / yValues.length\n\n // Build value lookup\n const valueMap = new Map<string, { val: number; datum: any }>()\n for (const d of data) {\n const key = `${this.getX(d)}_${this.getY(d)}`\n valueMap.set(key, { val: getVal(d), datum: d })\n }\n\n // Compute value range for color\n let minVal = Infinity\n let maxVal = -Infinity\n for (const { val } of valueMap.values()) {\n if (val < minVal) minVal = val\n if (val > maxVal) maxVal = val\n }\n const valRange = maxVal - minVal || 1\n\n for (let xi = 0; xi < xValues.length; xi++) {\n for (let yi = 0; yi < yValues.length; yi++) {\n const key = `${xValues[xi]}_${yValues[yi]}`\n const entry = valueMap.get(key)\n if (!entry) continue\n\n const t = (entry.val - minVal) / valRange\n // Default to blues interpolation\n const r = Math.round(220 - 180 * t)\n const g = Math.round(220 - 100 * t)\n const b = Math.round(255 - 50 * t)\n const fill = `rgb(${r},${g},${b})`\n\n nodes.push(buildHeatcellNode(\n xi * cellW,\n (yValues.length - 1 - yi) * cellH,\n cellW,\n cellH,\n fill,\n entry.datum\n ))\n }\n }\n\n return nodes\n }\n\n /**\n * Streaming heatmap: discretize continuous x/y into a grid and aggregate.\n */\n private buildStreamingHeatmapScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n const nodes: SceneNode[] = []\n const xBins = this.config.heatmapXBins ?? 20\n const yBins = this.config.heatmapYBins ?? 20\n const agg = this.config.heatmapAggregation ?? \"count\"\n const getVal = resolveAccessor(this.config.valueAccessor, \"value\")\n\n if (!this.scales || data.length === 0) return nodes\n\n const [xMin, xMax] = this.scales.x.domain() as [number, number]\n const [yMin, yMax] = this.scales.y.domain() as [number, number]\n const xRange = xMax - xMin || 1\n const yRange = yMax - yMin || 1\n const xBinSize = xRange / xBins\n const yBinSize = yRange / yBins\n\n // Grid cells: [xi][yi] → { sum, count }\n const grid = new Map<string, { sum: number; count: number; data: any[] }>()\n\n for (const d of data) {\n const xVal = this.getX(d)\n const yVal = this.getY(d)\n const xi = Math.min(Math.floor((xVal - xMin) / xBinSize), xBins - 1)\n const yi = Math.min(Math.floor((yVal - yMin) / yBinSize), yBins - 1)\n if (xi < 0 || yi < 0) continue\n\n const key = `${xi}_${yi}`\n let cell = grid.get(key)\n if (!cell) {\n cell = { sum: 0, count: 0, data: [] }\n grid.set(key, cell)\n }\n cell.count++\n cell.sum += getVal(d)\n cell.data.push(d)\n }\n\n // Compute aggregated values and find range\n let minVal = Infinity\n let maxVal = -Infinity\n const cellValues = new Map<string, number>()\n for (const [key, cell] of grid) {\n let val: number\n switch (agg) {\n case \"sum\": val = cell.sum; break\n case \"mean\": val = cell.count > 0 ? cell.sum / cell.count : 0; break\n default: val = cell.count; break\n }\n cellValues.set(key, val)\n if (val < minVal) minVal = val\n if (val > maxVal) maxVal = val\n }\n const valRange = maxVal - minVal || 1\n\n const cellW = layout.width / xBins\n const cellH = layout.height / yBins\n\n for (const [key, val] of cellValues) {\n const [xiStr, yiStr] = key.split(\"_\")\n const xi = +xiStr\n const yi = +yiStr\n\n const t = (val - minVal) / valRange\n const r = Math.round(220 - 180 * t)\n const g = Math.round(220 - 100 * t)\n const b = Math.round(255 - 50 * t)\n const fill = `rgb(${r},${g},${b})`\n\n const cell = grid.get(key)!\n nodes.push(buildHeatcellNode(\n xi * cellW,\n (yBins - 1 - yi) * cellH,\n cellW,\n cellH,\n fill,\n { xi, yi, value: val, count: cell.count, sum: cell.sum, data: cell.data }\n ))\n }\n\n return nodes\n }\n\n private buildBarScene(data: Record<string, any>[]): SceneNode[] {\n if (!this.config.binSize) return []\n\n const bins = computeBins(data, this.getX, this.getY, this.config.binSize, this.getCategory)\n if (bins.size === 0) return []\n\n // Establish a global category order that is stable across frames.\n // Use barColors keys first (preserves user-specified order), then any\n // additional categories sorted alphabetically. This prevents flicker\n // when bins partially exit the sliding window and their per-category\n // values shrink/disappear — without a fixed order the Map iteration\n // order shifts and stacked segments jump around.\n let categoryOrder: string[] | null = null\n if (this.getCategory) {\n const allCategories = new Set<string>()\n for (const bin of bins.values()) {\n for (const cat of bin.categories.keys()) {\n allCategories.add(cat)\n }\n }\n const colorKeys = this.config.barColors ? Object.keys(this.config.barColors) : []\n const listed = new Set(colorKeys)\n const unlisted = Array.from(allCategories).filter(c => !listed.has(c)).sort()\n categoryOrder = [...colorKeys.filter(k => allCategories.has(k)), ...unlisted]\n }\n\n const nodes: SceneNode[] = []\n const scales = this.scales!\n const [domainMin, domainMax] = scales.x.domain() as [number, number]\n const gap = this.config.barColors ? 1 : 1\n\n for (const bin of bins.values()) {\n const clampedStart = Math.max(bin.start, domainMin)\n const clampedEnd = Math.min(bin.end, domainMax)\n if (clampedStart >= clampedEnd) continue\n\n const rawX0 = scales.x(clampedStart)\n const rawX1 = scales.x(clampedEnd)\n const x0 = Math.min(rawX0, rawX1) + gap / 2\n const x1 = Math.max(rawX0, rawX1) - gap / 2\n const barWidth = x1 - x0\n if (barWidth <= 0) continue\n\n if (categoryOrder && bin.categories.size > 0) {\n let cumulativeBase = 0\n for (const cat of categoryOrder) {\n const catVal = bin.categories.get(cat) || 0\n if (catVal === 0) continue\n const yBottom = scales.y(cumulativeBase)\n const yTop = scales.y(cumulativeBase + catVal)\n const rectY = Math.min(yBottom, yTop)\n const rectH = Math.abs(yBottom - yTop)\n\n nodes.push(buildRectNode(\n x0, rectY, barWidth, rectH,\n { fill: this.config.barColors?.[cat] || \"#4e79a7\" },\n { binStart: bin.start, binEnd: bin.end, total: bin.total, category: cat, categoryValue: catVal },\n cat\n ))\n cumulativeBase += catVal\n }\n } else {\n const yZero = scales.y(0)\n const yTop = scales.y(bin.total)\n const rectY = Math.min(yZero, yTop)\n const rectH = Math.abs(yZero - yTop)\n\n nodes.push(buildRectNode(\n x0, rectY, barWidth, rectH,\n { fill: \"#007bff\" },\n { binStart: bin.start, binEnd: bin.end, total: bin.total }\n ))\n }\n }\n\n return nodes\n }\n\n private buildSwarmScene(data: Record<string, any>[]): SceneNode[] {\n const nodes: SceneNode[] = []\n const swarm = this.config.swarmStyle || {}\n const radius = swarm.radius ?? 3\n const defaultFill = swarm.fill ?? \"#007bff\"\n const opacity = swarm.opacity ?? 0.7\n const stroke = swarm.stroke\n const strokeWidth = swarm.strokeWidth\n\n for (const d of data) {\n const xVal = this.getX(d)\n const yVal = this.getY(d)\n if (yVal == null || Number.isNaN(yVal)) continue\n\n const x = this.scales!.x(xVal)\n const y = this.scales!.y(yVal)\n\n let fill = defaultFill\n if (this.getCategory) {\n const cat = this.getCategory(d)\n fill = this.config.barColors?.[cat] || fill\n }\n\n nodes.push({\n type: \"point\",\n x, y, r: radius,\n style: { fill, opacity, stroke, strokeWidth },\n datum: d\n })\n }\n\n return nodes\n }\n\n private buildWaterfallScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n const nodes: SceneNode[] = []\n const scales = this.scales!\n\n // Filter valid data\n const arr = data.filter(d => {\n const v = this.getY(d)\n return v != null && !Number.isNaN(v)\n })\n if (arr.length === 0) return nodes\n\n const gap = 1\n let baseline = 0\n\n for (let i = 0; i < arr.length; i++) {\n const d = arr[i]\n const t = this.getX(d)\n const delta = this.getY(d)\n const cumEnd = baseline + delta\n\n // Compute bar width from time gap\n let barWidthTime: number\n if (i < arr.length - 1) {\n barWidthTime = this.getX(arr[i + 1]) - t\n } else if (i > 0) {\n barWidthTime = t - this.getX(arr[i - 1])\n } else {\n barWidthTime = 0\n }\n\n const rawX0 = scales.x(t)\n const rawX1 = barWidthTime !== 0 ? scales.x(t + barWidthTime) : rawX0 + layout.width / 10\n const x0 = Math.min(rawX0, rawX1) + gap / 2\n const x1 = Math.max(rawX0, rawX1) - gap / 2\n const barWidth = x1 - x0\n if (barWidth <= 0) {\n baseline = cumEnd\n continue\n }\n\n const yBaseline = scales.y(baseline)\n const yTop = scales.y(cumEnd)\n const rectY = Math.min(yBaseline, yTop)\n const rectH = Math.abs(yBaseline - yTop)\n\n const fill = delta >= 0 ? \"#28a745\" : \"#dc3545\"\n nodes.push(buildRectNode(\n x0, rectY, barWidth, rectH,\n { fill },\n { ...d, baseline, cumEnd, delta }\n ))\n\n baseline = cumEnd\n }\n\n return nodes\n }\n\n private buildCandlestickScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n if (!this.getOpen || !this.getHigh || !this.getLow || !this.getClose || !this.scales) return []\n\n const nodes: SceneNode[] = []\n const cs = this.config.candlestickStyle || {}\n const upColor = cs.upColor || \"#28a745\"\n const downColor = cs.downColor || \"#dc3545\"\n const wickColor = cs.wickColor || \"#333\"\n const wickWidth = cs.wickWidth || 1\n\n // Compute body width from data spacing\n const sortedX = data\n .map(d => this.getX(d))\n .filter(x => x != null && !Number.isNaN(x))\n .sort((a, b) => a - b)\n\n let bodyWidth = cs.bodyWidth || 6\n if (!cs.bodyWidth && sortedX.length > 1) {\n // Auto-size: 60% of the minimum gap between adjacent x values\n let minGap = Infinity\n for (let i = 1; i < sortedX.length; i++) {\n const gap = Math.abs(this.scales!.x(sortedX[i]) - this.scales!.x(sortedX[i - 1]))\n if (gap > 0 && gap < minGap) minGap = gap\n }\n if (minGap !== Infinity) {\n bodyWidth = Math.max(2, Math.min(minGap * 0.6, 20))\n }\n }\n\n for (const d of data) {\n const xVal = this.getX(d)\n if (xVal == null || Number.isNaN(xVal)) continue\n\n const open = this.getOpen(d)\n const high = this.getHigh(d)\n const low = this.getLow(d)\n const close = this.getClose(d)\n if ([open, high, low, close].some(v => v == null || Number.isNaN(v))) continue\n\n const isUp = close >= open\n\n nodes.push({\n type: \"candlestick\",\n x: this.scales!.x(xVal),\n openY: this.scales!.y(open),\n closeY: this.scales!.y(close),\n highY: this.scales!.y(high),\n lowY: this.scales!.y(low),\n bodyWidth,\n upColor,\n downColor,\n wickColor,\n wickWidth,\n isUp,\n datum: d\n } as CandlestickSceneNode)\n }\n\n return nodes\n }\n\n // ── Bounds helpers ───────────────────────────────────────────────────\n\n private buildBoundsForGroup(data: Record<string, any>[], group: string): AreaSceneNode | null {\n if (!this.getBounds || !this.scales) return null\n\n const topPath: [number, number][] = []\n const bottomPath: [number, number][] = []\n\n for (const d of data) {\n const x = this.getX(d)\n const y = this.getY(d)\n if (x == null || y == null || Number.isNaN(x) || Number.isNaN(y)) continue\n\n const offset = this.getBounds(d)\n const px = this.scales!.x(x)\n\n if (!offset || offset === 0) {\n // No bounds at this point — collapse to the line\n const py = this.scales!.y(y)\n topPath.push([px, py])\n bottomPath.push([px, py])\n } else {\n topPath.push([px, this.scales!.y(y + offset)])\n bottomPath.push([px, this.scales!.y(y - offset)])\n }\n }\n\n if (topPath.length < 2) return null\n\n return {\n type: \"area\",\n topPath,\n bottomPath,\n style: this.resolveBoundsStyle(group, data[0]),\n datum: data,\n group,\n interactive: false\n }\n }\n\n private resolveBoundsStyle(group: string, sampleDatum?: Record<string, any>): Style {\n const bs = this.config.boundsStyle\n if (typeof bs === \"function\") {\n return bs(sampleDatum || {}, group)\n }\n if (bs && typeof bs === \"object\") {\n return bs\n }\n // Default: match line color with low opacity\n const lineStyle = this.resolveLineStyle(group, sampleDatum)\n return {\n fill: lineStyle.stroke || \"#4e79a7\",\n fillOpacity: 0.2,\n stroke: \"none\"\n }\n }\n\n // ── Decay ────────────────────────────────────────────────────────────\n\n /**\n * Compute decay opacity for a datum at `bufferIndex` out of `bufferSize` items.\n * Index 0 = oldest, bufferSize-1 = newest. Returns 0–1.\n */\n computeDecayOpacity(bufferIndex: number, bufferSize: number): number {\n const decay = this.config.decay\n if (!decay || bufferSize <= 1) return 1\n\n const minOpacity = decay.minOpacity ?? 0.1\n // age: 0 = newest, bufferSize-1 = oldest\n const age = bufferSize - 1 - bufferIndex\n\n switch (decay.type) {\n case \"linear\": {\n const t = 1 - age / (bufferSize - 1)\n return minOpacity + t * (1 - minOpacity)\n }\n case \"exponential\": {\n const halfLife = decay.halfLife ?? bufferSize / 2\n const t = Math.pow(0.5, age / halfLife)\n return minOpacity + t * (1 - minOpacity)\n }\n case \"step\": {\n const threshold = decay.stepThreshold ?? bufferSize * 0.5\n return age < threshold ? 1 : minOpacity\n }\n default:\n return 1\n }\n }\n\n /**\n * Apply decay opacity to a list of discrete scene nodes.\n * Uses the datum's index in the buffer data array.\n */\n private applyDecay(nodes: SceneNode[], data: Record<string, any>[]): void {\n if (!this.config.decay) return\n const bufferSize = data.length\n if (bufferSize <= 1) return\n\n // Build datum→index lookup\n const indexMap = new Map<any, number>()\n for (let i = 0; i < data.length; i++) {\n indexMap.set(data[i], i)\n }\n\n for (const node of nodes) {\n if (node.type === \"line\" || node.type === \"area\") continue\n const idx = indexMap.get(node.datum)\n if (idx == null) continue\n const decayOpacity = this.computeDecayOpacity(idx, bufferSize)\n if (node.type === \"heatcell\") {\n ;(node as any).style = { opacity: decayOpacity }\n } else if (node.type === \"candlestick\") {\n // Candlestick doesn't have a style object — store opacity for renderer\n ;(node as any)._decayOpacity = decayOpacity\n } else {\n const baseOpacity = node.style?.opacity ?? 1\n node.style = { ...node.style, opacity: baseOpacity * decayOpacity }\n }\n }\n }\n\n // ── Pulse ───────────────────────────────────────────────────────────\n\n /**\n * Compute pulse intensity for a datum inserted at `insertTime`.\n * Returns 0–1 (1 = just inserted, 0 = pulse expired).\n */\n private computePulseIntensity(insertTime: number, now: number): number {\n const pulse = this.config.pulse\n if (!pulse) return 0\n const duration = pulse.duration ?? 500\n const age = now - insertTime\n if (age >= duration) return 0\n return 1 - age / duration\n }\n\n /**\n * Apply pulse glow to discrete scene nodes.\n */\n private applyPulse(nodes: SceneNode[], data: Record<string, any>[]): void {\n if (!this.config.pulse || !this.timestampBuffer) return\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const pulseColor = this.config.pulse.color ?? \"rgba(255,255,255,0.6)\"\n\n // Build datum→index lookup\n const indexMap = new Map<any, number>()\n for (let i = 0; i < data.length; i++) {\n indexMap.set(data[i], i)\n }\n\n for (const node of nodes) {\n if (node.type === \"line\" || node.type === \"area\") continue\n const idx = indexMap.get(node.datum)\n if (idx == null) continue\n const insertTime = this.timestampBuffer.get(idx)\n if (insertTime == null) continue\n const intensity = this.computePulseIntensity(insertTime, now)\n if (intensity > 0) {\n (node as any)._pulseIntensity = intensity\n ;(node as any)._pulseColor = pulseColor\n }\n }\n }\n\n /**\n * Returns true if there are active pulse animations that need continuous rendering.\n */\n get hasActivePulses(): boolean {\n if (!this.config.pulse || !this.timestampBuffer || this.timestampBuffer.size === 0) return false\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const duration = this.config.pulse.duration ?? 500\n const newest = this.timestampBuffer.peek()\n return newest != null && (now - newest) < duration\n }\n\n // ── Transitions ─────────────────────────────────────────────────────\n\n /**\n * Snapshot current scene node positions before rebuild.\n */\n private snapshotPositions(): void {\n this.prevPositionMap.clear()\n for (let i = 0; i < this.scene.length; i++) {\n const node = this.scene[i]\n const key = this.getNodeIdentity(node, i)\n if (!key) continue\n if (node.type === \"point\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.y, r: node.r })\n } else if (node.type === \"rect\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.y, w: node.w, h: node.h })\n } else if (node.type === \"heatcell\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.y, w: node.w, h: node.h })\n } else if (node.type === \"candlestick\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.openY })\n }\n }\n }\n\n /**\n * Get a stable identity key for a scene node.\n */\n private getNodeIdentity(node: SceneNode, index: number): string | null {\n switch (node.type) {\n case \"point\":\n return `p:${node.datum === undefined ? index : this.getX(node.datum)}_${this.getY(node.datum)}`\n case \"rect\":\n return `r:${node.group || \"\"}:${node.datum?.binStart ?? node.datum?.category ?? index}`\n case \"heatcell\":\n return `h:${node.x}_${node.y}`\n case \"candlestick\":\n return `c:${this.getX(node.datum)}`\n default:\n return null\n }\n }\n\n /**\n * After scene rebuild, set up transition from old to new positions.\n */\n private startTransition(): void {\n if (!this.config.transition || this.prevPositionMap.size === 0) return\n const duration = this.config.transition.duration ?? 300\n\n let hasChanges = false\n for (let i = 0; i < this.scene.length; i++) {\n const node = this.scene[i]\n const key = this.getNodeIdentity(node, i)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n\n // Store target positions and restore previous for animation start\n if (node.type === \"point\") {\n const target = { x: node.x, y: node.y, r: node.r }\n if (prev.x !== target.x || prev.y !== target.y) {\n node._targetX = target.x\n node._targetY = target.y\n node._targetR = target.r\n node.x = prev.x\n node.y = prev.y\n node.r = prev.r ?? node.r\n hasChanges = true\n }\n } else if (node.type === \"rect\") {\n const target = { x: node.x, y: node.y, w: node.w, h: node.h }\n if (prev.x !== target.x || prev.y !== target.y || prev.w !== target.w || prev.h !== target.h) {\n node._targetX = target.x\n node._targetY = target.y\n node._targetW = target.w\n node._targetH = target.h\n node.x = prev.x\n node.y = prev.y\n node.w = prev.w ?? node.w\n node.h = prev.h ?? node.h\n hasChanges = true\n }\n } else if (node.type === \"heatcell\") {\n const target = { x: node.x, y: node.y, w: node.w, h: node.h }\n if (prev.x !== target.x || prev.y !== target.y) {\n node._targetX = target.x\n node._targetY = target.y\n node._targetW = target.w\n node._targetH = target.h\n node.x = prev.x\n node.y = prev.y\n node.w = prev.w ?? node.w\n node.h = prev.h ?? node.h\n hasChanges = true\n }\n }\n }\n\n if (hasChanges) {\n this.activeTransition = {\n startTime: typeof performance !== \"undefined\" ? performance.now() : Date.now(),\n duration\n }\n }\n }\n\n /**\n * Advance the transition animation. Returns true if still animating.\n */\n advanceTransition(now: number): boolean {\n if (!this.activeTransition) return false\n\n const elapsed = now - this.activeTransition.startTime\n const rawT = Math.min(elapsed / this.activeTransition.duration, 1)\n // Ease-out cubic (or linear)\n const t = this.config.transition?.easing === \"linear\"\n ? rawT\n : 1 - Math.pow(1 - rawT, 3)\n\n for (const node of this.scene) {\n if (node.type === \"point\") {\n if (node._targetX === undefined) continue\n const key = this.getNodeIdentity(node, 0)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n if (node._targetR !== undefined && prev.r !== undefined) {\n node.r = prev.r + (node._targetR - prev.r) * t\n }\n } else if (node.type === \"rect\") {\n if (node._targetX === undefined) continue\n const key = this.getNodeIdentity(node, 0)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n if (prev.w !== undefined) node.w = prev.w + (node._targetW! - prev.w) * t\n if (prev.h !== undefined) node.h = prev.h + (node._targetH! - prev.h) * t\n } else if (node.type === \"heatcell\") {\n if (node._targetX === undefined) continue\n const key = this.getNodeIdentity(node, 0)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n if (prev.w !== undefined) node.w = prev.w + (node._targetW! - prev.w) * t\n if (prev.h !== undefined) node.h = prev.h + (node._targetH! - prev.h) * t\n }\n }\n\n if (rawT >= 1) {\n // Snap to targets and clear transition\n for (const node of this.scene) {\n if (node.type === \"point\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n if (node._targetR !== undefined) node.r = node._targetR\n node._targetX = undefined\n node._targetY = undefined\n node._targetR = undefined\n } else if (node.type === \"rect\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n node.w = node._targetW!\n node.h = node._targetH!\n node._targetX = undefined\n node._targetY = undefined\n node._targetW = undefined\n node._targetH = undefined\n } else if (node.type === \"heatcell\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n node.w = node._targetW!\n node.h = node._targetH!\n node._targetX = undefined\n node._targetY = undefined\n node._targetW = undefined\n node._targetH = undefined\n }\n }\n this.activeTransition = null\n return false\n }\n\n return true\n }\n\n // ── Helpers ──────────────────────────────────────────────────────────\n\n private groupData(data: Record<string, any>[]): { key: string; data: Record<string, any>[] }[] {\n if (!this.getGroup) {\n return [{ key: \"_default\", data }]\n }\n\n const groups = new Map<string, Record<string, any>[]>()\n for (const d of data) {\n const key = this.getGroup(d)\n if (!groups.has(key)) groups.set(key, [])\n groups.get(key)!.push(d)\n }\n\n return Array.from(groups.entries()).map(([key, data]) => ({ key, data }))\n }\n\n private resolveLineStyle(group: string, sampleDatum?: Record<string, any>): Style {\n const ls = this.config.lineStyle\n if (typeof ls === \"function\") {\n return ls(sampleDatum || {}, group)\n }\n if (ls && typeof ls === \"object\") {\n return {\n stroke: ls.stroke || \"#007bff\",\n strokeWidth: ls.strokeWidth || 2,\n strokeDasharray: ls.strokeDasharray,\n fill: ls.fill,\n fillOpacity: ls.fillOpacity,\n opacity: ls.opacity\n }\n }\n return { stroke: \"#007bff\", strokeWidth: 2 }\n }\n\n private resolveAreaStyle(group: string, sampleDatum?: Record<string, any>): Style {\n if (this.config.areaStyle) {\n return this.config.areaStyle(sampleDatum || {})\n }\n // Fall back to lineStyle — AreaChart passes area styling via lineStyle\n const ls = this.config.lineStyle\n if (typeof ls === \"function\") {\n return ls(sampleDatum || {}, group)\n }\n if (ls && typeof ls === \"object\") {\n return {\n fill: ls.fill || ls.stroke || \"#4e79a7\",\n fillOpacity: ls.fillOpacity ?? 0.7,\n stroke: ls.stroke || \"#4e79a7\",\n strokeWidth: ls.strokeWidth || 2\n }\n }\n return { fill: \"#4e79a7\", fillOpacity: 0.7, stroke: \"#4e79a7\", strokeWidth: 2 }\n }\n\n // ── Public accessors ─────────────────────────────────────────────────\n\n getData(): Record<string, any>[] {\n return this.buffer.toArray()\n }\n\n getExtents(): { x: [number, number]; y: [number, number] } | null {\n if (this.xExtent.min === Infinity) return null\n return {\n x: this.xExtent.extent,\n y: this.yExtent.extent\n }\n }\n\n clear(): void {\n this.buffer.clear()\n this.xExtent.clear()\n this.yExtent.clear()\n if (this.timestampBuffer) this.timestampBuffer.clear()\n this.prevPositionMap.clear()\n this.activeTransition = null\n this.lastIngestTime = 0\n this.scales = null\n this.scene = []\n this.version++\n }\n\n get size(): number {\n return this.buffer.size\n }\n\n getBuffer(): RingBuffer<Record<string, any>> {\n return this.buffer\n }\n\n getXAccessor(): (d: any) => number {\n return this.getX\n }\n\n getYAccessor(): (d: any) => number {\n return this.getY\n }\n\n getCategoryAccessor(): ((d: any) => string) | undefined {\n return this.getCategory\n }\n\n updateConfig(config: Partial<PipelineConfig>): void {\n Object.assign(this.config, config)\n }\n}\n","import type { SceneNode, PointSceneNode, RectSceneNode, LineSceneNode, AreaSceneNode, HeatcellSceneNode, CandlestickSceneNode, StreamScales } from \"./types\"\nimport type { RingBuffer } from \"../realtime/RingBuffer\"\n\nexport interface HitResult {\n node: SceneNode\n datum: any\n x: number\n y: number\n distance: number\n}\n\n/**\n * Find the nearest scene node to the given pixel coordinates.\n * Dispatches to type-specific hit testers for optimal performance.\n */\nexport function findNearestNode(\n scene: SceneNode[],\n px: number,\n py: number,\n maxDistance: number = 30\n): HitResult | null {\n let best: HitResult | null = null\n\n for (const node of scene) {\n let result: HitResult | null = null\n\n switch (node.type) {\n case \"point\":\n result = hitTestPoint(node, px, py)\n break\n case \"line\":\n result = hitTestLine(node, px, py)\n break\n case \"rect\":\n result = hitTestRect(node, px, py)\n break\n case \"heatcell\":\n result = hitTestHeatcell(node, px, py)\n break\n case \"area\":\n // Skip non-interactive areas (e.g. decorative bounds bands)\n if (node.interactive === false) break\n // Areas are hit-tested by finding nearest x on the top path\n result = hitTestAreaPath(node, px, py)\n break\n case \"candlestick\":\n result = hitTestCandlestick(node, px, py)\n break\n }\n\n if (result && result.distance < maxDistance) {\n if (!best || result.distance < best.distance) {\n best = result\n }\n }\n }\n\n return best\n}\n\nfunction hitTestPoint(node: PointSceneNode, px: number, py: number): HitResult | null {\n const dx = px - node.x\n const dy = py - node.y\n const dist = Math.sqrt(dx * dx + dy * dy)\n // Hit radius includes the point's visual radius plus a tolerance\n if (dist > node.r + 5) return null\n return { node, datum: node.datum, x: node.x, y: node.y, distance: dist }\n}\n\nfunction hitTestLine(node: LineSceneNode, px: number, py: number): HitResult | null {\n if (node.path.length === 0) return null\n\n // Binary search for nearest x in the path\n const idx = binarySearchPath(node.path, px)\n if (idx < 0) return null\n\n const [nx, ny] = node.path[idx]\n const dx = px - nx\n const dy = py - ny\n const dist = Math.sqrt(dx * dx + dy * dy)\n\n // For line data, the datum is the array; return the index as well\n const datum = Array.isArray(node.datum) && node.datum[idx]\n ? node.datum[idx]\n : node.datum\n\n return { node, datum, x: nx, y: ny, distance: dist }\n}\n\nfunction hitTestRect(node: RectSceneNode, px: number, py: number): HitResult | null {\n if (px >= node.x && px <= node.x + node.w && py >= node.y && py <= node.y + node.h) {\n // Center of rect\n const cx = node.x + node.w / 2\n const cy = node.y + node.h / 2\n return { node, datum: node.datum, x: cx, y: cy, distance: 0 }\n }\n return null\n}\n\nfunction hitTestHeatcell(node: HeatcellSceneNode, px: number, py: number): HitResult | null {\n if (px >= node.x && px <= node.x + node.w && py >= node.y && py <= node.y + node.h) {\n const cx = node.x + node.w / 2\n const cy = node.y + node.h / 2\n return { node, datum: node.datum, x: cx, y: cy, distance: 0 }\n }\n return null\n}\n\nfunction hitTestCandlestick(node: CandlestickSceneNode, px: number, py: number): HitResult | null {\n const halfBody = node.bodyWidth / 2\n // Hit the body area (wider target)\n const bodyTop = Math.min(node.openY, node.closeY)\n const bodyBottom = Math.max(node.openY, node.closeY)\n const bodyHeight = Math.max(bodyBottom - bodyTop, 1)\n\n if (px >= node.x - halfBody - 3 && px <= node.x + halfBody + 3 &&\n py >= node.highY - 3 && py <= node.lowY + 3) {\n // Hover target: center of the body\n const cy = bodyTop + bodyHeight / 2\n const dx = px - node.x\n const dy = py - cy\n return { node, datum: node.datum, x: node.x, y: cy, distance: Math.sqrt(dx * dx + dy * dy) }\n }\n return null\n}\n\nfunction hitTestAreaPath(node: { type: \"area\"; topPath: [number, number][]; datum: any }, px: number, py: number): HitResult | null {\n if (node.topPath.length === 0) return null\n const idx = binarySearchPath(node.topPath, px)\n if (idx < 0) return null\n\n const [nx, ny] = node.topPath[idx]\n const dx = px - nx\n const dy = py - ny\n const dist = Math.sqrt(dx * dx + dy * dy)\n\n return { node: node as SceneNode, datum: node.datum, x: nx, y: ny, distance: dist }\n}\n\n/**\n * Binary search for the nearest point by x-coordinate in a sorted path.\n */\nfunction binarySearchPath(path: [number, number][], targetX: number): number {\n if (path.length === 0) return -1\n\n let lo = 0\n let hi = path.length - 1\n\n while (lo < hi) {\n const mid = (lo + hi) >> 1\n if (path[mid][0] < targetX) lo = mid + 1\n else hi = mid\n }\n\n // Check if lo-1 is closer\n if (lo > 0) {\n const dLo = Math.abs(path[lo][0] - targetX)\n const dPrev = Math.abs(path[lo - 1][0] - targetX)\n if (dPrev <= dLo) return lo - 1\n }\n\n return lo\n}\n\n/**\n * Binary search for nearest point by time value in a RingBuffer.\n */\nexport function findNearestIndex(\n buf: RingBuffer<Record<string, any>>,\n targetTime: number,\n getTime: (d: Record<string, any>) => number\n): number {\n if (buf.size === 0) return -1\n\n let lo = 0\n let hi = buf.size - 1\n\n while (lo < hi) {\n const mid = (lo + hi) >> 1\n const t = getTime(buf.get(mid)!)\n if (t < targetTime) lo = mid + 1\n else hi = mid\n }\n\n if (lo > 0) {\n const tLo = getTime(buf.get(lo)!)\n const tPrev = getTime(buf.get(lo - 1)!)\n if (Math.abs(tPrev - targetTime) <= Math.abs(tLo - targetTime)) {\n return lo - 1\n }\n }\n\n return lo\n}\n","import * as React from \"react\"\n\nimport { LegendGroup, ItemType, LegendProps } from \"./types/legendTypes\"\n\nconst typeHash = {\n fill: (style: Object) => <rect style={style} width={20} height={20} />,\n line: (style: Object) => <line style={style} x1={0} y1={0} x2={20} y2={20} />\n}\n\nfunction renderType(\n item: Object,\n i: number,\n type: ItemType,\n styleFn: Function\n) {\n let renderedType\n if (typeof type === \"function\") {\n renderedType = type(item)\n } else {\n const Type = typeHash[type]\n const style = styleFn(item, i)\n renderedType = Type(style)\n }\n return renderedType\n}\n\nconst renderLegendGroupVertical = (\n legendGroup: LegendGroup,\n customClickBehavior?: Function\n) => {\n const { type = \"fill\", styleFn, items } = legendGroup\n const renderedItems = []\n let itemOffset = 0\n items.forEach((item, i) => {\n const renderedType = renderType(item, i, type, styleFn)\n renderedItems.push(\n <g\n key={`legend-item-${i}`}\n transform={`translate(0,${itemOffset})`}\n onClick={\n customClickBehavior ? () => customClickBehavior(item) : undefined\n }\n style={{\n cursor: customClickBehavior ? \"pointer\" : \"default\"\n }}\n >\n {renderedType}\n <text y={15} x={30}>\n {item.label}\n </text>\n </g>\n )\n itemOffset += 25\n })\n return renderedItems\n}\n\nconst renderLegendGroupHorizontal = (\n legendGroup: LegendGroup,\n customClickBehavior?: Function\n) => {\n const { type = \"fill\", styleFn, items } = legendGroup\n const renderedItems = []\n let itemOffset = 0\n items.forEach((item, i) => {\n const renderedType = renderType(item, i, type, styleFn)\n renderedItems.push(\n <g\n key={`legend-item-${i}`}\n transform={`translate(${itemOffset},0)`}\n onClick={\n customClickBehavior ? () => customClickBehavior(item) : undefined\n }\n style={{\n cursor: customClickBehavior ? \"pointer\" : \"default\"\n }}\n >\n {renderedType}\n <text y={15} x={25}>\n {item.label}\n </text>\n </g>\n )\n itemOffset += 35\n itemOffset += item.label.length * 8\n })\n return { items: renderedItems, offset: itemOffset }\n}\n\nconst renderVerticalGroup = ({\n legendGroups,\n width,\n customClickBehavior\n}: {\n legendGroups: LegendGroup[]\n width: number\n customClickBehavior?: Function\n}) => {\n let offset = 30\n\n const renderedGroups = []\n\n legendGroups.forEach((l, i) => {\n offset += 5\n renderedGroups.push(\n <line\n key={`legend-top-line legend-symbol-${i}`}\n stroke=\"gray\"\n x1={0}\n y1={offset}\n x2={width}\n y2={offset}\n />\n )\n offset += 10\n if (l.label) {\n offset += 20\n renderedGroups.push(\n <text\n key={`legend-text-${i}`}\n y={offset}\n className=\"legend-group-label\"\n >\n {l.label}\n </text>\n )\n offset += 10\n }\n\n renderedGroups.push(\n <g\n key={`legend-group-${i}`}\n className=\"legend-item\"\n transform={`translate(0,${offset})`}\n >\n {renderLegendGroupVertical(l, customClickBehavior)}\n </g>\n )\n offset += l.items.length * 25 + 10\n })\n\n return renderedGroups\n}\n\nconst renderHorizontalGroup = ({\n legendGroups,\n title,\n height,\n customClickBehavior\n}: {\n legendGroups: LegendGroup[]\n title: string | boolean\n height: number\n customClickBehavior?: Function\n}) => {\n let offset = 0\n\n const renderedGroups = []\n\n const verticalOffset = title === false ? 10 : 40\n\n legendGroups.forEach((l, i) => {\n if (l.label) {\n renderedGroups.push(\n <text\n key={`legend-text-${i}`}\n transform={`translate(${offset},${verticalOffset}) rotate(90)`}\n textAnchor=\"start\"\n className=\"legend-group-label\"\n >\n {l.label}\n </text>\n )\n offset += 20\n }\n\n const renderedItems = renderLegendGroupHorizontal(l, customClickBehavior)\n\n renderedGroups.push(\n <g\n key={`legend-group-${i}`}\n className=\"legend-item\"\n transform={`translate(${offset},${verticalOffset})`}\n >\n {renderedItems.items}\n </g>\n )\n offset += renderedItems.offset + 5\n\n if (legendGroups[i + 1]) {\n renderedGroups.push(\n <line\n key={`legend-top-line legend-symbol-${i}`}\n stroke=\"gray\"\n x1={offset}\n y1={verticalOffset - 10}\n x2={offset}\n y2={height + verticalOffset + 10}\n />\n )\n }\n offset += 15\n })\n\n return (\n <g>\n {title !== false && (\n <line\n x1={0}\n x2={offset + 10}\n y1={verticalOffset - 10}\n y2={verticalOffset - 10}\n stroke=\"gray\"\n className=\"title-neatline\"\n />\n )}\n {renderedGroups}\n </g>\n )\n}\n\nexport default function Legend(props: LegendProps) {\n const {\n legendGroups,\n customClickBehavior,\n title = \"Legend\",\n width = 100,\n height = 20,\n orientation = \"vertical\"\n } = props\n const renderedGroups =\n orientation === \"vertical\"\n ? renderVerticalGroup({\n legendGroups,\n width,\n customClickBehavior\n })\n : renderHorizontalGroup({\n legendGroups,\n title,\n height,\n customClickBehavior\n })\n\n return (\n <g>\n {title !== undefined && (\n <text\n className=\"legend-title\"\n y={20}\n x={orientation === \"horizontal\" ? 0 : width / 2}\n textAnchor={orientation === \"horizontal\" ? \"start\" : \"middle\"}\n >\n {title}\n </text>\n )}\n {renderedGroups}\n </g>\n )\n}\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport { bin as d3Bin } from \"d3-array\"\nimport type { ScaleLinear } from \"d3-scale\"\nimport type { MarginalConfig, MarginalType } from \"./types\"\n\nexport type MarginalOrient = \"top\" | \"bottom\" | \"left\" | \"right\"\n\nexport interface MarginalGraphicsProps {\n orient: MarginalOrient\n config: MarginalConfig\n /** Raw numeric values along the relevant axis */\n values: number[]\n /** The chart's scale for the axis this marginal summarizes */\n scale: ScaleLinear<number, number>\n /** Available pixel space in the margin (perpendicular to axis) */\n size: number\n /** Chart width (top/bottom) or height (left/right) */\n length: number\n}\n\n/** Resolve a string shorthand or full config into a MarginalConfig */\nexport function normalizeMarginalConfig(\n input: MarginalConfig | MarginalType\n): MarginalConfig {\n if (typeof input === \"string\") {\n return { type: input }\n }\n return input\n}\n\nconst DEFAULTS = {\n bins: 20,\n fill: \"#4e79a7\",\n fillOpacity: 0.5,\n stroke: \"none\",\n strokeWidth: 1\n}\n\nfunction resolveConfig(config: MarginalConfig) {\n return {\n type: config.type,\n bins: config.bins ?? DEFAULTS.bins,\n fill: config.fill ?? DEFAULTS.fill,\n fillOpacity: config.fillOpacity ?? DEFAULTS.fillOpacity,\n stroke: config.stroke ?? DEFAULTS.stroke,\n strokeWidth: config.strokeWidth ?? DEFAULTS.strokeWidth\n }\n}\n\n/** Compute quartiles and whiskers for boxplot */\nfunction boxplotStats(values: number[]) {\n const sorted = [...values].sort((a, b) => a - b)\n const n = sorted.length\n if (n === 0) return null\n\n const q1 = sorted[Math.floor(n * 0.25)]\n const median = sorted[Math.floor(n * 0.5)]\n const q3 = sorted[Math.floor(n * 0.75)]\n const iqr = q3 - q1\n const whiskerLow = Math.max(sorted[0], q1 - 1.5 * iqr)\n const whiskerHigh = Math.min(sorted[n - 1], q3 + 1.5 * iqr)\n\n return { q1, median, q3, whiskerLow, whiskerHigh }\n}\n\nexport function MarginalGraphics({\n orient,\n config: rawConfig,\n values,\n scale,\n size,\n length\n}: MarginalGraphicsProps) {\n const config = resolveConfig(rawConfig)\n const padding = 4\n\n const isHorizontal = orient === \"top\" || orient === \"bottom\"\n\n const content = useMemo(() => {\n if (values.length === 0) return null\n\n const domain = scale.domain() as [number, number]\n const availableSize = size - padding * 2\n\n if (config.type === \"boxplot\") {\n const stats = boxplotStats(values)\n if (!stats) return null\n\n const { q1, median, q3, whiskerLow, whiskerHigh } = stats\n const boxThickness = Math.min(availableSize * 0.5, 20)\n const offset = (availableSize - boxThickness) / 2 + padding\n\n if (isHorizontal) {\n const x1 = scale(q1)\n const x2 = scale(q3)\n const xMed = scale(median)\n const xWLow = scale(whiskerLow)\n const xWHigh = scale(whiskerHigh)\n const growDir = orient === \"top\" ? -1 : 1\n const baseY = orient === \"top\" ? 0 : 0\n\n return (\n <g data-testid={`marginal-boxplot-${orient}`}>\n {/* Whisker line */}\n <line\n x1={xWLow} y1={baseY + growDir * (offset + boxThickness / 2)}\n x2={xWHigh} y2={baseY + growDir * (offset + boxThickness / 2)}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n {/* Whisker caps */}\n <line\n x1={xWLow} y1={baseY + growDir * offset}\n x2={xWLow} y2={baseY + growDir * (offset + boxThickness)}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n <line\n x1={xWHigh} y1={baseY + growDir * offset}\n x2={xWHigh} y2={baseY + growDir * (offset + boxThickness)}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n {/* Box */}\n <rect\n x={Math.min(x1, x2)}\n y={orient === \"top\" ? baseY - offset - boxThickness : baseY + offset}\n width={Math.abs(x2 - x1)}\n height={boxThickness}\n fill={config.fill}\n fillOpacity={config.fillOpacity}\n stroke={config.stroke === \"none\" ? config.fill : config.stroke}\n strokeWidth={config.strokeWidth}\n />\n {/* Median line */}\n <line\n x1={xMed} y1={orient === \"top\" ? baseY - offset - boxThickness : baseY + offset}\n x2={xMed} y2={orient === \"top\" ? baseY - offset : baseY + offset + boxThickness}\n stroke={config.fill} strokeWidth={2}\n />\n </g>\n )\n } else {\n // Vertical: left/right\n const y1 = scale(q1)\n const y2 = scale(q3)\n const yMed = scale(median)\n const yWLow = scale(whiskerLow)\n const yWHigh = scale(whiskerHigh)\n const growDir = orient === \"left\" ? -1 : 1\n const baseX = 0\n\n return (\n <g data-testid={`marginal-boxplot-${orient}`}>\n <line\n x1={baseX + growDir * (offset + boxThickness / 2)}\n y1={yWLow} x2={baseX + growDir * (offset + boxThickness / 2)} y2={yWHigh}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n <line\n x1={baseX + growDir * offset} y1={yWLow}\n x2={baseX + growDir * (offset + boxThickness)} y2={yWLow}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n <line\n x1={baseX + growDir * offset} y1={yWHigh}\n x2={baseX + growDir * (offset + boxThickness)} y2={yWHigh}\n stroke={config.fill} strokeWidth={config.strokeWidth}\n />\n <rect\n x={orient === \"left\" ? baseX - offset - boxThickness : baseX + offset}\n y={Math.min(y1, y2)}\n width={boxThickness}\n height={Math.abs(y2 - y1)}\n fill={config.fill}\n fillOpacity={config.fillOpacity}\n stroke={config.stroke === \"none\" ? config.fill : config.stroke}\n strokeWidth={config.strokeWidth}\n />\n <line\n x1={orient === \"left\" ? baseX - offset - boxThickness : baseX + offset}\n y1={yMed}\n x2={orient === \"left\" ? baseX - offset : baseX + offset + boxThickness}\n y2={yMed}\n stroke={config.fill} strokeWidth={2}\n />\n </g>\n )\n }\n }\n\n // Binned types: histogram, violin, ridgeline\n const binner = d3Bin()\n .domain(domain)\n .thresholds(config.bins)\n\n const bins = binner(values)\n if (bins.length === 0) return null\n\n const maxCount = Math.max(...bins.map(b => b.length))\n if (maxCount === 0) return null\n\n if (config.type === \"histogram\") {\n return (\n <g data-testid={`marginal-histogram-${orient}`}>\n {bins.map((bin, i) => {\n if (bin.x0 == null || bin.x1 == null) return null\n const count = bin.length\n const barSize = (count / maxCount) * availableSize\n\n if (isHorizontal) {\n const x = scale(bin.x0)\n const w = scale(bin.x1) - scale(bin.x0)\n const y = orient === \"top\" ? -padding - barSize : padding\n return (\n <rect\n key={i}\n x={x} y={y} width={Math.max(w, 0.5)} height={barSize}\n fill={config.fill} fillOpacity={config.fillOpacity}\n stroke={config.stroke} strokeWidth={config.strokeWidth}\n />\n )\n } else {\n const y = scale(bin.x0)\n const h = scale(bin.x1) - scale(bin.x0)\n const x = orient === \"left\" ? -padding - barSize : padding\n return (\n <rect\n key={i}\n x={x} y={Math.min(y, y + h)} width={barSize} height={Math.abs(h)}\n fill={config.fill} fillOpacity={config.fillOpacity}\n stroke={config.stroke} strokeWidth={config.strokeWidth}\n />\n )\n }\n })}\n </g>\n )\n }\n\n if (config.type === \"violin\") {\n // Symmetric density path around the midline\n const midline = availableSize / 2 + padding\n\n const points: string[] = []\n // Forward pass (one side)\n for (const bin of bins) {\n if (bin.x0 == null || bin.x1 == null) continue\n const mid = (bin.x0 + bin.x1) / 2\n const w = (bin.length / maxCount) * (availableSize / 2)\n const pos = scale(mid)\n\n if (isHorizontal) {\n const y = orient === \"top\" ? -(midline - w) : midline - w\n points.push(`${pos},${y}`)\n } else {\n const x = orient === \"left\" ? -(midline - w) : midline - w\n points.push(`${x},${pos}`)\n }\n }\n // Reverse pass (other side)\n for (let i = bins.length - 1; i >= 0; i--) {\n const bin = bins[i]\n if (bin.x0 == null || bin.x1 == null) continue\n const mid = (bin.x0 + bin.x1) / 2\n const w = (bin.length / maxCount) * (availableSize / 2)\n const pos = scale(mid)\n\n if (isHorizontal) {\n const y = orient === \"top\" ? -(midline + w) : midline + w\n points.push(`${pos},${y}`)\n } else {\n const x = orient === \"left\" ? -(midline + w) : midline + w\n points.push(`${x},${pos}`)\n }\n }\n\n return (\n <g data-testid={`marginal-violin-${orient}`}>\n <polygon\n points={points.join(\" \")}\n fill={config.fill} fillOpacity={config.fillOpacity}\n stroke={config.stroke === \"none\" ? config.fill : config.stroke}\n strokeWidth={config.strokeWidth}\n />\n </g>\n )\n }\n\n if (config.type === \"ridgeline\") {\n // One-sided area fill from baseline into the margin\n const pathParts: string[] = []\n\n if (isHorizontal) {\n const baseY = orient === \"top\" ? 0 : 0\n // Start at baseline\n const startX = bins[0].x0 != null ? scale(bins[0].x0) : 0\n pathParts.push(`M${startX},${baseY}`)\n\n for (const bin of bins) {\n if (bin.x0 == null || bin.x1 == null) continue\n const mid = (bin.x0 + bin.x1) / 2\n const h = (bin.length / maxCount) * availableSize\n const x = scale(mid)\n const y = orient === \"top\" ? -h - padding : h + padding\n pathParts.push(`L${x},${y}`)\n }\n\n // Close back to baseline\n const endX = bins[bins.length - 1].x1 != null ? scale(bins[bins.length - 1].x1!) : length\n pathParts.push(`L${endX},${baseY}`)\n pathParts.push(\"Z\")\n } else {\n const baseX = 0\n const startY = bins[0].x0 != null ? scale(bins[0].x0) : 0\n pathParts.push(`M${baseX},${startY}`)\n\n for (const bin of bins) {\n if (bin.x0 == null || bin.x1 == null) continue\n const mid = (bin.x0 + bin.x1) / 2\n const w = (bin.length / maxCount) * availableSize\n const y = scale(mid)\n const x = orient === \"left\" ? -w - padding : w + padding\n pathParts.push(`L${x},${y}`)\n }\n\n const endY = bins[bins.length - 1].x1 != null ? scale(bins[bins.length - 1].x1!) : length\n pathParts.push(`L${baseX},${endY}`)\n pathParts.push(\"Z\")\n }\n\n return (\n <g data-testid={`marginal-ridgeline-${orient}`}>\n <path\n d={pathParts.join(\" \")}\n fill={config.fill} fillOpacity={config.fillOpacity}\n stroke={config.stroke === \"none\" ? config.fill : config.stroke}\n strokeWidth={config.strokeWidth}\n />\n </g>\n )\n }\n\n return null\n }, [values, scale, config, size, length, orient, isHorizontal, padding])\n\n if (!content) return null\n\n // Position the <g> at the margin edge\n let transform: string\n switch (orient) {\n case \"top\":\n transform = `translate(0, 0)` // top edge of chart area\n break\n case \"bottom\":\n transform = `translate(0, ${length})` // wait — length is chart width for top/bottom\n break\n case \"left\":\n transform = `translate(0, 0)` // left edge of chart area\n break\n case \"right\":\n transform = `translate(${length}, 0)` // length is chart width for left/right? No.\n break\n }\n\n // For top/bottom: length = chart width. The g is already inside the margin-translated group.\n // For left/right: length = chart height.\n // orient=bottom means we're at y=chartHeight (bottom of chart area)\n // orient=right means we're at x=chartWidth (right of chart area)\n // Actually, let the parent handle positioning. This component just draws relative to origin.\n\n return (\n <g className={`marginal-${orient}`} data-testid={`marginal-${orient}`}>\n {content}\n </g>\n )\n}\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport type { StreamScales, AnnotationContext, MarginalGraphicsConfig, MarginalConfig, MarginalType } from \"./types\"\nimport type { ReactNode } from \"react\"\nimport Legend from \"../Legend\"\nimport type { LegendGroup } from \"../types/legendTypes\"\nimport { MarginalGraphics, normalizeMarginalConfig } from \"./MarginalGraphics\"\n\ninterface SVGOverlayProps {\n width: number\n height: number\n totalWidth: number\n totalHeight: number\n margin: { top: number; right: number; bottom: number; left: number }\n scales: StreamScales | null\n\n // Axes\n showAxes?: boolean\n xLabel?: string\n yLabel?: string\n xFormat?: (d: any) => string\n yFormat?: (d: any) => string\n\n // Grid\n showGrid?: boolean\n\n // Title\n title?: string | ReactNode\n\n // Legend\n legend?: ReactNode | { legendGroups: LegendGroup[] }\n\n // Foreground graphics (rendered on top in SVG overlay)\n foregroundGraphics?: ReactNode\n\n // Marginal graphics\n marginalGraphics?: MarginalGraphicsConfig\n xValues?: number[]\n yValues?: number[]\n\n // Annotations\n annotations?: Record<string, any>[]\n svgAnnotationRules?: (\n annotation: Record<string, any>,\n index: number,\n context: AnnotationContext\n ) => ReactNode\n annotationFrame?: number\n\n children?: ReactNode\n}\n\nfunction isLegendConfig(value: unknown): value is { legendGroups: LegendGroup[] } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !React.isValidElement(value) &&\n \"legendGroups\" in value\n )\n}\n\nfunction defaultTickFormat(v: number): string {\n return String(Math.round(v * 100) / 100)\n}\n\nexport function SVGOverlay(props: SVGOverlayProps) {\n const {\n width,\n height,\n totalWidth,\n totalHeight,\n margin,\n scales,\n showAxes,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n showGrid,\n title,\n legend,\n foregroundGraphics,\n marginalGraphics,\n xValues,\n yValues,\n annotations,\n svgAnnotationRules,\n annotationFrame,\n children\n } = props\n\n // Generate axis ticks\n const xTicks = useMemo(() => {\n if (!showAxes || !scales) return []\n return scales.x.ticks(5).map(v => ({\n value: v,\n pixel: scales.x(v),\n label: (xFormat || defaultTickFormat)(v)\n }))\n }, [showAxes, scales, xFormat])\n\n const yTicks = useMemo(() => {\n if (!showAxes || !scales) return []\n return scales.y.ticks(5).map(v => ({\n value: v,\n pixel: scales.y(v),\n label: (yFormat || defaultTickFormat)(v)\n }))\n }, [showAxes, scales, yFormat])\n\n // Render annotations\n const renderedAnnotations = useMemo(() => {\n if (!annotations || annotations.length === 0 || !svgAnnotationRules) return null\n return annotations\n .map((annotation, i) =>\n svgAnnotationRules(annotation, i, {\n scales: scales ? { time: scales.x, value: scales.y } : null,\n timeAxis: \"x\",\n width,\n height\n })\n )\n .filter(Boolean)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [annotations, svgAnnotationRules, width, height, annotationFrame])\n\n const hasContent = showAxes || title || legend || foregroundGraphics || marginalGraphics || (renderedAnnotations && renderedAnnotations.length > 0) || showGrid || children\n\n if (!hasContent) return null\n\n return (\n <svg\n width={totalWidth}\n height={totalHeight}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\"\n }}\n >\n <g transform={`translate(${margin.left},${margin.top})`}>\n {/* Grid lines */}\n {showGrid && scales && (\n <g className=\"stream-grid\">\n {xTicks.map((tick, i) => (\n <line\n key={`xgrid-${i}`}\n x1={tick.pixel}\n y1={0}\n x2={tick.pixel}\n y2={height}\n stroke=\"#e0e0e0\"\n strokeWidth={1}\n />\n ))}\n {yTicks.map((tick, i) => (\n <line\n key={`ygrid-${i}`}\n x1={0}\n y1={tick.pixel}\n x2={width}\n y2={tick.pixel}\n stroke=\"#e0e0e0\"\n strokeWidth={1}\n />\n ))}\n </g>\n )}\n\n {/* Axes */}\n {showAxes && scales && (\n <g className=\"stream-axes\">\n {/* X axis */}\n <line x1={0} y1={height} x2={width} y2={height} stroke=\"#ccc\" strokeWidth={1} />\n {xTicks.map((tick, i) => (\n <g key={`xtick-${i}`} transform={`translate(${tick.pixel},${height})`}>\n <line y2={5} stroke=\"#ccc\" strokeWidth={1} />\n <text\n y={18}\n textAnchor=\"middle\"\n fontSize={10}\n fill=\"#666\"\n style={{ userSelect: \"none\" }}\n >\n {tick.label}\n </text>\n </g>\n ))}\n {xLabel && (\n <text\n x={width / 2}\n y={height + 40}\n textAnchor=\"middle\"\n fontSize={12}\n fill=\"#333\"\n style={{ userSelect: \"none\" }}\n >\n {xLabel}\n </text>\n )}\n\n {/* Y axis */}\n <line x1={0} y1={0} x2={0} y2={height} stroke=\"#ccc\" strokeWidth={1} />\n {yTicks.map((tick, i) => (\n <g key={`ytick-${i}`} transform={`translate(0,${tick.pixel})`}>\n <line x2={-5} stroke=\"#ccc\" strokeWidth={1} />\n <text\n x={-8}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n fontSize={10}\n fill=\"#666\"\n style={{ userSelect: \"none\" }}\n >\n {tick.label}\n </text>\n </g>\n ))}\n {yLabel && (\n <text\n x={-margin.left + 15}\n y={height / 2}\n textAnchor=\"middle\"\n fontSize={12}\n fill=\"#333\"\n transform={`rotate(-90, ${-margin.left + 15}, ${height / 2})`}\n style={{ userSelect: \"none\" }}\n >\n {yLabel}\n </text>\n )}\n </g>\n )}\n\n {/* Annotations */}\n {renderedAnnotations}\n\n {/* Marginal graphics */}\n {marginalGraphics && scales && xValues && yValues && (\n <>\n {marginalGraphics.top && (\n <g transform={`translate(0, 0)`}>\n <MarginalGraphics\n orient=\"top\"\n config={normalizeMarginalConfig(marginalGraphics.top)}\n values={xValues}\n scale={scales.x}\n size={margin.top}\n length={width}\n />\n </g>\n )}\n {marginalGraphics.bottom && (\n <g transform={`translate(0, ${height})`}>\n <MarginalGraphics\n orient=\"bottom\"\n config={normalizeMarginalConfig(marginalGraphics.bottom)}\n values={xValues}\n scale={scales.x}\n size={margin.bottom}\n length={width}\n />\n </g>\n )}\n {marginalGraphics.left && (\n <g transform={`translate(0, 0)`}>\n <MarginalGraphics\n orient=\"left\"\n config={normalizeMarginalConfig(marginalGraphics.left)}\n values={yValues}\n scale={scales.y}\n size={margin.left}\n length={height}\n />\n </g>\n )}\n {marginalGraphics.right && (\n <g transform={`translate(${width}, 0)`}>\n <MarginalGraphics\n orient=\"right\"\n config={normalizeMarginalConfig(marginalGraphics.right)}\n values={yValues}\n scale={scales.y}\n size={margin.right}\n length={height}\n />\n </g>\n )}\n </>\n )}\n\n {/* Foreground graphics */}\n {foregroundGraphics}\n\n {children}\n </g>\n\n {/* Title */}\n {title && (\n <text\n x={totalWidth / 2}\n y={20}\n textAnchor=\"middle\"\n fontSize={14}\n fontWeight=\"bold\"\n fill=\"#333\"\n style={{ userSelect: \"none\" }}\n >\n {typeof title === \"string\" ? title : null}\n </text>\n )}\n\n {/* Legend */}\n {legend && (\n <g transform={`translate(${totalWidth - margin.right + 10}, ${margin.top})`}>\n {isLegendConfig(legend)\n ? <Legend legendGroups={legend.legendGroups} title=\"\" width={100} />\n : (legend as ReactNode)}\n </g>\n )}\n </svg>\n )\n}\n","import type { SceneNode, LineSceneNode, LineColorThreshold } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\nfunction resolveColor(\n value: number,\n thresholds: LineColorThreshold[],\n baseColor: string\n): string {\n let color = baseColor\n for (const t of thresholds) {\n if (t.thresholdType === \"lesser\") {\n if (value < t.value) color = t.color\n } else {\n if (value > t.value) color = t.color\n }\n }\n return color\n}\n\n/**\n * Canvas line renderer.\n * Renders LineSceneNode paths using moveTo/lineTo.\n * Supports threshold-based segment coloring when colorThresholds + rawValues\n * are present on the node.\n */\nexport const lineCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const lineNodes = nodes.filter((n): n is LineSceneNode => n.type === \"line\")\n\n for (const node of lineNodes) {\n if (node.path.length < 2) continue\n\n const baseColor = node.style.stroke || \"#007bff\"\n const lineWidth = node.style.strokeWidth || 2\n const thresholds = node.colorThresholds\n const rawValues = node.rawValues\n\n if (node.style.strokeDasharray) {\n ctx.setLineDash(node.style.strokeDasharray.split(/[\\s,]+/).map(Number))\n } else {\n ctx.setLineDash([])\n }\n\n if (node.style.opacity != null) {\n ctx.globalAlpha = node.style.opacity\n }\n\n ctx.lineWidth = lineWidth\n\n // Fast path: no color thresholds — single-path draw\n if (!thresholds || thresholds.length === 0 || !rawValues || rawValues.length !== node.path.length) {\n ctx.beginPath()\n ctx.strokeStyle = baseColor\n\n const [startX, startY] = node.path[0]\n ctx.moveTo(startX, startY)\n for (let i = 1; i < node.path.length; i++) {\n ctx.lineTo(node.path[i][0], node.path[i][1])\n }\n ctx.stroke()\n } else {\n // Threshold mode: segment-based drawing with interpolated crossings\n let prevX: number | null = null\n let prevY: number | null = null\n let prevValue: number | null = null\n let prevColor: string | null = null\n let pathStarted = false\n\n function startSegment(color: string, x: number, y: number) {\n ctx.beginPath()\n ctx.strokeStyle = color\n ctx.moveTo(x, y)\n pathStarted = true\n }\n\n function endSegment() {\n if (pathStarted) {\n ctx.stroke()\n pathStarted = false\n }\n }\n\n for (let i = 0; i < node.path.length; i++) {\n const [x, y] = node.path[i]\n const v = rawValues[i]\n const currColor = resolveColor(v, thresholds, baseColor)\n\n if (prevX === null || prevColor === null || prevValue === null) {\n startSegment(currColor, x, y)\n prevX = x\n prevY = y\n prevValue = v\n prevColor = currColor\n continue\n }\n\n if (currColor === prevColor) {\n ctx.lineTo(x, y)\n } else {\n // Find threshold crossings between prevValue and v\n const crossings: Array<{ t: number }> = []\n\n for (const threshold of thresholds) {\n const tv = threshold.value\n if ((prevValue <= tv && v >= tv) || (prevValue >= tv && v <= tv)) {\n if (prevValue !== tv && v !== tv) {\n const interpT = (tv - prevValue) / (v - prevValue)\n crossings.push({ t: interpT })\n }\n }\n }\n\n crossings.sort((a, b) => a.t - b.t)\n\n for (const crossing of crossings) {\n const midX = prevX + (x - prevX) * crossing.t\n const midY = prevY! + (y - prevY!) * crossing.t\n\n const nudgedValue = prevValue + (v - prevValue) * Math.min(crossing.t + 0.0001, 1)\n const nextColor = resolveColor(nudgedValue, thresholds, baseColor)\n\n ctx.lineTo(midX, midY)\n endSegment()\n startSegment(nextColor, midX, midY)\n }\n\n ctx.lineTo(x, y)\n }\n\n prevX = x\n prevY = y\n prevValue = v\n prevColor = currColor\n }\n\n endSegment()\n }\n\n // Fill area under line if fillOpacity is set\n if (node.style.fill && node.style.fillOpacity && node.style.fillOpacity > 0) {\n ctx.beginPath()\n ctx.globalAlpha = node.style.fillOpacity\n ctx.fillStyle = node.style.fill\n const [startX, startY] = node.path[0]\n ctx.moveTo(startX, startY)\n for (let i = 1; i < node.path.length; i++) {\n ctx.lineTo(node.path[i][0], node.path[i][1])\n }\n const lastX = node.path[node.path.length - 1][0]\n const firstX = node.path[0][0]\n ctx.lineTo(lastX, layout.height)\n ctx.lineTo(firstX, layout.height)\n ctx.closePath()\n ctx.fill()\n }\n\n ctx.globalAlpha = 1\n ctx.setLineDash([])\n }\n}\n","import type { SceneNode, AreaSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\n/**\n * Canvas area renderer.\n * Renders AreaSceneNode as filled regions between topPath and bottomPath.\n * Supports both overlapping areas and stacked areas.\n */\nexport const areaCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const areaNodes = nodes.filter((n): n is AreaSceneNode => n.type === \"area\")\n\n for (const node of areaNodes) {\n if (node.topPath.length < 2) continue\n\n ctx.beginPath()\n\n // Draw top path forward\n const [startX, startY] = node.topPath[0]\n ctx.moveTo(startX, startY)\n for (let i = 1; i < node.topPath.length; i++) {\n ctx.lineTo(node.topPath[i][0], node.topPath[i][1])\n }\n\n // Draw bottom path backward to close the area\n for (let i = node.bottomPath.length - 1; i >= 0; i--) {\n ctx.lineTo(node.bottomPath[i][0], node.bottomPath[i][1])\n }\n\n ctx.closePath()\n\n // Fill\n const fillOpacity = node.style.fillOpacity ?? 0.7\n ctx.globalAlpha = fillOpacity\n ctx.fillStyle = node.style.fill || \"#4e79a7\"\n ctx.fill()\n\n // Stroke on top\n if (node.style.stroke && node.style.stroke !== \"none\") {\n ctx.globalAlpha = 1\n ctx.strokeStyle = node.style.stroke\n ctx.lineWidth = node.style.strokeWidth || 2\n ctx.setLineDash([])\n\n // Only stroke the top path (not the baseline)\n ctx.beginPath()\n ctx.moveTo(node.topPath[0][0], node.topPath[0][1])\n for (let i = 1; i < node.topPath.length; i++) {\n ctx.lineTo(node.topPath[i][0], node.topPath[i][1])\n }\n ctx.stroke()\n }\n\n ctx.globalAlpha = 1\n }\n}\n","import type { SceneNode, PointSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\n/**\n * Canvas point renderer.\n * Renders PointSceneNode as circles. Used for Scatterplot, BubbleChart, and SwarmChart.\n * Supports pulse glow effect via _pulseIntensity/_pulseColor fields.\n */\nexport const pointCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const pointNodes = nodes.filter((n): n is PointSceneNode => n.type === \"point\")\n\n for (const node of pointNodes) {\n ctx.beginPath()\n ctx.arc(node.x, node.y, node.r, 0, Math.PI * 2)\n\n const alpha = node.style.opacity ?? node.style.fillOpacity\n if (alpha != null) {\n ctx.globalAlpha = alpha\n }\n\n ctx.fillStyle = node.style.fill || \"#4e79a7\"\n ctx.fill()\n\n if (node.style.stroke) {\n ctx.strokeStyle = node.style.stroke\n ctx.lineWidth = node.style.strokeWidth || 1\n ctx.stroke()\n }\n\n // Pulse glow ring\n if (node._pulseIntensity && node._pulseIntensity > 0) {\n const glowRadius = 4\n ctx.beginPath()\n ctx.arc(node.x, node.y, node.r + glowRadius * node._pulseIntensity, 0, Math.PI * 2)\n ctx.strokeStyle = node._pulseColor || \"rgba(255,255,255,0.6)\"\n ctx.lineWidth = 2 * node._pulseIntensity\n ctx.globalAlpha = node._pulseIntensity * 0.5\n ctx.stroke()\n }\n\n ctx.globalAlpha = 1\n }\n}\n","import type { SceneNode, RectSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\n/**\n * Canvas bar renderer.\n * Renders RectSceneNode as filled rectangles. Supports icon/isotype mode\n * where an image is stamped repeatedly to fill the bar instead of a solid fill.\n */\nexport const barCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const rectNodes = nodes.filter((n): n is RectSceneNode => n.type === \"rect\")\n\n for (const node of rectNodes) {\n if (node.style.opacity != null) {\n ctx.globalAlpha = node.style.opacity\n }\n\n if (node.style.icon) {\n // Icon/isotype mode: stamp the image to fill the bar\n drawIconBar(ctx, node)\n } else {\n // Standard solid fill\n ctx.fillStyle = node.style.fill || \"#007bff\"\n ctx.fillRect(node.x, node.y, node.w, node.h)\n\n if (node.style.stroke) {\n ctx.strokeStyle = node.style.stroke\n ctx.lineWidth = node.style.strokeWidth || 1\n ctx.strokeRect(node.x, node.y, node.w, node.h)\n }\n }\n\n // Pulse overlay\n if (node._pulseIntensity && node._pulseIntensity > 0) {\n ctx.globalAlpha = node._pulseIntensity * 0.3\n ctx.fillStyle = node._pulseColor || \"rgba(255,255,255,0.6)\"\n ctx.fillRect(node.x, node.y, node.w, node.h)\n }\n\n ctx.globalAlpha = 1\n }\n}\n\nfunction drawIconBar(ctx: CanvasRenderingContext2D, node: RectSceneNode): void {\n const icon = node.style.icon!\n const padding = node.style.iconPadding || 2\n\n // Determine icon size: fit within the bar width\n const iconSize = Math.min(node.w, node.w) - padding\n if (iconSize <= 0) return\n\n // Determine if bar is primarily vertical or horizontal\n const isVerticalBar = node.h > node.w\n\n ctx.save()\n ctx.beginPath()\n ctx.rect(node.x, node.y, node.w, node.h)\n ctx.clip()\n\n if (isVerticalBar) {\n // Stamp icons from bottom to top\n const step = iconSize + padding\n const startY = node.y + node.h - iconSize\n const centerX = node.x + (node.w - iconSize) / 2\n\n for (let y = startY; y >= node.y - iconSize; y -= step) {\n ctx.drawImage(icon, centerX, y, iconSize, iconSize)\n }\n } else {\n // Stamp icons from left to right\n const step = iconSize + padding\n const centerY = node.y + (node.h - iconSize) / 2\n\n for (let x = node.x; x < node.x + node.w; x += step) {\n ctx.drawImage(icon, x, centerY, iconSize, iconSize)\n }\n }\n\n ctx.restore()\n}\n","import type { StreamRendererFn } from \"./types\"\nimport { pointCanvasRenderer } from \"./pointCanvasRenderer\"\n\n/**\n * Canvas swarm renderer.\n * Identical to point renderer — swarm data points are pre-computed as PointSceneNodes.\n * Separated for semantic clarity and potential future swarm-specific logic.\n */\nexport const swarmCanvasRenderer: StreamRendererFn = pointCanvasRenderer\n","import type { StreamRendererFn } from \"./types\"\nimport { barCanvasRenderer } from \"./barCanvasRenderer\"\n\n/**\n * Canvas waterfall renderer.\n * Waterfall bars are pre-computed as RectSceneNodes by PipelineStore,\n * so the rendering is identical to the bar renderer.\n * Connector lines between bars are handled separately if needed.\n */\nexport const waterfallCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n // Render the bar segments\n barCanvasRenderer(ctx, nodes, scales, layout)\n\n // Draw connector lines between consecutive waterfall bars\n const rects = nodes.filter(n => n.type === \"rect\")\n if (rects.length < 2) return\n\n ctx.save()\n ctx.strokeStyle = \"#999\"\n ctx.lineWidth = 1\n ctx.setLineDash([])\n\n for (let i = 0; i < rects.length - 1; i++) {\n const curr = rects[i] as any\n const next = rects[i + 1] as any\n if (!curr.datum?.cumEnd || !next.datum?.baseline) continue\n\n // Connect from end of current bar to start of next bar at cumEnd level\n const yConn = scales.y(curr.datum.cumEnd)\n const x1 = curr.x + curr.w\n const x2 = next.x\n\n ctx.beginPath()\n ctx.moveTo(x1, yConn)\n ctx.lineTo(x2, yConn)\n ctx.stroke()\n }\n\n ctx.restore()\n}\n","import type { SceneNode, HeatcellSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\n/**\n * Canvas heatmap renderer.\n * Renders HeatcellSceneNode as filled rectangles with color encoding.\n */\nexport const heatmapCanvasRenderer: StreamRendererFn = (ctx, nodes, scales, layout) => {\n const heatNodes = nodes.filter((n): n is HeatcellSceneNode => n.type === \"heatcell\")\n\n for (const node of heatNodes) {\n // Apply decay opacity if present (stored as style.opacity by applyDecay)\n const nodeStyle = (node as any).style\n if (nodeStyle?.opacity != null) {\n ctx.globalAlpha = nodeStyle.opacity\n }\n\n ctx.fillStyle = node.fill\n ctx.fillRect(node.x, node.y, node.w, node.h)\n\n // Cell border\n ctx.strokeStyle = \"#fff\"\n ctx.lineWidth = 1\n ctx.strokeRect(node.x, node.y, node.w, node.h)\n\n // Pulse overlay\n if (node._pulseIntensity && node._pulseIntensity > 0) {\n ctx.globalAlpha = node._pulseIntensity * 0.3\n ctx.fillStyle = node._pulseColor || \"rgba(255,255,255,0.6)\"\n ctx.fillRect(node.x, node.y, node.w, node.h)\n }\n\n ctx.globalAlpha = 1\n }\n}\n","import type { SceneNode, StreamScales, StreamLayout, CandlestickSceneNode } from \"../types\"\nimport type { StreamRendererFn } from \"./types\"\n\nexport const candlestickCanvasRenderer: StreamRendererFn = (\n ctx: CanvasRenderingContext2D,\n nodes: SceneNode[],\n _scales: StreamScales,\n _layout: StreamLayout\n) => {\n for (const node of nodes) {\n if (node.type !== \"candlestick\") continue\n const n = node as CandlestickSceneNode\n\n // Draw wick (high-low line)\n ctx.beginPath()\n ctx.moveTo(n.x, n.highY)\n ctx.lineTo(n.x, n.lowY)\n ctx.strokeStyle = n.wickColor\n ctx.lineWidth = n.wickWidth\n ctx.stroke()\n\n // Draw body (open-close rect)\n const bodyTop = Math.min(n.openY, n.closeY)\n const bodyHeight = Math.abs(n.openY - n.closeY)\n const bodyColor = n.isUp ? n.upColor : n.downColor\n\n ctx.fillStyle = bodyColor\n ctx.fillRect(n.x - n.bodyWidth / 2, bodyTop, n.bodyWidth, Math.max(bodyHeight, 1))\n\n // Body border\n ctx.strokeStyle = bodyColor\n ctx.lineWidth = 1\n ctx.strokeRect(n.x - n.bodyWidth / 2, bodyTop, n.bodyWidth, Math.max(bodyHeight, 1))\n }\n}\n","\"use client\"\nimport * as React from \"react\"\nimport {\n useRef,\n useState,\n useEffect,\n useMemo,\n useCallback,\n useImperativeHandle,\n forwardRef\n} from \"react\"\nimport type {\n StreamXYFrameProps,\n StreamXYFrameHandle,\n StreamChartType,\n HoverData,\n HoverAnnotationConfig,\n SceneNode,\n StreamScales,\n MarginalGraphicsConfig\n} from \"./types\"\nimport { brush as d3Brush, brushX as d3BrushX, brushY as d3BrushY } from \"d3-brush\"\nimport { select as d3Select } from \"d3-selection\"\nimport { DataSourceAdapter } from \"./DataSourceAdapter\"\nimport { PipelineStore, type PipelineConfig } from \"./PipelineStore\"\nimport { findNearestNode, type HitResult } from \"./CanvasHitTester\"\nimport { SVGOverlay } from \"./SVGOverlay\"\n\n// Canvas renderers\nimport { lineCanvasRenderer } from \"./renderers/lineCanvasRenderer\"\nimport { areaCanvasRenderer } from \"./renderers/areaCanvasRenderer\"\nimport { pointCanvasRenderer } from \"./renderers/pointCanvasRenderer\"\nimport { barCanvasRenderer } from \"./renderers/barCanvasRenderer\"\nimport { swarmCanvasRenderer } from \"./renderers/swarmCanvasRenderer\"\nimport { waterfallCanvasRenderer } from \"./renderers/waterfallCanvasRenderer\"\nimport { heatmapCanvasRenderer } from \"./renderers/heatmapCanvasRenderer\"\nimport { candlestickCanvasRenderer } from \"./renderers/candlestickCanvasRenderer\"\nimport type { StreamRendererFn } from \"./renderers/types\"\n\n// ── Renderer dispatch ──────────────────────────────────────────────────\n\nconst RENDERERS: Record<StreamChartType, StreamRendererFn[]> = {\n line: [areaCanvasRenderer, lineCanvasRenderer],\n area: [areaCanvasRenderer],\n stackedarea: [areaCanvasRenderer],\n scatter: [pointCanvasRenderer],\n bubble: [pointCanvasRenderer],\n heatmap: [heatmapCanvasRenderer],\n bar: [barCanvasRenderer],\n swarm: [swarmCanvasRenderer],\n waterfall: [waterfallCanvasRenderer],\n candlestick: [candlestickCanvasRenderer]\n}\n\n// ── Defaults ───────────────────────────────────────────────────────────\n\nconst DEFAULT_MARGIN = { top: 20, right: 20, bottom: 30, left: 40 }\n\n// ── Theme ─────────────────────────────────────────\n\ninterface ThemeColors {\n axisStroke: string\n tickText: string\n crosshair: string\n hoverFill: string\n hoverStroke: string\n pointRing: string\n}\n\nconst LIGHT_THEME: ThemeColors = {\n axisStroke: \"#ccc\",\n tickText: \"#666\",\n crosshair: \"rgba(0, 0, 0, 0.25)\",\n hoverFill: \"rgba(255, 255, 255, 0.3)\",\n hoverStroke: \"rgba(0, 0, 0, 0.4)\",\n pointRing: \"white\"\n}\n\nfunction resolveThemeColors(el: HTMLElement | null): ThemeColors {\n if (!el) return LIGHT_THEME\n const style = getComputedStyle(el)\n const textSecondary = style.getPropertyValue(\"--text-secondary\").trim()\n const textPrimary = style.getPropertyValue(\"--text-primary\").trim()\n const surface3 = style.getPropertyValue(\"--surface-3\").trim()\n const surface0 = style.getPropertyValue(\"--surface-0\").trim()\n\n if (!textSecondary && !textPrimary) return LIGHT_THEME\n\n return {\n axisStroke: surface3 || LIGHT_THEME.axisStroke,\n tickText: textSecondary || LIGHT_THEME.tickText,\n crosshair: textSecondary ? `${textSecondary}66` : LIGHT_THEME.crosshair,\n hoverFill: surface0 ? `${surface0}4D` : LIGHT_THEME.hoverFill,\n hoverStroke: textSecondary ? `${textSecondary}99` : LIGHT_THEME.hoverStroke,\n pointRing: surface0 || LIGHT_THEME.pointRing\n }\n}\n\n// ── Tooltip ────────────────────────────────────────────────────────────\n\nconst defaultTooltipStyle: React.CSSProperties = {\n background: \"rgba(0, 0, 0, 0.85)\",\n color: \"white\",\n padding: \"6px 10px\",\n borderRadius: 4,\n fontSize: 12,\n lineHeight: 1.5,\n boxShadow: \"0 2px 8px rgba(0, 0, 0, 0.15)\",\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\"\n}\n\nfunction DefaultTooltip({ hover }: { hover: HoverData }) {\n const fmtValue = (v: number) =>\n Number.isInteger(v) ? String(v) : v.toFixed(2)\n\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: 600, marginBottom: 2 }}>\n {fmtValue(hover.value)}\n </div>\n <div style={{ opacity: 0.7, fontSize: 11 }}>\n {fmtValue(hover.time)}\n </div>\n </div>\n )\n}\n\n// ── Crosshair drawing ──────────────────────────────────────────────────\n\nfunction drawCrosshair(\n ctx: CanvasRenderingContext2D,\n hover: HoverData,\n width: number,\n height: number,\n config: HoverAnnotationConfig,\n pointColor: string,\n theme: ThemeColors\n) {\n const showCrosshair = config.crosshair !== false\n if (!showCrosshair) return\n\n ctx.save()\n const crossStyle = typeof config.crosshair === \"object\" ? config.crosshair : {}\n ctx.strokeStyle = crossStyle.stroke || theme.crosshair\n ctx.lineWidth = crossStyle.strokeWidth || 1\n if (crossStyle.strokeDasharray) {\n ctx.setLineDash(crossStyle.strokeDasharray.split(/[\\s,]+/).map(Number))\n } else {\n ctx.setLineDash([4, 4])\n }\n\n ctx.beginPath()\n ctx.moveTo(hover.x, 0)\n ctx.lineTo(hover.x, height)\n ctx.stroke()\n\n ctx.beginPath()\n ctx.moveTo(0, hover.y)\n ctx.lineTo(width, hover.y)\n ctx.stroke()\n\n ctx.restore()\n\n // Point indicator\n ctx.beginPath()\n ctx.arc(hover.x, hover.y, 4, 0, Math.PI * 2)\n ctx.fillStyle = pointColor\n ctx.fill()\n ctx.strokeStyle = theme.pointRing\n ctx.lineWidth = 2\n ctx.stroke()\n}\n\n// ── Brush Overlay ─────────────────────────────────────────────────────\n\ninterface BrushOverlayProps {\n width: number\n height: number\n totalWidth: number\n totalHeight: number\n margin: { top: number; right: number; bottom: number; left: number }\n dimension: \"x\" | \"y\" | \"xy\"\n scales: StreamScales | null\n onBrush: (extent: { x: [number, number]; y: [number, number] } | null) => void\n}\n\nfunction BrushOverlay({\n width,\n height,\n totalWidth,\n totalHeight,\n margin,\n dimension,\n scales,\n onBrush\n}: BrushOverlayProps) {\n const svgRef = useRef<SVGSVGElement>(null)\n const brushRef = useRef<any>(null)\n\n useEffect(() => {\n if (!svgRef.current) return\n\n const g = d3Select(svgRef.current).select<SVGGElement>(\".brush-g\")\n\n const brushFn =\n dimension === \"x\"\n ? d3BrushX()\n : dimension === \"y\"\n ? d3BrushY()\n : d3Brush()\n\n brushFn.extent([[0, 0], [width, height]])\n\n brushFn.on(\"brush end\", (event: any) => {\n if (!scales) return\n\n if (!event.selection) {\n onBrush(null)\n return\n }\n\n let xRange: [number, number]\n let yRange: [number, number]\n\n if (dimension === \"x\") {\n const [px0, px1] = event.selection as [number, number]\n xRange = [scales.x.invert(px0), scales.x.invert(px1)]\n yRange = [scales.y.invert(height), scales.y.invert(0)]\n } else if (dimension === \"y\") {\n const [py0, py1] = event.selection as [number, number]\n xRange = [scales.x.invert(0), scales.x.invert(width)]\n yRange = [scales.y.invert(py1), scales.y.invert(py0)]\n } else {\n const [[px0, py0], [px1, py1]] = event.selection as [[number, number], [number, number]]\n xRange = [scales.x.invert(px0), scales.x.invert(px1)]\n yRange = [scales.y.invert(py1), scales.y.invert(py0)]\n }\n\n onBrush({ x: xRange, y: yRange })\n })\n\n g.call(brushFn as any)\n brushRef.current = brushFn\n\n // Style the brush selection rectangle\n g.select(\".selection\")\n .attr(\"fill\", \"steelblue\")\n .attr(\"fill-opacity\", 0.15)\n .attr(\"stroke\", \"steelblue\")\n .attr(\"stroke-width\", 1)\n\n return () => {\n brushFn.on(\"brush end\", null)\n brushRef.current = null\n }\n }, [width, height, dimension, scales, onBrush])\n\n return (\n <svg\n ref={svgRef}\n width={totalWidth}\n height={totalHeight}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n // Allow pointer events only on the brush overlay itself\n pointerEvents: \"all\"\n }}\n >\n <g className=\"brush-g\" transform={`translate(${margin.left},${margin.top})`} />\n </svg>\n )\n}\n\n// ── StreamXYFrame ──────────────────────────────────────────────────────\n\nconst StreamXYFrame = forwardRef<StreamXYFrameHandle, StreamXYFrameProps>(\n function StreamXYFrame(props, ref) {\n const {\n chartType,\n runtimeMode,\n data,\n xAccessor,\n yAccessor,\n colorAccessor,\n sizeAccessor,\n groupAccessor,\n lineDataAccessor,\n curve,\n normalize,\n binSize,\n valueAccessor,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n timeAccessor,\n xExtent,\n yExtent,\n extentPadding = 0.1,\n sizeRange,\n size = [500, 300],\n margin: marginProp,\n className,\n background,\n lineStyle,\n pointStyle,\n areaStyle,\n barStyle,\n waterfallStyle,\n swarmStyle,\n barColors,\n colorScheme,\n boundsAccessor,\n boundsStyle,\n openAccessor,\n highAccessor,\n lowAccessor,\n closeAccessor,\n candlestickStyle,\n showAxes = true,\n xLabel,\n yLabel,\n xFormat,\n yFormat,\n tickFormatTime,\n tickFormatValue,\n hoverAnnotation,\n tooltipContent,\n customHoverBehavior,\n enableHover,\n annotations,\n svgAnnotationRules,\n showGrid,\n legend,\n backgroundGraphics,\n foregroundGraphics,\n title,\n categoryAccessor,\n brush,\n onBrush,\n decay,\n pulse,\n transition,\n staleness,\n heatmapAggregation,\n heatmapXBins,\n heatmapYBins,\n marginalGraphics\n } = props\n\n const margin = { ...DEFAULT_MARGIN, ...marginProp }\n\n // Auto-expand margins to at least 60px when marginals are configured\n if (marginalGraphics) {\n const MIN_MARGINAL = 60\n if (marginalGraphics.top && margin.top < MIN_MARGINAL) margin.top = MIN_MARGINAL\n if (marginalGraphics.bottom && margin.bottom < MIN_MARGINAL) margin.bottom = MIN_MARGINAL\n if (marginalGraphics.left && margin.left < MIN_MARGINAL) margin.left = MIN_MARGINAL\n if (marginalGraphics.right && margin.right < MIN_MARGINAL) margin.right = MIN_MARGINAL\n }\n\n const adjustedWidth = size[0] - margin.left - margin.right\n const adjustedHeight = size[1] - margin.top - margin.bottom\n\n // Determine effective hover annotation config\n const effectiveHoverAnnotation = hoverAnnotation ?? enableHover\n\n // ── Refs ─────────────────────────────────────────────────────────────\n\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const rafRef = useRef(0)\n const dirtyRef = useRef(false)\n const [annotationFrame, setAnnotationFrame] = useState(0)\n\n // Scales state: updated after each scene computation so SVGOverlay re-renders\n const [currentScales, setCurrentScales] = useState<StreamScales | null>(null)\n\n // Hover state: ref for canvas (sync), React state for tooltip (async)\n const hoverRef = useRef<HoverData | null>(null)\n const [hoverPoint, setHoverPoint] = useState<HoverData | null>(null)\n\n // Staleness state\n const [isStale, setIsStale] = useState(false)\n\n // Marginal data values\n const [marginalXValues, setMarginalXValues] = useState<number[]>([])\n const [marginalYValues, setMarginalYValues] = useState<number[]>([])\n\n\n // Render function ref (always-fresh closure)\n const renderFnRef = useRef<() => void>(() => {})\n\n // ── Pipeline ─────────────────────────────────────────────────────────\n\n const isStreaming = runtimeMode === \"streaming\" || [\"bar\", \"swarm\", \"waterfall\"].includes(chartType)\n\n const pipelineConfig = useMemo((): PipelineConfig => ({\n chartType,\n runtimeMode: isStreaming ? \"streaming\" : \"bounded\",\n windowSize,\n windowMode,\n arrowOfTime: isStreaming ? arrowOfTime : \"right\",\n extentPadding,\n xAccessor: isStreaming ? undefined : xAccessor,\n yAccessor: isStreaming ? undefined : yAccessor,\n timeAccessor: isStreaming ? timeAccessor : undefined,\n valueAccessor,\n colorAccessor,\n sizeAccessor,\n groupAccessor,\n categoryAccessor,\n lineDataAccessor,\n xExtent,\n yExtent,\n sizeRange,\n binSize,\n normalize,\n boundsAccessor,\n boundsStyle,\n openAccessor,\n highAccessor,\n lowAccessor,\n closeAccessor,\n candlestickStyle,\n lineStyle,\n pointStyle,\n areaStyle,\n swarmStyle,\n colorScheme,\n barColors,\n annotations,\n decay,\n pulse,\n transition,\n staleness,\n heatmapAggregation,\n heatmapXBins,\n heatmapYBins\n }), [\n chartType, windowSize, windowMode, arrowOfTime, extentPadding,\n xAccessor, yAccessor, timeAccessor, valueAccessor,\n colorAccessor, sizeAccessor, groupAccessor, categoryAccessor,\n lineDataAccessor, xExtent, yExtent, sizeRange, binSize, normalize,\n boundsAccessor, boundsStyle,\n openAccessor, highAccessor, lowAccessor, closeAccessor, candlestickStyle,\n lineStyle, pointStyle, areaStyle, swarmStyle, colorScheme, barColors, annotations,\n decay, pulse, transition, staleness,\n heatmapAggregation, heatmapXBins, heatmapYBins,\n isStreaming\n ])\n\n const storeRef = useRef<PipelineStore | null>(null)\n if (!storeRef.current) {\n storeRef.current = new PipelineStore(pipelineConfig)\n }\n\n // ── Stable scheduleRender ────────────────────────────────────────────\n\n const scheduleRender = useCallback(() => {\n if (rafRef.current) return\n rafRef.current = requestAnimationFrame(() => renderFnRef.current())\n }, [])\n\n // Update config when it changes — also schedule re-render since style\n // callbacks (pointStyle, areaStyle, etc.) may have changed.\n useEffect(() => {\n storeRef.current?.updateConfig(pipelineConfig)\n dirtyRef.current = true\n scheduleRender()\n }, [pipelineConfig, scheduleRender])\n\n // ── DataSourceAdapter ────────────────────────────────────────────────\n\n const adapterRef = useRef<DataSourceAdapter | null>(null)\n if (!adapterRef.current) {\n adapterRef.current = new DataSourceAdapter((changeset) => {\n const store = storeRef.current\n if (!store) return\n const needsRender = store.ingest(changeset)\n if (needsRender) {\n dirtyRef.current = true\n scheduleRender()\n }\n })\n }\n\n // ── Push API (ref handle) ────────────────────────────────────────────\n\n const pushPoint = useCallback((datum: Record<string, any>) => {\n adapterRef.current?.push(datum)\n }, [])\n\n const pushManyPoints = useCallback((data: Record<string, any>[]) => {\n adapterRef.current?.pushMany(data)\n }, [])\n\n const clearAll = useCallback(() => {\n adapterRef.current?.clear()\n storeRef.current?.clear()\n dirtyRef.current = true\n scheduleRender()\n }, [scheduleRender])\n\n useImperativeHandle(ref, () => ({\n push: pushPoint,\n pushMany: pushManyPoints,\n clear: clearAll,\n getData: () => storeRef.current?.getData() ?? [],\n getScales: () => storeRef.current?.scales ?? null,\n getExtents: () => storeRef.current?.getExtents() ?? null\n }), [pushPoint, pushManyPoints, clearAll])\n\n // ── Controlled data prop ─────────────────────────────────────────────\n\n useEffect(() => {\n if (!data) return\n adapterRef.current?.setBoundedData(data)\n }, [data])\n\n // ── Hover handlers ───────────────────────────────────────────────────\n\n const hoverHandlerRef = useRef<(e: React.MouseEvent) => void>(() => {})\n const hoverLeaveRef = useRef<() => void>(() => {})\n\n hoverHandlerRef.current = (e: React.MouseEvent) => {\n if (!effectiveHoverAnnotation) return\n\n const canvas = canvasRef.current\n if (!canvas) return\n const rect = canvas.getBoundingClientRect()\n\n const chartX = e.clientX - rect.left - margin.left\n const chartY = e.clientY - rect.top - margin.top\n\n if (chartX < 0 || chartX > adjustedWidth || chartY < 0 || chartY > adjustedHeight) {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverPoint(null)\n if (customHoverBehavior) customHoverBehavior(null)\n scheduleRender()\n }\n return\n }\n\n const store = storeRef.current\n if (!store || store.scene.length === 0) return\n\n // Hit test against scene graph\n const hit = findNearestNode(store.scene, chartX, chartY)\n if (!hit) {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverPoint(null)\n if (customHoverBehavior) customHoverBehavior(null)\n scheduleRender()\n }\n return\n }\n\n const hover: HoverData = {\n data: hit.datum,\n time: hit.x,\n value: hit.y,\n x: hit.x,\n y: hit.y\n }\n\n hoverRef.current = hover\n setHoverPoint(hover)\n if (customHoverBehavior) customHoverBehavior(hover)\n scheduleRender()\n }\n\n hoverLeaveRef.current = () => {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverPoint(null)\n if (customHoverBehavior) customHoverBehavior(null)\n scheduleRender()\n }\n }\n\n const onMouseMove = useCallback(\n (e: React.MouseEvent) => hoverHandlerRef.current(e),\n []\n )\n const onMouseLeave = useCallback(\n () => hoverLeaveRef.current(),\n []\n )\n\n // ── Render function ──────────────────────────────────────────────────\n\n renderFnRef.current = () => {\n rafRef.current = 0\n const canvas = canvasRef.current\n if (!canvas) return\n\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) return\n\n const store = storeRef.current\n if (!store) return\n\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n\n // Advance transition animation (before scene rebuild)\n const isTransitioning = store.advanceTransition(now)\n\n // Compute scene graph (scales + scene nodes) — skip if mid-transition\n if (!isTransitioning) {\n store.computeScene({ width: adjustedWidth, height: adjustedHeight })\n }\n\n // DPR setup\n const dpr = typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1\n canvas.width = size[0] * dpr\n canvas.height = size[1] * dpr\n canvas.style.width = `${size[0]}px`\n canvas.style.height = `${size[1]}px`\n ctx.scale(dpr, dpr)\n ctx.translate(margin.left, margin.top)\n ctx.clearRect(-margin.left, -margin.top, size[0], size[1])\n\n const theme = resolveThemeColors(canvas)\n\n // Staleness dimming\n const staleThreshold = staleness?.threshold ?? 5000\n const currentlyStale = staleness && store.lastIngestTime > 0 &&\n (now - store.lastIngestTime) > staleThreshold\n\n if (currentlyStale) {\n ctx.globalAlpha = staleness?.dimOpacity ?? 0.5\n }\n\n // Background\n if (background) {\n ctx.fillStyle = background\n ctx.fillRect(0, 0, adjustedWidth, adjustedHeight)\n }\n\n // Render data marks via canvas renderers\n const renderers = RENDERERS[chartType]\n if (renderers && store.scales) {\n for (const renderer of renderers) {\n renderer(\n ctx,\n store.scene,\n store.scales,\n { width: adjustedWidth, height: adjustedHeight }\n )\n }\n }\n\n // Reset alpha after staleness dimming\n if (currentlyStale) {\n ctx.globalAlpha = 1\n }\n\n // Draw crosshair on hover\n if (effectiveHoverAnnotation && hoverRef.current && store.scales) {\n const config: HoverAnnotationConfig =\n typeof effectiveHoverAnnotation === \"object\" ? effectiveHoverAnnotation : {}\n drawCrosshair(\n ctx,\n hoverRef.current,\n adjustedWidth,\n adjustedHeight,\n config,\n \"#007bff\",\n theme\n )\n }\n\n const wasDirty = dirtyRef.current\n dirtyRef.current = false\n\n // Push scales into React state so SVGOverlay renders axes/grid\n if (wasDirty && store.scales) {\n setCurrentScales(store.scales)\n\n // Extract x/y values for marginal graphics\n if (marginalGraphics) {\n const rawData = store.getData()\n const getX = typeof xAccessor === \"function\"\n ? xAccessor\n : (d: Record<string, any>) => d[xAccessor || \"x\"]\n const getY = typeof yAccessor === \"function\"\n ? yAccessor\n : (d: Record<string, any>) => d[yAccessor || \"y\"]\n setMarginalXValues(rawData.map(d => getX(d)).filter((v): v is number => typeof v === \"number\" && isFinite(v)))\n setMarginalYValues(rawData.map(d => getY(d)).filter((v): v is number => typeof v === \"number\" && isFinite(v)))\n }\n }\n\n // Trigger React re-render for SVG annotations\n if (wasDirty && annotations && annotations.length > 0 && svgAnnotationRules) {\n setAnnotationFrame(f => f + 1)\n }\n\n // Update staleness React state for badge\n if (staleness?.showBadge) {\n setIsStale(!!currentlyStale)\n }\n\n // Schedule next frame for continuous rendering (pulse/transitions)\n if (isTransitioning || store.hasActivePulses) {\n rafRef.current = requestAnimationFrame(() => renderFnRef.current())\n }\n }\n\n // ── Lifecycle ────────────────────────────────────────────────────────\n\n useEffect(() => {\n scheduleRender()\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }, [scheduleRender])\n\n // Re-render when visual props change\n useEffect(() => {\n dirtyRef.current = true\n scheduleRender()\n }, [chartType, adjustedWidth, adjustedHeight, showAxes, background, lineStyle, scheduleRender])\n\n // Staleness check timer\n useEffect(() => {\n if (!staleness) return\n const interval = setInterval(() => {\n const store = storeRef.current\n if (!store || store.lastIngestTime === 0) return\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const threshold = staleness.threshold ?? 5000\n const stale = (now - store.lastIngestTime) > threshold\n if (stale !== isStale) {\n setIsStale(stale)\n dirtyRef.current = true\n scheduleRender()\n }\n }, 1000)\n return () => clearInterval(interval)\n }, [staleness, isStale, scheduleRender])\n\n // ── Tooltip positioning ──────────────────────────────────────────────\n\n const tooltipRendered = effectiveHoverAnnotation && hoverPoint\n ? (tooltipContent ? tooltipContent(hoverPoint) : <DefaultTooltip hover={hoverPoint} />)\n : null\n\n const tooltipElement = tooltipRendered ? (\n <div\n className=\"stream-frame-tooltip\"\n style={{\n position: \"absolute\",\n left: margin.left + hoverPoint!.x,\n top: margin.top + hoverPoint!.y,\n transform: `translate(${\n hoverPoint!.x > adjustedWidth * 0.7 ? \"calc(-100% - 12px)\" : \"12px\"\n }, ${\n hoverPoint!.y < adjustedHeight * 0.3 ? \"4px\" : \"calc(-100% - 4px)\"\n })`,\n pointerEvents: \"none\",\n zIndex: 1\n }}\n >\n {tooltipRendered}\n </div>\n ) : null\n\n // ── Render ───────────────────────────────────────────────────────────\n\n return (\n <div\n className={`stream-xy-frame${className ? ` ${className}` : \"\"}`}\n style={{\n position: \"relative\",\n width: size[0],\n height: size[1]\n }}\n onMouseMove={effectiveHoverAnnotation ? onMouseMove : undefined}\n onMouseLeave={effectiveHoverAnnotation ? onMouseLeave : undefined}\n >\n {backgroundGraphics && (\n <svg\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n width: size[0],\n height: size[1],\n pointerEvents: \"none\"\n }}\n >\n {backgroundGraphics}\n </svg>\n )}\n <canvas\n ref={canvasRef}\n style={{\n position: \"absolute\",\n left: 0,\n top: 0\n }}\n />\n <SVGOverlay\n width={adjustedWidth}\n height={adjustedHeight}\n totalWidth={size[0]}\n totalHeight={size[1]}\n margin={margin}\n scales={currentScales}\n showAxes={showAxes}\n xLabel={xLabel}\n yLabel={yLabel}\n xFormat={xFormat || tickFormatTime}\n yFormat={yFormat || tickFormatValue}\n showGrid={showGrid}\n title={title}\n legend={legend}\n foregroundGraphics={foregroundGraphics}\n marginalGraphics={marginalGraphics}\n xValues={marginalXValues}\n yValues={marginalYValues}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n annotationFrame={annotationFrame}\n />\n {(brush || onBrush) && (\n <BrushOverlay\n width={adjustedWidth}\n height={adjustedHeight}\n totalWidth={size[0]}\n totalHeight={size[1]}\n margin={margin}\n dimension={brush?.dimension ?? \"xy\"}\n scales={currentScales}\n onBrush={onBrush ?? (() => {})}\n />\n )}\n {staleness?.showBadge && (\n <div\n className=\"stream-staleness-badge\"\n style={{\n position: \"absolute\",\n ...(staleness.badgePosition === \"top-left\" ? { top: 4, left: 4 } :\n staleness.badgePosition === \"bottom-left\" ? { bottom: 4, left: 4 } :\n staleness.badgePosition === \"bottom-right\" ? { bottom: 4, right: 4 } :\n { top: 4, right: 4 }),\n padding: \"2px 8px\",\n borderRadius: 4,\n fontSize: 11,\n fontWeight: 600,\n pointerEvents: \"none\",\n background: isStale ? \"#dc3545\" : \"#28a745\",\n color: \"white\"\n }}\n >\n {isStale ? \"STALE\" : \"LIVE\"}\n </div>\n )}\n {tooltipElement}\n </div>\n )\n }\n)\n\nStreamXYFrame.displayName = \"StreamXYFrame\"\nexport default StreamXYFrame\n","import type { ReactNode } from \"react\"\nimport type { HoverData, AnnotationContext } from \"../realtime/types\"\nimport type { LegendGroup } from \"../types/legendTypes\"\nimport type { Style } from \"./types\"\n\n// ── Tension configuration ──────────────────────────────────────────────\n\nexport interface TensionConfig {\n weightChange: number\n newEdge: number\n newNode: number\n threshold: number\n transitionDuration: number\n}\n\nexport const DEFAULT_TENSION_CONFIG: TensionConfig = {\n weightChange: 0.1,\n newEdge: 0.5,\n newNode: 1.0,\n threshold: 3.0,\n transitionDuration: 500\n}\n\n// ── Graph topology types ───────────────────────────────────────────────\n\nexport interface RealtimeNode {\n id: string\n x0: number\n x1: number\n y0: number\n y1: number\n x: number\n y: number\n width: number\n height: number\n _prevX0?: number\n _prevX1?: number\n _prevY0?: number\n _prevY1?: number\n _targetX0?: number\n _targetX1?: number\n _targetY0?: number\n _targetY1?: number\n value: number\n depth?: number\n data?: Record<string, any>\n createdByFrame?: boolean\n sourceLinks?: RealtimeEdge[]\n targetLinks?: RealtimeEdge[]\n}\n\nexport interface RealtimeEdge {\n source: RealtimeNode | string\n target: RealtimeNode | string\n value: number\n y0: number\n y1: number\n sankeyWidth: number\n _prevY0?: number\n _prevY1?: number\n _prevSankeyWidth?: number\n _targetY0?: number\n _targetY1?: number\n _targetSankeyWidth?: number\n direction?: string\n circular?: boolean\n circularPathData?: any\n bezier?: BezierCache\n data?: Record<string, any>\n}\n\n// ── Bezier cache ───────────────────────────────────────────────────────\n\nexport interface BezierPoint {\n x: number\n y: number\n}\n\nexport interface BezierCache {\n circular: boolean\n points?: [BezierPoint, BezierPoint, BezierPoint, BezierPoint]\n segments?: Array<[BezierPoint, BezierPoint, BezierPoint, BezierPoint]>\n halfWidth: number\n}\n\n// ── Particle system ────────────────────────────────────────────────────\n\nexport interface Particle {\n t: number\n offset: number\n edgeIndex: number\n active: boolean\n x: number\n y: number\n}\n\nexport interface ParticleStyle {\n radius?: number\n color?: string | ((edge: RealtimeEdge, node: RealtimeNode) => string)\n /** Color particles by source or target node (default: \"source\") */\n colorBy?: \"source\" | \"target\"\n opacity?: number\n speedMultiplier?: number\n maxPerEdge?: number\n spawnRate?: number\n}\n\nexport const DEFAULT_PARTICLE_STYLE: Required<\n Pick<ParticleStyle, \"radius\" | \"opacity\" | \"speedMultiplier\" | \"maxPerEdge\" | \"spawnRate\">\n> = {\n radius: 3,\n opacity: 0.7,\n speedMultiplier: 1,\n maxPerEdge: 50,\n spawnRate: 0.1\n}\n\n// ── Push API ───────────────────────────────────────────────────────────\n\nexport interface EdgePush {\n source: string\n target: string\n value: number\n}\n\n// ── Re-export HoverData ────────────────────────────────────────────────\n\nexport type { HoverData }\n\n// ── Backwards-compat aliases for old RealtimeNetworkFrame types ────────\n\nexport type RealtimeNetworkFrameHandle = StreamNetworkFrameHandle\n\nexport interface RealtimeNetworkFrameProps {\n initialEdges?: EdgePush[]\n size?: [number, number]\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n orientation?: \"horizontal\" | \"vertical\"\n nodeAlign?: \"justify\" | \"left\" | \"right\" | \"center\"\n nodePaddingRatio?: number\n nodeWidth?: number\n tensionConfig?: Partial<TensionConfig>\n showParticles?: boolean\n particleStyle?: ParticleStyle\n colorBy?: string | ((d: RealtimeNode) => string)\n colorScheme?: string | string[]\n edgeColorBy?: \"source\" | \"target\" | ((d: RealtimeEdge) => string)\n edgeOpacity?: number\n nodeLabel?: string | ((d: RealtimeNode) => string)\n showLabels?: boolean\n enableHover?: boolean\n tooltipContent?: (d: { type: \"node\" | \"edge\"; data: any }) => ReactNode\n onTopologyChange?: (nodes: RealtimeNode[], edges: RealtimeEdge[]) => void\n background?: string\n className?: string\n}\n\n\n// ── Chart types ────────────────────────────────────────────────────────\n\nexport type NetworkChartType =\n | \"force\"\n | \"sankey\"\n | \"chord\"\n | \"tree\"\n | \"cluster\"\n | \"treemap\"\n | \"circlepack\"\n | \"partition\"\n\n// ── Scene graph nodes ─────────────────────────────────────────────────\n\n/** Circle node — used by force, tree, cluster, circlepack */\nexport interface NetworkCircleNode {\n type: \"circle\"\n cx: number\n cy: number\n r: number\n style: Style\n datum: any\n id?: string\n label?: string\n depth?: number\n}\n\n/** Rect node — used by sankey, treemap, partition */\nexport interface NetworkRectNode {\n type: \"rect\"\n x: number\n y: number\n w: number\n h: number\n style: Style\n datum: any\n id?: string\n label?: string\n depth?: number\n}\n\n/** Arc node — used by chord */\nexport interface NetworkArcNode {\n type: \"arc\"\n cx: number\n cy: number\n innerR: number\n outerR: number\n startAngle: number\n endAngle: number\n style: Style\n datum: any\n id?: string\n label?: string\n}\n\n/** Line edge — used by force */\nexport interface NetworkLineEdge {\n type: \"line\"\n x1: number\n y1: number\n x2: number\n y2: number\n style: Style\n datum: any\n}\n\n/** Bezier band edge — used by sankey */\nexport interface NetworkBezierEdge {\n type: \"bezier\"\n pathD: string\n bezierCache?: BezierCache\n style: Style\n datum: any\n}\n\n/** Ribbon edge — used by chord */\nexport interface NetworkRibbonEdge {\n type: \"ribbon\"\n pathD: string\n style: Style\n datum: any\n}\n\n/** Curved edge — used by tree, cluster */\nexport interface NetworkCurvedEdge {\n type: \"curved\"\n pathD: string\n style: Style\n datum: any\n}\n\nexport type NetworkSceneNode =\n | NetworkCircleNode\n | NetworkRectNode\n | NetworkArcNode\n\nexport type NetworkSceneEdge =\n | NetworkLineEdge\n | NetworkBezierEdge\n | NetworkRibbonEdge\n | NetworkCurvedEdge\n\n/** Label data for the SVG overlay */\nexport interface NetworkLabel {\n x: number\n y: number\n text: string\n anchor?: \"start\" | \"middle\" | \"end\"\n baseline?: string\n fontSize?: number\n fontWeight?: number | string\n fill?: string\n stroke?: string\n strokeWidth?: number\n paintOrder?: string\n}\n\n// ── Layout plugin interface ───────────────────────────────────────────\n\nexport interface NetworkLayoutPlugin {\n /**\n * Run the layout algorithm. May mutate node/edge positions directly.\n * For bounded data, called once. For streaming, called on topology changes.\n */\n computeLayout(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): void\n\n /**\n * Build scene nodes + labels from the positioned node/edge data.\n */\n buildScene(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n }\n\n /** Whether this layout supports incremental streaming updates */\n supportsStreaming: boolean\n\n /** Whether this layout uses hierarchical (tree) input instead of nodes+edges */\n hierarchical: boolean\n}\n\n// ── Pipeline config ──────────────────────────────────────────────────\n\nexport interface NetworkPipelineConfig {\n chartType: NetworkChartType\n\n // ── Accessors ────────────────────────────────────\n nodeIDAccessor?: string | ((d: any) => string)\n sourceAccessor?: string | ((d: any) => string)\n targetAccessor?: string | ((d: any) => string)\n valueAccessor?: string | ((d: any) => number)\n\n // ── Hierarchy (tree/treemap/circlepack) ──────────\n childrenAccessor?: string | ((d: any) => any[])\n hierarchySum?: (d: any) => number\n\n // ── Sankey layout ────────────────────────────────\n orientation?: \"horizontal\" | \"vertical\"\n nodeAlign?: \"justify\" | \"left\" | \"right\" | \"center\"\n nodePaddingRatio?: number\n nodeWidth?: number\n edgeSort?: (a: any, b: any) => number\n\n // ── Force layout ─────────────────────────────────\n iterations?: number\n forceStrength?: number\n\n // ── Chord layout ─────────────────────────────────\n padAngle?: number\n groupWidth?: number\n sortGroups?: (a: any, b: any) => number\n\n // ── Tree/hierarchy layout ────────────────────────\n treeOrientation?: \"vertical\" | \"horizontal\" | \"radial\"\n edgeType?: \"line\" | \"curve\"\n padding?: number\n paddingTop?: number\n\n // ── Tension (streaming sankey) ───────────────────\n tensionConfig?: TensionConfig\n\n // ── Particles (sankey) ───────────────────────────\n showParticles?: boolean\n particleStyle?: ParticleStyle\n\n // ── Style functions ──────────────────────────────\n nodeStyle?: (d: any) => Record<string, any>\n edgeStyle?: (d: any) => Record<string, any>\n nodeLabel?: string | ((d: any) => string)\n showLabels?: boolean\n\n // ── Color ────────────────────────────────────────\n colorBy?: string | ((d: any) => string)\n colorScheme?: string | string[]\n edgeColorBy?: \"source\" | \"target\" | \"gradient\" | ((d: any) => string)\n edgeOpacity?: number\n colorByDepth?: boolean\n nodeSize?: number | string | ((d: any) => number)\n nodeSizeRange?: [number, number]\n}\n\n// ── Component props ─────────────────────────────────────────────────\n\nexport interface StreamNetworkFrameProps<T = Record<string, any>> {\n // ── Chart type ───────────────────────────────────\n chartType: NetworkChartType\n\n // ── Data (bounded mode: nodes+edges or hierarchy root) ──\n nodes?: T[]\n edges?: T[] | T // array for graph data, single object for hierarchy\n /** Hierarchy root (alias for edges when using tree/treemap/circlepack) */\n data?: T\n\n // ── Initial edges for streaming ──────────────────\n initialEdges?: EdgePush[]\n\n // ── Accessors ────────────────────────────────────\n nodeIDAccessor?: string | ((d: T) => string)\n sourceAccessor?: string | ((d: T) => string)\n targetAccessor?: string | ((d: T) => string)\n valueAccessor?: string | ((d: T) => number)\n\n // ── Hierarchy ────────────────────────────────────\n childrenAccessor?: string | ((d: T) => T[])\n hierarchySum?: (d: T) => number\n\n // ── Layout config ────────────────────────────────\n orientation?: \"horizontal\" | \"vertical\"\n nodeAlign?: \"justify\" | \"left\" | \"right\" | \"center\"\n nodePaddingRatio?: number\n nodeWidth?: number\n iterations?: number\n forceStrength?: number\n padAngle?: number\n groupWidth?: number\n sortGroups?: (a: any, b: any) => number\n edgeSort?: (a: any, b: any) => number\n treeOrientation?: \"vertical\" | \"horizontal\" | \"radial\"\n edgeType?: \"line\" | \"curve\"\n padding?: number\n paddingTop?: number\n\n // ── Tension (streaming) ──────────────────────────\n tensionConfig?: Partial<TensionConfig>\n\n // ── Particles (sankey) ───────────────────────────\n showParticles?: boolean\n particleStyle?: ParticleStyle\n\n // ── Style ────────────────────────────────────────\n nodeStyle?: (d: any) => Record<string, any>\n edgeStyle?: (d: any) => Record<string, any>\n colorBy?: string | ((d: any) => string)\n colorScheme?: string | string[]\n edgeColorBy?: \"source\" | \"target\" | \"gradient\" | ((d: any) => string)\n edgeOpacity?: number\n colorByDepth?: boolean\n nodeSize?: number | string | ((d: any) => number)\n nodeSizeRange?: [number, number]\n\n // ── Labels ───────────────────────────────────────\n nodeLabel?: string | ((d: any) => string)\n showLabels?: boolean\n\n // ── Layout ───────────────────────────────────────\n size?: [number, number]\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n className?: string\n background?: string\n\n // ── Interaction ──────────────────────────────────\n enableHover?: boolean\n tooltipContent?: (d: { type: \"node\" | \"edge\"; data: any; x: number; y: number }) => ReactNode\n onTopologyChange?: (nodes: RealtimeNode[], edges: RealtimeEdge[]) => void\n\n // ── Annotations ──────────────────────────────────\n annotations?: Record<string, any>[]\n svgAnnotationRules?: (\n annotation: Record<string, any>,\n index: number,\n context: AnnotationContext\n ) => ReactNode\n\n // ── Legend / title ───────────────────────────────\n legend?: ReactNode | { legendGroups: LegendGroup[] }\n title?: string | ReactNode\n foregroundGraphics?: ReactNode\n backgroundGraphics?: ReactNode\n}\n\n// ── Ref handle ──────────────────────────────────────────────────────\n\nexport interface StreamNetworkFrameHandle {\n push(edge: EdgePush): void\n pushMany(edges: EdgePush[]): void\n clear(): void\n getTopology(): { nodes: RealtimeNode[]; edges: RealtimeEdge[] }\n relayout(): void\n getTension(): number\n}\n\n// ── Canvas renderer function type ───────────────────────────────────\n\nexport type NetworkRendererFn = (\n ctx: CanvasRenderingContext2D,\n nodes: NetworkSceneNode[],\n edges: NetworkSceneEdge[],\n size: [number, number]\n) => void\n","import type { Particle, RealtimeEdge, BezierCache, BezierPoint } from \"./networkTypes\"\n\n/**\n * Object-pool particle manager for high-performance canvas rendering.\n *\n * Pre-allocates a fixed-size array to avoid GC pressure.\n * Particles travel along bezier paths within link bands.\n */\nexport class ParticlePool {\n particles: Particle[]\n private capacity: number\n\n constructor(capacity: number) {\n this.capacity = capacity\n this.particles = new Array(capacity)\n for (let i = 0; i < capacity; i++) {\n this.particles[i] = {\n t: 0,\n offset: 0,\n edgeIndex: 0,\n active: false,\n x: 0,\n y: 0\n }\n }\n }\n\n /**\n * Spawn a new particle on the given edge.\n * Returns the particle if a free slot was found, null otherwise.\n */\n spawn(edgeIndex: number): Particle | null {\n for (let i = 0; i < this.capacity; i++) {\n const p = this.particles[i]\n if (!p.active) {\n p.active = true\n p.t = 0\n p.offset = Math.random() - 0.5 // [-0.5, 0.5]\n p.edgeIndex = edgeIndex\n p.x = 0\n p.y = 0\n return p\n }\n }\n return null // Pool exhausted\n }\n\n /**\n * Advance all active particles by deltaTime.\n * Recycles particles that have completed their journey (t >= 1).\n */\n step(deltaTime: number, speed: number, edges: RealtimeEdge[]): void {\n for (let i = 0; i < this.capacity; i++) {\n const p = this.particles[i]\n if (!p.active) continue\n\n const edge = edges[p.edgeIndex]\n if (!edge || !edge.bezier) {\n p.active = false\n continue\n }\n\n // Advance t — speed is normalized so 1.0 = traverse full path in 1 second\n p.t += deltaTime * speed\n\n if (p.t >= 1) {\n p.active = false\n continue\n }\n\n // Evaluate position along the bezier path\n const pos = evaluateBezier(edge.bezier, p.t, p.offset)\n p.x = pos.x\n p.y = pos.y\n }\n }\n\n /** Count active particles for a specific edge index */\n countForEdge(edgeIndex: number): number {\n let count = 0\n for (let i = 0; i < this.capacity; i++) {\n if (this.particles[i].active && this.particles[i].edgeIndex === edgeIndex) {\n count++\n }\n }\n return count\n }\n\n /** Deactivate all particles */\n clear(): void {\n for (let i = 0; i < this.capacity; i++) {\n this.particles[i].active = false\n }\n }\n\n /** Resize the pool (creates a new array) */\n resize(newCapacity: number): void {\n if (newCapacity <= this.capacity) return\n const oldParticles = this.particles\n this.particles = new Array(newCapacity)\n for (let i = 0; i < newCapacity; i++) {\n if (i < oldParticles.length) {\n this.particles[i] = oldParticles[i]\n } else {\n this.particles[i] = {\n t: 0,\n offset: 0,\n edgeIndex: 0,\n active: false,\n x: 0,\n y: 0\n }\n }\n }\n this.capacity = newCapacity\n }\n}\n\n/**\n * Evaluate a point along a bezier path at parameter t with perpendicular offset.\n *\n * Uses the chord direction (P0→P3) for perpendicular offset instead of the\n * local tangent. This gives a stable perpendicular across the entire curve,\n * eliminating the pivot/rotation artifact visible on short curves.\n */\nfunction evaluateBezier(\n cache: BezierCache,\n t: number,\n offset: number\n): BezierPoint {\n if (cache.circular && cache.segments) {\n return evaluateMultiSegment(cache.segments, t, offset, cache.halfWidth)\n }\n\n if (!cache.points) return { x: 0, y: 0 }\n\n const [p0, p1, p2, p3] = cache.points\n const pos = cubicBezier(p0, p1, p2, p3, t)\n\n // Use chord direction (P0→P3) for stable perpendicular offset\n const dx = p3.x - p0.x\n const dy = p3.y - p0.y\n const len = Math.sqrt(dx * dx + dy * dy)\n\n if (len > 0.001) {\n // Perpendicular to the chord (rotated 90 degrees)\n const nx = -dy / len\n const ny = dx / len\n pos.x += nx * offset * cache.halfWidth * 2\n pos.y += ny * offset * cache.halfWidth * 2\n }\n\n return pos\n}\n\n/**\n * Evaluate position along a multi-segment bezier path.\n * Maps global t [0,1] to the appropriate segment.\n * Uses segment chord direction for stable perpendicular offset.\n */\nfunction evaluateMultiSegment(\n segments: Array<[BezierPoint, BezierPoint, BezierPoint, BezierPoint]>,\n t: number,\n offset: number,\n halfWidth: number\n): BezierPoint {\n const n = segments.length\n const globalT = t * n\n const segIndex = Math.min(Math.floor(globalT), n - 1)\n const localT = globalT - segIndex\n\n const [p0, p1, p2, p3] = segments[segIndex]\n const pos = cubicBezier(p0, p1, p2, p3, localT)\n\n // Use segment chord direction for stable perpendicular\n const dx = p3.x - p0.x\n const dy = p3.y - p0.y\n const len = Math.sqrt(dx * dx + dy * dy)\n\n if (len > 0.001) {\n const nx = -dy / len\n const ny = dx / len\n pos.x += nx * offset * halfWidth * 2\n pos.y += ny * offset * halfWidth * 2\n }\n\n return pos\n}\n\n/** Cubic bezier evaluation: B(t) = (1-t)^3*P0 + 3*(1-t)^2*t*P1 + 3*(1-t)*t^2*P2 + t^3*P3 */\nfunction cubicBezier(\n p0: BezierPoint,\n p1: BezierPoint,\n p2: BezierPoint,\n p3: BezierPoint,\n t: number\n): BezierPoint {\n const mt = 1 - t\n const mt2 = mt * mt\n const mt3 = mt2 * mt\n const t2 = t * t\n const t3 = t2 * t\n\n return {\n x: mt3 * p0.x + 3 * mt2 * t * p1.x + 3 * mt * t2 * p2.x + t3 * p3.x,\n y: mt3 * p0.y + 3 * mt2 * t * p1.y + 3 * mt * t2 * p2.y + t3 * p3.y\n }\n}\n\n","import { interpolateNumber } from \"d3-interpolate\"\nimport { line, curveLinearClosed } from \"d3-shape\"\n\nconst dedupeRibbonPoints =\n (weight = 1) =>\n (p, c) => {\n const l = p[p.length - 1]\n if (\n !l ||\n Math.round(l.x / weight) !== Math.round(c.x / weight) ||\n Math.round(l.y / weight) !== Math.round(c.y / weight)\n ) {\n p.push(c)\n }\n return p\n }\n\nfunction linearRibbon() {\n const _lineConstructor = line()\n let _xAccessor = function (d) {\n return d.x\n }\n let _yAccessor = function (d) {\n return d.y\n }\n let _rAccessor = function (d) {\n return d.r\n }\n let _interpolator = curveLinearClosed\n\n function _ribbon(pathData) {\n if (pathData.multiple) {\n const original_r = _rAccessor\n const parallelTotal = pathData.multiple.reduce((p, c) => p + c.weight, 0)\n\n _rAccessor = () => parallelTotal\n\n const totalPoints = buildRibbon(pathData.points)\n\n let currentPoints = totalPoints\n .filter((d) => d.direction === \"forward\")\n .reduce(dedupeRibbonPoints(), [])\n\n const allRibbons = []\n\n pathData.multiple.forEach((siblingPath, siblingI) => {\n _rAccessor = () => siblingPath.weight\n const currentRibbon = buildRibbon(currentPoints)\n allRibbons.push(currentRibbon)\n const nextSibling = pathData.multiple[siblingI + 1]\n\n if (nextSibling) {\n const currentLeftSide = currentRibbon\n .reverse()\n .filter((d) => d.direction === \"back\")\n .reduce(dedupeRibbonPoints(), [])\n\n _rAccessor = () => nextSibling.weight\n\n const leftHandInflatedRibbon = buildRibbon(currentLeftSide)\n currentPoints = leftHandInflatedRibbon\n .reverse()\n .filter((d) => d.direction === \"back\")\n .reduce(dedupeRibbonPoints(), [])\n }\n })\n\n _rAccessor = original_r\n return allRibbons.map((d) =>\n _lineConstructor.x(_xAccessor).y(_yAccessor).curve(_interpolator)(d)\n )\n }\n const bothPoints = buildRibbon(pathData).reduce(dedupeRibbonPoints(), [])\n\n return _lineConstructor.x(_xAccessor).y(_yAccessor).curve(_interpolator)(\n bothPoints\n )\n }\n\n _ribbon.x = function (_value) {\n if (!arguments.length) return _xAccessor\n\n _xAccessor = _value\n return _ribbon\n }\n\n _ribbon.y = function (_value) {\n if (!arguments.length) return _yAccessor\n\n _yAccessor = _value\n return _ribbon\n }\n\n _ribbon.r = function (_value) {\n if (!arguments.length) return _rAccessor\n\n _rAccessor = _value\n return _ribbon\n }\n\n _ribbon.interpolate = function (_value) {\n if (!arguments.length) return _interpolator\n\n _interpolator = _value\n return _ribbon\n }\n\n return _ribbon\n\n function offsetEdge(d) {\n const diffX = _yAccessor(d.target) - _yAccessor(d.source)\n const diffY = _xAccessor(d.target) - _xAccessor(d.source)\n\n const angle0 = Math.atan2(diffY, diffX) + Math.PI / 2\n const angle1 = angle0 + Math.PI * 0.5\n const angle2 = angle0 + Math.PI * 0.5\n\n const x1 = _xAccessor(d.source) + _rAccessor(d.source) * Math.cos(angle1)\n const y1 = _yAccessor(d.source) - _rAccessor(d.source) * Math.sin(angle1)\n const x2 = _xAccessor(d.target) + _rAccessor(d.target) * Math.cos(angle2)\n const y2 = _yAccessor(d.target) - _rAccessor(d.target) * Math.sin(angle2)\n\n return { x1: x1, y1: y1, x2: x2, y2: y2 }\n }\n\n function buildRibbon(points) {\n const bothCode = []\n let x = 0\n let transformedPoints = { x1: 0, y1: 0, x2: 0, y2: 0 }\n\n while (x < points.length) {\n if (x !== points.length - 1) {\n transformedPoints = offsetEdge({\n source: points[x],\n target: points[x + 1]\n })\n const p1 = {\n x: transformedPoints.x1,\n y: transformedPoints.y1,\n direction: \"forward\"\n }\n const p2 = {\n x: transformedPoints.x2,\n y: transformedPoints.y2,\n direction: \"forward\"\n }\n bothCode.push(p1, p2)\n if (bothCode.length > 3) {\n const l = bothCode.length - 1\n const lineA = { a: bothCode[l - 3], b: bothCode[l - 2] }\n const lineB = { a: bothCode[l - 1], b: bothCode[l] }\n const intersect = findIntersect(\n lineA.a.x,\n lineA.a.y,\n lineA.b.x,\n lineA.b.y,\n lineB.a.x,\n lineB.a.y,\n lineB.b.x,\n lineB.b.y\n )\n if (intersect.found === true) {\n lineA.b.x = intersect.x\n lineA.b.y = intersect.y\n lineB.a.x = intersect.x\n lineB.a.y = intersect.y\n }\n }\n }\n\n x++\n }\n x--\n //Back\n while (x >= 0) {\n if (x !== 0) {\n transformedPoints = offsetEdge({\n source: points[x],\n target: points[x - 1]\n })\n const p1 = {\n x: transformedPoints.x1,\n y: transformedPoints.y1,\n direction: \"back\"\n }\n const p2 = {\n x: transformedPoints.x2,\n y: transformedPoints.y2,\n direction: \"back\"\n }\n bothCode.push(p1, p2)\n if (bothCode.length > 3) {\n const l = bothCode.length - 1\n const lineA = { a: bothCode[l - 3], b: bothCode[l - 2] }\n const lineB = { a: bothCode[l - 1], b: bothCode[l] }\n const intersect = findIntersect(\n lineA.a.x,\n lineA.a.y,\n lineA.b.x,\n lineA.b.y,\n lineB.a.x,\n lineB.a.y,\n lineB.b.x,\n lineB.b.y\n )\n if (intersect.found === true) {\n lineA.b.x = intersect.x\n lineA.b.y = intersect.y\n lineB.a.x = intersect.x\n lineB.a.y = intersect.y\n }\n }\n }\n\n x--\n }\n\n return bothCode\n }\n\n function findIntersect(l1x1, l1y1, l1x2, l1y2, l2x1, l2y1, l2x2, l2y2) {\n let a, b\n\n const result = {\n x: null,\n y: null,\n found: false\n }\n\n const d = (l2y2 - l2y1) * (l1x2 - l1x1) - (l2x2 - l2x1) * (l1y2 - l1y1)\n if (d === 0) {\n return result\n }\n a = l1y1 - l2y1\n b = l1x1 - l2x1\n const n1 = (l2x2 - l2x1) * a - (l2y2 - l2y1) * b\n const n2 = (l1x2 - l1x1) * a - (l1y2 - l1y1) * b\n a = n1 / d\n b = n2 / d\n\n result.x = l1x1 + a * (l1x2 - l1x1)\n result.y = l1y1 + a * (l1y2 - l1y1)\n\n if (a > 0 && a < 1 && b > 0 && b < 1) {\n result.found = true\n }\n\n return result\n }\n}\n\nconst curvature = 0.5\n\nconst ribbonLink = (d) => {\n const diff =\n d.direction === \"down\"\n ? Math.abs(d.target.y - d.source.y)\n : Math.abs(d.source.x - d.target.x)\n // const halfWidth = d.width / 2\n const testCoordinates =\n d.direction === \"down\"\n ? [\n {\n x: d.y0,\n y: d.source.y\n },\n {\n x: d.y0,\n y: d.source.y + diff / 3\n },\n {\n x: d.y1,\n y: d.target.y - diff / 3\n },\n {\n x: d.y1,\n y: d.target.y\n }\n ]\n : [\n {\n x: d.source.x0,\n y: d.y0\n },\n {\n x: d.source.x0 + diff / 3,\n y: d.y0\n },\n {\n x: d.target.x0 - diff / 3,\n y: d.y1\n },\n {\n x: d.target.x0,\n y: d.y1\n }\n ]\n\n const linkGenerator = linearRibbon()\n\n linkGenerator.x((d) => d.x)\n linkGenerator.y((d) => d.y)\n linkGenerator.r(() => d.sankeyWidth / 2)\n\n return linkGenerator(testCoordinates)\n}\n\nexport const areaLink = (d) => {\n let x0, x1, x2, x3, y0, y1, xi, y2, y3\n\n if (d.direction === \"down\") {\n x0 = d.y0 - d.sankeyWidth / 2\n x1 = d.y1 - d.sankeyWidth / 2\n x2 = d.y1 + d.sankeyWidth / 2\n x3 = d.y0 + d.sankeyWidth / 2\n y0 = d.source.y1\n y1 = d.target.y0\n xi = interpolateNumber(y0, y1)\n y2 = xi(curvature)\n y3 = xi(1 - curvature)\n\n return `M${x0},${y0}C${x0},${y2} ${x1},${y3} ${x1},${y1}L${x2},${y1}C${x2},${y3} ${x3},${y2} ${x3},${y0}Z`\n }\n ;(x0 = d.source.x1), // eslint-disable-line no-sequences\n (x1 = d.target.x0),\n (xi = interpolateNumber(x0, x1)),\n (x2 = xi(curvature)),\n (x3 = xi(1 - curvature)),\n (y0 = d.y0 - d.sankeyWidth / 2),\n (y1 = d.y1 - d.sankeyWidth / 2),\n (y2 = d.y1 + d.sankeyWidth / 2),\n (y3 = d.y0 + d.sankeyWidth / 2)\n\n return `M${x0},${y0}C${x2},${y0} ${x3},${y1} ${x1},${y1}L${x1},${y2}C${x3},${y2} ${x2},${y3} ${x0},${y3}Z`\n}\n\nexport function circularAreaLink(link) {\n const linkGenerator = linearRibbon()\n\n linkGenerator.x((d) => d.x)\n linkGenerator.y((d) => d.y)\n linkGenerator.r(() => link.sankeyWidth / 2)\n\n const xyForLink =\n link.direction === \"down\"\n ? [\n {\n x: link.circularPathData.sourceY,\n y: link.circularPathData.sourceX\n },\n {\n x: link.circularPathData.sourceY,\n y: link.circularPathData.leftFullExtent\n },\n {\n x: link.circularPathData.verticalFullExtent,\n y: link.circularPathData.leftFullExtent\n },\n {\n x: link.circularPathData.verticalFullExtent,\n y: link.circularPathData.rightFullExtent\n },\n {\n x: link.circularPathData.targetY,\n y: link.circularPathData.rightFullExtent\n },\n {\n x: link.circularPathData.targetY,\n y: link.circularPathData.targetX\n }\n ]\n : [\n {\n x: link.circularPathData.sourceX,\n y: link.circularPathData.sourceY\n },\n {\n x: link.circularPathData.leftFullExtent,\n y: link.circularPathData.sourceY\n },\n {\n x: link.circularPathData.leftFullExtent,\n y: link.circularPathData.verticalFullExtent\n },\n {\n x: link.circularPathData.rightFullExtent,\n y: link.circularPathData.verticalFullExtent\n },\n {\n x: link.circularPathData.rightFullExtent,\n y: link.circularPathData.targetY\n },\n {\n x: link.circularPathData.targetX,\n y: link.circularPathData.targetY\n }\n ]\n\n return linkGenerator(xyForLink)\n}\n","import {\n sankeyCircular,\n sankeyLeft,\n sankeyRight,\n sankeyCenter,\n sankeyJustify\n} from \"d3-sankey-circular\"\nimport { interpolateNumber } from \"d3-interpolate\"\nimport { schemeCategory10 } from \"d3-scale-chromatic\"\nimport { areaLink, circularAreaLink } from \"../../geometry/sankeyLinks\"\nimport type {\n NetworkLayoutPlugin,\n NetworkPipelineConfig,\n NetworkSceneNode,\n NetworkSceneEdge,\n NetworkRectNode,\n NetworkBezierEdge,\n NetworkLabel,\n RealtimeNode,\n RealtimeEdge\n} from \"../networkTypes\"\nimport type { Style } from \"../types\"\n\nconst sankeyOrientHash: Record<string, any> = {\n left: sankeyLeft,\n right: sankeyRight,\n center: sankeyCenter,\n justify: sankeyJustify\n}\n\n/**\n * Sankey layout plugin — uses d3-sankey-circular for layout computation.\n *\n * Produces rect scene nodes for Sankey node bars and bezier band scene edges\n * for the flow links. Supports both horizontal and vertical orientation.\n */\nexport const sankeyLayoutPlugin: NetworkLayoutPlugin = {\n supportsStreaming: true,\n hierarchical: false,\n\n computeLayout(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): void {\n if (nodes.length === 0) return\n\n const direction = config.orientation === \"vertical\" ? \"down\" : \"right\"\n const orient = config.nodeAlign || \"justify\"\n const nodeWidth = config.nodeWidth ?? 15\n const nodePaddingRatio = config.nodePaddingRatio ?? 0.05\n const iterations = config.iterations ?? 100\n\n // Clone for d3-sankey (it mutates)\n const sankeyNodes = nodes.map((n) => ({ ...n }))\n const sankeyEdges = edges.map((e) => ({\n ...e,\n source: typeof e.source === \"string\" ? e.source : e.source.id,\n target: typeof e.target === \"string\" ? e.target : e.target.id\n }))\n\n let frameExtent: [[number, number], [number, number]]\n if (direction === \"down\") {\n frameExtent = [[0, 0], [size[1], size[0]]]\n } else {\n frameExtent = [[0, 0], [size[0], size[1]]]\n }\n\n const sankey = sankeyCircular()\n .extent(frameExtent)\n .links(sankeyEdges)\n .nodes(sankeyNodes)\n .nodeAlign(sankeyOrientHash[orient] || sankeyJustify)\n .nodeId((d: any) => d.id)\n .nodeWidth(nodeWidth)\n .iterations(iterations)\n\n if (sankey.nodePaddingRatio) {\n sankey.nodePaddingRatio(nodePaddingRatio)\n }\n\n // Execute layout\n sankey()\n\n // Write computed positions back to original nodes\n for (const sn of sankeyNodes) {\n const original = nodes.find((n) => n.id === sn.id)\n if (original) {\n original.x0 = sn.x0\n original.x1 = sn.x1\n original.y0 = sn.y0\n original.y1 = sn.y1\n original.value = sn.value\n original.depth = sn.depth\n original.sourceLinks = sn.sourceLinks\n original.targetLinks = sn.targetLinks\n // Derived\n original.width = sn.x1 - sn.x0\n original.height = sn.y1 - sn.y0\n original.x = sn.x0 + (sn.x1 - sn.x0) / 2\n original.y = sn.y0 + (sn.y1 - sn.y0) / 2\n }\n }\n\n // Write computed positions back to original edges\n for (const se of sankeyEdges) {\n const src = se.source as any\n const tgt = se.target as any\n const sourceId = typeof src === \"object\" && src !== null ? src.id : String(src)\n const targetId = typeof tgt === \"object\" && tgt !== null ? tgt.id : String(tgt)\n\n // Find matching original edge\n const original = edges.find((e) => {\n const eSrc = typeof e.source === \"string\" ? e.source : e.source.id\n const eTgt = typeof e.target === \"string\" ? e.target : e.target.id\n return eSrc === sourceId && eTgt === targetId\n })\n\n if (original) {\n original.y0 = (se as any).y0\n original.y1 = (se as any).y1\n original.sankeyWidth = (se as any).width ?? 0\n original.circular = !!(se as any).circular\n original.circularPathData = (se as any).circularPathData\n original.direction = direction\n\n // Resolve source/target to node references\n const srcNode = nodes.find((n) => n.id === sourceId)\n const tgtNode = nodes.find((n) => n.id === targetId)\n if (srcNode) original.source = srcNode\n if (tgtNode) original.target = tgtNode\n }\n }\n },\n\n buildScene(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n } {\n const direction = config.orientation === \"vertical\" ? \"down\" : \"right\"\n const nodeStyleFn = config.nodeStyle\n const edgeStyleFn = config.edgeStyle\n const edgeOpacity = config.edgeOpacity ?? 0.5\n const edgeColorBy = config.edgeColorBy || \"source\"\n\n // Auto-color palette for when no nodeStyle is provided\n const palette = Array.isArray(config.colorScheme)\n ? config.colorScheme\n : (schemeCategory10 as readonly string[])\n const nodeColorMap = new Map<string, string>()\n nodes.forEach((n, i) => {\n nodeColorMap.set(n.id, palette[i % palette.length])\n })\n\n const sceneNodes: NetworkRectNode[] = []\n const sceneEdges: NetworkBezierEdge[] = []\n const labels: NetworkLabel[] = []\n\n // Build rect nodes\n for (const node of nodes) {\n const w = node.x1 - node.x0\n const h = node.y1 - node.y0\n if (w <= 0 || h <= 0) continue\n\n const userStyle = nodeStyleFn ? nodeStyleFn(node) : {}\n const style: Style = {\n fill: userStyle.fill || nodeColorMap.get(node.id) || \"#4d430c\",\n stroke: userStyle.stroke,\n strokeWidth: userStyle.strokeWidth,\n opacity: userStyle.opacity\n }\n\n sceneNodes.push({\n type: \"rect\",\n x: node.x0,\n y: node.y0,\n w,\n h,\n style,\n datum: node,\n id: node.id,\n label: node.id\n })\n }\n\n // Build bezier edge bands\n // Sort by width descending so narrow bands render on top\n const sortedEdges = [...edges].sort(\n (a, b) => (b.sankeyWidth || 0) - (a.sankeyWidth || 0)\n )\n\n for (const edge of sortedEdges) {\n if (!edge.sankeyWidth || edge.sankeyWidth <= 0) continue\n\n const sourceNode = typeof edge.source === \"object\" ? edge.source : null\n const targetNode = typeof edge.target === \"object\" ? edge.target : null\n if (!sourceNode || !targetNode) continue\n\n // Generate SVG path string using existing helpers\n let pathD: string\n if (edge.circular && edge.circularPathData) {\n pathD = circularAreaLink(edge)\n } else {\n pathD = areaLink(edge)\n }\n\n // Resolve edge fill — use edgeStyle if provided, otherwise\n // inherit from source or target node color\n let fill = \"#999\"\n if (edgeStyleFn) {\n const userStyle = edgeStyleFn(edge)\n fill = userStyle.fill || fill\n } else if (edgeColorBy === \"target\" && targetNode) {\n fill = nodeColorMap.get(targetNode.id) || fill\n } else if (sourceNode) {\n fill = nodeColorMap.get(sourceNode.id) || fill\n }\n\n const userStyle = edgeStyleFn ? edgeStyleFn(edge) : {}\n const style: Style = {\n fill,\n fillOpacity: userStyle.fillOpacity ?? edgeOpacity,\n stroke: userStyle.stroke || \"none\",\n strokeWidth: userStyle.strokeWidth,\n opacity: userStyle.opacity\n }\n\n sceneEdges.push({\n type: \"bezier\",\n pathD,\n bezierCache: edge.bezier,\n style,\n datum: edge\n })\n }\n\n // Build labels\n if (config.showLabels !== false) {\n const labelFn = resolveLabelFn(config.nodeLabel)\n\n for (const node of nodes) {\n const w = node.x1 - node.x0\n const h = node.y1 - node.y0\n if (w <= 0 || h <= 0) continue\n\n const text = labelFn ? labelFn(node) : node.id\n if (!text) continue\n\n let x: number\n let y: number\n let anchor: \"start\" | \"end\"\n\n if (direction === \"down\") {\n x = node.x0 + w / 2\n y = node.y1 + 14\n anchor = \"middle\" as any\n } else {\n // Horizontal: label to the right or left depending on position\n const midX = size[0] / 2\n if (node.x0 + w / 2 < midX) {\n x = node.x0 - 6\n anchor = \"end\"\n } else {\n x = node.x1 + 6\n anchor = \"start\"\n }\n y = node.y0 + h / 2\n }\n\n labels.push({\n x,\n y,\n text: String(text),\n anchor,\n baseline: \"middle\",\n fontSize: 11\n })\n }\n }\n\n return { sceneNodes, sceneEdges, labels }\n }\n}\n\nfunction resolveLabelFn(\n nodeLabel: string | ((d: any) => string) | undefined\n): ((d: any) => string) | null {\n if (!nodeLabel) return null\n if (typeof nodeLabel === \"function\") return nodeLabel\n return (d: any) => d[nodeLabel] || d.id\n}\n","import {\n forceSimulation,\n forceX,\n forceY,\n forceLink,\n forceManyBody\n} from \"d3-force\"\nimport { scaleLinear } from \"d3-scale\"\nimport { min, max } from \"d3-array\"\nimport { schemeCategory10 } from \"d3-scale-chromatic\"\nimport type {\n NetworkLayoutPlugin,\n NetworkPipelineConfig,\n NetworkSceneNode,\n NetworkSceneEdge,\n NetworkCircleNode,\n NetworkLineEdge,\n NetworkLabel,\n RealtimeNode,\n RealtimeEdge\n} from \"../networkTypes\"\nimport type { Style } from \"../types\"\n\n/**\n * Force-directed layout plugin — uses d3-force for physics-based node positioning.\n *\n * Produces circle scene nodes and line scene edges. Runs the force simulation\n * synchronously for a configurable number of iterations, using phyllotaxis\n * spiral for deterministic initial positions.\n */\nexport const forceLayoutPlugin: NetworkLayoutPlugin = {\n supportsStreaming: false,\n hierarchical: false,\n\n computeLayout(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): void {\n if (nodes.length === 0) return\n\n // Adaptive iteration count: reduce iterations for large networks\n const nodeCount = nodes.length\n const adaptiveIterations = Math.max(\n 50,\n Math.min(300, Math.floor(300 - (nodeCount - 30) * 2))\n )\n\n const iterations = config.iterations ?? adaptiveIterations\n const forceStrength = config.forceStrength ?? 0.1\n\n // Set deterministic initial positions using phyllotaxis spiral.\n // d3-force uses Math.random() for unpositioned nodes which produces\n // different layouts on every render. A phyllotaxis spiral gives\n // evenly-distributed starting positions based on index alone.\n // RealtimeNode initialises x/y to 0, so we treat (0,0) as \"unpositioned\".\n const cx = size[0] / 2\n const cy = size[1] / 2\n const goldenAngle = Math.PI * (3 - Math.sqrt(5))\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n if (node.x == null || node.y == null || (node.x === 0 && node.y === 0)) {\n const r = Math.sqrt(i + 0.5) * 10\n const theta = i * goldenAngle\n node.x = cx + r * Math.cos(theta)\n node.y = cy + r * Math.sin(theta)\n }\n }\n\n // Build node size accessor for charge strength\n const nodeSizeFn = resolveNodeSizeFn(\n config.nodeSize,\n config.nodeSizeRange,\n nodes\n )\n const nodeRadius = (d: any) => nodeSizeFn(d)\n\n // Configure link force\n const linkForce = forceLink()\n .strength((d: any) =>\n Math.min(2.5, d.weight ? d.weight * forceStrength : forceStrength)\n )\n .id((d: any) => d.id)\n\n // Build simulation\n const forceMod = size[1] / size[0]\n const simulation = forceSimulation()\n .force(\n \"charge\",\n forceManyBody().strength((d: any) => -25 * nodeRadius(d))\n )\n .force(\"x\", forceX(size[0] / 2).strength(forceMod * 0.1))\n .force(\"y\", forceY(size[1] / 2).strength(0.1))\n\n simulation.nodes(nodes as any)\n\n if (edges.length > 0) {\n // Resolve edge source/target to id strings for d3-force linking\n const linkData = edges.map((e) => ({\n ...e,\n source: typeof e.source === \"string\" ? e.source : e.source.id,\n target: typeof e.target === \"string\" ? e.target : e.target.id\n }))\n\n simulation.force(\"link\", linkForce)\n ;(simulation.force(\"link\") as any).links(linkData)\n }\n\n // Reset alpha if too cold\n if (simulation.alpha() < 0.1) {\n simulation.alpha(1)\n }\n\n simulation.stop()\n\n // Run synchronously\n for (let i = 0; i < iterations; ++i) {\n simulation.tick()\n }\n\n // Resolve edge source/target to node object references so that\n // HOC style functions can access d.source.data for color lookups.\n for (const edge of edges) {\n if (typeof edge.source === \"string\") {\n const n = nodes.find((nd) => nd.id === edge.source)\n if (n) edge.source = n\n }\n if (typeof edge.target === \"string\") {\n const n = nodes.find((nd) => nd.id === (edge.target as any))\n if (n) edge.target = n\n }\n }\n },\n\n buildScene(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n } {\n const nodeStyleFn = config.nodeStyle\n const edgeStyleFn = config.edgeStyle\n const nodeSizeFn = resolveNodeSizeFn(\n config.nodeSize,\n config.nodeSizeRange,\n nodes\n )\n\n // Auto-color palette for when no nodeStyle is provided\n const palette = Array.isArray(config.colorScheme)\n ? config.colorScheme\n : (schemeCategory10 as readonly string[])\n const nodeColorMap = new Map<string, string>()\n nodes.forEach((n, i) => {\n nodeColorMap.set(n.id, palette[i % palette.length])\n })\n\n const sceneNodes: NetworkCircleNode[] = []\n const sceneEdges: NetworkLineEdge[] = []\n const labels: NetworkLabel[] = []\n\n // Build circle nodes\n for (const node of nodes) {\n if (node.x == null || node.y == null) continue\n\n const r = nodeSizeFn(node)\n const userStyle = nodeStyleFn ? nodeStyleFn(node) : {}\n const style: Style = {\n fill: userStyle.fill || nodeColorMap.get(node.id) || \"#007bff\",\n stroke: userStyle.stroke || \"#fff\",\n strokeWidth: userStyle.strokeWidth ?? 2,\n opacity: userStyle.opacity\n }\n\n sceneNodes.push({\n type: \"circle\",\n cx: node.x,\n cy: node.y,\n r,\n style,\n datum: node,\n id: node.id,\n label: node.id\n })\n }\n\n // Build line edges\n for (const edge of edges) {\n const sourceNode =\n typeof edge.source === \"object\" ? edge.source : findNode(nodes, edge.source)\n const targetNode =\n typeof edge.target === \"object\" ? edge.target : findNode(nodes, edge.target)\n if (!sourceNode || !targetNode) continue\n if (sourceNode.x == null || sourceNode.y == null) continue\n if (targetNode.x == null || targetNode.y == null) continue\n\n const userStyle = edgeStyleFn ? edgeStyleFn(edge) : {}\n const style: Style = {\n stroke: userStyle.stroke || \"#999\",\n strokeWidth: userStyle.strokeWidth ?? 1,\n opacity: userStyle.opacity ?? 0.6\n }\n\n sceneEdges.push({\n type: \"line\",\n x1: sourceNode.x,\n y1: sourceNode.y,\n x2: targetNode.x,\n y2: targetNode.y,\n style,\n datum: edge\n })\n }\n\n // Build labels\n if (config.showLabels !== false) {\n const labelFn = resolveLabelFn(config.nodeLabel)\n\n for (const node of nodes) {\n if (node.x == null || node.y == null) continue\n\n const text = labelFn ? labelFn(node) : node.id\n if (!text) continue\n\n const r = nodeSizeFn(node)\n\n labels.push({\n x: node.x,\n y: node.y - r - 4,\n text: String(text),\n anchor: \"middle\",\n baseline: \"auto\",\n fontSize: 11\n })\n }\n }\n\n return { sceneNodes, sceneEdges, labels }\n }\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────\n\nfunction findNode(\n nodes: RealtimeNode[],\n id: string\n): RealtimeNode | undefined {\n return nodes.find((n) => n.id === id)\n}\n\nfunction resolveLabelFn(\n nodeLabel: string | ((d: any) => string) | undefined\n): ((d: any) => string) | null {\n if (!nodeLabel) return null\n if (typeof nodeLabel === \"function\") return nodeLabel\n return (d: any) => d[nodeLabel] || d.id\n}\n\n/**\n * Build a function that returns a node radius. If `nodeSize` is a number,\n * use it directly. If it is a string accessor, look up `node.data[nodeSize]`\n * and scale the result to `nodeSizeRange`. If it is a function, call it.\n * Falls back to a default radius of 8.\n */\nfunction resolveNodeSizeFn(\n nodeSize: number | string | ((d: any) => number) | undefined,\n nodeSizeRange: [number, number] | undefined,\n allNodes: RealtimeNode[]\n): (node: RealtimeNode) => number {\n if (nodeSize == null) {\n return () => 8\n }\n\n if (typeof nodeSize === \"number\") {\n return () => nodeSize\n }\n\n if (typeof nodeSize === \"function\") {\n return (node: RealtimeNode) => nodeSize(node) || 8\n }\n\n // String accessor: look up value on node.data and scale to range\n const range = nodeSizeRange || [5, 20]\n\n // Extract all numeric values to compute domain\n const values = allNodes\n .map((n) => n.data?.[nodeSize])\n .filter((v): v is number => v != null && typeof v === \"number\")\n\n if (values.length === 0) {\n return () => range[0]\n }\n\n const domainMin = min(values) ?? 0\n const domainMax = max(values) ?? 1\n\n // If all values are the same, return the midpoint of the range\n if (domainMin === domainMax) {\n return () => (range[0] + range[1]) / 2\n }\n\n const scale = scaleLinear()\n .domain([domainMin, domainMax])\n .range(range)\n .clamp(true)\n\n return (node: RealtimeNode) => {\n const raw = node.data?.[nodeSize]\n if (raw == null || typeof raw !== \"number\") return range[0]\n return scale(raw)\n }\n}\n","import { chord, ribbon } from \"d3-chord\"\nimport { arc } from \"d3-shape\"\nimport { schemeCategory10, schemeTableau10 } from \"d3-scale-chromatic\"\nimport type {\n NetworkLayoutPlugin,\n NetworkPipelineConfig,\n NetworkSceneNode,\n NetworkSceneEdge,\n NetworkArcNode,\n NetworkRibbonEdge,\n NetworkLabel,\n RealtimeNode,\n RealtimeEdge\n} from \"../networkTypes\"\nimport type { Style } from \"../types\"\n\nconst DEFAULT_PALETTE = schemeCategory10 as readonly string[]\n\n/**\n * Chord layout plugin — uses d3-chord for layout computation.\n *\n * Produces arc scene nodes for chord group arcs and ribbon scene edges\n * for the chord ribbons. Labels are positioned outside arcs.\n */\nexport const chordLayoutPlugin: NetworkLayoutPlugin = {\n supportsStreaming: false,\n hierarchical: false,\n\n computeLayout(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): void {\n if (nodes.length === 0) return\n\n const { padAngle = 0.01, groupWidth = 20, sortGroups } = config\n\n const radius = Math.min(size[0], size[1]) / 2\n const innerRadius = radius - groupWidth\n const cx = size[0] / 2\n const cy = size[1] / 2\n\n const valueAccessorFn = resolveValueAccessor(config.valueAccessor)\n\n // ── Build node index map ──────────────────────────────────────────\n const nodeIndex = new Map<string, number>()\n for (let i = 0; i < nodes.length; i++) {\n nodeIndex.set(nodes[i].id, i)\n }\n\n // ── Build NxN matrix from edges ───────────────────────────────────\n const n = nodes.length\n const matrix: number[][] = Array.from({ length: n }, () =>\n Array.from({ length: n }, () => 0)\n )\n\n for (const edge of edges) {\n const sourceId =\n typeof edge.source === \"string\" ? edge.source : edge.source.id\n const targetId =\n typeof edge.target === \"string\" ? edge.target : edge.target.id\n\n const si = nodeIndex.get(sourceId)\n const ti = nodeIndex.get(targetId)\n if (si === undefined || ti === undefined) continue\n\n const value = valueAccessorFn(edge)\n matrix[si][ti] = value\n }\n\n // ── Run chord generator ───────────────────────────────────────────\n const chordGenerator = chord().padAngle(padAngle)\n if (sortGroups) {\n chordGenerator.sortGroups(sortGroups)\n }\n\n const chords = chordGenerator(matrix)\n const groups = chords.groups\n\n // ── Arc generator for centroid calculation ────────────────────────\n const arcGenerator = arc<any>()\n .innerRadius(innerRadius)\n .outerRadius(radius)\n\n // ── Set node positions from arc centroids ────────────────────────\n for (const group of groups) {\n const node = nodes[group.index]\n const centroid = arcGenerator.centroid(group)\n\n node.x = centroid[0] + cx\n node.y = centroid[1] + cy\n\n // Stash arc data on the node for buildScene\n ;(node as any).arcData = {\n startAngle: group.startAngle,\n endAngle: group.endAngle\n }\n }\n\n // ── Resolve edge source/target to node references ─────────────────\n // The HOC edge style functions need d.source/d.target as node objects\n // (not string IDs) so they can look up colors via d.source.data.\n for (const edge of edges) {\n const srcId = typeof edge.source === \"string\" ? edge.source : edge.source.id\n const tgtId = typeof edge.target === \"string\" ? edge.target : edge.target.id\n const srcNode = nodes.find((n) => n.id === srcId)\n const tgtNode = nodes.find((n) => n.id === tgtId)\n if (srcNode) edge.source = srcNode\n if (tgtNode) edge.target = tgtNode\n }\n\n // ── Stash chord data on edges for buildScene ─────────────────────\n for (const generatedChord of chords) {\n const sourceId = nodes[generatedChord.source.index].id\n const targetId = nodes[generatedChord.target.index].id\n\n // d3-chord always emits source.index < target.index, which may\n // not match the original edge direction. Try both key orders.\n const matchedEdge = edges.find((e) => {\n const eSrc =\n typeof e.source === \"string\" ? e.source : e.source.id\n const eTgt =\n typeof e.target === \"string\" ? e.target : e.target.id\n return (\n (eSrc === sourceId && eTgt === targetId) ||\n (eSrc === targetId && eTgt === sourceId)\n )\n })\n\n if (matchedEdge) {\n ;(matchedEdge as any).chordData = generatedChord\n }\n }\n },\n\n buildScene(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n } {\n const { groupWidth = 20, edgeOpacity = 0.5 } = config\n\n const radius = Math.min(size[0], size[1]) / 2\n const innerRadius = radius - groupWidth\n const cx = size[0] / 2\n const cy = size[1] / 2\n\n const nodeStyleFn = config.nodeStyle\n const edgeStyleFn = config.edgeStyle\n const edgeColorBy = config.edgeColorBy || \"source\"\n\n // Auto-color palette: used when no nodeStyle is provided\n const palette = Array.isArray(config.colorScheme)\n ? config.colorScheme\n : DEFAULT_PALETTE\n // Build a node-id → color map for consistent coloring\n const nodeColorMap = new Map<string, string>()\n nodes.forEach((n, i) => {\n nodeColorMap.set(n.id, palette[i % palette.length])\n })\n\n const ribbonGenerator = ribbon<any, any>().radius(innerRadius)\n\n const sceneNodes: NetworkArcNode[] = []\n const sceneEdges: NetworkRibbonEdge[] = []\n const labels: NetworkLabel[] = []\n\n // ── Build arc nodes ──────────────────────────────────────────────\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n const arcData = (node as any).arcData\n if (!arcData) continue\n\n let fill: string\n if (nodeStyleFn) {\n const userStyle = nodeStyleFn(node)\n fill = userStyle.fill || nodeColorMap.get(node.id) || palette[i % palette.length]\n } else {\n fill = nodeColorMap.get(node.id) || palette[i % palette.length]\n }\n\n const userStyle = nodeStyleFn ? nodeStyleFn(node) : {}\n const style: Style = {\n fill,\n stroke: userStyle.stroke || \"black\",\n strokeWidth: userStyle.strokeWidth ?? 1,\n opacity: userStyle.opacity\n }\n\n // d3-chord angles start at 12 o'clock; canvas arc() starts at 3 o'clock\n // Offset by -PI/2 to align arcs with labels and ribbons\n sceneNodes.push({\n type: \"arc\",\n cx,\n cy,\n innerR: innerRadius,\n outerR: radius,\n startAngle: arcData.startAngle - Math.PI / 2,\n endAngle: arcData.endAngle - Math.PI / 2,\n style,\n datum: node,\n id: node.id,\n label: node.id\n })\n }\n\n // ── Build ribbon edges ───────────────────────────────────────────\n // d3-chord ribbon paths are centered at (0,0). Offset every\n // coordinate by (cx, cy) so they align with the arc nodes.\n for (const edge of edges) {\n const chordData = (edge as any).chordData\n if (!chordData) continue\n\n // Offset chord angles by -PI/2 to match arc offset (12 o'clock → 3 o'clock)\n const offsetChord = {\n source: { ...chordData.source, startAngle: chordData.source.startAngle - Math.PI / 2, endAngle: chordData.source.endAngle - Math.PI / 2 },\n target: { ...chordData.target, startAngle: chordData.target.startAngle - Math.PI / 2, endAngle: chordData.target.endAngle - Math.PI / 2 }\n }\n const rawPath = ribbonGenerator(offsetChord)\n if (!rawPath) continue\n\n const pathD = translateSvgPath(rawPath, cx, cy)\n\n // Resolve edge fill — use edgeStyle if provided, otherwise\n // inherit from source or target node color\n let fill = \"#999\"\n if (edgeStyleFn) {\n const userStyle = edgeStyleFn(edge)\n fill = userStyle.fill || fill\n } else {\n // Auto-color by source or target node\n const srcNode = typeof edge.source === \"object\" ? edge.source : null\n const tgtNode = typeof edge.target === \"object\" ? edge.target : null\n if (edgeColorBy === \"target\" && tgtNode) {\n fill = nodeColorMap.get(tgtNode.id) || fill\n } else if (srcNode) {\n fill = nodeColorMap.get(srcNode.id) || fill\n }\n }\n\n const userStyle = edgeStyleFn ? edgeStyleFn(edge) : {}\n const style: Style = {\n fill,\n fillOpacity: userStyle.fillOpacity ?? edgeOpacity,\n stroke: userStyle.stroke || \"none\",\n strokeWidth: userStyle.strokeWidth,\n opacity: userStyle.opacity\n }\n\n sceneEdges.push({\n type: \"ribbon\",\n pathD,\n style,\n datum: edge\n })\n }\n\n // ── Build labels ─────────────────────────────────────────────────\n if (config.showLabels !== false) {\n const labelFn = resolveLabelFn(config.nodeLabel)\n const labelRadius = radius + 12\n\n for (const node of nodes) {\n const arcData = (node as any).arcData\n if (!arcData) continue\n\n const text = labelFn ? labelFn(node) : node.id\n if (!text) continue\n\n const midAngle =\n (arcData.startAngle + arcData.endAngle) / 2\n // Angles in d3-chord start from 12 o'clock (top), going clockwise.\n // Convert to standard x/y: subtract PI/2.\n const angle = midAngle - Math.PI / 2\n const lx = cx + Math.cos(angle) * labelRadius\n const ly = cy + Math.sin(angle) * labelRadius\n\n // Anchor depends on which side of the circle the label is on\n const anchor: \"start\" | \"middle\" | \"end\" =\n midAngle > Math.PI ? \"end\" : \"start\"\n\n labels.push({\n x: lx,\n y: ly,\n text: String(text),\n anchor,\n baseline: \"middle\",\n fontSize: 11\n })\n }\n }\n\n return { sceneNodes, sceneEdges, labels }\n }\n}\n\nfunction resolveLabelFn(\n nodeLabel: string | ((d: any) => string) | undefined\n): ((d: any) => string) | null {\n if (!nodeLabel) return null\n if (typeof nodeLabel === \"function\") return nodeLabel\n return (d: any) => d[nodeLabel] || d.id\n}\n\nfunction resolveValueAccessor(\n valueAccessor: string | ((d: any) => number) | undefined\n): (d: any) => number {\n if (!valueAccessor) return (d: any) => d.value ?? 1\n if (typeof valueAccessor === \"function\") return valueAccessor\n return (d: any) => d[valueAccessor] ?? 1\n}\n\n/**\n * Translate all absolute coordinates in an SVG path string by (dx, dy).\n *\n * d3-chord ribbon() produces paths using only M, C, Q, L, A, and Z commands\n * with absolute coordinates. We parse the numeric values and offset the\n * positional ones. For arc (A) commands the positional values are the last\n * two numbers in each 7-parameter group.\n */\nfunction translateSvgPath(d: string, dx: number, dy: number): string {\n // Tokenize: split into command letters and number tokens\n const tokens = d.match(/[a-zA-Z]|[-+]?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?/g)\n if (!tokens) return d\n\n const out: string[] = []\n let i = 0\n\n while (i < tokens.length) {\n const cmd = tokens[i]\n\n if (cmd === \"M\" || cmd === \"L\") {\n out.push(cmd)\n i++\n // Pairs of (x, y) follow\n while (i < tokens.length && !isNaN(Number(tokens[i]))) {\n out.push(String(Number(tokens[i]) + dx))\n i++\n if (i < tokens.length && !isNaN(Number(tokens[i]))) {\n out.push(String(Number(tokens[i]) + dy))\n i++\n }\n }\n } else if (cmd === \"C\") {\n out.push(cmd)\n i++\n // Triplets of (x,y) control points\n while (i < tokens.length && !isNaN(Number(tokens[i]))) {\n for (let p = 0; p < 3 && i < tokens.length; p++) {\n if (isNaN(Number(tokens[i]))) break\n out.push(String(Number(tokens[i]) + dx))\n i++\n if (i < tokens.length && !isNaN(Number(tokens[i]))) {\n out.push(String(Number(tokens[i]) + dy))\n i++\n }\n }\n }\n } else if (cmd === \"Q\") {\n out.push(cmd)\n i++\n // Pairs of (x,y) — 2 pairs per Q\n while (i < tokens.length && !isNaN(Number(tokens[i]))) {\n for (let p = 0; p < 2 && i < tokens.length; p++) {\n if (isNaN(Number(tokens[i]))) break\n out.push(String(Number(tokens[i]) + dx))\n i++\n if (i < tokens.length && !isNaN(Number(tokens[i]))) {\n out.push(String(Number(tokens[i]) + dy))\n i++\n }\n }\n }\n } else if (cmd === \"A\") {\n out.push(cmd)\n i++\n // Arc: rx ry x-rotation large-arc-flag sweep-flag x y\n while (i < tokens.length && !isNaN(Number(tokens[i]))) {\n // rx, ry — no offset\n out.push(tokens[i++])\n if (i < tokens.length) out.push(tokens[i++]) // ry\n if (i < tokens.length) out.push(tokens[i++]) // x-rotation\n if (i < tokens.length) out.push(tokens[i++]) // large-arc-flag\n if (i < tokens.length) out.push(tokens[i++]) // sweep-flag\n // x, y — offset\n if (i < tokens.length) {\n out.push(String(Number(tokens[i]) + dx))\n i++\n }\n if (i < tokens.length) {\n out.push(String(Number(tokens[i]) + dy))\n i++\n }\n }\n } else if (cmd === \"Z\" || cmd === \"z\") {\n out.push(cmd)\n i++\n } else {\n // Unknown or lowercase relative command — pass through\n out.push(tokens[i])\n i++\n }\n }\n\n return out.join(\" \")\n}\n","import {\n hierarchy as d3Hierarchy,\n tree as d3Tree,\n cluster as d3Cluster,\n treemap as d3Treemap,\n pack as d3Pack,\n partition as d3Partition,\n treemapBinary\n} from \"d3-hierarchy\"\nimport type {\n NetworkLayoutPlugin,\n NetworkPipelineConfig,\n NetworkSceneNode,\n NetworkSceneEdge,\n NetworkCircleNode,\n NetworkRectNode,\n NetworkCurvedEdge,\n NetworkLabel,\n RealtimeNode,\n RealtimeEdge\n} from \"../networkTypes\"\nimport type { Style } from \"../types\"\n\ntype HierarchyLayoutType = \"tree\" | \"cluster\" | \"treemap\" | \"circlepack\" | \"partition\"\n\n/**\n * Hierarchy layout plugin — handles tree, cluster, treemap, circlepack, and partition layouts.\n *\n * Uses d3-hierarchy for all layout computations. This plugin is `hierarchical: true`,\n * meaning the input data is a single root node object rather than flat nodes+edges arrays.\n *\n * The hierarchy root is passed via `(config as any).__hierarchyRoot`, set by the store\n * before calling computeLayout. The plugin builds the d3 hierarchy internally, runs the\n * appropriate layout algorithm, and populates the nodes/edges arrays.\n *\n * Scene output varies by layout type:\n * - tree/cluster: NetworkCircleNode[] + NetworkCurvedEdge[] (cubic bezier parent-child links)\n * - treemap/partition: NetworkRectNode[] (space-filling rectangles, no edges)\n * - circlepack: NetworkCircleNode[] (nested circles, no edges)\n */\nexport const hierarchyLayoutPlugin: NetworkLayoutPlugin = {\n supportsStreaming: false,\n hierarchical: true,\n\n computeLayout(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): void {\n const hierarchyRoot = (config as any).__hierarchyRoot\n if (!hierarchyRoot) return\n\n const layoutType = config.chartType as HierarchyLayoutType\n const childrenAccessor = resolveChildrenAccessor(config.childrenAccessor)\n const hierarchySum = config.hierarchySum || ((d: any) => d.value ?? 0)\n\n // Build d3 hierarchy from the root data\n const root = d3Hierarchy(hierarchyRoot, childrenAccessor)\n root.sum(hierarchySum)\n root.sort((a, b) => (b.value ?? 0) - (a.value ?? 0))\n\n const [width, height] = size\n\n // Run the appropriate layout algorithm\n switch (layoutType) {\n case \"tree\":\n computeTreeLayout(root, config, width, height)\n break\n case \"cluster\":\n computeClusterLayout(root, config, width, height)\n break\n case \"treemap\":\n computeTreemapLayout(root, config, width, height)\n break\n case \"circlepack\":\n computeCirclepackLayout(root, config, width, height)\n break\n case \"partition\":\n computePartitionLayout(root, config, width, height)\n break\n }\n\n // Flatten the hierarchy into nodes and edges arrays\n const descendants = root.descendants()\n\n // Clear and repopulate nodes array\n nodes.length = 0\n edges.length = 0\n\n const nodeMap = new Map<any, RealtimeNode>()\n\n for (let i = 0; i < descendants.length; i++) {\n const d = descendants[i]\n const id = resolveNodeId(d, config, i)\n\n const node: RealtimeNode = {\n id,\n x: 0,\n y: 0,\n x0: 0,\n x1: 0,\n y0: 0,\n y1: 0,\n width: 0,\n height: 0,\n value: d.value ?? 0,\n depth: d.depth,\n data: d.data,\n createdByFrame: true\n }\n\n // Set positions based on layout type\n if (layoutType === \"tree\" || layoutType === \"cluster\") {\n setTreePositions(node, d, config)\n } else if (layoutType === \"treemap\" || layoutType === \"partition\") {\n setRectPositions(node, d)\n } else if (layoutType === \"circlepack\") {\n setCirclePositions(node, d)\n }\n\n // Store the d3 hierarchy node reference for edge building\n ;(node as any).__hierarchyNode = d\n\n nodes.push(node)\n nodeMap.set(d, node)\n }\n\n // Build parent-child edges (for tree/cluster; treemap/circlepack/partition have no edges)\n if (layoutType === \"tree\" || layoutType === \"cluster\") {\n for (const d of descendants) {\n if (d.parent) {\n const sourceNode = nodeMap.get(d.parent)\n const targetNode = nodeMap.get(d)\n if (sourceNode && targetNode) {\n edges.push({\n source: sourceNode,\n target: targetNode,\n value: 1,\n y0: 0,\n y1: 0,\n sankeyWidth: 0,\n data: { depth: d.depth }\n })\n }\n }\n }\n }\n },\n\n buildScene(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number]\n ): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n } {\n const layoutType = config.chartType as HierarchyLayoutType\n const nodeStyleFn = config.nodeStyle || ((): Record<string, any> => ({}))\n const edgeStyleFn = config.edgeStyle || ((): Record<string, any> => ({}))\n\n switch (layoutType) {\n case \"tree\":\n case \"cluster\":\n return buildTreeScene(nodes, edges, config, size, nodeStyleFn, edgeStyleFn)\n case \"treemap\":\n case \"partition\":\n return buildRectScene(nodes, config, size, nodeStyleFn)\n case \"circlepack\":\n return buildCircleScene(nodes, config, size, nodeStyleFn)\n default:\n return { sceneNodes: [], sceneEdges: [], labels: [] }\n }\n }\n}\n\n// ── Layout computation functions ──────────────────────────────────────────\n\nfunction computeTreeLayout(\n root: any,\n config: NetworkPipelineConfig,\n width: number,\n height: number\n): void {\n const orientation = config.treeOrientation || \"vertical\"\n const layout = d3Tree<any>()\n\n if (orientation === \"horizontal\") {\n layout.size([height, width])\n } else if (orientation === \"radial\") {\n // For radial layout, use a full circle mapped to [0, 2*PI] x [0, radius]\n const radius = Math.min(width, height) / 2\n layout.size([2 * Math.PI, radius * 0.8])\n } else {\n layout.size([width, height])\n }\n\n layout(root)\n}\n\nfunction computeClusterLayout(\n root: any,\n config: NetworkPipelineConfig,\n width: number,\n height: number\n): void {\n const orientation = config.treeOrientation || \"vertical\"\n const layout = d3Cluster<any>()\n\n if (orientation === \"horizontal\") {\n layout.size([height, width])\n } else if (orientation === \"radial\") {\n const radius = Math.min(width, height) / 2\n layout.size([2 * Math.PI, radius * 0.8])\n } else {\n layout.size([width, height])\n }\n\n layout(root)\n}\n\nfunction computeTreemapLayout(\n root: any,\n config: NetworkPipelineConfig,\n width: number,\n height: number\n): void {\n const padding = config.padding ?? 4\n const paddingTop = config.paddingTop ?? 0\n\n const layout = d3Treemap<any>()\n .size([width, height])\n .tile(treemapBinary)\n .padding(padding)\n\n if (paddingTop > 0) {\n layout.paddingTop(paddingTop)\n }\n\n layout(root)\n}\n\nfunction computeCirclepackLayout(\n root: any,\n config: NetworkPipelineConfig,\n width: number,\n height: number\n): void {\n const padding = config.padding ?? 4\n\n const layout = d3Pack<any>()\n .size([width, height])\n .padding(padding)\n\n layout(root)\n}\n\nfunction computePartitionLayout(\n root: any,\n config: NetworkPipelineConfig,\n width: number,\n height: number\n): void {\n const layout = d3Partition<any>()\n .size([width, height])\n .padding(config.padding ?? 1)\n\n layout(root)\n}\n\n// ── Position setting helpers ──────────────────────────────────────────────\n\nfunction setTreePositions(\n node: RealtimeNode,\n d: any,\n config: NetworkPipelineConfig\n): void {\n const orientation = config.treeOrientation || \"vertical\"\n\n if (orientation === \"radial\") {\n // Convert polar coordinates to cartesian\n const angle = d.x as number\n const radius = d.y as number\n // Compute Cartesian coordinates — the layout is already sized\n // relative to the center of [width, height].\n node.x = radius * Math.cos(angle - Math.PI / 2)\n node.y = radius * Math.sin(angle - Math.PI / 2)\n } else if (orientation === \"horizontal\") {\n // d3 tree with size([height, width]): d.x = vertical pos, d.y = horizontal pos\n node.x = d.y as number\n node.y = d.x as number\n } else {\n // Vertical: d.x = horizontal, d.y = vertical\n node.x = d.x as number\n node.y = d.y as number\n }\n\n // Set bounding box around the point (used by hit testing and transitions)\n const r = 5\n node.x0 = node.x - r\n node.x1 = node.x + r\n node.y0 = node.y - r\n node.y1 = node.y + r\n node.width = r * 2\n node.height = r * 2\n}\n\nfunction setRectPositions(\n node: RealtimeNode,\n d: any\n): void {\n node.x0 = d.x0\n node.x1 = d.x1\n node.y0 = d.y0\n node.y1 = d.y1\n node.x = (d.x0 + d.x1) / 2\n node.y = (d.y0 + d.y1) / 2\n node.width = d.x1 - d.x0\n node.height = d.y1 - d.y0\n}\n\nfunction setCirclePositions(\n node: RealtimeNode,\n d: any\n): void {\n const r = d.r ?? 0\n node.x = d.x\n node.y = d.y\n // Set bounding box to enclosing square of the circle\n node.x0 = d.x - r\n node.x1 = d.x + r\n node.y0 = d.y - r\n node.y1 = d.y + r\n node.width = r * 2\n node.height = r * 2\n // Store radius on the node for buildScene\n ;(node as any).__radius = r\n}\n\n// ── Scene building functions ──────────────────────────────────────────────\n\nfunction buildTreeScene(\n nodes: RealtimeNode[],\n edges: RealtimeEdge[],\n config: NetworkPipelineConfig,\n size: [number, number],\n nodeStyleFn: (d: any) => Record<string, any>,\n edgeStyleFn: (d: any) => Record<string, any>\n): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n} {\n const sceneNodes: NetworkCircleNode[] = []\n const sceneEdges: NetworkCurvedEdge[] = []\n const labels: NetworkLabel[] = []\n\n const orientation = config.treeOrientation || \"vertical\"\n const isRadial = orientation === \"radial\"\n const cx = size[0] / 2\n const cy = size[1] / 2\n const defaultNodeSize = resolveDefaultNodeSize(config.nodeSize)\n\n // Build circle nodes\n for (const node of nodes) {\n let nx = node.x\n let ny = node.y\n\n // For radial layout, offset to center of chart\n if (isRadial) {\n nx += cx\n ny += cy\n }\n\n const userStyle = nodeStyleFn(node)\n const style: Style = {\n fill: userStyle.fill || \"#4d430c\",\n stroke: userStyle.stroke || \"#fff\",\n strokeWidth: userStyle.strokeWidth ?? 1,\n opacity: userStyle.opacity\n }\n\n sceneNodes.push({\n type: \"circle\",\n cx: nx,\n cy: ny,\n r: defaultNodeSize,\n style,\n datum: node,\n id: node.id,\n label: node.id,\n depth: node.depth\n })\n }\n\n // Build curved edges between parent-child pairs\n const edgeOpacity = config.edgeOpacity ?? 0.5\n for (const edge of edges) {\n const sourceNode = typeof edge.source === \"object\" ? edge.source : null\n const targetNode = typeof edge.target === \"object\" ? edge.target : null\n if (!sourceNode || !targetNode) continue\n\n let sx = sourceNode.x\n let sy = sourceNode.y\n let tx = targetNode.x\n let ty = targetNode.y\n\n if (isRadial) {\n sx += cx\n sy += cy\n tx += cx\n ty += cy\n }\n\n // Generate cubic bezier path\n const pathD = generateTreeEdgePath(sx, sy, tx, ty, orientation)\n\n const userStyle = edgeStyleFn(edge)\n const style: Style = {\n fill: \"none\",\n stroke: userStyle.stroke || \"#999\",\n strokeWidth: userStyle.strokeWidth ?? 1.5,\n opacity: userStyle.opacity ?? edgeOpacity\n }\n\n sceneEdges.push({\n type: \"curved\",\n pathD,\n style,\n datum: edge\n })\n }\n\n // Build labels\n if (config.showLabels !== false) {\n const labelFn = resolveLabelFn(config.nodeLabel)\n\n for (const node of nodes) {\n const text = labelFn ? labelFn(node) : node.id\n if (!text) continue\n\n let nx = node.x\n let ny = node.y\n\n if (isRadial) {\n nx += cx\n ny += cy\n }\n\n // Position label based on orientation\n let x: number\n let y: number\n let anchor: \"start\" | \"middle\" | \"end\"\n\n if (isRadial) {\n // Radial: position label outward from center\n const dx = nx - cx\n const dy = ny - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n if (dist > 0) {\n x = nx + (dx / dist) * 10\n y = ny + (dy / dist) * 10\n anchor = dx >= 0 ? \"start\" : \"end\"\n } else {\n x = nx\n y = ny - 12\n anchor = \"middle\"\n }\n } else if (orientation === \"horizontal\") {\n // Horizontal tree: label to the right of leaf nodes, left of root\n const isLeaf = !node.data?.children || node.data.children.length === 0\n if (isLeaf) {\n x = nx + defaultNodeSize + 6\n anchor = \"start\"\n } else {\n x = nx - defaultNodeSize - 6\n anchor = \"end\"\n }\n y = ny\n } else {\n // Vertical tree: label below\n x = nx\n y = ny + defaultNodeSize + 14\n anchor = \"middle\"\n }\n\n labels.push({\n x,\n y,\n text: String(text),\n anchor,\n baseline: \"middle\",\n fontSize: 11\n })\n }\n }\n\n return { sceneNodes, sceneEdges, labels }\n}\n\nfunction buildRectScene(\n nodes: RealtimeNode[],\n config: NetworkPipelineConfig,\n size: [number, number],\n nodeStyleFn: (d: any) => Record<string, any>\n): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n} {\n const sceneNodes: NetworkRectNode[] = []\n const labels: NetworkLabel[] = []\n\n const depthPalette = [\n \"#e8d5b7\", \"#b8d4e3\", \"#d4e3b8\", \"#e3c4d4\",\n \"#d4d4e3\", \"#e3d4b8\", \"#b8e3d4\", \"#e3b8b8\"\n ]\n\n for (const node of nodes) {\n const w = node.x1 - node.x0\n const h = node.y1 - node.y0\n if (w <= 0 || h <= 0) continue\n\n const userStyle = nodeStyleFn(node)\n let fill = userStyle.fill || \"#4d430c\"\n\n // Color by depth if enabled\n if (config.colorByDepth && node.depth !== undefined) {\n fill = depthPalette[node.depth % depthPalette.length]\n }\n\n const style: Style = {\n fill,\n stroke: userStyle.stroke || \"#fff\",\n strokeWidth: userStyle.strokeWidth ?? 1,\n opacity: userStyle.opacity\n }\n\n sceneNodes.push({\n type: \"rect\",\n x: node.x0,\n y: node.y0,\n w,\n h,\n style,\n datum: node,\n id: node.id,\n label: node.id,\n depth: node.depth\n })\n }\n\n // Build labels\n if (config.showLabels !== false) {\n const labelFn = resolveLabelFn(config.nodeLabel)\n\n for (const node of nodes) {\n const w = node.x1 - node.x0\n const h = node.y1 - node.y0\n if (w <= 0 || h <= 0) continue\n\n // Only label leaf nodes by default (for treemap), or all for partition\n const isLeaf = !(node.data?.children && node.data.children.length > 0)\n const isPartition = config.chartType === \"partition\"\n\n if (!isLeaf && !isPartition) continue\n\n const text = labelFn ? labelFn(node) : node.id\n if (!text) continue\n\n // Skip labels for very small cells\n if (w < 30 || h < 16) continue\n\n labels.push({\n x: node.x0 + w / 2,\n y: node.y0 + h / 2,\n text: String(text),\n anchor: \"middle\",\n baseline: \"middle\",\n fontSize: Math.min(11, Math.max(8, Math.min(w, h) / 6))\n })\n }\n }\n\n return { sceneNodes, sceneEdges: [], labels }\n}\n\nfunction buildCircleScene(\n nodes: RealtimeNode[],\n config: NetworkPipelineConfig,\n size: [number, number],\n nodeStyleFn: (d: any) => Record<string, any>\n): {\n sceneNodes: NetworkSceneNode[]\n sceneEdges: NetworkSceneEdge[]\n labels: NetworkLabel[]\n} {\n const sceneNodes: NetworkCircleNode[] = []\n const labels: NetworkLabel[] = []\n const circleOpacity = 0.7\n\n const depthPalette = [\n \"#e8d5b7\", \"#b8d4e3\", \"#d4e3b8\", \"#e3c4d4\",\n \"#d4d4e3\", \"#e3d4b8\", \"#b8e3d4\", \"#e3b8b8\"\n ]\n\n for (const node of nodes) {\n const r = (node as any).__radius ?? 5\n if (r <= 0) continue\n\n const userStyle = nodeStyleFn(node)\n let fill = userStyle.fill || \"#4d430c\"\n\n // Color by depth if enabled\n if (config.colorByDepth && node.depth !== undefined) {\n fill = depthPalette[node.depth % depthPalette.length]\n }\n\n const style: Style = {\n fill,\n stroke: userStyle.stroke || \"#fff\",\n strokeWidth: userStyle.strokeWidth ?? 1,\n opacity: userStyle.opacity ?? circleOpacity\n }\n\n sceneNodes.push({\n type: \"circle\",\n cx: node.x,\n cy: node.y,\n r,\n style,\n datum: node,\n id: node.id,\n label: node.id,\n depth: node.depth\n })\n }\n\n // Build labels\n if (config.showLabels !== false) {\n const labelFn = resolveLabelFn(config.nodeLabel)\n\n for (const node of nodes) {\n const r = (node as any).__radius ?? 5\n\n const text = labelFn ? labelFn(node) : node.id\n if (!text) continue\n\n // Only label nodes with sufficient radius\n if (r < 15) continue\n\n // Leaf nodes: centered label. Parent nodes: top-center label.\n const isLeaf = !(node.data?.children && node.data.children.length > 0)\n\n labels.push({\n x: node.x,\n y: isLeaf ? node.y : node.y - r + 14,\n text: String(text),\n anchor: \"middle\",\n baseline: isLeaf ? \"middle\" : \"hanging\",\n fontSize: Math.min(11, Math.max(8, r / 3)),\n fill: isLeaf ? undefined : \"#000\",\n stroke: isLeaf ? undefined : \"#fff\",\n strokeWidth: isLeaf ? undefined : 3,\n paintOrder: isLeaf ? undefined : \"stroke\"\n })\n }\n }\n\n return { sceneNodes, sceneEdges: [], labels }\n}\n\n// ── Edge path generation ──────────────────────────────────────────────────\n\n/**\n * Generate a cubic bezier path string for a tree/cluster edge.\n * Uses different curve strategies based on tree orientation.\n */\nfunction generateTreeEdgePath(\n sx: number,\n sy: number,\n tx: number,\n ty: number,\n orientation: string\n): string {\n if (orientation === \"horizontal\") {\n // Horizontal: parent on left, child on right\n const midX = (sx + tx) / 2\n return `M ${sx},${sy} C ${midX},${sy} ${midX},${ty} ${tx},${ty}`\n } else if (orientation === \"radial\") {\n // Radial: use a simple quadratic curve through the midpoint\n const midX = (sx + tx) / 2\n const midY = (sy + ty) / 2\n return `M ${sx},${sy} Q ${midX},${sy} ${midX},${midY} T ${tx},${ty}`\n } else {\n // Vertical (default): parent on top, child on bottom\n const midY = (sy + ty) / 2\n return `M ${sx},${sy} C ${sx},${midY} ${tx},${midY} ${tx},${ty}`\n }\n}\n\n// ── Utility helpers ───────────────────────────────────────────────────────\n\nfunction resolveChildrenAccessor(\n accessor: string | ((d: any) => any[]) | undefined\n): ((d: any) => any[]) | undefined {\n if (!accessor) return undefined\n if (typeof accessor === \"function\") return accessor\n return (d: any) => d[accessor]\n}\n\nfunction resolveNodeId(\n d: any,\n config: NetworkPipelineConfig,\n index: number\n): string {\n const accessor = config.nodeIDAccessor\n if (typeof accessor === \"function\") {\n return String(accessor(d.data))\n }\n if (typeof accessor === \"string\" && d.data[accessor] !== undefined) {\n return String(d.data[accessor])\n }\n // Fallback: use name, id, or index\n if (d.data.name !== undefined) return String(d.data.name)\n if (d.data.id !== undefined) return String(d.data.id)\n return `node-${index}`\n}\n\nfunction resolveLabelFn(\n nodeLabel: string | ((d: any) => string) | undefined\n): ((d: any) => string) | null {\n if (!nodeLabel) return null\n if (typeof nodeLabel === \"function\") return nodeLabel\n return (d: any) => d.data?.[nodeLabel] || d[nodeLabel] || d.id\n}\n\nfunction resolveDefaultNodeSize(\n nodeSize: number | string | ((d: any) => number) | undefined\n): number {\n if (typeof nodeSize === \"number\") return nodeSize\n return 5\n}\n","import type { NetworkLayoutPlugin, NetworkChartType } from \"../networkTypes\"\nimport { sankeyLayoutPlugin } from \"./sankeyLayoutPlugin\"\nimport { forceLayoutPlugin } from \"./forceLayoutPlugin\"\nimport { chordLayoutPlugin } from \"./chordLayoutPlugin\"\nimport { hierarchyLayoutPlugin } from \"./hierarchyLayoutPlugin\"\n\n/**\n * Registry mapping network chart types to their layout plugins.\n */\nexport const networkLayoutRegistry: Record<string, NetworkLayoutPlugin> = {\n sankey: sankeyLayoutPlugin,\n force: forceLayoutPlugin,\n chord: chordLayoutPlugin,\n tree: hierarchyLayoutPlugin,\n cluster: hierarchyLayoutPlugin,\n treemap: hierarchyLayoutPlugin,\n circlepack: hierarchyLayoutPlugin,\n partition: hierarchyLayoutPlugin\n}\n\nexport function getLayoutPlugin(\n chartType: NetworkChartType\n): NetworkLayoutPlugin | undefined {\n return networkLayoutRegistry[chartType]\n}\n\nexport { sankeyLayoutPlugin, forceLayoutPlugin, chordLayoutPlugin, hierarchyLayoutPlugin }\n","import { interpolateNumber } from \"d3-interpolate\"\nimport { ParticlePool } from \"./ParticlePool\"\nimport { getLayoutPlugin } from \"./layouts\"\nimport type {\n NetworkChartType,\n NetworkPipelineConfig,\n NetworkSceneNode,\n NetworkSceneEdge,\n NetworkLabel,\n RealtimeNode,\n RealtimeEdge,\n EdgePush,\n TensionConfig,\n BezierCache,\n BezierPoint\n} from \"./networkTypes\"\nimport {\n DEFAULT_TENSION_CONFIG,\n DEFAULT_PARTICLE_STYLE\n} from \"./networkTypes\"\n\nconst CURVATURE = 0.5\n\n/**\n * NetworkPipelineStore — stateful store for the StreamNetworkFrame.\n *\n * Absorbs TopologyStore's functionality (mutable Maps, tension tracking,\n * bezier caching) and adds layout plugin dispatch and scene graph generation.\n *\n * For bounded data: ingests nodes/edges arrays, runs layout once, builds scene.\n * For streaming data: ingests edge pushes, tracks tension, relayouts on threshold.\n */\nexport class NetworkPipelineStore {\n // ── Topology ──────────────────────────────────────────────────────────\n\n nodes: Map<string, RealtimeNode> = new Map()\n edges: Map<string, RealtimeEdge> = new Map()\n tension = 0\n layoutVersion = 0\n\n // ── Scene graph ───────────────────────────────────────────────────────\n\n sceneNodes: NetworkSceneNode[] = []\n sceneEdges: NetworkSceneEdge[] = []\n labels: NetworkLabel[] = []\n\n // ── Particles ─────────────────────────────────────────────────────────\n\n particlePool: ParticlePool | null = null\n\n // ── Config ────────────────────────────────────────────────────────────\n\n private config: NetworkPipelineConfig\n private tensionConfig: TensionConfig\n\n // ── Transition animation ──────────────────────────────────────────────\n\n transition: {\n startTime: number\n duration: number\n } | null = null\n\n constructor(config: NetworkPipelineConfig) {\n this.config = config\n this.tensionConfig = {\n ...DEFAULT_TENSION_CONFIG,\n ...config.tensionConfig\n }\n\n // Lazy particle pool — only for sankey with particles\n if (config.chartType === \"sankey\" && config.showParticles) {\n this.particlePool = new ParticlePool(2000)\n }\n }\n\n // ── Config update ─────────────────────────────────────────────────────\n\n updateConfig(config: NetworkPipelineConfig): void {\n this.config = config\n this.tensionConfig = {\n ...DEFAULT_TENSION_CONFIG,\n ...config.tensionConfig\n }\n\n // Create/destroy particle pool based on config\n if (config.chartType === \"sankey\" && config.showParticles) {\n if (!this.particlePool) {\n this.particlePool = new ParticlePool(2000)\n }\n } else {\n this.particlePool = null\n }\n }\n\n // ── Hierarchy data ingestion ──────────────────────────────────────────\n\n /**\n * Ingest hierarchy root data for tree/treemap/circlepack/partition layouts.\n * The hierarchy root is passed to the layout plugin via config.__hierarchyRoot.\n */\n ingestHierarchy(\n rootData: any,\n size: [number, number]\n ): void {\n this.nodes.clear()\n this.edges.clear()\n\n // Stash hierarchy root on config for the plugin to read\n ;(this.config as any).__hierarchyRoot = rootData\n\n // Run layout — the hierarchical plugin will populate nodes/edges\n this.runLayout(size)\n }\n\n // ── Bounded data ingestion ────────────────────────────────────────────\n\n /**\n * Ingest bounded node/edge arrays (from props).\n * Clears existing topology and rebuilds from scratch.\n */\n ingestBounded(\n rawNodes: any[],\n rawEdges: any[],\n size: [number, number]\n ): void {\n const {\n nodeIDAccessor = \"id\",\n sourceAccessor = \"source\",\n targetAccessor = \"target\",\n valueAccessor = \"value\"\n } = this.config\n\n const getNodeId = typeof nodeIDAccessor === \"function\"\n ? nodeIDAccessor\n : (d: any) => d[nodeIDAccessor]\n\n const getSource = typeof sourceAccessor === \"function\"\n ? sourceAccessor\n : (d: any) => d[sourceAccessor]\n\n const getTarget = typeof targetAccessor === \"function\"\n ? targetAccessor\n : (d: any) => d[targetAccessor]\n\n const getValue = typeof valueAccessor === \"function\"\n ? valueAccessor\n : (d: any) => d[valueAccessor] ?? 1\n\n this.nodes.clear()\n this.edges.clear()\n\n // Build node map\n for (const raw of rawNodes) {\n const id = String(getNodeId(raw))\n this.nodes.set(id, {\n ...createNode(id),\n data: raw\n })\n }\n\n // Build edge map (creating nodes if not provided)\n for (const raw of rawEdges) {\n const sourceId = String(getSource(raw))\n const targetId = String(getTarget(raw))\n const value = Number(getValue(raw)) || 1\n\n if (!this.nodes.has(sourceId)) {\n this.nodes.set(sourceId, { ...createNode(sourceId), data: raw })\n }\n if (!this.nodes.has(targetId)) {\n this.nodes.set(targetId, { ...createNode(targetId), data: raw })\n }\n\n const key = `${sourceId}\\0${targetId}`\n this.edges.set(key, {\n source: sourceId,\n target: targetId,\n value,\n y0: 0,\n y1: 0,\n sankeyWidth: 0,\n data: raw\n })\n }\n\n // Run layout\n this.runLayout(size)\n }\n\n // ── Streaming data ingestion ──────────────────────────────────────────\n\n /**\n * Unique key for an edge (same as TopologyStore).\n */\n private edgeKey(source: string, target: string): string {\n return `${source}\\0${target}`\n }\n\n /**\n * Ingest a pushed edge. Creates nodes/edges as needed and accumulates tension.\n * Returns true if a relayout is needed.\n */\n ingestEdge(push: EdgePush): boolean {\n const { source, target, value } = push\n const isFirst = this.nodes.size === 0\n let topologyChanged = false\n\n if (!this.nodes.has(source)) {\n this.nodes.set(source, createNode(source))\n this.tension += this.tensionConfig.newNode\n topologyChanged = true\n }\n\n if (!this.nodes.has(target)) {\n this.nodes.set(target, createNode(target))\n this.tension += this.tensionConfig.newNode\n topologyChanged = true\n }\n\n const key = this.edgeKey(source, target)\n const existing = this.edges.get(key)\n\n if (existing) {\n existing.value += value\n this.tension += this.tensionConfig.weightChange\n } else {\n this.edges.set(key, {\n source,\n target,\n value,\n y0: 0,\n y1: 0,\n sankeyWidth: 0\n })\n this.tension += this.tensionConfig.newEdge\n topologyChanged = true\n }\n\n return isFirst || topologyChanged || this.tension >= this.tensionConfig.threshold\n }\n\n // ── Layout execution ──────────────────────────────────────────────────\n\n /**\n * Run the layout algorithm via the appropriate plugin.\n */\n runLayout(size: [number, number]): void {\n const plugin = getLayoutPlugin(this.config.chartType)\n if (!plugin) return\n\n let nodesArr = Array.from(this.nodes.values())\n let edgesArr = Array.from(this.edges.values())\n\n // For hierarchical plugins the store's Maps are empty — the plugin\n // populates the nodes/edges arrays itself from config.__hierarchyRoot.\n // Skip the early exit so the plugin gets called.\n if (nodesArr.length === 0 && !plugin.hierarchical) return\n\n // Save previous positions for transition\n this.prepareForRelayout()\n\n // Execute layout — hierarchical plugins push into the arrays directly\n plugin.computeLayout(nodesArr, edgesArr, this.config, size)\n\n // After hierarchical layout, sync the populated arrays back into the\n // store's Maps so buildScene and getLayoutData work correctly.\n if (plugin.hierarchical && nodesArr.length > 0) {\n this.nodes.clear()\n this.edges.clear()\n for (const node of nodesArr) {\n this.nodes.set(node.id, node)\n }\n for (const edge of edgesArr) {\n const srcId = typeof edge.source === \"string\" ? edge.source : edge.source.id\n const tgtId = typeof edge.target === \"string\" ? edge.target : edge.target.id\n this.edges.set(`${srcId}\\0${tgtId}`, edge)\n }\n }\n\n // Finalize — update derived properties and bezier caches\n this.finalizeLayout()\n\n // Save target positions for animation\n this.saveTargetPositions()\n\n // Check if we have meaningful previous positions to animate from\n const hasOldPositions = nodesArr.some(\n (n) => n._prevX0 !== undefined &&\n (n._prevX0 !== 0 || n._prevX1 !== 0 || n._prevY0 !== 0 || n._prevY1 !== 0)\n )\n\n if (hasOldPositions && this.tensionConfig.transitionDuration > 0) {\n // Reset to previous positions (animation starts from here)\n this.restorePreviousPositions()\n\n // Start transition\n this.transition = {\n startTime: performance.now(),\n duration: this.tensionConfig.transitionDuration\n }\n }\n\n this.layoutVersion++\n }\n\n /**\n * Build the scene graph from current layout positions.\n */\n buildScene(size: [number, number]): void {\n const plugin = getLayoutPlugin(this.config.chartType)\n if (!plugin) return\n\n const nodesArr = Array.from(this.nodes.values())\n const edgesArr = Array.from(this.edges.values())\n\n const { sceneNodes, sceneEdges, labels } = plugin.buildScene(\n nodesArr,\n edgesArr,\n this.config,\n size\n )\n\n this.sceneNodes = sceneNodes\n this.sceneEdges = sceneEdges\n this.labels = labels\n }\n\n // ── Transition animation ──────────────────────────────────────────────\n\n /**\n * Advance the transition animation. Returns true if still animating.\n */\n advanceTransition(now: number): boolean {\n if (!this.transition) return false\n\n const elapsed = now - this.transition.startTime\n const rawT = Math.min(elapsed / this.transition.duration, 1)\n // Ease-out cubic\n const t = 1 - Math.pow(1 - rawT, 3)\n\n for (const node of this.nodes.values()) {\n if (\n node._targetX0 !== undefined &&\n node._prevX0 !== undefined &&\n (node._prevX0 !== 0 || node._prevX1 !== 0)\n ) {\n node.x0 = node._prevX0 + (node._targetX0 - node._prevX0) * t\n node.x1 = node._prevX1! + (node._targetX1! - node._prevX1!) * t\n node.y0 = node._prevY0! + (node._targetY0! - node._prevY0!) * t\n node.y1 = node._prevY1! + (node._targetY1! - node._prevY1!) * t\n }\n }\n\n for (const edge of this.edges.values()) {\n if (\n edge._targetY0 !== undefined &&\n edge._prevY0 !== undefined &&\n edge._prevSankeyWidth !== undefined &&\n edge._prevSankeyWidth > 0\n ) {\n edge.y0 = edge._prevY0 + (edge._targetY0 - edge._prevY0) * t\n edge.y1 = edge._prevY1! + (edge._targetY1! - edge._prevY1!) * t\n edge.sankeyWidth =\n edge._prevSankeyWidth + (edge._targetSankeyWidth! - edge._prevSankeyWidth) * t\n }\n }\n\n // Rebuild beziers for new interpolated positions\n this.rebuildAllBeziers()\n\n if (rawT >= 1) {\n // Snap to final target positions\n this.snapToTargets()\n this.transition = null\n return false\n }\n\n return true\n }\n\n // ── Topology helpers (ported from TopologyStore) ──────────────────────\n\n private prepareForRelayout(): void {\n for (const node of this.nodes.values()) {\n node._prevX0 = node.x0\n node._prevX1 = node.x1\n node._prevY0 = node.y0\n node._prevY1 = node.y1\n }\n for (const edge of this.edges.values()) {\n edge._prevY0 = edge.y0\n edge._prevY1 = edge.y1\n edge._prevSankeyWidth = edge.sankeyWidth\n }\n }\n\n private finalizeLayout(): void {\n const direction = this.config.orientation === \"vertical\" ? \"down\" : \"right\"\n\n for (const node of this.nodes.values()) {\n // Sankey/treemap/partition set x0/x1/y0/y1 — derive x/y from those.\n // Force/chord set x/y directly — derive x0/x1 from x/y.\n const hasBox = node.x0 !== 0 || node.x1 !== 0 || node.y0 !== 0 || node.y1 !== 0\n if (hasBox) {\n node.width = node.x1 - node.x0\n node.height = node.y1 - node.y0\n node.x = node.x0 + node.width / 2\n node.y = node.y0 + node.height / 2\n } else {\n // x/y already set by layout (force, chord) — synthesize a bounding box\n const r = 5\n node.x0 = node.x - r\n node.x1 = node.x + r\n node.y0 = node.y - r\n node.y1 = node.y + r\n node.width = r * 2\n node.height = r * 2\n }\n }\n\n for (const edge of this.edges.values()) {\n edge.direction = direction\n this.updateEdgeBezier(edge)\n }\n\n this.tension = 0\n }\n\n private saveTargetPositions(): void {\n for (const node of this.nodes.values()) {\n node._targetX0 = node.x0\n node._targetX1 = node.x1\n node._targetY0 = node.y0\n node._targetY1 = node.y1\n }\n for (const edge of this.edges.values()) {\n edge._targetY0 = edge.y0\n edge._targetY1 = edge.y1\n edge._targetSankeyWidth = edge.sankeyWidth\n }\n }\n\n private restorePreviousPositions(): void {\n for (const node of this.nodes.values()) {\n if (\n node._prevX0 !== undefined &&\n (node._prevX0 !== 0 || node._prevX1 !== 0)\n ) {\n node.x0 = node._prevX0\n node.x1 = node._prevX1!\n node.y0 = node._prevY0!\n node.y1 = node._prevY1!\n }\n }\n for (const edge of this.edges.values()) {\n if (\n edge._prevY0 !== undefined &&\n edge._prevSankeyWidth !== undefined &&\n edge._prevSankeyWidth > 0\n ) {\n edge.y0 = edge._prevY0\n edge.y1 = edge._prevY1!\n edge.sankeyWidth = edge._prevSankeyWidth\n }\n }\n this.rebuildAllBeziers()\n }\n\n private snapToTargets(): void {\n for (const node of this.nodes.values()) {\n if (node._targetX0 !== undefined) {\n node.x0 = node._targetX0\n node.x1 = node._targetX1!\n node.y0 = node._targetY0!\n node.y1 = node._targetY1!\n }\n }\n for (const edge of this.edges.values()) {\n if (edge._targetY0 !== undefined) {\n edge.y0 = edge._targetY0\n edge.y1 = edge._targetY1!\n edge.sankeyWidth = edge._targetSankeyWidth!\n }\n }\n this.rebuildAllBeziers()\n }\n\n // ── Bezier caching (ported from TopologyStore) ────────────────────────\n\n private updateEdgeBezier(edge: RealtimeEdge): void {\n const sourceNode =\n typeof edge.source === \"string\"\n ? this.nodes.get(edge.source)!\n : edge.source\n const targetNode =\n typeof edge.target === \"string\"\n ? this.nodes.get(edge.target)!\n : edge.target\n\n if (!sourceNode || !targetNode) return\n\n if (edge.circular && edge.circularPathData) {\n edge.bezier = this.buildCircularBezier(edge)\n } else {\n edge.bezier = this.buildStandardBezier(edge, sourceNode, targetNode)\n }\n }\n\n private buildStandardBezier(\n edge: RealtimeEdge,\n sourceNode: RealtimeNode,\n targetNode: RealtimeNode\n ): BezierCache {\n const hw = (edge.sankeyWidth || 1) / 2\n\n if (edge.direction === \"down\") {\n const y0 = sourceNode.y1\n const y1 = targetNode.y0\n const xi = interpolateNumber(y0, y1)\n const p0: BezierPoint = { x: edge.y0, y: y0 }\n const p1: BezierPoint = { x: edge.y0, y: xi(CURVATURE) }\n const p2: BezierPoint = { x: edge.y1, y: xi(1 - CURVATURE) }\n const p3: BezierPoint = { x: edge.y1, y: y1 }\n return { circular: false, points: [p0, p1, p2, p3], halfWidth: hw }\n }\n\n // Horizontal (default)\n const x0 = sourceNode.x1\n const x1 = targetNode.x0\n const xi = interpolateNumber(x0, x1)\n const p0: BezierPoint = { x: x0, y: edge.y0 }\n const p1: BezierPoint = { x: xi(CURVATURE), y: edge.y0 }\n const p2: BezierPoint = { x: xi(1 - CURVATURE), y: edge.y1 }\n const p3: BezierPoint = { x: x1, y: edge.y1 }\n return { circular: false, points: [p0, p1, p2, p3], halfWidth: hw }\n }\n\n private buildCircularBezier(edge: RealtimeEdge): BezierCache {\n const hw = (edge.sankeyWidth || 1) / 2\n const cpd = edge.circularPathData\n\n let waypoints: BezierPoint[]\n\n if (edge.direction === \"down\") {\n waypoints = [\n { x: cpd.sourceY, y: cpd.sourceX },\n { x: cpd.sourceY, y: cpd.leftFullExtent },\n { x: cpd.verticalFullExtent, y: cpd.leftFullExtent },\n { x: cpd.verticalFullExtent, y: cpd.rightFullExtent },\n { x: cpd.targetY, y: cpd.rightFullExtent },\n { x: cpd.targetY, y: cpd.targetX }\n ]\n } else {\n waypoints = [\n { x: cpd.sourceX, y: cpd.sourceY },\n { x: cpd.leftFullExtent, y: cpd.sourceY },\n { x: cpd.leftFullExtent, y: cpd.verticalFullExtent },\n { x: cpd.rightFullExtent, y: cpd.verticalFullExtent },\n { x: cpd.rightFullExtent, y: cpd.targetY },\n { x: cpd.targetX, y: cpd.targetY }\n ]\n }\n\n const segments: Array<[BezierPoint, BezierPoint, BezierPoint, BezierPoint]> = []\n for (let i = 0; i < waypoints.length - 1; i++) {\n const a = waypoints[i]\n const b = waypoints[i + 1]\n const dx = b.x - a.x\n const dy = b.y - a.y\n segments.push([\n a,\n { x: a.x + dx / 3, y: a.y + dy / 3 },\n { x: a.x + (2 * dx) / 3, y: a.y + (2 * dy) / 3 },\n b\n ])\n }\n\n return { circular: true, segments, halfWidth: hw }\n }\n\n rebuildAllBeziers(): void {\n for (const node of this.nodes.values()) {\n node.width = node.x1 - node.x0\n node.height = node.y1 - node.y0\n node.x = node.x0 + node.width / 2\n node.y = node.y0 + node.height / 2\n }\n for (const edge of this.edges.values()) {\n this.updateEdgeBezier(edge)\n }\n }\n\n // ── Public accessors ──────────────────────────────────────────────────\n\n getLayoutData(): { nodes: RealtimeNode[]; edges: RealtimeEdge[] } {\n return {\n nodes: Array.from(this.nodes.values()),\n edges: Array.from(this.edges.values())\n }\n }\n\n clear(): void {\n this.nodes.clear()\n this.edges.clear()\n this.tension = 0\n this.layoutVersion = 0\n this.sceneNodes = []\n this.sceneEdges = []\n this.labels = []\n this.transition = null\n if (this.particlePool) {\n this.particlePool.clear()\n }\n }\n}\n\nfunction createNode(id: string): RealtimeNode {\n return {\n id,\n x0: 0,\n x1: 0,\n y0: 0,\n y1: 0,\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n value: 0,\n createdByFrame: true\n }\n}\n","import type {\n NetworkSceneNode,\n NetworkSceneEdge,\n NetworkCircleNode,\n NetworkRectNode,\n NetworkArcNode,\n NetworkBezierEdge\n} from \"./networkTypes\"\n\nexport interface NetworkHitResult {\n type: \"node\" | \"edge\"\n datum: any\n x: number\n y: number\n distance: number\n}\n\n/**\n * Hit test against network scene nodes and edges.\n *\n * Checks nodes first (they're on top), then edges.\n */\nexport function findNearestNetworkNode(\n sceneNodes: NetworkSceneNode[],\n sceneEdges: NetworkSceneEdge[],\n px: number,\n py: number,\n maxDistance = 30\n): NetworkHitResult | null {\n // Check nodes — for nested rects (treemap) we want the smallest\n // containing rect, so we track rect hits by area separately.\n let bestNode: NetworkHitResult | null = null\n let bestDist = maxDistance\n let bestRectArea = Infinity\n\n for (const node of sceneNodes) {\n const result = hitTestNode(node, px, py)\n if (!result) continue\n\n if (node.type === \"rect\") {\n // For rects: prefer the smallest area (deepest cell)\n const area = (node as NetworkRectNode).w * (node as NetworkRectNode).h\n if (area < bestRectArea) {\n bestNode = result\n bestRectArea = area\n }\n } else if (result.distance < bestDist) {\n bestNode = result\n bestDist = result.distance\n }\n }\n\n if (bestNode) return bestNode\n\n // Check edges if no node hit\n for (const edge of sceneEdges) {\n const result = hitTestEdge(edge, px, py)\n if (result && result.distance < bestDist) {\n bestNode = result\n bestDist = result.distance\n }\n }\n\n return bestNode\n}\n\n// ── Node hit testing ────────────────────────────────────────────────────\n\nfunction hitTestNode(\n node: NetworkSceneNode,\n px: number,\n py: number\n): NetworkHitResult | null {\n switch (node.type) {\n case \"circle\":\n return hitTestCircle(node, px, py)\n case \"rect\":\n return hitTestRect(node, px, py)\n case \"arc\":\n return hitTestArc(node, px, py)\n default:\n return null\n }\n}\n\nfunction hitTestCircle(\n node: NetworkCircleNode,\n px: number,\n py: number\n): NetworkHitResult | null {\n const dx = px - node.cx\n const dy = py - node.cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n const tolerance = Math.max(node.r, 5) + 5\n\n if (dist <= tolerance) {\n return {\n type: \"node\",\n datum: node.datum,\n x: node.cx,\n y: node.cy,\n distance: dist\n }\n }\n return null\n}\n\nfunction hitTestRect(\n node: NetworkRectNode,\n px: number,\n py: number\n): NetworkHitResult | null {\n if (\n px >= node.x &&\n px <= node.x + node.w &&\n py >= node.y &&\n py <= node.y + node.h\n ) {\n return {\n type: \"node\",\n datum: node.datum,\n x: node.x + node.w / 2,\n y: node.y + node.h / 2,\n distance: 0\n }\n }\n return null\n}\n\nfunction hitTestArc(\n node: NetworkArcNode,\n px: number,\n py: number\n): NetworkHitResult | null {\n // Convert to polar coordinates relative to arc center\n const dx = px - node.cx\n const dy = py - node.cy\n const radius = Math.sqrt(dx * dx + dy * dy)\n\n // Check radius bounds\n if (radius < node.innerR - 2 || radius > node.outerR + 2) return null\n\n // Check angle bounds\n let angle = Math.atan2(dy, dx)\n // Normalize angle to be positive\n if (angle < 0) angle += Math.PI * 2\n\n let start = node.startAngle\n let end = node.endAngle\n // Normalize start/end angles\n if (start < 0) start += Math.PI * 2\n if (end < 0) end += Math.PI * 2\n\n let inArc: boolean\n if (start <= end) {\n inArc = angle >= start && angle <= end\n } else {\n // Wraps around 0\n inArc = angle >= start || angle <= end\n }\n\n if (inArc) {\n const midAngle = (node.startAngle + node.endAngle) / 2\n const midR = (node.innerR + node.outerR) / 2\n return {\n type: \"node\",\n datum: node.datum,\n x: node.cx + midR * Math.cos(midAngle),\n y: node.cy + midR * Math.sin(midAngle),\n distance: 0\n }\n }\n\n return null\n}\n\n// ── Edge hit testing ────────────────────────────────────────────────────\n\nfunction hitTestEdge(\n edge: NetworkSceneEdge,\n px: number,\n py: number\n): NetworkHitResult | null {\n switch (edge.type) {\n case \"bezier\":\n return hitTestBezierEdge(edge, px, py)\n case \"line\":\n return hitTestLineEdge(edge, px, py)\n case \"ribbon\":\n return hitTestPathEdge(edge, px, py)\n case \"curved\":\n return hitTestPathEdge(edge, px, py)\n default:\n return null\n }\n}\n\nfunction hitTestBezierEdge(\n edge: NetworkBezierEdge,\n px: number,\n py: number\n): NetworkHitResult | null {\n // Use Path2D for approximate point-in-path testing\n if (!edge.pathD) return null\n\n try {\n const path = new Path2D(edge.pathD)\n // Create an offscreen canvas context for isPointInPath\n // For performance, use a simple bounding-box approximation\n // and rely on the filled path test\n const canvas = document.createElement(\"canvas\")\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) return null\n\n if (ctx.isPointInPath(path, px, py)) {\n // Return midpoint of the band as hover position\n const sourceNode = typeof edge.datum?.source === \"object\" ? edge.datum.source : null\n const targetNode = typeof edge.datum?.target === \"object\" ? edge.datum.target : null\n\n const midX = sourceNode && targetNode\n ? (sourceNode.x1 + targetNode.x0) / 2\n : px\n const midY = edge.datum\n ? (edge.datum.y0 + edge.datum.y1) / 2\n : py\n\n return {\n type: \"edge\",\n datum: edge.datum,\n x: midX,\n y: midY,\n distance: 0\n }\n }\n } catch {\n // Path2D may not be supported in all environments\n }\n\n return null\n}\n\nfunction hitTestLineEdge(\n edge: { type: \"line\"; x1: number; y1: number; x2: number; y2: number; datum: any },\n px: number,\n py: number\n): NetworkHitResult | null {\n // Point-to-line-segment distance\n const dx = edge.x2 - edge.x1\n const dy = edge.y2 - edge.y1\n const len2 = dx * dx + dy * dy\n\n if (len2 === 0) return null\n\n let t = ((px - edge.x1) * dx + (py - edge.y1) * dy) / len2\n t = Math.max(0, Math.min(1, t))\n\n const nearX = edge.x1 + t * dx\n const nearY = edge.y1 + t * dy\n const dist = Math.sqrt((px - nearX) ** 2 + (py - nearY) ** 2)\n\n const tolerance = 5\n if (dist <= tolerance) {\n return {\n type: \"edge\",\n datum: edge.datum,\n x: nearX,\n y: nearY,\n distance: dist\n }\n }\n\n return null\n}\n\nfunction hitTestPathEdge(\n edge: { pathD: string; datum: any },\n px: number,\n py: number\n): NetworkHitResult | null {\n if (!edge.pathD) return null\n\n try {\n const path = new Path2D(edge.pathD)\n const canvas = document.createElement(\"canvas\")\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) return null\n\n if (ctx.isPointInPath(path, px, py)) {\n return {\n type: \"edge\",\n datum: edge.datum,\n x: px,\n y: py,\n distance: 0\n }\n }\n } catch {\n // Fallback — no hit\n }\n\n return null\n}\n","\"use client\"\nimport * as React from \"react\"\nimport type { ReactNode } from \"react\"\nimport type { NetworkLabel } from \"./networkTypes\"\nimport type { LegendGroup } from \"../types/legendTypes\"\n\nexport interface NetworkSVGOverlayProps {\n width: number\n height: number\n totalWidth: number\n totalHeight: number\n margin: { top: number; right: number; bottom: number; left: number }\n\n /** Labels from the layout plugin */\n labels: NetworkLabel[]\n\n /** Chart title */\n title?: string | ReactNode\n\n /** Legend configuration */\n legend?: ReactNode | { legendGroups: LegendGroup[] }\n\n /** User-provided SVG elements on top */\n foregroundGraphics?: ReactNode\n\n /** Annotations */\n annotations?: Record<string, any>[]\n svgAnnotationRules?: (\n annotation: Record<string, any>,\n index: number,\n context: any\n ) => ReactNode\n annotationFrame?: number\n}\n\n/**\n * SVG overlay for network charts — renders labels, title, legend, annotations.\n *\n * Unlike XY/ordinal overlays, network charts don't have axes or grid lines.\n * The overlay is positioned absolutely over the canvas.\n */\nexport function NetworkSVGOverlay(props: NetworkSVGOverlayProps) {\n const {\n width,\n height,\n totalWidth,\n totalHeight,\n margin,\n labels,\n title,\n legend,\n foregroundGraphics,\n annotations,\n svgAnnotationRules,\n annotationFrame\n } = props\n\n return (\n <svg\n width={totalWidth}\n height={totalHeight}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n pointerEvents: \"none\"\n }}\n >\n <g transform={`translate(${margin.left},${margin.top})`}>\n {/* Labels */}\n {labels.map((label, i) => (\n <text\n key={`label-${i}`}\n x={label.x}\n y={label.y}\n textAnchor={label.anchor || \"start\"}\n dominantBaseline={(label.baseline || \"middle\") as any}\n fontSize={label.fontSize || 11}\n fontWeight={label.fontWeight}\n fill={label.fill || \"currentColor\"}\n stroke={label.stroke}\n strokeWidth={label.strokeWidth}\n paintOrder={label.paintOrder}\n style={{ pointerEvents: \"none\" }}\n >\n {label.text}\n </text>\n ))}\n\n {/* Annotations */}\n {annotations &&\n svgAnnotationRules &&\n annotations.map((annotation, i) => {\n const element = svgAnnotationRules(annotation, i, {\n width,\n height\n })\n return element ? (\n <React.Fragment key={`annotation-${i}`}>\n {element}\n </React.Fragment>\n ) : null\n })}\n\n {/* Foreground graphics */}\n {foregroundGraphics}\n </g>\n\n {/* Title */}\n {title && typeof title === \"string\" ? (\n <text\n x={totalWidth / 2}\n y={16}\n textAnchor=\"middle\"\n fontSize={14}\n fontWeight={600}\n fill=\"currentColor\"\n >\n {title}\n </text>\n ) : title ? (\n <foreignObject x={0} y={0} width={totalWidth} height={margin.top}>\n {title}\n </foreignObject>\n ) : null}\n\n {/* Legend */}\n {legend && typeof legend === \"object\" && \"legendGroups\" in (legend as any) ? (\n <g transform={`translate(${totalWidth - margin.right + 10},${margin.top})`}>\n {((legend as any).legendGroups as LegendGroup[]).map(\n (group, gi) => (\n <g key={`legend-group-${gi}`}>\n {group.items?.map((item: any, ii: number) => (\n <g key={`legend-item-${ii}`} transform={`translate(0,${ii * 20})`}>\n <rect\n x={0}\n y={0}\n width={12}\n height={12}\n fill={item.color}\n rx={2}\n />\n <text\n x={18}\n y={10}\n fontSize={11}\n fill=\"currentColor\"\n >\n {item.label}\n </text>\n </g>\n ))}\n </g>\n )\n )}\n </g>\n ) : legend ? (\n <g transform={`translate(${totalWidth - margin.right + 10},${margin.top})`}>\n {legend as React.ReactNode}\n </g>\n ) : null}\n </svg>\n )\n}\n\nNetworkSVGOverlay.displayName = \"NetworkSVGOverlay\"\n","import type { NetworkSceneNode, NetworkRectNode } from \"../networkTypes\"\n\n/**\n * Canvas painter for NetworkRectNode (sankey nodes, treemap cells, partition blocks).\n */\nexport function networkRectRenderer(\n ctx: CanvasRenderingContext2D,\n nodes: NetworkSceneNode[]\n): void {\n for (const node of nodes) {\n if (node.type !== \"rect\") continue\n const r = node as NetworkRectNode\n\n if (r.w <= 0 || r.h <= 0) continue\n\n ctx.save()\n\n if (r.style.opacity !== undefined) {\n ctx.globalAlpha = r.style.opacity\n }\n\n // Fill\n if (r.style.fill) {\n ctx.fillStyle = r.style.fill\n if (r.style.fillOpacity !== undefined) {\n ctx.globalAlpha = (r.style.opacity ?? 1) * r.style.fillOpacity\n }\n ctx.fillRect(r.x, r.y, r.w, r.h)\n }\n\n // Stroke\n if (r.style.stroke && r.style.stroke !== \"none\") {\n ctx.strokeStyle = r.style.stroke\n ctx.lineWidth = r.style.strokeWidth ?? 1\n ctx.globalAlpha = r.style.opacity ?? 1\n ctx.strokeRect(r.x, r.y, r.w, r.h)\n }\n\n ctx.restore()\n }\n}\n","import type { NetworkSceneNode, NetworkCircleNode } from \"../networkTypes\"\n\n/**\n * Canvas painter for NetworkCircleNode (force nodes, tree nodes, circlepack).\n */\nexport function networkCircleRenderer(\n ctx: CanvasRenderingContext2D,\n nodes: NetworkSceneNode[]\n): void {\n for (const node of nodes) {\n if (node.type !== \"circle\") continue\n const c = node as NetworkCircleNode\n\n if (c.r <= 0) continue\n\n ctx.save()\n\n if (c.style.opacity !== undefined) {\n ctx.globalAlpha = c.style.opacity\n }\n\n ctx.beginPath()\n ctx.arc(c.cx, c.cy, c.r, 0, Math.PI * 2)\n\n // Fill\n if (c.style.fill) {\n ctx.fillStyle = c.style.fill\n if (c.style.fillOpacity !== undefined) {\n ctx.globalAlpha = (c.style.opacity ?? 1) * c.style.fillOpacity\n }\n ctx.fill()\n }\n\n // Stroke\n if (c.style.stroke && c.style.stroke !== \"none\") {\n ctx.strokeStyle = c.style.stroke\n ctx.lineWidth = c.style.strokeWidth ?? 1\n ctx.globalAlpha = c.style.opacity ?? 1\n ctx.stroke()\n }\n\n ctx.restore()\n }\n}\n","import type { NetworkSceneNode, NetworkArcNode } from \"../networkTypes\"\n\n/**\n * Canvas painter for NetworkArcNode (chord diagram arc segments).\n */\nexport function networkArcRenderer(\n ctx: CanvasRenderingContext2D,\n nodes: NetworkSceneNode[]\n): void {\n for (const node of nodes) {\n if (node.type !== \"arc\") continue\n const a = node as NetworkArcNode\n\n ctx.save()\n\n if (a.style.opacity !== undefined) {\n ctx.globalAlpha = a.style.opacity\n }\n\n // Draw arc segment (annular sector)\n ctx.beginPath()\n ctx.arc(a.cx, a.cy, a.outerR, a.startAngle, a.endAngle)\n ctx.arc(a.cx, a.cy, a.innerR, a.endAngle, a.startAngle, true)\n ctx.closePath()\n\n // Fill\n if (a.style.fill) {\n ctx.fillStyle = a.style.fill\n if (a.style.fillOpacity !== undefined) {\n ctx.globalAlpha = (a.style.opacity ?? 1) * a.style.fillOpacity\n }\n ctx.fill()\n }\n\n // Stroke\n if (a.style.stroke && a.style.stroke !== \"none\") {\n ctx.strokeStyle = a.style.stroke\n ctx.lineWidth = a.style.strokeWidth ?? 1\n ctx.globalAlpha = a.style.opacity ?? 1\n ctx.stroke()\n }\n\n ctx.restore()\n }\n}\n","import type {\n NetworkSceneEdge,\n NetworkBezierEdge,\n NetworkLineEdge,\n NetworkRibbonEdge,\n NetworkCurvedEdge\n} from \"../networkTypes\"\n\n/**\n * Canvas painter for all network edge types.\n *\n * - bezier: Sankey flow bands (Path2D from SVG path string)\n * - line: Force-directed straight edges\n * - ribbon: Chord diagram ribbons\n * - curved: Tree/cluster curved edges\n */\nexport function networkEdgeRenderer(\n ctx: CanvasRenderingContext2D,\n edges: NetworkSceneEdge[]\n): void {\n for (const edge of edges) {\n switch (edge.type) {\n case \"bezier\":\n renderBezierEdge(ctx, edge)\n break\n case \"line\":\n renderLineEdge(ctx, edge)\n break\n case \"ribbon\":\n renderRibbonEdge(ctx, edge)\n break\n case \"curved\":\n renderCurvedEdge(ctx, edge)\n break\n }\n }\n}\n\nfunction renderBezierEdge(\n ctx: CanvasRenderingContext2D,\n edge: NetworkBezierEdge\n): void {\n if (!edge.pathD) return\n\n ctx.save()\n\n const path = new Path2D(edge.pathD)\n\n // Fill the band\n if (edge.style.fill && edge.style.fill !== \"none\") {\n ctx.fillStyle = edge.style.fill\n ctx.globalAlpha = edge.style.fillOpacity ?? edge.style.opacity ?? 0.5\n ctx.fill(path)\n }\n\n // Stroke the band outline\n if (edge.style.stroke && edge.style.stroke !== \"none\") {\n ctx.strokeStyle = edge.style.stroke\n ctx.lineWidth = edge.style.strokeWidth ?? 0.5\n ctx.globalAlpha = (edge.style.opacity ?? 1) * 0.5\n ctx.stroke(path)\n }\n\n ctx.restore()\n}\n\nfunction renderLineEdge(\n ctx: CanvasRenderingContext2D,\n edge: NetworkLineEdge\n): void {\n ctx.save()\n\n ctx.strokeStyle = edge.style.stroke || \"#999\"\n ctx.lineWidth = edge.style.strokeWidth ?? 1\n if (edge.style.opacity !== undefined) {\n ctx.globalAlpha = edge.style.opacity\n }\n if (edge.style.strokeDasharray) {\n ctx.setLineDash(edge.style.strokeDasharray.split(/[\\s,]+/).map(Number))\n }\n\n ctx.beginPath()\n ctx.moveTo(edge.x1, edge.y1)\n ctx.lineTo(edge.x2, edge.y2)\n ctx.stroke()\n\n ctx.restore()\n}\n\nfunction renderRibbonEdge(\n ctx: CanvasRenderingContext2D,\n edge: NetworkRibbonEdge\n): void {\n if (!edge.pathD) return\n\n ctx.save()\n\n const path = new Path2D(edge.pathD)\n\n if (edge.style.fill && edge.style.fill !== \"none\") {\n ctx.fillStyle = edge.style.fill\n ctx.globalAlpha = edge.style.fillOpacity ?? edge.style.opacity ?? 0.5\n ctx.fill(path)\n }\n\n if (edge.style.stroke && edge.style.stroke !== \"none\") {\n ctx.strokeStyle = edge.style.stroke\n ctx.lineWidth = edge.style.strokeWidth ?? 0.5\n ctx.globalAlpha = (edge.style.opacity ?? 1) * 0.3\n ctx.stroke(path)\n }\n\n ctx.restore()\n}\n\nfunction renderCurvedEdge(\n ctx: CanvasRenderingContext2D,\n edge: NetworkCurvedEdge\n): void {\n if (!edge.pathD) return\n\n ctx.save()\n\n const path = new Path2D(edge.pathD)\n\n ctx.strokeStyle = edge.style.stroke || \"#999\"\n ctx.lineWidth = edge.style.strokeWidth ?? 1\n if (edge.style.opacity !== undefined) {\n ctx.globalAlpha = edge.style.opacity\n }\n ctx.stroke(path)\n\n // Fill if specified (usually not for tree edges)\n if (edge.style.fill && edge.style.fill !== \"none\") {\n ctx.fillStyle = edge.style.fill\n ctx.globalAlpha = edge.style.fillOpacity ?? 0.1\n ctx.fill(path)\n }\n\n ctx.restore()\n}\n","import type { ParticlePool } from \"../ParticlePool\"\nimport type { RealtimeEdge, ParticleStyle } from \"../networkTypes\"\nimport { DEFAULT_PARTICLE_STYLE } from \"../networkTypes\"\n\n/**\n * Canvas particle renderer for sankey — ported directly from realtime-network.\n * Called each rAF frame.\n */\nexport function renderNetworkParticles(\n ctx: CanvasRenderingContext2D,\n pool: ParticlePool,\n edges: RealtimeEdge[],\n style: ParticleStyle,\n edgeColorFn: (edge: RealtimeEdge) => string\n): void {\n const radius = style.radius ?? DEFAULT_PARTICLE_STYLE.radius\n const opacity = style.opacity ?? DEFAULT_PARTICLE_STYLE.opacity\n\n ctx.globalAlpha = opacity\n\n for (let i = 0; i < pool.particles.length; i++) {\n const p = pool.particles[i]\n if (!p.active) continue\n\n const edge = edges[p.edgeIndex]\n if (!edge) continue\n\n // Resolve color\n if (typeof style.color === \"function\") {\n const sourceNode = typeof edge.source === \"object\" ? edge.source : null\n ctx.fillStyle = sourceNode ? (style.color as Function)(edge, sourceNode) : \"#666\"\n } else if (style.color && style.color !== \"inherit\") {\n ctx.fillStyle = style.color as string\n } else {\n ctx.fillStyle = edgeColorFn(edge)\n }\n\n ctx.beginPath()\n ctx.arc(p.x, p.y, radius, 0, Math.PI * 2)\n ctx.fill()\n }\n\n ctx.globalAlpha = 1\n}\n\n/**\n * Spawn particles for all edges proportional to their value.\n */\nexport function spawnNetworkParticles(\n pool: ParticlePool,\n edges: RealtimeEdge[],\n deltaTime: number,\n style: ParticleStyle\n): void {\n const spawnRate = style.spawnRate ?? DEFAULT_PARTICLE_STYLE.spawnRate\n const maxPerEdge = style.maxPerEdge ?? DEFAULT_PARTICLE_STYLE.maxPerEdge\n\n for (let i = 0; i < edges.length; i++) {\n const edge = edges[i]\n if (!edge.bezier) continue\n\n const currentCount = pool.countForEdge(i)\n if (currentCount >= maxPerEdge) continue\n\n const rate = edge.value * spawnRate * deltaTime\n const whole = Math.floor(rate)\n const frac = rate - whole\n\n let toSpawn = whole\n if (Math.random() < frac) toSpawn++\n\n for (let j = 0; j < toSpawn; j++) {\n if (pool.countForEdge(i) >= maxPerEdge) break\n pool.spawn(i)\n }\n }\n}\n","import { scaleOrdinal, scaleSequential } from \"d3-scale\"\nimport {\n schemeCategory10,\n schemeTableau10,\n schemeSet3,\n interpolateBlues,\n interpolateReds,\n interpolateGreens,\n interpolateOranges,\n interpolatePurples,\n interpolateViridis,\n interpolatePlasma\n} from \"d3-scale-chromatic\"\n\n/**\n * Predefined color schemes\n */\nexport const COLOR_SCHEMES = {\n // Categorical schemes\n category10: schemeCategory10,\n tableau10: schemeTableau10,\n set3: schemeSet3,\n\n // Sequential schemes (for continuous data)\n blues: interpolateBlues,\n reds: interpolateReds,\n greens: interpolateGreens,\n oranges: interpolateOranges,\n purples: interpolatePurples,\n viridis: interpolateViridis,\n plasma: interpolatePlasma\n}\n\n/**\n * Default colors for charts\n */\nexport const DEFAULT_COLORS = schemeCategory10\n\n/**\n * Gets a color for a data point based on the colorBy configuration\n *\n * @param dataPoint - The data point\n * @param colorBy - Field name or function to determine color\n * @param colorScale - Optional custom color scale\n * @returns Color string\n *\n * @example\n * ```ts\n * // Using a field name\n * getColor({category: 'A', value: 10}, 'category', colorScale)\n *\n * // Using a function\n * getColor({value: 10}, d => d.value > 5 ? 'red' : 'blue')\n * ```\n */\nexport function getColor(\n dataPoint: any,\n colorBy: string | ((d: any) => string),\n colorScale?: (v: any) => string\n): string {\n if (typeof colorBy === \"function\") {\n return colorBy(dataPoint)\n }\n\n const colorValue = dataPoint[colorBy]\n\n if (colorScale) {\n return colorScale(colorValue)\n }\n\n // Default: return a hash-based color\n return DEFAULT_COLORS[Math.abs(hashString(String(colorValue))) % DEFAULT_COLORS.length]\n}\n\n/**\n * Creates a color scale function from data\n *\n * @param data - Array of data points\n * @param colorBy - Field name to use for coloring\n * @param scheme - Color scheme name or custom palette\n * @returns Color scale function\n *\n * @example\n * ```ts\n * const colorScale = createColorScale(data, 'category')\n * const color = colorScale('A') // Returns color for category 'A'\n * ```\n */\nexport function createColorScale(\n data: Array<Record<string, any>>,\n colorBy: string,\n scheme: string | string[] = \"category10\"\n): (v: string) => string {\n // Get unique values\n const uniqueValues = Array.from(new Set(data.map(d => d[colorBy])))\n\n // Check if values are numeric for sequential scale\n const isNumeric = uniqueValues.every(v => typeof v === \"number\" || !isNaN(Number(v)))\n\n // Handle custom color array\n if (Array.isArray(scheme)) {\n return scaleOrdinal<any, string>()\n .domain(uniqueValues)\n .range(scheme)\n .unknown(\"#999\") as (v: any) => string\n }\n\n const colorScheme = COLOR_SCHEMES[scheme] || COLOR_SCHEMES.category10\n\n if (isNumeric && typeof colorScheme === \"function\") {\n // Use sequential scale for numeric data\n return (v: any) => colorScheme(Number(v) / Math.max(...uniqueValues.map(Number)))\n } else {\n // Use ordinal scale for categorical data\n const colors = Array.isArray(colorScheme) ? colorScheme : DEFAULT_COLORS\n return scaleOrdinal<any, string>()\n .domain(uniqueValues)\n .range(colors)\n .unknown(\"#999\") as (v: any) => string\n }\n}\n\n/**\n * Simple string hash function for deterministic color assignment\n */\nfunction hashString(str: string): number {\n let hash = 0\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash = hash & hash // Convert to 32bit integer\n }\n return Math.abs(hash)\n}\n\n/**\n * Generates a size function based on sizeBy configuration\n *\n * @param dataPoint - The data point\n * @param sizeBy - Field name or function to determine size\n * @param sizeRange - Min and max size range [min, max]\n * @param domain - Optional domain for scaling [minValue, maxValue]\n * @returns Size value\n */\nexport function getSize(\n dataPoint: any,\n sizeBy: string | ((d: any) => number),\n sizeRange: [number, number] = [3, 20],\n domain?: [number, number]\n): number {\n let value: number\n\n if (typeof sizeBy === \"function\") {\n value = sizeBy(dataPoint)\n } else {\n value = dataPoint[sizeBy]\n }\n\n if (!domain) {\n return value\n }\n\n // Scale value to size range\n const [minDomain, maxDomain] = domain\n const [minSize, maxSize] = sizeRange\n\n if (maxDomain === minDomain) {\n return (minSize + maxSize) / 2\n }\n\n const normalized = (value - minDomain) / (maxDomain - minDomain)\n return minSize + normalized * (maxSize - minSize)\n}\n","\"use client\"\nimport * as React from \"react\"\nimport {\n useRef,\n useState,\n useEffect,\n useMemo,\n useCallback,\n useImperativeHandle,\n forwardRef\n} from \"react\"\nimport type {\n StreamNetworkFrameProps,\n StreamNetworkFrameHandle,\n NetworkChartType,\n NetworkPipelineConfig,\n RealtimeNode,\n RealtimeEdge,\n EdgePush,\n ParticleStyle\n} from \"./networkTypes\"\nimport {\n DEFAULT_TENSION_CONFIG,\n DEFAULT_PARTICLE_STYLE\n} from \"./networkTypes\"\nimport { NetworkPipelineStore } from \"./NetworkPipelineStore\"\nimport {\n findNearestNetworkNode,\n type NetworkHitResult\n} from \"./NetworkCanvasHitTester\"\nimport { NetworkSVGOverlay } from \"./NetworkSVGOverlay\"\n\n// Canvas renderers\nimport { networkRectRenderer } from \"./renderers/networkRectRenderer\"\nimport { networkCircleRenderer } from \"./renderers/networkCircleRenderer\"\nimport { networkArcRenderer } from \"./renderers/networkArcRenderer\"\nimport { networkEdgeRenderer } from \"./renderers/networkEdgeRenderer\"\nimport {\n renderNetworkParticles,\n spawnNetworkParticles\n} from \"./renderers/networkParticleRenderer\"\nimport { DEFAULT_COLORS } from \"../charts/shared/colorUtils\"\n\n// ── Defaults ───────────────────────────────────────────────────────────\n\nconst DEFAULT_MARGIN = { top: 20, right: 80, bottom: 20, left: 80 }\nconst CENTERED_MARGIN = { top: 40, right: 40, bottom: 40, left: 40 }\nconst CENTERED_TYPES = new Set([\"chord\", \"force\", \"circlepack\"])\nconst DEFAULT_SIZE: [number, number] = [800, 600]\n\n// ── Tooltip ────────────────────────────────────────────────────────────\n\nconst defaultTooltipStyle: React.CSSProperties = {\n background: \"rgba(0, 0, 0, 0.85)\",\n color: \"white\",\n padding: \"6px 10px\",\n borderRadius: 4,\n fontSize: 12,\n lineHeight: 1.5,\n boxShadow: \"0 2px 8px rgba(0, 0, 0, 0.15)\",\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\"\n}\n\nfunction DefaultNetworkTooltip({\n data\n}: {\n data: { type: \"node\" | \"edge\"; data: any }\n}) {\n if (data.type === \"edge\") {\n const edge = data.data\n const sourceId =\n typeof edge.source === \"object\" ? edge.source.id : edge.source\n const targetId =\n typeof edge.target === \"object\" ? edge.target.id : edge.target\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: 600 }}>\n {sourceId} → {targetId}\n </div>\n {edge.value != null && (\n <div style={{ marginTop: 4, opacity: 0.8 }}>\n Value:{\" \"}\n {typeof edge.value === \"number\"\n ? edge.value.toLocaleString()\n : String(edge.value)}\n </div>\n )}\n </div>\n )\n }\n\n const node = data.data\n\n // Hierarchy nodes have a __hierarchyNode with a .parent chain.\n // Show ancestor breadcrumb: grandparent → parent → **node**\n const hNode = node?.__hierarchyNode\n if (hNode) {\n const ancestors: string[] = []\n let cur = hNode\n while (cur) {\n const name = cur.data?.name ?? cur.data?.id ?? node.id\n if (name != null) ancestors.unshift(String(name))\n cur = cur.parent\n }\n // Drop root (first entry) from the breadcrumb — it's usually unnamed\n if (ancestors.length > 1) ancestors.shift()\n\n const last = ancestors.length - 1\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div>\n {ancestors.map((name, i) => (\n <span key={i}>\n {i > 0 && (\n <span style={{ margin: \"0 3px\", opacity: 0.5 }}>{\" → \"}</span>\n )}\n {i === last ? (\n <strong>{name}</strong>\n ) : (\n <span style={{ opacity: 0.7 }}>{name}</span>\n )}\n </span>\n ))}\n </div>\n {node.value != null && node.value > 0 && (\n <div style={{ marginTop: 4, opacity: 0.8 }}>\n {typeof node.value === \"number\"\n ? node.value.toLocaleString()\n : String(node.value)}\n </div>\n )}\n </div>\n )\n }\n\n // Compute degree centrality from source/target links\n const degree = (node.sourceLinks?.length || 0) + (node.targetLinks?.length || 0)\n const weightedDegree = (node.sourceLinks || []).reduce((s: number, e: any) => s + (e.value || 0), 0)\n + (node.targetLinks || []).reduce((s: number, e: any) => s + (e.value || 0), 0)\n\n return (\n <div className=\"semiotic-tooltip\" style={defaultTooltipStyle}>\n <div style={{ fontWeight: 600 }}>{node.id}</div>\n {node.value != null && node.value > 0 && (\n <div style={{ marginTop: 4, opacity: 0.8 }}>\n Total:{\" \"}\n {typeof node.value === \"number\"\n ? node.value.toLocaleString()\n : String(node.value)}\n </div>\n )}\n {degree > 0 && (\n <div style={{ marginTop: 4, opacity: 0.8 }}>\n Connections: {degree}\n {weightedDegree !== degree && ` (weighted: ${weightedDegree.toLocaleString()})`}\n </div>\n )}\n </div>\n )\n}\n\n// ── StreamNetworkFrame ─────────────────────────────────────────────────\n\nconst StreamNetworkFrame = forwardRef<\n StreamNetworkFrameHandle,\n StreamNetworkFrameProps\n>(function StreamNetworkFrame(props, ref) {\n const {\n chartType,\n nodes: nodesProp,\n edges: edgesProp,\n data: dataProp,\n initialEdges,\n nodeIDAccessor = \"id\",\n sourceAccessor = \"source\",\n targetAccessor = \"target\",\n valueAccessor = \"value\",\n childrenAccessor,\n hierarchySum,\n orientation = \"horizontal\",\n nodeAlign = \"justify\",\n nodePaddingRatio = 0.05,\n nodeWidth = 15,\n iterations = 300,\n forceStrength = 0.1,\n padAngle = 0.01,\n groupWidth = 20,\n sortGroups,\n edgeSort,\n treeOrientation = \"vertical\",\n edgeType = \"curve\",\n padding,\n paddingTop,\n tensionConfig: tensionConfigProp,\n showParticles = false,\n particleStyle: particleStyleProp,\n nodeStyle,\n edgeStyle,\n colorBy,\n colorScheme = \"category10\",\n edgeColorBy = \"source\",\n edgeOpacity = 0.5,\n colorByDepth = false,\n nodeSize = 8,\n nodeSizeRange = [5, 20],\n nodeLabel,\n showLabels = true,\n size = DEFAULT_SIZE,\n margin: marginProp,\n className,\n background,\n enableHover = true,\n tooltipContent,\n onTopologyChange,\n annotations,\n svgAnnotationRules,\n legend,\n title,\n foregroundGraphics,\n backgroundGraphics\n } = props\n\n const baseMargin = CENTERED_TYPES.has(chartType) ? CENTERED_MARGIN : DEFAULT_MARGIN\n const margin = { ...baseMargin, ...marginProp }\n const adjustedWidth = size[0] - margin.left - margin.right\n const adjustedHeight = size[1] - margin.top - margin.bottom\n\n const tensionConfig = useMemo(\n () => ({ ...DEFAULT_TENSION_CONFIG, ...tensionConfigProp }),\n [tensionConfigProp]\n )\n\n const particleStyle = useMemo(\n () => ({ ...DEFAULT_PARTICLE_STYLE, ...particleStyleProp }),\n [particleStyleProp]\n )\n\n // ── Pipeline config ──────────────────────────────────────────────────\n\n const pipelineConfig = useMemo(\n (): NetworkPipelineConfig => ({\n chartType,\n nodeIDAccessor,\n sourceAccessor,\n targetAccessor,\n valueAccessor,\n childrenAccessor,\n hierarchySum,\n orientation,\n nodeAlign,\n nodePaddingRatio,\n nodeWidth,\n iterations,\n forceStrength,\n padAngle,\n groupWidth,\n sortGroups,\n edgeSort,\n treeOrientation,\n edgeType,\n padding,\n paddingTop,\n tensionConfig,\n showParticles,\n particleStyle,\n nodeStyle,\n edgeStyle,\n nodeLabel,\n showLabels,\n colorBy,\n colorScheme,\n edgeColorBy,\n edgeOpacity,\n colorByDepth,\n nodeSize,\n nodeSizeRange\n }),\n [\n chartType,\n nodeIDAccessor,\n sourceAccessor,\n targetAccessor,\n valueAccessor,\n childrenAccessor,\n hierarchySum,\n orientation,\n nodeAlign,\n nodePaddingRatio,\n nodeWidth,\n iterations,\n forceStrength,\n padAngle,\n groupWidth,\n sortGroups,\n edgeSort,\n treeOrientation,\n edgeType,\n padding,\n paddingTop,\n tensionConfig,\n showParticles,\n particleStyle,\n nodeStyle,\n edgeStyle,\n nodeLabel,\n showLabels,\n colorBy,\n colorScheme,\n edgeColorBy,\n edgeOpacity,\n colorByDepth,\n nodeSize,\n nodeSizeRange\n ]\n )\n\n // ── Refs ─────────────────────────────────────────────────────────────\n\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const rafRef = useRef(0)\n const lastFrameTimeRef = useRef(0)\n const dirtyRef = useRef(true)\n const renderFnRef = useRef<() => void>(() => {})\n\n // ── Store ────────────────────────────────────────────────────────────\n\n const storeRef = useRef<NetworkPipelineStore | null>(null)\n if (!storeRef.current) {\n storeRef.current = new NetworkPipelineStore(pipelineConfig)\n }\n\n // ── State ────────────────────────────────────────────────────────────\n\n const [hoverData, setHoverData] = useState<{\n type: \"node\" | \"edge\"\n data: any\n x: number\n y: number\n } | null>(null)\n const [layoutVersion, setLayoutVersion] = useState(0)\n const [annotationFrame, setAnnotationFrame] = useState(0)\n\n const hoverRef = useRef<typeof hoverData>(null)\n\n // ── Color functions ──────────────────────────────────────────────────\n\n const nodeColorMap = useRef(new Map<string, string>())\n const colorIndexRef = useRef(0)\n\n const getNodeColor = useCallback(\n (node: RealtimeNode): string => {\n if (typeof colorBy === \"function\") return colorBy(node)\n if (typeof colorBy === \"string\" && node.data) {\n const val = node.data[colorBy]\n if (val !== undefined) {\n if (!nodeColorMap.current.has(String(val))) {\n const colors = Array.isArray(colorScheme)\n ? colorScheme\n : DEFAULT_COLORS\n nodeColorMap.current.set(\n String(val),\n colors[colorIndexRef.current++ % colors.length]\n )\n }\n return nodeColorMap.current.get(String(val))!\n }\n }\n if (!nodeColorMap.current.has(node.id)) {\n const colors = Array.isArray(colorScheme)\n ? colorScheme\n : DEFAULT_COLORS\n nodeColorMap.current.set(\n node.id,\n colors[colorIndexRef.current++ % colors.length]\n )\n }\n return nodeColorMap.current.get(node.id)!\n },\n [colorBy, colorScheme]\n )\n\n const getEdgeColor = useCallback(\n (edge: RealtimeEdge): string => {\n if (typeof edgeColorBy === \"function\") return edgeColorBy(edge)\n const sourceNode =\n typeof edge.source === \"object\" ? edge.source : null\n const targetNode =\n typeof edge.target === \"object\" ? edge.target : null\n\n if (edgeColorBy === \"target\" && targetNode) {\n return getNodeColor(targetNode)\n }\n if (sourceNode) {\n return getNodeColor(sourceNode)\n }\n return \"#999\"\n },\n [edgeColorBy, getNodeColor]\n )\n\n const getParticleColor = useCallback(\n (edge: RealtimeEdge): string => {\n const colorByMode = particleStyle.colorBy || \"source\"\n const sourceNode = typeof edge.source === \"object\" ? edge.source : null\n const targetNode = typeof edge.target === \"object\" ? edge.target : null\n\n if (colorByMode === \"target\" && targetNode) {\n return getNodeColor(targetNode)\n }\n if (sourceNode) {\n return getNodeColor(sourceNode)\n }\n return \"#999\"\n },\n [particleStyle.colorBy, getNodeColor]\n )\n\n // ── Stable scheduleRender ────────────────────────────────────────────\n\n const isContinuous =\n chartType === \"sankey\" && showParticles\n\n const scheduleRender = useCallback(() => {\n if (rafRef.current && !isContinuous) return\n if (!rafRef.current) {\n rafRef.current = requestAnimationFrame(() => renderFnRef.current())\n }\n }, [isContinuous])\n\n // Update config when props change\n useEffect(() => {\n storeRef.current?.updateConfig(pipelineConfig)\n dirtyRef.current = true\n scheduleRender()\n }, [pipelineConfig, scheduleRender])\n\n // ── Layout execution ─────────────────────────────────────────────────\n\n const runLayout = useCallback(() => {\n const store = storeRef.current\n if (!store) return\n\n store.runLayout([adjustedWidth, adjustedHeight])\n store.buildScene([adjustedWidth, adjustedHeight])\n dirtyRef.current = true\n\n setLayoutVersion(store.layoutVersion)\n\n if (onTopologyChange) {\n const { nodes, edges } = store.getLayoutData()\n onTopologyChange(nodes, edges)\n }\n }, [adjustedWidth, adjustedHeight, onTopologyChange])\n\n // ── Push API ─────────────────────────────────────────────────────────\n\n const pushEdge = useCallback(\n (edge: EdgePush) => {\n const store = storeRef.current\n if (!store) return\n const needsRelayout = store.ingestEdge(edge)\n if (needsRelayout) {\n runLayout()\n }\n scheduleRender()\n },\n [runLayout, scheduleRender]\n )\n\n const pushManyEdges = useCallback(\n (edges: EdgePush[]) => {\n const store = storeRef.current\n if (!store) return\n let needsRelayout = false\n for (const edge of edges) {\n if (store.ingestEdge(edge)) {\n needsRelayout = true\n }\n }\n if (needsRelayout) {\n runLayout()\n }\n scheduleRender()\n },\n [runLayout, scheduleRender]\n )\n\n const clearAll = useCallback(() => {\n storeRef.current?.clear()\n nodeColorMap.current.clear()\n colorIndexRef.current = 0\n setLayoutVersion(0)\n setHoverData(null)\n hoverRef.current = null\n dirtyRef.current = true\n scheduleRender()\n }, [scheduleRender])\n\n const forceRelayout = useCallback(() => {\n const store = storeRef.current\n if (!store) return\n store.tension += 999\n runLayout()\n scheduleRender()\n }, [runLayout, scheduleRender])\n\n useImperativeHandle(\n ref,\n () => ({\n push: pushEdge,\n pushMany: pushManyEdges,\n clear: clearAll,\n getTopology: () =>\n storeRef.current?.getLayoutData() ?? { nodes: [], edges: [] },\n relayout: forceRelayout,\n getTension: () => storeRef.current?.tension ?? 0\n }),\n [pushEdge, pushManyEdges, clearAll, forceRelayout]\n )\n\n // ── Bounded data ingestion ───────────────────────────────────────────\n\n // Determine if this is a hierarchical chart type\n const isHierarchical = [\"tree\", \"cluster\", \"treemap\", \"circlepack\", \"partition\"].includes(chartType)\n // Resolve hierarchy root: `data` prop or single-object `edges` prop\n const hierarchyRoot = isHierarchical ? (dataProp || (!Array.isArray(edgesProp) ? edgesProp : undefined)) : undefined\n\n useEffect(() => {\n const store = storeRef.current\n if (!store) return\n\n if (isHierarchical && hierarchyRoot) {\n // Hierarchy data: single root object\n store.ingestHierarchy(hierarchyRoot, [adjustedWidth, adjustedHeight])\n store.buildScene([adjustedWidth, adjustedHeight])\n dirtyRef.current = true\n scheduleRender()\n } else {\n // Graph data: nodes + edges arrays\n const rawNodes = nodesProp || []\n const rawEdges = Array.isArray(edgesProp) ? edgesProp : []\n\n if (rawNodes.length === 0 && rawEdges.length === 0) return\n\n store.ingestBounded(rawNodes, rawEdges, [adjustedWidth, adjustedHeight])\n store.buildScene([adjustedWidth, adjustedHeight])\n dirtyRef.current = true\n scheduleRender()\n }\n }, [nodesProp, edgesProp, dataProp, hierarchyRoot, isHierarchical, adjustedWidth, adjustedHeight, pipelineConfig, scheduleRender])\n\n // ── Initial streaming data ───────────────────────────────────────────\n\n useEffect(() => {\n if (initialEdges && initialEdges.length > 0) {\n pushManyEdges(initialEdges)\n }\n // Only run on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n // ── Hover handlers ───────────────────────────────────────────────────\n\n const hoverHandlerRef = useRef<(e: React.MouseEvent) => void>(() => {})\n const hoverLeaveRef = useRef<() => void>(() => {})\n\n hoverHandlerRef.current = (e: React.MouseEvent) => {\n if (!enableHover) return\n\n const canvas = canvasRef.current\n if (!canvas) return\n const rect = canvas.getBoundingClientRect()\n\n const chartX = e.clientX - rect.left - margin.left\n const chartY = e.clientY - rect.top - margin.top\n\n if (\n chartX < 0 ||\n chartX > adjustedWidth ||\n chartY < 0 ||\n chartY > adjustedHeight\n ) {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverData(null)\n scheduleRender()\n }\n return\n }\n\n const store = storeRef.current\n if (!store) return\n\n const hit = findNearestNetworkNode(\n store.sceneNodes,\n store.sceneEdges,\n chartX,\n chartY\n )\n\n if (!hit) {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverData(null)\n scheduleRender()\n }\n return\n }\n\n const hover = {\n type: hit.type,\n data: hit.datum,\n x: hit.x,\n y: hit.y\n }\n\n hoverRef.current = hover\n setHoverData(hover)\n scheduleRender()\n }\n\n hoverLeaveRef.current = () => {\n if (hoverRef.current) {\n hoverRef.current = null\n setHoverData(null)\n scheduleRender()\n }\n }\n\n const onMouseMove = useCallback(\n (e: React.MouseEvent) => hoverHandlerRef.current(e),\n []\n )\n const onMouseLeave = useCallback(\n () => hoverLeaveRef.current(),\n []\n )\n\n // ── Render function ──────────────────────────────────────────────────\n\n renderFnRef.current = () => {\n rafRef.current = 0\n const canvas = canvasRef.current\n if (!canvas) return\n\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) return\n\n const store = storeRef.current\n if (!store) return\n\n const now = performance.now()\n const deltaTime = lastFrameTimeRef.current\n ? Math.min((now - lastFrameTimeRef.current) / 1000, 0.1)\n : 0.016\n lastFrameTimeRef.current = now\n\n // Advance transition animation\n const isTransitioning = store.advanceTransition(now)\n if (isTransitioning || dirtyRef.current) {\n // Rebuild scene for current positions\n store.buildScene([adjustedWidth, adjustedHeight])\n }\n\n // DPR setup\n const dpr =\n typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1\n canvas.width = size[0] * dpr\n canvas.height = size[1] * dpr\n canvas.style.width = `${size[0]}px`\n canvas.style.height = `${size[1]}px`\n ctx.scale(dpr, dpr)\n ctx.translate(margin.left, margin.top)\n ctx.clearRect(-margin.left, -margin.top, size[0], size[1])\n\n // Background\n if (background) {\n ctx.fillStyle = background\n ctx.fillRect(0, 0, adjustedWidth, adjustedHeight)\n }\n\n // Render edges first (they go behind nodes)\n networkEdgeRenderer(ctx, store.sceneEdges)\n\n // Render nodes\n networkRectRenderer(ctx, store.sceneNodes)\n networkCircleRenderer(ctx, store.sceneNodes)\n networkArcRenderer(ctx, store.sceneNodes)\n\n // Render particles (sankey only)\n if (showParticles && store.particlePool) {\n const edges = Array.from(store.edges.values())\n if (edges.length > 0) {\n spawnNetworkParticles(\n store.particlePool,\n edges,\n deltaTime,\n particleStyle\n )\n const speed = (particleStyle.speedMultiplier ?? 1) * 0.5\n store.particlePool.step(deltaTime, speed, edges)\n renderNetworkParticles(\n ctx,\n store.particlePool,\n edges,\n particleStyle,\n getParticleColor\n )\n }\n }\n\n const wasDirty = dirtyRef.current\n dirtyRef.current = false\n\n // Update SVG overlay when layout changes\n if (wasDirty || isTransitioning) {\n setAnnotationFrame((f) => f + 1)\n }\n\n // Schedule next frame for continuous rendering (particles/transitions)\n if (isContinuous || isTransitioning) {\n rafRef.current = requestAnimationFrame(() => renderFnRef.current())\n }\n }\n\n // ── Lifecycle ────────────────────────────────────────────────────────\n\n useEffect(() => {\n scheduleRender()\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }, [scheduleRender])\n\n useEffect(() => {\n dirtyRef.current = true\n scheduleRender()\n }, [chartType, adjustedWidth, adjustedHeight, background, scheduleRender])\n\n // ── Tooltip ──────────────────────────────────────────────────────────\n\n const tooltipElement =\n enableHover && hoverData ? (\n <div\n className=\"stream-network-tooltip\"\n style={{\n position: \"absolute\",\n left: margin.left + hoverData.x,\n top: margin.top + hoverData.y,\n transform: `translate(${\n hoverData.x > adjustedWidth * 0.6\n ? \"calc(-100% - 12px)\"\n : \"12px\"\n }, ${\n hoverData.y < adjustedHeight * 0.3\n ? \"4px\"\n : \"calc(-100% - 4px)\"\n })`,\n pointerEvents: \"none\",\n zIndex: 2\n }}\n >\n {tooltipContent ? (\n tooltipContent(hoverData)\n ) : (\n <DefaultNetworkTooltip data={hoverData} />\n )}\n </div>\n ) : null\n\n // ── Render ───────────────────────────────────────────────────────────\n\n const store = storeRef.current\n\n return (\n <div\n className={`stream-network-frame${className ? ` ${className}` : \"\"}`}\n style={{\n position: \"relative\",\n width: size[0],\n height: size[1]\n }}\n onMouseMove={enableHover ? onMouseMove : undefined}\n onMouseLeave={enableHover ? onMouseLeave : undefined}\n >\n {backgroundGraphics && (\n <svg\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: size[0],\n height: size[1],\n pointerEvents: \"none\"\n }}\n >\n <g transform={`translate(${margin.left},${margin.top})`}>\n {backgroundGraphics}\n </g>\n </svg>\n )}\n\n <canvas\n ref={canvasRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0\n }}\n />\n\n <NetworkSVGOverlay\n width={adjustedWidth}\n height={adjustedHeight}\n totalWidth={size[0]}\n totalHeight={size[1]}\n margin={margin}\n labels={store?.labels || []}\n title={title}\n legend={legend}\n foregroundGraphics={foregroundGraphics}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n annotationFrame={annotationFrame}\n />\n\n {tooltipElement}\n </div>\n )\n})\n\nStreamNetworkFrame.displayName = \"StreamNetworkFrame\"\nexport default StreamNetworkFrame\n","\"use client\"\n\n/**\n * Selection integration utilities for HOC charts.\n *\n * Provides helpers to normalize linkedHover/linkedBrush props and\n * wrap style functions with selection-aware opacity.\n */\n\n// ── Normalized config types ────────────────────────────────────────────────\n\nexport interface NormalizedLinkedHover {\n name: string\n fields: string[]\n}\n\nexport interface NormalizedLinkedBrush {\n name: string\n xField?: string\n yField?: string\n}\n\n// ── Prop normalizers ───────────────────────────────────────────────────────\n\n/**\n * Normalize the linkedHover prop into a consistent config object.\n *\n * - `true` → { name: \"hover\", fields: [] }\n * - `\"mySelection\"` → { name: \"mySelection\", fields: [] }\n * - `{ name: \"hl\", fields: [\"category\"] }` → as-is\n */\nexport function normalizeLinkedHover(\n prop: boolean | string | { name?: string; fields: string[] } | undefined,\n fallbackFields?: string[]\n): NormalizedLinkedHover | null {\n if (!prop) return null\n if (prop === true) {\n return { name: \"hover\", fields: fallbackFields || [] }\n }\n if (typeof prop === \"string\") {\n return { name: prop, fields: fallbackFields || [] }\n }\n return { name: prop.name || \"hover\", fields: prop.fields }\n}\n\n/**\n * Normalize the linkedBrush prop into a consistent config object.\n *\n * - `\"timeRange\"` → { name: \"timeRange\" }\n * - `{ name: \"dash\", xField: \"age\", yField: \"income\" }` → as-is\n */\nexport function normalizeLinkedBrush(\n prop: string | { name: string; xField?: string; yField?: string } | undefined\n): NormalizedLinkedBrush | null {\n if (!prop) return null\n if (typeof prop === \"string\") {\n return { name: prop }\n }\n return prop\n}\n\n// ── Style wrapper ──────────────────────────────────────────────────────────\n\nexport interface SelectionHookResult {\n isActive: boolean\n predicate: (datum: Record<string, any>) => boolean\n}\n\nexport interface SelectionStyleConfig {\n unselectedOpacity?: number\n unselectedStyle?: Record<string, any>\n selectedStyle?: Record<string, any>\n}\n\n/**\n * Wrap a base style function with selection awareness.\n * When a selection is active, non-matching datums get dimmed.\n */\nexport function wrapStyleWithSelection(\n baseStyleFn: (d: Record<string, any>) => Record<string, any>,\n selectionHook: SelectionHookResult | null,\n config?: SelectionStyleConfig\n): (d: Record<string, any>) => Record<string, any> {\n if (!selectionHook) return baseStyleFn\n\n return (d: Record<string, any>) => {\n const style = { ...baseStyleFn(d) }\n\n if (selectionHook.isActive) {\n if (selectionHook.predicate(d)) {\n // Selected: apply selectedStyle overrides if any\n if (config?.selectedStyle) {\n Object.assign(style, config.selectedStyle)\n }\n } else {\n // Unselected: dim the element\n style.fillOpacity = config?.unselectedOpacity ?? 0.2\n style.strokeOpacity = config?.unselectedOpacity ?? 0.2\n if (config?.unselectedStyle) {\n Object.assign(style, config.unselectedStyle)\n }\n }\n }\n\n return style\n }\n}\n","\"use client\"\nimport * as React from \"react\"\nimport {\n createContext,\n useContext,\n useMemo,\n useState,\n useLayoutEffect\n} from \"react\"\n\nfunction useSyncExternalStoreShim<T>(\n subscribe: (cb: Function) => () => void,\n getSnapshot: () => T\n): T {\n const [value, setValue] = useState<T>(getSnapshot)\n useLayoutEffect(() => {\n return subscribe(() => setValue(getSnapshot))\n }, [subscribe])\n return value\n}\n\nexport function createStore(fn) {\n let Ctx = createContext(null)\n // Shared fallback source for when there's no provider in the tree.\n // This allows hooks to be called unconditionally (rules of hooks)\n // without crashing. The fallback state is inert (empty selections, etc.).\n let fallbackSource = createSource(fn)\n\n function Provider({ children }) {\n let source = useMemo(() => createSource(fn), [])\n\n return <Ctx.Provider value={source} children={children} />\n }\n\n let useSelector = (selector) => {\n let source = useContext(Ctx) ?? fallbackSource\n let getSnapshot = () => selector(source.getState())\n return useSyncExternalStoreShim(source.subscribe, getSnapshot)\n }\n\n return [Provider, useSelector]\n}\n\nfunction createSource(fn) {\n let events = new EventTarget()\n let state = fn(set)\n\n function set(fn) {\n state = Object.assign(state, fn(state))\n events.dispatchEvent(new CustomEvent(\"update\"))\n }\n\n function subscribe(cb) {\n events.addEventListener(\"update\", cb)\n return () => events.removeEventListener(\"update\", cb)\n }\n\n return {\n getState() {\n return state\n },\n subscribe\n }\n}\n","\"use client\"\nimport { createStore } from \"./createStore\"\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport type ResolutionMode = \"union\" | \"intersect\" | \"crossfilter\"\n\nexport interface FieldConstraint {\n type: \"point\"\n values: Set<any>\n}\n\nexport interface IntervalConstraint {\n type: \"interval\"\n range: [number, number]\n}\n\nexport type FieldSelection = FieldConstraint | IntervalConstraint\n\nexport interface SelectionClause {\n clientId: string\n type: \"point\" | \"interval\"\n fields: Record<string, FieldSelection>\n}\n\nexport interface Selection {\n name: string\n resolution: ResolutionMode\n clauses: Map<string, SelectionClause> // keyed by clientId\n}\n\nexport interface SelectionStoreState {\n selections: Map<string, Selection>\n setClause: (selectionName: string, clause: SelectionClause) => void\n clearClause: (selectionName: string, clientId: string) => void\n setResolution: (selectionName: string, mode: ResolutionMode) => void\n clearSelection: (selectionName: string) => void\n}\n\n// ── Predicate builders ─────────────────────────────────────────────────────\n\nfunction buildClausePredicate(clause: SelectionClause): (d: Record<string, any>) => boolean {\n const fieldTests: Array<(d: Record<string, any>) => boolean> = []\n\n for (const [field, constraint] of Object.entries(clause.fields)) {\n if (constraint.type === \"point\") {\n fieldTests.push((d) => constraint.values.has(d[field]))\n } else {\n const [lo, hi] = constraint.range\n fieldTests.push((d) => {\n const v = d[field]\n return v >= lo && v <= hi\n })\n }\n }\n\n // All fields in a clause must match (AND within clause)\n return (d) => fieldTests.every((fn) => fn(d))\n}\n\nexport function buildPredicate(\n selection: Selection,\n requestingClientId?: string\n): (d: Record<string, any>) => boolean {\n const clausePredicates: Array<(d: Record<string, any>) => boolean> = []\n\n for (const [clientId, clause] of selection.clauses) {\n // In crossfilter mode, exclude the requesting client's own clause\n if (selection.resolution === \"crossfilter\" && clientId === requestingClientId) continue\n clausePredicates.push(buildClausePredicate(clause))\n }\n\n if (clausePredicates.length === 0) return () => true\n\n return selection.resolution === \"intersect\"\n ? (d) => clausePredicates.every((fn) => fn(d))\n : (d) => clausePredicates.some((fn) => fn(d))\n}\n\n// ── Store factory ──────────────────────────────────────────────────────────\n\nfunction ensureSelection(\n selections: Map<string, Selection>,\n name: string\n): Selection {\n let sel = selections.get(name)\n if (!sel) {\n sel = { name, resolution: \"union\", clauses: new Map() }\n selections.set(name, sel)\n }\n return sel\n}\n\nexport const [SelectionProvider, useSelectionSelector] = createStore(\n (set: Function) => ({\n selections: new Map<string, Selection>(),\n\n setClause(selectionName: string, clause: SelectionClause) {\n set((current: SelectionStoreState) => {\n const selections = new Map(current.selections)\n const sel = ensureSelection(selections, selectionName)\n const clauses = new Map(sel.clauses)\n clauses.set(clause.clientId, clause)\n selections.set(selectionName, { ...sel, clauses })\n return { selections }\n })\n },\n\n clearClause(selectionName: string, clientId: string) {\n set((current: SelectionStoreState) => {\n const existing = current.selections.get(selectionName)\n if (!existing) return {}\n const selections = new Map(current.selections)\n const clauses = new Map(existing.clauses)\n clauses.delete(clientId)\n selections.set(selectionName, { ...existing, clauses })\n return { selections }\n })\n },\n\n setResolution(selectionName: string, mode: ResolutionMode) {\n set((current: SelectionStoreState) => {\n const selections = new Map(current.selections)\n const sel = ensureSelection(selections, selectionName)\n selections.set(selectionName, { ...sel, resolution: mode })\n return { selections }\n })\n },\n\n clearSelection(selectionName: string) {\n set((current: SelectionStoreState) => {\n const selections = new Map(current.selections)\n const sel = selections.get(selectionName)\n if (sel) {\n selections.set(selectionName, { ...sel, clauses: new Map() })\n }\n return { selections }\n })\n }\n })\n)\n","\"use client\"\nimport { useId, useMemo, useCallback } from \"react\"\nimport {\n useSelectionSelector,\n buildPredicate,\n type SelectionClause,\n type FieldSelection\n} from \"./SelectionStore\"\n\n// ── useSelection ───────────────────────────────────────────────────────────\n\nexport interface UseSelectionOptions {\n /** Name of the selection to participate in */\n name: string\n /** Unique client ID. Defaults to React.useId() */\n clientId?: string\n /** Fields this client cares about (for predicate context) */\n fields?: string[]\n}\n\nexport interface UseSelectionResult {\n /** Returns true if the datum matches the current selection */\n predicate: (datum: Record<string, any>) => boolean\n /** Whether any selection clause is currently active */\n isActive: boolean\n /** Set a point selection (categorical values) */\n selectPoints: (fieldValues: Record<string, any[]>) => void\n /** Set an interval selection (numeric ranges) */\n selectInterval: (fieldRanges: Record<string, [number, number]>) => void\n /** Clear this client's clause */\n clear: () => void\n /** This client's ID */\n clientId: string\n}\n\nexport function useSelection(options: UseSelectionOptions): UseSelectionResult {\n const autoId = useId()\n const clientId = options.clientId || autoId\n const { name } = options\n\n const selection = useSelectionSelector(\n (state: any) => state.selections.get(name)\n )\n\n const setClause = useSelectionSelector((state: any) => state.setClause)\n const clearClauseFn = useSelectionSelector((state: any) => state.clearClause)\n\n const isActive = useMemo(() => {\n if (!selection) return false\n return selection.clauses.size > 0\n }, [selection])\n\n const predicate = useMemo(() => {\n if (!selection || selection.clauses.size === 0) return () => true\n return buildPredicate(selection, clientId)\n }, [selection, clientId])\n\n const selectPoints = useCallback(\n (fieldValues: Record<string, any[]>) => {\n const fields: Record<string, FieldSelection> = {}\n for (const [field, values] of Object.entries(fieldValues)) {\n fields[field] = { type: \"point\", values: new Set(values) }\n }\n const clause: SelectionClause = {\n clientId,\n type: \"point\",\n fields\n }\n setClause(name, clause)\n },\n [clientId, name, setClause]\n )\n\n const selectInterval = useCallback(\n (fieldRanges: Record<string, [number, number]>) => {\n const fields: Record<string, FieldSelection> = {}\n for (const [field, range] of Object.entries(fieldRanges)) {\n fields[field] = { type: \"interval\", range }\n }\n const clause: SelectionClause = {\n clientId,\n type: \"interval\",\n fields\n }\n setClause(name, clause)\n },\n [clientId, name, setClause]\n )\n\n const clear = useCallback(() => {\n clearClauseFn(name, clientId)\n }, [clearClauseFn, name, clientId])\n\n return { predicate, isActive, selectPoints, selectInterval, clear, clientId }\n}\n\n// ── useLinkedHover ─────────────────────────────────────────────────────────\n\nexport interface UseLinkedHoverOptions {\n /** Selection name. Defaults to \"hover\" */\n name?: string\n /** Fields to include in the hover selection */\n fields: string[]\n}\n\nexport interface UseLinkedHoverResult {\n /** Call with a datum to set hover, or null to clear */\n onHover: (datum: Record<string, any> | null) => void\n /** Returns true if datum matches the hover selection */\n predicate: (datum: Record<string, any>) => boolean\n /** Whether any hover is active */\n isActive: boolean\n}\n\nexport function useLinkedHover(options: UseLinkedHoverOptions): UseLinkedHoverResult {\n const selName = options.name || \"hover\"\n const { fields } = options\n\n const { predicate, isActive, selectPoints, clear, clientId } = useSelection({\n name: selName,\n fields\n })\n\n const onHover = useCallback(\n (datum: Record<string, any> | null) => {\n if (!datum) {\n clear()\n return\n }\n const fieldValues: Record<string, any[]> = {}\n for (const field of fields) {\n const val = datum[field]\n if (val !== undefined) {\n fieldValues[field] = [val]\n }\n }\n if (Object.keys(fieldValues).length > 0) {\n selectPoints(fieldValues)\n }\n },\n [fields, selectPoints, clear]\n )\n\n return { onHover, predicate, isActive }\n}\n\n// ── useBrushSelection ──────────────────────────────────────────────────────\n\nexport interface UseBrushSelectionOptions {\n /** Selection name */\n name: string\n /** Field mapped to the x-axis brush extent */\n xField?: string\n /** Field mapped to the y-axis brush extent */\n yField?: string\n}\n\nexport interface UseBrushSelectionResult {\n /** Interaction config to pass to frameProps.interaction */\n brushInteraction: {\n brush: \"xyBrush\" | \"xBrush\" | \"yBrush\"\n during: (extent: any) => void\n end: (extent: any) => void\n }\n /** Returns true if datum matches the brush selection */\n predicate: (datum: Record<string, any>) => boolean\n /** Whether any brush is active */\n isActive: boolean\n /** Clear the brush */\n clear: () => void\n}\n\nexport function useBrushSelection(options: UseBrushSelectionOptions): UseBrushSelectionResult {\n const { name, xField, yField } = options\n\n const { predicate, isActive, selectInterval, clear, clientId } = useSelection({\n name,\n fields: [xField, yField].filter(Boolean) as string[]\n })\n\n const brushType = xField && yField ? \"xyBrush\" : xField ? \"xBrush\" : \"yBrush\"\n\n const handleBrush = useCallback(\n (extent: any) => {\n if (!extent) {\n clear()\n return\n }\n\n const fieldRanges: Record<string, [number, number]> = {}\n\n if (brushType === \"xyBrush\" && Array.isArray(extent) && extent.length === 2) {\n // extent = [[x0, y0], [x1, y1]]\n if (xField) fieldRanges[xField] = [Math.min(extent[0][0], extent[1][0]), Math.max(extent[0][0], extent[1][0])]\n if (yField) fieldRanges[yField] = [Math.min(extent[0][1], extent[1][1]), Math.max(extent[0][1], extent[1][1])]\n } else if (brushType === \"xBrush\" && Array.isArray(extent)) {\n if (xField) fieldRanges[xField] = [Math.min(...extent), Math.max(...extent)]\n } else if (brushType === \"yBrush\" && Array.isArray(extent)) {\n if (yField) fieldRanges[yField] = [Math.min(...extent), Math.max(...extent)]\n }\n\n if (Object.keys(fieldRanges).length > 0) {\n selectInterval(fieldRanges)\n }\n },\n [brushType, xField, yField, selectInterval, clear]\n )\n\n const brushInteraction = useMemo(\n () => ({\n brush: brushType as \"xyBrush\" | \"xBrush\" | \"yBrush\",\n during: handleBrush,\n end: handleBrush\n }),\n [brushType, handleBrush]\n )\n\n return { brushInteraction, predicate, isActive, clear }\n}\n\n// ── useFilteredData ────────────────────────────────────────────────────────\n\n/**\n * Returns the subset of `data` that matches the given selection.\n * In crossfilter mode, pass the consumer's clientId so its own clause is excluded.\n */\nexport function useFilteredData<T extends Record<string, any>>(\n data: T[],\n selectionName: string,\n clientId?: string\n): T[] {\n const selection = useSelectionSelector(\n (state: any) => state.selections.get(selectionName)\n )\n\n return useMemo(() => {\n if (!selection || selection.clauses.size === 0) return data\n const pred = buildPredicate(selection, clientId)\n return data.filter(pred)\n }, [data, selection, clientId])\n}\n","import * as React from \"react\"\nimport { useRef, useEffect, useImperativeHandle, forwardRef, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type {\n ArrowOfTime,\n WindowMode,\n LineStyle,\n HoverAnnotationConfig,\n HoverData,\n AnnotationContext,\n StreamXYFrameHandle,\n DecayConfig,\n PulseConfig,\n StalenessConfig,\n TransitionConfig\n} from \"../../stream/types\"\nimport type { RealtimeFrameHandle } from \"../../realtime/types\"\nimport type { ReactNode } from \"react\"\nimport { normalizeLinkedHover } from \"../shared/selectionUtils\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface RealtimeLineChartProps {\n /** Chart dimensions as [width, height] */\n size?: [number, number]\n /** Chart width (alternative to size) */\n width?: number\n /** Chart height (alternative to size) */\n height?: number\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** CSS class name */\n className?: string\n /** Direction time flows */\n arrowOfTime?: ArrowOfTime\n /** Data retention strategy */\n windowMode?: WindowMode\n /** Ring buffer capacity */\n windowSize?: number\n /** Controlled data array */\n data?: Record<string, any>[]\n /** Time value accessor */\n timeAccessor?: string | ((d: Record<string, any>) => number)\n /** Value accessor */\n valueAccessor?: string | ((d: Record<string, any>) => number)\n /** Fixed time domain */\n timeExtent?: [number, number]\n /** Fixed value domain */\n valueExtent?: [number, number]\n /** Extent padding factor */\n extentPadding?: number\n /** Line color */\n stroke?: string\n /** Line width */\n strokeWidth?: number\n /** Dash pattern (e.g. \"4,2\") */\n strokeDasharray?: string\n /** Show canvas-drawn axes */\n showAxes?: boolean\n /** Background fill color */\n background?: string\n /** Enable hover interaction */\n enableHover?: boolean | HoverAnnotationConfig\n /** Custom tooltip renderer */\n tooltipContent?: (d: HoverData) => ReactNode\n /** Callback on hover */\n onHover?: (d: HoverData | null) => void\n /** Annotation objects */\n annotations?: Record<string, any>[]\n /** SVG annotation render function */\n svgAnnotationRules?: (annotation: Record<string, any>, index: number, context: AnnotationContext) => ReactNode\n /** Custom formatter for time axis ticks */\n tickFormatTime?: (value: number) => string\n /** Custom formatter for value axis ticks */\n tickFormatValue?: (value: number) => string\n /** Custom tooltip renderer (alias for tooltipContent) */\n tooltip?: (d: HoverData) => ReactNode\n /** Configurable opacity decay for older data */\n decay?: DecayConfig\n /** Flash effect on newly inserted data */\n pulse?: PulseConfig\n /** Frame-level data liveness indicator */\n staleness?: StalenessConfig\n /** Smooth position interpolation on data change */\n transition?: TransitionConfig\n /** Enable linked hover selection events for cross-chart highlighting */\n linkedHover?: boolean | string | { name?: string; fields: string[] }\n}\n\n/**\n * RealtimeLineChart - Simplified wrapper for streaming line charts.\n *\n * Wraps StreamXYFrame with `chartType=\"line\"` and `runtimeMode=\"streaming\"`,\n * exposing stroke/strokeWidth as top-level props instead of requiring a `lineStyle` object.\n *\n * @example\n * ```tsx\n * const ref = useRef<RealtimeFrameHandle>(null)\n *\n * <RealtimeLineChart\n * ref={ref}\n * stroke=\"#007bff\"\n * strokeWidth={2}\n * windowSize={200}\n * enableHover\n * />\n * ```\n */\nexport const RealtimeLineChart = forwardRef<RealtimeFrameHandle, RealtimeLineChartProps>(\n function RealtimeLineChart(props, ref) {\n const {\n size,\n width,\n height,\n margin,\n className,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n timeExtent,\n valueExtent,\n extentPadding,\n stroke = \"#007bff\",\n strokeWidth = 2,\n strokeDasharray,\n showAxes = true,\n background,\n enableHover,\n tooltipContent,\n tooltip,\n onHover,\n annotations,\n svgAnnotationRules,\n tickFormatTime,\n tickFormatValue,\n decay,\n pulse,\n staleness,\n transition,\n linkedHover\n } = props\n\n const resolvedSize: [number, number] = width != null && height != null\n ? [width, height]\n : size || [500, 300]\n const resolvedTooltip = tooltipContent ?? tooltip\n\n const frameRef = useRef<StreamXYFrameHandle>(null)\n\n // ── Linked hover hooks (always called, conditional logic inside) ──\n const hoverConfig = normalizeLinkedHover(linkedHover)\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n const combinedHoverBehavior = useCallback(\n (d: HoverData | null) => {\n if (onHover) onHover(d)\n if (linkedHover) {\n linkedHoverHook.onHover(d ? (d.data || d) : null)\n }\n },\n [onHover, linkedHover, linkedHoverHook]\n )\n\n useImperativeHandle(ref, () => ({\n push: (point) => frameRef.current?.push(point),\n pushMany: (points) => frameRef.current?.pushMany(points),\n clear: () => frameRef.current?.clear(),\n getData: () => frameRef.current?.getData() ?? []\n }))\n\n const lineStyle: LineStyle = { stroke, strokeWidth, strokeDasharray }\n\n return (\n <StreamXYFrame\n ref={frameRef}\n chartType=\"line\"\n runtimeMode=\"streaming\"\n size={resolvedSize}\n margin={margin}\n className={className}\n arrowOfTime={arrowOfTime}\n windowMode={windowMode}\n windowSize={windowSize}\n data={data}\n timeAccessor={timeAccessor}\n valueAccessor={valueAccessor}\n xExtent={timeExtent}\n yExtent={valueExtent}\n extentPadding={extentPadding}\n lineStyle={lineStyle}\n showAxes={showAxes}\n background={background}\n hoverAnnotation={enableHover}\n tooltipContent={resolvedTooltip}\n customHoverBehavior={combinedHoverBehavior}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n tickFormatTime={tickFormatTime}\n tickFormatValue={tickFormatValue}\n decay={decay}\n pulse={pulse}\n staleness={staleness}\n transition={transition}\n />\n )\n }\n)\nRealtimeLineChart.displayName = \"RealtimeLineChart\"\n","import * as React from \"react\"\nimport { useRef, useImperativeHandle, forwardRef, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type {\n ArrowOfTime,\n WindowMode,\n BarStyle,\n HoverAnnotationConfig,\n HoverData,\n AnnotationContext,\n StreamXYFrameHandle\n} from \"../../stream/types\"\nimport type { RealtimeFrameHandle } from \"../../realtime/types\"\nimport type { ReactNode } from \"react\"\nimport { normalizeLinkedHover } from \"../shared/selectionUtils\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface RealtimeTemporalHistogramProps {\n /** Time interval for binning */\n binSize: number\n /** Chart dimensions as [width, height] */\n size?: [number, number]\n /** Chart width (alternative to size) */\n width?: number\n /** Chart height (alternative to size) */\n height?: number\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** CSS class name */\n className?: string\n /** Direction time flows */\n arrowOfTime?: ArrowOfTime\n /** Data retention strategy */\n windowMode?: WindowMode\n /** Ring buffer capacity */\n windowSize?: number\n /** Controlled data array */\n data?: Record<string, any>[]\n /** Time value accessor */\n timeAccessor?: string | ((d: Record<string, any>) => number)\n /** Value accessor */\n valueAccessor?: string | ((d: Record<string, any>) => number)\n /** Fixed time domain */\n timeExtent?: [number, number]\n /** Fixed value domain */\n valueExtent?: [number, number]\n /** Extent padding factor */\n extentPadding?: number\n /**\n * Category accessor for stacked bars.\n * When provided, bars are stacked by category within each bin.\n */\n categoryAccessor?: string | ((d: Record<string, any>) => string)\n /**\n * Category-to-color map for stacked bars.\n * Keys also determine stack order (listed keys first, then alphabetical).\n */\n colors?: Record<string, string>\n /** Bar fill color (non-stacked mode) */\n fill?: string\n /** Bar stroke color */\n stroke?: string\n /** Bar stroke width */\n strokeWidth?: number\n /** Gap between bars in pixels */\n gap?: number\n /** Show canvas-drawn axes */\n showAxes?: boolean\n /** Background fill color */\n background?: string\n /** Enable hover interaction */\n enableHover?: boolean | HoverAnnotationConfig\n /** Custom tooltip renderer */\n tooltipContent?: (d: HoverData) => ReactNode\n /** Callback on hover */\n onHover?: (d: HoverData | null) => void\n /** Annotation objects */\n annotations?: Record<string, any>[]\n /** SVG annotation render function */\n svgAnnotationRules?: (annotation: Record<string, any>, index: number, context: AnnotationContext) => ReactNode\n /** Custom formatter for time axis ticks */\n tickFormatTime?: (value: number) => string\n /** Custom formatter for value axis ticks */\n tickFormatValue?: (value: number) => string\n /** Custom tooltip renderer (alias for tooltipContent) */\n tooltip?: (d: HoverData) => ReactNode\n /** Enable linked hover selection events for cross-chart highlighting */\n linkedHover?: boolean | string | { name?: string; fields: string[] }\n}\n\n/**\n * RealtimeTemporalHistogram - Streaming temporal histogram.\n *\n * Wraps StreamXYFrame with `chartType=\"bar\"` and `runtimeMode=\"streaming\"`,\n * binning pushed data points into time-windowed bars. Supports both simple\n * and stacked (categorical) modes.\n *\n * Edge bins that only partially fall within the visible time window are\n * rendered at proportionally narrower widths (Datadog-style).\n *\n * @example\n * ```tsx\n * // Simple histogram\n * <RealtimeTemporalHistogram\n * ref={ref}\n * binSize={20}\n * fill=\"#007bff\"\n * enableHover\n * />\n *\n * // Stacked by category\n * <RealtimeTemporalHistogram\n * ref={ref}\n * binSize={25}\n * categoryAccessor=\"category\"\n * colors={{ errors: \"#dc3545\", warnings: \"#fd7e14\", info: \"#007bff\" }}\n * enableHover\n * />\n * ```\n */\nexport const RealtimeTemporalHistogram = forwardRef<RealtimeFrameHandle, RealtimeTemporalHistogramProps>(\n function RealtimeTemporalHistogram(props, ref) {\n const {\n binSize,\n size,\n width,\n height,\n margin,\n className,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n timeExtent,\n valueExtent,\n extentPadding,\n categoryAccessor,\n colors,\n fill,\n stroke,\n strokeWidth,\n gap,\n showAxes = true,\n background,\n enableHover,\n tooltipContent,\n tooltip,\n onHover,\n annotations,\n svgAnnotationRules,\n tickFormatTime,\n tickFormatValue,\n linkedHover\n } = props\n\n const resolvedSize: [number, number] = width != null && height != null\n ? [width, height]\n : size || [500, 300]\n const resolvedTooltip = tooltipContent ?? tooltip\n\n const frameRef = useRef<StreamXYFrameHandle>(null)\n\n // ── Linked hover hooks (always called, conditional logic inside) ──\n const hoverConfig = normalizeLinkedHover(linkedHover)\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n const combinedHoverBehavior = useCallback(\n (d: HoverData | null) => {\n if (onHover) onHover(d)\n if (linkedHover) {\n linkedHoverHook.onHover(d ? (d.data || d) : null)\n }\n },\n [onHover, linkedHover, linkedHoverHook]\n )\n\n useImperativeHandle(ref, () => ({\n push: (point) => frameRef.current?.push(point),\n pushMany: (points) => frameRef.current?.pushMany(points),\n clear: () => frameRef.current?.clear(),\n getData: () => frameRef.current?.getData() ?? []\n }))\n\n const barStyle: BarStyle = {}\n if (fill != null) barStyle.fill = fill\n if (stroke != null) barStyle.stroke = stroke\n if (strokeWidth != null) barStyle.strokeWidth = strokeWidth\n if (gap != null) barStyle.gap = gap\n\n return (\n <StreamXYFrame\n ref={frameRef}\n chartType=\"bar\"\n runtimeMode=\"streaming\"\n size={resolvedSize}\n margin={margin}\n className={className}\n arrowOfTime={arrowOfTime}\n windowMode={windowMode}\n windowSize={windowSize}\n data={data}\n timeAccessor={timeAccessor}\n valueAccessor={valueAccessor}\n xExtent={timeExtent}\n yExtent={valueExtent}\n extentPadding={extentPadding}\n binSize={binSize}\n categoryAccessor={categoryAccessor}\n barColors={colors}\n barStyle={barStyle}\n showAxes={showAxes}\n background={background}\n hoverAnnotation={enableHover}\n tooltipContent={resolvedTooltip}\n customHoverBehavior={combinedHoverBehavior}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n tickFormatTime={tickFormatTime}\n tickFormatValue={tickFormatValue}\n />\n )\n }\n)\nRealtimeTemporalHistogram.displayName = \"RealtimeTemporalHistogram\"\n\n/** @deprecated Use RealtimeTemporalHistogram instead */\nexport const RealtimeHistogram = RealtimeTemporalHistogram\n/** @deprecated Use RealtimeTemporalHistogramProps instead */\nexport type RealtimeHistogramProps = RealtimeTemporalHistogramProps\n","import * as React from \"react\"\nimport { useRef, useImperativeHandle, forwardRef, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type {\n ArrowOfTime,\n WindowMode,\n SwarmStyle,\n HoverAnnotationConfig,\n HoverData,\n AnnotationContext,\n StreamXYFrameHandle\n} from \"../../stream/types\"\nimport type { RealtimeFrameHandle } from \"../../realtime/types\"\nimport type { ReactNode } from \"react\"\nimport { normalizeLinkedHover } from \"../shared/selectionUtils\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface RealtimeSwarmChartProps {\n /** Chart dimensions as [width, height] */\n size?: [number, number]\n /** Chart width (alternative to size) */\n width?: number\n /** Chart height (alternative to size) */\n height?: number\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** CSS class name */\n className?: string\n /** Direction time flows */\n arrowOfTime?: ArrowOfTime\n /** Data retention strategy */\n windowMode?: WindowMode\n /** Ring buffer capacity */\n windowSize?: number\n /** Controlled data array */\n data?: Record<string, any>[]\n /** Time value accessor */\n timeAccessor?: string | ((d: Record<string, any>) => number)\n /** Value accessor */\n valueAccessor?: string | ((d: Record<string, any>) => number)\n /** Fixed time domain */\n timeExtent?: [number, number]\n /** Fixed value domain */\n valueExtent?: [number, number]\n /** Extent padding factor */\n extentPadding?: number\n /** Category accessor for color-coding dots */\n categoryAccessor?: string | ((d: Record<string, any>) => string)\n /** Category-to-color map */\n colors?: Record<string, string>\n /** Dot radius */\n radius?: number\n /** Dot fill color (when no categoryAccessor) */\n fill?: string\n /** Dot opacity */\n opacity?: number\n /** Dot stroke color */\n stroke?: string\n /** Dot stroke width */\n strokeWidth?: number\n /** Show canvas-drawn axes */\n showAxes?: boolean\n /** Background fill color */\n background?: string\n /** Enable hover interaction */\n enableHover?: boolean | HoverAnnotationConfig\n /** Custom tooltip renderer */\n tooltipContent?: (d: HoverData) => ReactNode\n /** Callback on hover */\n onHover?: (d: HoverData | null) => void\n /** Annotation objects (including threshold coloring) */\n annotations?: Record<string, any>[]\n /** SVG annotation render function */\n svgAnnotationRules?: (annotation: Record<string, any>, index: number, context: AnnotationContext) => ReactNode\n /** Custom formatter for time axis ticks */\n tickFormatTime?: (value: number) => string\n /** Custom formatter for value axis ticks */\n tickFormatValue?: (value: number) => string\n /** Custom tooltip renderer (alias for tooltipContent) */\n tooltip?: (d: HoverData) => ReactNode\n /** Enable linked hover selection events for cross-chart highlighting */\n linkedHover?: boolean | string | { name?: string; fields: string[] }\n}\n\n/**\n * RealtimeSwarmChart - Simplified wrapper for streaming dot/swarm charts.\n *\n * Wraps StreamXYFrame with `chartType=\"swarm\"` and `runtimeMode=\"streaming\"`,\n * exposing dot styling as top-level props. Each data point renders as an individual\n * dot at its (time, value) coordinates.\n *\n * Supports threshold coloring via annotations to recolor dots that cross\n * value boundaries.\n *\n * @example\n * ```tsx\n * <RealtimeSwarmChart\n * ref={ref}\n * radius={4}\n * opacity={0.8}\n * categoryAccessor=\"sensor\"\n * colors={{ sensor1: \"#007bff\", sensor2: \"#28a745\" }}\n * />\n * ```\n */\nexport const RealtimeSwarmChart = forwardRef<RealtimeFrameHandle, RealtimeSwarmChartProps>(\n function RealtimeSwarmChart(props, ref) {\n const {\n size,\n width,\n height,\n margin,\n className,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n timeExtent,\n valueExtent,\n extentPadding,\n categoryAccessor,\n colors,\n radius,\n fill,\n opacity,\n stroke,\n strokeWidth,\n showAxes = true,\n background,\n enableHover,\n tooltipContent,\n tooltip,\n onHover,\n annotations,\n svgAnnotationRules,\n tickFormatTime,\n tickFormatValue,\n linkedHover\n } = props\n\n const resolvedSize: [number, number] = width != null && height != null\n ? [width, height]\n : size || [500, 300]\n const resolvedTooltip = tooltipContent ?? tooltip\n\n const frameRef = useRef<StreamXYFrameHandle>(null)\n\n // ── Linked hover hooks (always called, conditional logic inside) ──\n const hoverConfig = normalizeLinkedHover(linkedHover)\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n const combinedHoverBehavior = useCallback(\n (d: HoverData | null) => {\n if (onHover) onHover(d)\n if (linkedHover) {\n linkedHoverHook.onHover(d ? (d.data || d) : null)\n }\n },\n [onHover, linkedHover, linkedHoverHook]\n )\n\n useImperativeHandle(ref, () => ({\n push: (point) => frameRef.current?.push(point),\n pushMany: (points) => frameRef.current?.pushMany(points),\n clear: () => frameRef.current?.clear(),\n getData: () => frameRef.current?.getData() ?? []\n }))\n\n const swarmStyle: SwarmStyle = {}\n if (radius != null) swarmStyle.radius = radius\n if (fill != null) swarmStyle.fill = fill\n if (opacity != null) swarmStyle.opacity = opacity\n if (stroke != null) swarmStyle.stroke = stroke\n if (strokeWidth != null) swarmStyle.strokeWidth = strokeWidth\n\n return (\n <StreamXYFrame\n ref={frameRef}\n chartType=\"swarm\"\n runtimeMode=\"streaming\"\n size={resolvedSize}\n margin={margin}\n className={className}\n arrowOfTime={arrowOfTime}\n windowMode={windowMode}\n windowSize={windowSize}\n data={data}\n timeAccessor={timeAccessor}\n valueAccessor={valueAccessor}\n xExtent={timeExtent}\n yExtent={valueExtent}\n extentPadding={extentPadding}\n categoryAccessor={categoryAccessor}\n barColors={colors}\n swarmStyle={swarmStyle}\n showAxes={showAxes}\n background={background}\n hoverAnnotation={enableHover}\n tooltipContent={resolvedTooltip}\n customHoverBehavior={combinedHoverBehavior}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n tickFormatTime={tickFormatTime}\n tickFormatValue={tickFormatValue}\n />\n )\n }\n)\nRealtimeSwarmChart.displayName = \"RealtimeSwarmChart\"\n","import * as React from \"react\"\nimport { useRef, useImperativeHandle, forwardRef, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type {\n ArrowOfTime,\n WindowMode,\n WaterfallStyle,\n HoverAnnotationConfig,\n HoverData,\n AnnotationContext,\n StreamXYFrameHandle\n} from \"../../stream/types\"\nimport type { RealtimeFrameHandle } from \"../../realtime/types\"\nimport type { ReactNode } from \"react\"\nimport { normalizeLinkedHover } from \"../shared/selectionUtils\"\nimport { useLinkedHover } from \"../../store/useSelection\"\n\nexport interface RealtimeWaterfallChartProps {\n /** Chart dimensions as [width, height] */\n size?: [number, number]\n /** Chart width (alternative to size) */\n width?: number\n /** Chart height (alternative to size) */\n height?: number\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** CSS class name */\n className?: string\n /** Direction time flows */\n arrowOfTime?: ArrowOfTime\n /** Data retention strategy */\n windowMode?: WindowMode\n /** Ring buffer capacity */\n windowSize?: number\n /** Controlled data array */\n data?: Record<string, any>[]\n /** Time value accessor */\n timeAccessor?: string | ((d: Record<string, any>) => number)\n /** Value accessor (positive = gain, negative = loss) */\n valueAccessor?: string | ((d: Record<string, any>) => number)\n /** Fixed time domain */\n timeExtent?: [number, number]\n /** Fixed value domain */\n valueExtent?: [number, number]\n /** Extent padding factor */\n extentPadding?: number\n /** Color for positive (gain) bars */\n positiveColor?: string\n /** Color for negative (loss) bars */\n negativeColor?: string\n /** Connector line stroke color (omit to hide connectors) */\n connectorStroke?: string\n /** Connector line width */\n connectorWidth?: number\n /** Gap between bars in pixels */\n gap?: number\n /** Bar stroke color */\n stroke?: string\n /** Bar stroke width */\n strokeWidth?: number\n /** Show canvas-drawn axes */\n showAxes?: boolean\n /** Background fill color */\n background?: string\n /** Enable hover interaction */\n enableHover?: boolean | HoverAnnotationConfig\n /** Custom tooltip renderer */\n tooltipContent?: (d: HoverData) => ReactNode\n /** Callback on hover */\n onHover?: (d: HoverData | null) => void\n /** Annotation objects */\n annotations?: Record<string, any>[]\n /** SVG annotation render function */\n svgAnnotationRules?: (annotation: Record<string, any>, index: number, context: AnnotationContext) => ReactNode\n /** Custom formatter for time axis ticks */\n tickFormatTime?: (value: number) => string\n /** Custom formatter for value axis ticks */\n tickFormatValue?: (value: number) => string\n /** Custom tooltip renderer (alias for tooltipContent) */\n tooltip?: (d: HoverData) => ReactNode\n /** Enable linked hover selection events for cross-chart highlighting */\n linkedHover?: boolean | string | { name?: string; fields: string[] }\n}\n\n/**\n * RealtimeWaterfallChart - Simplified wrapper for streaming waterfall charts.\n *\n * Wraps StreamXYFrame with `chartType=\"waterfall\"` and `runtimeMode=\"streaming\"`,\n * exposing waterfall styling as top-level props. Visualizes cumulative deltas as\n * connected bars rising and falling from a running baseline.\n *\n * @example\n * ```tsx\n * <RealtimeWaterfallChart\n * ref={ref}\n * positiveColor=\"#28a745\"\n * negativeColor=\"#dc3545\"\n * connectorStroke=\"#999\"\n * windowSize={300}\n * />\n * ```\n */\nexport const RealtimeWaterfallChart = forwardRef<RealtimeFrameHandle, RealtimeWaterfallChartProps>(\n function RealtimeWaterfallChart(props, ref) {\n const {\n size,\n width,\n height,\n margin,\n className,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n timeExtent,\n valueExtent,\n extentPadding,\n positiveColor,\n negativeColor,\n connectorStroke,\n connectorWidth,\n gap,\n stroke,\n strokeWidth,\n showAxes = true,\n background,\n enableHover,\n tooltipContent,\n tooltip,\n onHover,\n annotations,\n svgAnnotationRules,\n tickFormatTime,\n tickFormatValue,\n linkedHover\n } = props\n\n const resolvedSize: [number, number] = width != null && height != null\n ? [width, height]\n : size || [500, 300]\n const resolvedTooltip = tooltipContent ?? tooltip\n\n const frameRef = useRef<StreamXYFrameHandle>(null)\n\n // ── Linked hover hooks (always called, conditional logic inside) ──\n const hoverConfig = normalizeLinkedHover(linkedHover)\n const linkedHoverHook = useLinkedHover({\n name: hoverConfig?.name || \"hover\",\n fields: hoverConfig?.fields || []\n })\n\n const combinedHoverBehavior = useCallback(\n (d: HoverData | null) => {\n if (onHover) onHover(d)\n if (linkedHover) {\n linkedHoverHook.onHover(d ? (d.data || d) : null)\n }\n },\n [onHover, linkedHover, linkedHoverHook]\n )\n\n useImperativeHandle(ref, () => ({\n push: (point) => frameRef.current?.push(point),\n pushMany: (points) => frameRef.current?.pushMany(points),\n clear: () => frameRef.current?.clear(),\n getData: () => frameRef.current?.getData() ?? []\n }))\n\n const waterfallStyle: WaterfallStyle = {}\n if (positiveColor != null) waterfallStyle.positiveColor = positiveColor\n if (negativeColor != null) waterfallStyle.negativeColor = negativeColor\n if (connectorStroke != null) waterfallStyle.connectorStroke = connectorStroke\n if (connectorWidth != null) waterfallStyle.connectorWidth = connectorWidth\n if (gap != null) waterfallStyle.gap = gap\n if (stroke != null) waterfallStyle.stroke = stroke\n if (strokeWidth != null) waterfallStyle.strokeWidth = strokeWidth\n\n return (\n <StreamXYFrame\n ref={frameRef}\n chartType=\"waterfall\"\n runtimeMode=\"streaming\"\n size={resolvedSize}\n margin={margin}\n className={className}\n arrowOfTime={arrowOfTime}\n windowMode={windowMode}\n windowSize={windowSize}\n data={data}\n timeAccessor={timeAccessor}\n valueAccessor={valueAccessor}\n xExtent={timeExtent}\n yExtent={valueExtent}\n extentPadding={extentPadding}\n waterfallStyle={waterfallStyle}\n showAxes={showAxes}\n background={background}\n hoverAnnotation={enableHover}\n tooltipContent={resolvedTooltip}\n customHoverBehavior={combinedHoverBehavior}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n tickFormatTime={tickFormatTime}\n tickFormatValue={tickFormatValue}\n />\n )\n }\n)\nRealtimeWaterfallChart.displayName = \"RealtimeWaterfallChart\"\n","import * as React from \"react\"\nimport { useRef, useImperativeHandle, forwardRef, useCallback } from \"react\"\nimport StreamXYFrame from \"../../stream/StreamXYFrame\"\nimport type {\n ArrowOfTime,\n WindowMode,\n HoverAnnotationConfig,\n HoverData,\n AnnotationContext,\n StreamXYFrameHandle,\n DecayConfig,\n PulseConfig,\n StalenessConfig\n} from \"../../stream/types\"\nimport type { RealtimeFrameHandle } from \"../../realtime/types\"\nimport type { ReactNode } from \"react\"\n\nexport interface RealtimeHeatmapProps {\n /** Chart dimensions as [width, height] */\n size?: [number, number]\n /** Chart width (alternative to size) */\n width?: number\n /** Chart height (alternative to size) */\n height?: number\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** CSS class name */\n className?: string\n /** Direction time flows */\n arrowOfTime?: ArrowOfTime\n /** Data retention strategy */\n windowMode?: WindowMode\n /** Ring buffer capacity */\n windowSize?: number\n /** Controlled data array */\n data?: Record<string, any>[]\n /** Time/x value accessor */\n timeAccessor?: string | ((d: Record<string, any>) => number)\n /** Value/y accessor */\n valueAccessor?: string | ((d: Record<string, any>) => number)\n /** Category accessor for colored cells */\n categoryAccessor?: string | ((d: Record<string, any>) => string)\n /** Fixed time domain */\n timeExtent?: [number, number]\n /** Fixed value domain */\n valueExtent?: [number, number]\n /** Extent padding factor */\n extentPadding?: number\n /** Number of x-axis bins (default: 20) */\n heatmapXBins?: number\n /** Number of y-axis bins (default: 20) */\n heatmapYBins?: number\n /** Aggregation mode: \"count\", \"sum\", or \"mean\" (default: \"count\") */\n aggregation?: \"count\" | \"sum\" | \"mean\"\n /** Show canvas-drawn axes */\n showAxes?: boolean\n /** Background fill color */\n background?: string\n /** Enable hover interaction */\n enableHover?: boolean | HoverAnnotationConfig\n /** Custom tooltip renderer */\n tooltipContent?: (d: HoverData) => ReactNode\n /** Callback on hover */\n onHover?: (d: HoverData | null) => void\n /** Annotation objects */\n annotations?: Record<string, any>[]\n /** SVG annotation render function */\n svgAnnotationRules?: (annotation: Record<string, any>, index: number, context: AnnotationContext) => ReactNode\n /** Custom formatter for time axis ticks */\n tickFormatTime?: (value: number) => string\n /** Custom formatter for value axis ticks */\n tickFormatValue?: (value: number) => string\n /** Configurable opacity decay for older data */\n decay?: DecayConfig\n /** Flash effect on newly inserted data */\n pulse?: PulseConfig\n /** Frame-level data liveness indicator */\n staleness?: StalenessConfig\n /** Custom tooltip renderer (alias for tooltipContent) */\n tooltip?: (d: HoverData) => ReactNode\n}\n\n/**\n * RealtimeHeatmap - Streaming heatmap with 2D grid binning.\n *\n * Wraps StreamXYFrame with `chartType=\"heatmap\"` and `runtimeMode=\"streaming\"`,\n * providing configurable bin counts and aggregation modes.\n *\n * @example\n * ```tsx\n * const ref = useRef<RealtimeFrameHandle>(null)\n * ref.current.push({ time: Date.now(), x: 42, y: 7 })\n *\n * <RealtimeHeatmap\n * ref={ref}\n * timeAccessor=\"time\"\n * valueAccessor=\"y\"\n * heatmapXBins={30}\n * heatmapYBins={20}\n * aggregation=\"count\"\n * />\n * ```\n */\nexport const RealtimeHeatmap = forwardRef<RealtimeFrameHandle, RealtimeHeatmapProps>(\n function RealtimeHeatmap(props, ref) {\n const {\n size,\n width,\n height,\n margin,\n className,\n arrowOfTime = \"right\",\n windowMode = \"sliding\",\n windowSize = 200,\n data,\n timeAccessor,\n valueAccessor,\n categoryAccessor,\n timeExtent,\n valueExtent,\n extentPadding,\n heatmapXBins = 20,\n heatmapYBins = 20,\n aggregation = \"count\",\n showAxes = true,\n background,\n enableHover,\n tooltipContent,\n tooltip,\n onHover,\n annotations,\n svgAnnotationRules,\n tickFormatTime,\n tickFormatValue,\n decay,\n pulse,\n staleness\n } = props\n\n const resolvedSize: [number, number] = width != null && height != null\n ? [width, height]\n : size || [500, 300]\n const resolvedTooltip = tooltipContent ?? tooltip\n\n const frameRef = useRef<StreamXYFrameHandle>(null)\n\n useImperativeHandle(ref, () => ({\n push: (point) => frameRef.current?.push(point),\n pushMany: (points) => frameRef.current?.pushMany(points),\n clear: () => frameRef.current?.clear(),\n getData: () => frameRef.current?.getData() ?? []\n }))\n\n return (\n <StreamXYFrame\n ref={frameRef}\n chartType=\"heatmap\"\n runtimeMode=\"streaming\"\n size={resolvedSize}\n margin={margin}\n className={className}\n arrowOfTime={arrowOfTime}\n windowMode={windowMode}\n windowSize={windowSize}\n data={data}\n timeAccessor={timeAccessor}\n valueAccessor={valueAccessor}\n categoryAccessor={categoryAccessor}\n xExtent={timeExtent}\n yExtent={valueExtent}\n extentPadding={extentPadding}\n heatmapXBins={heatmapXBins}\n heatmapYBins={heatmapYBins}\n heatmapAggregation={aggregation}\n showAxes={showAxes}\n background={background}\n hoverAnnotation={enableHover}\n tooltipContent={resolvedTooltip}\n customHoverBehavior={onHover}\n annotations={annotations}\n svgAnnotationRules={svgAnnotationRules}\n tickFormatTime={tickFormatTime}\n tickFormatValue={tickFormatValue}\n decay={decay}\n pulse={pulse}\n staleness={staleness}\n />\n )\n }\n)\nRealtimeHeatmap.displayName = \"RealtimeHeatmap\"\n"],"names":["scaleLinear","hitTestRect","React","useMemo","d3Bin","DEFAULT_MARGIN","defaultTooltipStyle","useRef","useEffect","d3Select","d3BrushX","d3BrushY","d3Brush","forwardRef","useState","useCallback","useImperativeHandle","line","curveLinearClosed","interpolateNumber","sankeyLeft","sankeyRight","sankeyCenter","sankeyJustify","sankeyCircular","schemeCategory10","resolveLabelFn","forceLink","forceSimulation","forceManyBody","forceX","forceY","min","max","chord","arc","ribbon","d3Hierarchy","d3Tree","d3Cluster","d3Treemap","treemapBinary","d3Pack","d3Partition","useLayoutEffect","createContext","useContext","useId"],"mappings":"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"}