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":"server.module.js","sources":["../src/components/realtime/RingBuffer.ts","../src/components/realtime/IncrementalExtent.ts","../src/components/realtime/BinAccumulator.ts","../src/components/realtime/renderers/waterfallRenderer.ts","../src/components/stream/SceneGraph.ts","../src/components/stream/accessorUtils.ts","../src/components/stream/PipelineStore.ts","../src/components/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/ordinalSceneBuilders/barScene.ts","../src/components/stream/ordinalSceneBuilders/pointScene.ts","../src/components/stream/ordinalSceneBuilders/pieScene.ts","../src/components/stream/ordinalSceneBuilders/statisticalScene.ts","../src/components/stream/ordinalSceneBuilders/timelineScene.ts","../src/components/stream/ordinalSceneBuilders/connectorScene.ts","../src/components/stream/OrdinalPipelineStore.ts","../src/components/server/renderToStaticSVG.tsx"],"sourcesContent":["export class RingBuffer<T> {\n private buffer: (T | undefined)[]\n private head: number = 0\n private _size: number = 0\n\n constructor(private _capacity: number) {\n if (_capacity < 1) {\n throw new Error(\"RingBuffer capacity must be at least 1\")\n }\n this.buffer = new Array(_capacity)\n }\n\n push(value: T): T | undefined {\n let evicted: T | undefined\n if (this._size === this._capacity) {\n // Buffer is full — the slot at head is the oldest item\n evicted = this.buffer[this.head]\n } else {\n this._size++\n }\n this.buffer[this.head] = value\n this.head = (this.head + 1) % this._capacity\n return evicted\n }\n\n pushMany(values: T[]): T[] {\n const evicted: T[] = []\n for (const v of values) {\n const e = this.push(v)\n if (e !== undefined) {\n evicted.push(e)\n }\n }\n return evicted\n }\n\n get(index: number): T | undefined {\n if (index < 0 || index >= this._size) return undefined\n const realIndex =\n (this.head - this._size + index + this._capacity) % this._capacity\n return this.buffer[realIndex]\n }\n\n peek(): T | undefined {\n if (this._size === 0) return undefined\n return this.buffer[(this.head - 1 + this._capacity) % this._capacity]\n }\n\n peekOldest(): T | undefined {\n if (this._size === 0) return undefined\n return this.buffer[(this.head - this._size + this._capacity) % this._capacity]\n }\n\n [Symbol.iterator](): Iterator<T> {\n let i = 0\n const self = this\n return {\n next(): IteratorResult<T> {\n if (i >= self._size) return { done: true, value: undefined } as IteratorReturnResult<undefined>\n return { done: false, value: self.get(i++)! }\n }\n }\n }\n\n toArray(): T[] {\n const result: T[] = []\n for (const item of this) {\n result.push(item)\n }\n return result\n }\n\n resize(newCapacity: number): T[] {\n if (newCapacity < 1) {\n throw new Error(\"RingBuffer capacity must be at least 1\")\n }\n const items = this.toArray()\n const evicted: T[] = []\n while (items.length > newCapacity) {\n evicted.push(items.shift()!)\n }\n this._capacity = newCapacity\n this.buffer = new Array(newCapacity)\n this.head = 0\n this._size = 0\n for (const item of items) {\n this.push(item)\n }\n return evicted\n }\n\n clear(): void {\n this.buffer = new Array(this._capacity)\n this.head = 0\n this._size = 0\n }\n\n get size(): number {\n return this._size\n }\n\n get capacity(): number {\n return this._capacity\n }\n\n get full(): boolean {\n return this._size === this._capacity\n }\n}\n","export class IncrementalExtent {\n private _min: number = Infinity\n private _max: number = -Infinity\n private _dirty: boolean = false\n\n push(value: number): void {\n if (Number.isNaN(value)) return\n if (value < this._min) this._min = value\n if (value > this._max) this._max = value\n }\n\n evict(value: number): void {\n if (value === this._min || value === this._max) {\n this._dirty = true\n }\n }\n\n recalculate<T>(\n values: Iterable<T>,\n accessor?: (v: T) => number\n ): void {\n this._min = Infinity\n this._max = -Infinity\n for (const v of values) {\n const n = accessor ? accessor(v) : (v as number)\n if (Number.isNaN(n)) continue\n if (n < this._min) this._min = n\n if (n > this._max) this._max = n\n }\n this._dirty = false\n }\n\n clear(): void {\n this._min = Infinity\n this._max = -Infinity\n this._dirty = false\n }\n\n get extent(): [number, number] {\n return [this._min, this._max]\n }\n\n get min(): number {\n return this._min\n }\n\n get max(): number {\n return this._max\n }\n\n get dirty(): boolean {\n return this._dirty\n }\n}\n","export interface Bin {\n start: number\n end: number\n total: number\n categories: Map<string, number>\n}\n\nexport function computeBins(\n data: Iterable<Record<string, any>>,\n getTime: (d: Record<string, any>) => number,\n getValue: (d: Record<string, any>) => number,\n binSize: number,\n getCategory?: (d: Record<string, any>) => string\n): Map<number, Bin> {\n const bins = new Map<number, Bin>()\n\n for (const d of data) {\n const t = getTime(d)\n const v = getValue(d)\n\n if (t == null || v == null || Number.isNaN(t) || Number.isNaN(v)) continue\n\n const binStart = Math.floor(t / binSize) * binSize\n\n let bin = bins.get(binStart)\n if (!bin) {\n bin = { start: binStart, end: binStart + binSize, total: 0, categories: new Map() }\n bins.set(binStart, bin)\n }\n\n bin.total += v\n\n if (getCategory) {\n const cat = getCategory(d)\n bin.categories.set(cat, (bin.categories.get(cat) || 0) + v)\n }\n }\n\n return bins\n}\n\nexport function computeBinExtent(\n data: Iterable<Record<string, any>>,\n getTime: (d: Record<string, any>) => number,\n getValue: (d: Record<string, any>) => number,\n binSize: number,\n getCategory?: (d: Record<string, any>) => string\n): [number, number] {\n const bins = computeBins(data, getTime, getValue, binSize, getCategory)\n\n if (bins.size === 0) return [0, 0]\n\n let maxTotal = 0\n for (const bin of bins.values()) {\n if (bin.total > maxTotal) maxTotal = bin.total\n }\n\n return [0, maxTotal]\n}\n","import type { RendererFn } from \"./types\"\n\nconst DEFAULT_POSITIVE_COLOR = \"#28a745\"\nconst DEFAULT_NEGATIVE_COLOR = \"#dc3545\"\n\nexport function computeWaterfallExtent(\n data: Iterable<Record<string, any>>,\n getValue: (d: Record<string, any>) => number\n): [number, number] {\n let min = 0\n let max = 0\n let cumulative = 0\n\n for (const d of data) {\n const v = getValue(d)\n if (v == null || Number.isNaN(v)) continue\n cumulative += v\n if (cumulative < min) min = cumulative\n if (cumulative > max) max = cumulative\n }\n\n return [min, max]\n}\n\nexport const waterfallRenderer: RendererFn = (ctx, data, scales, layout, style, accessors, annotations, options) => {\n const { time: timeScale, value: valueScale } = scales\n const { timeAxis, width, height } = layout\n const { time: getTime, value: getValue } = accessors\n const ws = options?.waterfallStyle\n\n const positiveColor = ws?.positiveColor ?? DEFAULT_POSITIVE_COLOR\n const negativeColor = ws?.negativeColor ?? DEFAULT_NEGATIVE_COLOR\n const gap = ws?.gap ?? 1\n const connectorStroke = ws?.connectorStroke\n const connectorWidth = ws?.connectorWidth ?? 1\n const hasStroke = ws?.stroke != null\n if (hasStroke) {\n ctx.strokeStyle = ws!.stroke!\n ctx.lineWidth = ws?.strokeWidth ?? 1\n }\n\n // Collect into array for random access (skip NaN/null values)\n const arr: Record<string, any>[] = []\n for (const d of data) {\n const v = getValue(d)\n if (v == null || Number.isNaN(v)) continue\n arr.push(d)\n }\n\n if (arr.length === 0) return\n\n let baseline = 0\n // Track the end edge of the previous bar and its cumulative value for connectors\n let prevEdge: number | null = null\n let prevCumulative: number | null = null\n\n for (let i = 0; i < arr.length; i++) {\n const d = arr[i]\n const t = getTime(d)\n const delta = getValue(d)\n const cumEnd = baseline + delta\n\n // Compute bar width from time gap to next point\n let barWidthTime: number\n if (i < arr.length - 1) {\n barWidthTime = getTime(arr[i + 1]) - t\n } else if (i > 0) {\n barWidthTime = t - getTime(arr[i - 1])\n } else {\n // Single point fallback: use 0 to trigger pixel fallback\n barWidthTime = 0\n }\n\n ctx.fillStyle = delta >= 0 ? positiveColor : negativeColor\n\n if (timeAxis === \"x\") {\n let rawX0: number, rawX1: number\n\n if (barWidthTime !== 0) {\n rawX0 = timeScale(t)\n rawX1 = timeScale(t + barWidthTime)\n } else {\n rawX0 = timeScale(t)\n rawX1 = rawX0 + width / 10\n }\n\n const x0 = Math.min(rawX0, rawX1) + gap / 2\n const x1 = Math.max(rawX0, rawX1) - gap / 2\n const barWidth = x1 - x0\n if (barWidth <= 0) {\n baseline = cumEnd\n prevEdge = x1\n prevCumulative = cumEnd\n continue\n }\n\n const yBaseline = valueScale(baseline)\n const yTop = valueScale(cumEnd)\n const rectY = Math.min(yBaseline, yTop)\n const rectH = Math.abs(yBaseline - yTop)\n\n // Connector line at the baseline level from previous bar's right edge to this bar's left edge\n if (connectorStroke && prevEdge != null && prevCumulative != null) {\n ctx.save()\n ctx.strokeStyle = connectorStroke\n ctx.lineWidth = connectorWidth\n const connY = valueScale(prevCumulative)\n ctx.beginPath()\n ctx.moveTo(prevEdge, connY)\n ctx.lineTo(x0, connY)\n ctx.stroke()\n ctx.restore()\n if (hasStroke) {\n ctx.strokeStyle = ws!.stroke!\n ctx.lineWidth = ws?.strokeWidth ?? 1\n }\n }\n\n ctx.fillRect(x0, rectY, barWidth, rectH)\n if (hasStroke) ctx.strokeRect(x0, rectY, barWidth, rectH)\n\n prevEdge = x1\n } else {\n // timeAxis === \"y\": horizontal bars\n let rawY0: number, rawY1: number\n\n if (barWidthTime !== 0) {\n rawY0 = timeScale(t)\n rawY1 = timeScale(t + barWidthTime)\n } else {\n rawY0 = timeScale(t)\n rawY1 = rawY0 + height / 10\n }\n\n const y0 = Math.min(rawY0, rawY1) + gap / 2\n const y1 = Math.max(rawY0, rawY1) - gap / 2\n const barHeight = y1 - y0\n if (barHeight <= 0) {\n baseline = cumEnd\n prevEdge = y1\n prevCumulative = cumEnd\n continue\n }\n\n const xBaseline = valueScale(baseline)\n const xEnd = valueScale(cumEnd)\n const rectX = Math.min(xBaseline, xEnd)\n const rectW = Math.abs(xEnd - xBaseline)\n\n // Connector line at the baseline level from previous bar's bottom edge to this bar's top edge\n if (connectorStroke && prevEdge != null && prevCumulative != null) {\n ctx.save()\n ctx.strokeStyle = connectorStroke\n ctx.lineWidth = connectorWidth\n const connX = valueScale(prevCumulative)\n ctx.beginPath()\n ctx.moveTo(connX, prevEdge)\n ctx.lineTo(connX, y0)\n ctx.stroke()\n ctx.restore()\n if (hasStroke) {\n ctx.strokeStyle = ws!.stroke!\n ctx.lineWidth = ws?.strokeWidth ?? 1\n }\n }\n\n ctx.fillRect(rectX, y0, rectW, barHeight)\n if (hasStroke) ctx.strokeRect(rectX, y0, rectW, barHeight)\n\n prevEdge = y1\n }\n\n baseline = cumEnd\n prevCumulative = cumEnd\n }\n}\n","import type {\n SceneNode,\n LineSceneNode,\n AreaSceneNode,\n PointSceneNode,\n RectSceneNode,\n HeatcellSceneNode,\n Style,\n StreamScales,\n StreamLayout\n} from \"./types\"\n\n// ── Scene node builders ────────────────────────────────────────────────\n\nexport function buildLineNode(\n data: Record<string, any>[],\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n style: Style,\n group?: string\n): LineSceneNode {\n const path: [number, number][] = []\n const rawValues: number[] = []\n for (const d of data) {\n const xVal = xGet(d)\n const yVal = yGet(d)\n if (xVal == null || yVal == null || Number.isNaN(xVal) || Number.isNaN(yVal)) continue\n path.push([scales.x(xVal), scales.y(yVal)])\n rawValues.push(yVal)\n }\n return { type: \"line\", path, rawValues, style, datum: data, group }\n}\n\nexport function buildAreaNode(\n data: Record<string, any>[],\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n baselineY: number,\n style: Style,\n group?: string\n): AreaSceneNode {\n const topPath: [number, number][] = []\n const bottomPath: [number, number][] = []\n for (const d of data) {\n const xVal = xGet(d)\n const yVal = yGet(d)\n if (xVal == null || yVal == null || Number.isNaN(xVal) || Number.isNaN(yVal)) continue\n const px = scales.x(xVal)\n topPath.push([px, scales.y(yVal)])\n bottomPath.push([px, scales.y(baselineY)])\n }\n return { type: \"area\", topPath, bottomPath, style, datum: data, group }\n}\n\nexport function buildStackedAreaNodes(\n groups: { key: string; data: Record<string, any>[] }[],\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n styleFn: (group: string, sampleDatum?: Record<string, any>) => Style,\n normalize?: boolean\n): AreaSceneNode[] {\n // Collect all unique x values\n const xSet = new Set<number>()\n for (const g of groups) {\n for (const d of g.data) {\n const x = xGet(d)\n if (x != null && !Number.isNaN(x)) xSet.add(x)\n }\n }\n const xValues = Array.from(xSet).sort((a, b) => a - b)\n\n // Build value lookup per group per x\n const valueMaps: Map<string, Map<number, number>> = new Map()\n for (const g of groups) {\n const m = new Map<number, number>()\n for (const d of g.data) {\n const x = xGet(d)\n const y = yGet(d)\n if (x != null && y != null && !Number.isNaN(x) && !Number.isNaN(y)) {\n m.set(x, (m.get(x) || 0) + y)\n }\n }\n valueMaps.set(g.key, m)\n }\n\n // Compute totals per x for normalization\n let totals: Map<number, number> | undefined\n if (normalize) {\n totals = new Map()\n for (const x of xValues) {\n let sum = 0\n for (const g of groups) {\n sum += valueMaps.get(g.key)?.get(x) || 0\n }\n totals.set(x, sum || 1) // avoid div by 0\n }\n }\n\n // Build stacked area nodes bottom-up\n const nodes: AreaSceneNode[] = []\n const baselines = new Map<number, number>() // x → cumulative y\n for (const x of xValues) baselines.set(x, 0)\n\n for (const g of groups) {\n const vMap = valueMaps.get(g.key)!\n const topPath: [number, number][] = []\n const bottomPath: [number, number][] = []\n\n for (const x of xValues) {\n let rawY = vMap.get(x) || 0\n const base = baselines.get(x)!\n\n if (normalize) {\n const total = totals!.get(x)!\n rawY = rawY / total\n }\n\n const px = scales.x(x)\n bottomPath.push([px, scales.y(base)])\n topPath.push([px, scales.y(base + rawY)])\n baselines.set(x, base + rawY)\n }\n\n nodes.push({\n type: \"area\",\n topPath,\n bottomPath,\n style: styleFn(g.key, g.data[0]),\n datum: g.data,\n group: g.key\n })\n }\n\n return nodes\n}\n\nexport function buildPointNode(\n datum: Record<string, any>,\n scales: StreamScales,\n xGet: (d: Record<string, any>) => number,\n yGet: (d: Record<string, any>) => number,\n r: number,\n style: Style\n): PointSceneNode | null {\n const xVal = xGet(datum)\n const yVal = yGet(datum)\n if (xVal == null || yVal == null || Number.isNaN(xVal) || Number.isNaN(yVal)) return null\n return {\n type: \"point\",\n x: scales.x(xVal),\n y: scales.y(yVal),\n r,\n style,\n datum\n }\n}\n\nexport function buildRectNode(\n x: number,\n y: number,\n w: number,\n h: number,\n style: Style,\n datum: any,\n group?: string\n): RectSceneNode {\n return { type: \"rect\", x, y, w, h, style, datum, group }\n}\n\nexport function buildHeatcellNode(\n x: number,\n y: number,\n w: number,\n h: number,\n fill: string,\n datum: any\n): HeatcellSceneNode {\n return { type: \"heatcell\", x, y, w, h, fill, datum }\n}\n\n// ── Scene graph container ──────────────────────────────────────────────\n\nexport interface SceneGraphData {\n nodes: SceneNode[]\n version: number\n}\n\nexport function createSceneGraph(): SceneGraphData {\n return { nodes: [], version: 0 }\n}\n\nexport function updateSceneGraph(\n scene: SceneGraphData,\n nodes: SceneNode[]\n): SceneGraphData {\n return { nodes, version: scene.version + 1 }\n}\n","// ── Accessor resolution ────────────────────────────────────────────────\n\nexport function resolveAccessor<T>(\n accessor: string | ((d: T) => number) | undefined,\n fallback: string\n): (d: T) => number {\n if (typeof accessor === \"function\") return (d: T) => +accessor(d)\n const key = accessor || fallback\n return (d: T) => +(d as any)[key]\n}\n\nexport function resolveStringAccessor<T>(\n accessor: string | ((d: T) => string) | undefined,\n fallback?: string\n): ((d: T) => string) | undefined {\n if (typeof accessor === \"function\") return accessor\n if (accessor) return (d: T) => String((d as any)[accessor])\n if (fallback) return (d: T) => String((d as any)[fallback])\n return undefined\n}\n","import { scaleLinear, type ScaleLinear } from \"d3-scale\"\nimport { RingBuffer } from \"../realtime/RingBuffer\"\nimport { IncrementalExtent } from \"../realtime/IncrementalExtent\"\nimport { computeBins, computeBinExtent } from \"../realtime/BinAccumulator\"\nimport { computeWaterfallExtent } from \"../realtime/renderers/waterfallRenderer\"\nimport type {\n Changeset,\n StreamChartType,\n StreamScales,\n StreamLayout,\n SceneNode,\n AreaSceneNode,\n CandlestickSceneNode,\n CandlestickStyle,\n Style,\n ArrowOfTime,\n WindowMode,\n DecayConfig,\n PulseConfig,\n TransitionConfig,\n StalenessConfig\n} from \"./types\"\nimport {\n buildLineNode,\n buildAreaNode,\n buildStackedAreaNodes,\n buildPointNode,\n buildRectNode,\n buildHeatcellNode\n} from \"./SceneGraph\"\nimport { resolveAccessor, resolveStringAccessor } from \"./accessorUtils\"\n\n// ── Axis direction helpers ─────────────────────────────────────────────\n\nfunction getTimeAxis(arrowOfTime: ArrowOfTime): \"x\" | \"y\" {\n return arrowOfTime === \"up\" || arrowOfTime === \"down\" ? \"y\" : \"x\"\n}\n\n// ── PipelineStore config ───────────────────────────────────────────────\n\nexport interface PipelineConfig {\n chartType: StreamChartType\n runtimeMode?: \"streaming\" | \"bounded\"\n windowSize: number\n windowMode: WindowMode\n arrowOfTime: ArrowOfTime\n extentPadding: number\n\n // Accessors\n xAccessor?: string | ((d: any) => number)\n yAccessor?: string | ((d: any) => number)\n timeAccessor?: string | ((d: any) => number)\n valueAccessor?: string | ((d: any) => number)\n colorAccessor?: string | ((d: any) => string)\n sizeAccessor?: string | ((d: any) => number)\n groupAccessor?: string | ((d: any) => string)\n categoryAccessor?: string | ((d: any) => string)\n lineDataAccessor?: string\n\n // Fixed extents (partial: [min] or [min, undefined] to set only min)\n xExtent?: [number | undefined, number | undefined] | [number]\n yExtent?: [number | undefined, number | undefined] | [number]\n sizeRange?: [number, number]\n\n // Bar/heatmap specifics\n binSize?: number\n normalize?: boolean\n\n // Candlestick accessors\n openAccessor?: string | ((d: any) => number)\n highAccessor?: string | ((d: any) => number)\n lowAccessor?: string | ((d: any) => number)\n closeAccessor?: string | ((d: any) => number)\n candlestickStyle?: CandlestickStyle\n\n // Bounds/uncertainty\n boundsAccessor?: string | ((d: any) => number)\n boundsStyle?: any\n\n // Style\n lineStyle?: any\n pointStyle?: (d: any) => Style & { r?: number }\n areaStyle?: (d: any) => Style\n swarmStyle?: { radius?: number; fill?: string; opacity?: number; stroke?: string; strokeWidth?: number }\n colorScheme?: string | string[]\n barColors?: Record<string, string>\n\n // Annotations (threshold coloring uses these)\n annotations?: Record<string, any>[]\n\n // Realtime encoding\n decay?: DecayConfig\n pulse?: PulseConfig\n transition?: TransitionConfig\n staleness?: StalenessConfig\n\n // Streaming heatmap\n heatmapAggregation?: \"count\" | \"sum\" | \"mean\"\n heatmapXBins?: number\n heatmapYBins?: number\n}\n\n// ── PipelineStore ──────────────────────────────────────────────────────\n\nexport class PipelineStore {\n private buffer: RingBuffer<Record<string, any>>\n private xExtent = new IncrementalExtent()\n private yExtent = new IncrementalExtent()\n private config: PipelineConfig\n private growingCap: number\n\n private getX: (d: any) => number\n private getY: (d: any) => number\n private getGroup: ((d: any) => string) | undefined\n private getCategory: ((d: any) => string) | undefined\n private getSize: ((d: any) => number) | undefined\n private getColor: ((d: any) => string) | undefined\n private getBounds: ((d: any) => number) | undefined\n private getOpen: ((d: any) => number) | undefined\n private getHigh: ((d: any) => number) | undefined\n private getLow: ((d: any) => number) | undefined\n private getClose: ((d: any) => number) | undefined\n\n // ── Pulse tracking ──────────────────────────────────────────────────\n private timestampBuffer: RingBuffer<number> | null = null\n\n // ── Transition animation ────────────────────────────────────────────\n activeTransition: { startTime: number; duration: number } | null = null\n private prevPositionMap = new Map<string, { x: number; y: number; w?: number; h?: number; r?: number }>()\n\n // ── Staleness tracking ──────────────────────────────────────────────\n lastIngestTime = 0\n\n scales: StreamScales | null = null\n scene: SceneNode[] = []\n version = 0\n\n constructor(config: PipelineConfig) {\n this.config = config\n this.buffer = new RingBuffer(config.windowSize)\n this.growingCap = config.windowSize\n\n // Resolve accessors based on streaming vs bounded mode.\n // Streaming types use time/value defaults; bounded types use x/y defaults.\n const isStreamingType = [\"bar\", \"swarm\", \"waterfall\"].includes(config.chartType)\n const useStreamingDefaults = isStreamingType || config.runtimeMode === \"streaming\"\n\n if (useStreamingDefaults) {\n this.getX = resolveAccessor(config.timeAccessor || config.xAccessor, \"time\")\n this.getY = resolveAccessor(\n config.valueAccessor || config.yAccessor,\n \"value\"\n )\n } else {\n this.getX = resolveAccessor(config.xAccessor, \"x\")\n this.getY = resolveAccessor(config.yAccessor, \"y\")\n }\n\n this.getGroup = resolveStringAccessor(config.groupAccessor)\n this.getCategory = resolveStringAccessor(config.categoryAccessor)\n this.getSize = config.sizeAccessor\n ? resolveAccessor(config.sizeAccessor, \"size\")\n : undefined\n this.getColor = resolveStringAccessor(config.colorAccessor)\n this.getBounds = config.boundsAccessor\n ? resolveAccessor(config.boundsAccessor, \"bounds\")\n : undefined\n\n // Candlestick accessors\n if (config.chartType === \"candlestick\") {\n this.getOpen = resolveAccessor(config.openAccessor, \"open\")\n this.getHigh = resolveAccessor(config.highAccessor, \"high\")\n this.getLow = resolveAccessor(config.lowAccessor, \"low\")\n this.getClose = resolveAccessor(config.closeAccessor, \"close\")\n }\n\n // Pulse: parallel timestamp buffer\n if (config.pulse) {\n this.timestampBuffer = new RingBuffer(config.windowSize)\n }\n }\n\n /**\n * Process a changeset from DataSourceAdapter.\n * Returns true if the scene needs re-rendering.\n */\n ingest(changeset: Changeset): boolean {\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n this.lastIngestTime = now\n\n if (changeset.bounded) {\n // Full replacement for bounded data\n this.buffer.clear()\n this.xExtent.clear()\n this.yExtent.clear()\n if (this.timestampBuffer) this.timestampBuffer.clear()\n\n // Auto-resize buffer to fit all bounded data.\n // totalSize is set when data is progressively chunked — pre-allocate\n // for the full dataset so subsequent append chunks don't evict.\n const targetSize = changeset.totalSize || changeset.inserts.length\n if (targetSize > this.buffer.capacity) {\n this.buffer.resize(targetSize)\n if (this.timestampBuffer && targetSize > this.timestampBuffer.capacity) {\n this.timestampBuffer.resize(targetSize)\n }\n }\n\n for (const d of changeset.inserts) {\n this.buffer.push(d)\n if (this.timestampBuffer) this.timestampBuffer.push(now)\n this.xExtent.push(this.getX(d))\n if (this.config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n this.yExtent.push(this.getHigh(d))\n this.yExtent.push(this.getLow(d))\n } else {\n this.yExtent.push(this.getY(d))\n }\n }\n } else {\n // Streaming append\n for (const d of changeset.inserts) {\n if (this.config.windowMode === \"growing\" && this.buffer.full) {\n this.growingCap *= 2\n this.buffer.resize(this.growingCap)\n if (this.timestampBuffer) this.timestampBuffer.resize(this.growingCap)\n }\n\n const evicted = this.buffer.push(d)\n if (this.timestampBuffer) this.timestampBuffer.push(now)\n this.xExtent.push(this.getX(d))\n if (this.config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n this.yExtent.push(this.getHigh(d))\n this.yExtent.push(this.getLow(d))\n } else {\n this.yExtent.push(this.getY(d))\n }\n\n if (evicted != null) {\n this.xExtent.evict(this.getX(evicted))\n if (this.config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n this.yExtent.evict(this.getHigh(evicted))\n this.yExtent.evict(this.getLow(evicted))\n } else {\n this.yExtent.evict(this.getY(evicted))\n }\n }\n }\n }\n\n return true\n }\n\n /**\n * Recompute scales and scene graph for the current buffer contents.\n */\n computeScene(layout: StreamLayout): void {\n const { config, buffer } = this\n\n // Recalculate dirty extents\n if (this.xExtent.dirty) {\n this.xExtent.recalculate(buffer, this.getX)\n }\n if (this.yExtent.dirty) {\n if (config.chartType === \"candlestick\" && this.getHigh && this.getLow) {\n // Candlestick y-extent spans high→low, not a single y accessor\n this.yExtent.clear()\n for (const d of buffer) {\n this.yExtent.push(this.getHigh(d))\n this.yExtent.push(this.getLow(d))\n }\n } else {\n this.yExtent.recalculate(buffer, this.getY)\n }\n }\n\n // Resolve domains — merge user-specified extents with data extents\n const dataXDomain = this.xExtent.extent\n const dataYDomain = this.yExtent.extent\n let xDomain: [number, number] = config.xExtent\n ? [\n config.xExtent[0] ?? dataXDomain[0],\n config.xExtent[1] ?? dataXDomain[1]\n ]\n : dataXDomain\n let yDomain: [number, number] = config.yExtent\n ? [\n config.yExtent[0] ?? dataYDomain[0],\n config.yExtent[1] ?? dataYDomain[1]\n ]\n : dataYDomain\n\n // Determine if extents are fully user-specified (no padding needed)\n const yFullySpecified = config.yExtent && config.yExtent[0] != null && config.yExtent[1] != null\n const xFullySpecified = config.xExtent && config.xExtent[0] != null && config.xExtent[1] != null\n\n // Chart-type specific extent adjustments\n if (config.chartType === \"stackedarea\" && !yFullySpecified && buffer.size > 0) {\n // Stacked areas: y-extent must cover the cumulative sums, not raw values\n if (config.normalize) {\n // Normalized: all stacks sum to 1.0\n yDomain = [0, 1 + config.extentPadding]\n } else {\n const data = buffer.toArray()\n const groups = this.groupData(data)\n\n // Build per-x-value totals across all groups\n const xTotals = new Map<number, number>()\n for (const g of groups) {\n for (const d of g.data) {\n const x = this.getX(d)\n const y = this.getY(d)\n if (x != null && y != null && !Number.isNaN(x) && !Number.isNaN(y)) {\n xTotals.set(x, (xTotals.get(x) || 0) + y)\n }\n }\n }\n\n let maxStacked = 0\n for (const total of xTotals.values()) {\n if (total > maxStacked) maxStacked = total\n }\n\n const pad = maxStacked > 0 ? maxStacked * config.extentPadding : 1\n yDomain = [0, maxStacked + pad]\n }\n } else if (config.chartType === \"bar\" && config.binSize && !yFullySpecified && buffer.size > 0) {\n const [, maxTotal] = computeBinExtent(\n buffer, this.getX, this.getY, config.binSize, this.getCategory\n )\n yDomain = [0, maxTotal + maxTotal * config.extentPadding]\n } else if (config.chartType === \"waterfall\" && !yFullySpecified && buffer.size > 0) {\n const [minCum, maxCum] = computeWaterfallExtent(buffer, this.getY)\n const range = maxCum - minCum\n const pad = range > 0 ? range * config.extentPadding : 1\n yDomain = [\n Math.min(0, minCum - Math.abs(pad)),\n Math.max(0, maxCum + Math.abs(pad))\n ]\n } else if (!yFullySpecified && yDomain[0] !== Infinity) {\n // Expand extent to include bounds/uncertainty offsets\n if (this.getBounds) {\n const data = buffer.toArray()\n for (const d of data) {\n const y = this.getY(d)\n const offset = this.getBounds(d)\n if (y == null || Number.isNaN(y) || !offset) continue\n if (y + offset > yDomain[1]) yDomain[1] = y + offset\n if (y - offset < yDomain[0]) yDomain[0] = y - offset\n }\n }\n const range = yDomain[1] - yDomain[0]\n const pad = range > 0 ? range * config.extentPadding : 1\n // Only pad the data-derived side; preserve user-specified bounds\n const userMin = config.yExtent?.[0]\n const userMax = config.yExtent?.[1]\n yDomain = [\n userMin != null ? yDomain[0] : yDomain[0] - pad,\n userMax != null ? yDomain[1] : yDomain[1] + pad\n ]\n }\n\n // Handle degenerate extents\n if (xDomain[0] === Infinity || xDomain[1] === -Infinity) xDomain = [0, 1]\n if (yDomain[0] === Infinity || yDomain[1] === -Infinity) yDomain = [0, 1]\n\n // Build scales\n // For streaming charts, use time/value axes based on arrowOfTime\n const isStreaming = config.arrowOfTime !== undefined\n if (isStreaming) {\n const timeAxis = getTimeAxis(config.arrowOfTime)\n if (timeAxis === \"x\") {\n const xRange: [number, number] = config.arrowOfTime === \"right\"\n ? [0, layout.width]\n : [layout.width, 0]\n this.scales = {\n x: scaleLinear().domain(xDomain).range(xRange),\n y: scaleLinear().domain(yDomain).range([layout.height, 0])\n }\n } else {\n const yRange: [number, number] = config.arrowOfTime === \"down\"\n ? [0, layout.height]\n : [layout.height, 0]\n this.scales = {\n x: scaleLinear().domain(yDomain).range([0, layout.width]),\n y: scaleLinear().domain(xDomain).range(yRange)\n }\n }\n } else {\n this.scales = {\n x: scaleLinear().domain(xDomain).range([0, layout.width]),\n y: scaleLinear().domain(yDomain).range([layout.height, 0])\n }\n }\n\n // Snapshot positions for transition animation (before rebuild)\n if (this.config.transition && this.scene.length > 0) {\n this.snapshotPositions()\n }\n\n // Build scene graph based on chart type\n const data = buffer.toArray()\n this.scene = this.buildSceneNodes(layout)\n\n // Apply decay opacity to discrete nodes\n if (this.config.decay) {\n this.applyDecay(this.scene, data)\n }\n\n // Apply pulse glow to discrete nodes\n if (this.config.pulse) {\n this.applyPulse(this.scene, data)\n }\n\n // Start transition animation from old to new positions\n if (this.config.transition && this.prevPositionMap.size > 0) {\n this.startTransition()\n }\n\n this.version++\n }\n\n private buildSceneNodes(layout: StreamLayout): SceneNode[] {\n const { config, buffer, scales } = this\n if (!scales || buffer.size === 0) return []\n\n const data = buffer.toArray()\n\n switch (config.chartType) {\n case \"line\":\n return this.buildLineScene(data)\n case \"area\":\n return this.buildAreaScene(data)\n case \"stackedarea\":\n return this.buildStackedAreaScene(data)\n case \"scatter\":\n case \"bubble\":\n return this.buildPointScene(data)\n case \"heatmap\":\n return this.buildHeatmapScene(data, layout)\n case \"bar\":\n return this.buildBarScene(data)\n case \"swarm\":\n return this.buildSwarmScene(data)\n case \"waterfall\":\n return this.buildWaterfallScene(data, layout)\n case \"candlestick\":\n return this.buildCandlestickScene(data, layout)\n default:\n return []\n }\n }\n\n private buildLineScene(data: Record<string, any>[]): SceneNode[] {\n const groups = this.groupData(data)\n const nodes: SceneNode[] = []\n\n // Extract color thresholds from annotations (if any)\n const colorThresholds = this.config.annotations\n ?.filter((a: any) => a.type === \"threshold\" && a.color)\n .map((a: any) => ({\n value: a.value as number,\n color: a.color as string,\n thresholdType: (a.thresholdType || \"greater\") as \"greater\" | \"lesser\"\n }))\n\n // Build bounds areas first so they render behind lines\n if (this.getBounds) {\n for (const g of groups) {\n const boundsNode = this.buildBoundsForGroup(g.data, g.key)\n if (boundsNode) nodes.push(boundsNode)\n }\n }\n\n for (const g of groups) {\n const style = this.resolveLineStyle(g.key, g.data[0])\n const lineNode = buildLineNode(g.data, this.scales!, this.getX, this.getY, style, g.key)\n // Attach threshold info for the renderer\n if (colorThresholds && colorThresholds.length > 0) {\n lineNode.colorThresholds = colorThresholds\n }\n nodes.push(lineNode)\n }\n\n return nodes\n }\n\n private buildAreaScene(data: Record<string, any>[]): SceneNode[] {\n const groups = this.groupData(data)\n const nodes: SceneNode[] = []\n\n // Use the bottom of the y domain as the baseline so areas fill to the chart edge\n const yDomain = this.scales!.y.domain() as [number, number]\n const baseline = yDomain[0]\n\n for (const g of groups) {\n const style = this.resolveAreaStyle(g.key, g.data[0])\n nodes.push(buildAreaNode(g.data, this.scales!, this.getX, this.getY, baseline, style, g.key))\n }\n\n return nodes\n }\n\n private buildStackedAreaScene(data: Record<string, any>[]): SceneNode[] {\n const groups = this.groupData(data)\n const styleFn = (group: string, sampleDatum?: Record<string, any>) =>\n this.resolveAreaStyle(group, sampleDatum)\n return buildStackedAreaNodes(\n groups,\n this.scales!,\n this.getX,\n this.getY,\n styleFn,\n this.config.normalize\n )\n }\n\n private buildPointScene(data: Record<string, any>[]): SceneNode[] {\n const nodes: SceneNode[] = []\n const defaultR = this.config.chartType === \"bubble\" ? 10 : 5\n const sizeRange = this.config.sizeRange || [3, 15]\n\n // Compute size scale if sizeAccessor is set and no pointStyle handles it\n let sizeScale: ((v: number) => number) | null = null\n if (this.getSize && !this.config.pointStyle) {\n const sizes = data.map(d => this.getSize!(d)).filter(s => s != null && !Number.isNaN(s))\n if (sizes.length > 0) {\n const minSize = Math.min(...sizes)\n const maxSize = Math.max(...sizes)\n sizeScale = (s: number) => {\n if (minSize === maxSize) return (sizeRange[0] + sizeRange[1]) / 2\n return sizeRange[0] + ((s - minSize) / (maxSize - minSize)) * (sizeRange[1] - sizeRange[0])\n }\n }\n }\n\n // Build color map from colorAccessor if no pointStyle handles it\n let colorMap: Map<string, string> | null = null\n if (this.getColor && !this.config.pointStyle) {\n const categories = new Set<string>()\n for (const d of data) {\n const c = this.getColor(d)\n if (c) categories.add(c)\n }\n const palette = Array.isArray(this.config.colorScheme) ? this.config.colorScheme\n : [\"#4e79a7\", \"#f28e2b\", \"#e15759\", \"#76b7b2\", \"#59a14f\", \"#edc948\", \"#b07aa1\", \"#ff9da7\", \"#9c755f\", \"#bab0ac\"]\n colorMap = new Map()\n let ci = 0\n for (const cat of categories) {\n colorMap.set(cat, palette[ci % palette.length])\n ci++\n }\n }\n\n for (const d of data) {\n let style = this.config.pointStyle ? this.config.pointStyle(d) : { fill: \"#4e79a7\", opacity: 0.8 }\n\n // Apply size from accessor if pointStyle doesn't provide it\n let r = style.r || defaultR\n if (sizeScale && this.getSize) {\n const sizeVal = this.getSize(d)\n if (sizeVal != null && !Number.isNaN(sizeVal)) {\n r = sizeScale(sizeVal)\n }\n }\n\n // Apply color from accessor if pointStyle doesn't provide a custom fill\n if (colorMap && this.getColor) {\n const colorVal = this.getColor(d)\n if (colorVal && colorMap.has(colorVal)) {\n style = { ...style, fill: colorMap.get(colorVal)! }\n }\n }\n\n const node = buildPointNode(d, this.scales!, this.getX, this.getY, r, style)\n if (node) nodes.push(node)\n }\n\n return nodes\n }\n\n private buildHeatmapScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n const nodes: SceneNode[] = []\n\n // Streaming heatmap: 2D grid binning with aggregation\n if (this.config.heatmapAggregation) {\n return this.buildStreamingHeatmapScene(data, layout)\n }\n\n const getVal = resolveAccessor(this.config.valueAccessor, \"value\")\n\n // Determine grid dimensions from unique x/y values\n const xSet = new Set<number>()\n const ySet = new Set<number>()\n for (const d of data) {\n xSet.add(this.getX(d))\n ySet.add(this.getY(d))\n }\n\n const xValues = Array.from(xSet).sort((a, b) => a - b)\n const yValues = Array.from(ySet).sort((a, b) => a - b)\n if (xValues.length === 0 || yValues.length === 0) return nodes\n\n const cellW = layout.width / xValues.length\n const cellH = layout.height / yValues.length\n\n // Build value lookup\n const valueMap = new Map<string, { val: number; datum: any }>()\n for (const d of data) {\n const key = `${this.getX(d)}_${this.getY(d)}`\n valueMap.set(key, { val: getVal(d), datum: d })\n }\n\n // Compute value range for color\n let minVal = Infinity\n let maxVal = -Infinity\n for (const { val } of valueMap.values()) {\n if (val < minVal) minVal = val\n if (val > maxVal) maxVal = val\n }\n const valRange = maxVal - minVal || 1\n\n for (let xi = 0; xi < xValues.length; xi++) {\n for (let yi = 0; yi < yValues.length; yi++) {\n const key = `${xValues[xi]}_${yValues[yi]}`\n const entry = valueMap.get(key)\n if (!entry) continue\n\n const t = (entry.val - minVal) / valRange\n // Default to blues interpolation\n const r = Math.round(220 - 180 * t)\n const g = Math.round(220 - 100 * t)\n const b = Math.round(255 - 50 * t)\n const fill = `rgb(${r},${g},${b})`\n\n nodes.push(buildHeatcellNode(\n xi * cellW,\n (yValues.length - 1 - yi) * cellH,\n cellW,\n cellH,\n fill,\n entry.datum\n ))\n }\n }\n\n return nodes\n }\n\n /**\n * Streaming heatmap: discretize continuous x/y into a grid and aggregate.\n */\n private buildStreamingHeatmapScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n const nodes: SceneNode[] = []\n const xBins = this.config.heatmapXBins ?? 20\n const yBins = this.config.heatmapYBins ?? 20\n const agg = this.config.heatmapAggregation ?? \"count\"\n const getVal = resolveAccessor(this.config.valueAccessor, \"value\")\n\n if (!this.scales || data.length === 0) return nodes\n\n const [xMin, xMax] = this.scales.x.domain() as [number, number]\n const [yMin, yMax] = this.scales.y.domain() as [number, number]\n const xRange = xMax - xMin || 1\n const yRange = yMax - yMin || 1\n const xBinSize = xRange / xBins\n const yBinSize = yRange / yBins\n\n // Grid cells: [xi][yi] → { sum, count }\n const grid = new Map<string, { sum: number; count: number; data: any[] }>()\n\n for (const d of data) {\n const xVal = this.getX(d)\n const yVal = this.getY(d)\n const xi = Math.min(Math.floor((xVal - xMin) / xBinSize), xBins - 1)\n const yi = Math.min(Math.floor((yVal - yMin) / yBinSize), yBins - 1)\n if (xi < 0 || yi < 0) continue\n\n const key = `${xi}_${yi}`\n let cell = grid.get(key)\n if (!cell) {\n cell = { sum: 0, count: 0, data: [] }\n grid.set(key, cell)\n }\n cell.count++\n cell.sum += getVal(d)\n cell.data.push(d)\n }\n\n // Compute aggregated values and find range\n let minVal = Infinity\n let maxVal = -Infinity\n const cellValues = new Map<string, number>()\n for (const [key, cell] of grid) {\n let val: number\n switch (agg) {\n case \"sum\": val = cell.sum; break\n case \"mean\": val = cell.count > 0 ? cell.sum / cell.count : 0; break\n default: val = cell.count; break\n }\n cellValues.set(key, val)\n if (val < minVal) minVal = val\n if (val > maxVal) maxVal = val\n }\n const valRange = maxVal - minVal || 1\n\n const cellW = layout.width / xBins\n const cellH = layout.height / yBins\n\n for (const [key, val] of cellValues) {\n const [xiStr, yiStr] = key.split(\"_\")\n const xi = +xiStr\n const yi = +yiStr\n\n const t = (val - minVal) / valRange\n const r = Math.round(220 - 180 * t)\n const g = Math.round(220 - 100 * t)\n const b = Math.round(255 - 50 * t)\n const fill = `rgb(${r},${g},${b})`\n\n const cell = grid.get(key)!\n nodes.push(buildHeatcellNode(\n xi * cellW,\n (yBins - 1 - yi) * cellH,\n cellW,\n cellH,\n fill,\n { xi, yi, value: val, count: cell.count, sum: cell.sum, data: cell.data }\n ))\n }\n\n return nodes\n }\n\n private buildBarScene(data: Record<string, any>[]): SceneNode[] {\n if (!this.config.binSize) return []\n\n const bins = computeBins(data, this.getX, this.getY, this.config.binSize, this.getCategory)\n if (bins.size === 0) return []\n\n // Establish a global category order that is stable across frames.\n // Use barColors keys first (preserves user-specified order), then any\n // additional categories sorted alphabetically. This prevents flicker\n // when bins partially exit the sliding window and their per-category\n // values shrink/disappear — without a fixed order the Map iteration\n // order shifts and stacked segments jump around.\n let categoryOrder: string[] | null = null\n if (this.getCategory) {\n const allCategories = new Set<string>()\n for (const bin of bins.values()) {\n for (const cat of bin.categories.keys()) {\n allCategories.add(cat)\n }\n }\n const colorKeys = this.config.barColors ? Object.keys(this.config.barColors) : []\n const listed = new Set(colorKeys)\n const unlisted = Array.from(allCategories).filter(c => !listed.has(c)).sort()\n categoryOrder = [...colorKeys.filter(k => allCategories.has(k)), ...unlisted]\n }\n\n const nodes: SceneNode[] = []\n const scales = this.scales!\n const [domainMin, domainMax] = scales.x.domain() as [number, number]\n const gap = this.config.barColors ? 1 : 1\n\n for (const bin of bins.values()) {\n const clampedStart = Math.max(bin.start, domainMin)\n const clampedEnd = Math.min(bin.end, domainMax)\n if (clampedStart >= clampedEnd) continue\n\n const rawX0 = scales.x(clampedStart)\n const rawX1 = scales.x(clampedEnd)\n const x0 = Math.min(rawX0, rawX1) + gap / 2\n const x1 = Math.max(rawX0, rawX1) - gap / 2\n const barWidth = x1 - x0\n if (barWidth <= 0) continue\n\n if (categoryOrder && bin.categories.size > 0) {\n let cumulativeBase = 0\n for (const cat of categoryOrder) {\n const catVal = bin.categories.get(cat) || 0\n if (catVal === 0) continue\n const yBottom = scales.y(cumulativeBase)\n const yTop = scales.y(cumulativeBase + catVal)\n const rectY = Math.min(yBottom, yTop)\n const rectH = Math.abs(yBottom - yTop)\n\n nodes.push(buildRectNode(\n x0, rectY, barWidth, rectH,\n { fill: this.config.barColors?.[cat] || \"#4e79a7\" },\n { binStart: bin.start, binEnd: bin.end, total: bin.total, category: cat, categoryValue: catVal },\n cat\n ))\n cumulativeBase += catVal\n }\n } else {\n const yZero = scales.y(0)\n const yTop = scales.y(bin.total)\n const rectY = Math.min(yZero, yTop)\n const rectH = Math.abs(yZero - yTop)\n\n nodes.push(buildRectNode(\n x0, rectY, barWidth, rectH,\n { fill: \"#007bff\" },\n { binStart: bin.start, binEnd: bin.end, total: bin.total }\n ))\n }\n }\n\n return nodes\n }\n\n private buildSwarmScene(data: Record<string, any>[]): SceneNode[] {\n const nodes: SceneNode[] = []\n const swarm = this.config.swarmStyle || {}\n const radius = swarm.radius ?? 3\n const defaultFill = swarm.fill ?? \"#007bff\"\n const opacity = swarm.opacity ?? 0.7\n const stroke = swarm.stroke\n const strokeWidth = swarm.strokeWidth\n\n for (const d of data) {\n const xVal = this.getX(d)\n const yVal = this.getY(d)\n if (yVal == null || Number.isNaN(yVal)) continue\n\n const x = this.scales!.x(xVal)\n const y = this.scales!.y(yVal)\n\n let fill = defaultFill\n if (this.getCategory) {\n const cat = this.getCategory(d)\n fill = this.config.barColors?.[cat] || fill\n }\n\n nodes.push({\n type: \"point\",\n x, y, r: radius,\n style: { fill, opacity, stroke, strokeWidth },\n datum: d\n })\n }\n\n return nodes\n }\n\n private buildWaterfallScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n const nodes: SceneNode[] = []\n const scales = this.scales!\n\n // Filter valid data\n const arr = data.filter(d => {\n const v = this.getY(d)\n return v != null && !Number.isNaN(v)\n })\n if (arr.length === 0) return nodes\n\n const gap = 1\n let baseline = 0\n\n for (let i = 0; i < arr.length; i++) {\n const d = arr[i]\n const t = this.getX(d)\n const delta = this.getY(d)\n const cumEnd = baseline + delta\n\n // Compute bar width from time gap\n let barWidthTime: number\n if (i < arr.length - 1) {\n barWidthTime = this.getX(arr[i + 1]) - t\n } else if (i > 0) {\n barWidthTime = t - this.getX(arr[i - 1])\n } else {\n barWidthTime = 0\n }\n\n const rawX0 = scales.x(t)\n const rawX1 = barWidthTime !== 0 ? scales.x(t + barWidthTime) : rawX0 + layout.width / 10\n const x0 = Math.min(rawX0, rawX1) + gap / 2\n const x1 = Math.max(rawX0, rawX1) - gap / 2\n const barWidth = x1 - x0\n if (barWidth <= 0) {\n baseline = cumEnd\n continue\n }\n\n const yBaseline = scales.y(baseline)\n const yTop = scales.y(cumEnd)\n const rectY = Math.min(yBaseline, yTop)\n const rectH = Math.abs(yBaseline - yTop)\n\n const fill = delta >= 0 ? \"#28a745\" : \"#dc3545\"\n nodes.push(buildRectNode(\n x0, rectY, barWidth, rectH,\n { fill },\n { ...d, baseline, cumEnd, delta }\n ))\n\n baseline = cumEnd\n }\n\n return nodes\n }\n\n private buildCandlestickScene(data: Record<string, any>[], layout: StreamLayout): SceneNode[] {\n if (!this.getOpen || !this.getHigh || !this.getLow || !this.getClose || !this.scales) return []\n\n const nodes: SceneNode[] = []\n const cs = this.config.candlestickStyle || {}\n const upColor = cs.upColor || \"#28a745\"\n const downColor = cs.downColor || \"#dc3545\"\n const wickColor = cs.wickColor || \"#333\"\n const wickWidth = cs.wickWidth || 1\n\n // Compute body width from data spacing\n const sortedX = data\n .map(d => this.getX(d))\n .filter(x => x != null && !Number.isNaN(x))\n .sort((a, b) => a - b)\n\n let bodyWidth = cs.bodyWidth || 6\n if (!cs.bodyWidth && sortedX.length > 1) {\n // Auto-size: 60% of the minimum gap between adjacent x values\n let minGap = Infinity\n for (let i = 1; i < sortedX.length; i++) {\n const gap = Math.abs(this.scales!.x(sortedX[i]) - this.scales!.x(sortedX[i - 1]))\n if (gap > 0 && gap < minGap) minGap = gap\n }\n if (minGap !== Infinity) {\n bodyWidth = Math.max(2, Math.min(minGap * 0.6, 20))\n }\n }\n\n for (const d of data) {\n const xVal = this.getX(d)\n if (xVal == null || Number.isNaN(xVal)) continue\n\n const open = this.getOpen(d)\n const high = this.getHigh(d)\n const low = this.getLow(d)\n const close = this.getClose(d)\n if ([open, high, low, close].some(v => v == null || Number.isNaN(v))) continue\n\n const isUp = close >= open\n\n nodes.push({\n type: \"candlestick\",\n x: this.scales!.x(xVal),\n openY: this.scales!.y(open),\n closeY: this.scales!.y(close),\n highY: this.scales!.y(high),\n lowY: this.scales!.y(low),\n bodyWidth,\n upColor,\n downColor,\n wickColor,\n wickWidth,\n isUp,\n datum: d\n } as CandlestickSceneNode)\n }\n\n return nodes\n }\n\n // ── Bounds helpers ───────────────────────────────────────────────────\n\n private buildBoundsForGroup(data: Record<string, any>[], group: string): AreaSceneNode | null {\n if (!this.getBounds || !this.scales) return null\n\n const topPath: [number, number][] = []\n const bottomPath: [number, number][] = []\n\n for (const d of data) {\n const x = this.getX(d)\n const y = this.getY(d)\n if (x == null || y == null || Number.isNaN(x) || Number.isNaN(y)) continue\n\n const offset = this.getBounds(d)\n const px = this.scales!.x(x)\n\n if (!offset || offset === 0) {\n // No bounds at this point — collapse to the line\n const py = this.scales!.y(y)\n topPath.push([px, py])\n bottomPath.push([px, py])\n } else {\n topPath.push([px, this.scales!.y(y + offset)])\n bottomPath.push([px, this.scales!.y(y - offset)])\n }\n }\n\n if (topPath.length < 2) return null\n\n return {\n type: \"area\",\n topPath,\n bottomPath,\n style: this.resolveBoundsStyle(group, data[0]),\n datum: data,\n group,\n interactive: false\n }\n }\n\n private resolveBoundsStyle(group: string, sampleDatum?: Record<string, any>): Style {\n const bs = this.config.boundsStyle\n if (typeof bs === \"function\") {\n return bs(sampleDatum || {}, group)\n }\n if (bs && typeof bs === \"object\") {\n return bs\n }\n // Default: match line color with low opacity\n const lineStyle = this.resolveLineStyle(group, sampleDatum)\n return {\n fill: lineStyle.stroke || \"#4e79a7\",\n fillOpacity: 0.2,\n stroke: \"none\"\n }\n }\n\n // ── Decay ────────────────────────────────────────────────────────────\n\n /**\n * Compute decay opacity for a datum at `bufferIndex` out of `bufferSize` items.\n * Index 0 = oldest, bufferSize-1 = newest. Returns 0–1.\n */\n computeDecayOpacity(bufferIndex: number, bufferSize: number): number {\n const decay = this.config.decay\n if (!decay || bufferSize <= 1) return 1\n\n const minOpacity = decay.minOpacity ?? 0.1\n // age: 0 = newest, bufferSize-1 = oldest\n const age = bufferSize - 1 - bufferIndex\n\n switch (decay.type) {\n case \"linear\": {\n const t = 1 - age / (bufferSize - 1)\n return minOpacity + t * (1 - minOpacity)\n }\n case \"exponential\": {\n const halfLife = decay.halfLife ?? bufferSize / 2\n const t = Math.pow(0.5, age / halfLife)\n return minOpacity + t * (1 - minOpacity)\n }\n case \"step\": {\n const threshold = decay.stepThreshold ?? bufferSize * 0.5\n return age < threshold ? 1 : minOpacity\n }\n default:\n return 1\n }\n }\n\n /**\n * Apply decay opacity to a list of discrete scene nodes.\n * Uses the datum's index in the buffer data array.\n */\n private applyDecay(nodes: SceneNode[], data: Record<string, any>[]): void {\n if (!this.config.decay) return\n const bufferSize = data.length\n if (bufferSize <= 1) return\n\n // Build datum→index lookup\n const indexMap = new Map<any, number>()\n for (let i = 0; i < data.length; i++) {\n indexMap.set(data[i], i)\n }\n\n for (const node of nodes) {\n if (node.type === \"line\" || node.type === \"area\") continue\n const idx = indexMap.get(node.datum)\n if (idx == null) continue\n const decayOpacity = this.computeDecayOpacity(idx, bufferSize)\n if (node.type === \"heatcell\") {\n ;(node as any).style = { opacity: decayOpacity }\n } else if (node.type === \"candlestick\") {\n // Candlestick doesn't have a style object — store opacity for renderer\n ;(node as any)._decayOpacity = decayOpacity\n } else {\n const baseOpacity = node.style?.opacity ?? 1\n node.style = { ...node.style, opacity: baseOpacity * decayOpacity }\n }\n }\n }\n\n // ── Pulse ───────────────────────────────────────────────────────────\n\n /**\n * Compute pulse intensity for a datum inserted at `insertTime`.\n * Returns 0–1 (1 = just inserted, 0 = pulse expired).\n */\n private computePulseIntensity(insertTime: number, now: number): number {\n const pulse = this.config.pulse\n if (!pulse) return 0\n const duration = pulse.duration ?? 500\n const age = now - insertTime\n if (age >= duration) return 0\n return 1 - age / duration\n }\n\n /**\n * Apply pulse glow to discrete scene nodes.\n */\n private applyPulse(nodes: SceneNode[], data: Record<string, any>[]): void {\n if (!this.config.pulse || !this.timestampBuffer) return\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const pulseColor = this.config.pulse.color ?? \"rgba(255,255,255,0.6)\"\n\n // Build datum→index lookup\n const indexMap = new Map<any, number>()\n for (let i = 0; i < data.length; i++) {\n indexMap.set(data[i], i)\n }\n\n for (const node of nodes) {\n if (node.type === \"line\" || node.type === \"area\") continue\n const idx = indexMap.get(node.datum)\n if (idx == null) continue\n const insertTime = this.timestampBuffer.get(idx)\n if (insertTime == null) continue\n const intensity = this.computePulseIntensity(insertTime, now)\n if (intensity > 0) {\n (node as any)._pulseIntensity = intensity\n ;(node as any)._pulseColor = pulseColor\n }\n }\n }\n\n /**\n * Returns true if there are active pulse animations that need continuous rendering.\n */\n get hasActivePulses(): boolean {\n if (!this.config.pulse || !this.timestampBuffer || this.timestampBuffer.size === 0) return false\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const duration = this.config.pulse.duration ?? 500\n const newest = this.timestampBuffer.peek()\n return newest != null && (now - newest) < duration\n }\n\n // ── Transitions ─────────────────────────────────────────────────────\n\n /**\n * Snapshot current scene node positions before rebuild.\n */\n private snapshotPositions(): void {\n this.prevPositionMap.clear()\n for (let i = 0; i < this.scene.length; i++) {\n const node = this.scene[i]\n const key = this.getNodeIdentity(node, i)\n if (!key) continue\n if (node.type === \"point\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.y, r: node.r })\n } else if (node.type === \"rect\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.y, w: node.w, h: node.h })\n } else if (node.type === \"heatcell\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.y, w: node.w, h: node.h })\n } else if (node.type === \"candlestick\") {\n this.prevPositionMap.set(key, { x: node.x, y: node.openY })\n }\n }\n }\n\n /**\n * Get a stable identity key for a scene node.\n */\n private getNodeIdentity(node: SceneNode, index: number): string | null {\n switch (node.type) {\n case \"point\":\n return `p:${node.datum === undefined ? index : this.getX(node.datum)}_${this.getY(node.datum)}`\n case \"rect\":\n return `r:${node.group || \"\"}:${node.datum?.binStart ?? node.datum?.category ?? index}`\n case \"heatcell\":\n return `h:${node.x}_${node.y}`\n case \"candlestick\":\n return `c:${this.getX(node.datum)}`\n default:\n return null\n }\n }\n\n /**\n * After scene rebuild, set up transition from old to new positions.\n */\n private startTransition(): void {\n if (!this.config.transition || this.prevPositionMap.size === 0) return\n const duration = this.config.transition.duration ?? 300\n\n let hasChanges = false\n for (let i = 0; i < this.scene.length; i++) {\n const node = this.scene[i]\n const key = this.getNodeIdentity(node, i)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n\n // Store target positions and restore previous for animation start\n if (node.type === \"point\") {\n const target = { x: node.x, y: node.y, r: node.r }\n if (prev.x !== target.x || prev.y !== target.y) {\n node._targetX = target.x\n node._targetY = target.y\n node._targetR = target.r\n node.x = prev.x\n node.y = prev.y\n node.r = prev.r ?? node.r\n hasChanges = true\n }\n } else if (node.type === \"rect\") {\n const target = { x: node.x, y: node.y, w: node.w, h: node.h }\n if (prev.x !== target.x || prev.y !== target.y || prev.w !== target.w || prev.h !== target.h) {\n node._targetX = target.x\n node._targetY = target.y\n node._targetW = target.w\n node._targetH = target.h\n node.x = prev.x\n node.y = prev.y\n node.w = prev.w ?? node.w\n node.h = prev.h ?? node.h\n hasChanges = true\n }\n } else if (node.type === \"heatcell\") {\n const target = { x: node.x, y: node.y, w: node.w, h: node.h }\n if (prev.x !== target.x || prev.y !== target.y) {\n node._targetX = target.x\n node._targetY = target.y\n node._targetW = target.w\n node._targetH = target.h\n node.x = prev.x\n node.y = prev.y\n node.w = prev.w ?? node.w\n node.h = prev.h ?? node.h\n hasChanges = true\n }\n }\n }\n\n if (hasChanges) {\n this.activeTransition = {\n startTime: typeof performance !== \"undefined\" ? performance.now() : Date.now(),\n duration\n }\n }\n }\n\n /**\n * Advance the transition animation. Returns true if still animating.\n */\n advanceTransition(now: number): boolean {\n if (!this.activeTransition) return false\n\n const elapsed = now - this.activeTransition.startTime\n const rawT = Math.min(elapsed / this.activeTransition.duration, 1)\n // Ease-out cubic (or linear)\n const t = this.config.transition?.easing === \"linear\"\n ? rawT\n : 1 - Math.pow(1 - rawT, 3)\n\n for (const node of this.scene) {\n if (node.type === \"point\") {\n if (node._targetX === undefined) continue\n const key = this.getNodeIdentity(node, 0)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n if (node._targetR !== undefined && prev.r !== undefined) {\n node.r = prev.r + (node._targetR - prev.r) * t\n }\n } else if (node.type === \"rect\") {\n if (node._targetX === undefined) continue\n const key = this.getNodeIdentity(node, 0)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n if (prev.w !== undefined) node.w = prev.w + (node._targetW! - prev.w) * t\n if (prev.h !== undefined) node.h = prev.h + (node._targetH! - prev.h) * t\n } else if (node.type === \"heatcell\") {\n if (node._targetX === undefined) continue\n const key = this.getNodeIdentity(node, 0)\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n if (prev.w !== undefined) node.w = prev.w + (node._targetW! - prev.w) * t\n if (prev.h !== undefined) node.h = prev.h + (node._targetH! - prev.h) * t\n }\n }\n\n if (rawT >= 1) {\n // Snap to targets and clear transition\n for (const node of this.scene) {\n if (node.type === \"point\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n if (node._targetR !== undefined) node.r = node._targetR\n node._targetX = undefined\n node._targetY = undefined\n node._targetR = undefined\n } else if (node.type === \"rect\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n node.w = node._targetW!\n node.h = node._targetH!\n node._targetX = undefined\n node._targetY = undefined\n node._targetW = undefined\n node._targetH = undefined\n } else if (node.type === \"heatcell\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n node.w = node._targetW!\n node.h = node._targetH!\n node._targetX = undefined\n node._targetY = undefined\n node._targetW = undefined\n node._targetH = undefined\n }\n }\n this.activeTransition = null\n return false\n }\n\n return true\n }\n\n // ── Helpers ──────────────────────────────────────────────────────────\n\n private groupData(data: Record<string, any>[]): { key: string; data: Record<string, any>[] }[] {\n if (!this.getGroup) {\n return [{ key: \"_default\", data }]\n }\n\n const groups = new Map<string, Record<string, any>[]>()\n for (const d of data) {\n const key = this.getGroup(d)\n if (!groups.has(key)) groups.set(key, [])\n groups.get(key)!.push(d)\n }\n\n return Array.from(groups.entries()).map(([key, data]) => ({ key, data }))\n }\n\n private resolveLineStyle(group: string, sampleDatum?: Record<string, any>): Style {\n const ls = this.config.lineStyle\n if (typeof ls === \"function\") {\n return ls(sampleDatum || {}, group)\n }\n if (ls && typeof ls === \"object\") {\n return {\n stroke: ls.stroke || \"#007bff\",\n strokeWidth: ls.strokeWidth || 2,\n strokeDasharray: ls.strokeDasharray,\n fill: ls.fill,\n fillOpacity: ls.fillOpacity,\n opacity: ls.opacity\n }\n }\n return { stroke: \"#007bff\", strokeWidth: 2 }\n }\n\n private resolveAreaStyle(group: string, sampleDatum?: Record<string, any>): Style {\n if (this.config.areaStyle) {\n return this.config.areaStyle(sampleDatum || {})\n }\n // Fall back to lineStyle — AreaChart passes area styling via lineStyle\n const ls = this.config.lineStyle\n if (typeof ls === \"function\") {\n return ls(sampleDatum || {}, group)\n }\n if (ls && typeof ls === \"object\") {\n return {\n fill: ls.fill || ls.stroke || \"#4e79a7\",\n fillOpacity: ls.fillOpacity ?? 0.7,\n stroke: ls.stroke || \"#4e79a7\",\n strokeWidth: ls.strokeWidth || 2\n }\n }\n return { fill: \"#4e79a7\", fillOpacity: 0.7, stroke: \"#4e79a7\", strokeWidth: 2 }\n }\n\n // ── Public accessors ─────────────────────────────────────────────────\n\n getData(): Record<string, any>[] {\n return this.buffer.toArray()\n }\n\n getExtents(): { x: [number, number]; y: [number, number] } | null {\n if (this.xExtent.min === Infinity) return null\n return {\n x: this.xExtent.extent,\n y: this.yExtent.extent\n }\n }\n\n clear(): void {\n this.buffer.clear()\n this.xExtent.clear()\n this.yExtent.clear()\n if (this.timestampBuffer) this.timestampBuffer.clear()\n this.prevPositionMap.clear()\n this.activeTransition = null\n this.lastIngestTime = 0\n this.scales = null\n this.scene = []\n this.version++\n }\n\n get size(): number {\n return this.buffer.size\n }\n\n getBuffer(): RingBuffer<Record<string, any>> {\n return this.buffer\n }\n\n getXAccessor(): (d: any) => number {\n return this.getX\n }\n\n getYAccessor(): (d: any) => number {\n return this.getY\n }\n\n getCategoryAccessor(): ((d: any) => string) | undefined {\n return this.getCategory\n }\n\n updateConfig(config: Partial<PipelineConfig>): void {\n Object.assign(this.config, config)\n }\n}\n","import { 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 { buildRectNode } from \"../SceneGraph\"\nimport type { OrdinalSceneNode, OrdinalLayout } from \"../ordinalTypes\"\nimport type { OrdinalSceneContext } from \"./types\"\n\nexport function buildBarScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, config, getR, getStack, resolvePieceStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const isVertical = projection === \"vertical\"\n const isHorizontal = projection === \"horizontal\"\n const normalize = config.normalize\n\n for (const col of Object.values(columns)) {\n // Group pieces by stack key if stacking, and aggregate values per group\n const stacks = new Map<string, { total: number; pieces: Record<string, any>[] }>()\n for (const d of col.pieceData) {\n const key = getStack ? getStack(d) : \"_default\"\n if (!stacks.has(key)) stacks.set(key, { total: 0, pieces: [] })\n const group = stacks.get(key)!\n group.total += getR(d)\n group.pieces.push(d)\n }\n\n // Compute totals for normalization\n let colTotal = 0\n if (normalize) {\n for (const g of stacks.values()) colTotal += Math.abs(g.total)\n }\n\n let posOffset = 0\n let negOffset = 0\n\n for (const [stackKey, group] of stacks) {\n // Use the aggregated total for the stack group (one rect per group)\n let val = group.total\n if (normalize && colTotal > 0) val = val / colTotal\n\n // Use the first piece for styling — look up barColors by stack key (not category)\n const style = getStack\n ? resolvePieceStyle(group.pieces[0], stackKey)\n : resolvePieceStyle(group.pieces[0], col.name)\n // Build a synthetic datum that includes the aggregate info\n const aggDatum = {\n ...group.pieces[0],\n __aggregateValue: group.total,\n __pieceCount: group.pieces.length,\n category: col.name\n }\n\n if (isVertical) {\n const actualY = val >= 0\n ? rScale(posOffset + val)\n : rScale(negOffset)\n const actualH = val >= 0\n ? rScale(posOffset) - rScale(posOffset + val)\n : rScale(negOffset + val) - rScale(negOffset)\n\n nodes.push(buildRectNode(\n col.x, actualY, col.width, Math.abs(actualH),\n style, aggDatum, stackKey\n ))\n\n if (val >= 0) posOffset += val\n else negOffset += val\n } else if (isHorizontal) {\n const actualX = val >= 0\n ? rScale(posOffset)\n : rScale(negOffset + val)\n const actualW = val >= 0\n ? rScale(posOffset + val) - rScale(posOffset)\n : rScale(negOffset) - rScale(negOffset + val)\n\n nodes.push(buildRectNode(\n actualX, col.x, Math.abs(actualW), col.width,\n style, aggDatum, stackKey\n ))\n\n if (val >= 0) posOffset += val\n else negOffset += val\n }\n }\n }\n\n return nodes\n}\n\nexport function buildClusterBarScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, getR, getGroup, resolvePieceStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const isVertical = projection === \"vertical\"\n\n // Discover all group keys\n const groupKeys: string[] = []\n const groupSet = new Set<string>()\n for (const col of Object.values(columns)) {\n for (const d of col.pieceData) {\n const key = getGroup ? getGroup(d) : \"_default\"\n if (!groupSet.has(key)) {\n groupSet.add(key)\n groupKeys.push(key)\n }\n }\n }\n const groupCount = groupKeys.length || 1\n\n for (const col of Object.values(columns)) {\n const subWidth = col.width / groupCount\n const grouped = new Map<string, Record<string, any>[]>()\n for (const d of col.pieceData) {\n const key = getGroup ? getGroup(d) : \"_default\"\n if (!grouped.has(key)) grouped.set(key, [])\n grouped.get(key)!.push(d)\n }\n\n for (let gi = 0; gi < groupKeys.length; gi++) {\n const groupData = grouped.get(groupKeys[gi]) || []\n for (const d of groupData) {\n const val = getR(d)\n const style = resolvePieceStyle(d, col.name)\n\n if (isVertical) {\n const barX = col.x + gi * subWidth\n const zeroY = rScale(0)\n const valY = rScale(val)\n nodes.push(buildRectNode(\n barX, Math.min(zeroY, valY), subWidth, Math.abs(zeroY - valY),\n style, d, groupKeys[gi]\n ))\n } else {\n const barY = col.x + gi * subWidth\n const zeroX = rScale(0)\n const valX = rScale(val)\n nodes.push(buildRectNode(\n Math.min(zeroX, valX), barY, Math.abs(valX - zeroX), subWidth,\n style, d, groupKeys[gi]\n ))\n }\n }\n }\n }\n\n return nodes\n}\n","import type { OrdinalSceneNode, OrdinalLayout } from \"../ordinalTypes\"\nimport type { OrdinalSceneContext } from \"./types\"\n\nexport function buildPointScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, getR, multiScales, resolvePieceStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const isVertical = projection === \"vertical\"\n const isRadial = projection === \"radial\"\n const hasMultiAxis = multiScales.length > 0\n\n const twoPi = Math.PI * 2\n const startAngleOffset = -Math.PI / 2\n\n for (const col of Object.values(columns)) {\n for (const d of col.pieceData) {\n const rIndex = d.__rIndex ?? 0\n const val = d.__rValue ?? getR(d)\n const scale = hasMultiAxis ? (multiScales[rIndex] || rScale) : rScale\n const style = resolvePieceStyle(d, col.name)\n const r = (style as any).r || 5\n\n let px: number, py: number\n\n if (isRadial) {\n // Radial: angle from category position, radius from value\n const midAngle = startAngleOffset + (col.pctStart + col.pct / 2) * twoPi\n const radius = scale(val)\n px = Math.cos(midAngle) * radius\n py = Math.sin(midAngle) * radius\n } else if (isVertical) {\n px = col.middle\n py = scale(val)\n } else {\n px = scale(val)\n py = col.middle\n }\n\n nodes.push({ type: \"point\", x: px, y: py, r, style, datum: d })\n }\n }\n\n return nodes\n}\n\nexport function buildSwarmScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, getR, resolvePieceStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const isVertical = projection === \"vertical\"\n\n for (const col of Object.values(columns)) {\n // Simple jittered placement (real force sim in Phase 3)\n const halfWidth = col.width / 2\n for (let i = 0; i < col.pieceData.length; i++) {\n const d = col.pieceData[i]\n const val = getR(d)\n const style = resolvePieceStyle(d, col.name)\n const r = (style as any).r || 4\n\n // Deterministic jitter based on index\n const jitter = (((i * 7919) % 100) / 100 - 0.5) * halfWidth * 0.8\n\n const px = isVertical ? col.middle + jitter : rScale(val)\n const py = isVertical ? rScale(val) : col.middle + jitter\n\n nodes.push({ type: \"point\", x: px, y: py, r, style, datum: d })\n }\n }\n\n return nodes\n}\n","import type { WedgeSceneNode, OrdinalLayout } from \"../ordinalTypes\"\nimport type { OrdinalSceneContext } from \"./types\"\n\nexport function buildPieScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): WedgeSceneNode[] {\n const { scales, columns, config, resolvePieceStyle } = ctx\n const nodes: WedgeSceneNode[] = []\n // cx/cy are 0 because StreamOrdinalFrame translates the canvas\n // to the center of the chart area for radial projection\n const cx = 0\n const cy = 0\n const outerRadius = Math.min(layout.width, layout.height) / 2 - 4\n const innerRadius = config.chartType === \"donut\" ? (config.innerRadius || 60) : 0\n // Start from 12 o'clock (-π/2) plus any user offset\n const startAngleOffset = -Math.PI / 2 + ((config.startAngle || 0) * Math.PI) / 180\n\n const twoPi = Math.PI * 2\n\n for (const col of Object.values(columns)) {\n const startAngle = startAngleOffset + col.pctStart * twoPi\n const endAngle = startAngleOffset + (col.pctStart + col.pct) * twoPi\n const style = resolvePieceStyle(col.pieceData[0], col.name)\n\n nodes.push({\n type: \"wedge\",\n cx, cy,\n innerRadius,\n outerRadius,\n startAngle,\n endAngle,\n style,\n datum: col.pieceData,\n category: col.name\n })\n }\n\n return nodes\n}\n","import { quantile as d3Quantile } from \"d3-array\"\nimport { buildRectNode } from \"../SceneGraph\"\nimport type {\n OrdinalSceneNode,\n OrdinalLayout,\n BoxplotSceneNode,\n ViolinSceneNode\n} from \"../ordinalTypes\"\nimport type { OrdinalSceneContext } from \"./types\"\n\nexport function buildBoxplotScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, config, getR, resolveSummaryStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const isVertical = projection === \"vertical\"\n const showOutliers = config.showOutliers !== false\n\n for (const col of Object.values(columns)) {\n const values = col.pieceData\n .map(d => getR(d))\n .filter(v => v != null && !isNaN(v))\n .sort((a, b) => a - b)\n\n if (values.length === 0) continue\n\n const min = values[0]\n const max = values[values.length - 1]\n const q1 = d3Quantile(values, 0.25) ?? min\n const median = d3Quantile(values, 0.5) ?? (min + max) / 2\n const q3 = d3Quantile(values, 0.75) ?? max\n\n // IQR-based whiskers\n const iqr = q3 - q1\n const lowerFence = q1 - 1.5 * iqr\n const upperFence = q3 + 1.5 * iqr\n const whiskerMin = values.find(v => v >= lowerFence) ?? min\n const whiskerMax = [...values].reverse().find(v => v <= upperFence) ?? max\n\n const style = resolveSummaryStyle(col.pieceData[0], col.name)\n\n const outliers: BoxplotSceneNode[\"outliers\"] = []\n if (showOutliers) {\n for (const d of col.pieceData) {\n const v = getR(d)\n if (v < lowerFence || v > upperFence) {\n const px = isVertical ? col.middle : rScale(v)\n const py = isVertical ? rScale(v) : col.middle\n outliers.push({ px, py, value: v, datum: d })\n }\n }\n }\n\n nodes.push({\n type: \"boxplot\",\n x: isVertical ? col.middle : 0,\n y: isVertical ? 0 : col.middle,\n projection: isVertical ? \"vertical\" : \"horizontal\",\n columnWidth: col.width * 0.6,\n minPos: rScale(whiskerMin),\n q1Pos: rScale(q1),\n medianPos: rScale(median),\n q3Pos: rScale(q3),\n maxPos: rScale(whiskerMax),\n stats: { min: whiskerMin, q1, median, q3, max: whiskerMax },\n style,\n datum: col.pieceData,\n category: col.name,\n outliers\n } as BoxplotSceneNode)\n\n // Add outlier points\n if (showOutliers) {\n for (const o of outliers) {\n nodes.push({\n type: \"point\",\n x: o.px,\n y: o.py,\n r: 3,\n style: { fill: style.fill || \"#999\", opacity: 0.6 },\n datum: o.datum\n })\n }\n }\n }\n\n return nodes\n}\n\nexport function buildViolinScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, config, getR, resolveSummaryStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const isVertical = projection === \"vertical\"\n const bins = config.bins || 20\n const showIQR = config.showIQR !== false\n\n for (const col of Object.values(columns)) {\n const values = col.pieceData\n .map(d => getR(d))\n .filter(v => v != null && !isNaN(v))\n .sort((a, b) => a - b)\n\n if (values.length < 2) continue\n\n const vMin = values[0]\n const vMax = values[values.length - 1]\n const binWidth = (vMax - vMin) / bins || 1\n\n // Build histogram bins\n const counts = new Array(bins).fill(0)\n for (const v of values) {\n const idx = Math.min(Math.floor((v - vMin) / binWidth), bins - 1)\n counts[idx]++\n }\n const maxCount = Math.max(...counts, 1)\n\n // Build symmetric violin path\n const halfWidth = col.width / 2 * 0.9\n let pathStr = \"\"\n\n if (isVertical) {\n // Right side (top to bottom)\n for (let i = 0; i < bins; i++) {\n const y = rScale(vMin + (i + 0.5) * binWidth)\n const w = (counts[i] / maxCount) * halfWidth\n pathStr += i === 0 ? `M ${col.middle + w} ${y}` : ` L ${col.middle + w} ${y}`\n }\n // Left side (bottom to top)\n for (let i = bins - 1; i >= 0; i--) {\n const y = rScale(vMin + (i + 0.5) * binWidth)\n const w = (counts[i] / maxCount) * halfWidth\n pathStr += ` L ${col.middle - w} ${y}`\n }\n pathStr += \" Z\"\n } else {\n // Top side (left to right)\n for (let i = 0; i < bins; i++) {\n const x = rScale(vMin + (i + 0.5) * binWidth)\n const w = (counts[i] / maxCount) * halfWidth\n pathStr += i === 0 ? `M ${x} ${col.middle - w}` : ` L ${x} ${col.middle - w}`\n }\n // Bottom side (right to left)\n for (let i = bins - 1; i >= 0; i--) {\n const x = rScale(vMin + (i + 0.5) * binWidth)\n const w = (counts[i] / maxCount) * halfWidth\n pathStr += ` L ${x} ${col.middle + w}`\n }\n pathStr += \" Z\"\n }\n\n const style = resolveSummaryStyle(col.pieceData[0], col.name)\n\n // IQR overlay\n let iqrLine: ViolinSceneNode[\"iqrLine\"]\n if (showIQR && values.length >= 4) {\n const q1 = d3Quantile(values, 0.25) ?? vMin\n const median = d3Quantile(values, 0.5) ?? (vMin + vMax) / 2\n const q3 = d3Quantile(values, 0.75) ?? vMax\n iqrLine = {\n q1Pos: rScale(q1),\n medianPos: rScale(median),\n q3Pos: rScale(q3)\n }\n }\n\n const violinBounds = isVertical\n ? { x: col.x, y: Math.min(rScale(vMax), rScale(vMin)), width: col.width, height: Math.abs(rScale(vMax) - rScale(vMin)) }\n : { x: Math.min(rScale(vMin), rScale(vMax)), y: col.x, width: Math.abs(rScale(vMax) - rScale(vMin)), height: col.width }\n\n nodes.push({\n type: \"violin\",\n pathString: pathStr,\n translateX: 0,\n translateY: 0,\n bounds: violinBounds,\n iqrLine,\n style,\n datum: col.pieceData,\n category: col.name\n } as ViolinSceneNode)\n }\n\n return nodes\n}\n\nexport function buildHistogramScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, config, getR, resolveSummaryStyle } = ctx\n const { r: rScale } = scales\n const nodes: OrdinalSceneNode[] = []\n const numBins = config.bins || 25\n const isRelative = config.normalize\n\n // Histograms always render horizontally: categories on y-axis, value bins on x-axis\n for (const col of Object.values(columns)) {\n const values = col.pieceData\n .map(d => getR(d))\n .filter(v => v != null && !isNaN(v))\n\n if (values.length === 0) continue\n\n const vMin = Math.min(...values)\n const vMax = Math.max(...values)\n const binWidth = (vMax - vMin) / numBins || 1\n\n const counts = new Array(numBins).fill(0)\n for (const v of values) {\n const idx = Math.min(Math.floor((v - vMin) / binWidth), numBins - 1)\n counts[idx]++\n }\n\n const total = values.length\n const maxCount = Math.max(...counts, 1)\n\n const style = resolveSummaryStyle(col.pieceData[0], col.name)\n\n for (let i = 0; i < numBins; i++) {\n if (counts[i] === 0) continue\n\n const normCount = isRelative ? counts[i] / total : counts[i] / maxCount\n // Bar height proportional to count, within the column band\n const barH = normCount * col.width * 0.9\n\n // Bin position on the value (x) axis\n const binStart = rScale(vMin + i * binWidth)\n const binEnd = rScale(vMin + (i + 1) * binWidth)\n const x = Math.min(binStart, binEnd)\n const w = Math.abs(binEnd - binStart)\n\n // Align bar to baseline (bottom of the column band)\n const y = col.x + col.width - barH\n\n nodes.push(buildRectNode(\n x, y, w, barH,\n style,\n { bin: i, count: counts[i], range: [vMin + i * binWidth, vMin + (i + 1) * binWidth], category: col.name },\n col.name\n ))\n }\n }\n\n return nodes\n}\n\nexport function buildRidgelineScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, config, getR, resolveSummaryStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const numBins = config.bins || 20\n const isHorizontal = projection === \"horizontal\"\n // Amplitude controls how far the density extends (can overlap neighbors)\n const amplitude = (config as any).amplitude || 1.5\n\n for (const col of Object.values(columns)) {\n const values = col.pieceData\n .map(d => getR(d))\n .filter(v => v != null && !isNaN(v))\n .sort((a, b) => a - b)\n\n if (values.length < 2) continue\n\n const vMin = values[0]\n const vMax = values[values.length - 1]\n const binWidth = (vMax - vMin) / numBins || 1\n\n // Build histogram bins\n const counts = new Array(numBins).fill(0)\n for (const v of values) {\n const idx = Math.min(Math.floor((v - vMin) / binWidth), numBins - 1)\n counts[idx]++\n }\n const maxCount = Math.max(...counts, 1)\n\n const style = resolveSummaryStyle(col.pieceData[0], col.name)\n const halfBand = col.width * amplitude\n\n // Build one-sided area path (density extends in one direction from baseline)\n let pathStr = \"\"\n\n if (isHorizontal) {\n // Horizontal: categories on y, values on x\n // Baseline is the bottom of the column band, density extends upward\n const baseline = col.x + col.width\n\n // Start at baseline\n pathStr = `M ${rScale(vMin)} ${baseline}`\n // Density curve going upward (negative y)\n for (let i = 0; i < numBins; i++) {\n const x = rScale(vMin + (i + 0.5) * binWidth)\n const h = (counts[i] / maxCount) * halfBand\n pathStr += ` L ${x} ${baseline - h}`\n }\n // Close back to baseline\n pathStr += ` L ${rScale(vMax)} ${baseline} Z`\n } else {\n // Vertical: categories on x, values on y\n // Baseline is the left of the column band, density extends rightward\n const baseline = col.x\n\n pathStr = `M ${baseline} ${rScale(vMin)}`\n for (let i = 0; i < numBins; i++) {\n const y = rScale(vMin + (i + 0.5) * binWidth)\n const w = (counts[i] / maxCount) * halfBand\n pathStr += ` L ${baseline + w} ${y}`\n }\n pathStr += ` L ${baseline} ${rScale(vMax)} Z`\n }\n\n const ridgeBounds = isHorizontal\n ? { x: Math.min(rScale(vMin), rScale(vMax)), y: col.x, width: Math.abs(rScale(vMax) - rScale(vMin)), height: col.width }\n : { x: col.x, y: Math.min(rScale(vMax), rScale(vMin)), width: col.width, height: Math.abs(rScale(vMax) - rScale(vMin)) }\n\n nodes.push({\n type: \"violin\",\n pathString: pathStr,\n translateX: 0,\n translateY: 0,\n bounds: ridgeBounds,\n style: { ...style, fillOpacity: style.fillOpacity ?? 0.5 },\n datum: col.pieceData,\n category: col.name\n } as ViolinSceneNode)\n }\n\n return nodes\n}\n","import { buildRectNode } from \"../SceneGraph\"\nimport type { OrdinalSceneNode, OrdinalLayout } from \"../ordinalTypes\"\nimport type { OrdinalSceneContext } from \"./types\"\n\nexport function buildTimelineScene(ctx: OrdinalSceneContext, layout: OrdinalLayout): OrdinalSceneNode[] {\n const { scales, columns, getRawRange, resolvePieceStyle } = ctx\n const { r: rScale, projection } = scales\n const nodes: OrdinalSceneNode[] = []\n const isHorizontal = projection === \"horizontal\"\n\n for (const col of Object.values(columns)) {\n for (const d of col.pieceData) {\n const range = getRawRange(d)\n if (!range) continue\n\n const [start, end] = range\n const style = resolvePieceStyle(d, col.name)\n\n if (isHorizontal) {\n const x0 = rScale(Math.min(start, end))\n const x1 = rScale(Math.max(start, end))\n nodes.push(buildRectNode(\n x0, col.x, x1 - x0, col.width,\n style, d, col.name\n ))\n } else {\n const y0 = rScale(Math.max(start, end))\n const y1 = rScale(Math.min(start, end))\n nodes.push(buildRectNode(\n col.x, y0, col.width, y1 - y0,\n style, d, col.name\n ))\n }\n }\n }\n\n return nodes\n}\n","import type { ConnectorSceneNode, OrdinalSceneNode, OrdinalLayout } from \"../ordinalTypes\"\nimport type { Style } from \"../types\"\nimport type { OrdinalSceneContext } from \"./types\"\n\nexport function buildConnectors(\n ctx: OrdinalSceneContext,\n pieceNodes: OrdinalSceneNode[],\n layout: OrdinalLayout\n): ConnectorSceneNode[] {\n const { scales, config, getConnector, getO } = ctx\n if (!getConnector || !scales) return []\n const connectors: ConnectorSceneNode[] = []\n const { projection } = scales\n\n // Group pieces by connector key\n const groups = new Map<string, { x: number; y: number; datum: any; category: string }[]>()\n\n for (const node of pieceNodes) {\n if (node.type !== \"point\" && node.type !== \"rect\") continue\n const datum = node.datum\n if (!datum) continue\n\n const key = getConnector(datum)\n if (!key) continue\n\n let cx: number, cy: number\n if (node.type === \"point\") {\n cx = node.x\n cy = node.y\n } else {\n // rect: use center\n cx = node.x + node.w / 2\n cy = node.y + (projection === \"vertical\" ? 0 : node.h / 2)\n }\n\n if (!groups.has(key)) groups.set(key, [])\n groups.get(key)!.push({ x: cx, y: cy, datum, category: getO(datum) })\n }\n\n // Draw lines connecting pieces with the same connector key, sorted by category order\n const oExtent = scales.o.domain()\n const resolveConnStyle = config.connectorStyle\n\n for (const [key, points] of groups) {\n if (points.length < 2) continue\n\n // Sort by category order\n points.sort((a, b) => oExtent.indexOf(a.category) - oExtent.indexOf(b.category))\n\n for (let i = 0; i < points.length - 1; i++) {\n const from = points[i]\n const to = points[i + 1]\n const style: Style = typeof resolveConnStyle === \"function\"\n ? resolveConnStyle(from.datum)\n : (resolveConnStyle || { stroke: \"#999\", strokeWidth: 1, opacity: 0.5 })\n\n connectors.push({\n type: \"connector\",\n x1: from.x,\n y1: from.y,\n x2: to.x,\n y2: to.y,\n style,\n datum: from.datum,\n group: key\n })\n }\n }\n\n return connectors\n}\n","import { scaleBand, scaleLinear, type ScaleBand, type ScaleLinear } from \"d3-scale\"\nimport { RingBuffer } from \"../realtime/RingBuffer\"\nimport { IncrementalExtent } from \"../realtime/IncrementalExtent\"\nimport type {\n OrdinalPipelineConfig,\n OrdinalScales,\n OrdinalSceneNode,\n OrdinalColumn,\n OrdinalLayout,\n OrdinalChartType\n} from \"./ordinalTypes\"\nimport type { Changeset, Style, DecayConfig } from \"./types\"\nimport { resolveAccessor, resolveStringAccessor } from \"./accessorUtils\"\nimport { buildBarScene, buildClusterBarScene } from \"./ordinalSceneBuilders/barScene\"\nimport { buildPointScene, buildSwarmScene } from \"./ordinalSceneBuilders/pointScene\"\nimport { buildPieScene } from \"./ordinalSceneBuilders/pieScene\"\nimport { buildBoxplotScene, buildViolinScene, buildHistogramScene, buildRidgelineScene } from \"./ordinalSceneBuilders/statisticalScene\"\nimport { buildTimelineScene } from \"./ordinalSceneBuilders/timelineScene\"\nimport { buildConnectors } from \"./ordinalSceneBuilders/connectorScene\"\nimport type { OrdinalSceneContext, SceneBuilderFn } from \"./ordinalSceneBuilders/types\"\n\nconst SCENE_BUILDERS: Record<string, SceneBuilderFn> = {\n bar: buildBarScene,\n clusterbar: buildClusterBarScene,\n point: buildPointScene,\n swarm: buildSwarmScene,\n pie: buildPieScene,\n donut: buildPieScene,\n boxplot: buildBoxplotScene,\n violin: buildViolinScene,\n histogram: buildHistogramScene,\n ridgeline: buildRidgelineScene,\n timeline: buildTimelineScene,\n}\n\n// ── OrdinalPipelineStore ───────────────────────────────────────────────\n\nexport class OrdinalPipelineStore {\n private buffer: RingBuffer<Record<string, any>>\n private rExtent = new IncrementalExtent()\n /** Per-accessor extents for multiAxis mode */\n private rExtents: IncrementalExtent[] = []\n private config: OrdinalPipelineConfig\n\n private getO: (d: any) => string\n private getR: (d: any) => number\n /** All resolved rAccessors (length > 1 when multiAxis) */\n private rAccessors: ((d: any) => number)[] = []\n private getStack: ((d: any) => string) | undefined\n private getGroup: ((d: any) => string) | undefined\n private getColor: ((d: any) => string) | undefined\n private getConnector: ((d: any) => string) | undefined\n\n /** Discovered categories in insertion order */\n private categories = new Set<string>()\n /** Lazy color map built from colorScheme for resolvePieceStyle */\n private _colorSchemeMap: Map<string, string> | null = null\n private _colorSchemeIndex = 0\n\n // ── Pulse tracking ──────────────────────────────────────────────────\n private timestampBuffer: RingBuffer<number> | null = null\n\n // ── Transition animation ────────────────────────────────────────────\n activeTransition: { startTime: number; duration: number } | null = null\n private prevPositionMap = new Map<string, { x: number; y: number; w?: number; h?: number; r?: number }>()\n\n // ── Staleness tracking ──────────────────────────────────────────────\n lastIngestTime = 0\n\n scales: OrdinalScales | null = null\n /** Per-accessor scales for multiAxis */\n multiScales: (ScaleLinear<number, number>)[] = []\n scene: OrdinalSceneNode[] = []\n columns: Record<string, OrdinalColumn> = {}\n version = 0\n\n constructor(config: OrdinalPipelineConfig) {\n this.config = config\n this.buffer = new RingBuffer(config.windowSize)\n\n // Resolve accessors\n this.getO = resolveStringAccessor(\n config.oAccessor || config.categoryAccessor,\n \"category\"\n ) as (d: any) => string\n\n const isStreaming = config.runtimeMode === \"streaming\"\n\n // Resolve rAccessor — may be an array for multiAxis\n const rawR = config.rAccessor\n if (Array.isArray(rawR)) {\n this.rAccessors = rawR.map(acc => resolveAccessor(acc, \"value\"))\n this.getR = this.rAccessors[0]\n this.rExtents = rawR.map(() => new IncrementalExtent())\n } else {\n if (isStreaming && (config.timeAccessor || config.valueAccessor)) {\n this.getR = resolveAccessor(config.valueAccessor || rawR, \"value\")\n } else {\n this.getR = resolveAccessor(rawR, \"value\")\n }\n this.rAccessors = [this.getR]\n this.rExtents = [this.rExtent]\n }\n\n this.getStack = resolveStringAccessor(config.stackBy)\n this.getGroup = resolveStringAccessor(config.groupBy)\n this.getColor = resolveStringAccessor(config.colorAccessor)\n this.getConnector = resolveStringAccessor(config.connectorAccessor)\n\n if (config.pulse) {\n this.timestampBuffer = new RingBuffer(config.windowSize)\n }\n }\n\n // ── Data ingestion ───────────────────────────────────────────────────\n\n ingest(changeset: Changeset): boolean {\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n this.lastIngestTime = now\n\n if (changeset.bounded) {\n this.buffer.clear()\n this.rExtent.clear()\n this.categories.clear()\n if (this.timestampBuffer) this.timestampBuffer.clear()\n\n const targetSize = changeset.totalSize || changeset.inserts.length\n if (targetSize > this.buffer.capacity) {\n this.buffer.resize(targetSize)\n if (this.timestampBuffer && targetSize > this.timestampBuffer.capacity) {\n this.timestampBuffer.resize(targetSize)\n }\n }\n\n for (const d of changeset.inserts) {\n this.buffer.push(d)\n if (this.timestampBuffer) this.timestampBuffer.push(now)\n this.categories.add(this.getO(d))\n this.pushValueExtent(d)\n }\n } else {\n // Streaming append\n for (const d of changeset.inserts) {\n const evicted = this.buffer.push(d)\n if (this.timestampBuffer) this.timestampBuffer.push(now)\n this.categories.add(this.getO(d))\n this.pushValueExtent(d)\n\n if (evicted != null) {\n this.evictValueExtent(evicted)\n }\n }\n }\n\n return true\n }\n\n private pushValueExtent(d: any): void {\n if (this.config.chartType === \"timeline\") {\n const range = this.getRawRange(d)\n if (range) {\n this.rExtent.push(range[0])\n this.rExtent.push(range[1])\n }\n } else if (this.rAccessors.length > 1) {\n // MultiAxis: track extents per accessor\n for (let i = 0; i < this.rAccessors.length; i++) {\n this.rExtents[i].push(this.rAccessors[i](d))\n }\n // Also push to primary extent for single-scale fallback\n this.rExtent.push(this.getR(d))\n } else {\n this.rExtent.push(this.getR(d))\n }\n }\n\n private evictValueExtent(d: any): void {\n if (this.config.chartType === \"timeline\") {\n const range = this.getRawRange(d)\n if (range) {\n this.rExtent.evict(range[0])\n this.rExtent.evict(range[1])\n }\n } else if (this.rAccessors.length > 1) {\n for (let i = 0; i < this.rAccessors.length; i++) {\n this.rExtents[i].evict(this.rAccessors[i](d))\n }\n this.rExtent.evict(this.getR(d))\n } else {\n this.rExtent.evict(this.getR(d))\n }\n }\n\n /** For timeline type: resolve rAccessor as a [start, end] pair */\n private getRawRange(d: any): [number, number] | null {\n const acc = this.config.rAccessor\n if (!acc) return null\n const result = typeof acc === \"function\" ? (acc as Function)(d) : d[acc as string]\n if (Array.isArray(result) && result.length >= 2) {\n return [+result[0], +result[1]]\n }\n return null\n }\n\n // ── Scene computation ────────────────────────────────────────────────\n\n computeScene(layout: OrdinalLayout): void {\n const { config, buffer } = this\n if (buffer.size === 0) {\n this.scales = null\n this.scene = []\n this.columns = {}\n this.version++\n return\n }\n\n // Recalculate dirty extents\n if (this.rExtent.dirty) {\n this.rExtent.recalculate(buffer, this.getR)\n }\n\n const data = buffer.toArray()\n const projection = config.projection || \"vertical\"\n\n // 1. Resolve category extent\n const oExtent = config.oExtent || this.resolveCategories(data)\n\n // 2. Compute value extent\n const rDomain = this.computeValueDomain(data, oExtent)\n\n // 3. Build scales\n const isVertical = projection === \"vertical\"\n const isHorizontal = projection === \"horizontal\"\n const isRadial = projection === \"radial\"\n\n const padding = config.barPadding != null ? config.barPadding / (isVertical ? layout.width : layout.height) : 0.1\n\n let oScale: ScaleBand<string>\n let rScale: ScaleLinear<number, number>\n\n if (isRadial) {\n // Radial: oScale maps to [0, 2π], rScale maps outward\n oScale = scaleBand<string>().domain(oExtent).range([0, 1]).padding(0)\n const maxR = Math.min(layout.width, layout.height) / 2\n const innerR = config.innerRadius || 0\n rScale = scaleLinear().domain(rDomain).range([innerR, maxR])\n } else if (isHorizontal) {\n oScale = scaleBand<string>().domain(oExtent).range([0, layout.height]).padding(padding)\n rScale = scaleLinear().domain(rDomain).range([0, layout.width])\n } else {\n // vertical (default)\n oScale = scaleBand<string>().domain(oExtent).range([0, layout.width]).padding(padding)\n rScale = scaleLinear().domain(rDomain).range([layout.height, 0])\n }\n\n this.scales = { o: oScale, r: rScale, projection }\n\n // 3b. Build per-accessor scales for multiAxis mode\n if (this.rAccessors.length > 1 && config.multiAxis) {\n this.multiScales = this.rAccessors.map((acc, i) => {\n const ext = this.rExtents[i]\n if (ext.dirty) ext.recalculate(buffer, acc)\n let [min, max] = ext.extent\n if (min === Infinity) { min = 0; max = 1 }\n const pad = config.extentPadding || 0.05\n const range = max - min\n const padAmt = range > 0 ? range * pad : 1\n min -= padAmt\n max += padAmt\n if (min > 0) min = 0\n\n if (isHorizontal) return scaleLinear().domain([min, max]).range([0, layout.width])\n return scaleLinear().domain([min, max]).range([layout.height, 0])\n })\n } else {\n this.multiScales = []\n }\n\n // 3c. Expand data for multi-accessor: each datum becomes N pieces with rIndex\n let expandedData = data\n if (this.rAccessors.length > 1) {\n expandedData = data.flatMap(d =>\n this.rAccessors.map((acc, rIndex) => ({\n ...d,\n __rIndex: rIndex,\n __rValue: acc(d),\n __rName: this.resolveRAccessorName(rIndex)\n }))\n )\n }\n\n // 4. Build projected columns\n this.columns = this.buildColumns(expandedData, oExtent, oScale, projection, layout)\n\n // Snapshot positions for transition animation\n if (this.config.transition && this.scene.length > 0) {\n this.snapshotPositions()\n }\n\n // 5. Build scene graph\n this.scene = this.buildSceneNodes(expandedData, layout)\n\n // Apply decay/pulse to discrete scene nodes\n if (this.config.decay) {\n this.applyDecay(this.scene, data)\n }\n if (this.config.pulse) {\n this.applyPulse(this.scene, data)\n }\n\n // Start transition animation\n if (this.config.transition && this.prevPositionMap.size > 0) {\n this.startTransition()\n }\n\n this.version++\n }\n\n private resolveRAccessorName(index: number): string {\n const acc = Array.isArray(this.config.rAccessor) ? this.config.rAccessor[index] : this.config.rAccessor\n return typeof acc === \"string\" ? acc : `value${index}`\n }\n\n // ── Category resolution ──────────────────────────────────────────────\n\n private resolveCategories(data: Record<string, any>[]): string[] {\n const cats = Array.from(this.categories)\n const sort = this.config.oSort\n\n // In streaming mode, preserve insertion order by default to avoid\n // jarring category shuffling as values fluctuate in the sliding window\n if (this.config.runtimeMode === \"streaming\" && sort === undefined) {\n return cats\n }\n\n if (sort === false) return cats\n\n if (typeof sort === \"function\") {\n return cats.sort(sort)\n }\n\n // Default: sort by total value descending (unless explicitly \"asc\")\n const sums = new Map<string, number>()\n for (const d of data) {\n const cat = this.getO(d)\n sums.set(cat, (sums.get(cat) || 0) + Math.abs(this.getR(d)))\n }\n\n if (sort === \"asc\") {\n return cats.sort((a, b) => (sums.get(a) || 0) - (sums.get(b) || 0))\n }\n\n // Default, true, \"desc\", or undefined → descending\n return cats.sort((a, b) => (sums.get(b) || 0) - (sums.get(a) || 0))\n }\n\n // ── Value domain computation ─────────────────────────────────────────\n\n private computeValueDomain(data: Record<string, any>[], oExtent: string[]): [number, number] {\n const chartType = this.config.chartType\n const pad = this.config.extentPadding || 0.05\n\n // For radial pie/donut, the value axis represents proportions\n // But for radial point (radar), use actual data values\n if (this.config.projection === \"radial\" && (chartType === \"pie\" || chartType === \"donut\")) {\n return [0, 1]\n }\n\n let min = 0\n let max = 0\n\n if (chartType === \"bar\" && this.getStack) {\n // Stacked bars: compute per-category stacked sums\n const posSums = new Map<string, number>()\n const negSums = new Map<string, number>()\n\n for (const d of data) {\n const cat = this.getO(d)\n const val = this.getR(d)\n if (val >= 0) {\n posSums.set(cat, (posSums.get(cat) || 0) + val)\n } else {\n negSums.set(cat, (negSums.get(cat) || 0) + val)\n }\n }\n\n for (const s of posSums.values()) if (s > max) max = s\n for (const s of negSums.values()) if (s < min) min = s\n } else if (chartType === \"bar\") {\n // Non-stacked bars: pieces within each category are summed,\n // so the domain must cover the per-category total\n const catSums = new Map<string, number>()\n for (const d of data) {\n const cat = this.getO(d)\n const val = this.getR(d)\n catSums.set(cat, (catSums.get(cat) || 0) + val)\n }\n for (const s of catSums.values()) {\n if (s > max) max = s\n if (s < min) min = s\n }\n } else if (chartType === \"clusterbar\") {\n // Cluster bars: individual values (side-by-side)\n for (const d of data) {\n const val = this.getR(d)\n if (val > max) max = val\n if (val < min) min = val\n }\n } else {\n // Points, swarm, summary types: raw data extent\n const dataMin = this.rExtent.extent[0]\n const dataMax = this.rExtent.extent[1]\n if (dataMin !== Infinity) min = dataMin\n if (dataMax !== -Infinity) max = dataMax\n }\n\n // Apply user-specified extents\n if (this.config.rExtent) {\n if (this.config.rExtent[0] != null) min = this.config.rExtent[0]\n if (this.config.rExtent[1] != null) max = this.config.rExtent[1]\n }\n\n // Apply padding\n const range = max - min\n const padAmount = range > 0 ? range * pad : 1\n if (!this.config.rExtent?.[0]) min -= padAmount\n if (!this.config.rExtent?.[1]) max += padAmount\n\n // Bars should include zero\n if (chartType === \"bar\" || chartType === \"clusterbar\") {\n if (min > 0) min = 0\n if (max < 0) max = 0\n }\n\n return [min, max]\n }\n\n // ── Column projection ────────────────────────────────────────────────\n\n private buildColumns(\n data: Record<string, any>[],\n oExtent: string[],\n oScale: ScaleBand<string>,\n projection: string,\n layout: OrdinalLayout\n ): Record<string, OrdinalColumn> {\n const columns: Record<string, OrdinalColumn> = {}\n\n // Group data by category\n const grouped = new Map<string, Record<string, any>[]>()\n for (const d of data) {\n const cat = this.getO(d)\n if (!grouped.has(cat)) grouped.set(cat, [])\n grouped.get(cat)!.push(d)\n }\n\n // Compute total for radial proportions\n let total = 0\n if (projection === \"radial\") {\n for (const d of data) {\n total += Math.abs(this.getR(d))\n }\n }\n\n // Dynamic column widths: compute proportional widths instead of uniform bands\n const dcw = this.config.dynamicColumnWidth\n let dynamicWidths: Map<string, number> | null = null\n if (dcw && projection !== \"radial\") {\n dynamicWidths = new Map()\n let totalWidth = 0\n for (const cat of oExtent) {\n const pieceData = grouped.get(cat) || []\n let colValue: number\n if (typeof dcw === \"string\") {\n colValue = pieceData.reduce((s, d) => s + (Number(d[dcw]) || 0), 0)\n } else {\n colValue = dcw(pieceData)\n }\n dynamicWidths.set(cat, colValue)\n totalWidth += colValue\n }\n // Normalize to available space\n const availableSpace = projection === \"horizontal\" ? layout.height : layout.width\n const paddingTotal = oScale.padding() * oScale.step() * oExtent.length\n const usableSpace = availableSpace - paddingTotal\n if (totalWidth > 0) {\n for (const [cat, val] of dynamicWidths) {\n dynamicWidths.set(cat, (val / totalWidth) * usableSpace)\n }\n }\n }\n\n let cumulativePct = 0\n let cumulativeX = 0\n\n for (const cat of oExtent) {\n const pieceData = grouped.get(cat) || []\n const catSum = pieceData.reduce((s, d) => s + Math.abs(this.getR(d)), 0)\n const pct = total > 0 ? catSum / total : 0\n\n let bandStart: number\n let bandwidth: number\n if (dynamicWidths) {\n bandStart = cumulativeX\n bandwidth = dynamicWidths.get(cat) || oScale.bandwidth()\n cumulativeX += bandwidth + (oScale.padding() * oScale.step())\n } else {\n bandStart = oScale(cat) ?? 0\n bandwidth = oScale.bandwidth()\n }\n\n columns[cat] = {\n name: cat,\n x: bandStart,\n y: 0,\n width: bandwidth,\n middle: bandStart + bandwidth / 2,\n padding: oScale.padding() * oScale.step(),\n pieceData,\n pct,\n pctStart: cumulativePct\n }\n\n cumulativePct += pct\n }\n\n return columns\n }\n\n // ── Scene graph building ─────────────────────────────────────────────\n\n private getSceneContext(): OrdinalSceneContext {\n return {\n scales: this.scales!,\n columns: this.columns,\n config: this.config,\n getR: this.getR,\n getStack: this.getStack,\n getGroup: this.getGroup,\n getColor: this.getColor,\n getConnector: this.getConnector,\n getO: this.getO,\n multiScales: this.multiScales,\n rAccessors: this.rAccessors,\n resolvePieceStyle: (d: any, category?: string) => this.resolvePieceStyle(d, category),\n resolveSummaryStyle: (d: any, category?: string) => this.resolveSummaryStyle(d, category),\n getRawRange: (d: any) => this.getRawRange(d)\n }\n }\n\n private buildSceneNodes(data: Record<string, any>[], layout: OrdinalLayout): OrdinalSceneNode[] {\n if (!this.scales) return []\n\n const ctx = this.getSceneContext()\n const builder = SCENE_BUILDERS[this.config.chartType]\n let nodes = builder ? builder(ctx, layout) : []\n\n // Build connectors if configured\n if (this.getConnector && this.scales) {\n const connectorNodes = buildConnectors(ctx, nodes, layout)\n // Connectors render behind pieces\n nodes = [...connectorNodes, ...nodes]\n }\n\n return nodes\n }\n\n // ── Style resolution ─────────────────────────────────────────────────\n\n private resolvePieceStyle(d: any, category?: string): Style {\n if (typeof this.config.pieceStyle === \"function\") {\n return this.config.pieceStyle(d, category)\n }\n if (this.config.pieceStyle && typeof this.config.pieceStyle === \"object\") {\n return this.config.pieceStyle as unknown as Style\n }\n if (this.config.barColors && category) {\n return { fill: this.config.barColors[category] || \"#007bff\" }\n }\n // Use colorScheme (or default palette) to generate colors by category\n if (category) {\n return { fill: this.getColorFromScheme(category) }\n }\n return { fill: \"#007bff\" }\n }\n\n private getColorFromScheme(key: string): string {\n if (!this._colorSchemeMap) this._colorSchemeMap = new Map()\n const existing = this._colorSchemeMap.get(key)\n if (existing) return existing\n\n const palette = Array.isArray(this.config.colorScheme)\n ? this.config.colorScheme\n : [\"#4e79a7\", \"#f28e2b\", \"#e15759\", \"#76b7b2\", \"#59a14f\", \"#edc948\", \"#b07aa1\", \"#ff9da7\", \"#9c755f\", \"#bab0ac\"]\n const color = palette[this._colorSchemeIndex % palette.length]\n this._colorSchemeIndex++\n this._colorSchemeMap.set(key, color)\n return color\n }\n\n private resolveSummaryStyle(d: any, category?: string): Style {\n if (typeof this.config.summaryStyle === \"function\") {\n return this.config.summaryStyle(d, category)\n }\n if (this.config.summaryStyle && typeof this.config.summaryStyle === \"object\") {\n return this.config.summaryStyle as unknown as Style\n }\n return { fill: \"#007bff\", fillOpacity: 0.6, stroke: \"#007bff\", strokeWidth: 1 }\n }\n\n // ── Decay ────────────────────────────────────────────────────────────\n\n computeDecayOpacity(bufferIndex: number, bufferSize: number): number {\n const decay = this.config.decay\n if (!decay || bufferSize <= 1) return 1\n\n const minOpacity = decay.minOpacity ?? 0.1\n const age = bufferSize - 1 - bufferIndex\n\n switch (decay.type) {\n case \"linear\": {\n const t = 1 - age / (bufferSize - 1)\n return minOpacity + t * (1 - minOpacity)\n }\n case \"exponential\": {\n const halfLife = decay.halfLife ?? bufferSize / 2\n const t = Math.pow(0.5, age / halfLife)\n return minOpacity + t * (1 - minOpacity)\n }\n case \"step\": {\n const threshold = decay.stepThreshold ?? bufferSize * 0.5\n return age < threshold ? 1 : minOpacity\n }\n default:\n return 1\n }\n }\n\n private applyDecay(nodes: OrdinalSceneNode[], data: Record<string, any>[]): void {\n if (!this.config.decay) return\n const bufferSize = data.length\n if (bufferSize <= 1) return\n\n const indexMap = new Map<any, number>()\n for (let i = 0; i < data.length; i++) {\n indexMap.set(data[i], i)\n }\n\n for (const node of nodes) {\n if (node.type === \"connector\" || node.type === \"violin\" || node.type === \"boxplot\" || node.type === \"wedge\") continue\n const idx = indexMap.get(node.datum)\n if (idx == null) continue\n const decayOpacity = this.computeDecayOpacity(idx, bufferSize)\n const baseOpacity = node.style?.opacity ?? 1\n ;(node as any).style = { ...(node as any).style, opacity: baseOpacity * decayOpacity }\n }\n }\n\n // ── Pulse ───────────────────────────────────────────────────────────\n\n private applyPulse(nodes: OrdinalSceneNode[], data: Record<string, any>[]): void {\n if (!this.config.pulse || !this.timestampBuffer) return\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const duration = this.config.pulse.duration ?? 500\n const pulseColor = this.config.pulse.color ?? \"rgba(255,255,255,0.6)\"\n\n const indexMap = new Map<any, number>()\n for (let i = 0; i < data.length; i++) {\n indexMap.set(data[i], i)\n }\n\n for (const node of nodes) {\n if (node.type === \"connector\" || node.type === \"violin\" || node.type === \"boxplot\" || node.type === \"wedge\") continue\n const idx = indexMap.get(node.datum)\n if (idx == null) continue\n const insertTime = this.timestampBuffer.get(idx)\n if (insertTime == null) continue\n const age = now - insertTime\n if (age < duration) {\n const intensity = 1 - age / duration\n ;(node as any)._pulseIntensity = intensity\n ;(node as any)._pulseColor = pulseColor\n }\n }\n }\n\n get hasActivePulses(): boolean {\n if (!this.config.pulse || !this.timestampBuffer || this.timestampBuffer.size === 0) return false\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now()\n const duration = this.config.pulse.duration ?? 500\n const newest = this.timestampBuffer.peek()\n return newest != null && (now - newest) < duration\n }\n\n // ── Transitions ─────────────────────────────────────────────────────\n\n private snapshotPositions(): void {\n this.prevPositionMap.clear()\n for (let i = 0; i < this.scene.length; i++) {\n const node = this.scene[i]\n if (node.type === \"point\") {\n this.prevPositionMap.set(`p:${i}`, { x: node.x, y: node.y, r: node.r })\n } else if (node.type === \"rect\") {\n const key = `r:${node.group || \"\"}:${node.datum?.category ?? i}`\n this.prevPositionMap.set(key, { x: node.x, y: node.y, w: node.w, h: node.h })\n }\n }\n }\n\n private startTransition(): void {\n if (!this.config.transition || this.prevPositionMap.size === 0) return\n const duration = this.config.transition.duration ?? 300\n\n let hasChanges = false\n for (let i = 0; i < this.scene.length; i++) {\n const node = this.scene[i]\n let key: string | null = null\n if (node.type === \"point\") {\n key = `p:${i}`\n } else if (node.type === \"rect\") {\n key = `r:${node.group || \"\"}:${node.datum?.category ?? i}`\n }\n if (!key) continue\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n\n if (node.type === \"point\") {\n if (prev.x !== node.x || prev.y !== node.y) {\n node._targetX = node.x\n node._targetY = node.y\n node.x = prev.x\n node.y = prev.y\n hasChanges = true\n }\n } else if (node.type === \"rect\") {\n if (prev.x !== node.x || prev.y !== node.y || prev.w !== node.w || prev.h !== node.h) {\n node._targetX = node.x\n node._targetY = node.y\n node._targetW = node.w\n node._targetH = node.h\n node.x = prev.x\n node.y = prev.y\n node.w = prev.w ?? node.w\n node.h = prev.h ?? node.h\n hasChanges = true\n }\n }\n }\n\n if (hasChanges) {\n this.activeTransition = {\n startTime: typeof performance !== \"undefined\" ? performance.now() : Date.now(),\n duration\n }\n }\n }\n\n advanceTransition(now: number): boolean {\n if (!this.activeTransition) return false\n\n const elapsed = now - this.activeTransition.startTime\n const rawT = Math.min(elapsed / this.activeTransition.duration, 1)\n const t = this.config.transition?.easing === \"linear\"\n ? rawT\n : 1 - Math.pow(1 - rawT, 3)\n\n for (const node of this.scene) {\n if (node.type === \"point\") {\n if (node._targetX === undefined) continue\n const key = `p:${0}`\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n } else if (node.type === \"rect\") {\n if (node._targetX === undefined) continue\n const key = `r:${node.group || \"\"}:${node.datum?.category ?? 0}`\n const prev = this.prevPositionMap.get(key)\n if (!prev) continue\n node.x = prev.x + (node._targetX - prev.x) * t\n node.y = prev.y + (node._targetY! - prev.y) * t\n if (prev.w !== undefined) {\n node.w = prev.w + (node._targetW! - prev.w) * t\n node.h = prev.h! + (node._targetH! - prev.h!) * t\n }\n }\n }\n\n if (rawT >= 1) {\n for (const node of this.scene) {\n if (node.type === \"point\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n node._targetX = undefined\n node._targetY = undefined\n } else if (node.type === \"rect\") {\n if (node._targetX === undefined) continue\n node.x = node._targetX\n node.y = node._targetY!\n node.w = node._targetW!\n node.h = node._targetH!\n node._targetX = undefined\n node._targetY = undefined\n node._targetW = undefined\n node._targetH = undefined\n }\n }\n this.activeTransition = null\n return false\n }\n\n return true\n }\n\n // ── Public accessors ─────────────────────────────────────────────────\n\n getData(): Record<string, any>[] {\n return this.buffer.toArray()\n }\n\n clear(): void {\n this.buffer.clear()\n this.rExtent.clear()\n this.categories.clear()\n if (this.timestampBuffer) this.timestampBuffer.clear()\n this.prevPositionMap.clear()\n this.activeTransition = null\n this.lastIngestTime = 0\n this.scales = null\n this.scene = []\n this.columns = {}\n this.version++\n }\n\n get size(): number {\n return this.buffer.size\n }\n\n getOAccessor(): (d: any) => string {\n return this.getO\n }\n\n getRAccessor(): (d: any) => number {\n return this.getR\n }\n\n updateConfig(config: Partial<OrdinalPipelineConfig>): void {\n if (config.colorScheme !== this.config.colorScheme) {\n this._colorSchemeMap = null\n this._colorSchemeIndex = 0\n }\n Object.assign(this.config, config)\n }\n}\n","import * as React from \"react\"\nimport * as ReactDOMServer from \"react-dom/server\"\n\nimport { arc as d3Arc } from \"d3-shape\"\n\nimport { PipelineStore, type PipelineConfig } from \"../stream/PipelineStore\"\nimport type {\n StreamXYFrameProps,\n SceneNode,\n PointSceneNode,\n LineSceneNode,\n AreaSceneNode,\n RectSceneNode,\n HeatcellSceneNode,\n CandlestickSceneNode,\n StreamScales,\n StreamLayout\n} from \"../stream/types\"\n\nimport { getLayoutPlugin } from \"../stream/layouts\"\nimport type {\n NetworkPipelineConfig,\n RealtimeNode,\n RealtimeEdge,\n NetworkSceneNode,\n NetworkSceneEdge,\n NetworkLabel,\n StreamNetworkFrameProps,\n NetworkChartType,\n NetworkCircleNode,\n NetworkRectNode,\n NetworkArcNode,\n NetworkLineEdge,\n NetworkBezierEdge,\n NetworkRibbonEdge,\n NetworkCurvedEdge\n} from \"../stream/networkTypes\"\n\nimport { OrdinalPipelineStore } from \"../stream/OrdinalPipelineStore\"\nimport type {\n OrdinalPipelineConfig,\n OrdinalSceneNode,\n StreamOrdinalFrameProps,\n WedgeSceneNode,\n BoxplotSceneNode,\n ViolinSceneNode,\n ConnectorSceneNode\n} from \"../stream/ordinalTypes\"\n\ntype FrameType = \"xy\" | \"ordinal\" | \"network\"\n\n// ── Scene graph → SVG conversion ──────────────────────────────────────────\n\nfunction sceneNodeToSVG(node: SceneNode, i: number): React.ReactNode {\n switch (node.type) {\n case \"line\": {\n const n = node as LineSceneNode\n if (n.path.length === 0) return null\n const d = \"M\" + n.path.map(([x, y]) => `${x},${y}`).join(\"L\")\n return (\n <path\n key={`line-${i}`}\n d={d}\n fill=\"none\"\n stroke={n.style.stroke || \"#4e79a7\"}\n strokeWidth={n.style.strokeWidth || 2}\n strokeDasharray={n.style.strokeDasharray}\n opacity={n.style.opacity}\n />\n )\n }\n case \"area\": {\n const n = node as AreaSceneNode\n if (n.topPath.length === 0) return null\n const top = n.topPath.map(([x, y]) => `${x},${y}`).join(\"L\")\n const bottom = [...n.bottomPath].reverse().map(([x, y]) => `${x},${y}`).join(\"L\")\n const d = `M${top}L${bottom}Z`\n return (\n <path\n key={`area-${i}`}\n d={d}\n fill={n.style.fill || \"#4e79a7\"}\n fillOpacity={n.style.fillOpacity ?? n.style.opacity ?? 0.7}\n stroke={n.style.stroke}\n strokeWidth={n.style.strokeWidth}\n />\n )\n }\n case \"point\": {\n const n = node as PointSceneNode\n return (\n <circle\n key={`point-${i}`}\n cx={n.x}\n cy={n.y}\n r={n.r}\n fill={n.style.fill || \"#4e79a7\"}\n opacity={n.style.opacity ?? 0.8}\n stroke={n.style.stroke}\n strokeWidth={n.style.strokeWidth}\n />\n )\n }\n case \"rect\": {\n const n = node as RectSceneNode\n return (\n <rect\n key={`rect-${i}`}\n x={n.x}\n y={n.y}\n width={n.w}\n height={n.h}\n fill={n.style.fill || \"#4e79a7\"}\n opacity={n.style.opacity}\n stroke={n.style.stroke}\n strokeWidth={n.style.strokeWidth}\n />\n )\n }\n case \"heatcell\": {\n const n = node as HeatcellSceneNode\n return (\n <rect\n key={`heatcell-${i}`}\n x={n.x}\n y={n.y}\n width={n.w}\n height={n.h}\n fill={n.fill}\n />\n )\n }\n case \"candlestick\": {\n const n = node as CandlestickSceneNode\n const bodyTop = Math.min(n.openY, n.closeY)\n const bodyHeight = Math.max(Math.abs(n.openY - n.closeY), 1)\n const bodyColor = n.isUp ? n.upColor : n.downColor\n return (\n <g key={`candle-${i}`}>\n <line\n x1={n.x}\n y1={n.highY}\n x2={n.x}\n y2={n.lowY}\n stroke={n.wickColor}\n strokeWidth={n.wickWidth}\n />\n <rect\n x={n.x - n.bodyWidth / 2}\n y={bodyTop}\n width={n.bodyWidth}\n height={bodyHeight}\n fill={bodyColor}\n stroke={bodyColor}\n strokeWidth={1}\n />\n </g>\n )\n }\n default:\n return null\n }\n}\n\nfunction defaultTickFormat(v: number): string {\n return String(Math.round(v * 100) / 100)\n}\n\nfunction generateAxesSVG(\n scales: StreamScales,\n layout: StreamLayout,\n props: StreamXYFrameProps\n): React.ReactNode {\n const xTicks = scales.x.ticks(5).map(v => ({\n pixel: scales.x(v),\n label: (props.xFormat || props.tickFormatTime || defaultTickFormat)(v)\n }))\n\n const yTicks = scales.y.ticks(5).map(v => ({\n pixel: scales.y(v),\n label: (props.yFormat || props.tickFormatValue || defaultTickFormat)(v)\n }))\n\n return (\n <g className=\"stream-axes\">\n {/* X axis */}\n <line x1={0} y1={layout.height} x2={layout.width} y2={layout.height} stroke=\"#ccc\" strokeWidth={1} />\n {xTicks.map((tick, i) => (\n <g key={`xtick-${i}`} transform={`translate(${tick.pixel},${layout.height})`}>\n <line y2={5} stroke=\"#ccc\" strokeWidth={1} />\n <text y={18} textAnchor=\"middle\" fontSize={10} fill=\"#666\">{tick.label}</text>\n </g>\n ))}\n {props.xLabel && (\n <text x={layout.width / 2} y={layout.height + 40} textAnchor=\"middle\" fontSize={12} fill=\"#333\">\n {props.xLabel}\n </text>\n )}\n\n {/* Y axis */}\n <line x1={0} y1={0} x2={0} y2={layout.height} stroke=\"#ccc\" strokeWidth={1} />\n {yTicks.map((tick, i) => (\n <g key={`ytick-${i}`} transform={`translate(0,${tick.pixel})`}>\n <line x2={-5} stroke=\"#ccc\" strokeWidth={1} />\n <text x={-8} textAnchor=\"end\" dominantBaseline=\"middle\" fontSize={10} fill=\"#666\">\n {tick.label}\n </text>\n </g>\n ))}\n {props.yLabel && (\n <text\n x={-(props.margin?.left ?? 40) + 15}\n y={layout.height / 2}\n textAnchor=\"middle\"\n fontSize={12}\n fill=\"#333\"\n transform={`rotate(-90, ${-(props.margin?.left ?? 40) + 15}, ${layout.height / 2})`}\n >\n {props.yLabel}\n </text>\n )}\n </g>\n )\n}\n\n// ── StreamXYFrame SSR ─────────────────────────────────────────────────────\n\nfunction renderStreamXYFrame(props: StreamXYFrameProps): string {\n const defaultMargin = { top: 20, right: 20, bottom: 30, left: 40 }\n const size = props.size || [500, 300]\n const margin = { ...defaultMargin, ...props.margin }\n const width = size[0] - margin.left - margin.right\n const height = size[1] - margin.top - margin.bottom\n\n const isStreaming = props.runtimeMode === \"streaming\" ||\n [\"bar\", \"swarm\", \"waterfall\"].includes(props.chartType)\n\n const pipelineConfig: PipelineConfig = {\n chartType: props.chartType,\n windowSize: props.windowSize ?? 200,\n windowMode: props.windowMode ?? \"sliding\",\n arrowOfTime: isStreaming ? (props.arrowOfTime ?? \"right\") : \"right\",\n extentPadding: props.extentPadding ?? 0.1,\n xAccessor: isStreaming ? undefined : props.xAccessor,\n yAccessor: isStreaming ? undefined : props.yAccessor,\n timeAccessor: isStreaming ? props.timeAccessor : undefined,\n valueAccessor: props.valueAccessor,\n colorAccessor: props.colorAccessor,\n sizeAccessor: props.sizeAccessor,\n groupAccessor: props.groupAccessor,\n categoryAccessor: props.categoryAccessor,\n lineDataAccessor: props.lineDataAccessor,\n xExtent: props.xExtent,\n yExtent: props.yExtent,\n sizeRange: props.sizeRange,\n binSize: props.binSize,\n normalize: props.normalize,\n boundsAccessor: props.boundsAccessor,\n boundsStyle: props.boundsStyle,\n openAccessor: props.openAccessor,\n highAccessor: props.highAccessor,\n lowAccessor: props.lowAccessor,\n closeAccessor: props.closeAccessor,\n candlestickStyle: props.candlestickStyle,\n lineStyle: props.lineStyle,\n pointStyle: props.pointStyle,\n areaStyle: props.areaStyle,\n colorScheme: props.colorScheme,\n barColors: props.barColors\n }\n\n const store = new PipelineStore(pipelineConfig)\n\n // Ingest bounded data\n if (props.data) {\n store.ingest({ inserts: props.data, bounded: true })\n }\n\n // Compute scene graph\n store.computeScene({ width, height })\n\n if (!store.scales || store.scene.length === 0) {\n // No data — return empty SVG\n return ReactDOMServer.renderToStaticMarkup(\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"stream-xy-frame\" width={size[0]} height={size[1]} />\n )\n }\n\n // Convert scene nodes to SVG\n const dataMarks = store.scene\n .map((node, i) => sceneNodeToSVG(node, i))\n .filter(Boolean)\n\n // Generate axes\n const showAxes = props.showAxes !== false\n const axes = showAxes\n ? generateAxesSVG(store.scales, { width, height }, props)\n : null\n\n // Title\n const title = props.title && typeof props.title === \"string\" ? (\n <text\n x={size[0] / 2}\n y={16}\n textAnchor=\"middle\"\n fontSize={14}\n fontWeight=\"bold\"\n fill=\"#333\"\n >\n {props.title}\n </text>\n ) : null\n\n // Background\n const bg = props.background ? (\n <rect x={0} y={0} width={width} height={height} fill={props.background} />\n ) : null\n\n const svgElement = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={`stream-xy-frame${props.className ? ` ${props.className}` : \"\"}`}\n width={size[0]}\n height={size[1]}\n >\n <g transform={`translate(${margin.left},${margin.top})`}>\n {bg}\n {dataMarks}\n {axes}\n </g>\n {title}\n </svg>\n )\n\n return ReactDOMServer.renderToStaticMarkup(svgElement)\n}\n\n// ── Network scene graph → SVG conversion ──────────────────────────────────\n\nfunction networkSceneNodeToSVG(node: NetworkSceneNode, i: number): React.ReactNode {\n switch (node.type) {\n case \"circle\": {\n const n = node as NetworkCircleNode\n return (\n <circle\n key={`net-circle-${i}`}\n cx={n.cx}\n cy={n.cy}\n r={n.r}\n fill={n.style.fill || \"#4e79a7\"}\n stroke={n.style.stroke}\n strokeWidth={n.style.strokeWidth}\n opacity={n.style.opacity}\n />\n )\n }\n case \"rect\": {\n const n = node as NetworkRectNode\n return (\n <rect\n key={`net-rect-${i}`}\n x={n.x}\n y={n.y}\n width={n.w}\n height={n.h}\n fill={n.style.fill || \"#4e79a7\"}\n stroke={n.style.stroke}\n strokeWidth={n.style.strokeWidth}\n opacity={n.style.opacity}\n />\n )\n }\n case \"arc\": {\n const n = node as NetworkArcNode\n const arcPath = d3Arc<any>()\n .innerRadius(n.innerR)\n .outerRadius(n.outerR)\n .startAngle(n.startAngle)\n .endAngle(n.endAngle)({} as any) || \"\"\n return (\n <path\n key={`net-arc-${i}`}\n d={arcPath}\n transform={`translate(${n.cx},${n.cy})`}\n fill={n.style.fill || \"#4e79a7\"}\n stroke={n.style.stroke}\n strokeWidth={n.style.strokeWidth}\n opacity={n.style.opacity}\n />\n )\n }\n default:\n return null\n }\n}\n\nfunction networkSceneEdgeToSVG(edge: NetworkSceneEdge, i: number): React.ReactNode {\n switch (edge.type) {\n case \"line\": {\n const e = edge as NetworkLineEdge\n return (\n <line\n key={`net-edge-line-${i}`}\n x1={e.x1}\n y1={e.y1}\n x2={e.x2}\n y2={e.y2}\n stroke={e.style.stroke || \"#999\"}\n strokeWidth={e.style.strokeWidth || 1}\n opacity={e.style.opacity}\n />\n )\n }\n case \"bezier\": {\n const e = edge as NetworkBezierEdge\n return (\n <path\n key={`net-edge-bezier-${i}`}\n d={e.pathD}\n fill={e.style.fill || \"#999\"}\n fillOpacity={e.style.fillOpacity}\n stroke={e.style.stroke || \"none\"}\n strokeWidth={e.style.strokeWidth}\n opacity={e.style.opacity}\n />\n )\n }\n case \"ribbon\": {\n const e = edge as NetworkRibbonEdge\n return (\n <path\n key={`net-edge-ribbon-${i}`}\n d={e.pathD}\n fill={e.style.fill || \"#999\"}\n fillOpacity={e.style.fillOpacity}\n stroke={e.style.stroke || \"none\"}\n strokeWidth={e.style.strokeWidth}\n opacity={e.style.opacity}\n />\n )\n }\n case \"curved\": {\n const e = edge as NetworkCurvedEdge\n return (\n <path\n key={`net-edge-curved-${i}`}\n d={e.pathD}\n fill={e.style.fill || \"none\"}\n stroke={e.style.stroke || \"#999\"}\n strokeWidth={e.style.strokeWidth || 1}\n opacity={e.style.opacity}\n />\n )\n }\n default:\n return null\n }\n}\n\nfunction networkLabelToSVG(label: NetworkLabel, i: number): React.ReactNode {\n return (\n <text\n key={`net-label-${i}`}\n x={label.x}\n y={label.y}\n textAnchor={label.anchor || \"middle\"}\n dominantBaseline={(label.baseline || \"auto\") as any}\n fontSize={label.fontSize || 11}\n fontWeight={label.fontWeight}\n fill={label.fill || \"#333\"}\n stroke={label.stroke}\n strokeWidth={label.strokeWidth}\n paintOrder={label.paintOrder}\n >\n {label.text}\n </text>\n )\n}\n\n// ── Helper functions for building RealtimeNodes/Edges from props ──────────\n\nfunction resolveAccessor(\n accessor: string | ((d: any) => any) | undefined,\n defaultKey: string\n): (d: any) => any {\n if (!accessor) return (d: any) => d[defaultKey]\n if (typeof accessor === \"function\") return accessor\n return (d: any) => d[accessor]\n}\n\nfunction buildRealtimeNodes(\n propsNodes: any[],\n config: NetworkPipelineConfig\n): RealtimeNode[] {\n const nodeIDFn = resolveAccessor(config.nodeIDAccessor, \"id\")\n return propsNodes.map((d) => ({\n id: String(nodeIDFn(d)),\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: 0,\n data: d\n }))\n}\n\nfunction buildRealtimeEdges(\n propsEdges: any[],\n config: NetworkPipelineConfig\n): RealtimeEdge[] {\n const sourceFn = resolveAccessor(config.sourceAccessor, \"source\")\n const targetFn = resolveAccessor(config.targetAccessor, \"target\")\n const valueFn = resolveAccessor(config.valueAccessor, \"value\")\n return propsEdges.map((d) => ({\n source: String(sourceFn(d)),\n target: String(targetFn(d)),\n value: Number(valueFn(d)) || 1,\n y0: 0,\n y1: 0,\n sankeyWidth: 0,\n data: d\n }))\n}\n\n// ── Stream-first network renderer ─────────────────────────────────────────\n\nconst HIERARCHICAL_TYPES: Set<string> = new Set([\n \"tree\",\n \"cluster\",\n \"treemap\",\n \"circlepack\",\n \"partition\"\n])\n\nfunction renderNetworkFrame(props: StreamNetworkFrameProps): string {\n const chartType: NetworkChartType = props.chartType || \"force\"\n const size: [number, number] = props.size || [500, 500]\n const defaultMargin = { top: 20, right: 20, bottom: 20, left: 20 }\n const margin = { ...defaultMargin, ...props.margin }\n const innerWidth = size[0] - margin.left - margin.right\n const innerHeight = size[1] - margin.top - margin.bottom\n\n const plugin = getLayoutPlugin(chartType)\n if (!plugin) {\n throw new Error(\n `No layout plugin found for chart type: \"${chartType}\". ` +\n `Supported types: force, sankey, chord, tree, cluster, treemap, circlepack, partition.`\n )\n }\n\n // Build pipeline config from props\n const config: NetworkPipelineConfig = {\n chartType,\n nodeIDAccessor: props.nodeIDAccessor,\n sourceAccessor: props.sourceAccessor,\n targetAccessor: props.targetAccessor,\n valueAccessor: props.valueAccessor,\n childrenAccessor: props.childrenAccessor,\n hierarchySum: props.hierarchySum,\n orientation: props.orientation,\n nodeAlign: props.nodeAlign,\n nodePaddingRatio: props.nodePaddingRatio,\n nodeWidth: props.nodeWidth,\n iterations: props.iterations,\n forceStrength: props.forceStrength,\n padAngle: props.padAngle,\n groupWidth: props.groupWidth,\n sortGroups: props.sortGroups,\n edgeSort: props.edgeSort,\n treeOrientation: props.treeOrientation,\n edgeType: props.edgeType,\n padding: props.padding,\n paddingTop: props.paddingTop,\n nodeStyle: props.nodeStyle,\n edgeStyle: props.edgeStyle,\n nodeLabel: props.nodeLabel,\n showLabels: props.showLabels,\n colorBy: props.colorBy,\n colorScheme: props.colorScheme,\n edgeColorBy: props.edgeColorBy,\n edgeOpacity: props.edgeOpacity,\n colorByDepth: props.colorByDepth,\n nodeSize: props.nodeSize,\n nodeSizeRange: props.nodeSizeRange\n }\n\n let nodes: RealtimeNode[]\n let edges: RealtimeEdge[]\n\n if (HIERARCHICAL_TYPES.has(chartType)) {\n // Hierarchical layouts: single root object from props.data or props.edges\n const hierarchyRoot = props.data || props.edges\n if (!hierarchyRoot || Array.isArray(hierarchyRoot)) {\n // No valid hierarchy root — return empty SVG\n return ReactDOMServer.renderToStaticMarkup(\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"stream-network-frame\" width={size[0]} height={size[1]} />\n )\n }\n // The hierarchy plugin expects the root via config.__hierarchyRoot\n ;(config as any).__hierarchyRoot = hierarchyRoot\n // computeLayout will populate these arrays from the hierarchy\n nodes = []\n edges = []\n } else {\n // Graph layouts (force, sankey, chord): nodes + edges arrays\n const propsNodes = props.nodes || []\n const propsEdges = Array.isArray(props.edges) ? props.edges : []\n\n if (propsNodes.length === 0 && propsEdges.length === 0) {\n return ReactDOMServer.renderToStaticMarkup(\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"stream-network-frame\" width={size[0]} height={size[1]} />\n )\n }\n\n nodes = buildRealtimeNodes(propsNodes, config)\n edges = buildRealtimeEdges(propsEdges, config)\n }\n\n // Run layout\n plugin.computeLayout(nodes, edges, config, [innerWidth, innerHeight])\n\n // Build scene graph\n const { sceneNodes, sceneEdges, labels } = plugin.buildScene(\n nodes,\n edges,\n config,\n [innerWidth, innerHeight]\n )\n\n // Convert scene graph to SVG elements\n const edgeElements = sceneEdges\n .map((edge, i) => networkSceneEdgeToSVG(edge, i))\n .filter(Boolean)\n\n const nodeElements = sceneNodes\n .map((node, i) => networkSceneNodeToSVG(node, i))\n .filter(Boolean)\n\n const labelElements = labels\n .map((label, i) => networkLabelToSVG(label, i))\n .filter(Boolean)\n\n // Title\n const title =\n props.title && typeof props.title === \"string\" ? (\n <text\n x={size[0] / 2}\n y={16}\n textAnchor=\"middle\"\n fontSize={14}\n fontWeight=\"bold\"\n fill=\"#333\"\n >\n {props.title}\n </text>\n ) : null\n\n // Background\n const bg = props.background ? (\n <rect x={0} y={0} width={innerWidth} height={innerHeight} fill={props.background} />\n ) : null\n\n const svgElement = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={`stream-network-frame${props.className ? ` ${props.className}` : \"\"}`}\n width={size[0]}\n height={size[1]}\n >\n <g transform={`translate(${margin.left},${margin.top})`}>\n {bg}\n {edgeElements}\n {nodeElements}\n {labelElements}\n </g>\n {title}\n </svg>\n )\n\n return ReactDOMServer.renderToStaticMarkup(svgElement)\n}\n\n// ── Ordinal scene graph → SVG conversion ─────────────────────────────\n\nfunction ordinalSceneNodeToSVG(node: OrdinalSceneNode, i: number): React.ReactNode {\n switch (node.type) {\n case \"rect\": {\n const n = node as RectSceneNode\n return (\n <rect\n key={`ord-rect-${i}`}\n x={n.x}\n y={n.y}\n width={n.w}\n height={n.h}\n fill={n.style.fill || \"#4e79a7\"}\n opacity={n.style.opacity}\n stroke={n.style.stroke}\n strokeWidth={n.style.strokeWidth}\n />\n )\n }\n case \"point\": {\n const n = node as PointSceneNode\n return (\n <circle\n key={`ord-point-${i}`}\n cx={n.x}\n cy={n.y}\n r={n.r}\n fill={n.style.fill || \"#4e79a7\"}\n opacity={n.style.opacity ?? 0.8}\n stroke={n.style.stroke}\n strokeWidth={n.style.strokeWidth}\n />\n )\n }\n case \"wedge\": {\n const n = node as WedgeSceneNode\n const arcPath = d3Arc<any>()\n .innerRadius(n.innerRadius)\n .outerRadius(n.outerRadius)\n .startAngle(n.startAngle)\n .endAngle(n.endAngle)({} as any) || \"\"\n return (\n <path\n key={`ord-wedge-${i}`}\n d={arcPath}\n transform={`translate(${n.cx},${n.cy})`}\n fill={n.style.fill || \"#4e79a7\"}\n stroke={n.style.stroke}\n strokeWidth={n.style.strokeWidth}\n opacity={n.style.opacity}\n />\n )\n }\n case \"boxplot\": {\n const n = node as BoxplotSceneNode\n const halfW = n.columnWidth / 2\n if (n.projection === \"vertical\") {\n return (\n <g key={`ord-boxplot-${i}`}>\n {/* Whisker line */}\n <line\n x1={n.x} y1={n.minPos} x2={n.x} y2={n.maxPos}\n stroke={n.style.stroke || \"#333\"} strokeWidth={1}\n />\n {/* Box */}\n <rect\n x={n.x - halfW} y={Math.min(n.q1Pos, n.q3Pos)}\n width={n.columnWidth}\n height={Math.abs(n.q3Pos - n.q1Pos)}\n fill={n.style.fill || \"#4e79a7\"}\n fillOpacity={n.style.fillOpacity ?? 0.6}\n stroke={n.style.stroke || \"#333\"}\n strokeWidth={1}\n />\n {/* Median line */}\n <line\n x1={n.x - halfW} y1={n.medianPos} x2={n.x + halfW} y2={n.medianPos}\n stroke={n.style.stroke || \"#333\"} strokeWidth={2}\n />\n {/* Min/Max caps */}\n <line x1={n.x - halfW * 0.5} y1={n.minPos} x2={n.x + halfW * 0.5} y2={n.minPos} stroke={n.style.stroke || \"#333\"} strokeWidth={1} />\n <line x1={n.x - halfW * 0.5} y1={n.maxPos} x2={n.x + halfW * 0.5} y2={n.maxPos} stroke={n.style.stroke || \"#333\"} strokeWidth={1} />\n </g>\n )\n } else {\n // horizontal\n return (\n <g key={`ord-boxplot-${i}`}>\n <line\n x1={n.minPos} y1={n.y} x2={n.maxPos} y2={n.y}\n stroke={n.style.stroke || \"#333\"} strokeWidth={1}\n />\n <rect\n x={Math.min(n.q1Pos, n.q3Pos)} y={n.y - halfW}\n width={Math.abs(n.q3Pos - n.q1Pos)}\n height={n.columnWidth}\n fill={n.style.fill || \"#4e79a7\"}\n fillOpacity={n.style.fillOpacity ?? 0.6}\n stroke={n.style.stroke || \"#333\"}\n strokeWidth={1}\n />\n <line\n x1={n.medianPos} y1={n.y - halfW} x2={n.medianPos} y2={n.y + halfW}\n stroke={n.style.stroke || \"#333\"} strokeWidth={2}\n />\n <line x1={n.minPos} y1={n.y - halfW * 0.5} x2={n.minPos} y2={n.y + halfW * 0.5} stroke={n.style.stroke || \"#333\"} strokeWidth={1} />\n <line x1={n.maxPos} y1={n.y - halfW * 0.5} x2={n.maxPos} y2={n.y + halfW * 0.5} stroke={n.style.stroke || \"#333\"} strokeWidth={1} />\n </g>\n )\n }\n }\n case \"violin\": {\n const n = node as ViolinSceneNode\n const elements: React.ReactNode[] = [\n <path\n key={`ord-violin-path-${i}`}\n d={n.pathString}\n transform={n.translateX || n.translateY ? `translate(${n.translateX},${n.translateY})` : undefined}\n fill={n.style.fill || \"#4e79a7\"}\n fillOpacity={n.style.fillOpacity ?? 0.6}\n stroke={n.style.stroke || \"#333\"}\n strokeWidth={n.style.strokeWidth || 1}\n />\n ]\n if (n.iqrLine && n.bounds) {\n const b = n.bounds\n const midX = b.x + b.width / 2\n const midY = b.y + b.height / 2\n const isVerticalViolin = b.height > b.width\n if (isVerticalViolin) {\n elements.push(\n <line key={`ord-violin-iqr-${i}`}\n x1={midX} y1={n.iqrLine.q1Pos} x2={midX} y2={n.iqrLine.q3Pos}\n stroke={n.style.stroke || \"#333\"} strokeWidth={2}\n />,\n <circle key={`ord-violin-med-${i}`}\n cx={midX} cy={n.iqrLine.medianPos} r={3}\n fill=\"white\" stroke={n.style.stroke || \"#333\"} strokeWidth={1}\n />\n )\n } else {\n elements.push(\n <line key={`ord-violin-iqr-${i}`}\n x1={n.iqrLine.q1Pos} y1={midY} x2={n.iqrLine.q3Pos} y2={midY}\n stroke={n.style.stroke || \"#333\"} strokeWidth={2}\n />,\n <circle key={`ord-violin-med-${i}`}\n cx={n.iqrLine.medianPos} cy={midY} r={3}\n fill=\"white\" stroke={n.style.stroke || \"#333\"} strokeWidth={1}\n />\n )\n }\n }\n return <g key={`ord-violin-${i}`}>{elements}</g>\n }\n case \"connector\": {\n const n = node as ConnectorSceneNode\n return (\n <line\n key={`ord-conn-${i}`}\n x1={n.x1}\n y1={n.y1}\n x2={n.x2}\n y2={n.y2}\n stroke={n.style.stroke || \"#999\"}\n strokeWidth={n.style.strokeWidth || 1}\n opacity={n.style.opacity ?? 0.5}\n />\n )\n }\n default:\n return null\n }\n}\n\nfunction generateOrdinalAxesSVG(\n store: OrdinalPipelineStore,\n layout: { width: number; height: number },\n props: StreamOrdinalFrameProps\n): React.ReactNode {\n const scales = store.scales\n if (!scales) return null\n\n // Skip axes for radial projection (pie/donut)\n if (scales.projection === \"radial\") return null\n\n const isVertical = scales.projection === \"vertical\"\n const columns = store.columns\n\n const categoryTicks = Object.values(columns).map(col => ({\n pixel: col.middle,\n label: (props.oFormat || String)(col.name)\n }))\n\n const rTicks = scales.r.ticks(5).map(v => ({\n pixel: scales.r(v),\n label: (props.rFormat || defaultTickFormat)(v)\n }))\n\n if (isVertical) {\n // Vertical: categories on x-axis, values on y-axis\n return (\n <g className=\"ordinal-axes\">\n {/* Category axis (bottom) */}\n <line x1={0} y1={layout.height} x2={layout.width} y2={layout.height} stroke=\"#ccc\" strokeWidth={1} />\n {categoryTicks.map((tick, i) => (\n <g key={`oxtick-${i}`} transform={`translate(${tick.pixel},${layout.height})`}>\n <line y2={5} stroke=\"#ccc\" strokeWidth={1} />\n <text y={18} textAnchor=\"middle\" fontSize={10} fill=\"#666\">{tick.label}</text>\n </g>\n ))}\n {props.oLabel && (\n <text x={layout.width / 2} y={layout.height + 40} textAnchor=\"middle\" fontSize={12} fill=\"#333\">\n {props.oLabel}\n </text>\n )}\n\n {/* Value axis (left) */}\n <line x1={0} y1={0} x2={0} y2={layout.height} stroke=\"#ccc\" strokeWidth={1} />\n {rTicks.map((tick, i) => (\n <g key={`oytick-${i}`} transform={`translate(0,${tick.pixel})`}>\n <line x2={-5} stroke=\"#ccc\" strokeWidth={1} />\n <text x={-8} textAnchor=\"end\" dominantBaseline=\"middle\" fontSize={10} fill=\"#666\">\n {tick.label}\n </text>\n </g>\n ))}\n {props.rLabel && (\n <text\n x={-(props.margin?.left ?? 40) + 15}\n y={layout.height / 2}\n textAnchor=\"middle\"\n fontSize={12}\n fill=\"#333\"\n transform={`rotate(-90, ${-(props.margin?.left ?? 40) + 15}, ${layout.height / 2})`}\n >\n {props.rLabel}\n </text>\n )}\n </g>\n )\n } else {\n // Horizontal: categories on y-axis, values on x-axis\n return (\n <g className=\"ordinal-axes\">\n {/* Value axis (bottom) */}\n <line x1={0} y1={layout.height} x2={layout.width} y2={layout.height} stroke=\"#ccc\" strokeWidth={1} />\n {rTicks.map((tick, i) => (\n <g key={`oxtick-${i}`} transform={`translate(${tick.pixel},${layout.height})`}>\n <line y2={5} stroke=\"#ccc\" strokeWidth={1} />\n <text y={18} textAnchor=\"middle\" fontSize={10} fill=\"#666\">{tick.label}</text>\n </g>\n ))}\n {props.rLabel && (\n <text x={layout.width / 2} y={layout.height + 40} textAnchor=\"middle\" fontSize={12} fill=\"#333\">\n {props.rLabel}\n </text>\n )}\n\n {/* Category axis (left) */}\n <line x1={0} y1={0} x2={0} y2={layout.height} stroke=\"#ccc\" strokeWidth={1} />\n {categoryTicks.map((tick, i) => (\n <g key={`oytick-${i}`} transform={`translate(0,${tick.pixel})`}>\n <line x2={-5} stroke=\"#ccc\" strokeWidth={1} />\n <text x={-8} textAnchor=\"end\" dominantBaseline=\"middle\" fontSize={10} fill=\"#666\">\n {tick.label}\n </text>\n </g>\n ))}\n {props.oLabel && (\n <text\n x={-(props.margin?.left ?? 40) + 15}\n y={layout.height / 2}\n textAnchor=\"middle\"\n fontSize={12}\n fill=\"#333\"\n transform={`rotate(-90, ${-(props.margin?.left ?? 40) + 15}, ${layout.height / 2})`}\n >\n {props.oLabel}\n </text>\n )}\n </g>\n )\n }\n}\n\n// ── StreamOrdinalFrame SSR ───────────────────────────────────────────\n\nfunction renderOrdinalFrame(props: StreamOrdinalFrameProps): string {\n const defaultMargin = { top: 20, right: 20, bottom: 30, left: 40 }\n const size = props.size || [500, 400]\n const margin = { ...defaultMargin, ...props.margin }\n const width = size[0] - margin.left - margin.right\n const height = size[1] - margin.top - margin.bottom\n\n const projection = props.projection || \"vertical\"\n const isRadial = projection === \"radial\"\n\n const pipelineConfig: OrdinalPipelineConfig = {\n chartType: props.chartType,\n windowSize: props.windowSize ?? 10000,\n windowMode: props.windowMode ?? \"sliding\",\n extentPadding: props.extentPadding ?? 0.05,\n projection,\n oAccessor: props.oAccessor,\n rAccessor: props.rAccessor,\n colorAccessor: props.colorAccessor,\n stackBy: props.stackBy,\n groupBy: props.groupBy,\n categoryAccessor: props.categoryAccessor,\n valueAccessor: props.valueAccessor,\n timeAccessor: props.timeAccessor,\n rExtent: props.rExtent,\n oExtent: props.oExtent,\n barPadding: props.barPadding,\n innerRadius: props.innerRadius,\n normalize: props.normalize,\n startAngle: props.startAngle,\n bins: props.bins,\n showOutliers: props.showOutliers,\n showIQR: props.showIQR,\n amplitude: props.amplitude,\n oSort: props.oSort,\n connectorAccessor: props.connectorAccessor,\n connectorStyle: props.connectorStyle,\n dynamicColumnWidth: props.dynamicColumnWidth,\n pieceStyle: props.pieceStyle,\n summaryStyle: props.summaryStyle,\n colorScheme: props.colorScheme,\n barColors: props.barColors\n }\n\n const store = new OrdinalPipelineStore(pipelineConfig)\n\n // Ingest bounded data\n if (props.data) {\n store.ingest({ inserts: props.data, bounded: true })\n }\n\n // Compute scene graph\n store.computeScene({ width, height })\n\n if (!store.scales || store.scene.length === 0) {\n return ReactDOMServer.renderToStaticMarkup(\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"stream-ordinal-frame\" width={size[0]} height={size[1]} />\n )\n }\n\n // Convert scene nodes to SVG\n const dataMarks = store.scene\n .map((node, i) => ordinalSceneNodeToSVG(node, i))\n .filter(Boolean)\n\n // Generate axes\n const showAxes = props.showAxes !== false\n const axes = showAxes\n ? generateOrdinalAxesSVG(store, { width, height }, props)\n : null\n\n // Title\n const title = props.title && typeof props.title === \"string\" ? (\n <text\n x={size[0] / 2}\n y={16}\n textAnchor=\"middle\"\n fontSize={14}\n fontWeight=\"bold\"\n fill=\"#333\"\n >\n {props.title}\n </text>\n ) : null\n\n // Background\n const bg = props.background ? (\n <rect x={0} y={0} width={width} height={height} fill={props.background} />\n ) : null\n\n // For radial projection, translate to center\n const translateX = isRadial ? margin.left + width / 2 : margin.left\n const translateY = isRadial ? margin.top + height / 2 : margin.top\n\n const svgElement = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={`stream-ordinal-frame${props.className ? ` ${props.className}` : \"\"}`}\n width={size[0]}\n height={size[1]}\n >\n <g transform={`translate(${translateX},${translateY})`}>\n {bg}\n {dataMarks}\n {axes}\n </g>\n {title}\n </svg>\n )\n\n return ReactDOMServer.renderToStaticMarkup(svgElement)\n}\n\n// ── Public API ────────────────────────────────────────────────────────────\n\nexport function renderToStaticSVG(\n frameType: FrameType,\n props: StreamXYFrameProps | StreamNetworkFrameProps | StreamOrdinalFrameProps\n): string {\n switch (frameType) {\n case \"xy\":\n return renderStreamXYFrame(props as StreamXYFrameProps)\n case \"ordinal\":\n return renderOrdinalFrame(props as StreamOrdinalFrameProps)\n case \"network\":\n return renderNetworkFrame(props as StreamNetworkFrameProps)\n default:\n throw new Error(\n `Unknown frame type: ${frameType}. Must be \"xy\", \"ordinal\", or \"network\".`\n )\n }\n}\n\nexport function renderXYToStaticSVG(props: StreamXYFrameProps): string {\n return renderStreamXYFrame(props)\n}\n\nexport function renderOrdinalToStaticSVG(props: StreamOrdinalFrameProps): string {\n return renderOrdinalFrame(props)\n}\n\nexport function renderNetworkToStaticSVG(props: StreamNetworkFrameProps): string {\n return renderNetworkFrame(props)\n}\n"],"names":["resolveAccessor","resolveLabelFn","d3Hierarchy","d3Tree","d3Cluster","d3Treemap","d3Pack","d3Partition","d3Quantile","ReactDOMServer.renderToStaticMarkup","d3Arc"],"mappings":"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"}
|