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":"network.module.js","sources":["../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/visualizationLayerBehavior/axis.tsx","../src/components/Axis/summaryGraphic.tsx","../src/components/Axis/axisTitle.tsx","../src/components/charts/shared/formatUtils.ts","../src/components/geometry/summaryLayouts.tsx","../src/components/Axis/Axis.tsx","../src/components/Legend.tsx","../src/components/Annotation.tsx","../src/components/annotationLayerBehavior/d3labeler.ts","../src/components/annotationLayerBehavior/annotationHandling.ts","../src/components/store/createStore.tsx","../src/components/store/TooltipStore.ts","../src/components/AnnotationLayer/helpers.js","../src/components/AnnotationLayer/AnnotationLayer.tsx","../src/components/geometry/lineDrawing.ts","../src/components/constants/coordinateNames.ts","../src/components/geometry/contourLayout.ts","../src/components/geometry/hexbinLayout.tsx","../src/components/geometry/areaDrawing.tsx","../src/components/data/unflowedFunctions.ts","../src/components/data/dataFunctions.ts","../src/components/processing/hierarchyUtils.ts","../src/components/charts/shared/legendUtils.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/charts/shared/hooks.ts","../src/components/charts/shared/ChartError.tsx","../src/components/charts/shared/validateChartData.ts","../src/components/charts/network/ForceDirectedGraph.tsx","../src/components/charts/network/SankeyDiagram.tsx","../src/components/charts/network/ChordDiagram.tsx","../src/components/charts/network/TreeDiagram.tsx","../src/components/charts/network/Treemap.tsx","../src/components/charts/network/CirclePack.tsx"],"sourcesContent":["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","import * as React from \"react\"\n\n\nimport { ScaleLinear } from \"d3-scale\"\n\ntype RenderModeFnType = (d: number, i: number) => string | Record<string, any>\n\ntype AxisPiecesFnType = {\n renderMode?: RenderModeFnType\n padding: number\n scale: ScaleLinear<number, number>\n ticks: number\n tickValues: number[] | Function\n orient: \"left\" | \"right\" | \"top\" | \"bottom\"\n size: number[]\n footer: boolean\n tickSize: number\n baseline?: boolean | \"under\"\n jaggedBase?: boolean\n}\n\nconst horizontalTornTickGenerator = (width, ticks, y, orient) => {\n const step = width / ticks\n let currentStep = 0\n let tickPath = `M0,${y}`\n const mod = orient === \"right\" ? -1 : 1\n while (currentStep <= width) {\n tickPath += `L${currentStep},${y}`\n if (currentStep < width) {\n tickPath += `L${currentStep + step / 2},${y + 10 * mod}`\n }\n currentStep += step\n }\n return tickPath\n}\n\nconst verticalTornTickGenerator = (height, ticks, x, orient) => {\n const step = height / ticks\n let currentStep = 0\n let tickPath = `M${x},0`\n const mod = orient === \"bottom\" ? -1 : 1\n while (currentStep <= height) {\n tickPath += `L${x},${currentStep}`\n if (currentStep < height) {\n tickPath += `L${x + 10 * mod},${currentStep + step / 2}`\n }\n currentStep += step\n }\n return tickPath\n}\n\nconst generateTornBaseline = (orient, baselineSettings) => {\n let tornD = \"\"\n const { x1, x2, y1, y2 } = baselineSettings\n if (orient === \"left\" || orient === \"right\") {\n const calcWidth = Math.abs(x2 - x1)\n const ticks = Math.ceil(calcWidth / 40)\n tornD = horizontalTornTickGenerator(\n calcWidth,\n ticks,\n orient === \"right\" ? 0 : y1,\n orient\n )\n } else {\n const calcHeight = Math.abs(y2 - y1)\n const ticks = Math.ceil(calcHeight / 40)\n tornD = verticalTornTickGenerator(calcHeight, ticks, x1, orient)\n }\n return tornD\n}\n\nconst defaultTickLineGenerator = ({\n xy,\n orient,\n i,\n \n className = \"\",\n jaggedBase\n}) => {\n let genD = `M${xy.x1},${xy.y1}L${xy.x2},${xy.y2}`\n if (jaggedBase && i === 0) {\n genD = generateTornBaseline(orient, xy)\n }\n return (\n <path key={i}\n \n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1px\"\n d={genD}\n className={`tick-line tick ${orient} ${className}`}\n />\n )\n}\n\nconst outboundTickLineGenerator = ({ xy, orient, i, className = \"\" }) => {\n const tickLength = 8\n let genD = `M-4,${xy.y1}L${xy.x1},${xy.y2}`\n if (orient === \"left\") {\n genD = `M${xy.x1 - tickLength},${xy.y1}L${xy.x1},${xy.y2}`\n } else if (orient === \"right\") {\n genD = `M${xy.x2},${xy.y1}L${xy.x2 + tickLength},${xy.y2}`\n } else if (orient === \"top\") {\n genD = `M${xy.x1},${xy.y1 - tickLength}L${xy.x1},${xy.y1}`\n } else if (orient === \"bottom\") {\n genD = `M${xy.x1},${xy.y2}L${xy.x1},${xy.y2 + tickLength}`\n }\n return (\n <path key={i}\n \n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1px\"\n d={genD}\n className={`outbound-tick-line tick ${orient} ${className}`}\n />\n )\n}\n\nexport function generateTickValues(tickValues, ticks, scale) {\n const axisSize = Math.abs(scale.range()[1] - scale.range()[0])\n\n if (!tickValues) {\n if (!ticks) {\n ticks = Math.max(1, Math.floor(axisSize / 40))\n }\n tickValues = (scale.ticks && scale.ticks(ticks)) || scale.domain()\n }\n\n return tickValues\n}\n\nexport function axisPieces({\n renderMode = () => undefined,\n padding = 5,\n scale,\n ticks,\n tickValues = generateTickValues(undefined, ticks, scale),\n orient = \"left\",\n size,\n footer = false,\n tickSize = footer\n ? -10\n : [\"top\", \"bottom\"].find((d) => d === orient)\n ? (size ? size[1] : 0)\n : (size ? size[0] : 0),\n jaggedBase\n}: AxisPiecesFnType) {\n //returns x1 (start of line), x2 (end of line) associated with the value of the tick\n let axisDomain = [],\n position1,\n position2,\n domain1,\n domain2,\n tposition1,\n tposition2,\n textPositionMod = 0,\n textPositionMod2 = 0,\n defaultAnchor = \"middle\"\n\n switch (orient) {\n case \"top\":\n position1 = \"x1\"\n position2 = \"x2\"\n domain1 = \"y1\"\n domain2 = \"y2\"\n axisDomain = [0, tickSize]\n tposition1 = \"tx\"\n tposition2 = \"ty\"\n textPositionMod -= 20 - padding\n break\n case \"bottom\":\n position1 = \"x1\"\n position2 = \"x2\"\n domain1 = \"y2\"\n domain2 = \"y1\"\n axisDomain = size ? [size[1], size[1] - tickSize] : [0, -tickSize]\n tposition1 = \"tx\"\n tposition2 = \"ty\"\n textPositionMod += 20 + padding\n break\n case \"right\":\n position1 = \"y2\"\n position2 = \"y1\"\n domain1 = \"x2\"\n domain2 = \"x1\"\n axisDomain = size ? [size[0], size[0] - tickSize] : [0, -tickSize]\n tposition1 = \"ty\"\n tposition2 = \"tx\"\n textPositionMod += 5 + padding\n textPositionMod2 += 5\n defaultAnchor = \"start\"\n break\n //left\n default:\n position1 = \"y1\"\n position2 = \"y2\"\n domain1 = \"x1\"\n domain2 = \"x2\"\n axisDomain = [0, tickSize]\n tposition1 = \"ty\"\n tposition2 = \"tx\"\n textPositionMod -= 5 + padding\n textPositionMod2 += 5\n defaultAnchor = \"end\"\n break\n }\n let generatedTicks =\n tickValues instanceof Function ? tickValues({ orient }) : tickValues\n\n if (\n jaggedBase &&\n generatedTicks.find((t) => t === scale.domain()[0]) === undefined\n ) {\n generatedTicks = [scale.domain()[0], ...generatedTicks]\n }\n\n return generatedTicks.map((tick, i) => {\n const tickPosition = scale(tick)\n\n return {\n [position1]: tickPosition,\n [position2]: tickPosition,\n [domain1]: axisDomain[0],\n [domain2]: axisDomain[1],\n [tposition1]: tickPosition + textPositionMod2,\n [tposition2]: axisDomain[0] + textPositionMod,\n defaultAnchor,\n renderMode: renderMode(tick, i),\n value: tick\n }\n })\n}\n\nexport const axisLabels = ({\n axisParts,\n tickFormat,\n rotate = 0,\n center = false,\n orient\n}) => {\n // Pre-format all values\n const entries = axisParts.map((axisPart, i) => ({\n axisPart,\n i,\n formatted: tickFormat(axisPart.value, i)\n }))\n\n // Collision-aware filtering: skip labels that would overlap.\n // Only applies to non-rotated text labels (rotation changes bounding box).\n const isHorizontal = orient === \"top\" || orient === \"bottom\"\n const isVertical = orient === \"left\" || orient === \"right\"\n let visible = entries\n\n if (!rotate && entries.length > 1) {\n const CHAR_WIDTH = 8\n const LINE_HEIGHT = 14\n const MIN_GAP = 8\n\n const textOf = (formatted) => {\n if (typeof formatted === \"string\") return formatted\n if (typeof formatted === \"number\") return String(formatted)\n return null // React element — can't estimate width, always keep\n }\n\n if (isHorizontal) {\n const sorted = [...entries].sort((a, b) => a.axisPart.tx - b.axisPart.tx)\n let lastRight = -Infinity\n const keep = new Set()\n\n for (const entry of sorted) {\n const text = textOf(entry.formatted)\n if (!text) { keep.add(entry.i); continue }\n const halfW = (text.length * CHAR_WIDTH) / 2\n if (entry.axisPart.tx - halfW >= lastRight + MIN_GAP) {\n keep.add(entry.i)\n lastRight = entry.axisPart.tx + halfW\n }\n }\n visible = entries.filter((e) => keep.has(e.i))\n } else if (isVertical) {\n const sorted = [...entries].sort((a, b) => a.axisPart.ty - b.axisPart.ty)\n let lastBottom = -Infinity\n const keep = new Set()\n\n for (const entry of sorted) {\n if (entry.axisPart.ty >= lastBottom + LINE_HEIGHT + MIN_GAP) {\n keep.add(entry.i)\n lastBottom = entry.axisPart.ty\n }\n }\n visible = entries.filter((e) => keep.has(e.i))\n }\n }\n\n return visible.map(({ axisPart, i, formatted: renderedValue }) => {\n if (typeof renderedValue !== \"object\" || renderedValue instanceof Date) {\n renderedValue = (\n <text textAnchor={axisPart.defaultAnchor} className=\"axis-label\">\n {renderedValue.toString ? renderedValue.toString() : renderedValue}\n </text>\n )\n }\n\n let textX = axisPart.tx\n let textY = axisPart.ty\n if (center) {\n switch (orient) {\n case \"right\":\n textX -= (axisPart.x2 - axisPart.x1) / 2\n break\n case \"left\":\n textX += (axisPart.x2 - axisPart.x1) / 2\n break\n case \"top\":\n textY += (axisPart.y2 - axisPart.y1) / 2\n break\n case \"bottom\":\n textY -= (axisPart.y2 - axisPart.y1) / 2\n break\n }\n }\n\n return (\n <g\n key={i}\n pointerEvents=\"none\"\n transform={`translate(${textX},${textY}) rotate(${rotate})`}\n className=\"axis-label\"\n >\n {renderedValue}\n </g>\n )\n })\n}\n\nexport const baselineGenerator = (orient, size, className) => {\n const offsets = {\n left: { x: 0, y: 0, width: 0, height: size ? size[1] : 0 },\n right: { x: size ? size[0] : 0, y: 0, width: 0, height: size ? size[1] : 0 },\n top: { x: 0, y: 0, width: size ? size[0] : 0, height: 0 },\n bottom: { x: 0, y: size ? size[1] : 0, width: size ? size[0] : 0, height: 0 }\n }\n\n const orientOffset = offsets[orient]\n\n return (\n <line\n key=\"baseline\"\n className={`axis-baseline ${className}`}\n stroke=\"currentColor\"\n strokeLinecap=\"square\"\n x1={orientOffset.x}\n x2={orientOffset.x + orientOffset.width}\n y1={orientOffset.y}\n y2={orientOffset.y + orientOffset.height}\n />\n )\n}\n\nexport const axisLines = ({\n axisParts,\n orient,\n tickLineGenerator = defaultTickLineGenerator,\n \n className,\n jaggedBase,\n scale,\n showOutboundTickLines = false\n}: {\n axisParts: object[]\n orient: string\n tickLineGenerator: Function\n className: string\n jaggedBase?: boolean\n scale: ScaleLinear<number, number>\n showOutboundTickLines?: boolean\n}) => {\n const axisLines = axisParts.map((axisPart, i) =>\n tickLineGenerator({\n xy: axisPart,\n orient,\n i,\n \n className,\n jaggedBase,\n scale\n })\n ) as React.ReactNode[]\n\n const outboundAxisLines = showOutboundTickLines\n ? (axisParts.map((axisPart, i) =>\n outboundTickLineGenerator({\n xy: axisPart,\n orient,\n i,\n className\n })\n ) as React.ReactNode)\n : []\n\n return [...axisLines, outboundAxisLines]\n}\n","import React from \"react\"\nimport { AxisSummaryTypeSettings } from \"./../types/generalTypes\"\n\nexport interface SummaryGraphicProps {\n translation: {\n left: Array<number>\n right: Array<number>\n top: Array<number>\n bottom: Array<number>\n }\n orient: \"left\" | \"right\" | \"top\" | \"bottom\"\n decoratedSummaryType: {\n type: string\n }\n summaryWidth: number\n renderedSummary: any\n points?: React.ReactNode\n}\n\nfunction translateX({ t, o, w }: { t: string; o: string; w: number }) {\n if ((t === \"contour\" || t === \"boxplot\") && (o === \"left\" || o === \"right\")) {\n return w / 2\n } else {\n return 0\n }\n}\n\nfunction translateY({ t, o, w }: { t: string; o: string; w: number }) {\n if ((t === \"contour\" || t === \"boxplot\") && (o === \"top\" || o === \"bottom\")) {\n return w / 2\n } else {\n return 0\n }\n}\n\nexport default function SummaryGraphic(props: SummaryGraphicProps) {\n const {\n translation,\n orient,\n decoratedSummaryType,\n summaryWidth,\n renderedSummary,\n points\n } = props\n return (\n <g\n className=\"marginal-graphics\"\n transform={`translate(${translation[orient]})`}\n >\n <g\n transform={`translate(${translateX({\n t: decoratedSummaryType.type,\n o: orient,\n w: summaryWidth\n })},${translateY({\n t: decoratedSummaryType.type,\n o: orient,\n w: summaryWidth\n })})`}\n >\n {renderedSummary}\n </g>\n {points}\n </g>\n )\n}\n","import React from 'react';\n\nexport interface AxisTitleProps {\n className: string,\n translation: Array<number>,\n position: Array<number>,\n rotation: number | string,\n labelName: any,\n anchorMod: \"inherit\" | \"middle\" | \"end\" | \"start\"\n}\n\nexport default function AxisTitle(props: AxisTitleProps) { \n const { className, translation, position, rotation, labelName, anchorMod } = props;\n return (\n <g\n className={`axis-title ${className}`}\n transform={`translate(${[\n translation[0] + position[0],\n translation[1] + position[1]\n ]}) rotate(${rotation})`}\n >\n {React.isValidElement(labelName) ? (\n labelName\n ) : (\n <text textAnchor={anchorMod}>{labelName}</text>\n )}\n </g>\n )\n}","import * as React from \"react\"\nimport { timeFormat } from \"d3-time-format\"\nimport { format as d3Format } from \"d3-format\"\n\n/**\n * Format number with specified format string\n *\n * @param value - Number to format\n * @param formatString - D3 format string (e.g., \".2f\", \",.0f\", \".1%\")\n * @returns Formatted string\n *\n * @see https://github.com/d3/d3-format#format for format string options\n */\nexport function formatNumber(value: number, formatString: string = \",.0f\"): string {\n try {\n return d3Format(formatString)(value)\n } catch {\n return String(value)\n }\n}\n\n/**\n * Format date with specified format string\n *\n * @param value - Date to format\n * @param formatString - D3 time format string (e.g., \"%Y-%m-%d\", \"%b %d\")\n * @returns Formatted string\n *\n * @see https://github.com/d3/d3-time-format#timeFormat for format string options\n */\nexport function formatDate(value: Date | number | string, formatString: string = \"%b %d, %Y\"): string {\n try {\n const date = value instanceof Date ? value : new Date(value)\n return timeFormat(formatString)(date)\n } catch {\n return String(value)\n }\n}\n\n/**\n * Creates a formatting function based on the type\n *\n * @param type - Type of formatting: 'number', 'date', 'percent', or 'currency'\n * @param options - Optional configuration for the formatter\n * @returns Formatting function\n *\n * @example\n * ```ts\n * const fmt = formatAxis('number', { decimals: 2 })\n * fmt(1234.567) // \"1,234.57\"\n *\n * const dateFmt = formatAxis('date', { format: '%b %Y' })\n * dateFmt(new Date()) // \"Jan 2024\"\n * ```\n */\nexport function formatAxis(\n type: \"number\" | \"date\" | \"percent\" | \"currency\" = \"number\",\n options?: {\n decimals?: number\n format?: string\n currency?: string\n }\n): (d: any) => string {\n const { decimals = 0, format: customFormat, currency = \"$\" } = options || {}\n\n switch (type) {\n case \"date\":\n return (d) => formatDate(d, customFormat || \"%b %d\")\n\n case \"percent\":\n return (d) => formatNumber(d, customFormat || `.${decimals}%`)\n\n case \"currency\":\n return (d) => `${currency}${formatNumber(d, customFormat || `,.${decimals}f`)}`\n\n case \"number\":\n default:\n return (d) => formatNumber(d, customFormat || `,.${decimals}f`)\n }\n}\n\n/**\n * Creates a tooltip content generator\n *\n * @param fields - Array of field names to display\n * @param formatters - Optional map of field names to formatting functions\n * @param labels - Optional map of field names to display labels\n * @returns React element generator function\n *\n * @example\n * ```ts\n * const tooltip = createTooltip(\n * ['category', 'value'],\n * { value: d => formatNumber(d, ',.2f') },\n * { category: 'Category', value: 'Value' }\n * )\n * ```\n */\nexport function createTooltip(\n fields: string[],\n formatters?: Record<string, (v: any) => string>,\n labels?: Record<string, string>\n): (d: any) => JSX.Element {\n return (d: any) => {\n return React.createElement(\n \"div\",\n { className: \"tooltip-content\", style: { padding: \"8px\" } },\n fields.map((field) => {\n const label = labels?.[field] || field\n const value = d[field]\n const formatter = formatters?.[field]\n const displayValue = formatter ? formatter(value) : String(value)\n\n return React.createElement(\n \"div\",\n { key: field, style: { marginBottom: \"4px\" } },\n React.createElement(\"strong\", null, `${label}: `),\n displayValue\n )\n })\n )\n }\n}\n\n/**\n * Formats large numbers with K/M/B suffixes\n *\n * @param value - Number to format\n * @param decimals - Number of decimal places\n * @returns Formatted string with suffix\n *\n * @example\n * ```ts\n * formatLargeNumber(1234) // \"1.2K\"\n * formatLargeNumber(1234567) // \"1.2M\"\n * formatLargeNumber(1234567890) // \"1.2B\"\n * ```\n */\nexport function formatLargeNumber(value: number, decimals: number = 1): string {\n if (value >= 1e9) {\n return (value / 1e9).toFixed(decimals) + \"B\"\n }\n if (value >= 1e6) {\n return (value / 1e6).toFixed(decimals) + \"M\"\n }\n if (value >= 1e3) {\n return (value / 1e3).toFixed(decimals) + \"K\"\n }\n return value.toFixed(decimals)\n}\n\n/**\n * Smart default tick format for axis labels.\n *\n * Handles the common problems with raw number-to-string conversion:\n * - Floating-point noise (0.30000000000000004 → \"0.3\")\n * - Excessive precision (62.123456789 → \"62.1235\")\n * - Large numbers (1500000 → \"1.5M\")\n * - Strings/non-numbers pass through unchanged\n *\n * Used as the default axis tickFormat when no explicit format is provided.\n */\nexport function smartTickFormat(value: any): string {\n if (value == null) return \"\"\n if (typeof value !== \"number\") return String(value)\n if (!isFinite(value)) return String(value)\n if (value === 0) return \"0\"\n\n // Clean floating-point noise (e.g., 0.30000000000000004 → 0.3)\n const cleaned = parseFloat(value.toPrecision(12))\n const abs = Math.abs(cleaned)\n\n // Large numbers: compact suffixes\n if (abs >= 1e9) return `${parseFloat((cleaned / 1e9).toPrecision(3))}B`\n if (abs >= 1e6) return `${parseFloat((cleaned / 1e6).toPrecision(3))}M`\n if (abs >= 1e4) return `${parseFloat((cleaned / 1e3).toPrecision(3))}K`\n\n // Integers: no decimals needed\n if (Number.isInteger(cleaned)) return String(cleaned)\n\n // Floats: up to 6 significant digits, trailing zeros stripped\n return String(parseFloat(cleaned.toPrecision(6)))\n}\n\n/**\n * Truncates text to specified length with ellipsis\n *\n * @param text - Text to truncate\n * @param maxLength - Maximum length before truncation\n * @returns Truncated text\n */\nexport function truncateText(text: string, maxLength: number = 20): string {\n if (text.length <= maxLength) {\n return text\n }\n return text.slice(0, maxLength - 3) + \"...\"\n}\n","import * as React from \"react\"\n\nimport { ProjectionTypes } from \"../types/generalTypes\"\n\ntype SummaryType = { type: string | Function }\n\ntype ORFrameSummaryRendererTypes = {\n data: Array<object>\n type: SummaryType\n renderMode: Function\n eventListenersGenerator: Function\n styleFn: Function\n classFn: Function\n projection: ProjectionTypes\n adjustedSize: Array<number>\n chartSize: number\n margin: object\n axisCreator?: Function\n}\n\nexport function orFrameSummaryRenderer({\n data,\n type,\n renderMode,\n eventListenersGenerator,\n styleFn,\n classFn,\n projection,\n adjustedSize,\n chartSize,\n margin,\n axisCreator\n}: ORFrameSummaryRendererTypes) {\n if (typeof type.type === \"function\") {\n return type.type({\n data,\n type,\n renderMode,\n eventListenersGenerator,\n styleFn,\n classFn,\n projection,\n adjustedSize,\n chartSize,\n margin,\n axisCreator\n })\n }\n console.error(\n `Invalid summary type: ${type.type} - Must be a function`\n )\n return {}\n}\n\n/**\n * Main drawing function for summary visualizations\n */\nexport const drawSummaries = ({\n data,\n type,\n renderMode,\n eventListenersGenerator,\n styleFn,\n classFn,\n projection,\n adjustedSize,\n margin,\n axisCreator\n}: {\n data: object\n type: { type?: string | Function }\n renderMode: Function\n eventListenersGenerator: Function\n styleFn: Function\n classFn: Function\n projection: ProjectionTypes\n adjustedSize: number[]\n margin: object\n axisCreator?: Function\n}) => {\n if (!type || !type.type) return\n type = typeof type === \"string\" ? { type } : type\n const chartSize =\n projection === \"vertical\" ? adjustedSize[1] : adjustedSize[0]\n\n return orFrameSummaryRenderer({\n data: data as unknown as Array<object>,\n type: type as SummaryType,\n renderMode,\n eventListenersGenerator,\n styleFn,\n classFn,\n projection,\n adjustedSize,\n chartSize,\n margin,\n axisCreator\n })\n}\n\ninterface summaryInstruction {\n Mark?: JSX.Element\n containerProps?: object\n elements: object[]\n}\n\n/**\n * Converts summary instructions to rendered SVG elements\n */\nexport function summaryInstructionsToMarks(data: summaryInstruction[]) {\n const renderedSummaries: JSX.Element[] = []\n for (const container of data) {\n const renderedElements: JSX.Element[] = []\n const { elements, containerProps} = container\n if (container.Mark) {\n renderedSummaries.push(container.Mark)\n } else {\n for (let i = 0; i < elements.length; i++) {\n const element: Record<string, any> = elements[i] as Record<string, any>\n const { markType, style = {}, ...restProps } = element\n\n // Merge style object into direct props for cleaner SVG\n const elementProps: Record<string, any> = { ...restProps }\n if (style.fill !== undefined) elementProps.fill = style.fill\n if (style.stroke !== undefined) elementProps.stroke = style.stroke\n if (style.strokeWidth !== undefined) elementProps.strokeWidth = style.strokeWidth\n if (style.opacity !== undefined) elementProps.opacity = style.opacity\n if (style.fillOpacity !== undefined) elementProps.fillOpacity = style.fillOpacity\n if (style.strokeOpacity !== undefined) elementProps.strokeOpacity = style.strokeOpacity\n\n // Keep remaining styles\n const remainingStyles: Record<string, any> = { ...style }\n delete remainingStyles.fill\n delete remainingStyles.stroke\n delete remainingStyles.strokeWidth\n delete remainingStyles.opacity\n delete remainingStyles.fillOpacity\n delete remainingStyles.strokeOpacity\n if (Object.keys(remainingStyles).length > 0) {\n elementProps.style = remainingStyles\n }\n\n elementProps.key = element.key || i\n\n if (markType) {\n renderedElements.push(React.createElement(markType, elementProps))\n }\n }\n if (containerProps) {\n renderedSummaries.push(<g {...containerProps}>{renderedElements}</g>)\n } else {\n renderedSummaries.push(...renderedElements)\n }\n }\n }\n return renderedSummaries\n}\n\n","import * as React from \"react\"\nimport { useEffect, useState, useRef } from \"react\"\n\nimport {\n axisLabels,\n axisPieces,\n axisLines\n} from \"./../visualizationLayerBehavior/axis\"\n\nimport SummaryGraphic from \"./summaryGraphic\"\nimport AxisTitle from \"./axisTitle\"\n\nimport { AxisProps } from \"./../types/annotationTypes\"\nimport { smartTickFormat } from \"./../charts/shared/formatUtils\"\n\nimport {\n drawSummaries,\n summaryInstructionsToMarks\n} from \"./../geometry/summaryLayouts\"\nimport { AxisSummaryTypeSettings } from \"./../types/generalTypes\"\n\n// components\n\nconst marginalPointMapper = (orient, width, data) => {\n const xMod = orient === \"left\" || orient === \"right\" ? width / 2 : 0\n const yMod = orient === \"bottom\" || orient === \"top\" ? width / 2 : 0\n return data.map((p) => [p.xy.x + xMod, p.xy.y + yMod])\n}\n\nfunction formatValue(value, props) {\n if (props.tickFormat) {\n return props.tickFormat(value)\n }\n if (value.toString) {\n return value.toString()\n }\n return value\n}\n\nconst boundingBoxMax = (axisNode, orient) => {\n const axisRef = axisNode.current\n if (!axisRef) return 30\n\n const positionType =\n orient === \"left\" || orient === \"right\" ? \"width\" : \"height\"\n\n const axisLabelMax =\n Math.max(\n ...[...axisRef.querySelectorAll(\".axis-label\")]\n .map(\n (l: { getBBox: Function }) =>\n (l.getBBox && l.getBBox()) || { height: 30, width: 30 }\n )\n .map((d) => d[positionType])\n ) + 25\n\n return axisLabelMax\n}\n\nexport default function Axis(props: AxisProps) {\n const {\n rotate,\n label,\n dynamicLabelPosition,\n orient = \"left\",\n marginalSummaryType,\n tickFormat = marginalSummaryType ? () => \"\" : smartTickFormat,\n size,\n width = (size && size[0]) || 0,\n height = (size && size[1]) || 0,\n className,\n padding,\n tickValues,\n scale,\n ticks,\n footer,\n tickSize,\n tickLineGenerator,\n baseline = true,\n margin = { top: 0, bottom: 0, left: 0, right: 0 },\n center = false,\n annotationFunction,\n glyphFunction,\n xyPoints\n } = props\n\n const [hoverPosition, changeHoverPosition] = useState(0)\n const [calculatedLabelPosition, changeCalculatedLabelPosition] =\n useState(undefined)\n\n const axisNode = useRef(null)\n\n useEffect(() => {\n if (!label?.position && dynamicLabelPosition) {\n const newBBMax = boundingBoxMax(axisNode, orient)\n if (newBBMax !== calculatedLabelPosition) {\n changeCalculatedLabelPosition(newBBMax)\n }\n }\n }, [label, dynamicLabelPosition])\n\n let { axisParts, position = [0, 0] } = props\n\n let axisTickLines\n\n if (!axisParts) {\n axisParts = axisPieces({\n padding: padding,\n tickValues,\n scale,\n ticks,\n orient,\n size: [width, height],\n footer,\n tickSize\n })\n axisTickLines = (\n <g className={`axis ${className}`}>\n {axisLines({\n axisParts,\n orient,\n tickLineGenerator,\n className,\n scale\n })}\n </g>\n )\n }\n if (axisParts.length === 0) {\n return null\n }\n\n let hoverWidth = 50\n let hoverHeight = height\n let hoverX = -50\n let hoverY = 0\n let baselineX = 0\n let baselineY = 0\n let baselineX2 = 0\n let baselineY2 = height\n // hoverFunction is set is switch(orient) below\n let hoverFunction\n let circleX = 25\n let textX = -25\n let textY = 18\n let lineWidth = width + 25\n let lineHeight = 0\n let circleY = hoverPosition\n let annotationOffset = 0\n let annotationType = \"y\"\n\n switch (orient) {\n case \"right\":\n position = [position[0], position[1]]\n hoverX = width\n baselineX2 = baselineX = width\n annotationOffset = margin.top\n lineWidth = -width - 25\n textX = 5\n hoverFunction = (e) => {\n changeHoverPosition(e.nativeEvent.offsetY - annotationOffset)\n }\n if (center === true) {\n baselineX2 = baselineX = width / 2\n }\n break\n case \"top\":\n position = [position[0], 0]\n hoverWidth = width\n hoverHeight = 50\n hoverY = -50\n hoverX = 0\n annotationOffset = margin.left\n annotationType = \"x\"\n baselineX2 = width\n baselineY2 = 0\n if (center === true) {\n baselineY2 = baselineY = height / 2\n }\n hoverFunction = (e) => {\n changeHoverPosition(e.nativeEvent.offsetX - annotationOffset)\n }\n circleX = hoverPosition\n circleY = 25\n textX = 0\n textY = -10\n lineWidth = 0\n lineHeight = height + 25\n break\n case \"bottom\":\n position = [position[0], 0]\n hoverWidth = width\n hoverHeight = 50\n baselineY = baselineY2 = hoverY = height\n baselineX = hoverX = 0\n baselineX2 = width\n annotationOffset = margin.left\n\n hoverFunction = (e) => {\n changeHoverPosition(e.nativeEvent.offsetX - annotationOffset)\n }\n circleX = hoverPosition\n circleY = 25\n textX = 0\n textY = 15\n lineWidth = 0\n lineHeight = -height - 25\n annotationType = \"x\"\n if (center === true) {\n baselineY2 = baselineY = height / 2\n }\n break\n default:\n position = [position[0], position[1]]\n annotationOffset = margin.top\n if (center === true) {\n baselineX2 = baselineX = width / 2\n }\n hoverFunction = (e) => {\n changeHoverPosition(e.nativeEvent.offsetY - annotationOffset)\n }\n }\n\n let annotationBrush\n\n if (annotationFunction) {\n const formattedValue = formatValue(scale.invert(hoverPosition), props)\n const hoverGlyph: any = glyphFunction ? (\n glyphFunction({\n lineHeight,\n lineWidth,\n value: scale.invert(hoverPosition)\n })\n ) : (\n <g>\n {React.isValidElement(formattedValue) ? (\n <g transform={`translate(${textX},${textY})`}>{formattedValue}</g>\n ) : (\n <text x={textX} y={textY}>\n {formattedValue}\n </text>\n )}\n <circle r={5} />\n <line x1={lineWidth} y1={lineHeight} style={{ stroke: \"black\" }} />\n </g>\n )\n const annotationSymbol = hoverPosition ? (\n <g\n style={{ pointerEvents: \"none\" }}\n transform={`translate(${circleX},${circleY})`}\n >\n {hoverGlyph}\n </g>\n ) : null\n\n annotationBrush = (\n <g\n className=\"annotation-brush\"\n transform={`translate(${hoverX},${hoverY})`}\n >\n <rect\n style={{ fillOpacity: 0 }}\n height={hoverHeight}\n width={hoverWidth}\n onMouseMove={hoverFunction}\n onClick={(e) =>\n annotationFunction({\n className: \"dynamic-axis-annotation\",\n type: annotationType,\n value: scale.invert(hoverPosition),\n e\n })\n }\n onMouseOut={() => {\n changeHoverPosition(undefined)\n }}\n />\n {annotationSymbol}\n </g>\n )\n }\n\n let summaryGraphic\n\n if (marginalSummaryType && xyPoints) {\n const summaryWidth = Math.max(margin[orient] - 6, 5)\n\n const decoratedSummaryType: AxisSummaryTypeSettings =\n typeof marginalSummaryType === \"string\"\n ? { type: marginalSummaryType }\n : marginalSummaryType\n\n if (\n decoratedSummaryType.flip === undefined &&\n (orient === \"bottom\" || orient === \"right\")\n ) {\n decoratedSummaryType.flip = true\n }\n\n const summaryStyle = decoratedSummaryType.summaryStyle\n ? () => decoratedSummaryType.summaryStyle\n : () => ({\n fill: \"black\",\n fillOpacity: 0.5,\n stroke: \"black\",\n strokeDasharray: \"0\"\n })\n\n const summaryRenderMode = decoratedSummaryType.renderMode\n ? () => decoratedSummaryType.renderMode\n : () => undefined\n\n const summaryClass = decoratedSummaryType.summaryClass\n ? () => decoratedSummaryType.summaryClass\n : () => \"\"\n\n const dataFilter = decoratedSummaryType.filter || (() => true)\n\n const forSummaryData = xyPoints\n .filter(\n (p: { x?: number; y?: number; data?: object }) =>\n p.x !== undefined && p.y !== undefined && dataFilter(p.data)\n )\n .map((d: { x: number; y: number }) => ({\n ...d,\n xy: {\n x: orient === \"top\" || orient === \"bottom\" ? scale(d.x) : 0,\n y: orient === \"left\" || orient === \"right\" ? scale(d.y) : 0\n },\n piece: {\n scaledVerticalValue: scale(d.y),\n scaledValue: scale(d.x)\n },\n value:\n orient === \"top\" || orient === \"bottom\" ? scale(d.y) : scale(d.x),\n scaledValue: scale(d.x),\n scaledVerticalValue: scale(d.y)\n }))\n\n const calculatedSummary = drawSummaries({\n data: {\n column: {\n middle: summaryWidth / 2,\n pieceData: forSummaryData,\n width: summaryWidth,\n xyData: forSummaryData\n }\n },\n type: decoratedSummaryType,\n renderMode: summaryRenderMode,\n eventListenersGenerator:\n decoratedSummaryType.eventListenersGenerator || (() => ({})),\n styleFn: summaryStyle,\n classFn: summaryClass,\n projection:\n orient === \"top\" || orient === \"bottom\" ? \"horizontal\" : \"vertical\",\n adjustedSize: size,\n margin: { top: 0, bottom: 0, left: 0, right: 0 }\n })\n\n const renderedSummary = summaryInstructionsToMarks(calculatedSummary.marks)\n\n let points\n\n if (decoratedSummaryType.showPoints === true) {\n const mappedPoints = marginalPointMapper(\n orient,\n summaryWidth,\n forSummaryData\n )\n\n points = mappedPoints.map((d, i) => (\n <circle\n key={`axis-summary-point-${i}`}\n cx={d[0]}\n cy={d[1]}\n r={decoratedSummaryType.r || 3}\n style={\n decoratedSummaryType.pointStyle || {\n fill: \"black\",\n fillOpacity: 0.1\n }\n }\n />\n ))\n }\n\n const translation = {\n left: [-margin.left + 2, 0],\n right: [size[0] + 2, 0],\n top: [0, -margin.top + 2],\n bottom: [0, size[1] + 2]\n }\n\n summaryGraphic = (\n <SummaryGraphic\n translation={translation}\n orient={orient}\n decoratedSummaryType={decoratedSummaryType}\n summaryWidth={summaryWidth}\n renderedSummary={renderedSummary}\n points={points}\n />\n )\n }\n\n let axisTitle\n\n const axisTickLabels = axisLabels({\n tickFormat,\n axisParts,\n orient,\n rotate,\n center\n })\n if (label) {\n const labelName: any = label.name || label\n const labelPosition = label.position || {}\n const locationMod = labelPosition.location || \"outside\"\n let anchorMod = (labelPosition.anchor || \"middle\") as \"inherit\" | \"middle\" | \"end\" | \"start\"\n const distance = label.locationDistance || calculatedLabelPosition\n\n const rotateHash = {\n left: -90,\n right: 90,\n top: 0,\n bottom: 0\n }\n\n const rotation = labelPosition.rotation || rotateHash[orient]\n\n const positionHash = {\n left: {\n start: [0, size[1]],\n middle: [0, size[1] / 2],\n end: [0, 0],\n inside: [distance || 15, 0],\n outside: [-(distance || 45), 0]\n },\n right: {\n start: [size[0] + 0, size[1]],\n middle: [size[0] + 0, size[1] / 2],\n end: [size[0] + 0, 0],\n inside: [-(distance || 15), 0],\n outside: [distance || 45, 0]\n },\n top: {\n start: [0, 0],\n middle: [0 + size[0] / 2, 0],\n end: [0 + size[0], 0],\n inside: [0, distance || 15],\n outside: [0, -(distance || 40)]\n },\n bottom: {\n start: [0, size[1]],\n middle: [0 + size[0] / 2, size[1]],\n end: [0 + size[0], size[1]],\n inside: [0, -(distance || 5)],\n outside: [0, distance || 50]\n }\n }\n\n const translation = positionHash[orient][anchorMod]\n const location = positionHash[orient][locationMod]\n\n translation[0] = translation[0] + location[0]\n translation[1] = translation[1] + location[1]\n\n if (anchorMod === \"start\" && orient === \"right\") {\n anchorMod = \"end\"\n } else if (anchorMod === \"end\" && orient === \"right\") {\n anchorMod = \"start\"\n }\n\n axisTitle = (\n <AxisTitle\n className={className}\n translation={translation}\n position={position}\n rotation={rotation}\n labelName={labelName}\n anchorMod={anchorMod}\n />\n )\n }\n\n const axisAriaLabel = `${orient} axis ${\n (axisParts &&\n axisParts.length > 0 &&\n `from ${tickFormat(axisParts[0].value, 0)} to ${tickFormat(\n axisParts[axisParts.length - 1].value,\n axisParts.length - 1\n )}`) ||\n \"without ticks\"\n }`\n\n return (\n <g className={className} aria-label={axisAriaLabel} ref={axisNode}>\n {annotationBrush}\n {axisTickLabels}\n {axisTickLines}\n {baseline === true ? (\n <line\n key=\"baseline\"\n className={`axis-baseline ${className}`}\n stroke=\"black\"\n strokeLinecap=\"square\"\n x1={baselineX}\n x2={baselineX2}\n y1={baselineY}\n y2={baselineY2}\n />\n ) : null}\n {axisTitle}\n {summaryGraphic}\n </g>\n )\n}\n\nexport { marginalPointMapper, formatValue, boundingBoxMax }\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","import * as React from \"react\"\n\nimport { AnnotationProps } from \"./types/annotationTypes\"\n\nfunction wrapText(\n text: string,\n wrap: number = 120,\n charWidth: number = 8\n): string[] {\n if (!text) return []\n const maxChars = Math.max(1, Math.floor(wrap / charWidth))\n const words = text.split(/\\s+/)\n const lines: string[] = []\n let currentLine = \"\"\n\n for (const word of words) {\n if (currentLine && currentLine.length + 1 + word.length > maxChars) {\n lines.push(currentLine)\n currentLine = word\n } else {\n currentLine = currentLine ? `${currentLine} ${word}` : word\n }\n }\n if (currentLine) lines.push(currentLine)\n return lines\n}\n\nfunction bracketPath(\n type: string,\n span: number,\n depth: number,\n isVertical: boolean\n): string {\n if (type === \"curly\") {\n if (isVertical) {\n return `M0,0 C${depth * 0.6},0 ${depth * 0.4},${span / 2} ${depth},${span / 2} C${depth * 0.4},${span / 2} ${depth * 0.6},${span} 0,${span}`\n }\n return `M0,0 C0,${depth * 0.6} ${span / 2},${depth * 0.4} ${span / 2},${depth} C${span / 2},${depth * 0.4} ${span},${depth * 0.6} ${span},0`\n }\n // square bracket\n if (isVertical) {\n return `M0,0 L${depth},0 L${depth},${span} L0,${span}`\n }\n return `M0,0 L0,${depth} L${span},${depth} L${span},0`\n}\n\nfunction renderNote(\n note: {\n label?: string\n title?: string\n orientation?: string\n align?: string\n wrap?: number\n noWrap?: boolean\n },\n dx: number,\n dy: number,\n color?: string\n) {\n if (!note) return <g className=\"annotation-note\" />\n const {\n label,\n title,\n orientation: explicitOrientation,\n align: explicitAlign,\n wrap = 120,\n noWrap\n } = note\n\n if (!label && !title) return <g className=\"annotation-note\" />\n\n let orientation = explicitOrientation\n if (!orientation) {\n orientation = Math.abs(dx) > Math.abs(dy) ? \"leftRight\" : \"topBottom\"\n }\n\n let align = explicitAlign\n if (!align || align === \"dynamic\") {\n if (orientation === \"topBottom\") {\n align = dx >= 0 ? \"left\" : \"right\"\n } else {\n align = dy >= 0 ? \"top\" : \"bottom\"\n }\n }\n\n let textAnchor: \"start\" | \"middle\" | \"end\" = \"start\"\n if (orientation === \"topBottom\") {\n if (align === \"right\") textAnchor = \"end\"\n else if (align === \"middle\") textAnchor = \"middle\"\n } else {\n textAnchor = dx >= 0 ? \"start\" : \"end\"\n }\n\n const lineHeight = 16\n const padding = 4\n const titleLines =\n title ? (noWrap ? [title] : wrapText(title, wrap)) : []\n const labelLines =\n label ? (noWrap ? [label] : wrapText(label, wrap)) : []\n\n // For leftRight orientation, offset text horizontally away from the note-line\n const textX = orientation === \"leftRight\"\n ? (textAnchor === \"end\" ? -padding : padding)\n : 0\n\n let yOffset = 0\n const textElements: React.ReactElement[] = []\n\n if (titleLines.length > 0) {\n textElements.push(\n <text\n key=\"annotation-note-title\"\n className=\"annotation-note-title\"\n fill={color || undefined}\n textAnchor={textAnchor}\n fontWeight=\"bold\"\n >\n {titleLines.map((line, i) => (\n <tspan key={i} x={textX} dy={i === 0 ? 0 : lineHeight}>\n {line}\n </tspan>\n ))}\n </text>\n )\n yOffset = titleLines.length * lineHeight\n }\n\n if (labelLines.length > 0) {\n textElements.push(\n <text\n key=\"annotation-note-label\"\n className=\"annotation-note-label\"\n fill={color || undefined}\n textAnchor={textAnchor}\n y={yOffset}\n >\n {labelLines.map((line, i) => (\n <tspan key={i} x={textX} dy={i === 0 ? lineHeight : lineHeight}>\n {line}\n </tspan>\n ))}\n </text>\n )\n }\n\n let noteLine = null\n if ((title || label) && (dx !== 0 || dy !== 0)) {\n if (orientation === \"topBottom\") {\n const lineWidth = Math.min(wrap, 120)\n let x1 = 0\n let x2 = lineWidth\n if (textAnchor === \"end\") {\n x1 = -lineWidth\n x2 = 0\n } else if (textAnchor === \"middle\") {\n x1 = -lineWidth / 2\n x2 = lineWidth / 2\n }\n noteLine = (\n <line\n className=\"note-line\"\n x1={x1}\n x2={x2}\n y1={0}\n y2={0}\n stroke={color || \"currentColor\"}\n />\n )\n } else {\n const totalHeight =\n (titleLines.length + labelLines.length) * lineHeight +\n (labelLines.length > 0 ? lineHeight : 0)\n let y1 = 0\n let y2 = totalHeight\n if (align === \"bottom\") {\n y1 = -totalHeight\n y2 = 0\n } else if (align === \"middle\") {\n y1 = -totalHeight / 2\n y2 = totalHeight / 2\n }\n noteLine = (\n <line\n className=\"note-line\"\n x1={0}\n x2={0}\n y1={y1}\n y2={y2}\n stroke={color || \"currentColor\"}\n />\n )\n }\n }\n\n // Compute vertical offset for note content based on orientation and alignment.\n // The label's first tspan adds an extra lineHeight gap below the title,\n // so total visual height is larger when a label is present.\n const totalLines = titleLines.length + labelLines.length\n const totalTextHeight = totalLines * lineHeight\n const labelGap = labelLines.length > 0 ? lineHeight : 0\n const visualHeight = totalTextHeight + labelGap\n let contentYOffset = 0\n\n if (orientation === \"topBottom\") {\n if (dy < 0) {\n contentYOffset = -visualHeight\n }\n } else if (orientation === \"leftRight\") {\n if (align === \"middle\") {\n contentYOffset = -(visualHeight / 2)\n } else if (align === \"bottom\" || dy < 0) {\n contentYOffset = -visualHeight\n }\n }\n\n const contentTransform = contentYOffset !== 0\n ? `translate(0,${contentYOffset})`\n : undefined\n\n return (\n <g className=\"annotation-note\" transform={`translate(${dx},${dy})`}>\n <g className=\"annotation-note-content\" transform={contentTransform}>{textElements}</g>\n {noteLine}\n </g>\n )\n}\n\nfunction renderSubject(\n type: string,\n subject: any,\n color?: string,\n annotX?: number,\n annotY?: number\n) {\n const elements: React.ReactElement[] = []\n\n switch (type) {\n case \"callout-circle\": {\n const totalRadius =\n (subject?.radius || 0) + (subject?.radiusPadding || 0)\n if (totalRadius > 0) {\n elements.push(\n <circle\n key=\"subject-circle\"\n r={totalRadius}\n fill=\"none\"\n stroke={color || \"currentColor\"}\n />\n )\n }\n break\n }\n case \"callout-rect\": {\n const width = subject?.width || 0\n const height = subject?.height || 0\n if (width > 0 || height > 0) {\n elements.push(\n <rect\n key=\"subject-rect\"\n width={width}\n height={height}\n fill=\"none\"\n stroke={color || \"currentColor\"}\n />\n )\n }\n break\n }\n case \"callout-custom\": {\n if (subject?.custom) {\n const customElements = Array.isArray(subject.custom)\n ? subject.custom\n : [subject.custom]\n elements.push(...customElements)\n }\n break\n }\n case \"xy-threshold\": {\n const x = annotX || 0\n const y = annotY || 0\n\n if (subject?.x !== undefined) {\n const y1 = (subject.y1 || 0) - y\n const y2 = (subject.y2 || 0) - y\n const sx = (subject.x || 0) - x\n elements.push(\n <line\n key=\"threshold-line\"\n x1={sx}\n y1={y1}\n x2={sx}\n y2={y2}\n stroke={color || \"currentColor\"}\n strokeDasharray=\"5,5\"\n />\n )\n } else if (subject?.y !== undefined) {\n const x1 = (subject.x1 || 0) - x\n const x2 = (subject.x2 || 0) - x\n const sy = (subject.y || 0) - y\n elements.push(\n <line\n key=\"threshold-line\"\n x1={x1}\n y1={sy}\n x2={x2}\n y2={sy}\n stroke={color || \"currentColor\"}\n strokeDasharray=\"5,5\"\n />\n )\n } else if (subject?.x1 !== undefined || subject?.x2 !== undefined) {\n // Horizontal threshold line when only x1/x2 provided (no subject.x or subject.y)\n const x1 = (subject.x1 || 0) - x\n const x2 = (subject.x2 || 0) - x\n elements.push(\n <line\n key=\"threshold-line\"\n x1={x1}\n y1={0}\n x2={x2}\n y2={0}\n stroke={color || \"currentColor\"}\n strokeDasharray=\"5,5\"\n />\n )\n } else if (subject?.y1 !== undefined || subject?.y2 !== undefined) {\n // Vertical threshold line when only y1/y2 provided (no subject.x or subject.y)\n const y1 = (subject.y1 || 0) - y\n const y2 = (subject.y2 || 0) - y\n elements.push(\n <line\n key=\"threshold-line\"\n x1={0}\n y1={y1}\n x2={0}\n y2={y2}\n stroke={color || \"currentColor\"}\n strokeDasharray=\"5,5\"\n />\n )\n }\n break\n }\n case \"bracket\": {\n const bracketType = subject?.type || \"curly\"\n const span = subject?.width ?? subject?.height\n const depth = subject?.depth || 30\n const isVertical = subject?.width === undefined\n\n if (span !== undefined) {\n elements.push(\n <path\n key=\"bracket-path\"\n d={bracketPath(bracketType, span, depth, isVertical)}\n fill=\"none\"\n stroke={color || \"currentColor\"}\n />\n )\n }\n break\n }\n }\n\n return <g className=\"annotation-subject\">{elements}</g>\n}\n\nfunction renderConnector(\n dx: number,\n dy: number,\n connector: any,\n color?: string,\n type?: string,\n subject?: any\n) {\n const elements: React.ReactElement[] = []\n\n let startX = 0\n let startY = 0\n\n if (\n (type === \"callout-circle\" || type === \"label\") &&\n subject?.radius\n ) {\n const totalRadius =\n (subject.radius || 0) + (subject.radiusPadding || 0)\n if (totalRadius > 0 && (dx !== 0 || dy !== 0)) {\n const angle = Math.atan2(dy, dx)\n startX = Math.cos(angle) * totalRadius\n startY = Math.sin(angle) * totalRadius\n }\n } else if (type === \"callout-rect\" && subject) {\n const w = subject.width || 0\n const h = subject.height || 0\n if (w > 0 || h > 0) {\n const cx = w / 2\n const cy = h / 2\n const tdx = dx - cx\n const tdy = dy - cy\n if (tdx !== 0 || tdy !== 0) {\n const absTdx = Math.abs(tdx)\n const absTdy = Math.abs(tdy)\n const hw = w / 2\n const hh = h / 2\n const t =\n absTdx * hh > absTdy * hw ? hw / absTdx : hh / absTdy\n startX = cx + tdx * t\n startY = cy + tdy * t\n }\n }\n } else if (type === \"bracket\" && subject) {\n const width = subject.width\n const height = subject.height\n const depth = subject.depth || 30\n if (width !== undefined) {\n startX = width / 2\n startY = depth\n } else if (height !== undefined) {\n startX = depth\n startY = height / 2\n }\n }\n\n const connectorLength = Math.sqrt(\n (dx - startX) ** 2 + (dy - startY) ** 2\n )\n\n if (connectorLength > 0.5) {\n elements.push(\n <line\n key=\"connector-line\"\n x1={startX}\n y1={startY}\n x2={dx}\n y2={dy}\n stroke={color || \"currentColor\"}\n />\n )\n\n if (connector?.end === \"arrow\") {\n const arrowSize = 10\n const angleOffset = 16 / 180 * Math.PI\n const angle = Math.atan2(dy - startY, dx - startX)\n const a1x = startX + arrowSize * Math.cos(angle + angleOffset)\n const a1y = startY + arrowSize * Math.sin(angle + angleOffset)\n const a2x = startX + arrowSize * Math.cos(angle - angleOffset)\n const a2y = startY + arrowSize * Math.sin(angle - angleOffset)\n\n elements.push(\n <path\n key=\"connector-arrow\"\n d={`M${startX},${startY}L${a1x},${a1y}L${a2x},${a2y}Z`}\n fill={color || \"currentColor\"}\n stroke=\"none\"\n />\n )\n }\n }\n\n return <g className=\"annotation-connector\">{elements}</g>\n}\n\nfunction AnnotationRenderer(props: any) {\n const {\n x = 0,\n y = 0,\n dx: baseDx,\n dy: baseDy,\n nx,\n ny,\n note,\n connector,\n subject,\n type,\n color,\n className,\n disable,\n events = {},\n \"data-testid\": dataTestId\n } = props\n\n const disableSet = new Set(Array.isArray(disable) ? disable : [])\n\n let dx = baseDx || 0\n let dy = baseDy || 0\n\n if (nx !== undefined && nx !== null) dx = nx - x\n if (ny !== undefined && ny !== null) dy = ny - y\n\n const resolvedType = typeof type === \"string\" ? type : \"label\"\n\n // For bracket type, auto-position note at bracket midpoint tip\n if (resolvedType === \"bracket\" && subject && dx === 0 && dy === 0) {\n if (subject.width !== undefined) {\n dx = subject.width / 2\n const depthVal = subject.depth || 30\n dy = depthVal + (depthVal >= 0 ? 5 : -5)\n } else if (subject.height !== undefined) {\n const depthVal = subject.depth || 30\n dx = depthVal + (depthVal >= 0 ? 5 : -5)\n dy = subject.height / 2\n }\n }\n\n return (\n <g\n className={`annotation ${className || \"\"}`.trim()}\n transform={`translate(${x},${y})`}\n data-testid={dataTestId}\n {...events}\n >\n {!disableSet.has(\"connector\") && renderConnector(dx, dy, connector, color, resolvedType, subject)}\n {!disableSet.has(\"subject\") && renderSubject(resolvedType, subject, color, x, y)}\n {!disableSet.has(\"note\") && renderNote(note, dx, dy, color)}\n </g>\n )\n}\n\nexport default function SemioticAnnotation(props: AnnotationProps) {\n const { noteData } = props\n const { screenCoordinates } = noteData\n\n const annotationType =\n typeof noteData.type === \"string\" ? noteData.type : \"label\"\n\n const eventListeners = noteData.eventListeners || noteData.events || {}\n\n if (noteData.coordinates && screenCoordinates) {\n const setNX = noteData.nx || screenCoordinates[0][0] + noteData.dx\n const setNY = noteData.ny || screenCoordinates[0][1] + noteData.dy\n const notes = screenCoordinates.map((d, i) => {\n const subjectNote = Object.assign({}, noteData, {\n note: i === 0 ? noteData.note : { label: \"\" },\n x: d[0],\n y: d[1],\n nx: setNX,\n ny: setNY\n })\n return (\n <AnnotationRenderer\n data-testid=\"semiotic-annotation\"\n key={`multi-annotation-${i}`}\n {...subjectNote}\n type={annotationType}\n />\n )\n })\n\n return <g>{notes}</g>\n }\n\n const keyData = noteData.note || { title: \"none\", label: noteData.label }\n const annotationKey = `${keyData.label}-${keyData.title}-${noteData.i}`\n\n return (\n <AnnotationRenderer\n data-testid=\"semiotic-annotation\"\n key={annotationKey}\n events={eventListeners}\n {...noteData}\n type={annotationType}\n />\n )\n}\n","// from Evan Wang's https://github.com/tinker10/D3-Labeler\nexport default function() {\n let lab = [],\n anc = [],\n w = 1, // box width\n h = 1, // box width\n labeler = {\n start: x => {},\n width: x => {},\n height: x => {},\n label: x => {},\n anchor: x => {},\n alt_energy: x => {},\n alt_schedule: x => {}\n }\n\n let max_move = 5.0,\n max_angle = 0.5\n\n // weights\n let w_len = 0.2, // leader line length\n w_inter = 1.0, // leader line intersection\n w_lab2 = 30.0, // label-label overlap\n w_lab_anc = 30.0, // label-anchor overlap\n w_orient = 3.0 // orientation bias\n\n // booleans for user defined functions\n let user_energy = false,\n user_schedule = false\n\n let user_defined_energy, user_defined_schedule\n\n const energy = function(index) {\n // energy function, tailored for label placement\n\n let m = lab.length,\n ener = 0,\n dx = lab[index].x - anc[index].x,\n dy = anc[index].y - lab[index].y,\n dist = Math.sqrt(dx * dx + dy * dy),\n overlap = true,\n amount = 0,\n theta = 0\n\n // penalty for length of leader line\n if (dist > 0) ener += dist * w_len\n\n // label orientation bias\n dx /= dist\n dy /= dist\n if (dx > 0 && dy > 0) {\n ener += 0 * w_orient\n } else if (dx < 0 && dy > 0) {\n ener += 1 * w_orient\n } else if (dx < 0 && dy < 0) {\n ener += 2 * w_orient\n } else {\n ener += 3 * w_orient\n }\n\n let x21 = lab[index].x,\n y21 = lab[index].y - lab[index].height + 2.0,\n x22 = lab[index].x + lab[index].width,\n y22 = lab[index].y + 2.0\n let x11, x12, y11, y12, x_overlap, y_overlap, overlap_area\n\n for (let i = 0; i < m; i++) {\n if (i !== index) {\n // penalty for intersection of leader lines\n const overlap = intersect(\n anc[index].x,\n lab[index].x,\n anc[i].x,\n lab[i].x,\n anc[index].y,\n lab[index].y,\n anc[i].y,\n lab[i].y\n )\n if (overlap) ener += w_inter\n\n // penalty for label-label overlap\n x11 = lab[i].x\n y11 = lab[i].y - lab[i].height + 2.0\n x12 = lab[i].x + lab[i].width\n y12 = lab[i].y + 2.0\n x_overlap = Math.max(0, Math.min(x12, x22) - Math.max(x11, x21))\n y_overlap = Math.max(0, Math.min(y12, y22) - Math.max(y11, y21))\n overlap_area = x_overlap * y_overlap\n ener += overlap_area * w_lab2\n }\n\n // penalty for label-anchor overlap\n x11 = anc[i].x - anc[i].r\n y11 = anc[i].y - anc[i].r\n x12 = anc[i].x + anc[i].r\n y12 = anc[i].y + anc[i].r\n x_overlap = Math.max(0, Math.min(x12, x22) - Math.max(x11, x21))\n y_overlap = Math.max(0, Math.min(y12, y22) - Math.max(y11, y21))\n overlap_area = x_overlap * y_overlap\n ener += overlap_area * w_lab_anc\n }\n return ener\n }\n\n const mcmove = function(currT) {\n // Monte Carlo translation move\n\n // select a random label\n let i = Math.floor(Math.random() * lab.length)\n\n // save old coordinates\n let x_old = lab[i].x\n let y_old = lab[i].y\n\n // old energy\n let old_energy\n if (user_energy) {\n old_energy = user_defined_energy(i, lab, anc)\n } else {\n old_energy = energy(i)\n }\n\n // random translation\n lab[i].x += (Math.random() - 0.5) * max_move\n lab[i].y += (Math.random() - 0.5) * max_move\n\n // hard wall boundaries\n if (lab[i].x > w) lab[i].x = x_old\n if (lab[i].x < 0) lab[i].x = x_old\n if (lab[i].y > h) lab[i].y = y_old\n if (lab[i].y < 0) lab[i].y = y_old\n\n // new energy\n let new_energy\n if (user_energy) {\n new_energy = user_defined_energy(i, lab, anc)\n } else {\n new_energy = energy(i)\n }\n\n // delta E\n let delta_energy = new_energy - old_energy\n\n if (!(Math.random() < Math.exp(-delta_energy / currT))) {\n // move back to old coordinates\n lab[i].x = x_old\n lab[i].y = y_old\n }\n }\n\n const mcrotate = function(currT) {\n // Monte Carlo rotation move\n\n // select a random label\n let i = Math.floor(Math.random() * lab.length)\n\n // save old coordinates\n let x_old = lab[i].x\n let y_old = lab[i].y\n\n // old energy\n let old_energy\n if (user_energy) {\n old_energy = user_defined_energy(i, lab, anc)\n } else {\n old_energy = energy(i)\n }\n\n // random angle\n let angle = (Math.random() - 0.5) * max_angle\n\n let s = Math.sin(angle)\n let c = Math.cos(angle)\n\n // translate label (relative to anchor at origin):\n lab[i].x -= anc[i].x\n lab[i].y -= anc[i].y\n\n // rotate label\n let x_new = lab[i].x * c - lab[i].y * s,\n y_new = lab[i].x * s + lab[i].y * c\n\n // translate label back\n lab[i].x = x_new + anc[i].x\n lab[i].y = y_new + anc[i].y\n\n // hard wall boundaries\n if (lab[i].x > w) lab[i].x = x_old\n if (lab[i].x < 0) lab[i].x = x_old\n if (lab[i].y > h) lab[i].y = y_old\n if (lab[i].y < 0) lab[i].y = y_old\n\n // new energy\n let new_energy\n if (user_energy) {\n new_energy = user_defined_energy(i, lab, anc)\n } else {\n new_energy = energy(i)\n }\n\n // delta E\n let delta_energy = new_energy - old_energy\n\n if (!(Math.random() < Math.exp(-delta_energy / currT))) {\n // move back to old coordinates\n lab[i].x = x_old\n lab[i].y = y_old\n }\n }\n\n const intersect = function(x1, x2, x3, x4, y1, y2, y3, y4) {\n // returns true if two lines intersect, else false\n // from http://paulbourke.net/geometry/lineline2d/\n\n let mua, mub\n let denom, numera, numerb\n\n denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1)\n numera = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)\n numerb = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)\n\n /* Is the intersection along the the segments */\n mua = numera / denom\n mub = numerb / denom\n if (!(mua < 0 || mua > 1 || mub < 0 || mub > 1)) {\n return true\n }\n return false\n }\n\n const cooling_schedule = function(currT, initialT, nsweeps) {\n // linear cooling\n return currT - initialT / nsweeps\n }\n\n labeler.start = function(nsweeps) {\n // main simulated annealing function\n let m = lab.length,\n currT = 1.0,\n initialT = 1.0\n\n for (let i = 0; i < nsweeps; i++) {\n for (let j = 0; j < m; j++) {\n if (Math.random() < 0.5) {\n mcmove(currT)\n } else {\n mcrotate(currT)\n }\n }\n currT = cooling_schedule(currT, initialT, nsweeps)\n }\n }\n\n labeler.width = function(x) {\n // users insert graph width\n if (!arguments.length) return w\n w = x\n return labeler\n }\n\n labeler.height = function(x) {\n // users insert graph height\n if (!arguments.length) return h\n h = x\n return labeler\n }\n\n labeler.label = function(x) {\n // users insert label positions\n if (!arguments.length) return lab\n lab = x\n return labeler\n }\n\n labeler.anchor = function(x) {\n // users insert anchor positions\n if (!arguments.length) return anc\n anc = x\n return labeler\n }\n\n labeler.alt_energy = function(x) {\n // user defined energy\n if (!arguments.length) return energy\n user_defined_energy = x\n user_energy = true\n return labeler\n }\n\n labeler.alt_schedule = function(x) {\n // user defined cooling_schedule\n if (!arguments.length) return cooling_schedule\n user_defined_schedule = x\n user_schedule = true\n return labeler\n }\n\n return labeler\n}\n/*eslint-enable */\n","import labeler from \"./d3labeler\"\nimport { AnnotationProps } from \"../types/annotationTypes\"\n\ntype NoteType = {\n props: AnnotationProps\n}\n\ntype AnnotationTypes = \"marginalia\" | \"bump\" | false\n\ninterface Layout {\n type: AnnotationTypes\n orient?: \"nearest\" | \"left\" | \"right\" | \"top\" | \"bottom\" | string[]\n characterWidth?: number\n lineWidth?: number\n lineHeight?: number\n padding?: number\n iterations?: number\n pointSizeFunction?: Function\n labelSizeFunction?: Function\n marginOffset?: number\n}\n\nconst basicLabelSizeFunction = (\n noteData,\n characterWidth,\n lineHeight,\n padding\n) => {\n const text = noteData.note.label || noteData.note.title\n\n const textLength = text.length\n const wrap = noteData.note.wrap || 120\n const width = Math.min(wrap, textLength * characterWidth) + padding * 2\n const height =\n Math.ceil((textLength * characterWidth) / 120) * lineHeight + padding * 2\n return [width, height]\n}\n\nexport function bumpAnnotations(\n adjustableNotes: NoteType[],\n processor: Layout,\n size: number[],\n propsPointSizeFunction?: Function,\n propsLabelSizeFunction?: Function\n) {\n const {\n padding = 1,\n characterWidth = 8,\n lineHeight = 20,\n iterations = 500,\n pointSizeFunction = propsPointSizeFunction,\n labelSizeFunction = propsLabelSizeFunction || basicLabelSizeFunction\n } = processor\n\n const labels = adjustableNotes.map((d, i) => {\n const anchorX =\n (d.props.noteData.x[0] || d.props.noteData.x) +\n (d.props.noteData.dx !== undefined\n ? d.props.noteData.dx\n : ((i % 3) - 1) * -10)\n const anchorY =\n (d.props.noteData.y[0] || d.props.noteData.y) +\n (d.props.noteData.dy !== undefined\n ? d.props.noteData.dy\n : ((i % 3) - 1) * 10)\n\n const [labelWidth, labelHeight] = labelSizeFunction(\n d.props.noteData,\n characterWidth,\n lineHeight,\n padding\n )\n return {\n x: anchorX,\n y: anchorY,\n above: anchorY < d.props.noteData.y,\n left: anchorX < d.props.noteData.x,\n width: labelWidth,\n height: labelHeight,\n type: \"label\",\n name: \"\",\n originalNote: d\n }\n })\n\n const points = adjustableNotes.map(d => ({\n x: d.props.noteData.x,\n y: d.props.noteData.y,\n fx: d.props.noteData.x,\n fy: d.props.noteData.y,\n r: (pointSizeFunction && pointSizeFunction(d.props.noteData)) || 5,\n type: \"point\",\n originalNote: d\n }))\n\n const instantiatedLabeler = labeler()\n\n instantiatedLabeler.label(labels)\n instantiatedLabeler.anchor(points)\n instantiatedLabeler.width(size[0])\n instantiatedLabeler.height(size[1])\n instantiatedLabeler.start(iterations)\n\n labels.forEach(d => {\n if (d.type === \"label\") {\n const adjusted = adjustedXY(d.originalNote.props.noteData, d, padding)\n d.originalNote.props.noteData.nx = adjusted[0]\n d.originalNote.props.noteData.ny = adjusted[1]\n }\n })\n\n return adjustableNotes\n}\n\nfunction adjustedXY(note, calculated, padding) {\n if (note.y > calculated.y) {\n //below\n return [\n calculated.x + calculated.width / 2 + padding / 2,\n calculated.y - calculated.height + padding / 2\n ]\n }\n return [calculated.x + calculated.width / 2, calculated.y]\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\nlet [TooltipProvider, useTooltip] = createStore((set) => ({\n tooltip: null,\n changeTooltip(tooltip) {\n set(() => ({ tooltip }))\n }\n}))\n\nexport { TooltipProvider, useTooltip }\n","import React from 'react'\n\nfunction marginOffsetFn(orient, axisSettings, marginOffset) {\n if (typeof marginOffset === \"number\") {\n return marginOffset\n }\n if (axisSettings && axisSettings.find((d) => d.props.orient === orient)) {\n return 50\n }\n return 10\n}\n\nconst keyFromSVGAnnotations = (\n adjustableAnnotations,\n annotationProcessor,\n size\n) => {\n return `${adjustableAnnotations\n .map(adjustedAnnotationKeyMapper)\n .join(\",\")}${JSON.stringify(annotationProcessor)}${size.join(\",\")}`\n}\n\nfunction adjustedAnnotationKeyMapper(d) {\n if (!d || !d.props || !d.props.noteData) {\n return \"\"\n }\n const { note = {} } = d.props.noteData\n const { label, title } = note\n const id =\n d.props.noteData.id || `${d.props.noteData.x}-${d.props.noteData.y}`\n return `${id}-${label}=${title}`\n}\n\nfunction safeStringify(value) {\n const seen = new Set()\n return JSON.stringify(value, (k, v) => {\n if (seen.has(v)) {\n return \"...\"\n }\n if (typeof v === \"object\") {\n seen.add(v)\n if (k === \"note\") {\n return `${v.label}-${v.title}`\n }\n if (k === \"connector\") {\n return `${v.end}-${v.type}`\n }\n if (k === \"subject\") {\n return `${v.radius}`\n }\n if (typeof v.column === \"object\") {\n return `${v.column.x}-${v.column.y}-${v.column.name}`\n }\n\n if (\n v.voronoiX ||\n v.voronoiY ||\n v.x ||\n v.y ||\n v.dx ||\n v.dy ||\n v.label ||\n v.type ||\n v.key ||\n v.hierarchicalID ||\n v.id ||\n v.name\n ) {\n return `${v.voronoiX}-${v.voronoiY}-${v.dx}-${v.dy}-${v.x}-${v.y}-${v.label}-${v.type}-${v.key}-${v.hierarchicalID}-${v.id}-${v.name}`\n }\n\n return \"...\"\n }\n return v\n })\n}\n\nfunction noteDataWidth(noteData, charWidth = 8, layoutNoteWidth) {\n const { noteWidth = layoutNoteWidth } = noteData\n\n let noteWidthFn = noteWidth\n\n if (typeof noteWidth === \"number\") {\n noteWidthFn = () => noteWidth\n }\n\n const wrap = (noteData.note && noteData.note.wrap) || 120\n const noteText = noteData.note.label || noteData.note.label || \"\"\n const width =\n (noteWidth && noteWidthFn(noteData)) ||\n (React.isValidElement(noteData.note)\n ? 100\n : Math.min(wrap, noteText.length * charWidth))\n return width\n}\n\nfunction noteDataHeight(\n noteData,\n charWidth = 8,\n lineHeight = 20,\n layoutNoteHeight\n) {\n const { noteHeight = layoutNoteHeight } = noteData\n\n let noteHeightFn = noteHeight\n\n if (typeof noteHeight === \"number\") {\n noteHeightFn = () => noteHeight\n }\n const wrap = (noteData.note && noteData.note.wrap) || 120\n const text = noteData.note.label || noteData.note.title || \"\"\n \n const height =\n (noteHeight && noteHeightFn(noteData)) ||\n (React.isValidElement(noteData.note)\n ? 30\n : Math.ceil((text.length * charWidth) / wrap) * lineHeight +\n (noteData.note.label && noteData.note.title ? lineHeight : 0))\n\n return height\n}\n\nexport {\n marginOffsetFn,\n adjustedAnnotationKeyMapper,\n safeStringify,\n noteDataWidth,\n noteDataHeight,\n keyFromSVGAnnotations\n}\n","\"use client\"\n// modules\nimport * as React from \"react\"\nimport { useState, useEffect } from \"react\"\nimport { bumpAnnotations } from \"./../annotationLayerBehavior/annotationHandling\"\n\nimport Legend from \"./../Legend\"\nimport Annotation from \"./../Annotation\"\nimport labella from \"labella\"\nimport {\n AnnotationHandling,\n AnnotationTypes,\n AnnotationProps,\n AnnotationType\n} from \"./../types/annotationTypes\"\n\nimport { LegendProps } from \"./../types/legendTypes\"\n\nimport { useTooltip } from \"./../store/TooltipStore\"\nimport { marginOffsetFn, adjustedAnnotationKeyMapper, safeStringify, noteDataWidth, noteDataHeight, keyFromSVGAnnotations } from './helpers';\n\ninterface NoteType {\n key: string\n props: AnnotationProps\n}\n\nexport interface AnnotationLayerProps {\n legendSettings?: LegendProps\n margin: { top?: number; left?: number; right?: number; bottom?: number }\n size: number[]\n axes?: React.ReactNode[]\n annotationHandling?: AnnotationHandling | AnnotationTypes\n annotations: AnnotationType[]\n pointSizeFunction?: Function\n labelSizeFunction?: Function\n svgAnnotationRule: Function\n htmlAnnotationRule: Function\n position?: number[]\n}\n\nexport interface UpdatedAnnotationLayerProps extends AnnotationLayerProps {\n voronoiHover: Function\n}\n\ninterface AnnotationLayerState {\n adjustedAnnotationsKey?: string\n adjustedAnnotationsDataVersion?: string\n adjustedAnnotations: Object[]\n fixedAnnotations: NoteType[]\n adjustableAnnotations: NoteType[]\n}\n\nconst processAnnotations = (\n adjustableAnnotations: NoteType[],\n annotationProcessor: AnnotationHandling,\n props: AnnotationLayerProps\n) => {\n \n const {\n layout = { type: false, noteHeight: undefined, noteWidth: undefined }\n } = annotationProcessor\n\n if (layout.type === false) {\n return adjustableAnnotations\n }\n\n const { noteWidth: layoutNoteHeight, noteHeight: layoutNoteWidth } = layout\n\n let { margin = { top: 0, bottom: 0, left: 0, right: 0 } } = props\n\n const { size, axes = [] } = props\n\n margin =\n typeof margin === \"number\"\n ? { top: margin, left: margin, right: margin, bottom: margin }\n : margin\n\n if (layout.type === \"bump\") {\n const adjustedAnnotations = bumpAnnotations(\n adjustableAnnotations,\n layout,\n size,\n props.pointSizeFunction,\n props.labelSizeFunction\n )\n return adjustedAnnotations\n } else if (layout.type === \"marginalia\") {\n const {\n marginOffset,\n orient = \"nearest\",\n characterWidth = 8,\n lineHeight = 20,\n padding = 2,\n axisMarginOverride = {}\n } = layout\n const finalOrientation =\n orient === \"nearest\"\n ? [\"left\", \"right\", \"top\", \"bottom\"]\n : Array.isArray(orient)\n ? orient\n : [orient]\n\n const leftOn = finalOrientation.find((d) => d === \"left\")\n const rightOn = finalOrientation.find((d) => d === \"right\")\n const topOn = finalOrientation.find((d) => d === \"top\")\n const bottomOn = finalOrientation.find((d) => d === \"bottom\")\n\n const leftNodes = []\n const rightNodes = []\n const topNodes = []\n const bottomNodes = []\n\n for (const aNote of adjustableAnnotations) {\n const noteData = aNote.props.noteData\n\n const noteX = noteData.x[0] || noteData.x\n const noteY = noteData.y[0] || noteData.y\n\n const leftDist = leftOn ? noteX : Infinity\n const rightDist = rightOn ? size[0] - noteX : Infinity\n const topDist = topOn ? noteY : Infinity\n const bottomDist = bottomOn ? size[1] - noteY : Infinity\n\n const minDist = Math.min(leftDist, rightDist, topDist, bottomDist)\n\n if (leftDist === minDist) {\n leftNodes.push(aNote)\n } else if (rightDist === minDist) {\n rightNodes.push(aNote)\n } else if (topDist === minDist) {\n topNodes.push(aNote)\n } else {\n bottomNodes.push(aNote)\n }\n }\n\n //Adjust the margins based on which regions are active\n\n const leftForce = new labella.Force({\n minPos:\n axisMarginOverride.top !== undefined\n ? 0 + axisMarginOverride.top\n : 0 - margin.top,\n maxPos:\n axisMarginOverride.bottom !== undefined\n ? size[1] - axisMarginOverride.bottom\n : bottomOn\n ? size[1]\n : size[1] + margin.bottom\n })\n .nodes(\n leftNodes.map((d) => {\n const noteY = d.props.noteData.y[0] || d.props.noteData.y\n return new labella.Node(\n noteY,\n noteDataHeight(\n d.props.noteData,\n characterWidth,\n lineHeight,\n layoutNoteHeight\n ) + padding\n )\n })\n )\n .compute()\n\n const rightForce = new labella.Force({\n minPos:\n axisMarginOverride.top !== undefined\n ? 0 + axisMarginOverride.top\n : topOn\n ? 0\n : 0 - margin.top,\n maxPos:\n axisMarginOverride.bottom !== undefined\n ? size[1] - axisMarginOverride.bottom\n : size[1] + margin.bottom\n })\n .nodes(\n rightNodes.map((d) => {\n const noteY = d.props.noteData.y[0] || d.props.noteData.y\n return new labella.Node(\n noteY,\n noteDataHeight(\n d.props.noteData,\n characterWidth,\n lineHeight,\n layoutNoteHeight\n ) + padding\n )\n })\n )\n .compute()\n\n const topForce = new labella.Force({\n minPos:\n axisMarginOverride.left !== undefined\n ? 0 + axisMarginOverride.left\n : leftOn\n ? 0\n : 0 - margin.left,\n maxPos:\n axisMarginOverride.right !== undefined\n ? size[0] - axisMarginOverride.right\n : size[0] + margin.right\n })\n .nodes(\n topNodes.map((d) => {\n const noteX = d.props.noteData.x[0] || d.props.noteData.x\n return new labella.Node(\n noteX,\n noteDataWidth(d.props.noteData, characterWidth, layoutNoteWidth) +\n padding\n )\n })\n )\n .compute()\n\n const bottomForce = new labella.Force({\n minPos:\n axisMarginOverride.left !== undefined\n ? 0 + axisMarginOverride.left\n : 0 - margin.left,\n maxPos:\n axisMarginOverride.right !== undefined\n ? size[0] - axisMarginOverride.right\n : rightOn\n ? size[0]\n : size[0] + margin.right\n })\n .nodes(\n bottomNodes.map((d) => {\n const noteX = d.props.noteData.x[0] || d.props.noteData.x\n return new labella.Node(\n noteX,\n noteDataWidth(d.props.noteData, characterWidth, layoutNoteWidth) +\n padding\n )\n })\n )\n .compute()\n\n const bottomOffset = Math.max(\n ...bottomNodes.map(\n (d) =>\n noteDataHeight(\n d.props.noteData,\n characterWidth,\n lineHeight,\n layoutNoteHeight\n ) + padding\n )\n )\n const topOffset = Math.max(\n ...topNodes.map(\n (d) =>\n noteDataHeight(\n d.props.noteData,\n characterWidth,\n lineHeight,\n layoutNoteHeight\n ) + padding\n )\n )\n const leftOffset = Math.max(\n ...leftNodes.map(\n (d) =>\n noteDataWidth(d.props.noteData, characterWidth, layoutNoteWidth) +\n padding\n )\n )\n const rightOffset = Math.max(\n ...rightNodes.map(\n (d) =>\n noteDataWidth(d.props.noteData, characterWidth, layoutNoteWidth) +\n padding\n )\n )\n\n // const nodeOffsetHeight = Math.max()\n\n const leftSortedNodes = leftForce.nodes()\n const rightSortedNodes = rightForce.nodes()\n const topSortedNodes = topForce.nodes()\n const bottomSortedNodes = bottomForce.nodes()\n\n leftNodes.forEach((note, i) => {\n const x =\n 0 -\n leftSortedNodes[i].layerIndex * leftOffset -\n marginOffsetFn(\"left\", axes, marginOffset)\n\n const y = leftSortedNodes[i].currentPos\n note.props.noteData.nx = x\n note.props.noteData.ny = y\n\n if (note.props.noteData.note && !React.isValidElement(note)) {\n note.props.noteData.note.orientation =\n note.props.noteData.note.orientation || \"leftRight\"\n note.props.noteData.note.align =\n note.props.noteData.note.align || \"right\"\n }\n })\n\n rightNodes.forEach((note, i) => {\n const x =\n size[0] +\n rightSortedNodes[i].layerIndex * rightOffset +\n marginOffsetFn(\"right\", axes, marginOffset)\n const y = rightSortedNodes[i].currentPos\n\n note.props.noteData.nx = x\n note.props.noteData.ny = y\n\n if (note.props.noteData.note && !React.isValidElement(note)) {\n note.props.noteData.note.orientation =\n note.props.noteData.note.orientation || \"leftRight\"\n note.props.noteData.note.align =\n note.props.noteData.note.align || \"left\"\n }\n })\n\n topNodes.forEach((note, i) => {\n const x = topSortedNodes[i].currentPos\n const y =\n 0 -\n topSortedNodes[i].layerIndex * topOffset -\n marginOffsetFn(\"top\", axes, marginOffset)\n\n note.props.noteData.nx = x\n note.props.noteData.ny = y\n })\n\n bottomNodes.forEach((note, i) => {\n const x = bottomSortedNodes[i].currentPos\n const y =\n size[1] +\n bottomSortedNodes[i].layerIndex * bottomOffset +\n marginOffsetFn(\"bottom\", axes, marginOffset)\n\n note.props.noteData.nx = x\n note.props.noteData.ny = y\n })\n\n return adjustableAnnotations\n }\n return adjustableAnnotations\n}\n\nconst generateSVGAnnotations = (\n props: AnnotationLayerProps,\n annotations: Object[]\n): NoteType[] => {\n const renderedAnnotations = annotations\n .map((d, i) => props.svgAnnotationRule(d, i, props))\n .filter((d) => d !== null && d !== undefined)\n\n return renderedAnnotations\n}\n\nconst generateHTMLAnnotations = (\n props: AnnotationLayerProps,\n annotations: Object[]\n): Object[] => {\n const renderedAnnotations = annotations\n .map((d, i) => props.htmlAnnotationRule(d, i, props))\n .filter((d) => d !== null && d !== undefined)\n\n return renderedAnnotations\n}\n\nconst createAnnotations = (\n props: AnnotationLayerProps,\n state: AnnotationLayerState\n) => {\n let adjustedAnnotations = state.adjustedAnnotations,\n adjustableAnnotationsKey = state.adjustedAnnotationsKey,\n adjustableAnnotations = state.adjustableAnnotations,\n fixedAnnotations = state.fixedAnnotations\n\n let renderedSVGAnnotations = []\n let renderedHTMLAnnotations = []\n\n const adjustedAnnotationsKey = state.adjustedAnnotationsKey,\n adjustedAnnotationsDataVersion = state.adjustedAnnotationsDataVersion\n\n const {\n annotations,\n annotationHandling = false,\n size,\n svgAnnotationRule,\n htmlAnnotationRule\n } = props\n\n const annotationProcessor: AnnotationHandling =\n typeof annotationHandling === \"object\"\n ? annotationHandling\n : { layout: { type: annotationHandling }, dataVersion: \"\" }\n\n const { dataVersion = \"\" } = annotationProcessor\n\n if (svgAnnotationRule) {\n const initialSVGAnnotations: NoteType[] = generateSVGAnnotations(\n props,\n annotations\n )\n\n adjustableAnnotationsKey = keyFromSVGAnnotations(\n initialSVGAnnotations,\n annotationProcessor,\n size\n )\n\n if (annotationHandling === false) {\n adjustedAnnotations = adjustableAnnotations\n }\n\n if (\n adjustedAnnotations.length !== adjustableAnnotations.length ||\n adjustedAnnotationsKey !== adjustableAnnotationsKey ||\n adjustedAnnotationsDataVersion !== dataVersion\n ) {\n adjustedAnnotations = processAnnotations(\n adjustableAnnotations,\n annotationProcessor,\n props\n )\n } else {\n //Handle when style or other attributes change\n adjustedAnnotations = adjustableAnnotations.map((d: NoteType, i) => {\n const oldAnnotation = adjustedAnnotations[i] as NoteType\n const newNoteData = {\n ...oldAnnotation.props.noteData,\n ...d.props.noteData\n }\n\n return <Annotation key={d.key} noteData={newNoteData} />\n })\n }\n\n renderedSVGAnnotations = [...adjustedAnnotations, ...fixedAnnotations]\n }\n\n if (htmlAnnotationRule) {\n renderedHTMLAnnotations = generateHTMLAnnotations(props, annotations)\n }\n\n return {\n svgAnnotations: renderedSVGAnnotations,\n htmlAnnotations: renderedHTMLAnnotations,\n adjustedAnnotations: adjustedAnnotations,\n adjustedAnnotationsKey: adjustableAnnotationsKey,\n adjustedAnnotationsDataVersion: dataVersion\n }\n}\n\nexport default function AnnotationLayer(props: AnnotationLayerProps) {\n const {\n legendSettings,\n margin,\n size,\n annotations: baseAnnotations,\n annotationHandling\n } = props\n\n const tooltip = useTooltip((store) => {\n return store.tooltip\n })\n\n let annotations =\n tooltip != null ? baseAnnotations.concat(tooltip) : baseAnnotations\n\n let changeTooltip = useTooltip((state) => state.changeTooltip)\n\n const voronoiHover = (d) => {\n changeTooltip(d)\n }\n\n const updatedAnnotationProps: UpdatedAnnotationLayerProps = {\n ...props,\n annotations,\n voronoiHover\n }\n\n const annotationProcessor: AnnotationHandling =\n typeof annotationHandling === \"object\"\n ? annotationHandling\n : { layout: { type: annotationHandling }, dataVersion: \"\" }\n\n const { dataVersion = \"\" } = annotationProcessor\n\n const [adjustedAnnotations, changeAdjustedAnnotations] = useState([])\n const [svgAnnotations, changeSVGAnnotations] = useState([])\n const [htmlAnnotations, changeHTMLAnnotations] = useState([])\n const [adjustedAnnotationsKey, changeAdjustedAnnotationsKey] = useState(\"\")\n const [adjustedAnnotationsDataVersion, changeAdjustedAnnotationsDataVersion] =\n useState(dataVersion)\n\n const initialSVGAnnotations: NoteType[] = generateSVGAnnotations(\n updatedAnnotationProps,\n annotations\n )\n\n const adjustableAnnotations = initialSVGAnnotations.filter(\n (d) => d.props && d.props.noteData && !d.props.noteData.fixedPosition\n )\n\n const updatedAnnotationsKey = keyFromSVGAnnotations(\n adjustableAnnotations,\n annotationProcessor,\n size\n )\n\n useEffect(() => {\n const fixedAnnotations = initialSVGAnnotations.filter(\n (d) => !d.props || !d.props.noteData || d.props.noteData.fixedPosition\n )\n\n const updatedState = createAnnotations(updatedAnnotationProps, {\n adjustedAnnotations,\n adjustedAnnotationsKey,\n adjustedAnnotationsDataVersion,\n adjustableAnnotations,\n fixedAnnotations\n })\n\n changeAdjustedAnnotations(updatedState.adjustedAnnotations)\n changeAdjustedAnnotationsKey(updatedState.adjustedAnnotationsKey)\n changeAdjustedAnnotationsDataVersion(\n updatedState.adjustedAnnotationsDataVersion\n )\n changeSVGAnnotations(updatedState.svgAnnotations)\n changeHTMLAnnotations(updatedState.htmlAnnotations) \n }, [\n updatedAnnotationsKey,\n dataVersion,\n annotations.length,\n annotations.map((a) => safeStringify(a)).join(\"-\")\n ])\n\n let renderedLegend\n if (legendSettings) {\n const positionHash = {\n left: [15, 15],\n right: [size[0] + 15, 15]\n }\n const { position = \"right\", title = \"Legend\" } = legendSettings\n const legendPosition = positionHash[position]\n renderedLegend = (\n <g transform={`translate(${legendPosition.join(\",\")})`}>\n <Legend {...legendSettings} title={title} position={position} />\n </g>\n )\n }\n\n // If there are no annotations but we have a legend, render just the legend\n if (annotations.length === 0 && !legendSettings) {\n return null\n }\n\n return (\n <div\n className=\"annotation-layer\"\n style={{\n position: \"absolute\",\n pointerEvents: \"none\",\n background: \"none\"\n }}\n >\n <svg\n className=\"annotation-layer-svg\"\n height={size[1]}\n width={size[0]}\n style={{\n background: \"none\",\n pointerEvents: \"none\",\n position: \"absolute\",\n left: `${margin.left}px`,\n top: `${margin.top}px`,\n overflow: \"visible\"\n }}\n >\n <g>\n {renderedLegend}\n {svgAnnotations}\n </g>\n </svg>\n <div\n className=\"annotation-layer-html\"\n style={{\n background: \"none\",\n pointerEvents: \"none\",\n position: \"absolute\",\n height: `${size[1]}px`,\n width: `${size[0]}px`,\n left: `${margin.left}px`,\n top: `${margin.top}px`\n }}\n >\n {htmlAnnotations}\n </div>\n </div>\n )\n}\n","import { sum } from \"d3-array\"\n\nimport { findFirstAccessorValue } from \"../data/multiAccessorUtils\"\n\nimport {\n ProjectedLine,\n ProjectedPoint,\n RawLine,\n RawSummary\n} from \"../types/generalTypes\"\nimport { AnnotationType } from \"../types/annotationTypes\"\n\nconst datesForUnique = (d) => (d instanceof Date ? d.getTime() : d)\n\ntype SummaryProjectionTypes = {\n data: Array<RawSummary>\n summaryDataAccessor: Array<Function>\n xAccessor: Array<Function>\n yAccessor: Array<Function>\n}\n\ntype LineProjectionTypes = {\n data: Array<RawLine>\n lineDataAccessor: Array<Function>\n xProp: string\n xPropTop?: string\n xPropBottom?: string\n yProp: string\n yPropTop?: string\n yPropBottom?: string\n xAccessor: Array<Function>\n yAccessor: Array<Function>\n}\n\ntype DifferenceLineProps = {\n data: Array<ProjectedLine>\n yProp: string\n yPropTop: string\n yPropBottom: string\n}\n\ntype StackedAreaTypes = {\n type: string\n data: Array<ProjectedLine>\n xProp: string\n yProp: string\n yPropMiddle: string\n sort?: (a: ProjectedLine, b: ProjectedLine) => number\n yPropTop: string\n yPropBottom: string\n}\n\ntype CumulativeLineTypes = {\n type: string\n data: Array<ProjectedLine>\n yPropMiddle: string\n yPropTop: string\n yPropBottom: string\n y1?: Function\n}\n\ntype LineChartTypes = {\n data: Array<ProjectedLine>\n y1?: Function\n x1?: Function\n yPropTop: string\n yPropMiddle: string\n yPropBottom: string\n xPropTop: string\n xPropMiddle: string\n xPropBottom: string\n}\n\nexport const projectSummaryData = ({\n data,\n summaryDataAccessor,\n xAccessor,\n yAccessor\n}: SummaryProjectionTypes) => {\n const projectedData = []\n summaryDataAccessor.forEach((actualSummaryAccessor) => {\n xAccessor.forEach((actualXAccessor) => {\n yAccessor.forEach((actualYAccessor) => {\n const projection = (d: Object) =>\n actualSummaryAccessor(d).map((p, q) => [\n actualXAccessor(p, q),\n actualYAccessor(p, q)\n ])\n\n data.forEach((d) => {\n projectedData.push({\n ...d,\n _baseData: actualSummaryAccessor(d),\n _xyfCoordinates: projection(d)\n })\n })\n })\n })\n })\n\n return projectedData\n}\n\nexport const projectLineData = ({\n data,\n lineDataAccessor,\n xProp,\n xPropTop,\n xPropBottom,\n yProp,\n yPropTop,\n yPropBottom,\n xAccessor,\n yAccessor\n}: LineProjectionTypes) => {\n if (!Array.isArray(data)) {\n data = [data]\n }\n const projectedLine: Array<ProjectedLine> = []\n\n lineDataAccessor.forEach((actualLineAccessor, lineIndex) => {\n xAccessor.forEach((actualXAccessor, xIndex) => {\n yAccessor.forEach((actualYAccessor, yIndex) => {\n data.forEach((d: ProjectedLine) => {\n const originalLineData = { ...d, xIndex, yIndex, lineIndex }\n\n originalLineData.data = actualLineAccessor(d).map((p, q) => {\n const originalCoords = { data: p }\n\n originalCoords[xProp] = actualXAccessor(p, q)\n originalCoords[xPropTop] = originalCoords[xProp]\n originalCoords[xPropBottom] = originalCoords[xProp]\n originalCoords[yProp] = actualYAccessor(p, q)\n originalCoords[yPropTop] = originalCoords[yProp]\n originalCoords[yPropBottom] = originalCoords[yProp]\n\n return originalCoords\n })\n originalLineData.key = originalLineData.key || projectedLine.length\n projectedLine.push(originalLineData)\n })\n })\n })\n })\n\n return projectedLine\n}\n\nexport const differenceLine = ({\n data,\n yProp,\n yPropTop,\n yPropBottom\n}: DifferenceLineProps) => {\n data.forEach((l, i) => {\n l.data.forEach((point, q) => {\n const otherLine = i === 0 ? 1 : 0\n if (point[yProp] > data[otherLine].data[q][yProp]) {\n point[yPropBottom] = data[otherLine].data[q][yProp]\n point[yPropTop] = point[yProp]\n } else {\n point[yPropTop] = point[yProp]\n point[yPropBottom] = point[yProp]\n }\n })\n })\n\n return data\n}\n\nexport const stackedArea = ({\n type = \"stackedarea\",\n data,\n xProp,\n yProp,\n yPropMiddle,\n sort,\n yPropTop,\n yPropBottom\n}: StackedAreaTypes) => {\n const valueMap = new Map()\n const lineSums = data.map(() => 0)\n\n let lineIndex = 0\n for (const line of data) {\n /*\n After we calculate this, we then sort the lines (and the value used for the sorting is in this for loop)\n So, we need to know their original index order in order to use the naively populated coordinate array in valueMap\n Otherwise the coordinates in the map will be in different order than the sorted order of the lines\n */\n line.__lineIndex = lineIndex\n for (const coord of line.data) {\n const coordX = datesForUnique(coord[xProp])\n lineSums[lineIndex] += coord[yProp]\n if (!valueMap.has(coordX)) {\n valueMap.set(coordX, [])\n }\n valueMap.get(coordX)[lineIndex] = coord\n }\n lineIndex++\n }\n\n let stackSort = (a, b) => lineSums[b.key] - lineSums[a.key]\n if (type === \"stackedpercent-invert\" || type === \"stackedarea-invert\") {\n stackSort = (a, b) => lineSums[a.key] - lineSums[b.key]\n }\n sort = sort === undefined ? stackSort : sort\n\n if (sort !== null) {\n data = data.sort(sort)\n }\n\n const lineIndexSortLookup = data.map((line) => line.__lineIndex)\n\n for (const [, coordsAtX] of valueMap) {\n let negativeOffset = 0\n let positiveOffset = 0\n\n const positiveStepTotal = sum(coordsAtX, (d) =>\n d?.[yProp] > 0 ? d[yProp] : 0\n )\n const negativeStepTotal = sum(coordsAtX, (d) =>\n d?.[yProp] < 0 ? d[yProp] : 0\n )\n\n for (const newIndex of lineIndexSortLookup) {\n const l = coordsAtX[newIndex]\n if (l) {\n if (l[yProp] < 0) {\n if (\n type === \"linepercent\" ||\n type === \"stackedpercent\" ||\n type === \"stackedpercent-invert\"\n ) {\n const percent = l[yProp] / negativeStepTotal\n l.percent = percent\n if (type === \"linepercent\") {\n l[yPropBottom] =\n l[yPropBottom] =\n l[yPropTop] =\n l[yPropMiddle] =\n percent\n } else {\n const adjustment = negativeStepTotal >= 0 ? 0 : percent\n l[yPropBottom] =\n negativeStepTotal === 0\n ? 0\n : -(negativeOffset / negativeStepTotal)\n l[yPropTop] = l[yPropBottom] - adjustment\n l[yPropMiddle] = l[yPropBottom] - adjustment / 2\n }\n } else {\n l[yPropBottom] = negativeOffset\n l[yPropTop] = negativeOffset + l[yProp]\n l[yPropMiddle] = negativeOffset + l[yProp] / 2\n }\n negativeOffset += l[yProp]\n } else {\n if (\n type === \"linepercent\" ||\n type === \"stackedpercent\" ||\n type === \"stackedpercent-invert\"\n ) {\n const percent = l[yProp] / positiveStepTotal\n l.percent = percent\n\n if (type === \"linepercent\") {\n l[yPropBottom] = l[yPropTop] = l[yPropMiddle] = percent\n } else {\n const adjustment = positiveStepTotal <= 0 ? 0 : percent\n l[yPropBottom] =\n positiveStepTotal === 0 ? 0 : positiveOffset / positiveStepTotal\n l[yPropTop] = l[yPropBottom] + adjustment\n l[yPropMiddle] = l[yPropBottom] + adjustment / 2\n }\n } else {\n l[yPropBottom] = positiveOffset\n l[yPropTop] = positiveOffset + l[yProp]\n l[yPropMiddle] = positiveOffset + l[yProp] / 2\n }\n positiveOffset += l[yProp]\n }\n }\n }\n }\n\n return data\n}\n\nexport const lineChart = ({\n data,\n y1,\n x1,\n yPropTop,\n yPropMiddle,\n yPropBottom,\n xPropTop,\n xPropMiddle,\n xPropBottom\n}: LineChartTypes) => {\n if (y1) {\n for (const line of data) {\n for (const point of line.data) {\n point[yPropBottom] = y1(point)\n // Use top position for hover so overlapping-area hover points\n // align with the visible line rather than compressing toward the baseline.\n point[yPropMiddle] = point[yPropTop]\n }\n }\n }\n\n if (x1) {\n for (const line of data) {\n for (const point of line.data) {\n point[xPropBottom] = x1(point)\n point[xPropMiddle] = (point[xPropBottom] + point[xPropTop]) / 2\n }\n }\n }\n\n return data\n}\n\nexport const cumulativeLine = ({\n data,\n y1,\n yPropTop,\n yPropMiddle,\n yPropBottom,\n type = \"cumulative\"\n}: CumulativeLineTypes) => {\n for (const line of data) {\n let cumulativeValue = 0\n const dataArray =\n type === \"cumulative-reverse\" ? line.data.reverse() : line.data\n\n for (const point of dataArray) {\n cumulativeValue += point[yPropTop]\n point[yPropBottom] =\n point[yPropTop] =\n point[yPropMiddle] =\n cumulativeValue\n if (y1) {\n point[yPropBottom] = y1(point)\n point[yPropMiddle] = point[yPropBottom] + point[yPropTop] / 2\n }\n }\n }\n\n return data\n}\n\nexport const bumpChart = ({\n type = \"bumpline\",\n data,\n xProp,\n yProp,\n yPropMiddle,\n yPropTop,\n yPropBottom\n}: StackedAreaTypes) => {\n const uniqXValues = new Map()\n for (const line of data) {\n for (const point of line.data) {\n const xValue = datesForUnique(point[xProp])\n if (!uniqXValues.has(xValue)) {\n uniqXValues.set(xValue, [])\n }\n uniqXValues.get(xValue).push(point)\n }\n }\n\n let bumpSort = (a, b) => {\n if (a[yProp] > b[yProp]) {\n return 1\n }\n if (a[yProp] < b[yProp]) {\n return -1\n }\n return -1\n }\n if (type === \"bumparea-invert\" || type === \"bumpline-invert\") {\n bumpSort = (a, b) => {\n if (a[yProp] < b[yProp]) {\n return 1\n }\n if (a[yProp] > b[yProp]) {\n return -1\n }\n return -1\n }\n }\n\n for (const [, pointsAtXArray] of uniqXValues) {\n let negativeOffset = 0\n let positiveOffset = 0\n\n pointsAtXArray.sort(bumpSort)\n\n let rank = 1\n for (const point of pointsAtXArray) {\n point._XYFrameRank\n if (type === \"bumparea\" || type === \"bumparea-invert\") {\n if (point[yProp] < 0) {\n point[yPropTop] = negativeOffset + point[yProp]\n point[yPropMiddle] = negativeOffset + point[yProp] / 2\n point[yPropBottom] = negativeOffset\n negativeOffset += point[yProp]\n } else {\n point[yPropTop] = positiveOffset + point[yProp]\n point[yPropMiddle] = positiveOffset + point[yProp] / 2\n point[yPropBottom] = positiveOffset\n positiveOffset += point[yProp]\n }\n } else {\n point[yProp] = rank\n point[yPropTop] = rank\n point[yPropBottom] = rank\n }\n rank++\n }\n }\n\n return data\n}\n\nexport const dividedLine = (\n parameters: Function,\n points: Array<Object>,\n searchIterations: number = 10\n) => {\n let currentParameters = parameters(points[0], 0)\n let currentPointsArray = []\n const dividedLinesData = [\n { key: currentParameters, points: currentPointsArray }\n ]\n points.forEach((point, pointI) => {\n const newParameters = parameters(point, pointI)\n\n let matchingParams = newParameters === currentParameters\n const stringNewParams = JSON.stringify(newParameters)\n const stringCurrentParams = JSON.stringify(currentParameters)\n\n if (typeof currentParameters === \"object\") {\n matchingParams = stringNewParams === stringCurrentParams\n }\n\n if (matchingParams) {\n currentPointsArray.push(point)\n } else {\n const lastPoint = currentPointsArray[currentPointsArray.length - 1]\n let pointA = lastPoint\n let pointB = point\n let stringBParams = stringNewParams\n\n let x = 0\n while (x < searchIterations && stringNewParams === stringBParams) {\n const keys = Object.keys(pointA)\n const findPoints = simpleSearchFunction({\n pointA,\n pointB,\n currentParameters,\n parameters,\n keys\n })\n pointA = findPoints[0]\n pointB = findPoints[1]\n stringBParams = JSON.stringify(parameters(pointB))\n x++\n }\n currentPointsArray.push(pointB)\n currentPointsArray = [pointB, point]\n dividedLinesData.push({ key: newParameters, points: currentPointsArray })\n currentParameters = newParameters\n }\n })\n return dividedLinesData\n}\n\nfunction simpleSearchFunction({\n pointA,\n pointB,\n currentParameters,\n parameters,\n keys\n}: {\n pointA: Object\n pointB: Object\n currentParameters: Object\n parameters: Function\n keys: Array<string>\n}) {\n const betweenPoint = {}\n keys.forEach((key) => {\n betweenPoint[key] =\n typeof pointA[key] === \"number\"\n ? (pointA[key] + pointB[key]) / 2\n : undefined\n })\n const stringBetween = JSON.stringify(parameters(betweenPoint))\n const stringCurrent = JSON.stringify(currentParameters)\n\n if (stringBetween === stringCurrent) {\n return [betweenPoint, pointB]\n }\n return [pointA, betweenPoint]\n}\n\nexport function funnelize({\n data,\n steps,\n key\n}: {\n data: Array<Object>\n steps: Array<string>\n key: string\n}) {\n const funnelData = []\n if (!Array.isArray(data)) {\n data = [data]\n }\n if (!steps) {\n steps = data.map((d) => Object.keys(d)).reduce((a, b) => a.concat(b), [])\n }\n\n data.forEach((datum, i) => {\n const datumKey = key ? datum[key] : i\n steps.forEach((step) => {\n const funnelDatum = { funnelKey: datumKey, stepName: \"\", stepValue: 0 }\n funnelDatum.stepName = step\n funnelDatum.stepValue = datum[step] ? datum[step] : 0\n funnelData.push(funnelDatum)\n })\n })\n\n return funnelData\n}\n\n","export const projectedX = \"x\"\nexport const projectedY = \"y\"\nexport const projectedYMiddle = \"yMiddle\"\nexport const projectedYTop = \"yTop\"\nexport const projectedYBottom = \"yBottom\"\nexport const projectedXMiddle = \"xMiddle\"\nexport const projectedXTop = \"xTop\"\nexport const projectedXBottom = \"xBottom\"\n","import { contourDensity } from \"d3-contour\"\nimport { scaleLinear } from \"d3-scale\"\n\nfunction shapeBounds(coordinates) {\n let left = [Infinity, 0]\n let right = [-Infinity, 0]\n let top = [0, Infinity]\n let bottom = [0, -Infinity]\n coordinates.forEach((d) => {\n left = d[0] < left[0] ? d : left\n right = d[0] > right[0] ? d : right\n bottom = d[1] > bottom[1] ? d : bottom\n top = d[1] < top[1] ? d : top\n })\n\n return {\n center: [(left[0] + right[0]) / 2, (top[1] + bottom[1]) / 2],\n top,\n left,\n right,\n bottom\n }\n}\n\nexport function contouring({ summaryType, data, finalXExtent, finalYExtent }) {\n let projectedSummaries = []\n if (!summaryType.type) {\n summaryType = { type: summaryType }\n }\n\n const {\n resolution = 500,\n thresholds = 10,\n bandwidth = 20,\n neighborhood\n } = summaryType\n\n const xScale = scaleLinear()\n .domain(finalXExtent)\n .rangeRound([0, resolution])\n .nice()\n const yScale = scaleLinear()\n .domain(finalYExtent)\n .rangeRound([resolution, 0])\n .nice()\n\n data.forEach((contourData) => {\n let contourProjectedSummaries = contourDensity()\n .size([resolution, resolution])\n .x((d) => xScale(d[0]))\n .y((d) => yScale(d[1]))\n .thresholds(thresholds)\n .bandwidth(bandwidth)(contourData._xyfCoordinates)\n\n if (neighborhood) {\n contourProjectedSummaries = [contourProjectedSummaries[0]]\n }\n\n const max = Math.max(...contourProjectedSummaries.map((d) => d.value))\n\n contourProjectedSummaries.forEach((summary) => {\n summary.parentSummary = contourData\n summary.bounds = []\n summary.percent = summary.value / max\n summary.coordinates.forEach((poly) => {\n poly.forEach((subpoly, i) => {\n poly[i] = subpoly.map((coordpair) => {\n coordpair = [\n xScale.invert(coordpair[0]),\n yScale.invert(coordpair[1])\n ]\n return coordpair\n })\n //Only push bounds for the main poly, not its interior rings, otherwise you end up labeling interior cutouts\n if (i === 0) {\n summary.bounds.push(shapeBounds(poly[i]))\n }\n })\n })\n })\n projectedSummaries = [...projectedSummaries, ...contourProjectedSummaries]\n })\n\n return projectedSummaries\n}\n","import * as React from \"react\"\nimport { hexbin } from \"d3-hexbin\"\nimport { scaleLinear } from \"d3-scale\"\nimport { ProjectedPoint } from \"../types/generalTypes\"\nimport { SummaryLayoutType } from \"../types/xyTypes\"\n\ninterface BinArray {\n [position: number]: number\n x?: number\n y?: number\n}\n\nexport function hexbinning({\n preprocess = true,\n processedData = false,\n summaryType: baseSummaryType,\n data: baseData,\n finalXExtent: baseXExtent,\n finalYExtent: baseYExtent,\n size,\n xScaleType = scaleLinear(),\n yScaleType = scaleLinear(),\n margin,\n styleFn,\n classFn,\n renderFn,\n chartSize\n}: SummaryLayoutType) {\n let finalXExtent = baseXExtent\n let finalYExtent = baseYExtent\n\n if (!finalXExtent) {\n const xData = baseData.coordinates.map((p) => p.x)\n finalXExtent = [Math.min(...xData), Math.max(...xData)]\n }\n\n if (!finalYExtent) {\n const yData = baseData.coordinates.map((p) => p.y)\n finalYExtent = [Math.min(...yData), Math.max(...yData)]\n }\n\n if (processedData && baseData) {\n return baseData.coordinates\n }\n\n let projectedSummaries = []\n let summaryType: Record<string, any>\n if (!baseSummaryType.type) {\n summaryType = { type: summaryType }\n } else {\n summaryType = baseSummaryType\n }\n\n const {\n bins = 0.05,\n cellPx,\n binValue = (d) => d.length,\n binMax,\n customMark\n } = summaryType\n\n if (baseData.coordinates && !baseData._xyfCoordinates) {\n baseData._xyfCoordinates = baseData.coordinates.map((d) => [d.x, d.y])\n }\n\n const data = Array.isArray(baseData) ? baseData : [baseData]\n\n const hexBinXScale = xScaleType.domain(finalXExtent).range([0, size[0]])\n const hexBinYScale = yScaleType.domain(finalYExtent).range([0, size[1]])\n\n const actualResolution =\n (cellPx && cellPx / 2) || ((bins > 1 ? 1 / bins : bins) * size[0]) / 2\n\n const hexbinner = hexbin()\n .x((d) => hexBinXScale(d._xyfPoint[0]))\n .y((d) => hexBinYScale(d._xyfPoint[1]))\n .radius(actualResolution)\n .size(size)\n\n let hexMax\n const allHexes: ProjectedPoint[] = hexbinner.centers()\n\n data.forEach((hexbinData) => {\n hexMax = 0\n const hexes = hexbinner(\n hexbinData._xyfCoordinates.map((d, i) => ({\n _xyfPoint: d,\n ...hexbinData.coordinates[i]\n }))\n )\n\n const centerHash = {}\n\n hexes.forEach((d) => {\n centerHash[`${parseInt(d.x)}-${parseInt(d.y)}`] = true\n })\n\n allHexes.forEach((hexCenter) => {\n if (!centerHash[`${parseInt(hexCenter[0])}-${parseInt(hexCenter[1])}`]) {\n const newHex: BinArray = []\n newHex.x = hexCenter[0]\n newHex.y = hexCenter[1]\n hexes.push(newHex)\n }\n })\n\n hexMax = Math.max(...hexes.map((d) => binValue(d)))\n\n if (binMax) {\n binMax(hexMax)\n }\n\n const hexBase = [\n [0, -1],\n [0.866, -0.5],\n [0.866, 0.5],\n [0, 1],\n [-0.866, 0.5],\n [-0.866, -0.5]\n ]\n\n const hexWidth = hexBinXScale.invert(actualResolution) - finalXExtent[0]\n const hexHeight = hexBinYScale.invert(actualResolution) - finalYExtent[0]\n\n const hexacoordinates = hexBase.map((d) => [\n d[0] * hexWidth,\n d[1] * hexHeight\n ])\n\n const hexbinProjectedSummaries = hexes.map((d: Record<string, any>) => {\n const hexValue = binValue(d)\n const gx = d.x\n const gy = d.y\n d.x = hexBinXScale.invert(d.x)\n d.y = hexBinYScale.invert(d.y)\n const percent = hexValue / hexMax\n return {\n customMark: customMark && (\n <g transform={`translate(${gx},${size[1] - gy})`}>\n {customMark({\n d: {\n ...d,\n binItems: d,\n percent,\n value: hexValue,\n radius: actualResolution,\n hexCoordinates: hexBase.map((d) => [\n d[0] * actualResolution,\n d[1] * actualResolution\n ])\n },\n margin,\n styleFn,\n classFn,\n renderFn,\n chartSize,\n adjustedSize: size\n })}\n </g>\n ),\n _xyfCoordinates: hexacoordinates.map((p) => [p[0] + d.x, p[1] + d.y]),\n value: hexValue,\n percent,\n data: d,\n parentSummary: hexbinData,\n centroid: true\n }\n })\n projectedSummaries = [...projectedSummaries, ...hexbinProjectedSummaries]\n })\n\n if (preprocess) {\n projectedSummaries.forEach((d) => {\n d.x = d.data.x\n d.y = d.data.y\n })\n return {\n type: \"hexbin\",\n processedData: true,\n coordinates: projectedSummaries,\n binMax: hexMax\n }\n }\n\n return projectedSummaries\n}\n","import * as React from \"react\"\nimport { scaleLinear } from \"d3-scale\"\nimport regression from \"regression\"\nimport { curveCardinal } from \"d3-shape\"\n\nimport { ProjectedPoint } from \"../types/generalTypes\"\nimport { SummaryLayoutType } from \"../types/xyTypes\"\nimport { ProjectedSummary } from \"../types/generalTypes\"\n\n// Re-export from new locations for backwards compatibility\nexport { contouring } from \"./contourLayout\"\nexport { hexbinning } from \"./hexbinLayout\"\n\nconst generateLineBounds = (\n xydata,\n basedata,\n topBoundingAccessor,\n bottomBoundingAccessor\n) => {\n const tops = xydata.map((d, i) => [\n d[0],\n d[1] + topBoundingAccessor(basedata[i])\n ])\n const bottoms = xydata.map((d, i) => [\n d[0],\n d[1] - bottomBoundingAccessor(basedata[i])\n ])\n return [...tops, ...bottoms.reverse()]\n}\n\nexport function lineBounding({ summaryType, data, defined }) {\n let projectedSummaries = []\n if (!summaryType.type) {\n summaryType = { type: summaryType }\n }\n\n const {\n boundingAccessor,\n topBoundingAccessor = boundingAccessor,\n bottomBoundingAccessor = boundingAccessor\n } = summaryType\n\n data.forEach((lineData) => {\n const definedData = lineData._baseData.map(defined)\n let currentBaseData = []\n let currentXYFC = []\n const boundingPieces = [\n {\n xyf: currentXYFC,\n base: currentBaseData\n }\n ]\n definedData.forEach((d, i) => {\n if (d === true) {\n currentBaseData.push(lineData._baseData[i])\n currentXYFC.push(lineData._xyfCoordinates[i])\n } else if (definedData[i + 1]) {\n currentBaseData = []\n currentXYFC = []\n boundingPieces.push({\n xyf: currentXYFC,\n base: currentBaseData\n })\n }\n })\n\n boundingPieces.forEach(({ xyf, base }) => {\n const boundingProjectedSummary = {\n data: lineData,\n parentSummary: lineData,\n _xyfCoordinates: generateLineBounds(\n xyf,\n base,\n topBoundingAccessor,\n bottomBoundingAccessor\n )\n }\n\n projectedSummaries = [...projectedSummaries, boundingProjectedSummary]\n })\n })\n\n return projectedSummaries\n}\n\nexport function heatmapping({\n preprocess = true,\n processedData = false,\n summaryType: baseSummaryType,\n data: baseData,\n finalXExtent = [\n Math.min(...baseData.coordinates.map((d) => d.x)),\n Math.max(...baseData.coordinates.map((d) => d.x))\n ],\n finalYExtent = [\n Math.min(...baseData.coordinates.map((d) => d.y)),\n Math.max(...baseData.coordinates.map((d) => d.y))\n ],\n size,\n xScaleType = scaleLinear(),\n yScaleType = scaleLinear(),\n margin,\n styleFn,\n classFn,\n renderFn,\n chartSize\n}: SummaryLayoutType) {\n if (processedData && baseData) {\n return baseData.coordinates\n }\n\n if (baseData.coordinates && !baseData._xyfCoordinates) {\n baseData._xyfCoordinates = baseData.coordinates.map((d) => [d.x, d.y])\n }\n\n const data = Array.isArray(baseData) ? baseData : [baseData]\n\n let projectedSummaries: ProjectedSummary[] = []\n\n let summaryType: Record<string, any>\n if (!baseSummaryType.type) {\n summaryType = { type: summaryType }\n } else {\n summaryType = baseSummaryType\n }\n\n const {\n // binGraphic = \"square\",\n binValue = (d) => d.length,\n xBins = summaryType.yBins || 0.05,\n yBins = xBins,\n xCellPx = !summaryType.xBins && summaryType.xCellPx,\n yCellPx = !summaryType.yBins && summaryType.yCellPx,\n customMark,\n binMax\n } = summaryType\n const xBinPercent = xBins < 1 ? xBins : 1 / xBins\n const yBinPercent = yBins < 1 ? yBins : 1 / yBins\n\n const heatmapBinXScale = xScaleType.domain(finalXExtent).range([0, size[0]])\n const heatmapBinYScale = yScaleType.domain(finalYExtent).range([size[1], 0])\n\n const actualResolution = [\n Math.ceil(((xCellPx && xCellPx / size[0]) || xBinPercent) * size[0] * 10) /\n 10,\n Math.ceil(((yCellPx && yCellPx / size[1]) || yBinPercent) * size[1] * 10) /\n 10\n ]\n let maxValue = -Infinity\n\n data.forEach((heatmapData) => {\n const grid = []\n const flatGrid = []\n\n let cell\n let gridColumn\n\n for (let i = 0; Math.ceil(i) < size[0]; i += actualResolution[0]) {\n const x = heatmapBinXScale.invert(i)\n const x1 = heatmapBinXScale.invert(i + actualResolution[0])\n\n gridColumn = []\n grid.push(gridColumn)\n for (let j = 0; Math.ceil(j) < size[1]; j += actualResolution[1]) {\n const y = heatmapBinYScale.invert(j)\n const y1 = heatmapBinYScale.invert(j + actualResolution[1])\n cell = {\n gx: i,\n gy: j,\n gw: actualResolution[0],\n gh: actualResolution[1],\n x: (x + x1) / 2,\n y: (y + y1) / 2,\n binItems: [],\n value: 0,\n _xyfCoordinates: [\n [x, y],\n [x1, y],\n [x1, y1],\n [x, y1]\n ],\n parentSummary: heatmapData\n }\n gridColumn.push(cell)\n flatGrid.push(cell)\n }\n gridColumn.push(cell)\n }\n grid.push(gridColumn)\n\n heatmapData._xyfCoordinates.forEach((d: [number, number], di: number) => {\n const baseX = heatmapBinXScale(d[0]) as number\n const baseY = heatmapBinYScale(d[1]) as number\n\n const xCoordinate = Math.floor(baseX / actualResolution[0])\n const yCoordinate = Math.floor(baseY / actualResolution[1])\n\n if (grid[xCoordinate][yCoordinate]) {\n grid[xCoordinate][yCoordinate].binItems.push(\n heatmapData.coordinates[di]\n )\n }\n })\n\n flatGrid.forEach((d) => {\n d.value = binValue(d.binItems)\n maxValue = Math.max(maxValue, d.value)\n })\n\n flatGrid.forEach((d) => {\n d.percent = d.value / maxValue\n d.customMark = customMark && (\n <g transform={`translate(${d.gx},${d.gy})`}>\n {customMark({\n d,\n margin,\n styleFn,\n classFn,\n renderFn,\n chartSize,\n adjustedSize: size\n })}\n </g>\n )\n })\n\n projectedSummaries = [...projectedSummaries, ...flatGrid]\n })\n if (binMax) {\n binMax(maxValue)\n }\n if (preprocess) {\n const preprocessedSummary: ProjectedSummary = {\n type: \"heatmap\",\n processedData: true,\n _baseData: [],\n _xyfCoordinates: [],\n data: [],\n bounds: [],\n x: 0,\n y: 0,\n coordinates: projectedSummaries,\n binMax: maxValue\n }\n return preprocessedSummary\n }\n\n return projectedSummaries\n}\n\nexport function trendlining({\n preprocess = false,\n summaryType: baseSummaryType,\n data: baseData,\n finalXExtent = [\n Math.min(...baseData.coordinates.map((d) => d.x)),\n Math.max(...baseData.coordinates.map((d) => d.x))\n ],\n xScaleType = scaleLinear()\n}: SummaryLayoutType) {\n if (preprocess) {\n return baseData[0].coordinates\n }\n\n let projectedSummaries = []\n\n let summaryType: Record<string, any>\n if (!baseSummaryType.type) {\n summaryType = { type: summaryType }\n } else {\n summaryType = baseSummaryType\n }\n\n const {\n regressionType: baseRegressionType = \"linear\",\n order = 2,\n precision = 4,\n controlPoints = 20,\n curve = curveCardinal\n } = summaryType\n\n let regressionType = baseRegressionType\n\n if (\n finalXExtent[0] < 0 &&\n (baseRegressionType === \"logarithmic\" ||\n baseRegressionType === \"power\" ||\n baseRegressionType === \"exponential\")\n ) {\n console.error(\n `Cannot use this ${baseRegressionType} regressionType type with value range that goes below 0, defaulting to linear`\n )\n regressionType = \"linear\"\n }\n\n if (baseData.coordinates && !baseData._xyfCoordinates) {\n baseData._xyfCoordinates = baseData.coordinates.map((d) => [d.x, d.y])\n }\n\n const data = Array.isArray(baseData) ? baseData : [baseData]\n\n const xScale = xScaleType.domain([0, 1]).range(finalXExtent)\n\n projectedSummaries = []\n data.forEach((bdata) => {\n const regressionLine = regression[regressionType](\n bdata._xyfCoordinates.map((d) => {\n let x = d[0]\n let y = d[1]\n\n if (typeof x !== \"number\") {\n x = x.getTime()\n }\n if (typeof y !== \"number\") {\n y = y.getTime()\n }\n\n return [x, y]\n }),\n {\n order,\n precision\n }\n )\n const controlStep = 1 / controlPoints\n\n let steps = [0, 1]\n\n if (regressionType !== \"linear\") {\n steps = []\n for (let step = 0; step < 1 + controlStep; step += controlStep) {\n steps.push(step)\n }\n }\n\n const controlPointArray = []\n\n steps.forEach((controlPoint) => {\n controlPointArray.push(regressionLine.predict(xScale(controlPoint)))\n })\n\n projectedSummaries.push({\n centroid: false,\n customMark: undefined,\n data: bdata,\n parentSummary: bdata,\n value: regressionLine.string,\n r2: regressionLine.r2,\n curve,\n _xyfCoordinates: controlPointArray\n })\n })\n\n return projectedSummaries\n}\n\nexport function shapeBounds(coordinates) {\n let left = [Infinity, 0]\n let right = [-Infinity, 0]\n let top = [0, Infinity]\n let bottom = [0, -Infinity]\n coordinates.forEach((d) => {\n left = d[0] < left[0] ? d : left\n right = d[0] > right[0] ? d : right\n bottom = d[1] > bottom[1] ? d : bottom\n top = d[1] < top[1] ? d : top\n })\n\n return {\n center: [(left[0] + right[0]) / 2, (top[1] + bottom[1]) / 2],\n top,\n left,\n right,\n bottom\n }\n}\n","export const extentValue = extent =>\n (extent && extent.extent) || (Array.isArray(extent) && extent) || []\n","import { projectLineData, projectSummaryData } from \"../geometry/lineDrawing\"\nimport {\n projectedX,\n projectedY,\n projectedYTop,\n projectedYMiddle,\n projectedYBottom,\n projectedXBottom,\n projectedXMiddle,\n projectedXTop\n} from \"../constants/coordinateNames\"\nimport {\n differenceLine,\n stackedArea,\n bumpChart,\n lineChart,\n cumulativeLine\n} from \"../geometry/lineDrawing\"\n\nimport {\n contouring,\n hexbinning,\n heatmapping,\n trendlining,\n lineBounding\n} from \"../geometry/areaDrawing\"\nimport { max, min } from \"d3-array\"\n\nimport { extentValue } from \"./unflowedFunctions\"\n\nimport {\n ProjectedPoint,\n ProjectedLine,\n ProjectedSummary,\n ProjectedBin,\n RawSummary,\n RawPoint,\n RawLine,\n LineTypeSettings,\n SummaryTypeSettings,\n ExtentType,\n MarginType\n} from \"../types/generalTypes\"\n\nconst baseDefinedFunction = () => true\n\nconst whichPointsHashY = {\n top: projectedYTop,\n bottom: projectedYBottom,\n orphan: projectedY\n}\n\nconst whichPointsHashX = {\n top: projectedXTop,\n bottom: projectedXBottom,\n orphan: projectedX\n}\n\nconst builtInTransformations = {\n stackedarea: stackedArea,\n \"stackedarea-invert\": stackedArea,\n stackedpercent: stackedArea,\n \"stackedpercent-invert\": stackedArea,\n linepercent: stackedArea,\n difference: differenceLine,\n bumparea: bumpChart,\n bumpline: bumpChart,\n \"bumparea-invert\": bumpChart,\n line: lineChart,\n area: lineChart,\n cumulative: cumulativeLine,\n \"cumulative-reverse\": cumulativeLine\n}\n\ntype validStrFnTypes =\n | boolean\n | string\n | number\n | Record<string, any>\n | Record<string, any>[]\n | RawPoint\n | RawPoint[]\n\nexport function stringToFn<StrFnType extends validStrFnTypes>(\n accessor?:\n | ((args?: Record<string, any>, index?: number) => StrFnType)\n | string\n | StrFnType,\n defaultAccessor?: (arg?: Record<string, any>, i?: number) => StrFnType,\n raw?: boolean\n): (d?: Record<string, any>, i?: number) => StrFnType {\n if (!accessor && defaultAccessor) {\n return defaultAccessor\n } else if (typeof accessor === \"object\") {\n return () => accessor\n } else if (accessor instanceof Function) {\n return accessor\n } else if (raw === true) {\n const castAccessor = accessor as unknown as StrFnType\n return () => castAccessor\n } else if (typeof accessor === \"string\") {\n return (d: Record<string, any>) => (d ? d[accessor] : undefined)\n }\n\n return () => undefined\n}\n\nexport function stringToArrayFn<StrFnType extends validStrFnTypes>(\n accessor?:\n | ((arg?: Record<string, any>, index?: number) => StrFnType)\n | string\n | StrFnType\n | Array<\n | ((arg?: Record<string, any>, index?: number) => StrFnType)\n | string\n | StrFnType\n >,\n defaultAccessor?: (arg?: Record<string, any>, index?: number) => StrFnType,\n raw?: boolean\n): Array<(arg?: Record<string, any>, index?: number) => StrFnType> {\n if (accessor === undefined) {\n return [stringToFn<StrFnType>(undefined, defaultAccessor, raw)]\n }\n let arrayOfAccessors = []\n if (Array.isArray(accessor)) {\n arrayOfAccessors = accessor\n } else {\n arrayOfAccessors = [accessor]\n }\n\n return arrayOfAccessors.map((a) =>\n stringToFn<StrFnType>(a, defaultAccessor, raw)\n )\n}\n\nfunction rebuildFullDatasetWithSummaries(\n fullDataset: Array<ProjectedPoint | ProjectedBin | ProjectedSummary>,\n projectedSummaries: ProjectedSummary[]\n): Array<ProjectedPoint | ProjectedBin | ProjectedSummary> {\n const rebuilt: Array<ProjectedPoint | ProjectedBin | ProjectedSummary> = []\n for (const d of projectedSummaries) {\n rebuilt.push({ ...d })\n }\n for (const d of fullDataset) {\n if (!(d as ProjectedPoint).parentSummary) {\n rebuilt.push(d)\n }\n }\n return rebuilt\n}\n\ntype CalculateDataTypes = {\n lineDataAccessor: Array<Function>\n summaryDataAccessor: Array<Function>\n summaryStyleFn: Function\n summaryClassFn: Function\n summaryRenderModeFn: Function\n xAccessor: Array<Function>\n yAccessor: Array<Function>\n summaries?: Array<RawSummary>\n points?: Array<RawPoint>\n lines?: Array<RawLine>\n lineType: LineTypeSettings\n showLinePoints?: boolean | string\n showSummaryPoints?: boolean\n xExtent?: ExtentType\n yExtent?: ExtentType\n invertX?: boolean\n invertY?: boolean\n summaryType: SummaryTypeSettings\n adjustedSize: Array<number>\n chartSize: Array<number>\n xScaleType: Function\n yScaleType: Function\n margin: MarginType\n defined?: Function\n annotations: object[]\n filterRenderedLines: (\n value: ProjectedLine,\n index: number,\n array: ProjectedLine[]\n ) => any\n filterRenderedSummaries: (\n value: ProjectedSummary,\n index: number,\n array: ProjectedSummary[]\n ) => any\n filterRenderedPoints: (\n value: ProjectedPoint | ProjectedBin | ProjectedSummary,\n index: number,\n array: (ProjectedPoint | ProjectedBin | ProjectedSummary)[]\n ) => any\n}\n\nexport const calculateDataExtent = ({\n lineDataAccessor,\n xAccessor,\n yAccessor,\n summaries,\n points,\n lines,\n lineType,\n showLinePoints,\n showSummaryPoints,\n xExtent,\n yExtent,\n invertX,\n invertY,\n summaryDataAccessor,\n summaryType,\n adjustedSize: size,\n margin,\n summaryStyleFn,\n summaryClassFn,\n summaryRenderModeFn,\n chartSize,\n filterRenderedLines,\n filterRenderedSummaries,\n filterRenderedPoints,\n defined = baseDefinedFunction,\n annotations = []\n}: CalculateDataTypes) => {\n let fullDataset: Array<ProjectedPoint | ProjectedBin | ProjectedSummary> = []\n let initialProjectedLines = []\n\n let projectedPoints: Array<ProjectedPoint> = [],\n projectedLines: Array<ProjectedLine> = [],\n projectedSummaries: Array<ProjectedSummary> = []\n if (points) {\n xAccessor.forEach((actualXAccessor, xIndex) => {\n yAccessor.forEach((actualYAccessor, yIndex) => {\n let i = 0\n for (const d of points) {\n const x = actualXAccessor(d, i)\n const y = actualYAccessor(d, i)\n const projectedPoint = { x, y, data: d, xIndex, yIndex }\n if (Array.isArray(y)) {\n projectedPoint[projectedYBottom] = Math.min(...y)\n projectedPoint[projectedYTop] = Math.max(...y)\n projectedPoint[projectedYMiddle] =\n (projectedPoint[projectedYBottom] +\n projectedPoint[projectedYTop]) /\n 2\n }\n if (Array.isArray(x)) {\n projectedPoint[projectedXBottom] = Math.min(...x)\n projectedPoint[projectedXTop] = Math.max(...x)\n projectedPoint[projectedXMiddle] =\n (projectedPoint[projectedXBottom] +\n projectedPoint[projectedXTop]) /\n 2\n }\n projectedPoints.push(projectedPoint)\n i++\n }\n })\n })\n\n for (const d of projectedPoints) {\n fullDataset.push({\n ...d,\n [projectedX]: d[projectedXTop] || d[projectedXBottom] || d.x,\n [projectedY]: d[projectedYTop] || d[projectedYBottom] || d.y\n })\n }\n }\n if (lines) {\n initialProjectedLines = projectLineData({\n data: lines,\n lineDataAccessor,\n xProp: projectedX,\n xPropTop: projectedXTop,\n xPropBottom: projectedXBottom,\n yProp: projectedY,\n yPropTop: projectedYTop,\n yPropBottom: projectedYBottom,\n xAccessor,\n yAccessor\n })\n\n const optionsObject = {\n xProp: projectedX,\n yProp: projectedY,\n yPropMiddle: projectedYMiddle,\n yPropTop: projectedYTop,\n yPropBottom: projectedYBottom,\n xPropMiddle: projectedXMiddle,\n xPropTop: projectedXTop,\n xPropBottom: projectedXBottom\n }\n\n projectedLines = lineTransformation(\n lineType,\n optionsObject\n )(initialProjectedLines)\n\n for (const d of projectedLines) {\n for (let q = 0; q < d.data.length; q++) {\n const p = d.data[q]\n if (!defined(Object.assign({}, p.data, p), q)) continue\n const mappedP: ProjectedPoint = {\n parentLine: d,\n y: p.y,\n x: p.x,\n xTop: p.xTop,\n xMiddle: p.xMiddle,\n xBottom: p.xBottom,\n yTop: p.yTop,\n yMiddle: p.yMiddle,\n yBottom: p.yBottom,\n data: p.data\n }\n if (p.percent) {\n mappedP.percent = p.percent\n }\n fullDataset.push(mappedP)\n }\n }\n if (showLinePoints) {\n const whichPointsX =\n showLinePoints === true\n ? projectedXMiddle\n : whichPointsHashX[showLinePoints]\n\n const whichPointsY =\n showLinePoints === true\n ? projectedYMiddle\n : whichPointsHashY[showLinePoints]\n\n projectedLines.forEach((d: ProjectedLine) => {\n d.data\n .filter((p, q) => {\n const isDefined = defined(Object.assign({}, p.data, p))\n if (isDefined) {\n if (showLinePoints === \"orphan\") {\n const prePoint = d.data[q - 1]\n const postPoint = d.data[q + 1]\n\n if (\n (!prePoint ||\n !defined(Object.assign({}, prePoint.data, prePoint))) &&\n (!postPoint ||\n !defined(Object.assign({}, postPoint.data, postPoint)))\n ) {\n return true\n } else {\n return false\n }\n } else {\n return true\n }\n } else {\n return false\n }\n })\n .forEach((p) => {\n projectedPoints.push({\n ...p,\n parentLine: d,\n [projectedY]:\n p[whichPointsY] !== undefined\n ? p[whichPointsY]\n : p[projectedYMiddle] !== undefined\n ? p[projectedYMiddle]\n : p[projectedYBottom] !== undefined\n ? p[projectedYBottom]\n : p.y,\n [projectedX]:\n p[whichPointsX] !== undefined\n ? p[whichPointsX]\n : p[projectedXMiddle] !== undefined\n ? p[projectedXMiddle]\n : p[projectedXBottom] !== undefined\n ? p[projectedXBottom]\n : p.y\n })\n })\n })\n }\n }\n\n if (summaries) {\n projectedSummaries = projectSummaryData({\n data: summaries,\n summaryDataAccessor,\n xAccessor,\n yAccessor\n })\n\n projectedSummaries.forEach((d) => {\n const baseData = d._baseData\n\n if (d._xyfCoordinates.length > 0 && d._xyfCoordinates[0][0][0]) {\n d._xyfCoordinates[0].forEach((multi) => {\n if (Array.isArray(multi)) {\n multi\n .map((p, q) =>\n Object.assign({ parentSummary: d }, baseData[q], {\n [projectedX]: p[0],\n [projectedY]: p[1]\n })\n )\n .forEach((e) => {\n if (showSummaryPoints) {\n projectedPoints.push({\n x: 0,\n ...e,\n [projectedY]:\n e[projectedYTop] || e[projectedYBottom] || e[projectedY]\n })\n }\n fullDataset.push({ x: 0, y: 0, ...e })\n })\n }\n })\n } else if (d._xyfCoordinates.length > 0) {\n if (Array.isArray(d._xyfCoordinates)) {\n const coordArray: [number, number][] = d._xyfCoordinates as [\n number,\n number\n ][]\n coordArray\n .map((p, q) => ({\n parentSummary: d,\n ...baseData[q],\n [projectedX]: p[0],\n [projectedY]: p[1]\n }))\n .forEach((e) => {\n if (showSummaryPoints) {\n projectedPoints.push({\n x: 0,\n ...e,\n [projectedY]:\n e[projectedYTop] || e[projectedYBottom] || e[projectedY]\n })\n }\n fullDataset.push({ x: 0, y: 0, ...e })\n })\n }\n }\n })\n }\n\n let suitableXAnnotations = []\n let suitableYAnnotations = []\n\n if (\n xExtent &&\n !Array.isArray(xExtent) &&\n xExtent.includeAnnotations === true\n ) {\n xAccessor.forEach((actualXAccessor) => {\n annotations.forEach((annotation, annotationIndex) => {\n const x = actualXAccessor(annotation, annotationIndex)\n if (isFinite(x)) {\n suitableXAnnotations.push({\n [projectedX]: x\n })\n }\n })\n })\n }\n\n if (\n yExtent &&\n !Array.isArray(yExtent) &&\n yExtent.includeAnnotations === true\n ) {\n yAccessor.forEach((actualYAccessor) => {\n annotations.forEach((annotation, annotationIndex) => {\n const y = actualYAccessor(annotation, annotationIndex)\n if (isFinite(y)) {\n suitableYAnnotations.push({\n [projectedY]: y\n })\n }\n })\n })\n }\n\n // Single-pass extent calculation over fullDataset + annotations\n let xMinVal: number | undefined\n let xMaxVal: number | undefined\n let yMinVal: number | undefined\n let yMaxVal: number | undefined\n\n for (const d of fullDataset) {\n const xLo = d[projectedXBottom] === undefined\n ? d[projectedX]\n : Math.min(d[projectedXTop], d[projectedXBottom])\n const xHi = d[projectedXTop] === undefined\n ? d[projectedX]\n : Math.max(d[projectedXBottom], d[projectedXTop])\n const yLo = d[projectedYBottom] === undefined\n ? d[projectedY]\n : Math.min(d[projectedYTop], d[projectedYBottom])\n const yHi = d[projectedYTop] === undefined\n ? d[projectedY]\n : Math.max(d[projectedYBottom], d[projectedYTop])\n\n if (xLo !== undefined && (xMinVal === undefined || xLo < xMinVal)) xMinVal = xLo\n if (xHi !== undefined && (xMaxVal === undefined || xHi > xMaxVal)) xMaxVal = xHi\n if (yLo !== undefined && (yMinVal === undefined || yLo < yMinVal)) yMinVal = yLo\n if (yHi !== undefined && (yMaxVal === undefined || yHi > yMaxVal)) yMaxVal = yHi\n }\n\n for (const d of suitableXAnnotations) {\n const v = d[projectedX]\n if (v !== undefined && (xMinVal === undefined || v < xMinVal)) xMinVal = v\n if (v !== undefined && (xMaxVal === undefined || v > xMaxVal)) xMaxVal = v\n }\n\n for (const d of suitableYAnnotations) {\n const v = d[projectedY]\n if (v !== undefined && (yMinVal === undefined || v < yMinVal)) yMinVal = v\n if (v !== undefined && (yMaxVal === undefined || v > yMaxVal)) yMaxVal = v\n }\n\n const calculatedXExtent = [xMinVal, xMaxVal]\n const calculatedYExtent = [yMinVal, yMaxVal]\n\n const actualXExtent: number[] = extentValue(xExtent)\n const actualYExtent: number[] = extentValue(yExtent)\n\n const xMin =\n actualXExtent && actualXExtent[0] !== undefined\n ? actualXExtent[0]\n : calculatedXExtent[0]\n const xMax =\n actualXExtent && actualXExtent[1] !== undefined\n ? actualXExtent[1]\n : calculatedXExtent[1]\n\n const yMin =\n actualYExtent && actualYExtent[0] !== undefined\n ? actualYExtent[0]\n : calculatedYExtent[0]\n const yMax =\n actualYExtent && actualYExtent[1] !== undefined\n ? actualYExtent[1]\n : calculatedYExtent[1]\n\n let finalYExtent = [yMin, yMax]\n let finalXExtent = [xMin, xMax]\n\n if (invertX && !(actualXExtent && actualXExtent.length === 2)) {\n finalXExtent = [finalXExtent[1], finalXExtent[0]]\n }\n\n if (\n (lineType.type === \"bumpline\" || invertY) &&\n !(actualYExtent && actualYExtent.length === 2)\n ) {\n finalYExtent = [finalYExtent[1], finalYExtent[0]]\n }\n\n if (summaryType.type && summaryType.type === \"contour\") {\n projectedSummaries = contouring({\n summaryType,\n data: projectedSummaries,\n finalXExtent,\n finalYExtent\n })\n } else if (summaryType.type && summaryType.type === \"linebounds\") {\n projectedSummaries = lineBounding({\n summaryType,\n data: projectedSummaries,\n defined\n })\n\n // Expand y extent to include the bounds so they aren't clipped\n if (!(actualYExtent && actualYExtent.length === 2)) {\n for (const summary of projectedSummaries) {\n for (const coord of summary._xyfCoordinates) {\n const yVal = coord[1] as number\n if (yVal !== undefined && isFinite(yVal)) {\n if (yVal < finalYExtent[0]) finalYExtent[0] = yVal\n if (yVal > finalYExtent[1]) finalYExtent[1] = yVal\n }\n }\n }\n }\n } else if (summaryType.type && summaryType.type === \"hexbin\") {\n projectedSummaries = hexbinning({\n summaryType,\n data: projectedSummaries[0],\n processedData: summaries && !!summaries[0].processedData,\n preprocess: false,\n finalXExtent,\n finalYExtent,\n size,\n margin,\n styleFn: summaryStyleFn,\n classFn: summaryClassFn,\n renderFn: summaryRenderModeFn,\n chartSize\n }) as unknown as ProjectedSummary[]\n\n fullDataset = rebuildFullDatasetWithSummaries(fullDataset, projectedSummaries)\n } else if (summaryType.type && summaryType.type === \"heatmap\") {\n projectedSummaries = heatmapping({\n summaryType,\n data: projectedSummaries[0],\n processedData: summaries && !!summaries[0].processedData,\n preprocess: false,\n finalXExtent,\n finalYExtent,\n size,\n margin,\n styleFn: summaryStyleFn,\n classFn: summaryClassFn,\n renderFn: summaryRenderModeFn,\n chartSize\n }) as unknown as ProjectedSummary[]\n\n fullDataset = rebuildFullDatasetWithSummaries(fullDataset, projectedSummaries)\n } else if (summaryType.type && summaryType.type === \"trendline\") {\n projectedSummaries = trendlining({\n summaryType,\n data: projectedSummaries[0],\n preprocess: summaries && !!summaries[0].processedData,\n finalXExtent\n })\n\n fullDataset = rebuildFullDatasetWithSummaries(fullDataset, projectedSummaries)\n }\n\n if (filterRenderedLines) {\n projectedLines = projectedLines.filter(filterRenderedLines)\n fullDataset = fullDataset.filter((d: ProjectedPoint, i) => {\n return !d.parentLine || filterRenderedLines(d.parentLine, i, [])\n })\n }\n if (filterRenderedPoints) {\n fullDataset = fullDataset.filter(filterRenderedPoints)\n }\n if (filterRenderedSummaries) {\n projectedSummaries = projectedSummaries.filter(filterRenderedSummaries)\n fullDataset = fullDataset.filter((d: ProjectedPoint, i) => {\n return !d.parentSummary || filterRenderedSummaries(d.parentSummary, i, [])\n })\n }\n\n return {\n xExtent: finalXExtent,\n yExtent: finalYExtent,\n projectedLines,\n projectedPoints,\n projectedSummaries,\n fullDataset,\n calculatedXExtent,\n calculatedYExtent\n }\n}\n\nconst differenceCatch = (olineType, data) => {\n if (\n !builtInTransformations[olineType] ||\n (olineType === \"difference\" && data.length !== 2)\n ) {\n return \"line\"\n }\n return olineType\n}\n\nfunction lineTransformation(lineType, options) {\n return (data) =>\n builtInTransformations[differenceCatch(lineType.type, data)]({\n ...lineType,\n ...options,\n data\n })\n}\n","import { hierarchy } from \"d3-hierarchy\"\n\nexport function recursiveIDAccessor(idAccessor, node, accessorString) {\n if (node.parent) {\n accessorString = `${accessorString}-${recursiveIDAccessor(\n idAccessor,\n { ...node.parent, ...node.parent.data },\n accessorString\n )}`\n }\n return `${accessorString}-${idAccessor({ ...node, ...node.data })}`\n}\n\nexport const defaultHierarchicalIDAccessor = (d) => d.id || d.descendantIndex\n\nexport const nodesEdgesFromHierarchy = (\n baseRootNode,\n idAccessor = defaultHierarchicalIDAccessor\n) => {\n const edges = []\n const nodes = []\n\n const rootNode = baseRootNode.descendants\n ? baseRootNode\n : hierarchy(baseRootNode)\n\n const descendants = rootNode.descendants()\n\n let i = 0\n\n for (const node of descendants) {\n node.descendantIndex = i\n i++\n }\n\n for (const node of descendants) {\n const generatedID = `${\n idAccessor({\n ...node,\n ...node.data\n }) ?? defaultHierarchicalIDAccessor(node)\n }-${\n node.parent\n ? recursiveIDAccessor(\n idAccessor,\n { ...node.parent, ...node.parent.data },\n \"\"\n ) ?? node.parent.name\n : \"root\"\n }`\n\n const dataD = Object.assign(node, node.data || {}, {\n hierarchicalID: generatedID\n })\n nodes.push(dataD)\n if (node.parent !== null) {\n const dataParent = Object.assign(node.parent, node.parent.data || {})\n edges.push({\n source: dataParent,\n target: dataD,\n depth: node.depth,\n weight: 1,\n value: 1,\n _NWFEdgeKey: generatedID\n })\n }\n }\n\n return { edges, nodes }\n}\n\nexport function breadthFirstCompontents(baseNodes, hash) {\n const componentMap = {\n \"0\": { componentNodes: [], componentEdges: [] }\n }\n const components = [componentMap[\"0\"]]\n\n let componentID = 0\n\n traverseNodesBF(baseNodes, true)\n\n function traverseNodesBF(nodes, top) {\n for (const node of nodes) {\n const hashNode = hash.get(node)\n if (!hashNode) {\n componentMap[\"0\"].componentNodes.push(node)\n } else if (hashNode.component === -99) {\n if (top === true) {\n componentID++\n componentMap[componentID] = {\n componentNodes: [],\n componentEdges: []\n }\n components.push(componentMap[componentID])\n }\n\n hashNode.component = componentID\n componentMap[componentID].componentNodes.push(node)\n componentMap[componentID].componentEdges.push(...hashNode.edges)\n const traversibleNodes = [...hashNode.connectedNodes]\n traverseNodesBF(traversibleNodes, hash)\n }\n }\n }\n\n return components.sort(\n (a, b) => b.componentNodes.length - a.componentNodes.length\n )\n}\n\nexport const matrixify = ({ edgeHash, nodes, edgeWidthAccessor, nodeIDAccessor }) => {\n const matrix = []\n for (const nodeSource of nodes) {\n const nodeSourceID = nodeIDAccessor(nodeSource)\n const sourceRow = []\n matrix.push(sourceRow)\n for (const nodeTarget of nodes) {\n const nodeTargetID = nodeIDAccessor(nodeTarget)\n const theEdge = edgeHash.get(`${nodeSourceID}|${nodeTargetID}`)\n if (theEdge) {\n sourceRow.push(edgeWidthAccessor(theEdge))\n } else {\n sourceRow.push(0)\n }\n }\n }\n return matrix\n}\n","import type { Accessor } from \"./types\"\n\n/**\n * Create a legend configuration for HOC components\n *\n * @param data - Array of data points\n * @param colorBy - Field or function to determine color categories\n * @param colorScale - Optional d3 color scale function\n * @param getColor - Function to get color for a data point\n * @param strokeColor - Optional stroke color for legend items\n * @param strokeWidth - Optional stroke width for legend items\n * @returns Legend configuration object for Semiotic frames\n */\nexport function createLegend({\n data,\n colorBy,\n colorScale,\n getColor,\n strokeColor,\n strokeWidth\n}: {\n data: Array<Record<string, any>>\n colorBy: Accessor<string>\n colorScale?: ((v: string) => string)\n getColor: (d: Record<string, any>, accessor: Accessor<string>, scale?: ((v: string) => string)) => string\n strokeColor?: string\n strokeWidth?: number\n}) {\n // Get unique category values\n const uniqueValues = Array.from(\n new Set(\n data.map((d) => {\n if (typeof colorBy === \"function\") {\n return colorBy(d)\n }\n return d[colorBy as string]\n })\n )\n )\n\n // Create items array for the legend\n const items = uniqueValues.map((value) => {\n const sampleData =\n typeof colorBy === \"function\"\n ? data.find((d) => colorBy(d) === value)\n : data.find((d) => d[colorBy as string] === value)\n\n const color = sampleData\n ? getColor(sampleData, colorBy, colorScale)\n : colorScale\n ? colorScale(value)\n : \"#000000\"\n\n return {\n label: String(value),\n color\n }\n })\n\n return {\n legendGroups: [\n {\n styleFn: (d: { color: string }) => {\n const style: Record<string, string | number> = { fill: d.color, stroke: d.color }\n if (strokeColor !== undefined) {\n style.stroke = strokeColor\n }\n if (strokeWidth !== undefined) {\n style.strokeWidth = strokeWidth\n }\n return style\n },\n type: \"fill\" as const,\n items,\n label: \"\" // Required by LegendGroup interface\n }\n ]\n }\n}\n","import * as React from \"react\"\nimport type { Accessor } from \"../charts/shared/types\"\n\n/**\n * Configuration for a single tooltip field\n */\nexport interface TooltipField {\n /**\n * Label for this field\n */\n label?: string\n\n /**\n * Field name or accessor function to get the value\n * (alias for 'accessor')\n */\n key?: Accessor\n\n /**\n * Field name or accessor function to get the value\n */\n accessor?: Accessor\n\n /**\n * Optional format function for the value\n */\n format?: (value: unknown) => string\n}\n\n/**\n * Base tooltip configuration\n */\nexport interface TooltipConfig {\n /**\n * Array of fields to display in the tooltip\n * Can be simple field names or full TooltipField objects\n */\n fields?: Array<string | TooltipField>\n\n /**\n * Custom title accessor (field name or function)\n */\n title?: Accessor<string>\n\n /**\n * Custom format function for all values (if fields don't specify their own)\n */\n format?: (value: unknown) => string\n\n /**\n * Custom style object for the tooltip container\n */\n style?: React.CSSProperties\n\n /**\n * Custom className for the tooltip container\n */\n className?: string\n}\n\n/**\n * Multi-line tooltip configuration\n */\nexport interface MultiLineTooltipConfig extends TooltipConfig {\n /**\n * Show field labels (default: true)\n */\n showLabels?: boolean\n\n /**\n * Separator between label and value (default: \": \")\n */\n separator?: string\n}\n\n/**\n * Default tooltip styles following best practices\n */\nexport const defaultTooltipStyle: React.CSSProperties = {\n background: \"rgba(0, 0, 0, 0.85)\",\n color: \"white\",\n padding: \"8px 12px\",\n borderRadius: \"4px\",\n fontSize: \"14px\",\n lineHeight: \"1.5\",\n boxShadow: \"0 2px 8px rgba(0, 0, 0, 0.15)\",\n pointerEvents: \"none\",\n maxWidth: \"300px\",\n wordWrap: \"break-word\"\n}\n\n/**\n * Extract value from data using accessor\n */\nfunction getValue(data: Record<string, unknown>, accessor: Accessor): unknown {\n if (typeof accessor === \"function\") {\n return accessor(data)\n }\n return data[accessor]\n}\n\n/**\n * Format a value for display\n */\nfunction formatValue(value: unknown, format?: (value: unknown) => string): string {\n if (format) {\n return format(value)\n }\n\n if (value === null || value === undefined) {\n return \"\"\n }\n\n // Format numbers with commas\n if (typeof value === \"number\") {\n return value.toLocaleString()\n }\n\n // Format dates\n if (value instanceof Date) {\n return value.toLocaleDateString()\n }\n\n // Handle objects (e.g. resolved network nodes with an id property)\n if (typeof value === \"object\" && value !== null) {\n const obj = value as Record<string, unknown>\n if (obj.id !== undefined) return String(obj.id)\n if (obj.name !== undefined) return String(obj.name)\n return JSON.stringify(value)\n }\n\n return String(value)\n}\n\n/**\n * Create a simple tooltip that displays a single value or title\n *\n * @example\n * ```tsx\n * <Scatterplot\n * data={data}\n * tooltip={Tooltip({ title: \"name\" })}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <BarChart\n * data={data}\n * tooltip={Tooltip({\n * title: d => `${d.category}: ${d.value}`,\n * style: { background: \"#333\" }\n * })}\n * />\n * ```\n */\nexport function Tooltip(config: TooltipConfig = {}) {\n const {\n fields,\n title,\n format,\n style = {},\n className = \"\"\n } = config\n\n // Return a tooltipContent function that Semiotic expects\n return (data: Record<string, unknown>) => {\n // Guard against undefined/null data\n if (!data || typeof data !== \"object\") {\n return null\n }\n\n let titleContent: React.ReactNode\n const fieldLines: Array<{ label?: string; value: string }> = []\n\n if (title) {\n const titleValue = getValue(data, title)\n titleContent = formatValue(titleValue, format)\n }\n\n if (fields && fields.length > 0) {\n fields.forEach((field) => {\n let label: string | undefined\n let accessor: Accessor\n let fieldFormat: ((value: unknown) => string) | undefined\n\n if (typeof field === \"string\") {\n label = field\n accessor = field\n fieldFormat = format\n } else {\n label = field.label\n accessor = field.accessor || field.key || \"\"\n fieldFormat = field.format || format\n }\n\n const value = getValue(data, accessor)\n fieldLines.push({\n label,\n value: formatValue(value, fieldFormat)\n })\n })\n } else if (!title) {\n // Default: try common field names (only when no title or fields specified)\n const commonFields = [\"value\", \"y\", \"name\", \"id\", \"label\"]\n for (const field of commonFields) {\n if (data[field] !== undefined) {\n titleContent = formatValue(data[field], format)\n break\n }\n }\n\n // If still nothing, show first non-internal property\n if (!titleContent) {\n const keys = Object.keys(data).filter(k => !k.startsWith(\"_\"))\n if (keys.length > 0) {\n titleContent = formatValue(data[keys[0]], format)\n }\n }\n }\n\n const mergedStyle = { ...defaultTooltipStyle, ...style }\n\n return (\n <div\n className={`semiotic-tooltip ${className}`.trim()}\n style={mergedStyle}\n >\n {titleContent && <div style={{ fontWeight: fieldLines.length > 0 ? \"bold\" : \"normal\" }}>{titleContent}</div>}\n {fieldLines.map((line, index) => (\n <div key={index} style={{ marginTop: index === 0 && titleContent ? \"4px\" : 0 }}>\n {line.label && <span>{line.label}: </span>}\n {line.value}\n </div>\n ))}\n </div>\n )\n }\n}\n\n/**\n * Create a multi-line tooltip that displays multiple fields\n *\n * @example\n * ```tsx\n * <Scatterplot\n * data={data}\n * tooltip={MultiLineTooltip({\n * fields: [\"name\", \"value\", \"category\"]\n * })}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <LineChart\n * data={data}\n * tooltip={MultiLineTooltip({\n * title: \"series\",\n * fields: [\n * { label: \"X\", accessor: \"x\", format: v => v.toFixed(2) },\n * { label: \"Y\", accessor: \"y\", format: v => v.toFixed(2) },\n * { label: \"Category\", accessor: \"category\" }\n * ]\n * })}\n * />\n * ```\n *\n * @example\n * ```tsx\n * <BarChart\n * data={data}\n * tooltip={MultiLineTooltip({\n * fields: [\n * { label: \"Category\", accessor: \"category\" },\n * { label: \"Sales\", accessor: \"value\", format: v => `$${v.toLocaleString()}` }\n * ],\n * showLabels: true\n * })}\n * />\n * ```\n */\nexport function MultiLineTooltip(config: MultiLineTooltipConfig = {}) {\n const {\n fields = [],\n title,\n format,\n style = {},\n className = \"\",\n showLabels = true,\n separator = \": \"\n } = config\n\n // Return a tooltipContent function that Semiotic expects\n return (data: Record<string, unknown>) => {\n // Guard against undefined/null data\n if (!data || typeof data !== \"object\") {\n return null\n }\n\n const lines: Array<{ label?: string; value: string }> = []\n\n // Add title line if specified\n if (title) {\n const titleValue = getValue(data, title)\n lines.push({\n value: formatValue(titleValue, format)\n })\n }\n\n // Add field lines\n if (fields && Array.isArray(fields) && fields.length > 0) {\n fields.forEach((field) => {\n let label: string | undefined\n let accessor: Accessor\n let fieldFormat: ((value: unknown) => string) | undefined\n\n if (typeof field === \"string\") {\n // Simple string field name\n label = field\n accessor = field\n fieldFormat = format\n } else {\n // Full TooltipField object\n // Support both 'key' and 'accessor' for backward compatibility\n label = field.label\n accessor = field.accessor || field.key || \"\"\n fieldFormat = field.format || format\n }\n\n const value = getValue(data, accessor)\n const formattedValue = formatValue(value, fieldFormat)\n\n lines.push({\n label: showLabels ? label : undefined,\n value: formattedValue\n })\n })\n } else {\n // Default: show all non-internal properties\n const keys = Object.keys(data).filter(\n (k) => !k.startsWith(\"_\") && k !== \"data\"\n )\n keys.forEach((key) => {\n lines.push({\n label: showLabels ? key : undefined,\n value: formatValue(data[key], format)\n })\n })\n }\n\n const mergedStyle = { ...defaultTooltipStyle, ...style }\n\n // Safety check: ensure lines is an array\n if (!Array.isArray(lines) || lines.length === 0) {\n return null\n }\n\n return (\n <div\n className={`semiotic-tooltip semiotic-tooltip-multiline ${className}`.trim()}\n style={mergedStyle}\n >\n {lines.map((line, index) => (\n <div key={index} style={{ marginBottom: index < lines.length - 1 ? \"4px\" : 0 }}>\n {line.label && (\n <strong>\n {line.label}\n {separator}\n </strong>\n )}\n {line.value}\n </div>\n ))}\n </div>\n )\n }\n}\n\n/**\n * Type for tooltip prop that chart components accept\n */\nexport type TooltipProp =\n | boolean\n | ((data: Record<string, unknown>) => React.ReactNode)\n | ReturnType<typeof Tooltip>\n | ReturnType<typeof MultiLineTooltip>\n | TooltipConfig\n\n/**\n * Convert a tooltip prop to the format Semiotic expects\n */\nexport function normalizeTooltip(tooltip: TooltipProp): boolean | Function {\n if (tooltip === true) {\n // Enable default tooltip\n return true\n }\n\n if (typeof tooltip === \"function\") {\n // Already a tooltip function, use it as tooltipContent\n return tooltip\n }\n\n if (tooltip === false || tooltip === undefined) {\n // No tooltip\n return false\n }\n\n // Config object with fields/title — convert to a tooltip function\n if (typeof tooltip === \"object\" && tooltip !== null && (\"fields\" in tooltip || \"title\" in tooltip)) {\n const config = tooltip as TooltipConfig\n return Tooltip(config)\n }\n\n // Should not reach here but return true to enable default tooltip\n return true\n}\n","import { useMemo } from \"react\"\nimport { createColorScale } from \"./colorUtils\"\nimport type { Accessor } from \"./types\"\n\n/**\n * Default fill color used when no colorBy is specified\n */\nexport const DEFAULT_COLOR = \"#007bff\"\n\n/**\n * Resolve an accessor (string key or function) into a function.\n * Used across chart components to normalize `valueAccessor`, `categoryAccessor`, etc.\n */\nexport function resolveAccessor<T = any>(\n accessor: string | ((d: Record<string, any>, i?: number) => T)\n): (d: Record<string, any>) => T {\n return typeof accessor === \"function\"\n ? accessor\n : (d: Record<string, any>) => d[accessor]\n}\n\n/**\n * Hook to create a color scale from data and colorBy configuration.\n * Returns undefined when colorBy is absent or is a function accessor.\n */\nexport function useColorScale(\n data: Array<Record<string, any>>,\n colorBy: Accessor<string> | undefined,\n colorScheme: string | string[] = \"category10\"\n): ((v: string) => string) | undefined {\n return useMemo(() => {\n if (!colorBy || typeof colorBy === \"function\") return undefined\n return createColorScale(data, colorBy as string, colorScheme)\n }, [data, colorBy, colorScheme])\n}\n\n/**\n * Hook to sort data by a value accessor.\n * Used by BarChart and DotPlot.\n */\nexport function useSortedData(\n data: Array<Record<string, any>>,\n sort: boolean | \"asc\" | \"desc\" | ((a: Record<string, any>, b: Record<string, any>) => number),\n valueAccessor: Accessor<number>\n): Array<Record<string, any>> {\n return useMemo(() => {\n if (!sort) return data\n const copy = [...data]\n if (typeof sort === \"function\") return copy.sort(sort)\n const getValue = resolveAccessor<number>(valueAccessor)\n return sort === \"asc\"\n ? copy.sort((a, b) => getValue(a) - getValue(b))\n : copy.sort((a, b) => getValue(b) - getValue(a))\n }, [data, sort, valueAccessor])\n}\n","\"use client\"\nimport * as React from \"react\"\n\nexport interface ChartErrorProps {\n /** Component name for the error message */\n componentName: string\n /** The error message to display */\n message: string\n /** Chart width */\n width: number\n /** Chart height */\n height: number\n}\n\n/**\n * Renders a visible, styled error state inside the chart's dimensions.\n * Shows the component name, error message, and a hint for developers.\n *\n * Designed to be obvious in development but not alarming in production —\n * uses muted colors that adapt to light/dark backgrounds.\n */\nexport default function ChartError({\n componentName,\n message,\n width,\n height,\n}: ChartErrorProps) {\n return (\n <div\n role=\"alert\"\n style={{\n width,\n height: Math.max(height, 120),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"1px dashed rgba(128, 128, 128, 0.4)\",\n borderRadius: 8,\n background: \"rgba(128, 128, 128, 0.04)\",\n padding: 24,\n boxSizing: \"border-box\",\n }}\n >\n <div style={{ textAlign: \"center\", maxWidth: 400 }}>\n <div\n style={{\n fontSize: 13,\n fontWeight: 600,\n color: \"rgba(128, 128, 128, 0.7)\",\n marginBottom: 6,\n fontFamily: \"monospace\",\n }}\n >\n {componentName}\n </div>\n <div\n style={{\n fontSize: 14,\n color: \"rgba(128, 128, 128, 0.9)\",\n lineHeight: 1.5,\n }}\n >\n {message}\n </div>\n </div>\n </div>\n )\n}\n","/**\n * Validates chart data and accessors at render time.\n * Returns null if data is valid, or an error message string if not.\n *\n * Validation is intentionally lightweight — it checks the first data point\n * to catch common mistakes (wrong field names, missing data) without\n * iterating the entire dataset.\n */\n\ntype AccessorLike = string | ((...args: any[]) => any)\n\ninterface ArrayDataValidation {\n componentName: string\n data: any[] | undefined | null\n accessors?: Record<string, AccessorLike | undefined>\n requiredProps?: Record<string, any>\n}\n\ninterface ObjectDataValidation {\n componentName: string\n data: any | undefined | null\n dataLabel?: string\n}\n\ninterface NetworkDataValidation {\n componentName: string\n nodes?: any[] | undefined | null\n edges?: any[] | undefined | null\n nodesRequired?: boolean\n edgesRequired?: boolean\n accessors?: Record<string, AccessorLike | undefined>\n}\n\n/**\n * Validate array-based chart data (LineChart, BarChart, Scatterplot, etc.)\n */\nexport function validateArrayData({\n componentName,\n data,\n accessors,\n requiredProps,\n}: ArrayDataValidation): string | null {\n // Check required props first\n if (requiredProps) {\n for (const [name, value] of Object.entries(requiredProps)) {\n if (value === undefined || value === null) {\n return `${name} is required. Provide a field name or function.`\n }\n }\n }\n\n // Check data exists and is non-empty\n if (!data || !Array.isArray(data) || data.length === 0) {\n return \"No data provided. Pass a non-empty array to the data prop.\"\n }\n\n // Check accessors against the first data point\n if (accessors) {\n const sample = data[0]\n if (sample && typeof sample === \"object\") {\n for (const [label, accessor] of Object.entries(accessors)) {\n if (!accessor) continue\n if (typeof accessor === \"string\" && !(accessor in sample)) {\n return (\n `${label} \"${accessor}\" not found in data. ` +\n `Available fields: ${Object.keys(sample).join(\", \")}.`\n )\n }\n }\n }\n }\n\n return null\n}\n\n/**\n * Validate object/hierarchical data (TreeDiagram, Treemap, CirclePack)\n */\nexport function validateObjectData({\n componentName,\n data,\n dataLabel = \"data\",\n}: ObjectDataValidation): string | null {\n if (data === undefined || data === null) {\n return `No ${dataLabel} provided. Pass a hierarchical data object to the ${dataLabel} prop.`\n }\n return null\n}\n\n/**\n * Validate network data (ForceDirectedGraph, ChordDiagram, SankeyDiagram)\n */\nexport function validateNetworkData({\n componentName,\n nodes,\n edges,\n nodesRequired = false,\n edgesRequired = true,\n accessors,\n}: NetworkDataValidation): string | null {\n if (edgesRequired && (!edges || !Array.isArray(edges) || edges.length === 0)) {\n return \"No edges provided. Pass a non-empty array to the edges prop.\"\n }\n\n if (nodesRequired && (!nodes || !Array.isArray(nodes) || nodes.length === 0)) {\n return \"No nodes provided. Pass a non-empty array to the nodes prop.\"\n }\n\n // Check accessors against first data point\n if (accessors) {\n if (nodes && nodes.length > 0) {\n const sample = nodes[0]\n if (sample && typeof sample === \"object\") {\n for (const [label, accessor] of Object.entries(accessors)) {\n if (!accessor) continue\n if (typeof accessor === \"string\" && !(accessor in sample)) {\n return (\n `${label} \"${accessor}\" not found in node data. ` +\n `Available fields: ${Object.keys(sample).join(\", \")}.`\n )\n }\n }\n }\n }\n }\n\n return null\n}\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport StreamNetworkFrame from \"../../stream/StreamNetworkFrame\"\nimport type { StreamNetworkFrameProps } from \"../../stream/networkTypes\"\nimport { getColor, getSize } from \"../shared/colorUtils\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateNetworkData } from \"../shared/validateChartData\"\n\n/**\n * ForceDirectedGraph component props\n */\nexport interface ForceDirectedGraphProps<TNode extends Record<string, any> = Record<string, any>, TEdge extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n nodes: TNode[]\n edges: TEdge[]\n nodeIDAccessor?: ChartAccessor<TNode, string>\n sourceAccessor?: ChartAccessor<TEdge, string>\n targetAccessor?: ChartAccessor<TEdge, string>\n nodeLabel?: ChartAccessor<TNode, string>\n colorBy?: ChartAccessor<TNode, string>\n colorScheme?: string | string[]\n nodeSize?: number | ChartAccessor<TNode, number>\n nodeSizeRange?: [number, number]\n edgeWidth?: number | ChartAccessor<TEdge, number>\n edgeColor?: string\n edgeOpacity?: number\n iterations?: number\n forceStrength?: number\n showLabels?: boolean\n enableHover?: boolean\n showLegend?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamNetworkFrameProps, \"nodes\" | \"edges\" | \"size\">>\n}\n\n/**\n * ForceDirectedGraph - Visualize network relationships with force-directed layout\n *\n * Wraps StreamNetworkFrame (canvas-first) for force-directed network visualization.\n */\nexport function ForceDirectedGraph<TNode extends Record<string, any> = Record<string, any>, TEdge extends Record<string, any> = Record<string, any>>(props: ForceDirectedGraphProps<TNode, TEdge>) {\n const {\n nodes,\n edges,\n width = 600,\n height = 600,\n margin: userMargin,\n className,\n title,\n nodeIDAccessor = \"id\",\n sourceAccessor = \"source\",\n targetAccessor = \"target\",\n nodeLabel,\n colorBy,\n colorScheme = \"category10\",\n nodeSize = 8,\n nodeSizeRange = [5, 20],\n edgeWidth = 1,\n edgeColor = \"#999\",\n edgeOpacity = 0.6,\n iterations = 300,\n forceStrength = 0.1,\n showLabels = false,\n enableHover = true,\n showLegend,\n tooltip,\n frameProps = {}\n } = props\n\n const safeNodes = nodes || []\n const safeEdges = edges || []\n\n const colorScale = useColorScale(safeNodes, colorBy, colorScheme)\n\n // Node style function — d is a RealtimeNode, user data on d.data\n const nodeStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {}\n if (colorBy) {\n baseStyle.fill = getColor(d.data || d, colorBy, colorScale)\n } else {\n baseStyle.fill = DEFAULT_COLOR\n }\n if (typeof nodeSize === \"number\") {\n baseStyle.r = nodeSize\n }\n return baseStyle\n }\n }, [colorBy, colorScale, nodeSize])\n\n // Edge style function\n const edgeStyle = useMemo(() => {\n return (d: Record<string, any>) => ({\n stroke: edgeColor,\n strokeWidth: typeof edgeWidth === \"number\" ? edgeWidth : typeof edgeWidth === \"function\" ? edgeWidth(d as TEdge) : d[edgeWidth] || 1,\n opacity: edgeOpacity\n })\n }, [edgeWidth, edgeColor, edgeOpacity])\n\n // Node label function\n const nodeLabelFn = useMemo(() => {\n if (!showLabels || !nodeLabel) return undefined\n if (typeof nodeLabel === \"function\") return nodeLabel\n return (d: Record<string, any>) => d[nodeLabel]\n }, [showLabels, nodeLabel])\n\n // Legend\n const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy\n const legend = useMemo(() => {\n if (!shouldShowLegend || !colorBy) return undefined\n return createLegend({ data: safeNodes, colorBy, colorScale, getColor })\n }, [shouldShowLegend, colorBy, safeNodes, colorScale])\n\n // Adjust margin for legend\n const margin = useMemo(() => {\n const defaultMargin = { top: 20, bottom: 20, left: 20, right: 20 }\n const finalMargin = { ...defaultMargin, ...userMargin }\n if (legend && finalMargin.right < 120) {\n finalMargin.right = 120\n }\n return finalMargin\n }, [userMargin, legend])\n\n // Validate\n const error = validateNetworkData({\n componentName: \"ForceDirectedGraph\",\n nodes,\n edges,\n nodesRequired: true,\n edgesRequired: true,\n accessors: { nodeIDAccessor },\n })\n if (error) return <ChartError componentName=\"ForceDirectedGraph\" message={error} width={width} height={height} />\n\n return (\n <StreamNetworkFrame\n chartType=\"force\"\n nodes={safeNodes}\n edges={safeEdges}\n size={[width, height]}\n margin={margin}\n nodeIDAccessor={nodeIDAccessor}\n sourceAccessor={sourceAccessor}\n targetAccessor={targetAccessor}\n iterations={iterations}\n forceStrength={forceStrength}\n nodeStyle={nodeStyle}\n edgeStyle={edgeStyle}\n colorBy={colorBy}\n colorScheme={colorScheme}\n nodeSize={nodeSize}\n nodeSizeRange={nodeSizeRange}\n nodeLabel={nodeLabelFn}\n showLabels={showLabels}\n enableHover={enableHover}\n tooltipContent={tooltip ? (d) => (normalizeTooltip(tooltip) as Function)(d.data) : undefined}\n legend={legend}\n className={className}\n title={title}\n {...frameProps}\n />\n )\n}\nForceDirectedGraph.displayName = \"ForceDirectedGraph\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport StreamNetworkFrame from \"../../stream/StreamNetworkFrame\"\nimport type { StreamNetworkFrameProps } from \"../../stream/networkTypes\"\nimport { getColor } from \"../shared/colorUtils\"\nimport { createLegend } from \"../shared/legendUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { defaultTooltipStyle, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateNetworkData } from \"../shared/validateChartData\"\n\n/**\n * SankeyDiagram component props\n */\nexport interface SankeyDiagramProps<TNode extends Record<string, any> = Record<string, any>, TEdge extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n nodes?: TNode[]\n edges: TEdge[]\n sourceAccessor?: ChartAccessor<TEdge, string>\n targetAccessor?: ChartAccessor<TEdge, string>\n valueAccessor?: ChartAccessor<TEdge, number>\n nodeIdAccessor?: ChartAccessor<TNode, string>\n colorBy?: ChartAccessor<TNode, string>\n colorScheme?: string | string[]\n edgeColorBy?: \"source\" | \"target\" | \"gradient\" | ((d: any) => string)\n orientation?: \"horizontal\" | \"vertical\"\n nodeAlign?: \"justify\" | \"left\" | \"right\" | \"center\"\n nodePaddingRatio?: number\n nodeWidth?: number\n nodeLabel?: ChartAccessor<TNode, string>\n showLabels?: boolean\n enableHover?: boolean\n edgeOpacity?: number\n edgeSort?: (a: any, b: any) => number\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamNetworkFrameProps, \"edges\" | \"size\">>\n}\n\n/**\n * SankeyDiagram - Visualize flow and magnitude of movement between nodes\n *\n * Wraps StreamNetworkFrame (canvas-first) for Sankey flow visualization.\n */\nexport function SankeyDiagram<TNode extends Record<string, any> = Record<string, any>, TEdge extends Record<string, any> = Record<string, any>>(props: SankeyDiagramProps<TNode, TEdge>) {\n const {\n nodes,\n edges,\n width = 800,\n height = 600,\n margin = { top: 50, bottom: 50, left: 50, right: 50 },\n className,\n title,\n sourceAccessor = \"source\",\n targetAccessor = \"target\",\n valueAccessor = \"value\",\n nodeIdAccessor = \"id\",\n colorBy,\n colorScheme = \"category10\",\n edgeColorBy = \"source\",\n orientation = \"horizontal\",\n nodeAlign = \"justify\",\n nodePaddingRatio = 0.05,\n nodeWidth = 15,\n nodeLabel,\n showLabels = true,\n enableHover = true,\n edgeOpacity = 0.5,\n edgeSort,\n tooltip,\n frameProps = {}\n } = props\n\n // Safe data defaults (hooks must always run)\n const safeEdges = edges || []\n\n // Infer nodes from edges if not provided\n const inferredNodes = useMemo(() => {\n if (nodes && nodes.length > 0) return nodes\n\n const nodeSet = new Set<string>()\n safeEdges.forEach((edge) => {\n const sourceId =\n typeof sourceAccessor === \"function\"\n ? sourceAccessor(edge)\n : edge[sourceAccessor]\n const targetId =\n typeof targetAccessor === \"function\"\n ? targetAccessor(edge)\n : edge[targetAccessor]\n\n nodeSet.add(sourceId)\n nodeSet.add(targetId)\n })\n\n return Array.from(nodeSet).map((id) => ({ id }))\n }, [nodes, safeEdges, sourceAccessor, targetAccessor])\n\n // Create color scale if colorBy is specified\n const colorScale = useColorScale(inferredNodes, colorBy, colorScheme)\n\n // Node style function\n // d is a RealtimeNode — user data lives on d.data\n const nodeStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {\n stroke: \"black\",\n strokeWidth: 1\n }\n\n if (colorBy) {\n baseStyle.fill = getColor(d.data || d, colorBy, colorScale)\n } else {\n baseStyle.fill = \"#4d430c\"\n }\n\n return baseStyle\n }\n }, [colorBy, colorScale])\n\n // Edge style function\n // d is a RealtimeEdge — d.source/d.target are RealtimeNode objects\n const edgeStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {\n stroke: \"none\",\n strokeWidth: 0,\n fillOpacity: edgeOpacity\n }\n\n if (typeof edgeColorBy === \"function\") {\n baseStyle.fill = edgeColorBy(d)\n } else if (edgeColorBy === \"source\") {\n const src = typeof d.source === \"object\" ? d.source : null\n if (colorBy && src) {\n baseStyle.fill = getColor(src.data || src, colorBy, colorScale)\n } else if (src) {\n baseStyle.fill = nodeStyle(src).fill\n }\n } else if (edgeColorBy === \"target\") {\n const tgt = typeof d.target === \"object\" ? d.target : null\n if (colorBy && tgt) {\n baseStyle.fill = getColor(tgt.data || tgt, colorBy, colorScale)\n } else if (tgt) {\n baseStyle.fill = nodeStyle(tgt).fill\n }\n } else if (edgeColorBy === \"gradient\") {\n baseStyle.fill = \"#999\"\n baseStyle.fillOpacity = edgeOpacity * 0.7\n }\n\n return baseStyle\n }\n }, [edgeColorBy, colorBy, colorScale, nodeStyle, edgeOpacity])\n\n // Node label accessor\n const nodeLabelFn = useMemo(() => {\n if (!showLabels) return undefined\n const accessor = nodeLabel || nodeIdAccessor\n if (typeof accessor === \"function\") return accessor\n return (d: Record<string, any>) => d[accessor]\n }, [showLabels, nodeLabel, nodeIdAccessor])\n\n // Tooltip\n const tooltipFn = useMemo(() => {\n if (typeof tooltip === \"function\") return tooltip\n return undefined\n }, [tooltip])\n\n // Validate data (after all hooks)\n const error = validateNetworkData({\n componentName: \"SankeyDiagram\",\n edges,\n edgesRequired: true,\n })\n if (error) return <ChartError componentName=\"SankeyDiagram\" message={error} width={width} height={height} />\n\n return (\n <StreamNetworkFrame\n chartType=\"sankey\"\n nodes={inferredNodes}\n edges={safeEdges}\n size={[width, height]}\n margin={margin}\n nodeIDAccessor={nodeIdAccessor}\n sourceAccessor={sourceAccessor}\n targetAccessor={targetAccessor}\n valueAccessor={valueAccessor}\n orientation={orientation}\n nodeAlign={nodeAlign}\n nodePaddingRatio={nodePaddingRatio}\n nodeWidth={nodeWidth}\n nodeStyle={nodeStyle}\n edgeStyle={edgeStyle}\n colorBy={colorBy}\n colorScheme={colorScheme}\n edgeColorBy={edgeColorBy}\n edgeOpacity={edgeOpacity}\n edgeSort={edgeSort}\n nodeLabel={nodeLabelFn}\n showLabels={showLabels}\n enableHover={enableHover}\n tooltipContent={tooltipFn ? (d) => tooltipFn(d.data) : undefined}\n className={className}\n title={title}\n {...frameProps}\n />\n )\n}\nSankeyDiagram.displayName = \"SankeyDiagram\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport StreamNetworkFrame from \"../../stream/StreamNetworkFrame\"\nimport type { StreamNetworkFrameProps } from \"../../stream/networkTypes\"\nimport { getColor, COLOR_SCHEMES, DEFAULT_COLORS } from \"../shared/colorUtils\"\nimport type { BaseChartProps, ChartAccessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { useColorScale, DEFAULT_COLOR } from \"../shared/hooks\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateNetworkData } from \"../shared/validateChartData\"\n\n/**\n * ChordDiagram component props\n */\nexport interface ChordDiagramProps<TNode extends Record<string, any> = Record<string, any>, TEdge extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n nodes?: TNode[]\n edges: TEdge[]\n sourceAccessor?: ChartAccessor<TEdge, string>\n targetAccessor?: ChartAccessor<TEdge, string>\n valueAccessor?: ChartAccessor<TEdge, number>\n nodeIdAccessor?: ChartAccessor<TNode, string>\n colorBy?: ChartAccessor<TNode, string>\n colorScheme?: string | string[]\n edgeColorBy?: \"source\" | \"target\" | ((d: any) => string)\n padAngle?: number\n groupWidth?: number\n sortGroups?: (a: any, b: any) => number\n nodeLabel?: ChartAccessor<TNode, string>\n showLabels?: boolean\n enableHover?: boolean\n edgeOpacity?: number\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamNetworkFrameProps, \"edges\" | \"size\">>\n}\n\n/**\n * ChordDiagram - Visualize directed relationships with circular chord layout\n *\n * Wraps StreamNetworkFrame (canvas-first) for chord relationship visualization.\n */\nexport function ChordDiagram<TNode extends Record<string, any> = Record<string, any>, TEdge extends Record<string, any> = Record<string, any>>(props: ChordDiagramProps<TNode, TEdge>) {\n const {\n nodes,\n edges,\n width = 600,\n height = 600,\n margin = { top: 50, bottom: 50, left: 50, right: 50 },\n className,\n title,\n sourceAccessor = \"source\",\n targetAccessor = \"target\",\n valueAccessor = \"value\",\n nodeIdAccessor = \"id\",\n colorBy,\n colorScheme = \"category10\",\n edgeColorBy = \"source\",\n padAngle = 0.01,\n groupWidth = 20,\n sortGroups,\n nodeLabel,\n showLabels = true,\n enableHover = true,\n edgeOpacity = 0.5,\n tooltip,\n frameProps = {}\n } = props\n\n const safeEdges = edges || []\n\n // Infer nodes from edges if not provided\n const inferredNodes = useMemo(() => {\n if (nodes && nodes.length > 0) return nodes\n\n const nodeSet = new Set<string>()\n safeEdges.forEach((edge) => {\n const sourceId = typeof sourceAccessor === \"function\" ? sourceAccessor(edge) : edge[sourceAccessor]\n const targetId = typeof targetAccessor === \"function\" ? targetAccessor(edge) : edge[targetAccessor]\n nodeSet.add(sourceId)\n nodeSet.add(targetId)\n })\n\n return Array.from(nodeSet).map((id) => ({ id }))\n }, [nodes, safeEdges, sourceAccessor, targetAccessor])\n\n const colorScale = useColorScale(inferredNodes, colorBy, colorScheme)\n\n // Node style function — d is a RealtimeNode, user data on d.data\n const nodeStyle = useMemo(() => {\n return (d: Record<string, any>, i?: number) => {\n const baseStyle: Record<string, string | number> = {\n stroke: \"black\",\n strokeWidth: 1\n }\n if (colorBy) {\n baseStyle.fill = getColor(d.data || d, colorBy, colorScale)\n } else {\n const palette = Array.isArray(colorScheme) ? colorScheme : (COLOR_SCHEMES[colorScheme] || DEFAULT_COLORS)\n const colors = Array.isArray(palette) ? palette : DEFAULT_COLORS\n const index = (d as any).index ?? i ?? 0\n baseStyle.fill = colors[index % colors.length]\n }\n return baseStyle\n }\n }, [colorBy, colorScale, colorScheme])\n\n // Edge style function — d is a RealtimeEdge\n const edgeStyle = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {\n stroke: \"black\",\n strokeWidth: 0.5,\n fillOpacity: edgeOpacity,\n strokeOpacity: edgeOpacity\n }\n if (typeof edgeColorBy === \"function\") {\n baseStyle.fill = edgeColorBy(d)\n } else if (edgeColorBy === \"source\") {\n const src = typeof d.source === \"object\" ? d.source : null\n if (colorBy && src) {\n baseStyle.fill = getColor(src.data || src, colorBy, colorScale)\n } else if (src) {\n baseStyle.fill = nodeStyle(src, src.index).fill\n }\n } else if (edgeColorBy === \"target\") {\n const tgt = typeof d.target === \"object\" ? d.target : null\n if (colorBy && tgt) {\n baseStyle.fill = getColor(tgt.data || tgt, colorBy, colorScale)\n } else if (tgt) {\n baseStyle.fill = nodeStyle(tgt, tgt.index).fill\n }\n }\n return baseStyle\n }\n }, [edgeColorBy, colorBy, colorScale, nodeStyle, edgeOpacity])\n\n // Node label accessor\n const nodeLabelFn = useMemo(() => {\n if (!showLabels) return undefined\n const accessor = nodeLabel || nodeIdAccessor\n if (typeof accessor === \"function\") return accessor\n return (d: Record<string, any>) => d[accessor]\n }, [showLabels, nodeLabel, nodeIdAccessor])\n\n // Validate\n const error = validateNetworkData({\n componentName: \"ChordDiagram\",\n edges,\n edgesRequired: true,\n })\n if (error) return <ChartError componentName=\"ChordDiagram\" message={error} width={width} height={height} />\n\n return (\n <StreamNetworkFrame\n chartType=\"chord\"\n nodes={inferredNodes}\n edges={safeEdges}\n size={[width, height]}\n margin={margin}\n nodeIDAccessor={nodeIdAccessor}\n sourceAccessor={sourceAccessor}\n targetAccessor={targetAccessor}\n valueAccessor={valueAccessor}\n padAngle={padAngle}\n groupWidth={groupWidth}\n sortGroups={sortGroups}\n nodeStyle={nodeStyle}\n edgeStyle={edgeStyle}\n colorBy={colorBy}\n colorScheme={colorScheme}\n edgeColorBy={edgeColorBy}\n edgeOpacity={edgeOpacity}\n nodeLabel={nodeLabelFn}\n showLabels={showLabels}\n enableHover={enableHover}\n tooltipContent={tooltip ? (d) => (normalizeTooltip(tooltip) as Function)(d.data) : undefined}\n className={className}\n title={title}\n {...frameProps}\n />\n )\n}\nChordDiagram.displayName = \"ChordDiagram\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport StreamNetworkFrame from \"../../stream/StreamNetworkFrame\"\nimport type { StreamNetworkFrameProps } from \"../../stream/networkTypes\"\nimport { getColor, createColorScale } from \"../shared/colorUtils\"\nimport type { BaseChartProps, ChartAccessor, Accessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { DEFAULT_COLOR } from \"../shared/hooks\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateObjectData } from \"../shared/validateChartData\"\n\n/**\n * TreeDiagram component props\n */\nexport interface TreeDiagramProps<TNode extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TNode\n layout?: \"tree\" | \"cluster\" | \"partition\" | \"treemap\" | \"circlepack\"\n orientation?: \"vertical\" | \"horizontal\" | \"radial\"\n childrenAccessor?: ChartAccessor<TNode, TNode[]>\n valueAccessor?: Accessor<number>\n nodeIdAccessor?: ChartAccessor<TNode, string>\n colorBy?: ChartAccessor<TNode, string | number>\n colorScheme?: string | string[]\n colorByDepth?: boolean\n edgeStyle?: \"line\" | \"curve\"\n nodeLabel?: ChartAccessor<TNode, string>\n showLabels?: boolean\n nodeSize?: number\n enableHover?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamNetworkFrameProps, \"edges\" | \"size\">>\n}\n\n/**\n * TreeDiagram - Visualize hierarchical data structures\n *\n * Wraps StreamNetworkFrame (canvas-first) for hierarchical tree visualization.\n */\nexport function TreeDiagram<TNode extends Record<string, any> = Record<string, any>>(props: TreeDiagramProps<TNode>) {\n const {\n data,\n width = 600,\n height = 600,\n margin = { top: 50, bottom: 50, left: 50, right: 50 },\n className,\n title,\n layout = \"tree\",\n orientation = \"vertical\",\n childrenAccessor = \"children\",\n valueAccessor = \"value\",\n nodeIdAccessor = \"name\",\n colorBy,\n colorScheme = \"category10\",\n colorByDepth = false,\n edgeStyle = \"curve\",\n nodeLabel,\n showLabels = true,\n nodeSize = 5,\n enableHover = true,\n tooltip,\n frameProps = {}\n } = props\n\n // Node style function\n const allNodes = useMemo(() => {\n if (!data) return []\n const nodes: Array<Record<string, any>> = []\n const traverse = (node: Record<string, any>) => {\n nodes.push(node)\n const children = typeof childrenAccessor === \"function\" ? childrenAccessor(node as TNode) : node[childrenAccessor]\n if (children && Array.isArray(children)) children.forEach(traverse)\n }\n traverse(data)\n return nodes\n }, [data, childrenAccessor])\n\n const colorScale = useMemo(() => {\n if (colorByDepth) return createColorScale(allNodes.map((_, idx) => ({ depth: idx % 5 })), \"depth\", colorScheme)\n if (!colorBy || typeof colorBy === \"function\") return undefined\n return createColorScale(allNodes, colorBy as string, colorScheme)\n }, [allNodes, colorBy, colorByDepth, colorScheme])\n\n // d is a RealtimeNode — user data on d.data, depth on d.depth\n const nodeStyleFn = useMemo(() => {\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = { stroke: \"black\", strokeWidth: 1 }\n if (colorByDepth) {\n baseStyle.fill = getColor({ depth: d.depth || 0 }, \"depth\", colorScale)\n } else if (colorBy) {\n baseStyle.fill = getColor(d.data || d, colorBy as string | ((d: any) => string), colorScale)\n } else {\n baseStyle.fill = DEFAULT_COLOR\n }\n return baseStyle\n }\n }, [colorBy, colorByDepth, colorScale])\n\n const edgeStyleFn = useMemo(() => {\n return () => ({ stroke: \"#999\", strokeWidth: 1, fill: \"none\" })\n }, [])\n\n const hierarchySumFn = useMemo(() => {\n if (layout === \"treemap\" || layout === \"circlepack\" || layout === \"partition\") {\n if (typeof valueAccessor === \"function\") return valueAccessor\n return (d: Record<string, any>) => d[valueAccessor] || 1\n }\n return undefined\n }, [layout, valueAccessor])\n\n // Validate\n const error = validateObjectData({ componentName: \"TreeDiagram\", data })\n if (error) return <ChartError componentName=\"TreeDiagram\" message={error} width={width} height={height} />\n\n return (\n <StreamNetworkFrame\n chartType={layout}\n data={data}\n size={[width, height]}\n margin={margin}\n nodeIDAccessor={nodeIdAccessor}\n childrenAccessor={childrenAccessor}\n hierarchySum={hierarchySumFn}\n treeOrientation={orientation}\n edgeType={edgeStyle}\n nodeStyle={nodeStyleFn}\n edgeStyle={edgeStyleFn}\n colorBy={colorBy as any}\n colorScheme={colorScheme}\n colorByDepth={colorByDepth}\n nodeSize={nodeSize}\n nodeLabel={showLabels ? (nodeLabel || nodeIdAccessor) : undefined}\n showLabels={showLabels}\n enableHover={enableHover}\n tooltipContent={tooltip ? (d) => (normalizeTooltip(tooltip) as Function)(d.data) : undefined}\n className={className}\n title={title}\n {...frameProps}\n />\n )\n}\nTreeDiagram.displayName = \"TreeDiagram\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport StreamNetworkFrame from \"../../stream/StreamNetworkFrame\"\nimport type { StreamNetworkFrameProps } from \"../../stream/networkTypes\"\nimport { getColor, createColorScale } from \"../shared/colorUtils\"\nimport type { BaseChartProps, ChartAccessor, Accessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { DEFAULT_COLOR } from \"../shared/hooks\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateObjectData } from \"../shared/validateChartData\"\n\n/**\n * Treemap component props\n */\nexport interface TreemapProps<TNode extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TNode\n childrenAccessor?: ChartAccessor<TNode, TNode[]>\n valueAccessor?: Accessor<number>\n nodeIdAccessor?: ChartAccessor<TNode, string>\n colorBy?: ChartAccessor<TNode, string | number>\n colorScheme?: string | string[]\n colorByDepth?: boolean\n showLabels?: boolean\n labelMode?: \"leaf\" | \"parent\" | \"all\"\n nodeLabel?: ChartAccessor<TNode, string>\n padding?: number\n paddingTop?: number\n enableHover?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamNetworkFrameProps, \"edges\" | \"size\">>\n}\n\n/**\n * Treemap - Visualize hierarchical data as nested rectangles.\n *\n * Wraps StreamNetworkFrame (canvas-first) for treemap visualization.\n */\nexport function Treemap<TNode extends Record<string, any> = Record<string, any>>(props: TreemapProps<TNode>) {\n const {\n data,\n width = 600,\n height = 600,\n margin = { top: 10, bottom: 10, left: 10, right: 10 },\n className,\n title,\n childrenAccessor = \"children\",\n valueAccessor = \"value\",\n nodeIdAccessor = \"name\",\n colorBy,\n colorScheme = \"category10\",\n colorByDepth = false,\n showLabels = true,\n labelMode = \"leaf\",\n nodeLabel,\n padding: paddingProp = 4,\n paddingTop: paddingTopProp,\n enableHover = true,\n tooltip,\n frameProps = {}\n } = props\n\n const allNodes = useMemo(() => {\n if (!data) return []\n const nodes: Array<Record<string, any>> = []\n const traverse = (node: Record<string, any>) => {\n nodes.push(node)\n const children = typeof childrenAccessor === \"function\" ? childrenAccessor(node as TNode) : node[childrenAccessor]\n if (children && Array.isArray(children)) children.forEach(traverse)\n }\n traverse(data)\n return nodes\n }, [data, childrenAccessor])\n\n const colorScale = useMemo(() => {\n if (colorByDepth) return undefined\n if (!colorBy || typeof colorBy === \"function\") return undefined\n return createColorScale(allNodes, colorBy as string, colorScheme)\n }, [allNodes, colorBy, colorByDepth, colorScheme])\n\n const nodeStyleFn = useMemo(() => {\n const DEPTH_PASTELS = [\"#f0f0f0\", \"#b5d4ea\", \"#f4c2a1\", \"#b8dab2\", \"#d4b5e0\", \"#f9e0a2\", \"#a8d8d8\"]\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = { stroke: \"#fff\", strokeWidth: 1, strokeOpacity: 0.8 }\n if (colorByDepth) {\n baseStyle.fill = DEPTH_PASTELS[(d.depth || 0) % DEPTH_PASTELS.length]\n } else if (colorBy) {\n baseStyle.fill = getColor(d.data || d, colorBy as string | ((d: any) => string), colorScale)\n } else {\n baseStyle.fill = DEFAULT_COLOR\n }\n return baseStyle\n }\n }, [colorBy, colorByDepth, colorScale])\n\n const hierarchySumFn = useMemo(() => {\n if (typeof valueAccessor === \"function\") return valueAccessor\n return (d: Record<string, any>) => d[valueAccessor] || 1\n }, [valueAccessor])\n\n const resolvedPaddingTop = paddingTopProp !== undefined\n ? paddingTopProp\n : (showLabels && labelMode === \"parent\" ? 18 : undefined)\n\n // Validate\n const error = validateObjectData({ componentName: \"Treemap\", data })\n if (error) return <ChartError componentName=\"Treemap\" message={error} width={width} height={height} />\n\n return (\n <StreamNetworkFrame\n chartType=\"treemap\"\n data={data}\n size={[width, height]}\n margin={margin}\n nodeIDAccessor={nodeIdAccessor}\n childrenAccessor={childrenAccessor}\n hierarchySum={hierarchySumFn}\n padding={paddingProp}\n paddingTop={resolvedPaddingTop}\n nodeStyle={nodeStyleFn}\n colorBy={colorBy as any}\n colorScheme={colorScheme}\n colorByDepth={colorByDepth}\n nodeLabel={showLabels ? (nodeLabel || nodeIdAccessor) : undefined}\n showLabels={showLabels}\n enableHover={enableHover}\n tooltipContent={tooltip ? (d) => (normalizeTooltip(tooltip) as Function)(d.data) : undefined}\n className={className}\n title={title}\n {...frameProps}\n />\n )\n}\nTreemap.displayName = \"Treemap\"\n","\"use client\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport StreamNetworkFrame from \"../../stream/StreamNetworkFrame\"\nimport type { StreamNetworkFrameProps } from \"../../stream/networkTypes\"\nimport { getColor, createColorScale } from \"../shared/colorUtils\"\nimport type { BaseChartProps, ChartAccessor, Accessor } from \"../shared/types\"\nimport { normalizeTooltip, type TooltipProp } from \"../../Tooltip/Tooltip\"\nimport { DEFAULT_COLOR } from \"../shared/hooks\"\nimport ChartError from \"../shared/ChartError\"\nimport { validateObjectData } from \"../shared/validateChartData\"\n\n/**\n * CirclePack component props\n */\nexport interface CirclePackProps<TNode extends Record<string, any> = Record<string, any>> extends BaseChartProps {\n data: TNode\n childrenAccessor?: ChartAccessor<TNode, TNode[]>\n valueAccessor?: Accessor<number>\n nodeIdAccessor?: ChartAccessor<TNode, string>\n colorBy?: ChartAccessor<TNode, string | number>\n colorScheme?: string | string[]\n colorByDepth?: boolean\n showLabels?: boolean\n nodeLabel?: ChartAccessor<TNode, string>\n circleOpacity?: number\n padding?: number\n enableHover?: boolean\n tooltip?: TooltipProp\n frameProps?: Partial<Omit<StreamNetworkFrameProps, \"edges\" | \"size\">>\n}\n\n/**\n * CirclePack - Visualize hierarchical data as nested circles.\n *\n * Wraps StreamNetworkFrame (canvas-first) for circle-pack visualization.\n */\nexport function CirclePack<TNode extends Record<string, any> = Record<string, any>>(props: CirclePackProps<TNode>) {\n const {\n data,\n width = 600,\n height = 600,\n margin = { top: 10, bottom: 10, left: 10, right: 10 },\n className,\n title,\n childrenAccessor = \"children\",\n valueAccessor = \"value\",\n nodeIdAccessor = \"name\",\n colorBy,\n colorScheme = \"category10\",\n colorByDepth = false,\n showLabels = true,\n nodeLabel,\n circleOpacity = 0.7,\n padding: paddingProp = 4,\n enableHover = true,\n tooltip,\n frameProps = {}\n } = props\n\n const allNodes = useMemo(() => {\n if (!data) return []\n const nodes: Array<Record<string, any>> = []\n const traverse = (node: Record<string, any>) => {\n nodes.push(node)\n const children = typeof childrenAccessor === \"function\" ? childrenAccessor(node as TNode) : node[childrenAccessor]\n if (children && Array.isArray(children)) children.forEach(traverse)\n }\n traverse(data)\n return nodes\n }, [data, childrenAccessor])\n\n const colorScale = useMemo(() => {\n if (colorByDepth) return undefined\n if (!colorBy || typeof colorBy === \"function\") return undefined\n return createColorScale(allNodes, colorBy as string, colorScheme)\n }, [allNodes, colorBy, colorByDepth, colorScheme])\n\n const nodeStyleFn = useMemo(() => {\n const DEPTH_PASTELS = [\"#f0f0f0\", \"#b5d4ea\", \"#f4c2a1\", \"#b8dab2\", \"#d4b5e0\", \"#f9e0a2\", \"#a8d8d8\"]\n return (d: Record<string, any>) => {\n const baseStyle: Record<string, string | number> = {\n stroke: \"currentColor\",\n strokeWidth: 1,\n strokeOpacity: 0.3,\n fillOpacity: circleOpacity\n }\n if (colorByDepth) {\n baseStyle.fill = DEPTH_PASTELS[(d.depth || 0) % DEPTH_PASTELS.length]\n } else if (colorBy) {\n baseStyle.fill = getColor(d.data || d, colorBy as string | ((d: any) => string), colorScale)\n } else {\n baseStyle.fill = DEFAULT_COLOR\n }\n return baseStyle\n }\n }, [colorBy, colorByDepth, colorScale, circleOpacity])\n\n const hierarchySumFn = useMemo(() => {\n if (typeof valueAccessor === \"function\") return valueAccessor\n return (d: Record<string, any>) => d[valueAccessor] || 1\n }, [valueAccessor])\n\n // Validate\n const error = validateObjectData({ componentName: \"CirclePack\", data })\n if (error) return <ChartError componentName=\"CirclePack\" message={error} width={width} height={height} />\n\n return (\n <StreamNetworkFrame\n chartType=\"circlepack\"\n data={data}\n size={[width, height]}\n margin={margin}\n nodeIDAccessor={nodeIdAccessor}\n childrenAccessor={childrenAccessor}\n hierarchySum={hierarchySumFn}\n padding={paddingProp}\n nodeStyle={nodeStyleFn}\n colorBy={colorBy as any}\n colorScheme={colorScheme}\n colorByDepth={colorByDepth}\n nodeLabel={showLabels ? (nodeLabel || nodeIdAccessor) : undefined}\n showLabels={showLabels}\n enableHover={enableHover}\n tooltipContent={tooltip ? (d) => (normalizeTooltip(tooltip) as Function)(d.data) : undefined}\n className={className}\n title={title}\n {...frameProps}\n />\n )\n}\nCirclePack.displayName = \"CirclePack\"\n"],"names":["resolveLabelFn","d3Hierarchy","d3Tree","d3Cluster","d3Treemap","d3Pack","d3Partition","defaultTooltipStyle","React","formatValue","Annotation"],"mappings":"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"}