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.
- package/CLAUDE.md +93 -753
- package/README.md +92 -7
- package/ai/dist/componentRegistry.js +26 -0
- package/ai/dist/{ai/mcp-server.js → mcp-server.js} +1 -1
- package/ai/dist/{ai/renderHOCToSVG.js → renderHOCToSVG.js} +2 -2
- package/dist/ChartContainer.d.ts +60 -0
- package/dist/DetailsPanel.d.ts +37 -0
- package/dist/LinkedCharts.d.ts +2 -0
- package/dist/Tooltip/Tooltip.d.ts +2 -2
- package/dist/charts/index.d.ts +1 -1
- package/dist/charts/ordinal/BarChart.d.ts +1 -0
- package/dist/charts/ordinal/BoxPlot.d.ts +1 -0
- package/dist/charts/ordinal/DonutChart.d.ts +1 -0
- package/dist/charts/ordinal/DotPlot.d.ts +1 -0
- package/dist/charts/ordinal/GroupedBarChart.d.ts +1 -0
- package/dist/charts/ordinal/Histogram.d.ts +1 -0
- package/dist/charts/ordinal/PieChart.d.ts +1 -0
- package/dist/charts/ordinal/RidgelinePlot.d.ts +1 -0
- package/dist/charts/ordinal/StackedBarChart.d.ts +1 -0
- package/dist/charts/ordinal/SwarmPlot.d.ts +1 -0
- package/dist/charts/ordinal/ViolinPlot.d.ts +1 -0
- package/dist/charts/realtime/RealtimeHeatmap.d.ts +11 -0
- package/dist/charts/realtime/RealtimeHistogram.d.ts +15 -1
- package/dist/charts/realtime/RealtimeLineChart.d.ts +6 -0
- package/dist/charts/realtime/RealtimeSwarmChart.d.ts +6 -0
- package/dist/charts/realtime/RealtimeWaterfallChart.d.ts +6 -0
- package/dist/charts/shared/annotationRules.d.ts +3 -0
- package/dist/charts/shared/colorUtils.d.ts +17 -11
- package/dist/charts/shared/hooks.d.ts +96 -1
- package/dist/charts/shared/loess.d.ts +13 -0
- package/dist/charts/shared/networkUtils.d.ts +31 -0
- package/dist/charts/shared/tooltipUtils.d.ts +16 -0
- package/dist/charts/shared/types.d.ts +17 -2
- package/dist/charts/shared/validateChartData.d.ts +2 -3
- package/dist/charts/shared/validateProps.d.ts +18 -0
- package/dist/charts/xy/AreaChart.d.ts +4 -0
- package/dist/charts/xy/BubbleChart.d.ts +6 -0
- package/dist/charts/xy/Heatmap.d.ts +4 -0
- package/dist/charts/xy/LineChart.d.ts +6 -0
- package/dist/charts/xy/Scatterplot.d.ts +4 -0
- package/dist/charts/xy/StackedAreaChart.d.ts +4 -0
- package/dist/data/fromVegaLite.d.ts +48 -0
- package/dist/export/chartConfig.d.ts +29 -0
- package/dist/export/selectionSerializer.d.ts +20 -0
- package/dist/geometry/sankeyLinks.d.ts +1 -1
- package/dist/network.min.js +1 -1
- package/dist/network.module.min.js +1 -1
- package/dist/ordinal.min.js +1 -1
- package/dist/ordinal.module.min.js +1 -1
- package/dist/realtime/types.d.ts +20 -6
- package/dist/realtime.min.js +1 -1
- package/dist/realtime.module.min.js +1 -1
- package/dist/semiotic-ai.d.ts +14 -0
- package/dist/semiotic-ai.min.js +1 -1
- package/dist/semiotic-ai.module.min.js +1 -1
- package/dist/semiotic-data.d.ts +2 -0
- package/dist/semiotic-data.min.js +1 -1
- package/dist/semiotic-data.module.min.js +1 -1
- package/dist/semiotic-network.d.ts +9 -19
- package/dist/semiotic-ordinal.d.ts +12 -14
- package/dist/semiotic-xy.d.ts +12 -18
- package/dist/semiotic.d.ts +16 -13
- package/dist/semiotic.min.js +1 -1
- package/dist/semiotic.module.min.js +1 -1
- package/dist/server.min.js +1 -1
- package/dist/server.module.min.js +1 -1
- package/dist/store/ObservationStore.d.ts +61 -0
- package/dist/store/SelectionStore.d.ts +9 -1
- package/dist/store/ThemeStore.d.ts +6 -1
- package/dist/store/TooltipStore.d.ts +3 -1
- package/dist/store/createStore.d.ts +4 -1
- package/dist/store/useObservation.d.ts +18 -0
- package/dist/stream/MarginalGraphics.d.ts +1 -1
- package/dist/stream/NetworkPipelineStore.d.ts +44 -0
- package/dist/stream/OrdinalCanvasHitTester.d.ts +1 -0
- package/dist/stream/OrdinalSVGOverlay.d.ts +6 -2
- package/dist/stream/ParticlePool.d.ts +2 -1
- package/dist/stream/PipelineStore.d.ts +11 -0
- package/dist/stream/SVGOverlay.d.ts +21 -2
- package/dist/stream/SceneGraph.d.ts +1 -1
- package/dist/stream/networkTypes.d.ts +58 -1
- package/dist/stream/ordinalTypes.d.ts +13 -0
- package/dist/stream/types.d.ts +14 -0
- package/dist/types/annotationTypes.d.ts +10 -0
- package/dist/types/networkTypes.d.ts +1 -2
- package/dist/xy.min.js +1 -1
- package/dist/xy.module.min.js +1 -1
- package/package.json +30 -42
- package/ai/dist/ai/componentRegistry.js +0 -45
- package/ai/dist/src/components/Annotation.js +0 -358
- package/ai/dist/src/components/AnnotationLayer/AnnotationLayer.js +0 -369
- package/ai/dist/src/components/Axis/Axis.js +0 -374
- package/ai/dist/src/components/Axis/axisTitle.js +0 -14
- package/ai/dist/src/components/Axis/index.js +0 -7
- package/ai/dist/src/components/Axis/summaryGraphic.js +0 -37
- package/ai/dist/src/components/Brush.js +0 -84
- package/ai/dist/src/components/ChartErrorBoundary.js +0 -91
- package/ai/dist/src/components/DividedLine.js +0 -65
- package/ai/dist/src/components/Legend.js +0 -140
- package/ai/dist/src/components/LinkedCharts.js +0 -95
- package/ai/dist/src/components/ThemeProvider.js +0 -79
- package/ai/dist/src/components/Tooltip/Tooltip.js +0 -309
- package/ai/dist/src/components/TooltipPositioner/index.js +0 -132
- package/ai/dist/src/components/annotationLayerBehavior/annotationHandling.js +0 -73
- package/ai/dist/src/components/annotationLayerBehavior/d3labeler.js +0 -254
- package/ai/dist/src/components/annotationRules/baseRules.js +0 -150
- package/ai/dist/src/components/annotationRules/networkframeRules.js +0 -196
- package/ai/dist/src/components/annotationRules/xyframeRules.js +0 -297
- package/ai/dist/src/components/batchWork.js +0 -35
- package/ai/dist/src/components/charts/index.js +0 -109
- package/ai/dist/src/components/charts/network/ChordDiagram.js +0 -142
- package/ai/dist/src/components/charts/network/CirclePack.js +0 -108
- package/ai/dist/src/components/charts/network/ForceDirectedGraph.js +0 -121
- package/ai/dist/src/components/charts/network/SankeyDiagram.js +0 -155
- package/ai/dist/src/components/charts/network/TreeDiagram.js +0 -110
- package/ai/dist/src/components/charts/network/Treemap.js +0 -106
- package/ai/dist/src/components/charts/ordinal/BarChart.js +0 -156
- package/ai/dist/src/components/charts/ordinal/BoxPlot.js +0 -139
- package/ai/dist/src/components/charts/ordinal/DonutChart.js +0 -130
- package/ai/dist/src/components/charts/ordinal/DotPlot.js +0 -126
- package/ai/dist/src/components/charts/ordinal/GroupedBarChart.js +0 -129
- package/ai/dist/src/components/charts/ordinal/Histogram.js +0 -132
- package/ai/dist/src/components/charts/ordinal/PieChart.js +0 -128
- package/ai/dist/src/components/charts/ordinal/RidgelinePlot.js +0 -130
- package/ai/dist/src/components/charts/ordinal/StackedBarChart.js +0 -130
- package/ai/dist/src/components/charts/ordinal/SwarmPlot.js +0 -147
- package/ai/dist/src/components/charts/ordinal/ViolinPlot.js +0 -138
- package/ai/dist/src/components/charts/realtime/RealtimeHeatmap.js +0 -79
- package/ai/dist/src/components/charts/realtime/RealtimeHistogram.js +0 -114
- package/ai/dist/src/components/charts/realtime/RealtimeLineChart.js +0 -93
- package/ai/dist/src/components/charts/realtime/RealtimeSwarmChart.js +0 -105
- package/ai/dist/src/components/charts/realtime/RealtimeWaterfallChart.js +0 -106
- package/ai/dist/src/components/charts/shared/ChartError.js +0 -72
- package/ai/dist/src/components/charts/shared/colorUtils.js +0 -138
- package/ai/dist/src/components/charts/shared/formatUtils.js +0 -213
- package/ai/dist/src/components/charts/shared/hooks.js +0 -49
- package/ai/dist/src/components/charts/shared/legendUtils.js +0 -57
- package/ai/dist/src/components/charts/shared/selectionUtils.js +0 -67
- package/ai/dist/src/components/charts/shared/tooltipUtils.js +0 -79
- package/ai/dist/src/components/charts/shared/types.js +0 -2
- package/ai/dist/src/components/charts/shared/validateChartData.js +0 -82
- package/ai/dist/src/components/charts/shared/validateProps.js +0 -736
- package/ai/dist/src/components/charts/xy/AreaChart.js +0 -230
- package/ai/dist/src/components/charts/xy/BubbleChart.js +0 -251
- package/ai/dist/src/components/charts/xy/Heatmap.js +0 -235
- package/ai/dist/src/components/charts/xy/LineChart.js +0 -307
- package/ai/dist/src/components/charts/xy/MinimapChart.js +0 -298
- package/ai/dist/src/components/charts/xy/Scatterplot.js +0 -172
- package/ai/dist/src/components/charts/xy/ScatterplotMatrix.js +0 -426
- package/ai/dist/src/components/charts/xy/StackedAreaChart.js +0 -231
- package/ai/dist/src/components/constants/coordinateNames.js +0 -11
- package/ai/dist/src/components/constants/frame_props.js +0 -251
- package/ai/dist/src/components/data/dataFunctions.js +0 -487
- package/ai/dist/src/components/data/multiAccessorUtils.js +0 -14
- package/ai/dist/src/components/data/transforms.js +0 -143
- package/ai/dist/src/components/data/unflowedFunctions.js +0 -5
- package/ai/dist/src/components/export/exportChart.js +0 -121
- package/ai/dist/src/components/generic_utilities/functions.js +0 -5
- package/ai/dist/src/components/geometry/areaDrawing.js +0 -312
- package/ai/dist/src/components/geometry/contourLayout.js +0 -73
- package/ai/dist/src/components/geometry/hexbinLayout.js +0 -163
- package/ai/dist/src/components/geometry/lineDrawing.js +0 -356
- package/ai/dist/src/components/geometry/sankeyLinks.js +0 -331
- package/ai/dist/src/components/geometry/summaryLayouts.js +0 -136
- package/ai/dist/src/components/index.js +0 -18
- package/ai/dist/src/components/processing/InteractionItems.js +0 -223
- package/ai/dist/src/components/processing/hierarchyUtils.js +0 -104
- package/ai/dist/src/components/processing/layouts/chordLayout.js +0 -58
- package/ai/dist/src/components/processing/layouts/forceLayout.js +0 -142
- package/ai/dist/src/components/processing/layouts/hierarchyLayout.js +0 -31
- package/ai/dist/src/components/processing/layouts/index.js +0 -32
- package/ai/dist/src/components/processing/layouts/sankeyLayout.js +0 -96
- package/ai/dist/src/components/processing/layouts/simpleLayouts.js +0 -34
- package/ai/dist/src/components/processing/layouts/types.js +0 -2
- package/ai/dist/src/components/processing/networkDefaults.js +0 -39
- package/ai/dist/src/components/realtime/BinAccumulator.js +0 -36
- package/ai/dist/src/components/realtime/IncrementalExtent.js +0 -55
- package/ai/dist/src/components/realtime/RingBuffer.js +0 -104
- package/ai/dist/src/components/realtime/renderers/barRenderer.js +0 -133
- package/ai/dist/src/components/realtime/renderers/candlestickRenderer.js +0 -7
- package/ai/dist/src/components/realtime/renderers/lineRenderer.js +0 -164
- package/ai/dist/src/components/realtime/renderers/swarmRenderer.js +0 -91
- package/ai/dist/src/components/realtime/renderers/types.js +0 -2
- package/ai/dist/src/components/realtime/renderers/waterfallRenderer.js +0 -163
- package/ai/dist/src/components/realtime/types.js +0 -2
- package/ai/dist/src/components/semiotic-ai.js +0 -89
- package/ai/dist/src/components/semiotic-data.js +0 -12
- package/ai/dist/src/components/semiotic-network.js +0 -38
- package/ai/dist/src/components/semiotic-ordinal.js +0 -28
- package/ai/dist/src/components/semiotic-realtime.js +0 -30
- package/ai/dist/src/components/semiotic-server.js +0 -8
- package/ai/dist/src/components/semiotic-xy.js +0 -35
- package/ai/dist/src/components/semiotic.js +0 -109
- package/ai/dist/src/components/server/renderToStaticSVG.js +0 -594
- package/ai/dist/src/components/store/SelectionStore.js +0 -91
- package/ai/dist/src/components/store/ThemeStore.js +0 -78
- package/ai/dist/src/components/store/TooltipStore.js +0 -13
- package/ai/dist/src/components/store/createStore.js +0 -81
- package/ai/dist/src/components/store/useSelection.js +0 -133
- package/ai/dist/src/components/stream/CanvasHitTester.js +0 -164
- package/ai/dist/src/components/stream/DataSourceAdapter.js +0 -99
- package/ai/dist/src/components/stream/MarginalGraphics.js +0 -266
- package/ai/dist/src/components/stream/NetworkCanvasHitTester.js +0 -228
- package/ai/dist/src/components/stream/NetworkPipelineStore.js +0 -498
- package/ai/dist/src/components/stream/NetworkSVGOverlay.js +0 -70
- package/ai/dist/src/components/stream/NetworkSceneGraph.js +0 -38
- package/ai/dist/src/components/stream/OrdinalCanvasHitTester.js +0 -146
- package/ai/dist/src/components/stream/OrdinalPipelineStore.js +0 -786
- package/ai/dist/src/components/stream/OrdinalSVGOverlay.js +0 -130
- package/ai/dist/src/components/stream/ParticlePool.js +0 -174
- package/ai/dist/src/components/stream/PipelineStore.js +0 -1243
- package/ai/dist/src/components/stream/SVGOverlay.js +0 -129
- package/ai/dist/src/components/stream/SceneGraph.js +0 -132
- package/ai/dist/src/components/stream/StreamNetworkFrame.js +0 -561
- package/ai/dist/src/components/stream/StreamOrdinalFrame.js +0 -492
- package/ai/dist/src/components/stream/StreamXYFrame.js +0 -590
- package/ai/dist/src/components/stream/accessorUtils.js +0 -20
- package/ai/dist/src/components/stream/index.js +0 -32
- package/ai/dist/src/components/stream/layouts/chordLayoutPlugin.js +0 -352
- package/ai/dist/src/components/stream/layouts/forceLayoutPlugin.js +0 -230
- package/ai/dist/src/components/stream/layouts/hierarchyLayoutPlugin.js +0 -568
- package/ai/dist/src/components/stream/layouts/index.js +0 -28
- package/ai/dist/src/components/stream/layouts/sankeyLayoutPlugin.js +0 -245
- package/ai/dist/src/components/stream/networkTypes.js +0 -17
- package/ai/dist/src/components/stream/ordinalSceneBuilders/barScene.js +0 -126
- package/ai/dist/src/components/stream/ordinalSceneBuilders/connectorScene.js +0 -62
- package/ai/dist/src/components/stream/ordinalSceneBuilders/pieScene.js +0 -33
- package/ai/dist/src/components/stream/ordinalSceneBuilders/pointScene.js +0 -63
- package/ai/dist/src/components/stream/ordinalSceneBuilders/statisticalScene.js +0 -278
- package/ai/dist/src/components/stream/ordinalSceneBuilders/timelineScene.js +0 -30
- package/ai/dist/src/components/stream/ordinalSceneBuilders/types.js +0 -2
- package/ai/dist/src/components/stream/ordinalTypes.js +0 -2
- package/ai/dist/src/components/stream/renderers/areaCanvasRenderer.js +0 -48
- package/ai/dist/src/components/stream/renderers/barCanvasRenderer.js +0 -70
- package/ai/dist/src/components/stream/renderers/boxplotCanvasRenderer.js +0 -75
- package/ai/dist/src/components/stream/renderers/candlestickCanvasRenderer.js +0 -28
- package/ai/dist/src/components/stream/renderers/connectorCanvasRenderer.js +0 -47
- package/ai/dist/src/components/stream/renderers/heatmapCanvasRenderer.js +0 -31
- package/ai/dist/src/components/stream/renderers/lineCanvasRenderer.js +0 -140
- package/ai/dist/src/components/stream/renderers/networkArcRenderer.js +0 -38
- package/ai/dist/src/components/stream/renderers/networkCircleRenderer.js +0 -37
- package/ai/dist/src/components/stream/renderers/networkEdgeRenderer.js +0 -102
- package/ai/dist/src/components/stream/renderers/networkParticleRenderer.js +0 -63
- package/ai/dist/src/components/stream/renderers/networkRectRenderer.js +0 -35
- package/ai/dist/src/components/stream/renderers/pointCanvasRenderer.js +0 -38
- package/ai/dist/src/components/stream/renderers/swarmCanvasRenderer.js +0 -10
- package/ai/dist/src/components/stream/renderers/types.js +0 -2
- package/ai/dist/src/components/stream/renderers/violinCanvasRenderer.js +0 -47
- package/ai/dist/src/components/stream/renderers/waterfallCanvasRenderer.js +0 -38
- package/ai/dist/src/components/stream/renderers/wedgeCanvasRenderer.js +0 -33
- package/ai/dist/src/components/stream/types.js +0 -2
- package/ai/dist/src/components/types/annotationTypes.js +0 -2
- package/ai/dist/src/components/types/canvasTypes.js +0 -2
- package/ai/dist/src/components/types/generalTypes.js +0 -2
- package/ai/dist/src/components/types/interactionTypes.js +0 -2
- package/ai/dist/src/components/types/legendTypes.js +0 -2
- package/ai/dist/src/components/types/networkTypes.js +0 -2
- package/ai/dist/src/components/types/ordinalTypes.js +0 -2
- package/ai/dist/src/components/types/xyTypes.js +0 -2
- package/ai/dist/src/components/useBoundingRect.js +0 -24
- package/ai/dist/src/components/visualizationLayerBehavior/axis.js +0 -301
- package/ai/dist/src/components/visualizationLayerBehavior/general.js +0 -435
- package/ai/dist/src/setupTests.js +0 -4
- package/dist/AnnotationLayer/AnnotationLayer.d.ts +0 -25
- package/dist/Axis/Axis.d.ts +0 -7
- package/dist/Axis/axisTitle.d.ts +0 -10
- package/dist/Axis/index.d.ts +0 -2
- package/dist/Axis/summaryGraphic.d.ts +0 -17
- package/dist/Brush.d.ts +0 -12
- package/dist/DividedLine.d.ts +0 -16
- package/dist/TooltipPositioner/index.d.ts +0 -7
- package/dist/annotationLayerBehavior/annotationHandling.d.ts +0 -19
- package/dist/annotationLayerBehavior/d3labeler.d.ts +0 -9
- package/dist/annotationRules/baseRules.d.ts +0 -25
- package/dist/annotationRules/networkframeRules.d.ts +0 -48
- package/dist/annotationRules/xyframeRules.d.ts +0 -117
- package/dist/batchWork.d.ts +0 -6
- package/dist/constants/coordinateNames.d.ts +0 -8
- package/dist/constants/frame_props.d.ts +0 -13
- package/dist/data/dataFunctions.d.ts +0 -45
- package/dist/data/multiAccessorUtils.d.ts +0 -1
- package/dist/data/unflowedFunctions.d.ts +0 -1
- package/dist/generic_utilities/functions.d.ts +0 -1
- package/dist/geometry/areaDrawing.d.ts +0 -21
- package/dist/geometry/contourLayout.d.ts +0 -6
- package/dist/geometry/hexbinLayout.d.ts +0 -7
- package/dist/geometry/lineDrawing.d.ts +0 -71
- package/dist/geometry/summaryLayouts.d.ts +0 -45
- package/dist/index.d.ts +0 -1
- package/dist/network.js +0 -7495
- package/dist/network.js.map +0 -1
- package/dist/network.module.js +0 -7458
- package/dist/network.module.js.map +0 -1
- package/dist/ordinal.js +0 -6497
- package/dist/ordinal.js.map +0 -1
- package/dist/ordinal.module.js +0 -6465
- package/dist/ordinal.module.js.map +0 -1
- package/dist/processing/InteractionItems.d.ts +0 -13
- package/dist/processing/hierarchyUtils.d.ts +0 -16
- package/dist/processing/layouts/chordLayout.d.ts +0 -2
- package/dist/processing/layouts/forceLayout.d.ts +0 -3
- package/dist/processing/layouts/hierarchyLayout.d.ts +0 -10
- package/dist/processing/layouts/index.d.ts +0 -8
- package/dist/processing/layouts/sankeyLayout.d.ts +0 -8
- package/dist/processing/layouts/simpleLayouts.d.ts +0 -7
- package/dist/processing/layouts/types.d.ts +0 -17
- package/dist/processing/networkDefaults.d.ts +0 -36
- package/dist/realtime/renderers/barRenderer.d.ts +0 -2
- package/dist/realtime/renderers/candlestickRenderer.d.ts +0 -2
- package/dist/realtime/renderers/lineRenderer.d.ts +0 -2
- package/dist/realtime/renderers/swarmRenderer.d.ts +0 -2
- package/dist/realtime.js +0 -7072
- package/dist/realtime.js.map +0 -1
- package/dist/realtime.module.js +0 -7043
- package/dist/realtime.module.js.map +0 -1
- package/dist/semiotic-ai.js +0 -13323
- package/dist/semiotic-ai.js.map +0 -1
- package/dist/semiotic-ai.module.js +0 -13264
- package/dist/semiotic-ai.module.js.map +0 -1
- package/dist/semiotic-data.js +0 -141
- package/dist/semiotic-data.js.map +0 -1
- package/dist/semiotic-data.module.js +0 -136
- package/dist/semiotic-data.module.js.map +0 -1
- package/dist/semiotic.js +0 -16351
- package/dist/semiotic.js.map +0 -1
- package/dist/semiotic.module.js +0 -16265
- package/dist/semiotic.module.js.map +0 -1
- package/dist/server.js +0 -5191
- package/dist/server.js.map +0 -1
- package/dist/server.module.js +0 -5166
- package/dist/server.module.js.map +0 -1
- package/dist/stream/NetworkSceneGraph.d.ts +0 -14
- package/dist/stream/index.d.ts +0 -16
- package/dist/types/canvasTypes.d.ts +0 -9
- package/dist/types/xyTypes.d.ts +0 -24
- package/dist/useBoundingRect.d.ts +0 -2
- package/dist/visualizationLayerBehavior/axis.d.ts +0 -36
- package/dist/visualizationLayerBehavior/general.d.ts +0 -80
- package/dist/xy.js +0 -6993
- package/dist/xy.js.map +0 -1
- package/dist/xy.module.js +0 -6957
- 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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"}
|